FIFO modes are controlled on a per-NIBBLESLICE basis, as determined by the FIFO_MODE_<0-5> attribute.
When the write and read pointers equal each other, FIFO_EMPTY is asserted. This is the starting point for the following ASYNC latency waveforms. If the read pointer is locked at one location (for example, FIFO_RDEN is deasserted) but the write pointer is still incrementing, after eight FIFO_WR_CLK cycles the write pointer wraps around to the read pointer location. When this occurs, new data appears at the Q<0-5> pin and FIFO_EMPTY is asserted again.
The following table describes FIFO-related attributes in a simplified way. For a complete description, refer to Attributes.
Attribute | Description |
---|---|
FIFO_MODE_<0-5> | Determines the clocking topology of the FIFOs within the RX datapath. |
RX_DATA_WIDTH | Determines the deserialization for the RX datapath, which affects the DATAIN to Qx mapping. |
Mapping of DATAIN to Qx is shown in the following table, where DATAIN[x] corresponds to NIBBLESLICE[x]. Refer to the latency waveforms below for the context of P0, N0, …, P3, N3.
Deserialization (RX_DATA_WIDTH) | DATAIN[x] | |||||||
---|---|---|---|---|---|---|---|---|
N3 | P3 | N2 | P2 | N1 | P1 | N0 | P0 | |
1:8 | Qx[3] | Qx[7] | Qx[2] | Qx[6] | Qx[1] | Qx[5] | Qx[0] | Qx[4] |
1:4 | – | – | – | – | Qx[3] | Qx[7] | Qx[2] | Qx[6] |
1:2 | – | – | – | – | – | – | Qx[3] | Qx[7] |
When FIFO_MODE_x = ASYNC:
- FIFO_EMPTY can take two to three cycles to change values
- The two to three cycle latency ensures that the write pointer is always two to three locations ahead of the read pointer during operation
- FIFO_RD_CLK must be the same frequency as FIFO_WR_CLK, but is phase independent
- FIFO_EMPTY and Qx are in the FIFO_RD_CLK domain
DATAIN and Q in the following figures refer to a single NIBBLESLICE. DATAIN[x] maps to one of the Qx outputs. The waveforms show NIBBLESLICE[2], but applies to any NIBBLESLICE.
- FIFO_EMPTY takes one cycle to change values when used with the XPLL deskew circuit.
- A continuous receive data clock is assumed to allow the deskew circuitry to lock correctly.
- Deskew circuitry for the XPLL is required to align the clock outputs to the FIFO_WR_CLK for optimal performance.
- FIFO_EMPTY and Qx are in the FIFO_RD_CLK domain.
- FIFO_WR_CLK is driven by the capture clock.
- If TXRX_LOOPBACK_0 = TRUE, apply the create_clock constraint to DATAIN[0]. See Controlling TX to RX Loopback for more information on loopback.
To align FIFO_RD_CLK to FIFO_WR_CLK, the FIFO_WR_CLK can be routed to an XPLL and use the deskew circuitry, as shown in the following figure. As a result, the FIFO_RD_CLK has a fixed phase alignment to FIFO_WR_CLK.
When FIFO_MODE_x = BYPASS, the XPHY data is transmitted from the FIFO_WR_CLK domain. To help closing timing and ensuring a consistent clock routing, connect the FIFO_WR_CLK to a deskew circuitry to align a clock buffer, as shown in Figure 7.