aboutsummaryrefslogtreecommitdiff
path: root/src/immediate_extend.v
blob: 404c43d78ecb67bd6af4fade0fc59d4a9de40970 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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