63    cci::cci_broker_handle m_broker;
 
   65    cci::cci_param<bool> p_dump;
 
   66    cci::cci_param<std::string> p_outfile;
 
   72        for (std::string 
m : gs::find_object_of_type<gs::gs_memory<BUSWIDTH>>()) {
 
   73            uint64_t addr = gs::cci_get<uint64_t>(m_broker, 
m + 
".target_socket.address");
 
   74            uint64_t size = gs::cci_get<uint64_t>(m_broker, 
m + 
".target_socket.size");
 
   75            tlm::tlm_generic_payload 
trans;
 
   77            fnamestr << 
m << 
".0x" << std::hex << 
addr << 
"-0x" << (
addr + size) << 
"." << p_outfile.get_value();
 
   83            for (
uint64_t offset = 0; offset < size;) {
 
   85                if (offset + 
rsize >= size) {
 
   86                    rsize = size - offset;
 
   88                trans.set_command(tlm::TLM_READ_COMMAND);
 
   90                trans.set_data_ptr(data);
 
   93                trans.set_byte_enable_length(0);
 
   95                if (!initiator_socket->get_direct_mem_ptr(
trans, dmi)) {
 
   96                    std::stringstream 
info;
 
   98                                    << 
"0x" << std::hex << 
addr + offset;
 
  101                uint64_t size = (dmi.get_end_address() - dmi.get_start_address()) + 1;
 
  113    void b_transport(tlm::tlm_generic_payload& 
txn, sc_core::sc_time& delay)
 
  115        unsigned int len = 
txn.get_data_length();
 
  116        unsigned char* 
ptr = 
txn.get_data_ptr();
 
  117        sc_dt::uint64 
addr = 
txn.get_address();
 
  121        txn.set_response_status(tlm::TLM_OK_RESPONSE);
 
  125    tlm_utils::simple_initiator_socket<memory_dumper<BUSWIDTH>, 
BUSWIDTH> initiator_socket;
 
  126    tlm_utils::simple_target_socket<memory_dumper<BUSWIDTH>, 
BUSWIDTH> target_socket;
 
  129        : m_broker(cci::cci_get_broker())
 
  130        , p_dump(
"MemoryDumper_trigger", 
false)
 
  131        , p_outfile(
"outfile", 
"dumpfile")
 
  132        , initiator_socket(
"initiator_socket")
 
  133        , target_socket(
"target_socket")
 
  136        p_dump.register_post_write_callback([
this](
auto ev) { this->dump(); });
 
  137        target_socket.register_b_transport(
this, &memory_dumper::b_transport);