From bc3ec25107314be3cd816c0b669d82338e892806 Mon Sep 17 00:00:00 2001 From: Richard Qin Date: Sat, 7 Nov 2026 02:59:33 +0800 Subject: checkpoint: preserve current RV64 CPU development state --- rv64cpu/tb/core/tb_core.cc | 40 ++++++++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 12 deletions(-) (limited to 'rv64cpu/tb/core') diff --git a/rv64cpu/tb/core/tb_core.cc b/rv64cpu/tb/core/tb_core.cc index 6877d8d..da758c1 100644 --- a/rv64cpu/tb/core/tb_core.cc +++ b/rv64cpu/tb/core/tb_core.cc @@ -352,17 +352,23 @@ public: Vrichard_core* top; MemoryModel mem; uint64_t sim_time; - bool ext_timer_interrupt_level; - bool ext_software_interrupt_level; - bool ext_external_interrupt_level; + bool m_timer_interrupt_level; + bool m_software_interrupt_level; + bool m_external_interrupt_level; + bool s_timer_interrupt_level; + bool s_software_interrupt_level; + bool s_external_interrupt_level; #if VM_TRACE VerilatedVcdC* tfp; #endif CoreSim() : sim_time(0), - ext_timer_interrupt_level(false), - ext_software_interrupt_level(false), - ext_external_interrupt_level(false) { + m_timer_interrupt_level(false), + m_software_interrupt_level(false), + m_external_interrupt_level(false), + s_timer_interrupt_level(false), + s_software_interrupt_level(false), + s_external_interrupt_level(false) { top = new Vrichard_core; #if VM_TRACE Verilated::traceEverOn(true); @@ -401,9 +407,12 @@ public: top->dmem_rdata = 0; } - top->ext_timer_interrupt = ext_timer_interrupt_level; - top->ext_software_interrupt = ext_software_interrupt_level; - top->ext_external_interrupt = ext_external_interrupt_level; + top->m_timer_interrupt = m_timer_interrupt_level; + top->m_software_interrupt = m_software_interrupt_level; + top->m_external_interrupt = m_external_interrupt_level; + top->s_timer_interrupt = s_timer_interrupt_level; + top->s_software_interrupt = s_software_interrupt_level; + top->s_external_interrupt = s_external_interrupt_level; // Rising edge top->clk = 0; @@ -432,13 +441,20 @@ public: } void set_interrupt_lines(bool timer, bool software, bool external) { - ext_timer_interrupt_level = timer; - ext_software_interrupt_level = software; - ext_external_interrupt_level = external; + m_timer_interrupt_level = timer; + m_software_interrupt_level = software; + m_external_interrupt_level = external; } void clear_interrupts() { set_interrupt_lines(false, false, false); + set_supervisor_interrupt_lines(false, false, false); + } + + void set_supervisor_interrupt_lines(bool timer, bool software, bool external) { + s_timer_interrupt_level = timer; + s_software_interrupt_level = software; + s_external_interrupt_level = external; } }; -- cgit v1.2.3