* Flip-Flop (=pipeline register)
: 새 clk에 이전 state를 저장해두었다가 다음 스테이지로 넘겨줌
IF/ID, ID/EX, EX/MEM, MEM/WB
* Pipleline Control (주된 목적: mux의 시그널)
- RegWrite: WB에서 사용, 레지스터에 쓸거냐
- ALUSrc: 두번째 피연산자로 rt, imm 중에 뭐 쓸거냐
- ALUOp: ALU control에서 생성, ALU에서 어떤 연산할지 알려줌
- Zero: beq, bne 조건 체크
- RegDst: R, I-format의 목적지 필드가 다름 -> rt[16-20], rd[15-11] 중에 뭐 쓸거냐
rt(I-type) 쓸거면 0, rd(R-type) 쓸거면 1
- Branch: 분기 명령어냐, Branch랑 Zero가 모두 1이면 PCSrc가 1이다!!
- PCSrc: 1이면 pc에 분기하는 주소 집어넣음
- MemWrite: 메모리에 쓸거냐
- MemRead: 메모리 읽을거냐
- MemtoReg: 레지스터에 메모리에서 읽은 값 넣을거냐(1),
아니면 그냥 ALU 계산 값 넣을거냐(0)
* 각 스테이지에 어떤 컨트롤이 필요하냐?
- IF
- ID
- EX: RegDst, ALUSrc, ALUop[1:0]
- MEM: Branch, MemRead, MemWrite
- WB: MemtoReg, RegWrite (여기서 필요한데 위치는 ID)
*Pipeline Control은 ID에서 생성됨. 하지만 사용은 나중에 하므로 FF에 저장해둔다!