Showing results for 
Search instead for 
Did you mean: 
Honored Contributor I

TSE and flow control issue


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 I

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 I

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.