29 sc_core::sc_in<bool> clk_i{
"clk_i"};
31 sc_core::sc_export<tlm::scc::pe::intor_fw_nb> fw_i{
"fw_i"};
33 sc_core::sc_port<tlm::scc::pe::intor_bw_nb, 1, sc_core::SC_ZERO_OR_MORE_BOUND> bw_o{
"bw_o"};
35 cci::cci_param<std::string> replay_file_name{
"replay_file_name",
""};
37 replay_buffer(
const sc_core::sc_module_name& nm);
44 void transport(tlm::tlm_generic_payload& payload,
bool lt_transport =
false)
override;
51 void snoop_resp(tlm::tlm_generic_payload& payload,
bool sync =
false)
override {}
53 void end_of_reset() { reset_end_cycle = sc_core::sc_time_stamp() / clk_if->period(); }
56 sc_core::sc_clock* clk_if{
nullptr};
57 uint64_t reset_end_cycle{0};
58 using entry_t = std::tuple<uint64_t, unsigned>;
59 std::vector<std::vector<entry_t>> rd_sequence, wr_sequence;
60 sc_core::sc_time time_per_byte_rd, time_per_byte_wr, time_per_byte_total;
68 double total_residual_clocks{0.0};
69 void end_of_elaboration()
override;
70 void start_of_simulation()
override;
71 void process_req2resp_fifos();
72 void start_rd_resp_thread();
73 void start_wr_resp_thread();
84 using payload_type = base::payload_type;
85 using phase_type = base::phase_type;
87 sc_core::sc_in<bool> clk_i{
"clk_i"};
89 sc_core::sc_in<bool> rst_i{
"rst_i"};
98 : sc_core::sc_module(nm)
100 , repl_buffer(
"repl_buffer") {
103 repl_buffer.clk_i(clk_i);
104 pe.fw_o(repl_buffer.fw_i);
105 repl_buffer.bw_o(pe.bw_i);
106#if SYSTEMC_VERSION < 20250221
109 SC_METHOD(end_of_reset);
110 sensitive << rst_i.neg();
123 size_t get_outstanding_tx_count()
override {
return pe.getAllOutStandingTx(); }
126 void end_of_reset() { repl_buffer.end_of_reset(); }
127 void end_of_elaboration() {
128 auto* ifs = sckt.get_base_port().get_interface(0);
129 sc_assert(ifs !=
nullptr);
130 pe.set_bw_interface(ifs);
135 replay_buffer repl_buffer;