Jump to content

Recommended Posts

Hi Folks

In my inteconnect model, I have a target socket In (which allows multiple initiator sockets connected to it) and an array of initiator socket like folloiwng

tlm_utils::multi_passthrough_target_socket<QC_Mux_base<N_TARGETS>, 32, tlm::tlm_base_protocol_types,0,sc_core::SC_ZERO_OR_MORE_BOUND >  In

tlm_utils::multi_passthrough_initiator_socket<QC_Mux_base<N_TARGETS>, 32, tlm::tlm_base_protocol_types,1,sc_core::SC_ZERO_OR_MORE_BOUND > Out[MAX]

Now if I receive some backward transaction, e.g. nb_transport_bw or invalidate_direct_mem_ptr, on some of the Out socket, I need to forward it via In socket. 

For that do I just say

In->nb_transport_bw(...) and

In->invalidate_direct_mem_ptr(...)

or

for(unsigned int i=0; i< In.size(); i++)

In->nb_transport_bw(...)

and

for(unsigned int i=0; i< In.size(); i++)

In->invalidate_direct_mem_ptr(...)

wrt compilation, both are accepted

Thanks in Advance

Thanks

Sumit

Link to comment
Share on other sites

Hi Sumit,

both options will forward your transaction only to the first bound initiator socket of your multi_passthrough_target_socket as it just calls the operator->() of the underlying port.

What you want to do is:

for(unsigned int i=0; i<In.size(); ++i)
	In[i]->invalidate_direct_mem_ptr(...)

But here you forward the call to all initiator sockets. In case of invalidate_direct_mem_ptr() this might be ok but for nb_transport_bw() it isn't as the call is part of the AT phases protocol and then you send e.g a BEG_RESP to a socket which never sent a BEG_REQ thus violating the TLM protocol as specified in the TLM 2.0 LRM (e.g. section 8.2.6)

Cheers

-Eyck

Link to comment
Share on other sites

On 3/22/2018 at 10:43 AM, Eyck said:

Hi Sumit,

both options will forward your transaction only to the first bound initiator socket of your multi_passthrough_target_socket as it just calls the operator->() of the underlying port.

What you want to do is:


for(unsigned int i=0; i<In.size(); ++i)
	In[i]->invalidate_direct_mem_ptr(...)

But here you forward the call to all initiator sockets. In case of invalidate_direct_mem_ptr() this might be ok but for nb_transport_bw() it isn't as the call is part of the AT phases protocol and then you send e.g a BEG_RESP to a socket which never sent a BEG_REQ thus violating the TLM protocol as specified in the TLM 2.0 LRM (e.g. section 8.2.6)

Cheers

-Eyck

Hi Eyck

My mistake, I mean to say

for(unsigned int i=0; i<In.size(); ++i)

        In[i]->invalidate_direct_mem_ptr(...)

In my platform, when I just call In->invalidate_direct_mem_ptr(...), I see it reaches to all connected sockets . but you said it will reach only to first bound initiator socket.  I am confused here.

What is different between

In->invalidate_direct_mem_ptr(...)

and 

for(unsigned int i=0; i<In.size(); ++i)

    In[i]->invalidate_direct_mem_ptr(...)

With both the cases, how we should handle nb_transport_bw()  so that it reaches only to intended recipients ?

Thanks

Sumit

Link to comment
Share on other sites

Hi Eyck

Please ignore my last thread. It was my mistake.

I should use

for(unsigned int i=0; i<In.size(); ++i)

    In[i]->invalidate_direct_mem_ptr(...)

and 

 

for(unsigned int i=0; i<In.size(); ++i)

    In[i]->nb_transport_bw() // only is corresponding nb_transport_fw() is received on that In

My only remaining point is now wrt nb_transport_bw() calls. For this if I want to make sure that my interconnect model only pass that calls to that initiator socket from which the corresponding nb_transport_fw() call is received, do I need to add the corresponding checks in interconnect model itself before forwarding the transaction using  nb_transport_bw() call ?

Thanks

Sumit

Link to comment
Share on other sites

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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...