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

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

4.4.3.1. PTP TXクライアント・フロー

このセクションでは、頭字語のPLは物理レーンを表し、VLは仮想レーンを表します。

次のフローで示す擬似コードは、概念的な説明を目的としています。実際のソフトウェア・ルーチンについては、デザイン例を参照してください。

重要: このフローのいずれかの時点においてIPでTXリセットが発生した場合は、PTP TXクライアント・フロー全体を再度開始する必要があります。
  1. 電源投入後、またはTXリセット後は、TXロー・オフセットデータの準備が整うまで待機します。
    ステータスは、次のいずれかで監視することができます。
    • 出力ポート
      o_tx_ptp_offset_data_valid = 1'b1
    • Avalon®メモリーマップド・インターフェイス・レジスターを介してのポーリング (アサートされるまで)
      csr_read(ptp_status.tx_ptp_offset_data_valid) = 1’b1
  2. IPからTXロー・オフセットデータを読み出します。
    tx_const_delay      = csr_read(ptp_tx_lane_calc_data_constdelay[30:0])
    tx_const_delay_sign = csr_read(ptp_tx_lane_calc_constdelay[31])
    
    for (pl = 0; pl < PL; pl++) {
     tx_apulse_offset[pl] = csr_read(ptp_tx_lane<pl>_calc_data_offset[30:0])
     tx_apulse_offset_sign[pl] = csr_read(ptp_tx_lane<pl>_calc_data_offset[31])
     tx_apulse_wdelay[pl] = csr_read(ptp_tx_lane<pl>_calc_data_wiredelay[19:0])
     tx_apulse_time[pl]   = csr_read(ptp_tx_lane<pl>_calc_data_time[27:0])
    }
  3. TXリファレンス・レーンを決定します。

    次のサブステップは、複数のレーンをもつデザインに適用されます。任意のレーンをリファレンス・レーンとして使用することができます。デザインのPMAレーンが1つの場合は、このサブステップをスキップすることができます。その場合は、tx_ref_pl = 0に設定します。

    1. 非同期パルス時間のロールオーバーを検出します。

      tx_apulse_time[pl] 信号は、各物理レーンの非同期時間を28ビット形式で表します。ビット [27:16] は非同期パルス時間をナノ秒 (ns) で表し、ビット [15:0] は非同期パルス時間の小数ナノ秒部 (fns) を表します。

      ロールオーバーには2つのタイプがあります。
      1. 値が28'hFFF_FFFFに達した際のビット27からビット28への自然なロールオーバー。ロールオーバー前のビット [27:24] は4'hFです。
      2. TODが10億nsまたは16進値で48'h3B9A_CA00_0000に達した際の10億ロールオーバー。ロールオーバー前のビット [27:24] は4'h9です。
      Given tx_apulse_time_max is largest tx_apulse_time from all physical lanes,
      for (pl = 0; pl < PL; pl++){
        if (tx_apulse_time_max - tx_apulse_time[pl] > 29'h01F4_0000){
          tx_apulse_time[pl] = tx_apulse_time[pl] + 29'h1000_0000
        } else {
          tx_apulse_time[pl] = tx_apulse_time[pl] + 29'h0A00_0000
        }
      }
    2. TX PMAパラレル・データ・インターフェイスでのTXアライメント・マーカーの実際の時間を計算します。
      for (pl = 0; pl < PL; pl++) {
       tx_am_actual_time[pl] = 
         (tx_apulse_time[pl]) 
       + (tx_apulse_offset_sign[pl] ? –tx_apulse_offset[pl] 
                                     : tx_apulse_offset[pl])
       – (tx_apulse_wdelay[pl])
      }
    3. TXリファレンス・レーンを決定します。
      tx_ref_pl = pl
      TXリファレンス・レーンは、すべての物理レーンを比較した場合に最大の tx_am_actual_time を含むTX物理レーンです。
  4. TXオフセットを計算します。
    重要: ステップ4cは、10Gおよび25Gのイーサネット・データレートには適用されません。これらのレートではステップ4cをスキップします。
    1. TX TAMの調整を計算します。
      tx_tam_adjust_sim = 
        (tx_const_delay_sign ? –tx_const_delay : tx_const_delay)
      + (tx_apulse_offset_sign[tx_ref_pl] ? 
            –tx_apulse_offset[tx_ref_pl] : tx_apulse_offset[tx_ref_pl])
      – (tx_apulse_wdelay[tx_ref_pl])
      ハードウェアの実行でPTPの Timestamp accuracy modeAdvanced に設定している場合
      tx_tam_adjust = (tx_tam_adjust_sim) 
      + (tx_routing_adj_sign[tx_ref_pl] ? – tx_routing_adj[tx_ref_pl] 
                                          : tx_routing_adj[tx_ref_pl])
      配線遅延調整の情報に関しては、Advancedタイムスタンプ精度モードにおけるルーティング遅延調整 のセクションを参照してください。
      他のすべてのケース
      tx_tam_adjust = tx_tam_adjust_sim

      TAM調整値を32ビットの2の補数に変換します。

      tx_tam_adjust_2c = tx_tam_adjust
      where tx_tam_adjust is a 32-bit 2's complement number
    2. TX追加レイテンシーを計算します。
      TX PMA遅延の単位をUIからナノ秒に変換します。UIの値については、UI値とPMA遅延 で示されている表を参照してください。
      tx_pma_delay_ns = tx_pma_delay_ui * UI 13
      TXの追加レイテンシーは正の調整です。正の調整を示すには、最上位レジスタービットを0に設定します。追加レイテンシーをすべて合計します。
      tx_extra_latency[31] = 0
      tx_extra_latency[30:0] = tx_pma_delay_ns + tx_external_phy_delay
    3. TX仮想レーンのオフセットを計算します。

      VL0をリファレンス仮想レーンとして使用します。TX仮想レーンのオフセット値は、仮想レーンの順序に従い割り当てます。

      • KP-FECまたはLL-FECバリアント
        Note: % is the modulo operator.
        
        for (vl = 0; vl < VL; vl++) {
           tx_vl_offset[vl] = [vl - (vl % PL)] / PL * 68 * UI 13
        }
      • KR-FECバリアント
        for (vl = 0; vl < VL; vl++) {
           tx_vl_offset[vl] = [vl - (vl % PL)] / PL * 66 * UI 13
        }
      • FECなしのバリアント
        for (vl = 0; vl < VL; vl++) {
           tx_vl_offset[vl] = [vl - (vl % PL)] / PL * 1 * UI 13
        }
  5. 決定したTXリファレンス・レーンをIPに書き込みます。
    csr_write (ptp_ref_lane.tx_ref_lane, tx_ref_pl)
  6. 計算したTXオフセットをIPに書き込みます。
    重要: ステップ6aは、10Gおよび25Gのイーサネット・データレートには適用されません。これらのレートではステップ6aをスキップします。
    1. TX仮想レーンのオフセットを書き込みます。
      for (vl = 0; vl < VL; vl++) {
         csr_write(tx_ptp_vl_offset_<vl>, tx_vl_offset[vl])
      }
    2. TX追加レイテンシーを書き込みます。
      csr_write(tx_ptp_extra_latency, tx_extra_latency)
    3. TX TAM調整を書き込みます。
      csr_write(ptp_tx_tam_adjust, tx_tam_adjust_2c)
  7. ソフトPTPにTXクライアント・フロー・コンフィグレーションが完了したことを通知します。
    csr_write(ptp_tx_user_cfg_status.tx_user_cfg_done, 1'b1)
  8. UI値を測定します。TX UI調整 のセクションに記載されている手順に従ってください。

    シミュレーションまたはハードウェアを0ppmの設定で実行する場合は、この測定をスキップし、UI調整 で定義されている0ppmのUI値をプログラムします。

  9. TX PTPの準備ができるまで待機します。
    ステータスは、次のいずれかで監視することができます。
    • 出力ポート
      o_tx_ptp_ready = 1'b1
    • CSRを介したポーリング
      csr_read(ptp_status.tx_ptp_ready) = 1’b1
  10. TX PTPが起動して動作します。
    1. TX UI値を調整します。

      TX UIの調整を定期的に行い、システムの基準となるTime-of-Dayから時間カウンターがドリフトしないようにします。TX UI調整 で示されている手順に従ってください。

      注: シミュレーションでは、UI測定には長い時間がかかります。したがって、インテルでは、シミュレーションでこのステップをスキップし、0ppmの値をプログラムすることを推奨しています。
13 UIの形式は、他の変数の形式とは異なります。UIでは {4ビットns、28ビットns小数部} の形式を使用します。このフローで定義される他の変数は、{N ビットns、16ビットns小数部} の形式を使用します。この N は、計算の最大値を格納する最大数です。計算にUI形式を使用する場合は、結果の小数ナノ秒部 (fns) を16ビットの形式に変換する必要があります。