In this example, data transfer into the FLEX I/F port is active on Client 0 and
2. Client 0 is 100GE in raw mode (c0_ctl_flexif_select==0
). The user logic drives data (tx_flex_data_0
) into the interface while asserting tx_flex_ena_0
. In this mode, the user provides the alignment
markers, which are indicated by tx_flex_am_flag_0
.
Client 2 is 200GE in one of the other PCS modes. In this case, the user logic can
indicate where the AM should go by asserting tx_flex_am_flag_2
. The AM is inserted just before the data on this cycle.
The ability to specify the AM location is enabled by asserting c2_ctl_tx_flexif_am_mode
.
Notice the relationship between the per-port tx_flex_stall_<N>
signal and tx_flex_ena_<N>
. The stall signal is output to backpressure the
transfers into the FLEX I/F. For the stall signal, you must stall (drop the enable) for
the same number of cycles that the stall signal is asserted (within three cycles). For
example, if the stall signal is High for one cycle, drop the enable signal for one
cycle. The enable should follow the stall by a fixed number (0-3) of cycles (except
inverted).
In the receive direction, the FLEX I/F outputs data at the configured port
rate. Valid data is indicated by the per-client signal
rx_flex_ena_<N>
. When rx_flex_ena_<N>
is deasserted, the data is invalid. There is no
backpressure from the user logic back to the FLEX I/F port. The user logic must be able
to keep up with the selected data rate. In the following example, client 0 is 400GE. The
AM position is indicated by rx_flex_amflag_0
. Client 4
is 128GFC (c4_ctl_rx_flexif_select==0
and and c4_ctl_rx_fec_mode == 5'b01000
). In this mode, the AM is
provided and indicated with rx_flex_amflag_4
.
rx_flex_startb_<N>
signal is used to
indicate the RX status. The user logic can use the status signal to switch to a
locally timed and generated local fault if desired.