インテルのみ表示可能 — GUID: kgn1614087408057
Ixiasoft
インテルのみ表示可能 — GUID: kgn1614087408057
Ixiasoft
4.4.3.1. PTP TXクライアント・フロー
このセクションでは、頭字語のPLは物理レーンを表し、VLは仮想レーンを表します。
次のフローで示す擬似コードは、概念的な説明を目的としています。実際のソフトウェア・ルーチンについては、デザイン例を参照してください。
- 電源投入後、またはTXリセット後は、TXロー・オフセットデータの準備が整うまで待機します。
ステータスは、次のいずれかで監視することができます。
- 出力ポート
o_tx_ptp_offset_data_valid = 1'b1
- Avalon®メモリーマップド・インターフェイス・レジスターを介してのポーリング (アサートされるまで)
csr_read(ptp_status.tx_ptp_offset_data_valid) = 1’b1
- 出力ポート
- 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]) }
- TXリファレンス・レーンを決定します。
次のサブステップは、複数のレーンをもつデザインに適用されます。任意のレーンをリファレンス・レーンとして使用することができます。デザインのPMAレーンが1つの場合は、このサブステップをスキップすることができます。その場合は、tx_ref_pl = 0に設定します。
- 非同期パルス時間のロールオーバーを検出します。
tx_apulse_time[pl] 信号は、各物理レーンの非同期時間を28ビット形式で表します。ビット [27:16] は非同期パルス時間をナノ秒 (ns) で表し、ビット [15:0] は非同期パルス時間の小数ナノ秒部 (fns) を表します。
ロールオーバーには2つのタイプがあります。- 値が28'hFFF_FFFFに達した際のビット27からビット28への自然なロールオーバー。ロールオーバー前のビット [27:24] は4'hFです。
- 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 } }
- 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]) }
- TXリファレンス・レーンを決定します。
tx_ref_pl = pl
TXリファレンス・レーンは、すべての物理レーンを比較した場合に最大の tx_am_actual_time を含むTX物理レーンです。
- 非同期パルス時間のロールオーバーを検出します。
- TXオフセットを計算します。
重要: ステップ4cは、10Gおよび25Gのイーサネット・データレートには適用されません。これらのレートではステップ4cをスキップします。
- 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 mode を 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タイムスタンプ精度モードにおけるルーティング遅延調整 のセクションを参照してください。他のすべてのケース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
- 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
- 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 }
- KP-FECまたはLL-FECバリアント
- TX TAMの調整を計算します。
- 決定したTXリファレンス・レーンをIPに書き込みます。
csr_write (ptp_ref_lane.tx_ref_lane, tx_ref_pl)
- 計算したTXオフセットをIPに書き込みます。
重要: ステップ6aは、10Gおよび25Gのイーサネット・データレートには適用されません。これらのレートではステップ6aをスキップします。
- TX仮想レーンのオフセットを書き込みます。
for (vl = 0; vl < VL; vl++) { csr_write(tx_ptp_vl_offset_<vl>, tx_vl_offset[vl]) }
- TX追加レイテンシーを書き込みます。
csr_write(tx_ptp_extra_latency, tx_extra_latency)
- TX TAM調整を書き込みます。
csr_write(ptp_tx_tam_adjust, tx_tam_adjust_2c)
- TX仮想レーンのオフセットを書き込みます。
- ソフトPTPにTXクライアント・フロー・コンフィグレーションが完了したことを通知します。
csr_write(ptp_tx_user_cfg_status.tx_user_cfg_done, 1'b1)
- UI値を測定します。TX UI調整 のセクションに記載されている手順に従ってください。
シミュレーションまたはハードウェアを0ppmの設定で実行する場合は、この測定をスキップし、UI調整 で定義されている0ppmのUI値をプログラムします。
- TX PTPの準備ができるまで待機します。
ステータスは、次のいずれかで監視することができます。
- 出力ポート
o_tx_ptp_ready = 1'b1
- CSRを介したポーリング
csr_read(ptp_status.tx_ptp_ready) = 1’b1
- 出力ポート
- TX PTPが起動して動作します。
- TX UI値を調整します。
TX UIの調整を定期的に行い、システムの基準となるTime-of-Dayから時間カウンターがドリフトしないようにします。TX UI調整 で示されている手順に従ってください。
注: シミュレーションでは、UI測定には長い時間がかかります。したがって、インテルでは、シミュレーションでこのステップをスキップし、0ppmの値をプログラムすることを推奨しています。
- TX UI値を調整します。