여기서는 4.4장에서 완성했던 기존의 Single-Cycle Datapath를 Pipelined Datapath로 바꾸는 과정을 살펴볼 예정이다. 우선 회로를 아래 다섯 단계로 나누어 표시해보자.
위 이미지 (강의 교재 figure 4.33) 과 같이 나눌 수 있는데, 여기서 파란색 선은 다른 단계로 데이터가 전달되는 상황임을 표시한 것이다. 위쪽 파란 선은 MEM에서 IF로, 아래쪽 파란 선은 WB에서 ID로 데이터가 전달되는 부분이다. WB -> ID의 Right-to-Left 상황은 Data Hazard와 Control Hazard를 유발한다. 이것을 해결하는 방법은 둘째 치고, 각 단계에서 각기 다른 Instruction을 수행해야 하므로 단계마다 다른 데이터를 이용해 연산을 해야한다. 따라서 단계의 사이사이에 사용할 데이터를 저장하는 레지스터를 추가한다.
추가된 레지스터의 이름은 양쪽의 두 단계의 이름을 합친 IF/ID, ID/EX, EX/MEM, MEM/WB이다. 이 레지스터들도 State Element이므로 각 클럭마다 상태가 업데이트 되어야 한다. 따라서 위 이미지 (강의 교재 figure 4.35) 의 회로에는 이 레지스터들과 PC에 Clock 입력이 있어야 한다.
파이프라인의 상태를 표현할 때 우리는 다음 두 가지 방식을 사용할 것이다.
제일 첫 번째 단계인 IF 단계의 다이어그램이다. 아래 이미지 (강의 교재 figure 4.36) 를 보고 Single-clock-cycle 다이어그램이 어떻게 생겼는지 살펴보길 바란다.
이번에는 WB 단계인데, 우선 이미지 (강의 교재 figure 4.38) 부터 보자.
다른 단계를 건너뛰고 바로 WB 단계를 소개하는 이유는 위 회로에서 오류가 하나 있기 때문이다. 그것은 바로 ID 단계의 Write Data로 값을 넘기는 부분인데, 이대로 회로를 사용한다면 넘어간 데이터가 쓰여질 레지스터는 ID 단계에서 실행 중인 Instruction의 Write Register이어서 엉뚱한 곳에 쓰이게 된다. 이를 해결하기 위해서는 WB 단계의 Instruction에서 사용하는 Write Register 넘버를 같이 넘겨줘야 한다. 그렇게 구성한 회로는 아래 이미지 (강의 교재 figur 4.41) 에 있다.
지금까지 작성한 회로는 동작 상으로는 문제가 없겠지만 뭔가 부족한 점이 하나 있다. 바로 Control의 부재이다. Control 신호도 앞선 데이터들과 마찬가지로 Instruction마다 다르기 때문에 단계가 넘어갈 때마다 레지스터에 저장해 주어야 한다. 그러나 모든 신호를 매번 다 저장하면 공간낭비이므로 단계별로 사용하는 신호를 나눈 다음, 더이상 필요없는 신호들은 다음 단계로 갈 때 저장하지 않도록 한다. 아래 표 (강의 교재 figure 4.49) 는 단계 별로 Control 신호를 나눈 것이다.
그리고 Control 신호를 저장할 레지스터를 덧붙인 상태의 회로는 아래 (강의 교재 figure 4.51) 와 같이 생겼다.
완성!은 아직 아니고 Hazard를 해결하는 걸 조금 더 해야한다. 그건 다음 포스팅에서 다룰 예정이다.
[컴퓨터 구조] 4.14 Fallacies and Pitfalls (0) | 2020.10.26 |
---|---|
[컴퓨터 구조] 4.7 Data Hazards: Forwarding versus Stalling (0) | 2020.10.26 |
[컴퓨터 구조] 4.5 An Overview of Pipelining(2) (0) | 2020.10.26 |
[컴퓨터 구조] 4.5 An Overview of Pipelining(1) (0) | 2020.10.26 |
[컴퓨터 구조] 4.4 A Simple Implementation Scheme (0) | 2020.10.26 |
댓글 영역