aboutsummaryrefslogtreecommitdiff
path: root/src/immediate_extend.v
diff options
context:
space:
mode:
authorFlavian Kaufmann <flavian@flaviankaufmann.ch>2024-05-13 18:33:28 +0200
committerFlavian Kaufmann <flavian@flaviankaufmann.ch>2024-05-13 18:33:28 +0200
commit59bc2fc1f75dbda7f8c36409bcf3f5198bfc3eaa (patch)
tree85092182470cece8cbbf446d15cc513900ab6c5b /src/immediate_extend.v
parent9c7d7fd782f70d99120ce6ac45a897606b52c878 (diff)
downloadriscv_cpu-59bc2fc1f75dbda7f8c36409bcf3f5198bfc3eaa.tar.gz
riscv_cpu-59bc2fc1f75dbda7f8c36409bcf3f5198bfc3eaa.zip
refactored fsm output logic
Diffstat (limited to 'src/immediate_extend.v')
-rw-r--r--src/immediate_extend.v13
1 files changed, 7 insertions, 6 deletions
diff --git a/src/immediate_extend.v b/src/immediate_extend.v
index 404c43d..6e39e7d 100644
--- a/src/immediate_extend.v
+++ b/src/immediate_extend.v
@@ -5,15 +5,16 @@ module immediate_extend (
output reg [31:0] imm
);
+`include "include/consts.vh"
always @ (*) begin
case (imm_src)
- 3'b010: imm <= { {21{instr[31]}}, instr[30:20] }; // I
- 3'b011: imm <= { {21{instr[31]}}, instr[30:25], instr[11:7] }; // S
- 3'b100: imm <= { {20{instr[31]}}, instr[7], instr[30:25], instr[11:8], 1'b0 }; // B
- 3'b101: imm <= { instr[31:12], 12'b0 }; // U
- 3'b110: imm <= { {12{instr[31]}}, instr[19:12], instr[20], instr[30:21], 1'b0 }; // J
- default: imm <= 32'b0; // Unknown
+ INSTR_FORMAT_I: imm <= { {21{instr[31]}}, instr[30:20] }; // I
+ INSTR_FORMAT_S: imm <= { {21{instr[31]}}, instr[30:25], instr[11:7] }; // S
+ INSTR_FORMAT_B: imm <= { {20{instr[31]}}, instr[7], instr[30:25], instr[11:8], 1'b0 }; // B
+ INSTR_FORMAT_U: imm <= { instr[31:12], 12'b0 }; // U
+ INSTR_FORMAT_J: imm <= { {12{instr[31]}}, instr[19:12], instr[20], instr[30:21], 1'b0 }; // J
+ default: imm <= 32'b0; // Unknown
endcase
end