F-Tile Ethernet Intel® FPGA Hard IPユーザーガイド

ID 683023
日付 7/08/2024
Public
ドキュメント目次

4.4.6.2. RX UI調整

  1. 初期RX TAMのスナップショットを要求します。
    csr_write (ptp_uim_tam_snapshot.rx_tam_snapshot, 1’b1)
  2. スナップショットの初期のTAM値とカウンター値を読み出します。
    rx_tam_0_31_0 = csr_read (ptp_rx_uim_tam_info0.tam_31_0[31:0])
    rx_tam_0_47_32 = csr_read (ptp_rx_uim_tam_info1.tam_47_32[15:0])
    rx_tam_0_cnt   = csr_read (ptp_rx_uim_tam_info1.tam_cnt[30:16])
    rx_tam_0_valid = csr_read (ptp_rx_uim_tam_info1.tam_valid[31])
    • rx_tam_0_valid = 1の場合は、初期TAM値を連結してTAMを完成させます。
      rx_tam_0 = {rx_tam_0_47_32, rx_tam_0_31_0};
    • rx_tam_0_valid = 0の場合は、ステップ1から再度開始します。
  3. ステップ1が実行された時点から、UI測定における最小および最大リファレンス時間 (TAM) 間隔 (ハードウェア) のセクションで指定されている時間を待機します。
  4. N番目のRX TAMのスナップショットを要求します。
    csr_write (ptp_uim_tam_snapshot.rx_tam_snapshot, 1’b1)
  5. スナップショットのN番目のTAM値とカウンター値を読み出します。
    rx_tam_n_31_0  = csr_read (ptp_rx_uim_info0.tam_31_0[31:0])
    rx_tam_n_47_32 = csr_read (ptp_rx_uim_tam_info1.tam_47_32[15:0])
    rx_tam_n_cnt   = csr_read (ptp_rx_uim_tam_info1.tam_cnt[30:16])
    rx_tam_n_valid = csr_read (ptp_rx_uim_tam_info1.tam_valid[31])
    スナップショットのN番目のTAM値を連結してTAMを形成します。
    rx_tam_n = {rx_tam_n_47_32, rx_tam_n_31_0};
  6. TAM値に影響するようなTOD値の大きな変更があったかを確認します。
    rx_tam_n_valid = csr_read (ptp_rx_uim_tam_info1.tam_valid[31])

    rx_tam_n_valid = 0の場合は、ステップ1から再度開始します。rx_tam_n を新しい rx_tam_0rx_tam_n_cnt を新しい rx_tam_0_cnt として使用している場合は、ステップ1と2をスキップすることができます。その場合、ステップ4が実行された時点がステップ3の待機時間の開始になります。

  7. 次の計算を行います。
    1. TAM間隔を取得します。
      rx_tam_interval = <Refer to Reference Time Interval>
      rx_tam_interval_per_pl = rx_tam_interval / PL
    2. 経過時間を計算します。
      rx_tam_delta = 
         (rx_tam_n <= rx_tam_0) ? [(rx_tam_n + 10^9ns) – rx_tam_0] 
                                 : (rx_tam_n – rx_tam_0)
      ステップ3のとおり、rx_tam_0rx_tam_n の差は、想定されている時間範囲内に収まっている必要があります。
      • rx_tam_delta (ミリ秒) が、指定されている最小時間値よりも小さい場合は、結果を破棄し、ステップ3から再度開始します。最小時間に関しては、UI測定における最小および最大リファレンス時間 (TAM) 間隔 (ハードウェア) のセクションにある表: UI測定で許容される最小および最大リファレンス時間 (TAM) 間隔 (ハードウェアBasicモード)、および表: UI測定で許容される最小および最大リファレンス時間 (TAM) 間隔 (ハードウェアAdvancedモード) の時間 (ms) 列を参照してください。
      • rx_tam_delta (ミリ秒) が、指定されている最大値よりも大きい場合は、結果を破棄し、ステップ1またはステップ3から再度開始します。また、rx_tam_n を新しい rx_tam_0 として使用します。最大値に関しては、UI測定における最小および最大リファレンス時間 (TAM) 間隔 (ハードウェア) のセクションにある表: UI測定で許容される最小および最大リファレンス時間 (TAM) 間隔 (ハードウェアBasicモード)、および表: UI測定で許容される最小および最大リファレンス時間 (TAM) 間隔 (ハードウェアAdvancedモード) の時間 (ms) 列を参照してください。
      注: 10^9ns = 48’h 3B9A_CA00_0000
    3. TAMカウント値を計算します。
      rx_tam_cnt = (rx_tam_n_cnt < rx_tam_0_cnt) ? [(rx_tam_n_cnt + 2^15) – rx_tam_0_cnt] 
      									       : (rx_tam_n_cnt – rx_tam_0_cnt)
      ステップ3のとおり、rx_tam_0rx_tam_nの差は、想定されている時間範囲内に収まっている必要があります。
      • rx_tam_cnt (ミリ秒) が、指定されている最小時間値よりも小さい場合は、結果を破棄し、ステップ3から再度開始します。最小時間値に関しては、UI測定における最小および最大リファレンス時間 (TAM) 間隔 (ハードウェア) のセクションにある表: UI測定で許容される最小および最大リファレンス時間 (TAM) 間隔 (ハードウェアBasicモード)、および表: UI測定で許容される最小および最大リファレンス時間 (TAM) 間隔 (ハードウェアAdvancedモード) のカウント数の列を参照してください。
      • rx_tam_cnt (ミリ秒) が、指定されている最大値よりも大きい場合は、結果を破棄し、ステップ1またはステップ3から再度開始します。また、rx_tam_n を新しい rx_tam_0 として使用します。最大値に関しては、UI測定における最小および最大リファレンス時間 (TAM) 間隔 (ハードウェア) のセクションにある表: UI測定で許容される最小および最大リファレンス時間 (TAM) 間隔 (ハードウェアBasicモード)、および表: UI測定で許容される最小および最大リファレンス時間 (TAM) 間隔 (ハードウェアAdvancedモード) のカウント数の列を参照してください。
    4. UI値を計算します。
      rx_ui = (rx_tam_delta) / (rx_tam_cnt * rx_tam_interval_pl)
  8. 計算したUI値をIPに書き込みます。
    csr_write (rx_ptp_ui, rx_ui)

    形式が {4ビット・ナノ秒整数部、28ビット・ナノ秒少数部} になっていることを確認してください。

  9. 最初のUI測定後は、最小TAM間隔、またはそれ以上の期間ごとにステップ1から8を繰り返します。これにより、クロックのppmが変化した際にシステムの基準となるTime-of-Dayから時間カウンターがドリフトするのを防ぎます。