diff options
Diffstat (limited to 'util/tlm/examples/slave_port/sc_target.cc')
-rw-r--r-- | util/tlm/examples/slave_port/sc_target.cc | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/util/tlm/examples/slave_port/sc_target.cc b/util/tlm/examples/slave_port/sc_target.cc index c44a27149..152d99ae6 100644 --- a/util/tlm/examples/slave_port/sc_target.cc +++ b/util/tlm/examples/slave_port/sc_target.cc @@ -66,6 +66,14 @@ Target::Target(sc_core::sc_module_name name, } void +Target::check_address(unsigned long long int addr) +{ + if (addr < offset || addr >= offset + size) + SC_REPORT_FATAL("Target", "Address out of range. Did you set an " + "appropriate size and offset?"); +} + +void Target::b_transport(tlm::tlm_generic_payload& trans, sc_time& delay) { /* Execute the read or write commands */ @@ -75,6 +83,8 @@ Target::b_transport(tlm::tlm_generic_payload& trans, sc_time& delay) unsigned int Target::transport_dbg(tlm::tlm_generic_payload& trans) { + check_address(trans.get_address()); + tlm::tlm_command cmd = trans.get_command(); sc_dt::uint64 adr = trans.get_address() - offset; unsigned char* ptr = trans.get_data_ptr(); @@ -203,6 +213,8 @@ Target::execute_transaction_process() void Target::execute_transaction(tlm::tlm_generic_payload& trans) { + check_address(trans.get_address()); + tlm::tlm_command cmd = trans.get_command(); sc_dt::uint64 adr = trans.get_address() - offset; unsigned char* ptr = trans.get_data_ptr(); |