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.
Để khắc phục sự cố này, hãy thực hiện các bước sau:
- 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
- Tìm và 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} { |
# b) Tính toán điều chỉnh xung và kiể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 cond2a [expr ($rx_fec_cw_pos_fl($fl_minus) > $rx_fec_cw_pos_fl($fl))] if {$cond 1a &&; $cond 1b} { |
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] 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 |
- 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.