Files
design-verification-onboard…/src/verilog/cpu/sign_extend.sv
T
2026-09-26 15:28:36 -04:00

21 lines
551 B
Systemverilog

module sign_extend (
input logic [31:0] instr_i,
input logic [ 1:0] imm_src_i,
output logic [31:0] imm_ext_o,
output logic instr_invld_o
);
always_comb begin
imm_ext_o = '0;
instr_invld_o = 1'b0;
case (imm_src_i)
2'b00: imm_ext_o = {{20{instr_i[31]}}, instr_i[31:20]};
2'b01: imm_ext_o = {{20{instr_i[31]}}, instr_i[31:25], instr_i[11:7]};
2'b10: imm_ext_o = {{20{instr_i[31]}}, instr_i[7], instr_i[30:25], instr_i[11:8], 1'b0};
default: instr_invld_o = 1'b1;
endcase
end
endmodule