Fix wrong jump calculation in case of JALR

This commit is contained in:
Markus Wegmann 2017-01-09 22:21:40 +01:00
parent e339efd56e
commit c6f2cacb30
3 changed files with 7 additions and 2 deletions

View file

@ -323,8 +323,8 @@ module riscv_decoder
`ifdef NO_JUMP_ADDER
jump_in_id = BRANCH_JALR;
// Calculate jump target in EX
alu_op_a_mux_sel_o = OP_A_CURRPC;
alu_op_b_mux_sel_o = OP_B_REGA_OR_FWD;
alu_op_a_mux_sel_o = OP_A_REGA_OR_FWD;
alu_op_b_mux_sel_o = OP_B_ZERO;
imm_b_mux_sel_o = IMMB_SB;
alu_operator_o = ALU_ADD;
regfile_alu_we = 1'b1;

View file

@ -848,6 +848,10 @@ module riscv_id_stage
`endif // THREE_PORT_REG_FILE
OP_B_IMM: operand_b = imm_b;
OP_B_BMASK: operand_b = $unsigned(operand_b_fw_id[4:0]);
// CONFIG_REGION: NO_JUMP_ADDER
`ifdef NO_JUMP_ADDER
OP_B_ZERO: operand_b = '0;
`endif
default: operand_b = operand_b_fw_id;
endcase // case (alu_op_b_mux_sel)
end

View file

@ -227,6 +227,7 @@ parameter OP_B_REGC_OR_FWD = 3'b001;
parameter OP_B_IMM = 3'b010;
parameter OP_B_REGA_OR_FWD = 3'b011;
parameter OP_B_BMASK = 3'b100;
parameter OP_B_ZERO = 3'b101;
// immediate b selection
parameter IMMB_I = 4'b0000;