From 120675cf7564f70d068a4a5d5a77b6e60f0ff34c Mon Sep 17 00:00:00 2001 From: Eyck Jentzsch Date: Sat, 7 Feb 2026 12:30:48 +0100 Subject: [PATCH] adds trace buffer memory and dumper --- .gitignore | 2 ++ dbt-rise-core | 2 +- dbt-rise-riscv | 2 +- scc | 2 +- src/vp/system.cpp | 37 +++++++++++++++++++++++++++++++++++-- src/vp/system.h | 10 +++++++++- vpvper | 2 +- 7 files changed, 50 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index ec539c2..cb02634 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,5 @@ CMakeSettings.json .gdb_history /dbt-rise-custom *.pcap +*.ihex +*.trx \ No newline at end of file diff --git a/dbt-rise-core b/dbt-rise-core index 9b1791a..52b3ed8 160000 --- a/dbt-rise-core +++ b/dbt-rise-core @@ -1 +1 @@ -Subproject commit 9b1791a9b74ae796adfad19c96b7736bdd5df3fd +Subproject commit 52b3ed8f04ce6f8adc9502389d1239d0bcc534cf diff --git a/dbt-rise-riscv b/dbt-rise-riscv index aaa922e..90c58e7 160000 --- a/dbt-rise-riscv +++ b/dbt-rise-riscv @@ -1 +1 @@ -Subproject commit aaa922e2ccb0e339d0b1ea1b911ccef0664ee83d +Subproject commit 90c58e71027976ca4e910915e575427a480bcca2 diff --git a/scc b/scc index 9fca1a7..0077bb5 160000 --- a/scc +++ b/scc @@ -1 +1 @@ -Subproject commit 9fca1a7895dd07ffff3b85672bcbaa22d8a65da0 +Subproject commit 0077bb5c023f91e958a7576d8be1c6cf8ca9d504 diff --git a/src/vp/system.cpp b/src/vp/system.cpp index 3f142ad..cae5292 100644 --- a/src/vp/system.cpp +++ b/src/vp/system.cpp @@ -5,9 +5,12 @@ */ #include "system.h" +#include #include #include #include +#include +#include namespace vp { @@ -29,7 +32,7 @@ using namespace vpvper::minres; system::system(sc_core::sc_module_name nm) : sc_core::sc_module(nm) -, NAMED(ahb_router, 6, 2) +, NAMED(ahb_router, 7, 2) , NAMED(apbBridge, PipelinedMemoryBusToApbBridge_map.size(), 1) { mtime_clk = (1.0 / 32768) * 1_sec; @@ -44,7 +47,8 @@ system::system(sc_core::sc_module_name nm) ahb_router.bind_target(eth1.socket, 2, 0x11001000, 4_KiB); ahb_router.bind_target(qspi.xip_sck, 3, 0x20000000, 16_MB); ahb_router.bind_target(mem_ram.target, 4, 0x30000000, mem_ram.getSize()); - ahb_router.bind_target(mem_dram.target, 5, 0x40000000, mem_dram.getSize()); + ahb_router.bind_target(mem_trace.target, 5, 0x31000000, mem_trace.getSize()); + ahb_router.bind_target(mem_dram.target, 6, 0x40000000, mem_dram.getSize()); size_t i = 0; for(const auto& e : PipelinedMemoryBusToApbBridge_map) { apbBridge.initiator.at(i)(e.target); @@ -111,4 +115,33 @@ void system::gen_reset() { rst_s = 1; } +void system::start_of_simulation() { + if(trace_dump_file.get_value().size()) { + trace_buffer.resize(1_MiB); + tlm::tlm_generic_payload gp; + gp.set_address(0); + gp.set_command(tlm::TLM_IGNORE_COMMAND); + gp.set_data_length(trace_buffer.size()); + gp.set_streaming_width(trace_buffer.size()); + scc::host_mem_map_extension ext{trace_buffer.data()}; + gp.set_extension(&ext); + mem_trace.target.get_base_interface().transport_dbg(gp); + gp.set_extension(nullptr); + } +} + +void system::end_of_simulation() { + auto& file_name = trace_dump_file.get_value(); + if(file_name.size()) { + std::filesystem::path p(file_name); + if(p.extension().string() == ".ihex") { + std::ofstream out(file_name); + util::ihex::dump(out, trace_buffer, 0, 64); + } else { + std::ofstream out(file_name, std::ios::binary); + out.write(reinterpret_cast(trace_buffer.data()), trace_buffer.size() * sizeof(uint8_t)); + } + } +} + } // namespace vp diff --git a/src/vp/system.h b/src/vp/system.h index 4a1373c..78aa213 100644 --- a/src/vp/system.h +++ b/src/vp/system.h @@ -7,7 +7,6 @@ #ifndef SRC_VP_SYSTEM_H_ #define SRC_VP_SYSTEM_H_ -#include "tlm/scc/quantum_keeper.h" #include #include #include @@ -26,6 +25,7 @@ #include #include #include +#include #include namespace vp { @@ -47,6 +47,8 @@ public: eth::eth_pkt_initiator_socket<> eth1_tx{"eth1_tx"}; eth::eth_pkt_target_socket<> eth1_rx{"eth1_rx"}; + cci::cci_param trace_dump_file{"trace_dump_file", ""}; + sc_core::sc_in clk_i{"clk_i"}; sc_core::sc_in erst_n{"erst_n"}; @@ -68,13 +70,19 @@ private: scc::memory<256_kB, scc::LT> mem_ram{"mem_ram"}; scc::memory<1_GB, scc::LT> mem_dram{"mem_dram"}; scc::memory<8_kB, scc::LT> boot_rom{"boot_rom"}; + scc::memory<1_MiB, scc::LT> mem_trace{"mem_trace"}; sc_core::sc_signal mtime_clk{"mtime_clk"}; sc_core::sc_signal rst_s{"rst_s"}; sc_core::sc_vector> clint_int_s{"clint_int_s", 0}; sc_core::sc_signal mtime_s{"mtime_s"}; + + std::vector trace_buffer; + void gen_reset(); + void start_of_simulation() override; + void end_of_simulation() override; }; } // namespace vp diff --git a/vpvper b/vpvper index 1f5391b..c2b3ab2 160000 --- a/vpvper +++ b/vpvper @@ -1 +1 @@ -Subproject commit 1f5391b5a3a5f5e8e35f0d2df651fee56928be97 +Subproject commit c2b3ab29626ba7e885fe58b5d76890b826c80123