44class addrtr :
public sc_core::sc_module
47 sc_dt::uint64 addr_fw(sc_dt::uint64
addr) {
return addr + offset; }
48 sc_dt::uint64 addr_bw(sc_dt::uint64
addr) {
return addr - offset; }
49 void translate_fw(tlm::tlm_generic_payload&
trans) {
trans.set_address(addr_fw(
trans.get_address())); }
50 void translate_bw(tlm::tlm_generic_payload&
trans) {
trans.set_address(addr_bw(
trans.get_address())); }
52 void b_transport(tlm::tlm_generic_payload&
trans, sc_core::sc_time& delay)
55 back_socket->b_transport(
trans, delay);
59 unsigned int transport_dbg(tlm::tlm_generic_payload&
trans)
64 unsigned int r = back_socket->transport_dbg(
trans);
69 bool get_direct_mem_ptr(tlm::tlm_generic_payload&
trans, tlm::tlm_dmi& dmi_data)
74 bool r = back_socket->get_direct_mem_ptr(
trans, dmi_data);
79 void invalidate_direct_mem_ptr(sc_dt::uint64 start, sc_dt::uint64 end)
81 front_socket->invalidate_direct_mem_ptr(addr_bw(start), addr_bw(end));
85 tlm_utils::simple_target_socket<addrtr, DEFAULT_TLM_BUSWIDTH> front_socket;
86 tlm_utils::simple_initiator_socket<addrtr, DEFAULT_TLM_BUSWIDTH> back_socket;
87 cci::cci_param<uint64_t> offset;
89 explicit addrtr(
const sc_core::sc_module_name&
nm)
90 : sc_core::sc_module(
nm), back_socket(
"initiator"), front_socket(
"target"), offset(
"offset", 0)
92 front_socket.register_b_transport(
this, &addrtr::b_transport);
93 front_socket.register_transport_dbg(
this, &addrtr::transport_dbg);
94 front_socket.register_get_direct_mem_ptr(
this, &addrtr::get_direct_mem_ptr);
95 back_socket.register_invalidate_direct_mem_ptr(
this, &addrtr::invalidate_direct_mem_ptr);