Forum Discussion
Altera_Forum
Honored Contributor
15 years agoIf i remember correctly the chaining dma example can have multiple outstanding read requests at any one time. It keeps track of them based on the tag id used to request memory, and stores the address requested based on tag id in a memory block(tag_dpram possibly). It is a little more complicated then simply storing the tag id and address in memory, but that is the general gist of it.
It does this to improve latency and throughput, helping to cover up the round trip time of data request to data arrival. When multiple requests are outstanding there are no guarantees as to the order they will arrive. If you are pushing the data into a fifo rather than into memory where you can't just use the stored address and tag memory element, then you will have to modify the example to only have 1 outstanding tag at a time. I know there is a generic define that specifies the number of allowable tags, but don't think it will be as simple as setting that to 1. I'm pretty sure it uses a fixed tag id for the descriptors, and possibly others as well. Hope this helps. Kevin