En raison d’un problème dans la version 22.3 du logiciel Intel® Quartus® Prime Pro Edition, le script « ptp_fw.tcl » fourni dans les exemples de conception pour les variantes PTP multivoies du Intel® FPGA Hard IP Ethernet F-tile peut générer des valeurs rx_tam_adjust incorrectes.
Pour contourner ce problème, procédez comme suit :
- Ouvrez le script du microprogramme PTP situé dans < dossier de conception d’exemple généré >/hardware_test_design/hwtest/altera/ptp/ptp_fw.tcl
- Trouvez et remplacez les lignes de code suivantes :
DE | À |
# b) Calculer le réglage de l’impulsion for {set fl 0} {$fl < $::FL} {incr fl} { |
# b) Calculer le réglage de l’impulsion et vérifier le roulement de cw_pos du FEC entre la voie FEC reçue de la même voie d’émetteur-récepteur for {set fl 0} {$fl < $::FL} {incr fl} { set cond2a [expr ($rx_fec_cw_pos_fl($fl_minus) > $rx_fec_cw_pos_fl($fl))] if {$cond 1a && $cond 1b} { |
return [batterie obtenir rx_xcvr_if_pulse_adj] |
Set l_rx_xcvr_if_pulse_adj [Array Get rx_xcvr_if_pulse_adj] 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} { # # arguments: # retourne : 'array-lists' pour le décalage spulse rx (+ bit de signe). RX REF PL/VL/FL
ensemble de tableaux rx_apulse_offset $l_rx_apulse_offset array set rx_apulse_offset_sign $l_rx_apulse_offset_sign Ensemble de tableaux rx_apulse_wdelay $l_RX_APULSE_WDELAY ensemble de tableaux rx_apulse_time $l_rx_apulse_time ensemble de tableaux rx_xcvr_if_pulse_adj $lst_rx_xcvr_if_pulse_adj
print_info_time « Determine RX reference lane » (Déterminer la voie de référence RX) # a) Déterminer les décalages de l’impulsion de synchronisation (marqueur d’alignement) en référence à l’impulsion asynchrone if {$::FEC > 0} { print_out « \tVariant : FEC>0 » for {set fl 0} {$fl < $::FL} {incr fl} { set 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)} { Définir 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 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]] set 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} { # # arguments: # retourne : 'array-lists' pour le décalage spulse rx (+ bit de signe). RX REF PL/VL/FL
ensemble de tableaux rx_apulse_offset $l_rx_apulse_offset array set rx_apulse_offset_sign $l_rx_apulse_offset_sign Ensemble de tableaux rx_apulse_wdelay $l_RX_APULSE_WDELAY ensemble de tableaux rx_apulse_time $l_rx_apulse_time ensemble de tableaux rx_xcvr_if_pulse_adj $lst_rx_xcvr_if_pulse_adj ensemble de tableaux rx_xcvr_if_pulse_adj_sign $lst_rx_xcvr_if_pulse_adj_sign
print_info_time « Determine RX reference lane » (Déterminer la voie de référence RX) # a) Déterminer les décalages de l’impulsion de synchronisation (marqueur d’alignement) en référence à l’impulsion asynchrone if {$::FEC > 0} { print_out « \tVariant : FEC>0 » for {set fl 0} {$fl < $::FL} {incr fl} { set 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} { Set 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 set rx_spulse_offset($fl) [format 0x%X [expr $rx_spulse_offset_1 >> [expr 28 - 16]]] } else { if {$val 1 > $rx_xcvr_if_pulse_adj($fl_minus)} { Définir 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 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]] set 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]]] } } |
Array set rx_xcvr_if_pulse_adj [configure_rx_fec_cw_pos $inst_num $init_pl] |
if {$::FEC > 0} { définir 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
ensemble de tableaux rx_xcvr_if_pulse_adj $l_rx_xcvr_if_pulse_adj ensemble de tableaux 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) : [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)] » } } |
# Étape 3 : Déterminer la voie de référence RX Set int_list [determine_rx_ref_lane [Array Get rx_xcvr_if_pulse_adj]\ $VL\ |
# Étape 3 : Déterminer la voie de référence RX Set int_list [determine_rx_ref_lane [Array Get rx_xcvr_if_pulse_adj]\ [tableau obtenir rx_xcvr_if_pulse_adj_sign]\ $VL |
- Enregistrez le fichier
Ce problème est résolu à partir de la version 22.4 du logiciel Intel® Quartus® Prime Pro Edition.