mirror of
https://github.com/openhwgroup/cva5.git
synced 2025-04-20 12:07:53 -04:00
resolved enum conflicts
This commit is contained in:
parent
62ce33642f
commit
c8121c5f79
5 changed files with 26 additions and 42 deletions
|
@ -44,15 +44,15 @@ module amo_alu
|
|||
/* verilator lint_off CASEINCOMPLETE */
|
||||
always_comb begin
|
||||
case (amo_alu_inputs.op)// <--unique as not all codes are in use
|
||||
AMO_SWAP : result = amo_alu_inputs.rs2;
|
||||
AMO_ADD : result = amo_alu_inputs.rs1_load + amo_alu_inputs.rs2;
|
||||
AMO_XOR : result = amo_alu_inputs.rs1_load ^ amo_alu_inputs.rs2;
|
||||
AMO_AND : result = amo_alu_inputs.rs1_load & amo_alu_inputs.rs2;
|
||||
AMO_OR : result = amo_alu_inputs.rs1_load | amo_alu_inputs.rs2;
|
||||
AMO_MIN : result = rs1_smaller_than_rs2 ? amo_alu_inputs.rs1_load : amo_alu_inputs.rs2;
|
||||
AMO_MAX : result = rs1_smaller_than_rs2 ? amo_alu_inputs.rs2 : amo_alu_inputs.rs1_load;
|
||||
AMO_MINU : result = rs1_smaller_than_rs2 ? amo_alu_inputs.rs1_load : amo_alu_inputs.rs2;
|
||||
AMO_MAXU : result = rs1_smaller_than_rs2 ? amo_alu_inputs.rs2 : amo_alu_inputs.rs1_load;
|
||||
AMO_SWAP_FN5 : result = amo_alu_inputs.rs2;
|
||||
AMO_ADD_FN5 : result = amo_alu_inputs.rs1_load + amo_alu_inputs.rs2;
|
||||
AMO_XOR_FN5 : result = amo_alu_inputs.rs1_load ^ amo_alu_inputs.rs2;
|
||||
AMO_AND_FN5 : result = amo_alu_inputs.rs1_load & amo_alu_inputs.rs2;
|
||||
AMO_OR_FN5 : result = amo_alu_inputs.rs1_load | amo_alu_inputs.rs2;
|
||||
AMO_MIN_FN5 : result = rs1_smaller_than_rs2 ? amo_alu_inputs.rs1_load : amo_alu_inputs.rs2;
|
||||
AMO_MAX_FN5 : result = rs1_smaller_than_rs2 ? amo_alu_inputs.rs2 : amo_alu_inputs.rs1_load;
|
||||
AMO_MINU_FN5 : result = rs1_smaller_than_rs2 ? amo_alu_inputs.rs1_load : amo_alu_inputs.rs2;
|
||||
AMO_MAXU_FN5 : result = rs1_smaller_than_rs2 ? amo_alu_inputs.rs2 : amo_alu_inputs.rs1_load;
|
||||
endcase
|
||||
end
|
||||
/* verilator lint_on CASEINCOMPLETE */
|
||||
|
|
|
@ -103,7 +103,7 @@ module axi_to_arb
|
|||
|
||||
|
||||
//AMO read modify write support ****************************************************
|
||||
assign read_modify_write = l2.is_amo && (l2.amo_type_or_burst_size != AMO_LR || l2.amo_type_or_burst_size != AMO_SC);
|
||||
assign read_modify_write = l2.is_amo && (l2.amo_type_or_burst_size != AMO_LR_FN5 || l2.amo_type_or_burst_size != AMO_SC_FN5);
|
||||
|
||||
always_ff @ (posedge clk) begin
|
||||
if (rst)
|
||||
|
|
|
@ -329,8 +329,8 @@ module decode_and_issue
|
|||
|
||||
assign amo_op = CONFIG.INCLUDE_AMO ? (opcode_trim == AMO_T) : 1'b0;
|
||||
assign amo_type = decode.instruction[31:27];
|
||||
assign store_conditional = (amo_type == AMO_SC);
|
||||
assign load_reserve = (amo_type == AMO_LR);
|
||||
assign store_conditional = (amo_type == AMO_SC_FN5);
|
||||
assign load_reserve = (amo_type == AMO_LR_FN5);
|
||||
|
||||
generate if (CONFIG.INCLUDE_AMO) begin
|
||||
assign ls_inputs.amo.is_lr = load_reserve;
|
||||
|
|
|
@ -38,22 +38,6 @@ package riscv_types;
|
|||
logic [6:0] opcode;
|
||||
} common_instruction_t;
|
||||
|
||||
typedef enum logic [6:0] {
|
||||
LUI = 7'b0110111,
|
||||
AUIPC = 7'b0010111,
|
||||
JAL = 7'b1101111,
|
||||
JALR = 7'b1100111,
|
||||
BRANCH = 7'b1100011,
|
||||
LOAD = 7'b0000011,
|
||||
STORE = 7'b0100011,
|
||||
ARITH_IMM = 7'b0010011,
|
||||
ARITH = 7'b0110011,//includes mul/div
|
||||
FENCE = 7'b0001111,
|
||||
AMO = 7'b0101111,
|
||||
SYSTEM = 7'b1110011
|
||||
//end of RV32I
|
||||
} opcodes_t;
|
||||
|
||||
typedef enum logic [4:0] {
|
||||
LUI_T = 5'b01101,
|
||||
AUIPC_T = 5'b00101,
|
||||
|
@ -250,17 +234,17 @@ package riscv_types;
|
|||
} interrupt_code_t;
|
||||
|
||||
typedef enum bit [4:0] {
|
||||
AMO_LR = 5'b00010,
|
||||
AMO_SC = 5'b00011,
|
||||
AMO_SWAP = 5'b00001,
|
||||
AMO_ADD = 5'b00000,
|
||||
AMO_XOR = 5'b00100,
|
||||
AMO_AND = 5'b01100,
|
||||
AMO_OR = 5'b01000,
|
||||
AMO_MIN = 5'b10000,
|
||||
AMO_MAX = 5'b10100,
|
||||
AMO_MINU = 5'b11000,
|
||||
AMO_MAXU = 5'b11100
|
||||
AMO_LR_FN5 = 5'b00010,
|
||||
AMO_SC_FN5 = 5'b00011,
|
||||
AMO_SWAP_FN5 = 5'b00001,
|
||||
AMO_ADD_FN5 = 5'b00000,
|
||||
AMO_XOR_FN5 = 5'b00100,
|
||||
AMO_AND_FN5 = 5'b01100,
|
||||
AMO_OR_FN5 = 5'b01000,
|
||||
AMO_MIN_FN5 = 5'b10000,
|
||||
AMO_MAX_FN5 = 5'b10100,
|
||||
AMO_MINU_FN5 = 5'b11000,
|
||||
AMO_MAXU_FN5 = 5'b11100
|
||||
} amo_t;
|
||||
|
||||
//Assembly register definitions for simulation purposes
|
||||
|
|
|
@ -192,9 +192,9 @@ module l2_arbiter
|
|||
reserv_valid <= advance;
|
||||
end
|
||||
|
||||
assign reserv_lr = (reserv_request.is_amo && reserv_request.amo_type_or_burst_size == AMO_LR);
|
||||
assign reserv_sc = (reserv_request.is_amo && reserv_request.amo_type_or_burst_size == AMO_SC);
|
||||
assign reserv_store = ~reserv_request.rnw | (reserv_request.is_amo && reserv_request.amo_type_or_burst_size != AMO_LR);
|
||||
assign reserv_lr = (reserv_request.is_amo && reserv_request.amo_type_or_burst_size == AMO_LR_FN5);
|
||||
assign reserv_sc = (reserv_request.is_amo && reserv_request.amo_type_or_burst_size == AMO_SC_FN5);
|
||||
assign reserv_store = ~reserv_request.rnw | (reserv_request.is_amo && reserv_request.amo_type_or_burst_size != AMO_LR_FN5);
|
||||
l2_reservation_logic reserv (.*,
|
||||
.addr(reserv_request.addr),
|
||||
.id(reserv_id),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue