F-Tile Ethernet Intel® FPGA Hard IP User Guide

ID 683023
Date 3/28/2022

A newer version of this document is available. Customers should click here to go to the newest version.

Document Table of Contents

4.4.4. RX Virtual Lane Offset Calculation for No FEC Variants

  1. Lock the RX PCS.

    The RX PCS must be fully aligned before extracting VL Offset data. Wait for o_rx_pcs_fully_aligned to be asserted.

  2. Read the VL data for each of the Local Virtual Lanes (VL):

    Perform the read operation from o_rx_pcs_status[mode] register via CSR interface. This returns VL data field data for all 20 virtual lanes.

  3. Set the Physical Lanes for each Remote Virtual Lane:
    Step through the data provided by each Local Virtual lane:
    • Each lane provides a REMOTE_VL and a LOCAL_PL value.

    For each of the 20 possible Remote virtual lanes, set PL[REMOTE_VL] = LOCAL_PL.

    For example, if you read Local Virtual lane 12, and get back REMOTE_VL = 5, LOCAL_PL = 2, that means the data for Virtual lane 5 from the link partner is coming in on our Physical lane 2. You store that as PL[5] = 2.

  4. Calculate the Virtual Lane Offsets for each of the Remote Virtual Lanes in bits:
    For 100GE rate:
    Virtual Lane Offset = sync_pulse to last AM  
       = gb_33_66_occupancy + gb_66_110_occupancy + blk_align_occupancy
       + am_detect_occupancy + am_count - local_lane_adjust
    For 50GE-2 rate:
    Virtual Lane Offset = sync_pulse to last AM  
      = gb_33_66_occupancy + sep50_occupancy + blk_align_occupancy
      + am_detect_occupancy + am_count - local_lane_adjust
  5. Apply shifts to the offsets for REMOTE_VLs {18..19} to account for the mii_am/mii_data reordering that happens in the PCS MII Decoder. This step is applicable for 50GE-2 and 100GE rates only.
    • Generate vl_offset_bits shifted for each of the REMOTE_VLs.
    • When using RX PTP on data from the RX PCS, shift the times for REMOTE_VLs 18 to 19 by -330 bits:
      vl_offset_bits_shifted[REMOTE_VL] = vl_offset_bits[REMOTE_VL] -330 for REMOTE_VL == {18..19}
      vl_offset_bits_shifted[REMOTE_VL] = vl_offset_bits[REMOTE_VL] for REMOTE_VL == {0..17}

      This shift accounts for a shift that is applied by the RX PCS to incoming data.

      For example, if vl_offset_bits[18] == 887, set vl_offset_bits_shifted[18] to 557. If vl_offset_bits[17] == 887, set vl_offset_bits_shifted[17] to 887.

    Note: For 50GE-2 rates, follow same instructions except only apply the shifting to VL3.
  6. Convert the vl_offset_bits to VL_OFFSET (in ns):
    For each REMOTE_VL, VL_OFFSET[REMOTE_VL] = vl_offset_bits_shifted[REMOTE_VL] * RX_UI