Karena masalah dalam Perangkat Lunak Intel® Quartus® Prime Pro Edition versi 22.3, skrip "ptp_fw.tcl" yang disediakan dalam contoh desain untuk varian PTP multilane dari F-tile Ethernet Intel® FPGA Hard IP mungkin menghasilkan nilai rx_tam_adjust yang salah.
Untuk mengatasi masalah ini, lakukan langkah-langkah berikut ini:
- Buka skrip firmware PTP yang terletak di folder desain contoh yang dihasilkan <>/hardware_test_design/hwtest/altera/ptp/ptp_fw.tcl
- Temukan dan ganti baris kode berikut:
DARI | UNTUK |
# b) Hitung penyesuaian pulsa untuk {set fl 0} {$fl < $::FL} {incr fl} { |
# b) Hitung penyesuaian pulsa dan periksa rollover cw_pos FEC antara jalur FEC yang diterima dari jalur transceiver yang sama untuk {set fl 0} {$fl < $::FL} {incr fl} { Setel cond2a [expr ($rx_fec_cw_pos_fl($fl_minus) > $rx_fec_cw_pos_fl($fl))] jika: {$cond 1a &&; $cond 1b} { |
return [array get rx_xcvr_if_pulse_adj] |
Atur l_rx_xcvr_if_pulse_adj [array get rx_xcvr_if_pulse_adj] kembali [daftar $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} { # # argumen: # Mengembalikan: 'array-lists' untuk RX spulse offset (+ bit tanda). RX Ref PL/VL/FL
Set array rx_apulse_offset $l_rx_apulse_offset set array rx_apulse_offset_sign $l_rx_apulse_offset_sign Set array rx_apulse_wdelay $l_rx_apulse_wdelay Set array rx_apulse_time $l_rx_apulse_time Set array rx_xcvr_if_pulse_adj $lst_rx_xcvr_if_pulse_adj
print_info_time "Tentukan jalur referensi RX" # a) Tentukan offset pulsa sinkronisasi (Penanda Penjajaran) dengan mengacu pada pulsa asinkron jika {$::FEC > 0} { print_out "\tVarian : FEC>0" untuk {set fl 0} {$fl < $::FL} {incr fl} { atur fl_minus [expr $fl - [expr $fl % $::P L_FL_MAP]] set val0 [format 0x%X [expr $rx_xcvr_if_pulse_adj($fl_minus) & 0x0000001F]] atur val1 [format 0x%X [expr $rx_xcvr_if_pulse_adj($fl) + $val 0]]
jika {$val 1 > $rx_xcvr_if_pulse_adj($fl_minus)} { Atur 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]] atur 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 { Set 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]] atur 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} { # # argumen: # Mengembalikan: 'array-lists' untuk RX spulse offset (+ bit tanda). RX Ref PL/VL/FL
Set array rx_apulse_offset $l_rx_apulse_offset set array rx_apulse_offset_sign $l_rx_apulse_offset_sign Set array rx_apulse_wdelay $l_rx_apulse_wdelay Set array rx_apulse_time $l_rx_apulse_time Set array rx_xcvr_if_pulse_adj $lst_rx_xcvr_if_pulse_adj Set array rx_xcvr_if_pulse_adj_sign $lst_rx_xcvr_if_pulse_adj_sign
print_info_time "Tentukan jalur referensi RX" # a) Tentukan offset pulsa sinkronisasi (Penanda Penjajaran) dengan mengacu pada pulsa asinkron jika {$::FEC > 0} { print_out "\tVarian : FEC>0" untuk {set fl 0} {$fl < $::FL} {incr fl} { atur fl_minus [expr $fl - [expr $fl % $::P L_FL_MAP]] set val0 [format 0x%X [expr $rx_xcvr_if_pulse_adj($fl_minus) & 0x0000001F]] atur val1 [format 0x%X [expr $rx_xcvr_if_pulse_adj($fl) + $val 0]]
jika {$rx_xcvr_if_pulse_adj_sign($fl) == 1} { Set rx_spulse_offset_sign($fl) 1 atur rx_spulse_offset_0 [format 0x%lX [expr $rx_xcvr_if_pulse_adj($fl) * $ui * $::P L_FL_MAP]] atur 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 { jika {$val 1 > $rx_xcvr_if_pulse_adj($fl_minus)} { Atur 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]] atur 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 { Set 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]] atur 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]]] } } |
rangkaian array rx_xcvr_if_pulse_adj [configure_rx_fec_cw_pos $inst_num $init_pl] |
jika {$::FEC > 0} { mengatur 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
Set array rx_xcvr_if_pulse_adj $l_rx_xcvr_if_pulse_adj Set array rx_xcvr_if_pulse_adj_sign $l_rx_xcvr_if_pulse_adj_sign jika {$::d ebug} { untuk {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)]" } } |
# Langkah 3: Tentukan jalur referensi RX Atur int_list [determine_rx_ref_lane [array get rx_xcvr_if_pulse_adj]\ $VL\ |
# Langkah 3: Tentukan jalur referensi RX Atur int_list [determine_rx_ref_lane [array get rx_xcvr_if_pulse_adj]\ [array mendapatkan rx_xcvr_if_pulse_adj_sign]\ $VL |
- Simpan file
Masalah ini diperbaiki dimulai dengan Perangkat Lunak Intel® Quartus® Prime Pro Edition versi 22.4.