cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Adventurer
Adventurer
4,100 Views
Registered: ‎06-03-2008

Stream mapper read vs write channel

Jump to solution

Hello,

 

According to the stream mapper v1.1 product guide, in page 10 it is mentioned that both read and write AXI transaction channels are packed to the TDATA field:

 

photo.png

However, while processing the TDATA field, it is not clear (at least to me) how to actually distinguish between a read and a write transaction. Is there a field among the above ones that actually says "this is a read transaction" or "this is a write transaction"?

 

Thanks,

dtheodor

0 Kudos
Reply
1 Solution

Accepted Solutions
Adventurer
Adventurer
6,444 Views
Registered: ‎06-03-2008

Well after a lot of experiments, these are the values that the M_AXIS_TID gets, based on the mapped AXI transaction to the TDATA field:

 

write response channel -> 0
write address channel   -> 1
read address channel   -> 2
read data channel        -> 3
write data channel        -> 4

 

Hope this helps others!

dtheodor

View solution in original post

6 Replies
Teacher
Teacher
4,056 Views
Registered: ‎03-31-2012

@dtheodor actually it's worse than just read/write address channel;  there is no information on how to separate the write data channel either. This logic is probably hidden in the streamer one uses on the other side.

- Please mark the Answer as "Accept as solution" if information provided is helpful.
Give Kudos to a post which you think is helpful and reply oriented.
0 Kudos
Reply
Adventurer
Adventurer
4,040 Views
Registered: ‎06-03-2008

Hello muzaffer,

 

Thanks for the reply! So what's you are saying is that there is no way to distinguish the transaction type (AXI read / write command, read / write data, response) if my custom logic parses each time the 'TDATA' field?

 

The reason I am asking is because, I want to use the Stream mapper output as an input for an HLS-based IP of mine, and use its fields (e.g. address, id, etc) to do some processing:

 

void myIP (AXI_STREAM &inputFromStreamMapper, ...) {
	uint32 aWAddr,aWId, aWSize,aRAddr,aRId, aRSize,transactionType;

        //which data range to use?
        transactionType =  inputFromStreamMapper.data.range(?????);

        if (transactionType == 'write command') {
                aWAddr = inputFromStreamMapper.data.range(31,0);
	        aWId = inputFromStreamMapper.data.range(56,53);
	        aWSize = inputFromStreamMapper.data.range(37,35);
        }
        else if (transactionType == 'read command') {
                aRAddr = inputFromStreamMapper.data.range(31,0);
	        aRId = inputFromStreamMapper.data.range(56,53);
	        aRSize = inputFromStreamMapper.data.range(37,35);
        }
        else if (transactionType == 'read data') {
                ....
        }
        else if (transactionType == 'write data') {
               .....
        }
}

So, is this possible with the Stream mapper? Moreover, (in case you know) what is its difference compared to the Data Mover IP from Xilinx?

 

Thanks a lot!

dtheodor

0 Kudos
Reply
Teacher
Teacher
4,036 Views
Registered: ‎03-31-2012

@dtheodor given that stream mapper can encapsulate & expand itself, there is a way but it's not obvious (to me and apparently to you) how it is done from the product guide. It might be possible to infer how the multiplexing is done by looking at the simulation sources (assuming they are not encrypted).

 

As to datamover; the difference seems to be that the datamover is a dma engine which has control registers which decide, say, where memory is read from at its axi-mm master and transmits to its axi-s master port. Stream-mapper on the other hand has an axi-mm slave and it translates all the transactions it sees there into a stream of instructions to it axi-s master port. It's a way of collapsing 5 channels of axi-mm into two streams effectively removing the performance advantage of axi-mm interface as everything is serialized.

- Please mark the Answer as "Accept as solution" if information provided is helpful.
Give Kudos to a post which you think is helpful and reply oriented.
Adventurer
Adventurer
4,003 Views
Registered: ‎06-03-2008

OK, thanks a lot again for the reply. I will try to "decrypt" based on simulations, how one can distinguish the transaction types.

 

In the meantime, can anyone from Xilinx comment on this?

 

Thanks,

dtheodor

 

0 Kudos
Reply
Adventurer
Adventurer
3,838 Views
Registered: ‎06-03-2008

Well, it looks like the M_AXIS_TID output signal values are associated with the AXI transaction type.

 

This is for anyone who would like to use the mapper in the way we are trying also to do it.

 

In the documentation, it is mentioned that M_AXIS_TID "provides routing information for the data stream." To the documentation editors: please update it with the values that this signal gets when an MM AXI transaction is mapped to stream.

 

dtheodor

0 Kudos
Reply
Adventurer
Adventurer
6,445 Views
Registered: ‎06-03-2008

Well after a lot of experiments, these are the values that the M_AXIS_TID gets, based on the mapped AXI transaction to the TDATA field:

 

write response channel -> 0
write address channel   -> 1
read address channel   -> 2
read data channel        -> 3
write data channel        -> 4

 

Hope this helps others!

dtheodor

View solution in original post