From 639212a826659c591db3202607c4a47e1049b92a Mon Sep 17 00:00:00 2001 From: Richard Qin Date: Tue, 7 Apr 2026 22:42:49 +0800 Subject: refactor: standardize interrupt signal naming across the codebase --- rv64cpu/README.md | 2 +- rv64cpu/docs/naming_convention.md | 45 ++++++++++++++++++++++++++ rv64cpu/rtl/core/csr_unit.sv | 52 +++++++++++++++--------------- rv64cpu/rtl/core/include/csr_pkg.sv | 18 +++++------ rv64cpu/rtl/core/richard_core.sv | 38 +++++++++++----------- rv64cpu/rtl/core/trap_ctrl.sv | 24 +++++++------- rv64cpu/tb/compliance/compliance_runner.cc | 6 ++-- rv64cpu/tb/core/tb_core.cc | 24 +++++++------- rv64cpu/tb/unit/tb_trap_ctrl.cc | 16 ++++----- 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_`, `has_`, + or `_`. + ### 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"); -- cgit v1.2.3