summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rtl/core/psr.sv26
-rw-r--r--tb/top/conspiracion.cpp7
2 files changed, 33 insertions, 0 deletions
diff --git a/rtl/core/psr.sv b/rtl/core/psr.sv
index 796f181..02d8f81 100644
--- a/rtl/core/psr.sv
+++ b/rtl/core/psr.sv
@@ -63,6 +63,32 @@ module core_psr
assign wr_word = psr_wr;
assign {wr_state.flags, wr_state.mask, wr_state.mode} = {wr_word.nzcv, wr_word.aif, wr_word.m};
+`ifdef VERILATOR
+ psr_word cpsr_word /*verilator public*/,
+ spsr_svc_word /*verilator public*/,
+ spsr_abt_word /*verilator public*/,
+ spsr_und_word /*verilator public*/,
+ spsr_fiq_word /*verilator public*/,
+ spsr_irq_word /*verilator public*/;
+
+ assign {cpsr_word.nzcv, cpsr_word.aif, cpsr_word.m} = {cpsr.flags, cpsr.mask, cpsr.mode};
+
+ assign {spsr_svc_word.nzcv, spsr_svc_word.aif, spsr_svc_word.m}
+ = {spsr_svc.flags, spsr_svc.mask, spsr_svc.mode};
+
+ assign {spsr_abt_word.nzcv, spsr_abt_word.aif, spsr_abt_word.m}
+ = {spsr_abt.flags, spsr_abt.mask, spsr_abt.mode};
+
+ assign {spsr_und_word.nzcv, spsr_und_word.aif, spsr_und_word.m}
+ = {spsr_und.flags, spsr_und.mask, spsr_und.mode};
+
+ assign {spsr_irq_word.nzcv, spsr_irq_word.aif, spsr_irq_word.m}
+ = {spsr_irq.flags, spsr_irq.mask, spsr_irq.mode};
+
+ assign {spsr_fiq_word.nzcv, spsr_fiq_word.aif, spsr_fiq_word.m}
+ = {spsr_fiq.flags, spsr_fiq.mask, spsr_fiq.mode};
+`endif
+
always_comb begin
next_flags = flags;
diff --git a/tb/top/conspiracion.cpp b/tb/top/conspiracion.cpp
index fb65209..c671e77 100644
--- a/tb/top/conspiracion.cpp
+++ b/tb/top/conspiracion.cpp
@@ -13,6 +13,7 @@
#include "Vconspiracion_conspiracion.h"
#include "Vconspiracion_platform.h"
#include "Vconspiracion_core_control.h"
+#include "Vconspiracion_core_psr.h"
#include "Vconspiracion_core_regs.h"
#include "Vconspiracion_core_reg_file.h"
@@ -243,6 +244,12 @@ int main(int argc, char **argv)
}
std::printf("%08x pc\n", core.control->pc << 2);
+ std::printf("%08x cpsr\n", core.psr->cpsr_word);
+ std::printf("%08x spsr_svc\n", core.psr->spsr_svc_word);
+ std::printf("%08x spsr_abt\n", core.psr->spsr_abt_word);
+ std::printf("%08x spsr_und\n", core.psr->spsr_und_word);
+ std::printf("%08x spsr_fiq\n", core.psr->spsr_fiq_word);
+ std::printf("%08x spsr_irq\n", core.psr->spsr_irq_word);
}
const auto &dumps = *dump_mem;