FEC-Only and FlexO Modes - 2.5 English - PG369

Versal Adaptive SoC 600G Channelized Multirate Ethernet Subsystem (DCMAC) LogiCORE IP Product Guide (PG369)

Document ID
PG369
Release Date
2025-02-12
Version
2.5 English

In 50G and 100G FEC-only modes, only the RS-FEC encoder and decoder are enabled. Transcode logic, alignment logic and symbol distribution are disabled in FEC-only mode. In 100G, 200G and 400G FlexO modes transcode logic is bypassed, but alignment logic and symbol distribution are enabled.

The FEC-only and FlexO modes run at half the effective clock rate of the SerDes (tx_serdes_clk[5:0] / rx_serdes_clk[5:0]) clock (the actual flexif clock rate might be higher, but enabled cycles are half the SerDes clock rate).

In the transmit direction, you must indicate the start of the codeword and then continue to provide data until the end of the codeword. No gaps are allowed other than those required by the stall within codewords. Gaps are allowed between codewords, giving you the ability to control the effective data rate.

For 50G FEC-only mode, each port supports two independent streams (the tx_flex_stall_<N> and tx_flex_ena_<N> are shared between them). The first stream uses tx_flex_data_<N>[159:0] and tx_flex_start_<N>. The second stream uses tx_flex_data_<N>[319:160] and tx_flex_startb_<N>.

For 100G RS(528,514) FEC-only mode, because the codeword size is not an integer number of cycles, tx_flex_startb_<N> is used to indicate when the codeword starts in the second half of the tx_flex_data_<N> signal. This cycle contains both the end of the first codeword and the start of the second.

Note: For FEC-only modes, tx_flex_ena_<N> must continue to be asserted (unless indicated by tx_flex_stall_<N>) beyond the end of the codeword. The data is ignored until the next tx_flex_start_<N> is asserted. In FEC modes that use parallel codewords, both codewords must be aligned.

The 50G FEC-only mode can be combined with programmable logic to create a 64GFC solution in faster speed grades. Likewise, the 100G FEC-only mode can be combined with programmable logic to create a 64GFC solution (at half-density) in a wider range of speed grades.

For FEC-only modes, the latency through DCMAC depends on clock frequencies and on start-up conditions. Resetting a given port of DCMAC can result in a new latency through that port of DCMAC even if the clock frequencies remain fixed. You are encouraged to utilize the information provided by the start signals on the FlexIF and transceiver interface.

FlexO modes are similar to the raw FEC-only RS(544,514) modes, but there must be no gaps between codewords on TX, and alignment markers are indicated.

In the receive direction, valid data is indicated by the per-client rx_flex_ena_<N>. When rx_flex_ena_<N> is deasserted, the data is invalid. The rx_flex_ena_<N> might be deasserted at any time, including part way through a codeword.

Note: The rx_flex_fec_rx_dout_flags_<N> (and rx_flex_fec_rx_dout_flagsb_<N> for 50G modes) signals indicate the codeword status flags. These arrive for every codeword. The rx_flex_ena_<N> signal must not be used to qualify the flags.

In the transmit direction, when using FEC-only or mode for encoding, the user must pad or include the parity bits in the appropriate location. The figure below depicts the structure of a 400G FlexO frame. Note the RS FEC area - these parity bits must be set to zero for correct operation.

Figure 1. Structure of a 400G FlexO Frame

On the FlexIF interface, the signals tx_flex_start_N are used to indicate the start of a row in the preceding figure. Different tx_flex_start_N signaling is needed depending on the configured data rate.

For 400G FlexO, a new codeword pair begins every 8.5 clock cycles. The start of the new codeword pair is signaled with tx_flex_start_0 and tx_flex_start_2, followed 8 clock cycles later by the assertion of tx_flex_start_1 and tx_flex_start_3. The following figure depicts an example of a 400G FlexO RS(544,514) transfer. Note the zeroing-out of the parity bits as described in the figure below.

For 200G FlexO, a new codeword pair begins every 17 clock cycles. The start of a new codeword pair is signaled with tx_flex_start_0 and tx_flex_start_1 (for client 0), tx_flex_start_2 and tx_flex_start_3 (for client 1) or tx_flex_start_4 and tx_flex_start_5 (for client 2).

For 100G FlexO, a new codeword begins every 17 clock cycles. The start of a new codeword is signaled by tx_flex_start_N, where N is the client number.

Figure 2. Codeword bit mapping for the 400GE FlexO configuration on the FlexIF
Note:
  • cycle 81: user must set tx_flex_data_0[319:40] = 280’d0
  • cycle 82: user must set tx_flex_data_2[319:0] = 320’d0
  • cycle 83: user must set tx_flex_data_1[319:40] = 280’d0
  • cycle 84: user must set tx_flex_data_3[319:0] = 320’d0

In addition to the codeword start, the user must also indicate to the FlexIF where the alignment markers are situated. The signal tx_flex_amflag_N is used to indicate the position of the AM. In the example shown in the figure below, client 0 is 100G. Client 2 contains two streams of 50G. Client 4 is 200G FlexO, where tx_flex_amflag_4 indicates the position of the alignment marker.

Figure 3. TX FEC-Only/FlexO Flex Interface

In the example below, client 0 is 100G RS(528,514), with two back-to-back codewords. The rx_flex_start_0 signal indicates when the codeword starts in the first half of the rx_flex_data_0 bus while the rx_flex_startb_0 signal indicates when the codeword starts in the second half of the rx_flex_data_0 bus. Client 2 is 200G. The rx_flex_data_2 signal contains codeword A. The rx_flex_data_3 contains codeword B. Data after the end of the codeword can be ignored. Client 4 is 200G FlexO and includes rx_flex_amflag_4 to indicate the location of the alignment marker. Because the SerDes interface runs at line rate, there must be no ignored data other than non-enabled cycles.

Figure 4. RX FEC-Only/FlexO Flex Interface