Add RISC-V opcodes and memory operation codes for atomics
This commit is contained in:
parent
52ba930638
commit
a988adfec8
|
@ -561,7 +561,7 @@ hazard3_csr #(
|
|||
.trap_enter_soon (m_trap_enter_soon),
|
||||
.trap_enter_vld (m_trap_enter_vld),
|
||||
.trap_enter_rdy (m_trap_enter_rdy),
|
||||
.loadstore_dphase_pending (!xm_memop[3]),
|
||||
.loadstore_dphase_pending (xm_memop != MEMOP_NONE),
|
||||
.mepc_in (m_exception_return_addr),
|
||||
.wfi_stall_clear (m_wfi_stall_clear),
|
||||
|
||||
|
@ -603,7 +603,7 @@ always @ (posedge clk or negedge rst_n) begin
|
|||
// this cycle, and on the next cycle the trap entry will be asserted,
|
||||
// suppressing any load/store that may currently be in stage X.
|
||||
`ifdef FORMAL
|
||||
assert(!xm_memop[3]); // Not NONE
|
||||
assert(xm_memop != MEMOP_NONE);
|
||||
`endif
|
||||
xm_except <= xm_memop <= MEMOP_LBU ? EXCEPT_LOAD_FAULT : EXCEPT_STORE_FAULT;
|
||||
xm_wfi <= 1'b0;
|
||||
|
@ -644,7 +644,7 @@ assign f_jump_req = x_jump_req || m_trap_enter_vld;
|
|||
assign f_jump_target = m_trap_enter_vld ? m_trap_addr : x_jump_target;
|
||||
assign x_jump_not_except = !m_trap_enter_vld;
|
||||
|
||||
wire m_bus_stall = !xm_memop[3] && !bus_dph_ready_d;
|
||||
wire m_bus_stall = xm_memop != MEMOP_NONE && !bus_dph_ready_d;
|
||||
assign m_stall = m_bus_stall ||
|
||||
(m_trap_enter_vld && !m_trap_enter_rdy && !m_trap_is_irq) ||
|
||||
(xm_wfi && !m_wfi_stall_clear);
|
||||
|
|
|
@ -52,15 +52,27 @@ localparam ALUSRCA_PC = 1'h1;
|
|||
localparam ALUSRCB_RS2 = 1'h0;
|
||||
localparam ALUSRCB_IMM = 1'h1;
|
||||
|
||||
localparam MEMOP_LW = 4'h0;
|
||||
localparam MEMOP_LH = 4'h1;
|
||||
localparam MEMOP_LB = 4'h2;
|
||||
localparam MEMOP_LHU = 4'h3;
|
||||
localparam MEMOP_LBU = 4'h4;
|
||||
localparam MEMOP_SW = 4'h5;
|
||||
localparam MEMOP_SH = 4'h6;
|
||||
localparam MEMOP_SB = 4'h7;
|
||||
localparam MEMOP_NONE = 4'h8;
|
||||
localparam MEMOP_LW = 5'h00;
|
||||
localparam MEMOP_LH = 5'h01;
|
||||
localparam MEMOP_LB = 5'h02;
|
||||
localparam MEMOP_LHU = 5'h03;
|
||||
localparam MEMOP_LBU = 5'h04;
|
||||
localparam MEMOP_SW = 5'h05;
|
||||
localparam MEMOP_SH = 5'h06;
|
||||
localparam MEMOP_SB = 5'h07;
|
||||
|
||||
localparam MEMOP_LR_W = 5'h08;
|
||||
localparam MEMOP_SC_W = 5'h09;
|
||||
localparam MEMOP_AMOSWAP_W = 5'h0a;
|
||||
localparam MEMOP_AMOADD_W = 5'h0b;
|
||||
localparam MEMOP_AMOXOR_W = 5'h0c;
|
||||
localparam MEMOP_AMOAND_W = 5'h0d;
|
||||
localparam MEMOP_AMOOR_W = 5'h0e;
|
||||
localparam MEMOP_AMOMIN_W = 5'h0f;
|
||||
localparam MEMOP_AMOMAX_W = 5'h10;
|
||||
localparam MEMOP_AMOMINU_W = 5'h11;
|
||||
localparam MEMOP_AMOMAXU_W = 5'h12;
|
||||
localparam MEMOP_NONE = 5'h1f;
|
||||
|
||||
localparam BCOND_NEVER = 2'h0;
|
||||
localparam BCOND_ALWAYS = 2'h1;
|
||||
|
|
|
@ -7,7 +7,7 @@ parameter W_REGADDR = 5,
|
|||
|
||||
parameter W_ALUOP = 6,
|
||||
parameter W_ALUSRC = 1,
|
||||
parameter W_MEMOP = 4,
|
||||
parameter W_MEMOP = 5,
|
||||
parameter W_BCOND = 2,
|
||||
parameter W_SHAMT = 5,
|
||||
|
||||
|
|
|
@ -67,6 +67,19 @@ localparam RV_DIVU = 32'b0000001??????????101?????0110011;
|
|||
localparam RV_REM = 32'b0000001??????????110?????0110011;
|
||||
localparam RV_REMU = 32'b0000001??????????111?????0110011;
|
||||
|
||||
// A extension
|
||||
localparam RV_LR_W = 32'b00010??00000?????010?????0101111;
|
||||
localparam RV_SC_W = 32'b00011????????????010?????0101111;
|
||||
localparam RV_AMOSWAP_W = 32'b00001????????????010?????0101111;
|
||||
localparam RV_AMOADD_W = 32'b00000????????????010?????0101111;
|
||||
localparam RV_AMOXOR_W = 32'b00100????????????010?????0101111;
|
||||
localparam RV_AMOAND_W = 32'b01100????????????010?????0101111;
|
||||
localparam RV_AMOOR_W = 32'b01000????????????010?????0101111;
|
||||
localparam RV_AMOMIN_W = 32'b10000????????????010?????0101111;
|
||||
localparam RV_AMOMAX_W = 32'b10100????????????010?????0101111;
|
||||
localparam RV_AMOMINU_W = 32'b11000????????????010?????0101111;
|
||||
localparam RV_AMOMAXU_W = 32'b11100????????????010?????0101111;
|
||||
|
||||
// Zba (address generation)
|
||||
localparam RV_SH1ADD = 32'b0010000??????????010?????0110011;
|
||||
localparam RV_SH2ADD = 32'b0010000??????????100?????0110011;
|
||||
|
|
Loading…
Reference in New Issue