Controlling TX to RX Loopback

Versal Adaptive SoC SelectIO Resources Architecture Manual (AM010)

Document ID
Release Date
1.5 English
Each NIBBLESLICE can loop back the TX data or strobe to its RX. While the loopback occurs prior to the IOB, the TX clock and data will still reach the IOB as normal. TXRX_LOOPBACK_# = TRUE should only be enabled for NIBBLESLICEs that are used. Thus, care must be taken to prevent contention with other incoming signals at the pad. Loopback (implying TXRX_LOOPBACK_# = TRUE) is not supported when SERIAL_MODE = TRUE. The following sequence describes how to perform loopback of a source-synchronous interface:
  1. Set TXRX_LOOPBACK_x = TRUE on each NIBBLESLICE[x] loopback that is desired.
  2. Loopback requires a strobe that is used as the capture clock. For the XPHY that contains the strobe, set DQS_SRC = LOCAL. If the interface spans multiple nibbles, set DQS_SRC = EXTERN on nibbles receiving the strobe through inter-byte clocking. For nibbles receiving the strobe through inter-nibble clocking, set EN_OTHER_PCLK = TRUE and EN_OTHER_NCLK = TRUE.
  5. A buffer (IBUF, OBUF, IOBUF, or a variant of one of the three) must be used for loopback to work. Connect the net from XPHY.O0[x] to the input of an OBUF, IOBUF, or variant of one of the two. Alternatively, connect the output net from an IBUF, IOBUF, or a variant of one of the two to XPHY.DATAIN[x]. Regardless of which net is used, only use one buffer (IBUF, OBUF, or variant) in this path.
  6. Choose one of the following:
    • Transmit the clock as edge-aligned with data by setting TX_OUTPUT_PHASE_90_0 = FALSE. Also set RX_CLK_PHASE_P/N = SHIFT_90 so that the receiver can center the clock to data.
    • Transmit the clock as center-aligned with data by setting TX_OUTPUT_PHASE_90_0 = TRUE. Also set RX_CLK_PHASE_P/N = SHIFT_0 because no centering is necessary and the clock is received as center aligned to the data.
  7. Because looping back a source-synchronous interface requires data and strobe be transmitted, a minimum of two NIBBLESLICEs must be used: one for data, one for the strobe. Only NIBBLESLICE[0] can accept a strobe. Use inter-nibble/byte clocking to forward the strobe to other nibbles, if necessary.