The buffer that accompanies the RapidIO Core release can bet set to use either receiver-based flow control and transmitter-based flow control. What is the difference?
For a detailed description of the difference, refer to Part IV Section 18.104.22.168 and 22.214.171.124 of the RapidIO Interconnect Specification.
In general, receiver-based flow control is the simplest method of flow control and is easier to implement. The receiving device controls the flow of packets from its link partner by accepting or rejecting packets on a packet-by-packet basis. The receiving port provides no information to its link partner about the amount of buffer space it has available for packet reception. This method is less efficient than transmitter-based flow control because the transmitting device transmits packets without knowing if the packet will be accepted or not by the receiver. If the receiving device has no buffer space available to store an incoming packet, it will retry the packet. Receiver-based flow control will result in more retries, especially on a busy link.
When using transmitter-based flow control, the receiving port provides information to its link partner regarding the amount of free buffer space available. The transmitting device can then use this information to allocate the receiving device's buffer space according to the number and priority of packets that the sending port has waiting for transmission. By doing so, it can avoid the need for one or more packets to be retried due to lack of buffer space.
The Xilinx buffer accompanying the RapidIO Core is capable of operating in either mode. You can change the flow control by modifying a parameter in the "tx_control.v" file. Look for the following section:
// Flow control
// TX_FLOW_CONTROL_ENABLE = 1 => TX FLOW CONTROL
// TX_FLOW_CONTROL_ENABLE = 0 => RX FLOW CONTROL
// If the attached device is in RX FLOW CONTROL, then
// this parameter will be overridden and the buffer will
// operate in RX FLOW CONTROL.
parameter TX_FLOW_CONTROL_ENABLE = 1'b1;
The default is transmitter-based flow control.