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

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

4.4.6.1. TX UI調整

  1. 初期TX TAMのスナップショットを要求します。
    csr_write (ptp_uim_tam_snapshot.tx_tam_snapshot, 1’b1)
  2. スナップショットの初期のTAM値とカウンター値を読み出します。
    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])
    • tx_tam_0_valid = 1の場合は、初期TAM値を連結してTAMを完成させます。
      tx_tam_0 = {tx_tam_0_47_32, tx_tam_0_31_0};
    • tx_tam_0_valid = 0の場合は、ステップ1から再度開始します。
  3. ステップ1が実行された時点から、UI測定における最小および最大リファレンス時間 (TAM) 間隔 (ハードウェア) のセクションで指定されている時間を待機します。
  4. N番目のTX TAMのスナップショットを要求します。
    csr_write (ptp_uim_tam_snapshot.tx_tam_snapshot, 1’b1)
  5. スナップショットのN番目のTAM値とカウンター値を読み出します。
    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])
    スナップショットのN番目のTAM値を連結してTAM を形成します。
    tx_tam_n = {tx_tam_n_47_32, tx_tam_n_31_0};
  6. TAM値に影響するようなTOD値の大きな変更があったかを確認します。
    tx_tam_n_valid = csr_read (ptp_tx_uim_tam_info1.tam_valid[31])

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

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

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

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