diff options
author | Flavian Kaufmann <flavian@flaviankaufmann.ch> | 2024-05-12 21:27:41 +0200 |
---|---|---|
committer | Flavian Kaufmann <flavian@flaviankaufmann.ch> | 2024-05-12 21:27:41 +0200 |
commit | deb7d0a6fc76d5250c238d479cf97d4755abef01 (patch) | |
tree | 395c266ff4757e83e151d1286d6d2388e63d9a9c /src/immediate_extend.v | |
parent | 008059fbe4e960a10bb4c444013129e0aaa02818 (diff) | |
download | riscv_cpu-deb7d0a6fc76d5250c238d479cf97d4755abef01.tar.gz riscv_cpu-deb7d0a6fc76d5250c238d479cf97d4755abef01.zip |
refactoring
Diffstat (limited to 'src/immediate_extend.v')
-rw-r--r-- | src/immediate_extend.v | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/immediate_extend.v b/src/immediate_extend.v new file mode 100644 index 0000000..749cf2b --- /dev/null +++ b/src/immediate_extend.v @@ -0,0 +1,20 @@ +module immediate_extend ( + input [31:0] instr, + input [2:0] imm_src, + output reg [31:0] imm +); + + +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 + endcase +end + + +endmodule |