インテル® Quartus® Prime Pro Edition ソフトウェア・バージョン 22.3 の問題により、F タイル・イーサネット・インテル® FPGA Hard IPのマルチレーン PTP バリアントのデザイン例で提供されている「ptp_fw.tcl」スクリプトが誤った rx_tam_adjust 値を生成する場合があります。
この問題を回避するには、次の手順を実行します。
- <生成されたデザイン例フォルダー>/hardware_test_design/hwtest/altera/ptp/ptp_fw.tcl にある PTP ファームウェア・スクリプトを開きます。
- 次のコード行を見つけて置き換えます。
差出人 | 宛先 |
#b)パルス調整を計算する for {set fl 0} {$fl < $::FL} {incr fl} { |
# b) パルス調整を計算し、同じトランシーバー・レーンから受信した FEC レーン間の FEC のcw_posロールオーバーを確認する for {set fl 0} {$fl < $::FL} {incr fl} { set cond2a [expr ($rx_fec_cw_pos_fl($fl_minus) > $rx_fec_cw_pos_fl($fl))] if {$cond 1a && $cond 1b} { |
戻る[配列取得rx_xcvr_if_pulse_adj] |
l_rx_xcvr_if_pulse_adj [配列取得rx_xcvr_if_pulse_adj] に設定 return [List $l_rx_xcvr_if_pulse_adj $l_rx_xcvr_if_pulse_adj_sign] |
proc determine_rx_ref_lane {lst_rx_xcvr_if_pulse_adj VL ui rx_pcs_bitslip_cnt rx_pcs_dlpulse_aligned l_rx_apulse_offset l_rx_apulse_offset_sign l_rx_apulse_wdelay l_rx_apulse_time ip_inst_base_addr} { # # 引数: # 戻り値: RX スパルスオフセット (+符号ビット) のための '配列リスト'rx ref pl/vl/fl
配列セット rx_apulse_offset $l_rx_apulse_offset 配列セットrx_apulse_offset_sign $l_RX_apulse_offset_sign 配列セット rx_apulse_wdelay $l_rx_apulse_wdelay 配列セット rx_apulse_time $l_rx_apulse_time 配列セット rx_xcvr_if_pulse_adj $lst_rx_xcvr_if_pulse_adj
print_info_time 「RX 基準レーンの決定」 #a)非同期パルスを参照して同期パルス(アライメントマーカー)オフセットを決定する if {$::FEC > 0} { print_out "\tバリアント : FEC>0" for {set fl 0} {$fl < $::FL} {incr fl} { set fl_minus [expr $fl - [expr $fl % $::P L_FL_MAP]] set val0 [format 0x%X [expr $rx_xcvr_if_pulse_adj($fl_minus) & 0x0000001F]] set val1 [format 0x%X [expr $rx_xcvr_if_pulse_adj($fl) + $val 0]]
if {$val 1 > $rx_xcvr_if_pulse_adj($fl_minus)} { セット rx_spulse_offset_sign($fl) 0 set rx_spulse_offset_0 [format 0x%lX [expr [expr ($rx_xcvr_if_pulse_adj($fl) - $rx_xcvr_if_pulse_adj($fl_minus)) + $val 0] * $ui * $::P L_FL_MAP]] set rx_spulse_offset_1 [format 0x%lX [expr $rx_spulse_offset_0 & 0x7FFFFFFFFFF]] ;# 43'rx_spulse_offset_0 set rx_spulse_offset($fl) [format 0x%X [expr $rx_spulse_offset_1 >> [expr 28 - 16]]] } else { セット rx_spulse_offset_sign($fl) 1 set rx_spulse_offset_0 [format 0x%lX [expr [expr ($rx_xcvr_if_pulse_adj($fl_minus) - $rx_xcvr_if_pulse_adj($fl)) - $val 0] * $ui * $::P L_FL_MAP]] set rx_spulse_offset_1 [format 0x%lX [expr $rx_spulse_offset_0 & 0x7FFFFFFFFFF]] ;# 43'rx_spulse_offset_0 set rx_spulse_offset($fl) [format 0x%X [expr $rx_spulse_offset_1 >> [expr 28 - 16]]] } |
proc determine_rx_ref_lane {lst_rx_xcvr_if_pulse_adj lst_rx_xcvr_if_pulse_adj_sign VL ui rx_pcs_bitslip_cnt rx_pcs_dlpulse_aligned l_rx_apulse_offset l_rx_apulse_offset_sign l_rx_apulse_wdelay l_rx_apulse_time ip_inst_base_addr} { # # 引数: # 戻り値: RX スパルスオフセット (+符号ビット) のための '配列リスト'rx ref pl/vl/fl
配列セット rx_apulse_offset $l_rx_apulse_offset 配列セットrx_apulse_offset_sign $l_RX_apulse_offset_sign 配列セット rx_apulse_wdelay $l_rx_apulse_wdelay 配列セット rx_apulse_time $l_rx_apulse_time 配列セット rx_xcvr_if_pulse_adj $lst_rx_xcvr_if_pulse_adj 配列セット rx_xcvr_if_pulse_adj_sign $lst_rx_xcvr_if_pulse_adj_sign
print_info_time 「RX 基準レーンの決定」 #a)非同期パルスを参照して同期パルス(アライメントマーカー)オフセットを決定する if {$::FEC > 0} { print_out "\tバリアント : FEC>0" for {set fl 0} {$fl < $::FL} {incr fl} { set fl_minus [expr $fl - [expr $fl % $::P L_FL_MAP]] set val0 [format 0x%X [expr $rx_xcvr_if_pulse_adj($fl_minus) & 0x0000001F]] set val1 [format 0x%X [expr $rx_xcvr_if_pulse_adj($fl) + $val 0]]
if { $rx_xcvr_if_pulse_adj_sign($fl) == 1} { セット rx_spulse_offset_sign($fl) 1 set rx_spulse_offset_0 [format 0x%lX [expr $rx_xcvr_if_pulse_adj($fl) * $ui * $::P L_FL_MAP]] set rx_spulse_offset_1 [format 0x%lX [expr $rx_spulse_offset_0 & 0x7FFFFFFFFFF]] ;# 43'rx_spulse_offset_0 set rx_spulse_offset($fl) [format 0x%X [expr $rx_spulse_offset_1 >> [expr 28 - 16]]] } else { if {$val 1 > $rx_xcvr_if_pulse_adj($fl_minus)} { セット rx_spulse_offset_sign($fl) 0 set rx_spulse_offset_0 [format 0x%lX [expr [expr ($rx_xcvr_if_pulse_adj($fl) - $rx_xcvr_if_pulse_adj($fl_minus)) + $val 0] * $ui * $::P L_FL_MAP]] set rx_spulse_offset_1 [format 0x%lX [expr $rx_spulse_offset_0 & 0x7FFFFFFFFFF]] ;# 43'rx_spulse_offset_0 set rx_spulse_offset($fl) [format 0x%X [expr $rx_spulse_offset_1 >> [expr 28 - 16]]] } else { セット rx_spulse_offset_sign($fl) 1 set rx_spulse_offset_0 [format 0x%lX [expr [expr ($rx_xcvr_if_pulse_adj($fl_minus) - $rx_xcvr_if_pulse_adj($fl)) - $val 0] * $ui * $::P L_FL_MAP]] set rx_spulse_offset_1 [format 0x%lX [expr $rx_spulse_offset_0 & 0x7FFFFFFFFFF]] ;# 43'rx_spulse_offset_0 set rx_spulse_offset($fl) [format 0x%X [expr $rx_spulse_offset_1 >> [expr 28 - 16]]] } } |
アレイ・セット rx_xcvr_if_pulse_adj [configure_rx_fec_cw_pos $inst_num $init_pl] |
if {$::FEC > 0} { set int_list [configure_rx_fec_cw_pos $inst_num $init_pl] lassign $int_list l_rx_xcvr_if_pulse_adj l_rx_xcvr_if_pulse_adj_sign
配列セット rx_xcvr_if_pulse_adj $l_rx_xcvr_if_pulse_adj 配列セット rx_xcvr_if_pulse_adj_sign $l_rx_xcvr_if_pulse_adj_sign if {$::d ebug} { for {set fl 0} {$fl < $::FL} {incr fl} { print_out "\trx_xcvr_if_pulse_adj($fl) : [フォーマット 0x%08X $rx_xcvr_if_pulse_adj($fl)]" print_out "\trx_xcvr_if_pulse_adj_sign($fl) : [format 0x%08X $rx_xcvr_if_pulse_adj_sign($fl)]" } } |
# ステップ 3: RX 基準レーンを決定する int_list [determine_rx_ref_lane [配列取得rx_xcvr_if_pulse_adj]\ $VL\ |
# ステップ 3: RX 基準レーンを決定する int_list [determine_rx_ref_lane [配列取得rx_xcvr_if_pulse_adj]\ [配列取得rx_xcvr_if_pulse_adj_sign]\ $VL |
- ファイルを保存
この問題は、インテル® Quartus® Prime Pro Edition ソフトウェアのバージョン 22.4 で修正されています。