I-TYPE
IL은 R과는 달리 imm 이 추가된 Extend를 추가한 기능이 들어가야하고 그에따라 다른값이 ALU에 들어가야한다. AluSrcMux를 통해 1이 들어가게 해준다.
I가 달라진건 R은 alu에서 나온걸 mux선택으로 받았는데 I는 ram 에서 나온걸 mux선택으로 받는다.
IL은 rd = M( rs1 + imm)
I는 rd = (rs + imm) 이다.
달라진점은 M인 RAM을 거치지 않는다. 그래서 RFWriteDataSrcMuxSel 을 0 으로 줘서 ALU의 값을 바로 받아온다.
S-TYPE
S는 M[rs1 + imm] = rs2 이다. 새로운 extType가 생겼고 새 연산을 rs1+imm을 해준 후 출력은 rs2가 M인 RAM으로 들어가야한다.
B- TYPE
B는 if문이 들어가고 PC 로 imm값이 추가된다.
branch가 추가되어야하고 btaken이 추가되었다. 둘다 1이 나올 때 동작한다.
alu에 있는 btaken이 if문 연산을 해준다.
U- TYPE
J-TYPE
J : rd = PC + 4 ; PC += imm;
JA : rd = PC + 4; PC = rs1 + imm;
J는 기존에 있는 + 4 가 되는 branch가 이어져 있는 MUX = 0을 사용한다. PC += imm도 이 MUX의 = 1 이 되게 설정하면 된다.
JA도 MUX = 0 사용. PC = rs1 + imm을 ADDER로 추가하면 이러하다.
하지만 ADDER는 MUX에 비해 몹시 큰 module이고 4 + PC값이 ALU로부터 나오는데 이 값이 추가된 회색의 MUX때문에 저장되지 않는다.
J :
rd = PC + 4 초록색, 그대로 냅두고
PC += imm 파란색 쓰던거 사용. 보라색선 보라 MUX--> 노란색선
JA :
rd = PC + 4 초록색 , 그대로 냅두고
PC = rs1 + imm 노란색선 --> 보라 MUX --> 노란색
'공부방 > Verilog_vivado' 카테고리의 다른 글
AMBA_ AXI4 (0) | 2024.07.13 |
---|---|
AXI4-Lite Read Address _ Read Data (0) | 2024.06.15 |
CPU 설계 두 번째 발자국 RV32I_ISA : R, IL (0) | 2024.06.01 |
CPU_설계 첫걸음.SV Register File & ALU (0) | 2024.05.30 |
FIFO.SV (0) | 2024.05.24 |