インテルのみ表示可能 — 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
- 出力ポート:
- 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]) }
- 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物理レーンです。最大の tx_am_actual_time が含まれます (すべての物理レーン間で比較した場合)。
- 非同期パルス時間のロールオーバーを検出します。
- 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モードを使用し、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
- 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
- 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 }
- 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が完了したことを通知します。
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の調整を時々行って、タイムカウンターがシステムのゴールデンタイムからドリフトすることを防ぎます。 TX UI調整 の説明にある手順に従ってください。
注: UI測定は、シミュレーションでは長時間かかるプロセスです。したがって、シミュレーションの場合は、このステップをスキップして、0ppmの値をプログラムすることをお勧めします。
- TX UI値を調整します。