aboutsummaryrefslogtreecommitdiff
path: root/rv64cpu
diff options
context:
space:
mode:
Diffstat (limited to 'rv64cpu')
-rw-r--r--rv64cpu/README.md2
-rw-r--r--rv64cpu/docs/naming_convention.md45
-rw-r--r--rv64cpu/rtl/core/csr_unit.sv52
-rw-r--r--rv64cpu/rtl/core/include/csr_pkg.sv18
-rw-r--r--rv64cpu/rtl/core/richard_core.sv38
-rw-r--r--rv64cpu/rtl/core/trap_ctrl.sv24
-rw-r--r--rv64cpu/tb/compliance/compliance_runner.cc6
-rw-r--r--rv64cpu/tb/core/tb_core.cc24
-rw-r--r--rv64cpu/tb/unit/tb_trap_ctrl.cc16
9 files changed, 135 insertions, 90 deletions
diff --git a/rv64cpu/README.md b/rv64cpu/README.md
index 72b3546..a7e62a5 100644
--- a/rv64cpu/README.md
+++ b/rv64cpu/README.md
@@ -130,7 +130,7 @@ richard-cpu/
|---|---|
| P1 | RV64I five-stage pipeline + hazard handling (Done) |
| P2 | CSR + M/S/U privilege levels + Trap (Done) |
-| P3 | MMU (Sv39 TLB + PTW) |
+| P3 | MMU (TLB + PTW) |
| P4 | Cache + AXI4-Full Burst |
| P5 | Peripherals + AXI4-Lite bridge + SoC integration |
| P6 | Pass riscv-arch-test (In Progress: strict suites above all pass) |
diff --git a/rv64cpu/docs/naming_convention.md b/rv64cpu/docs/naming_convention.md
index fea4844..830c5e5 100644
--- a/rv64cpu/docs/naming_convention.md
+++ b/rv64cpu/docs/naming_convention.md
@@ -13,6 +13,20 @@ modifying existing code.
| Abbreviations are allowed **only** from the approved list (Section 7) | `addr` not `address`, `imm` not `immediate` |
| No trailing numbers for disambiguation; use descriptive suffixes instead | `read_port_a` not `read_port_1` |
+### 1.1 Semantic Clarity Priority
+
+When multiple names are technically valid, prefer the name with the clearest
+semantic meaning:
+
+1. Prefer full words over unclear abbreviations unless listed in Section 7.
+2. Prefer domain-accurate nouns over generic placeholders.
+3. Prefer names that communicate role and timing (source, destination, stage).
+
+Examples:
+- `interrupt_cause` is preferred over `int_cause`
+- `trap_target_pc` is preferred over `trap_next_value`
+- `csr_write_data` is preferred over `csr_write_val`
+
## 2. Module & Package Names
| Item | Rule | Example |
@@ -40,6 +54,14 @@ Use these suffixes consistently to indicate the **role** of a signal:
| `_en` | Enable (active-high gating signal) | `reg_write_en`, `mem_read_en` |
| `_val` | **Deprecated — do not use for new code.** Use `_rdata`/`_wdata`/`_data` instead | — |
+Additional clarity rules:
+- `*_value` is allowed for architectural/state snapshots when `*_data` would be
+ ambiguous. Example: `csr_mstatus_value`.
+- For storage read/write payloads, always prefer `_rdata`/`_wdata`/`_data` over
+ `_value`.
+- `_flag` is deprecated for new boolean signals. Use `is_<noun>`, `has_<noun>`,
+ or `<adjective>_<noun>`.
+
### 3.2 Standard Prefixes
| Prefix | Meaning | Example |
@@ -60,6 +82,11 @@ All single-bit control signals should follow **one** of these patterns:
> **Consistency rule**: For write-enable signals on storage elements (register file,
> memory, CSR), always use the `_en` suffix. Example: `reg_write_en`, not `reg_write`.
+Additional boolean rules:
+- Avoid suffix-only boolean naming such as `*_flag` and `*_bool` in new code.
+- `has_` is for condition presence (`has_interrupt`), `is_` is for classification
+ (`is_interrupt` for a classified event or type).
+
### 3.4 Clock & Reset
| Signal | Name | Description |
@@ -142,6 +169,24 @@ Only these abbreviations are permitted. All other words should be spelled in ful
| `wb` | write back (pipeline stage only) |
| `wdata` | write data |
+Not approved for new code:
+- `int` (use `interrupt`)
+- `flag` suffix for booleans (use Section 3.3 patterns)
+
+## 7.1 Architecture-Defined Bit Names (Exception)
+
+Some names come directly from ISA-defined bit semantics and are allowed in narrow
+scopes even if they are single-letter:
+
+- PTE-like permission bits: `u`, `r`, `w`, `x`, `a`, `d`, `g`
+
+Scope limits:
+1. Allowed only inside tightly scoped structs, packed fields, or helper function
+ parameters tied to ISA semantics.
+2. For module ports and cross-module buses, prefer descriptive names such as
+ `pte_user`, `pte_read`, `pte_write`, `pte_exec`, `pte_accessed`, `pte_dirty`,
+ `pte_global`.
+
## 8. Current Codebase Non-Conformances
The following table lists signals in the existing codebase that do not yet follow
diff --git a/rv64cpu/rtl/core/csr_unit.sv b/rv64cpu/rtl/core/csr_unit.sv
index 0427eeb..3aefe10 100644
--- a/rv64cpu/rtl/core/csr_unit.sv
+++ b/rv64cpu/rtl/core/csr_unit.sv
@@ -201,10 +201,10 @@ module csr_unit
if (csr_write_en && csr_is_writable(csr_addr_canonical)) begin
unique case (csr_addr_canonical)
CSR_MSTATUS: begin
- logic [XLEN-1:0] next_val;
- next_val = csr_write_next(mstatus_reg, csr_rs1_data, csr_op);
- mstatus_reg <= next_val;
- sstatus_reg <= mirror_mstatus_to_sstatus(sstatus_reg, next_val);
+ logic [XLEN-1:0] next_data;
+ next_data = csr_write_next(mstatus_reg, csr_rs1_data, csr_op);
+ mstatus_reg <= next_data;
+ sstatus_reg <= mirror_mstatus_to_sstatus(sstatus_reg, next_data);
end
CSR_MEDELEG: medeleg_reg <= csr_write_next(medeleg_reg, csr_rs1_data, csr_op);
CSR_MIDELEG: mideleg_reg <= csr_write_next(mideleg_reg, csr_rs1_data, csr_op);
@@ -321,18 +321,18 @@ module csr_unit
// Apply the CSR op semantics (write/set/clear) for a single register.
function automatic logic [XLEN-1:0] csr_write_next(
- input logic [XLEN-1:0] current_val,
- input logic [XLEN-1:0] write_val,
+ input logic [XLEN-1:0] current_data,
+ input logic [XLEN-1:0] write_data,
input logic [2:0] op_code
);
- logic [XLEN-1:0] next_val;
+ logic [XLEN-1:0] next_data;
unique case (op_code)
- 3'b001, 3'b101: next_val = write_val; // CSRRW / CSRRWI
- 3'b010, 3'b110: next_val = current_val | write_val; // CSRRS / CSRRSI
- 3'b011, 3'b111: next_val = current_val & ~write_val; // CSRRC / CSRRCI
- default: next_val = current_val;
+ 3'b001, 3'b101: next_data = write_data; // CSRRW / CSRRWI
+ 3'b010, 3'b110: next_data = current_data | write_data; // CSRRS / CSRRSI
+ 3'b011, 3'b111: next_data = current_data & ~write_data; // CSRRC / CSRRCI
+ default: next_data = current_data;
endcase
- return next_val;
+ return next_data;
endfunction
function automatic bit csr_is_writable(input logic [11:0] addr);
@@ -393,26 +393,26 @@ module csr_unit
function automatic logic [XLEN-1:0] apply_sstatus_to_mstatus(
input logic [XLEN-1:0] mstatus_cur,
- input logic [XLEN-1:0] sstatus_val
+ input logic [XLEN-1:0] sstatus_data
);
- logic [XLEN-1:0] next_val;
- next_val = mstatus_cur;
- next_val[SSTATUS_SIE_BIT] = sstatus_val[SSTATUS_SIE_BIT];
- next_val[SSTATUS_SPIE_BIT] = sstatus_val[SSTATUS_SPIE_BIT];
- next_val[SSTATUS_SPP_BIT] = sstatus_val[SSTATUS_SPP_BIT];
- return next_val;
+ logic [XLEN-1:0] next_data;
+ next_data = mstatus_cur;
+ next_data[SSTATUS_SIE_BIT] = sstatus_data[SSTATUS_SIE_BIT];
+ next_data[SSTATUS_SPIE_BIT] = sstatus_data[SSTATUS_SPIE_BIT];
+ next_data[SSTATUS_SPP_BIT] = sstatus_data[SSTATUS_SPP_BIT];
+ return next_data;
endfunction
function automatic logic [XLEN-1:0] mirror_mstatus_to_sstatus(
input logic [XLEN-1:0] sstatus_cur,
- input logic [XLEN-1:0] mstatus_val
+ input logic [XLEN-1:0] mstatus_data
);
- logic [XLEN-1:0] next_val;
- next_val = sstatus_cur;
- next_val[SSTATUS_SIE_BIT] = mstatus_val[SSTATUS_SIE_BIT];
- next_val[SSTATUS_SPIE_BIT] = mstatus_val[SSTATUS_SPIE_BIT];
- next_val[SSTATUS_SPP_BIT] = mstatus_val[SSTATUS_SPP_BIT];
- return next_val;
+ logic [XLEN-1:0] next_data;
+ next_data = sstatus_cur;
+ next_data[SSTATUS_SIE_BIT] = mstatus_data[SSTATUS_SIE_BIT];
+ next_data[SSTATUS_SPIE_BIT] = mstatus_data[SSTATUS_SPIE_BIT];
+ next_data[SSTATUS_SPP_BIT] = mstatus_data[SSTATUS_SPP_BIT];
+ return next_data;
endfunction
// Pack the discrete FP status bits into the architectural FCSR layout.
diff --git a/rv64cpu/rtl/core/include/csr_pkg.sv b/rv64cpu/rtl/core/include/csr_pkg.sv
index a225da2..a908538 100644
--- a/rv64cpu/rtl/core/include/csr_pkg.sv
+++ b/rv64cpu/rtl/core/include/csr_pkg.sv
@@ -102,16 +102,16 @@ package csr_pkg;
// Interrupt Cause Codes (mcause.Interrupt == 1)
// ---------------------------------
// User Mode Interrupts
- localparam logic [XLEN-1:0] INT_U_SOFTWARE = 64'd0; // User Mode Software Interrupt
- localparam logic [XLEN-1:0] INT_U_TIMER = 64'd4; // User Mode Timer Interrupt
- localparam logic [XLEN-1:0] INT_U_EXTERNAL = 64'd8; // User Mode External Interrupt
+ localparam logic [XLEN-1:0] INTERRUPT_U_SOFTWARE = 64'd0; // User Mode Software Interrupt
+ localparam logic [XLEN-1:0] INTERRUPT_U_TIMER = 64'd4; // User Mode Timer Interrupt
+ localparam logic [XLEN-1:0] INTERRUPT_U_EXTERNAL = 64'd8; // User Mode External Interrupt
// Supervisor Mode Interrupts
- localparam logic [XLEN-1:0] INT_S_SOFTWARE = 64'd1; // Supervisor Mode Software Interrupt
- localparam logic [XLEN-1:0] INT_S_TIMER = 64'd5; // Supervisor Mode Timer Interrupt
- localparam logic [XLEN-1:0] INT_S_EXTERNAL = 64'd9; // Supervisor Mode External Interrupt
+ localparam logic [XLEN-1:0] INTERRUPT_S_SOFTWARE = 64'd1; // Supervisor Mode Software Interrupt
+ localparam logic [XLEN-1:0] INTERRUPT_S_TIMER = 64'd5; // Supervisor Mode Timer Interrupt
+ localparam logic [XLEN-1:0] INTERRUPT_S_EXTERNAL = 64'd9; // Supervisor Mode External Interrupt
// Machine Mode Interrupts
- localparam logic [XLEN-1:0] INT_M_SOFTWARE = 64'd3; // Machine Mode Software Interrupt
- localparam logic [XLEN-1:0] INT_M_TIMER = 64'd7; // Machine Mode Timer Interrupt
- localparam logic [XLEN-1:0] INT_M_EXTERNAL = 64'd11; // Machine Mode External Interrupt
+ localparam logic [XLEN-1:0] INTERRUPT_M_SOFTWARE = 64'd3; // Machine Mode Software Interrupt
+ localparam logic [XLEN-1:0] INTERRUPT_M_TIMER = 64'd7; // Machine Mode Timer Interrupt
+ localparam logic [XLEN-1:0] INTERRUPT_M_EXTERNAL = 64'd11; // Machine Mode External Interrupt
endpackage
diff --git a/rv64cpu/rtl/core/richard_core.sv b/rv64cpu/rtl/core/richard_core.sv
index ad75cc8..a841253 100644
--- a/rv64cpu/rtl/core/richard_core.sv
+++ b/rv64cpu/rtl/core/richard_core.sv
@@ -37,9 +37,9 @@ module richard_core
input logic [63:0] dmem_rdata,
// Interface 3: External Interrupt Sources
- input logic ext_timer_int,
- input logic ext_software_int,
- input logic ext_external_int
+ input logic ext_timer_interrupt,
+ input logic ext_software_interrupt,
+ input logic ext_external_interrupt
);
localparam int CSR_MSTATUS_MIE_BIT = 3;
@@ -159,7 +159,7 @@ module richard_core
logic [4:0] wb_rs1_addr_in;
logic [XLEN-1:0] wb_imm_in;
logic wb_illegal_instr_in, wb_is_ecall_in, wb_is_ebreak_in, wb_is_mret_in, wb_is_sret_in;
- logic wb_load_fault_flag, wb_store_fault_flag;
+ logic wb_load_fault, wb_store_fault;
logic [XLEN-1:0] wb_fault_addr_in;
// (10) WB Stage Outputs (to RegFile & CSR Unit)
@@ -182,8 +182,8 @@ module richard_core
logic [XLEN-1:0] csr_sepc_value;
logic [XLEN-1:0] csr_satp_value;
logic [XLEN-1:0] csr_trap_vector_value;
- logic csr_trap_to_s_mode_flag;
- logic csr_illegal_access_flag;
+ logic csr_trap_to_s_mode;
+ logic csr_illegal_access;
// (11) Exception / Trap bus
logic trap_illegal_instr, trap_is_ecall, trap_is_ebreak, trap_is_mret, trap_is_sret;
@@ -203,7 +203,7 @@ module richard_core
logic [XLEN-1:0] trap_ctrl_mepc;
logic [XLEN-1:0] trap_ctrl_mcause;
logic [XLEN-1:0] trap_ctrl_mtval;
- logic trap_ctrl_to_s_mode_flag;
+ logic trap_ctrl_to_s_mode;
logic trap_ctrl_mret_en;
logic trap_ctrl_sret_en;
logic csr_mstatus_mie;
@@ -591,8 +591,8 @@ module richard_core
.wb_is_ebreak (wb_is_ebreak_in),
.wb_is_mret (wb_is_mret_in),
.wb_is_sret (wb_is_sret_in),
- .wb_load_fault (wb_load_fault_flag),
- .wb_store_fault (wb_store_fault_flag),
+ .wb_load_fault (wb_load_fault),
+ .wb_store_fault (wb_store_fault),
.wb_fault_addr (wb_fault_addr_in)
);
@@ -618,11 +618,11 @@ module richard_core
.mem_wb_is_ebreak (wb_is_ebreak_in),
.mem_wb_is_mret (wb_is_mret_in),
.mem_wb_is_sret (wb_is_sret_in),
- .mem_wb_load_fault (wb_load_fault_flag),
- .mem_wb_store_fault (wb_store_fault_flag),
+ .mem_wb_load_fault (wb_load_fault),
+ .mem_wb_store_fault (wb_store_fault),
.mem_wb_fault_addr (wb_fault_addr_in),
.csr_rdata (csr_rdata),
- .csr_illegal_access (csr_illegal_access_flag),
+ .csr_illegal_access (csr_illegal_access),
.wb_rd_wdata (wb_rd_wdata),
.wb_rd_addr (wb_rd_addr),
.wb_reg_write_en (wb_reg_write_en_out),
@@ -650,7 +650,7 @@ module richard_core
.csr_addr (csr_addr),
.csr_rs1_data (csr_rs1_data),
.trap_ctrl_trigger (trap_ctrl_trigger),
- .trap_ctrl_to_s_mode(trap_ctrl_to_s_mode_flag),
+ .trap_ctrl_to_s_mode(trap_ctrl_to_s_mode),
.trap_ctrl_mepc (trap_ctrl_mepc),
.trap_ctrl_mcause (trap_ctrl_mcause),
.trap_ctrl_mtval (trap_ctrl_mtval),
@@ -670,8 +670,8 @@ module richard_core
.csr_trap_vector (),
.csr_trap_to_s_mode (),
.csr_trap_vector_next (csr_trap_vector_value),
- .csr_trap_to_s_mode_next(csr_trap_to_s_mode_flag),
- .csr_illegal_access (csr_illegal_access_flag)
+ .csr_trap_to_s_mode_next(csr_trap_to_s_mode),
+ .csr_illegal_access (csr_illegal_access)
);
trap_ctrl u_trap_ctrl (
@@ -688,9 +688,9 @@ module richard_core
.trap_store_page_fault(trap_store_page_fault),
.trap_bad_addr (trap_bad_addr),
.trap_bad_instr (trap_bad_instr),
- .ext_timer_int (ext_timer_int),
- .ext_software_int (ext_software_int),
- .ext_external_int (ext_external_int),
+ .ext_timer_interrupt (ext_timer_interrupt),
+ .ext_software_interrupt (ext_software_interrupt),
+ .ext_external_interrupt (ext_external_interrupt),
.csr_mstatus_mie (csr_mstatus_mie),
.csr_mtvec (csr_mtvec_base),
.csr_stvec (csr_stvec_base),
@@ -703,7 +703,7 @@ module richard_core
.trap_mepc (trap_ctrl_mepc),
.trap_mcause (trap_ctrl_mcause),
.trap_mtval (trap_ctrl_mtval),
- .trap_to_s_mode (trap_ctrl_to_s_mode_flag),
+ .trap_to_s_mode (trap_ctrl_to_s_mode),
.mret_en (trap_ctrl_mret_en),
.sret_en (trap_ctrl_sret_en),
.trap_flush_req (trap_flush_req),
diff --git a/rv64cpu/rtl/core/trap_ctrl.sv b/rv64cpu/rtl/core/trap_ctrl.sv
index c5593ea..55278d9 100644
--- a/rv64cpu/rtl/core/trap_ctrl.sv
+++ b/rv64cpu/rtl/core/trap_ctrl.sv
@@ -38,9 +38,9 @@ module trap_ctrl
input logic [INST_WIDTH-1:0] trap_bad_instr,
// Interrupt pin from external source (asynchronous signal)
- input logic ext_timer_int, // M-Mode Machine Timer Interrupt (MTIP)
- input logic ext_software_int, // M-Mode Software Interrupt (MSIP)
- input logic ext_external_int, // M-Mode External Interrupt (MEIP)
+ input logic ext_timer_interrupt, // M-Mode Machine Timer Interrupt (MTIP)
+ input logic ext_software_interrupt, // M-Mode Software Interrupt (MSIP)
+ input logic ext_external_interrupt, // M-Mode External Interrupt (MEIP)
// Status read from CSR Unit
input logic csr_mstatus_mie, // Global interrupt enable (MIE)
@@ -128,22 +128,22 @@ module trap_ctrl
// Interrupt Detection - Asynchronous, Protected by MIE
logic has_interrupt;
- logic [XLEN-1:0] int_cause;
+ logic [XLEN-1:0] interrupt_cause;
always_comb begin
has_interrupt = 1'b0;
- int_cause = '0;
+ interrupt_cause = '0;
if (csr_mstatus_mie) begin
- if (ext_external_int) begin
+ if (ext_external_interrupt) begin
has_interrupt = 1'b1;
- int_cause = INTERRUPT_BIT | INT_M_EXTERNAL;
- end else if (ext_software_int) begin
+ interrupt_cause = INTERRUPT_BIT | INTERRUPT_M_EXTERNAL;
+ end else if (ext_software_interrupt) begin
has_interrupt = 1'b1;
- int_cause = INTERRUPT_BIT | INT_M_SOFTWARE;
- end else if (ext_timer_int) begin
+ interrupt_cause = INTERRUPT_BIT | INTERRUPT_M_SOFTWARE;
+ end else if (ext_timer_interrupt) begin
has_interrupt = 1'b1;
- int_cause = INTERRUPT_BIT | INT_M_TIMER;
+ interrupt_cause = INTERRUPT_BIT | INTERRUPT_M_TIMER;
end
end
end
@@ -153,7 +153,7 @@ module trap_ctrl
logic trap_is_interrupt;
assign trap_is_interrupt = has_interrupt;
- assign trap_cause_value = has_interrupt ? int_cause : sync_cause;
+ assign trap_cause_value = has_interrupt ? interrupt_cause : sync_cause;
assign trap_mtval_value = has_interrupt ? '0 : sync_mtval;
assign trap_trigger = has_interrupt | has_sync_exception;
diff --git a/rv64cpu/tb/compliance/compliance_runner.cc b/rv64cpu/tb/compliance/compliance_runner.cc
index 5cc4709..b29662a 100644
--- a/rv64cpu/tb/compliance/compliance_runner.cc
+++ b/rv64cpu/tb/compliance/compliance_runner.cc
@@ -306,9 +306,9 @@ bool load_elf64(const std::string& path, ByteMemory* memory, Symbols* symbols) {
void tick(Vrichard_core* top, ByteMemory* memory) {
top->imem_rdata = memory->read_u32(top->imem_addr);
top->dmem_rdata = top->dmem_read_en ? memory->read_u64(top->dmem_addr & ~0x7ULL) : 0;
- top->ext_timer_int = 0;
- top->ext_software_int = 0;
- top->ext_external_int = 0;
+ top->ext_timer_interrupt = 0;
+ top->ext_software_interrupt = 0;
+ top->ext_external_interrupt = 0;
top->clk = 0;
top->eval();
diff --git a/rv64cpu/tb/core/tb_core.cc b/rv64cpu/tb/core/tb_core.cc
index 39d4f19..b915df4 100644
--- a/rv64cpu/tb/core/tb_core.cc
+++ b/rv64cpu/tb/core/tb_core.cc
@@ -352,17 +352,17 @@ public:
Vrichard_core* top;
MemoryModel mem;
uint64_t sim_time;
- bool ext_timer_int_level;
- bool ext_software_int_level;
- bool ext_external_int_level;
+ bool ext_timer_interrupt_level;
+ bool ext_software_interrupt_level;
+ bool ext_external_interrupt_level;
#if VM_TRACE
VerilatedVcdC* tfp;
#endif
CoreSim() : sim_time(0),
- ext_timer_int_level(false),
- ext_software_int_level(false),
- ext_external_int_level(false) {
+ ext_timer_interrupt_level(false),
+ ext_software_interrupt_level(false),
+ ext_external_interrupt_level(false) {
top = new Vrichard_core;
#if VM_TRACE
Verilated::traceEverOn(true);
@@ -401,9 +401,9 @@ public:
top->dmem_rdata = 0;
}
- top->ext_timer_int = ext_timer_int_level;
- top->ext_software_int = ext_software_int_level;
- top->ext_external_int = ext_external_int_level;
+ top->ext_timer_interrupt = ext_timer_interrupt_level;
+ top->ext_software_interrupt = ext_software_interrupt_level;
+ top->ext_external_interrupt = ext_external_interrupt_level;
// Rising edge
top->clk = 0;
@@ -432,9 +432,9 @@ public:
}
void set_interrupt_lines(bool timer, bool software, bool external) {
- ext_timer_int_level = timer;
- ext_software_int_level = software;
- ext_external_int_level = external;
+ ext_timer_interrupt_level = timer;
+ ext_software_interrupt_level = software;
+ ext_external_interrupt_level = external;
}
void clear_interrupts() {
diff --git a/rv64cpu/tb/unit/tb_trap_ctrl.cc b/rv64cpu/tb/unit/tb_trap_ctrl.cc
index c57e6da..29d3439 100644
--- a/rv64cpu/tb/unit/tb_trap_ctrl.cc
+++ b/rv64cpu/tb/unit/tb_trap_ctrl.cc
@@ -56,9 +56,9 @@ void drive_defaults(Vtrap_ctrl* dut) {
dut->trap_bad_addr = 0;
dut->trap_bad_instr = 0;
- dut->ext_timer_int = 0;
- dut->ext_software_int = 0;
- dut->ext_external_int = 0;
+ dut->ext_timer_interrupt = 0;
+ dut->ext_software_interrupt = 0;
+ dut->ext_external_interrupt = 0;
dut->csr_mstatus_mie = 0;
dut->csr_mtvec = 0x800ULL;
@@ -157,9 +157,9 @@ int main(int argc, char** argv) {
dut->csr_priv_mode = PRIV_MODE_M;
dut->csr_mtvec = 0x300ULL | 0x1ULL; // vectored mode
dut->wb_pc = 0x4000ULL;
- dut->ext_timer_int = 1;
- dut->ext_software_int = 1;
- dut->ext_external_int = 1;
+ dut->ext_timer_interrupt = 1;
+ dut->ext_software_interrupt = 1;
+ dut->ext_external_interrupt = 1;
dut->eval();
const uint64_t expected_vectored_pc = 0x300ULL + (INT_M_EXTERNAL << 2);
check(dut->trap_trigger, "InterruptPriority_Triggers");
@@ -169,7 +169,7 @@ int main(int argc, char** argv) {
drive_defaults(dut);
dut->csr_mstatus_mie = 0;
- dut->ext_external_int = 1;
+ dut->ext_external_interrupt = 1;
dut->eval();
check(!dut->trap_trigger, "InterruptMasked_NoTrigger");
@@ -179,7 +179,7 @@ int main(int argc, char** argv) {
dut->csr_stvec = 0x880ULL | 0x1ULL; // vectored supervisor mode
dut->csr_mideleg = (1ULL << INT_M_TIMER);
dut->wb_pc = 0xABCDULL;
- dut->ext_timer_int = 1;
+ dut->ext_timer_interrupt = 1;
dut->eval();
const uint64_t expected_sv_pc = 0x880ULL + (INT_M_TIMER << 2);
check(dut->trap_to_s_mode, "InterruptDelegation_ToSupervisor");