GTS Ethernet Intel® FPGA Hard IP User Guide

ID 817676
Date 7/08/2024
Public
Document Table of Contents

A.4.3.1. Adjust TX UI

  1. Request snapshot of initial TX TAM:
    csr_write (ptp_uim_tam_snapshot.tx_tam_snapshot, 1’b1)
  2. Read snapshotted initial TAM and counter values:
    tx_tam_0_31_0 = csr_read (ptp_tx_uim_tam_info0.tam_31_0[31:0])
    tx_tam_0_47_32 = csr_read (ptp_tx_uim_tam_info1.tam_47_32[15:0])
    tx_tam_0_cnt   = csr_read (ptp_tx_uim_tam_info1.tam_cnt[30:16])
    tx_tam_0_valid = csr_read (ptp_tx_uim_tam_info1.tam_valid[31])
    • If tx_tam_0_valid = 1, complete TAM by concatenating the initial TAM values:
      tx_tam_0 = {tx_tam_0_47_32, tx_tam_0_31_0};
    • If tx_tam_0_valid = 0, restart from Step1.
  3. Starting from the time when step 1 is executed, wait for time duration as specified in section Minimum and Maximum Reference Time (TAM) Interval for UI Measurement (Hardware).
  4. Request snapshot of Nth TX TAM:
    csr_write (ptp_uim_tam_snapshot.tx_tam_snapshot, 1’b1)
  5. Read snapshotted Nth TAM and counter values:
    tx_tam_n_31_0 = csr_read (ptp_tx_uim_info0.tam_31_0[31:0])
    tx_tam_n_47_32 = csr_read (ptp_tx_uim_tam_info1.tam_47_32[15:0])
    tx_tam_n_cnt   = csr_read (ptp_tx_uim_tam_info1.tam_cnt[30:16])
    tx_tam_n_valid = csr_read (ptp_tx_uim_tam_info1.tam_valid[31])
    Form the TAM by concatenating snapshotted Nth TAM values:
    tx_tam_n = {tx_tam_n_47_32, tx_tam_n_31_0};
  6. Check if there was a large change to TOD value impacting TAM value:
    tx_tam_n_valid = csr_read (ptp_tx_uim_tam_info1.tam_valid[31])

    If tx_tam_n_valid = 0, restart from Step 1. If you used tx_tam_n as tx_tam_0 and tx_tam_n_cnt as tx_tam_0_cnt, you can skip Steps 1 and 2. Then, you can start the wait time in Step 3 when the Step 4 executes.

  7. Calculation:
    1. Get TAM interval:
      tx_tam_interval = <Refer to Reference Time Interval>
      tx_tam_interval_per_pl = tx_tam_interval / PL
    2. Calculate time elapsed:
      tx_tam_delta = 
         (tx_tam_n <= tx_tam_0) ? [(tx_tam_n + 10^9 ns) – tx_tam_0] 
                                : (tx_tam_n – tx_tam_0)
      Per Step 3, tx_tam_0 and tx_tam_n difference must be within the expected time range.
      • If tx_tam_delta (in ms) is lesser that the minimum time value specified by Time (ms) column of Table: Table 57, discard the result and restart from step 3.
      • If tx_tam_delta (in ms) is greater than the maximum value specified by Time (ms) column of Table: Table 57, discard the result and restart from step 1.
      Note: 10^9 ns = 48’h 3B9A_CA00_0000
    3. Calculate TAM count value:
      tx_tam_cnt = (tx_tam_n_cnt < tx_tam_0_cnt) ? [(tx_tam_n_cnt + 2^15) – tx_tam_0_cnt] 
       : (tx_tam_n_cnt – tx_tam_0_cnt)
      Per Step 3, tx_tam_0 and tx_tam_n difference must be within the expected time range.
      • If tx_tam_cnt (in ms) is lesser that the minimum time value specified by Number of Count column of Table: Table 57, discard the result and restart from step 3.
      • If tx_tam_cnt (in ms) is greater than the maximum value specified by Number of Count column of Table: Table 57, discard the result and restart from step 1.
    4. Calculate UI value:
      tx_ui = (tx_tam_delta) / (tx_tam_cnt * tx_tam_interval_per_pl)
  8. Write the calculated UI value to IP:
    csr_write (tx_ptp_ui, tx_ui)

    Ensure the format is {4-bit nanoseconds, 28-bit fractional nanoseconds}.

  9. After first UI measurement, for every minimum TAM interval or longer duration, repeat step 1 to 8. This is to prevent time counter drift from golden TOD in the system whenever clock PPM changes.