RISC-V 컴퓨터구조 - 4. The Processor - 4.6. Pipelined Datapath and Control
Section 4.4 에서 살펴봤던 Single-cycle Datapath는 다음과 같다.
파란색으로 표시된 곳 빼고는 다 앞에서 뒤로 data가 전파된다. 두 개의 exception은 writeback stage와 Next PC value의 selection이다.
잘 생각해보면 이 두개가 data hazard와 control hazard의 요인이라고 볼 수 있다.
일단 한 번 pipeline의 예시를 보자.
이렇게 다섯 단계로 나뉜 pipeline의 중간에는 register가 있어 값을 저장할 수 있어야 한다. 만약에 register의 read와 write signal이 겹쳐도 해결할 방안이 있는데, clock cycle의 first half에는 written 할 수 있게 하고, second half에는 read 할 수 있게 하면 된다. 생각을 해봤는데, 예를 들어 posedge clk 이라고 하면 posedge에서 바로 write를 하고 negative edge signal에서 read를 하면 되지 않을까 싶다.
다음 그림에 pipeline register를 포함한 pipelined datapath를 나타냈다.
한 clock cycle 마다 다음 stage로 전파된다. 4개의 register가 있는데 마지막 WB stage에는 pipeline register가 없는 것을 볼 수 있다.
일단 예시를 보면서 이해해 보도록 하자. Load instruction부터 볼건데, 그 이유는 load instruction이 모든 stage를 다 사용하기 때문이다. 오른쪽 반이 칠해진 경우는 read하는 경우이고, 왼쪽 반이 칠해진 경우는 write하는 경우이다.
IF stage에서 일단 PC의 주소가 읽혔고, 이 주소를 IF/ID register에 저장한다. PC는 4만큼 증가하고, 다시 PC에 저장된다. 다음 clk signal이 들어왔을 때 그 주소를 읽는다. 혹시 모르니 (나중에 beq에서 사용될 수도 있음) 이 또한 IF/ID에 저장한다.
일단 IF/ID에 써져 있는대로 register의 값을 읽고, register의 주소와 값, 그리고 immediate value의 값을 ID/EX에 저장한다.
비슷한 방법으로 앞으로 쭉쭉 나가는데, 여기서 주의할 점은 만약 뒷부분에서 읽어야 할 값이 있다면 뒤까지 전파를 해줘야 한다는 것이다. 예를 들어, Write register의 경우 ID/EX에 저장된 후에도 MEM/WB에서 또 필요하므로 이 값을 앞으로 propagation 해줘야 한다. 이를 고려한 그림은 다음과 같다. 꼭 Write register가 아니라도 필요한 값은 앞으로 propagation 하는 것이 필요하다.
Pipelined Control
이제 Pipeline 시스템에서 어떻게 Control이 되는지 알아보도록 하자. 그림은 앞에 Control 했던 것과 비슷한데, 중간에 register가 포함되었다는 것이 조금 다르다.
PC는 each clk cycle에 잘 write된다고 가정하자. 따라서 PC에 대한 write control signal은 따로 없다. 같은 이유로, IF/ID, ID/EX, EX/MEM, MEM/WB에 대한 Write Control Signal은 따로 없다. 왜냐하면 each clock cycle에 무조건 written되기 때문이다. 각 단계의 control signal에 대해 살펴보자.
1. IF: Instruction Memory를 읽고 PC를 write하는 control signal은 항상 asserted 되기 때문에 이 pipeline stage 의 control signal은 없다.
2. ID/EX: instruction의 항상 똑같은 자리에서 rs1, rs2를 읽으면 되기 때문에 특별한 것이 없다.
3. EX/address calculation: ALUOp(ALU Operation의 종류 선택)와 ALUSrc(Imm 더할건지 아니면 rs2 쓸건지 선택)의 signal이 필요하다.
4. MEM: 여기에는 Branch(beq), MemRead(ld), MemWrite(sd)의 Control line이 필요하다.
5. WB: 두 Control Signal은 MemtoReg와(ALU와 Memory Data중 택1) RegWrite(Write하는 Signal)이다.
거의 4.4절과 동일하다고 볼 수 있다.
이제 이러한 control signal 또한 앞 stage로 가면서 propagation되어야 하므로, 다음과 같이 설계할 수 있다. 일단 Control Signal은 EX 단계에서부터 발생하므로, 여기서 WB, MEM, EX의 Control Signal을 다 받아서 앞으로 propagation 한다.
출처 : Patterson, David A., and John L. Henessy. Computer Architecture and design the hardware/software interface. Cambridge, MA: Morgan Kaufman Publishers, 2018. Print.