ID bài viết: 000092741 Loại nội dung: Lỗi in Lần duyệt cuối: 15/08/2023

Tại sao giá trị tính toán của tôi cho rx_tam_adjust không chính xác khi sử dụng các tập lệnh được tìm thấy trong các ví dụ thiết kế cho các biến thể PTP đa làn của Intel® FPGA Hard IP Ethernet F-tile?

Môi Trường

  • Intel® Quartus® Prime Phiên bản Pro
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    Mô tả

    Do sự cố trong Phần mềm Intel® Quartus® Prime Pro Edition phiên bản 22.3, tập lệnh "ptp_fw.tcl" được cung cấp trong các ví dụ thiết kế cho các biến thể PTP đa làn của Intel® FPGA Hard IP Ethernet F-tile có thể mang lại giá trị rx_tam_adjust không chính xác.

    Độ phân giải

    Để khắc phục sự cố này, hãy thực hiện các bước sau:

    1. Mở tập lệnh chương trình cơ sở PTP nằm ở thư mục thiết kế mẫu được tạo <>/hardware_test_design/hwtest/altera/ptp/ptp_fw.tcl
    2. Tìm thay thế các dòng mã sau:
    TỪĐỂ

    # b) Tính toán điều chỉnh xung

    for {set fl 0} {$fl < $::FL} {incr fl} {
    đặt rx_xcvr_if_pulse_adj($fl) [định dạng 0x%X $rx_fec_cw_pos_fl($fl)]
    }

    # b) Tính toán điều chỉnh xungkiểm tra sự luân chuyển cw_pos của FEC giữa các làn FEC nhận được từ cùng một làn thu phát

    for {set fl 0} {$fl < $::FL} {incr fl} {
    đặt fl_minus [expr $fl - [expr $fl% $::P L_FL_MAP]]
    Đặt cond1a [expr ($rx_fec_cw_pos_fl($fl) >= $rx_fec_cw_pos_fl($fl_minus))]
    Đặt COND1B [EXPR (($rx_FEC_CW_POS_FL($fl) - $rx_FEC_CW_POS_FL($fl_MINUS)) > 0x4E20)]

    Đặt cond2a [expr ($rx_fec_cw_pos_fl($fl_minus) > $rx_fec_cw_pos_fl($fl))]
    Đặt cond2B [expr (($rx_fec_cw_pos_fl($fl_minus) - $rx_fec_cw_pos_fl($fl)) > 0x4E20)]

    if {$cond 1a &&; $cond 1b} {
    nếu {$::FEC == 2} {
    # KRFEC
    Đặt rx_xcvr_if_pulse_adj($fl) [EXPR 0x5280 - $rx_fec_cw_pos_fl($fl)]
    } elseif {($::FEC == 3) || ($::FEC == 4)} {
    # KP / LLFEC
    Đặt rx_xcvr_if_pulse_adj($fl) [Expr 0x5500 - $rx_fec_cw_pos_fl($fl)]
    }
    Đặt rx_xcvr_if_pulse_adj_sign($fl) 0x1
    } elseif {$cond 2a &&$cond 2b} {
    nếu {$::FEC == 2} {
    # KRFEC
    Đặt rx_xcvr_if_pulse_adj($fl) [expr 0x5280 + $rx_fec_cw_pos_fl($fl)]
    } elseif {($::FEC == 3) || ($::FEC == 4)} {
    # KP / LLFEC
    Đặt rx_xcvr_if_pulse_adj($fl) [expr 0x5500 + $rx_fec_cw_pos_fl($fl)]
    }
    Đặt rx_xcvr_if_pulse_adj_sign($fl) 0x0
    } khác {
    đặt rx_xcvr_if_pulse_adj($fl) [định dạng 0x%X $rx_fec_cw_pos_fl($fl)]
    Đặt rx_xcvr_if_pulse_adj_sign($fl) 0x0
    }
    }

    trả về [array get rx_xcvr_if_pulse_adj]

    Đặt l_rx_xcvr_if_pulse_adj [mảng lấy rx_xcvr_if_pulse_adj]
    đặt l_rx_xcvr_if_pulse_adj_sign [mảng lấy rx_xcvr_if_pulse_adj_sign]

    trả về [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} {

    #

    # đối số:

    # returns: 'Array-lists' cho độ lệch xung RX (+ bit ký hiệu). RX REF PL / VL / FL

    bộ mảng rx_apulse_offset $l_rx_apulse_offset

    bộ mảng rx_apulse_offset_sign $l_rx_apulse_offset_sign

    Bộ mảng rx_apulse_wdelay $l_rx_apulse_wdelay

    bộ mảng rx_apulse_time $l_rx_apulse_time

    bộ mảng rx_xcvr_if_pulse_adj $lst_rx_xcvr_if_pulse_adj

    print_info_time "Xác định làn tham chiếu RX"

    # a) Xác định độ lệch xung đồng bộ (Alignment Marker) với tham chiếu đến xung không đồng bộ

    if {$::FEC > 0} {

    print_out "\tBiến thể: FEC>0"

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

    đặt fl_minus [expr $fl - [expr $fl% $::P L_FL_MAP]]

    Đặt val0 [định dạng 0x%X [expr $rx_xcvr_if_pulse_adj($fl_minus) &; 0x0000001F]]

    Đặt val1 [định dạng 0x%X [expr $rx_xcvr_if_pulse_adj($fl) + $val 0]]

    if {$val 1 > $rx_xcvr_if_pulse_adj($fl_minus)} {

    Đặt rx_spulse_offset_sign($fl) 0

    đặt rx_spulse_offset_0 [định dạng 0x%lX [expr [expr ($rx_xcvr_if_pulse_adj($fl) - $rx_xcvr_if_pulse_adj($fl_minus)) + $val 0] * $ui * $::P L_FL_MAP]]

    đặt rx_spulse_offset_1 [định dạng 0x%lX [expr $rx_spulse_offset_0 &; 0x7FFFFFFFFFF]] ; # 43'rx_spulse_offset_0

    đặt rx_spulse_offset($fl) [format 0x%X [expr $rx_spulse_offset_1 >> [expr 28 - 16]]]

    } khác {

    Bộ rx_spulse_offset_sign($fl) 1

    đặt rx_spulse_offset_0 [định dạng 0x%lX [expr [expr ($rx_xcvr_if_pulse_adj($fl_minus) - $rx_xcvr_if_pulse_adj($fl)) - $val 0] * $ui * $::P L_FL_MAP]]

    đặt rx_spulse_offset_1 [định dạng 0x%lX [expr $rx_spulse_offset_0 &; 0x7FFFFFFFFFF]] ; # 43'rx_spulse_offset_0

    đặt 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} {

    #

    # đối số:

    # returns: 'Array-lists' cho độ lệch xung RX (+ bit ký hiệu). RX REF PL / VL / FL

    bộ mảng rx_apulse_offset $l_rx_apulse_offset

    bộ mảng rx_apulse_offset_sign $l_rx_apulse_offset_sign

    Bộ mảng rx_apulse_wdelay $l_rx_apulse_wdelay

    bộ mảng rx_apulse_time $l_rx_apulse_time

    bộ mảng rx_xcvr_if_pulse_adj $lst_rx_xcvr_if_pulse_adj

    bộ mảng rx_xcvr_if_pulse_adj_sign $lst_rx_xcvr_if_pulse_adj_sign

    print_info_time "Xác định làn tham chiếu RX"

    # a) Xác định độ lệch xung đồng bộ (Alignment Marker) với tham chiếu đến xung không đồng bộ

    if {$::FEC > 0} {

    print_out "\tBiến thể: FEC>0"

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

    đặt fl_minus [expr $fl - [expr $fl% $::P L_FL_MAP]]

    Đặt val0 [định dạng 0x%X [expr $rx_xcvr_if_pulse_adj($fl_minus) &; 0x0000001F]]

    Đặt val1 [định dạng 0x%X [expr $rx_xcvr_if_pulse_adj($fl) + $val 0]]

    if { $rx_xcvr_if_pulse_adj_sign($fl) == 1} {

    Bộ rx_spulse_offset_sign($fl) 1

    đặt rx_spulse_offset_0 [định dạng 0x%lX [expr $rx_xcvr_if_pulse_adj($fl) * $ui * $::P L_FL_MAP]]

    đặt rx_spulse_offset_1 [định dạng 0x%lX [expr $rx_spulse_offset_0 &; 0x7FFFFFFFFFF]] ; # 43'rx_spulse_offset_0

    đặt rx_spulse_offset($fl) [format 0x%X [expr $rx_spulse_offset_1 >> [expr 28 - 16]]]

    } khác {

    if {$val 1 > $rx_xcvr_if_pulse_adj($fl_minus)} {

    Đặt rx_spulse_offset_sign($fl) 0

    đặt rx_spulse_offset_0 [định dạng 0x%lX [expr [expr ($rx_xcvr_if_pulse_adj($fl) - $rx_xcvr_if_pulse_adj($fl_minus)) + $val 0] * $ui * $::P L_FL_MAP]]

    đặt rx_spulse_offset_1 [định dạng 0x%lX [expr $rx_spulse_offset_0 &; 0x7FFFFFFFFFF]] ; # 43'rx_spulse_offset_0

    đặt rx_spulse_offset($fl) [format 0x%X [expr $rx_spulse_offset_1 >> [expr 28 - 16]]]

    } khác {

    Bộ rx_spulse_offset_sign($fl) 1

    đặt rx_spulse_offset_0 [định dạng 0x%lX [expr [expr ($rx_xcvr_if_pulse_adj($fl_minus) - $rx_xcvr_if_pulse_adj($fl)) - $val 0] * $ui * $::P L_FL_MAP]]

    đặt rx_spulse_offset_1 [định dạng 0x%lX [expr $rx_spulse_offset_0 &; 0x7FFFFFFFFFF]] ; # 43'rx_spulse_offset_0

    đặt rx_spulse_offset($fl) [format 0x%X [expr $rx_spulse_offset_1 >> [expr 28 - 16]]]

    }

    }

    Bộ mảng rx_xcvr_if_pulse_adj [configure_rx_fec_cw_pos $inst_num $init_pl]

    if {$::FEC > 0} {

    đặt 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

    bộ mảng rx_xcvr_if_pulse_adj $l_rx_xcvr_if_pulse_adj

    bộ mảng 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) : [định dạng 0x%08X $rx_xcvr_if_pulse_adj($fl)]"

    print_out "\trx_xcvr_if_pulse_adj_sign($fl): [định dạng 0x%08X $rx_xcvr_if_pulse_adj_sign($fl)]"

    }

    }

    # Bước 3: Xác định làn tham chiếu RX

    Đặt int_list [determine_rx_ref_lane [mảng lấy rx_xcvr_if_pulse_adj]\

    $VL\

    # Bước 3: Xác định làn tham chiếu RX

    Đặt int_list [determine_rx_ref_lane [mảng lấy rx_xcvr_if_pulse_adj]\

    [mảng nhận rx_xcvr_if_pulse_adj_sign]\

    $VL

    1. Lưu tệp

    Sự cố này được khắc phục bắt đầu từ Phần mềm Intel® Quartus® Prime Pro Edition phiên bản 22.4.

    Các sản phẩm liên quan

    Bài viết này áp dụng cho 2 sản phẩm

    FPGA và FPGA SoC Intel® Agilex™ 7 Chuỗi F
    FPGA và FPGA SoC Intel® Agilex™ 7 Chuỗi I

    Nội dung gốc bằng tiếng Anh trên trang này vừa do con người vừa do máy dịch. Nội dung này chỉ để cung cấp thông tin chung và giúp quý vị thuận tiện. Quý vị không nên tin đây là thông tin hoàn chỉnh hoặc chính xác. Nếu có bất kỳ mâu thuẫn nào giữa bản tiếng Anh và bản dịch của trang này, thì bản tiếng Anh sẽ chi phối và kiểm soát. Xem phiên bản tiếng Anh của trang này.