文章 ID: 000092741 內容類型: 錯誤 最近查看日期: 2023 年 08 月 15 日

為什麼在使用 F-tile 乙太網Intel® FPGA Hard IP的多通道 PTP 變體的設計範例中的腳本時,我的rx_tam_adjust計算值不正確?

環境

  • Intel® Quartus® Prime Pro Edition 軟體
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    描述

    由於 Intel® Quartus® Prime Pro Edition 軟體版本 22.3 中存在問題,F-tile 乙太網Intel® FPGA Hard IP的多通道 PTP 變體的設計範例中提供的「ptp_fw.tcl」腳本可能會產生不正確的rx_tam_adjust值。

    解決方法

    要變通解決此問題,請執行以下步驟

    1. 打開位於<生成的示例設計資料夾 >/hardware_test_design/hwtest/altera/ptp/ptp_fw.tclPTP 固件腳本
    2. 查找 替換 以下 程式碼:

    # b) 計算 脈衝調整

    for {set fl 0} {$fl < $::FL} {incr fl} {
    set rx_xcvr_if_pulse_adj($fl) [format 0x%X $rx_fec_cw_pos_fl($fl)]
    }

    # b)計算脈衝調整檢查從同一收發器通道接收的 FEC 通道之間的FEC cw_pos翻轉

    for {set fl 0} {$fl < $::FL} {incr fl} {
    設定fl_minus [expr $fl - [expr $fl % $::P L_FL_MAP]]
    set cond1a [expr ($rx_fec_cw_pos_fl($fl) >= $rx_fec_cw_pos_fl($fl_minus))]
    set cond1b [expr (($rx_fec_cw_pos_fl($fl) - $rx_fec_cw_pos_fl($fl_minus)) > 0x4E20)]

    set cond2a [expr ($rx_fec_cw_pos_fl($fl_minus) > $rx_fec_cw_pos_fl($fl))]
    set cond2b [expr (($rx_fec_cw_pos_fl($fl_minus) - $rx_fec_cw_pos_fl($fl)) > 0x4E20)]

    如果 {$cond 1a &&$cond 1b} {
    如果 {$::FEC == 2} {
    # 韓元
    SET rx_xcvr_if_pulse_adj($fl) [expr 0x5280 - $rx_fec_cw_pos_fl($fl)]
    } elseif {($::FEC == 3) ||($::FEC == 4)}{
    # KP/LLFEC
    SET rx_xcvr_if_pulse_adj($fl) [expr 0x5500 - $rx_fec_cw_pos_fl($fl)]
    }
    設置rx_xcvr_if_pulse_adj_sign($fl)0x1
    } elseif {$cond 2a && $cond 2b} {
    如果 {$::FEC == 2} {
    # 韓元
    set rx_xcvr_if_pulse_adj($fl) [expr 0x5280 + $rx_fec_cw_pos_fl($fl)]
    } elseif {($::FEC == 3) ||($::FEC == 4)}{
    # KP/LLFEC
    set rx_xcvr_if_pulse_adj($fl) [expr 0x5500 + $rx_fec_cw_pos_fl($fl)]
    }
    設置rx_xcvr_if_pulse_adj_sign($fl)0x0
    } else {
    set rx_xcvr_if_pulse_adj($fl) [format 0x%X $rx_fec_cw_pos_fl($fl)]
    設置rx_xcvr_if_pulse_adj_sign($fl)0x0
    }
    }

    返回 [陣列獲取rx_xcvr_if_pulse_adj]

    設置l_rx_xcvr_if_pulse_adj [陣列獲取rx_xcvr_if_pulse_adj]
    設置l_rx_xcvr_if_pulse_adj_sign [陣列獲取rx_xcvr_if_pulse_adj_sign]

    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 參考 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)參考非同步脈衝確定同步脈衝(對齊標記)偏移

    如果 {$::FEC > 0} {

    print_out 「\t變體:FEC>0」

    for {set fl 0} {$fl < $::FL} {incr fl} {

    設定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

    設置rx_spulse_offset($fl) [格式 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

    設置rx_spulse_offset($fl) [格式 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 參考 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)參考非同步脈衝確定同步脈衝(對齊標記)偏移

    如果 {$::FEC > 0} {

    print_out 「\t變體:FEC>0」

    for {set fl 0} {$fl < $::FL} {incr fl} {

    設定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

    設置rx_spulse_offset($fl) [格式 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

    設置rx_spulse_offset($fl) [格式 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

    設置rx_spulse_offset($fl) [格式 0x%X [expr $rx_spulse_offset_1 >> [expr 28 - 16]]]

    }

    }

    陣列集 rx_xcvr_if_pulse_adj [configure_rx_fec_cw_pos $inst_num $init_pl]

    如果 {$::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

    如果 {$::d ebug} {

    for {set fl 0} {$fl < $::FL} {incr fl} {

    print_out 「\trx_xcvr_if_pulse_adj($fl) : [format 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

    1. 儲存檔案

    此問題已從 Intel® Quartus® Prime Pro Edition 軟體版本 22.4 開始修復。

    相關產品

    本文章適用於 2 產品

    Intel® Agilex™ 7 FPGA 與 SoC FPGA F 系列
    Intel® Agilex™ 7 FPGA 與 SoC FPGA I 系列

    這個頁面的內容綜合了英文原始內容的人工翻譯譯文與機器翻譯譯文。本內容是基於一般資訊目的,方便您參考而提供,不應視同完整或準確的內容。如果這個頁面的英文版與譯文之間發生任何牴觸,將受英文版規範及管轄。 查看這個頁面的英文版。