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

Intel Agilex® 7 FPGAs and SoC FPGAs F-Series
Intel Agilex® 7 FPGAs and SoC FPGAs I-Series

1

Nội dung trên trang này là sự kết hợp giữa bản dịch của con người và máy tính của nội dung gốc bằng tiếng Anh. Nội dung này được cung cấp để thuận tiện cho bạn và chỉ cung cấp thông tin chung và không nên dựa vào là đầy đủ hoặc chính xác. Nếu có bất kỳ mâu thuẫn nào giữa phiên bản tiếng Anh của trang này và bản dịch, phiên 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.