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

ID 683023
日付 3/28/2022
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. TXロー・オフセット・データをIPから読み出します。
    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物理レーンです。最大の tx_am_actual_time が含まれます (すべての物理レーン間で比較した場合)。
  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モードを使用し、Advancedに設定している場合は次を実行します。
      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 Timestamp Accuracyモードの配線遅延調整 のセクションを参照してください。
      他のすべての場合は次を実行します。
      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 * UI12 
      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 * UI12
        } 
      • KR-FECバリアントの場合は、次のとおりです。
        for (vl = 0; vl < VL; vl++) {
           tx_vl_offset[vl] = [vl - (vl % PL)] / PL * 66 * UI12
        } 
      • FECなしのバリアントの場合は、次のとおりです。
        for (vl = 0; vl < VL; vl++) {
           tx_vl_offset[vl] = [vl - (vl % PL)] / PL * 1 * UI12
        }
  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が完了したことを通知します。
    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の調整を時々行って、タイムカウンターがシステムのゴールデンタイムからドリフトすることを防ぎます。 TX UI調整 の説明にある手順に従ってください。

      注: UI測定は、シミュレーションでは長時間かかるプロセスです。したがって、シミュレーションの場合は、このステップをスキップして、0ppmの値をプログラムすることをお勧めします。
12 UIフォーマットは、他の変数のフォーマットとは異なります。UIは、{4ビットns、28ビット小数ns} フォーマットを使用します。このフローで定義されている他の変数では、{N-ビットns、16ビット小数ns} フォーマットを使用します。ここで N は、計算の最大値を格納する最大数です。UIフォーマットを使用して計算する場合は、結果を16ビット小数nsフォーマットに変換してください。