FPGA Intellectual Property
PCI Express*, Networking and Connectivity, Memory Interfaces, DSP IP, and Video IP
Intel Support hours are Monday-Fridays, 8am-5pm PST, except Holidays. Thanks to our community members who provide support during our down time or before we get to your questions. We appreciate you!

Need Forum Guidance? Click here
Search our FPGA Knowledge Articles here.
5949 Discussions

TSE and flow control issue

Honored Contributor II


We have an application where the Altera Triple Speed Ethernet core is connected to a bandwidth limited communication channel. All packets received are forwarded. The TSE is working in 1GbE mode. As the target communication channel is more narrow at some point the the receive buffers get full and the flow control should kick in. 


The issue is that under certain line loads the flow control collapses. No pause frames are sent out and packets are dropped due to rx buffer congestion. 


It means that the TSE either fails to send a pause frame or somehow misses to generate it, but the result is that, as the ethernet tester on upstream continues to keep line loaded with traffic, MAC buffers stay full, rx_section_empty threshold is kept passed and no further pause frames are sent out. 

Therefore, packets get lost. XON message by MAC will be generated again after traffic from tester is stopped.  


We have not been able to capture such situation in simulation - only in HW after a thousands / millions of packets - sometimes maybe hundreds. 


My question is, has somebody seen such anomaly before? How to work around? 


In case an external flow control state machine is built by utilizing the TSE xon_gen, xoff_gen inputs - how is the correct way to disable the TSE MAC internal flow control based on rx_section_empty threshold? 


Playing with pause quanta, rx_sction_empty threshold it is possible to find a working solution for a particular packet length/line load configuration. But, so far, we have been unable to find an always working solution - at some point it always collapses. 


One other observation - the TSE fails to generate a pause frame in case the incoming frames have invalid length and the length checking is enabled from config register. 



0 Kudos
2 Replies
Honored Contributor II

Just a note to fellow forumians and to close the topic - TSE flow control issue was worked around by building own external flow control machine which uses TSE interface signals xon_gen and xoff_gen to trigger pause frames. It's important to re-request a pause frame generation in case TSE fails to do it.  

This way got the flow control working properly. 

Honored Contributor II

Adding on to this - after most of a day I am unable under any initialization of the TSE, including turning on the XOFF_GEN bit in the command register, to get pause frames out of the TSE.