g_as Posted March 11, 2019 Report Share Posted March 11, 2019 I set the following in the constructor char test = 'X'; uint32_t t_add = 0; and in the run() sc_core::sc_time delay = sc_core::SC_ZERO_TIME; tlm::tlm_generic_payload trans; trans.set_command(tlm::TLM_WRITE_COMMAND); trans.set_address(t_add); trans.set_data_ptr((unsigned char*)&test); trans.set_data_length(1); socket->b_transport(trans, delay); I didn't receive the 'X' at the target? Do I miss something at the initiator? Quote Link to comment Share on other sites More sharing options...
Eyck Posted March 11, 2019 Report Share Posted March 11, 2019 Well, I don't know how your infrastructure looks like, but in general your setup is ok. What is missing is to set the streaming width which should be one in your case. So a bit more context would be allow to help you better. Context means: how are the sockets connected (is there a direct connection initiator->target or do you use some bus system) how do you read the value out of the payload? Best regards Quote Link to comment Share on other sites More sharing options...
g_as Posted March 12, 2019 Author Report Share Posted March 12, 2019 Thanks Eyck I set the streaming width to 1; Still the same issue The initiator is connected to a bus. I expect this data to be directed to a memory connected on the same bus. When I read this memory I find a garbage value. Could you please give me a hint how can I debug that the bus routed the data correctly? If I have "m" targets and "n" initiators connected to a bus: 1. Are their arrangement mandatory? or they are connected using names? 2. Do I need to arrange this connection according to the addresses I assign to them? 3. If I have a bus with 8 ports and I would like to connect only 6 is there a way to terminate the left 2? Regards, Quote Link to comment Share on other sites More sharing options...
Eyck Posted April 10, 2019 Report Share Posted April 10, 2019 Well, without lnowing the implementation it is hard to tell. I suppose your initiator sockets are connected to target sockets at he bus and the initiator sockets of the bus are connected to the target sockets of your target components. All these sockets need to be bound to each other (by calling bind() or the operator() function). There is no concept of bind-by-name in SystemC. Maybe you should have a look here: https://www.doulos.com/knowhow/systemc/tlm2/tutorial__3/ Sockets need to be bound except they are declared with the appropriate binding policy (the 4th template of the sockets). If this is not the case you need to create dummy targets. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.