diff options
| author | Alejandro Soto <alejandro@34project.org> | 2022-11-06 18:37:22 -0600 |
|---|---|---|
| committer | Alejandro Soto <alejandro@34project.org> | 2022-11-06 18:37:22 -0600 |
| commit | 177c8a0f0cff07010d01ead3f072777d94ebd97d (patch) | |
| tree | 4c749b9fb8ce72c570aa11081dccd319ffc41030 | |
| parent | e952458d3b1fe3ea109f4122ad1658beda10285e (diff) | |
Export PSRs to simulation
Diffstat (limited to '')
| -rw-r--r-- | rtl/core/psr.sv | 26 | ||||
| -rw-r--r-- | tb/top/conspiracion.cpp | 7 |
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; |
