FPGA Intellectual Property
PCI Express*, Networking and Connectivity, Memory Interfaces, DSP IP, and Video IP
6059 Discussions

SGDMA: never ending transfer loop without refreshing the descriptors?

Honored Contributor II



I'm using a SGDMA to transfer Data from DDR2-RAM to TSE with Gigabit Ethernet. 


Is it possible, to use SGDMA to continuous transfer Data from DDR2-RAM to TSE without refreshing the descriptors every time? Because I have to transfer data packets with a size of 1516 Bytes to TSE. And I have a lot packets placed continuous in DDR2-RAM. I want to transfer them in a loop to TSE. At the moment when I reached the end of the loop I refresh the descriptors by updating all the control bytes of every descriptor and then start the loop with "" again. But it takes to much time to update the descriptors. 


Another point is that at the moment I placed all descriptors (round about 10.000) in the same DDR2-RAM like the data which is send to TSE, because the descriptors need a lot of memory capacity. 

Later I also want to write to the DDR2-RAM and implement something like a TripleBuffer. That means another logic puts Data in DDR2-RAM and the SGDMA transfers this data to TSE. And everything should work in a endless loop... 


So, is it possible, to run SGDMA in a continuous loop? 


Or is there any alternative in refreshing the control byte of every descriptor? 


Or is it possible to send a continuous stream of data to TSE without using a descriptor for every data packet with a size of 1516 Bytes? 


If anyone has any suggestion or any hint or something else for me, it would be very nice! :-) 


Best Regards, 

0 Kudos
1 Reply
Honored Contributor II

You can set the PARK bit of the SGDMA control register to 1: 

"Seting this bit to 0 causes the SG-DMA controller core to clear 

the OWNED_BY_HW bit in the descriptor after each descriptor is 

processed. If the PARK bit is set to 1, the core does not clear the 

OWNED_BY_HW bit, thus allowing the same descriptor to be 

processed repeatedly without software intervention. You also 

need to set the last descriptor in the list to point to the first one." 


Best Regards,