Visible to Intel only — GUID: xnw1606883401688
Ixiasoft
Visible to Intel only — GUID: xnw1606883401688
Ixiasoft
2.9.2.12. 100G UI Adjustment
TAM is reference time for Alignment Marker (AM) for variants with AM, and arbitrary selected reference bit for variants without AM.
- Request snapshot of initial TX TAM and RX TAM:
csr_write (mlptp_tam_snapshot, 1’b1)
- Read snapshotted initial TAM and counter values:
tx_tam_0_31_0 = csr_read (mlptp_tx_tam_l[31:0]) tx_tam_0_47_32 = csr_read (mlptp_tx_tam_h[15:0]) tx_tam_0_cnt = csr_read (mlptp_tx_am_count[15:0]) rx_tam_0_31_0 = csr_read (mlptp_rx_tam_l[31:0]) rx_tam_0_47_32 = csr_read (mlptp_rx_tam_h[15:0]) rx_tam_0_cnt = csr_read (mlptp_rx_am_count[15:0]) Form complete TAM by concatenation tx_tam_0 = {tx_tam_0_47_32, tx_tam_0_31_0}; rx_tam_0 = {rx_tam_0_47_32, rx_tam_0_31_0};
- Clear snapshot:
csr_write (mlptp_tam_snapshot, 1’b0)
- Starting from 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).
- Request snapshot of Nth TX TAM and RX TAM:
csr_write (mlptp_tam_snapshot, 1’b1)
- Read snapshotted Nth TAM and counter values:
tx_tam_n_31_0 = csr_read (mlptp_tx_tam_l[31:0]) tx_tam_n_47_32 = csr_read (mlptp_tx_tam_h[15:0]) tx_tam_n_cnt = csr_read (mlptp_tx_am_count[15:0]) rx_tam_n_31_0 = csr_read (mlptp_rx_tam_l[31:0]) rx_tam_n_47_32 = csr_read (mlptp_rx_tam_h[15:0]) rx_tam_n_cnt = csr_read (mlptp_rx_am_count[15:0]) Form complete TAM by concatenation tx_tam_n = {tx_tam_n_47_32, tx_tam_n_31_0}; rx_tam_n = {rx_tam_n_47_32, rx_tam_n_31_0};
- Clear snapshot:
csr_write (mlptp_tam_snapshot, 1’b0)
- Calculation:
- Get TAM interval (tx_tam_interval and rx_tam_interval) from 10G/25G TX and RX Unit Interval Adjustment.
- Calculate time elapsed:
tx_tam_delta = (tx_tam_n <= tx_tam_0) ? [(tx_tam_n + 10^9ns) – tx_tam_0] : (tx_tam_n – tx_tam_0) rx_tam_delta = (rx_tam_n <= rx_tam_0) ? [(rx_tam_n + 10^9ns) – rx_tam_0] : (rx_tam_n – rx_tam_0)
Note: 10^9ns = 48’h 3B9A_CA00_0000 - Calculate estimated count value:
tx_tam_cnt_est = round_up_to_nearest_integer(tx_tam_delta / (tx_tam_interval * 0ppm_UI)) rx_tam_cnt_est = round_up_to_nearest_integer(rx_tam_delta / (rx_tam_interval * 0ppm_UI)) Where 0ppm_UI is 38.7878 ps. If tx_tam_cnt_est or rx_tam_cnt_est > 64000, which indicates 16-bit counters may have already overflow 2 times or more, you must restart from step 1.
This step is optional, and required only if snapshot may happen longer than duration specified in Minimum and Maximum Reference Time (TAM) Interval for UI Measurement (Hardware). For example: The read response of System-console via JTAG master is slow.
- Calculate TAM count value:
tx_tam_cnt = (tx_tam_n_cnt < tx_tam_0_cnt) ? [(tx_tam_n_cnt + 2^16) – tx_tam_0_cnt] : (tx_tam_n_cnt – tx_tam_0_cnt) rx_tam_cnt = (rx_tam_n_cnt < rx_tam_0_cnt) ? [(rx_tam_n_cnt + 2^16) – rx_tam_0_cnt] : (rx_tam_n_cnt – rx_tam_0_cnt)
- Calculate UI value:
tx_ui = (tx_tam_delta) / (tx_tam_cnt * tx_tam_interval / 4) rx_ui = (rx_tam_delta) / (rx_tam_ cnt * rx_tam_interval / 4) * 330
- Write the calculated UI value to IP:
csr_write (mlptp_tx_ui, tx_ui) csr_write (mlptp_rx_ui, rx_ui)
Ensure the format is {4-bit nanoseconds, 24-bit fractional nanoseconds}.
- After first UI measurement, for every minimum TAM interval or longer duration, repeat step 1 to 9. This is to prevent time counter drift from golden Time-of-Day in the system whenever clock ppm changes.
Did you find the information on this page useful?
Feedback Message
Characters remaining: