Visible to Intel only — GUID: amf1570472700039
Ixiasoft
Visible to Intel only — GUID: amf1570472700039
Ixiasoft
2.9.2.7. 10G/25G TX and RX Unit Interval Adjustment
For the system with PPM, you are required to do at least one UI adjustment once out of reset. Any timestamp before the UI adjustment is invalid. The UI adjustment shall be performed after the rx/tx_ptp_ready is asserted and before starting any PTP operation. The UI adjustment applies to the system independent of PPM as long as the PPM is within the Ethernet specification. Once UI adjustment is completed, it takes two Alignment marker periods for UI to adjust and produce an accurate timestamp.
The UI adjustment is a software flow, implemented by user software, utilizing 10G/25G PTP PPM UI Adjustment registers in the 1588 PTP Registers section to compute the new UI. Once determined, the UI register updates the UI value.
10G/25G UI Adjustment Calculation
- Set TAM_SNAPSHOT to 1 to take the first snapshot of the Time of Alignment Marker (TAM) and the Alignment Marker Count (AM_Count) values. The user software snapshots the TAM and AM_Count values into the TX/RX_TAM_H/L and TX/RX_COUNT registers located in the 1588 PTP Registers.
- Read TX/RX_TAM_H/L and TX/RX_COUNT registers and save values from the first snapshot as:
- TX_TAM_0 = {TX_TAM_H, TX_TAM_L}
- TX_Count_0 = TX_COUNT
- RX_TAM_0 = {RX_TAM_H, RX_TAM_L}
- RX_Count_0 = RX_COUNT
- Clear TAM_SNAPSHOT to 0 to complete the first snapshot.
- Set TAM_SNAPSHOT to 1 again to take the Nth snapshot of the TAM and AM_Count values where N represents the number of taken snapshots.
- Read TX/RX_TAM_H/L and TX/RX_COUNT registers and save values from the Nth snapshot:
- TX_TAM_N = {TX_TAM_H, TX_TAM_L}
- TX_Count_N = TX_COUNT
- RX_TAM_N = {RX_TAM_H, RX_TAM_L}
- RX_Count_N = RX_COUNT
- Ensure the interval between the 1th snapshot and the Nth snapshot is within 1s else the snapshots are invalid for use and the user software needs to restart from step 1.
- Calculate the new UI value:
UI = TAM_Interval / (AM_Count * Reference_Time_Load_Interval).
Refer steps below to calculate TAM_Interval, AM_Count, and est_AM_Count.
Note: For more information on Reference Time Load Interval, refer to the Table 23. - Compute the TAM_Interval value. TAM is a time value in nanosecond (ns). Once the TAM value reaches 1 billion ns, it rolls over to 1s creating a rollover condition. When TAM value rolls over, the subsequent TAM_N value will appear smaller than the first TAM_0 value.
- If (TAM_N > TAM_0): TAM_Interval (ns) = (TAM_N - TAM-_0)
- If (TAM_N ≤ TAM_0): TAM_Interval (ns) = ((1s + TAM_N) - TAM_0)
- Calculate the estimated AM Count (est_AM_Count). The est_AM_Count value is used to ensure that AM_Count, calculated in next step, is valid.
est_AM_Count = INT (TAM_Interval / (Reference_Time_Load_Interval * 0ppm_UI)
where INT() is a round up function to the nearest integer, the value of 0ppm_UI for 10GE variant is 96.969696 ps and the value of 0ppm_UI for 25GE variant is 38.787878 ps. Compare the est_AM_Count with 64,000, which is the maximum AM_Count with offset. If est_AM_count exceeds 64,000, discard the snapshot and start from step 1.
- Calculate the AM_Count value. AM_Count can reach a rollover condition when reaching maximum value. Use the appropriate equation to calculate the AM_Count.
- If (Count_N > Count_0): AM_Count = (Count_N – Count_0)
- If (Count_N ≤ Count_0): AM_Count = ((65,535 – Count_0) + Count_N)
- Write the calculated TX and RX UI values to TX_UI_REG and RX_UI_REG registers.
Configuration | Data Path | Reference_Time_Load_Interval value in bits |
---|---|---|
25G variant with RS-FEC | TX | 81,920*66=5,406,720
Note: 81,920 is a 66-bit value of alignment marker interval (in terms of block numbers)
|
RX | 81,920*66=5,406,720 | |
10GE/25GE variants without RS-FEC | TX | 81,920*66=5,406,720 |
RX | 6,336 | |
100G with and without RS-FEC | TX | 16384*20*66=21,626,880
Note: 16384 is a 66-bit value of alignment marker interval (in terms of block numbers) per virtual lane.
|
RX |