@@ -21,7 +21,7 @@ module ControlUnit (
21
21
opcode_t OPC ;
22
22
always_comb begin
23
23
OPC = opcode_t ' (instruction[6 : 0 ]);
24
- OPC = (OPC == `OPC_JALR ) ? I_TYPE : OPC ;
24
+ OPC = (OPC == `OPC_JALR ) ? I_TYPE : OPC ; // TODO: BU BÖYLE OLMAZ!!!!!! instruction[6:0] ile kullanmayınca dev tuzak
25
25
end
26
26
27
27
always_comb begin
@@ -49,14 +49,16 @@ module ControlUnit (
49
49
`FN3_SLT : ALU_Operation = `ALU_SLT ; // SLT, SLTI
50
50
`FN3_SLTU : ALU_Operation = `ALU_SLTU ; // SLTU, SLTIU
51
51
`FN3_XOR : ALU_Operation = `ALU_XOR ; // XOR, XORI
52
- `FN3_SRL : ALU_Operation = `ALU_SRL ; // SRL, SRA
52
+ `FN3_SRL : ALU_Operation = (fn7 == `FN7_SRL ) ? `ALU_SRL : `ALU_SRA ;
53
53
`FN3_OR : ALU_Operation = `ALU_OR ; // OR, ORI
54
54
`FN3_AND : ALU_Operation = `ALU_AND ; // AND, ANDI
55
55
default : ALU_Operation = `ALU_ADD ;
56
56
endcase
57
57
end else if (OPC == I_TYPE ) begin
58
58
unique case (fn3)
59
59
`FN3_ADDI : ALU_Operation = `ALU_ADD ;
60
+ `FN3_SLLI : ALU_Operation = `ALU_SLL ;
61
+ `FN3_SRLI : ALU_Operation = (fn7 == `FN7_SRL ) ? `ALU_SRL : `ALU_SRA ;
60
62
`FN3_SLTI : ALU_Operation = `ALU_SLT ;
61
63
`FN3_SLTIU : ALU_Operation = `ALU_SLTU ;
62
64
`FN3_XORI : ALU_Operation = `ALU_XOR ;
@@ -107,9 +109,9 @@ module ControlUnit (
107
109
end
108
110
109
111
always_comb begin
110
- casez (OPC )
112
+ casez (instruction[ 6 : 0 ] )
111
113
J_TYPE : RF_wdata_sel = `RF_WDATA_SEL_PC ;
112
- R_TYPE , I_TYPE , B_TYPE , U_TYPE : RF_wdata_sel = ` RF_WDATA_SEL_ALU ;
114
+ R_TYPE , I_TYPE , B_TYPE , U_TYPE : RF_wdata_sel = (instruction[ 6 : 0 ] != `OPC_JALR ) ? ` RF_WDATA_SEL_ALU: `RF_WDATA_SEL_PC ;
113
115
S_TYPE : RF_wdata_sel = `RF_WDATA_SEL_DM ;
114
116
default : RF_wdata_sel = 2'b00 ;
115
117
endcase
0 commit comments