@@ -31,14 +31,9 @@ struct img_initiator: sc_module
3131 mm memory_manager;
3232
3333 // Address for this Initiator
34- unsigned int address;
35- unsigned char * data;
3634 unsigned int data_length;
3735 unsigned int transaction_number;
3836
39- // Pointer to transaction in progress
40- tlm::tlm_generic_payload* pending_transaction;
41-
4237 // Payload event queue with callback and phase
4338 tlm_utils::peq_with_cb_and_phase<img_initiator> m_peq;
4439
@@ -51,7 +46,7 @@ struct img_initiator: sc_module
5146
5247 // Constructor
5348 SC_CTOR (img_initiator)
54- : socket(" socket" ), pending_transaction( 0 ), m_peq(this , &img_initiator::peq_cb) // Construct and name socket
49+ : socket(" socket" ), m_peq(this , &img_initiator::peq_cb) // Construct and name socket
5550 {
5651 // Register callbacks for incoming interface method calls
5752 socket.register_nb_transport_bw (this , &img_initiator::nb_transport_bw);
@@ -79,11 +74,11 @@ struct img_initiator: sc_module
7974 // Send transaction
8075 this ->send_transaction (transaction);
8176
82- data = this -> data ;
77+ data = transaction-> get_data_ptr () ;
8378 // -----------DEBUG-----------
8479 dbgmodprint (" Reading at Initiator: " );
85- for (int i = 0 ; i < this -> pending_transaction ->get_data_length ()/sizeof (int ); ++i){
86- dbgmodprint (" %02x" , *(reinterpret_cast <int *>(this -> data )+i));
80+ for (int i = 0 ; i < transaction ->get_data_length ()/sizeof (int ); ++i){
81+ dbgmodprint (" %02x" , *(reinterpret_cast <int *>(transaction-> get_data_ptr () )+i));
8782 }
8883 printf (" \n " );
8984 // -----------DEBUG-----------
@@ -110,7 +105,7 @@ struct img_initiator: sc_module
110105 // -----------DEBUG-----------
111106 dbgmodprint (" Writing: " );
112107 for (int i = 0 ; i < data_length/sizeof (int ); ++i){
113- dbgmodprint (" %02x" , *(reinterpret_cast <int *>(data )+i));
108+ dbgmodprint (" %02x" , *(reinterpret_cast <int *>(transaction-> get_data_ptr () )+i));
114109 }
115110 printf (" \n " );
116111 // -----------DEBUG-----------
@@ -133,7 +128,6 @@ struct img_initiator: sc_module
133128 transaction->get_extension (img_ext);
134129 cur_command = transaction->get_command ();
135130 dbgmodprint (" BEGIN_REQ SENT TRANS ID %0d" , img_ext->transaction_number );
136- pending_transaction = transaction;
137131 status = socket->nb_transport_fw (*transaction, phase, ((cur_command == tlm::TLM_WRITE_COMMAND) ? this ->write_delay : this ->read_delay )); // Non-blocking transport call
138132
139133 // Check request status returned by target
@@ -143,7 +137,6 @@ struct img_initiator: sc_module
143137 dbgmodprint (" %s received -> Transaction ID %d" , " TLM_ACCEPTED" , img_ext->transaction_number );
144138 check_transaction (*transaction);
145139 transaction->release ();
146- pending_transaction = 0 ;
147140 // Initiator only cares about sending the transaction, doesnt need to wait for response (non-blocking)
148141 break ;
149142 }
@@ -159,8 +152,8 @@ struct img_initiator: sc_module
159152 wait (transaction_received_e);
160153 // -----------DEBUG-----------
161154 dbgmodprint (" [DEBUG1] Reading at Initiator: " );
162- for (int i = 0 ; i < this -> data_length /sizeof (int ); ++i){
163- dbgmodprint (" %02x" , *(reinterpret_cast <int *>(this -> data )+i));
155+ for (int i = 0 ; i < transaction-> get_data_length () /sizeof (int ); ++i){
156+ dbgmodprint (" %02x" , *(reinterpret_cast <int *>(transaction-> get_data_ptr () )+i));
164157 }
165158 printf (" \n " );
166159 // -----------DEBUG-----------
@@ -191,11 +184,7 @@ struct img_initiator: sc_module
191184 dbgmodprint (" HERE3" );
192185
193186 trans.acquire ();
194- this ->data_length = trans.get_data_length ();
195- this ->data = new unsigned char [this ->data_length ];
196- memcpy (this ->data , trans.get_data_ptr (), this ->data_length );
197187
198- this ->pending_transaction = &trans; // Set response transaction to return
199188 check_transaction (trans);
200189
201190 // Initiator dont care about confirming resp transaction. So nothing else to do.
@@ -213,8 +202,8 @@ struct img_initiator: sc_module
213202 transaction_received_e.notify ();
214203 // -----------DEBUG-----------
215204 dbgmodprint (" [DEBUG] Reading at Initiator: " );
216- for (int i = 0 ; i < this -> data_length /sizeof (int ); ++i){
217- dbgmodprint (" %02x" , *(reinterpret_cast <int *>(this -> data )+i));
205+ for (int i = 0 ; i < trans. get_data_length () /sizeof (int ); ++i){
206+ dbgmodprint (" %02x" , *(reinterpret_cast <int *>(trans. get_data_ptr () )+i));
218207 }
219208 printf (" \n " );
220209 // -----------DEBUG-----------
0 commit comments