Fタイル・イーサネット・インテル® FPGAハードIPユーザーガイド

ID 683023
日付 3/28/2022
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番目の値およびカウンター値を読み出します。
    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_0 として使用し、rx_tam_n_cnt を新しい rx_tam_0_cnt として使用した場合は、ステップ1と2をスキップできます。その場合、ステップ3の待機時間の開始は、ステップ4を実行したときになります。

  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 (単位: ミリ秒) が、UI測定の最小および最大リファレンス・タイム (TAM) インターバル (ハードウェア) のセクションにある、UI測定で許可される最小および最大リファレンス・タイム (TAM) インターバル (ハードウェアBasicモード) の表、およびUI測定で許可される最小および最大リファレンス・タイム (TAM) インターバル (ハードウェア) の表の時間 (ms) 列で指定された最小時間の値よりも小さい場合、結果を破棄し、ステップ3からやり直します。
      • rx_tam_delta (単位: ミリ秒) が、 UI測定の最小および最大リファレンス・タイム (TAM) インターバル (ハードウェア) のセクションにある、UI測定で許可される最小および最大リファレンス・タイム (TAM) インターバル (ハードウェアBasicモード) の表、およびUI測定で許可される最小および最大リファレンス・タイム (TAM) インターバル (ハードウェア) の表の時間 (ms) 列で指定された最小時間の値よりも大きい場合、結果を破棄し、ステップ1またはステップ3からやり直します。その場合は、rx_tam_n を新しい rx_tam_0 として使用します。
      注: 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 (単位: ミリ秒) が、UI測定の最小および最大リファレンス・タイム (TAM) インターバル (ハードウェア) のセクションにある、UI測定で許可される最小および最大リファレンス・タイム (TAM) インターバル (ハードウェアBasicモード) の表、およびUI測定で許可される最小および最大リファレンス・タイム (TAM) インターバル (ハードウェア) の表のカウント数の列で指定された最小時間の値よりも小さい場合、結果を破棄し、ステップ3からやり直します。
      • rx_tam_cnt (単位: ミリ秒) が、UI測定の最小および最大リファレンス・タイム (TAM) インターバル (ハードウェア) のセクションにある、UI測定で許可される最小および最大リファレンス・タイム (TAM) インターバル (ハードウェアBasicモード) の表、およびUI測定で許可される最小および最大リファレンス・タイム (TAM) インターバル (ハードウェア) の表のカウント数の列で指定された最小時間の値よりも小さい場合、結果を破棄し、ステップ1からやり直します。その場合は、rx_tam_n を新しい rx_tam_0として使用します。
    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が変化するたびにゴールデンタイムからドリフトするのを防ぐためです。