Se si sta collegando il clock di riferimento PLL da un'uscita PLL o da un pin di clock non dedicato nella progettazione Arria® 10, verrà introdotto un jitter aggiuntivo. Questo jitter può essere compensato aggiungendo un vincolo di incertezza del clock di 100ps ai clock di uscita del PLL a valle nel design.
Fare riferimento al seguente documento per i dettagli relativi all'applicazione del vincolo di incertezza del clock.
Arria®10 PLL Cascading o Linee guida per la soluzione del percorso di clock non dedicata
Quando si aggiorna la progettazione al software Quartus Prime v17.1 o versioni successive, è necessario rivedere i vincoli aggiunti in precedenza:
a) se l'incertezza del clock esistente deriva solo da derive_clock_uncertainty set_clock_uncertainty -add -to -da 0.1
b) se l'incertezza del clock esistente deriva da derive_clock_uncertainty ulteriore "set_clock_uncertainty -add" v17.0: set_clock_uncertainty -add -to -da > [expr 0.1] v17.1 o versioni successive: set_clock_uncertainty -add -to -da
c) se derive_clock_uncertainty viene sostituito da "set_clock_uncertainty" (no -add) - Nessuna modifica, è necessario mantenere il vincolo esistente set_clock_uncertainty -to -da [expr 0.1]
Se il PLL a valle interessato è Arria 10 PHYLite IOPLL, fare riferimento ai seguenti passaggi per i dettagli relativi all'applicazione del vincolo di incertezza del clock.
A partire dal software Quartus Prime versione 17.0, la "Connessione di clock di riferimento PLL core" non è più visibile nell'editor di parametri IP Arria 10 Altera PHYLite. Il modo consigliato è utilizzare il pin di clock dedicato per collegarlo al clock di riferimento PHYLite IOPLL. Se la progettazione richiede di utilizzare questa funzione, leggere attentamente le seguenti linee guida e rispettarle.
Per attivare la connessione di clock di riferimento PLL core (software Quartus Prime versione 17.0 e successiva), aggiungere il seguente INI nel file quartus.ini.
ip_altera_phylite_en_pll_core_ref_ck = on
a2t_allow_cascaded_pll_in_cpa_compensation=on
Quando si collega il clock di riferimento PLL da un'uscita PLL o da un pin di clock non dedicato, verrà introdotto un jitter aggiuntivo.
Per la progettazione implementata con Arria 10 Altera PHYLite versione 17.0 e precedente, questo jitter può essere compensato aggiungendo un vincolo di incertezza del clock di 100ps ai clock di uscita del PLL a valle nel progetto.
Aggiungere i seguenti vincoli per l'incertezza del clock nel file SDC generato da PHYLite per il software Quartus Prime versione 17.0 e precedente. Sarà necessario apportare le seguenti modifiche ogni volta che si rigenera l'IP Altera PHYLite.
1. Assegna un valore di 100ps al jitter aggiuntivo del nome della variabile.
set additional_jitter 0.000
# Determinare innanzitutto se è già stato creato un clock di riferimento (ad esempio, condivisione di clock di riferimento)
if {$var(PLL_USE_CORE_REF_CLK) == "false"} {
set ref_clock_exists [phy_altera_phylite_arch_nf_171_flagyzi_does_ref_clk_exist $pins(pll_ref_clock)]
if { $ref_clock_exists == 0 } {
# Questo è il clock di riferimento utilizzato dal PLL per derivare qualsiasi altro clock nel core
create_clock -period $ref_period -waveform [ elenco 0 $ref_half_period ] $pins(pll_ref_clock) -add -name ${inst}_ref_clock
}
} else {
set additional_jitter 0.100
}
2. Aggiungere ulteriore incertezza di clock sul clock FIFO di scrittura:
impostare i_wf_clock 0
foreach_in_collection wf_clock $write_fifo_clk_neg {
impostare vco_clock_id [phy_altera_phylite_arch_nf_171_flagyzi_get_vco_clk_id $wf_clock var]
if {$vco_clock_id == -1} {
post_message di tipo critical_warning "Impossibile trovare il clock VCO"
} else {
set local_wf_clk_grp_${i_grp_idx}_${i_wf_clock} [ phy_altera_phylite_arch_nf_171_flagyzi_get_or_add_generated_clock \
-target [get_node_info -name $wf_clock] \
-nome "${inst}_wf_clk_grp_${i_grp_idx}_${i_wf_clock}_neg" \
-source [get_node_info -name $vco_clock_id] \
-multiply_by 1 \
-divide_by [expr $var(PLL_VCO_TO_MEM_CLK_FREQ_RATIO)] \
-fase 180 ]
}
i_wf_clock incr
}
vincolo #new:
se {$additional_jitter != 0} {
set_clock_uncertainty -to [get_clocks ${inst}_wf_clk_grp_*] -add $additional_jitter
}
3. Aggiungere ulteriore incertezza di clock sul percorso di scrittura:
se {[llength $write_clocks]>0} {
# Non abbiamo bisogno di numeri derive_clock_uncertainty perché abbiamo incluso FLS JITTER in set_output_delay
set_clock_uncertainty -to [get_clocks $write_clocks] [phy_altera_phylite_arch_nf_170_zul23qq_round_3dp [expr 0.5*($var(WR_SSO) $var(WR_JITTER_SCALED)) $additional_jitter ]]
}
4. Nessuna modifica sul read_clocks
se {[llength $read_clocks]>0} {
# Non abbiamo bisogno di numeri derive_clock_uncertainty perché abbiamo incluso FLS JITTER in set_input_delay
set_clock_uncertainty -to [get_clocks $read_clocks] 0.0
}
5. Aggiungi ulteriore incertezza di clock sui trasferimenti c2p/p2c (phy_clk usr_clock)
se {$i_phy_clock > $same_tile_index} {
# C2P/P2C dove il riquadro periferici != riquadro CPA.
# Per questi trasferimenti, l'SDC ignora esplicitamente i valori di incertezza del clock.
# Pertanto, quando si esegue un overconstraining non è necessario utilizzare l'opzione "-add".
impostare add_to_derived ""
set c2p_su [expr {$p 2c_c2p_multi_tile_clock_uncertainty [lindex $periphery_overconstraints 0] [lindex $periphery_clock_uncertainty 0]} additional_jitter]
set c2p_h [expr {$p 2c_c2p_multi_tile_clock_uncertainty [lindex $periphery_overconstraints 1] [lindex $periphery_clock_uncertainty 1]} additional_jitter]
set p2c_su [expr {$p 2c_c2p_multi_tile_clock_uncertainty [lindex $periphery_overconstraints 2] [lindex $periphery_clock_uncertainty 2]} additional_jitter]
set p2c_h [expr {$p 2c_c2p_multi_tile_clock_uncertainty [lindex $periphery_overconstraints 3] [lindex $periphery_clock_uncertainty 3]} additional_jitter]
} else {
# C2P/P2C dove la tessera periferici == Piastrella CPA
# Per questi trasferimenti è sicuro utilizzare l'opzione -add poiché ci affidiamo a
# derive_clock_uncertainty per il valore di base.
impostare add_to_derived "-add"
set c2p_su [expr [lindex $periphery_overconstraints 0] [lindex $periphery_clock_uncertainty 0] additional_jitter/2]
set c2p_h [expr [lindex $periphery_overconstraints 1] [lindex $periphery_clock_uncertainty 1] additional_jitter/2]
set p2c_su [expr [lindex $periphery_overconstraints 2] [lindex $periphery_clock_uncertainty 2] additional_jitter/2]
set p2c_h [expr [lindex $periphery_overconstraints 3] [lindex $periphery_clock_uncertainty 3] additional_jitter/2]
}
6. Aggiungi ulteriore incertezza di clock all'interno del trasferimento del core (clock usr_clock/core extra usr_clock/clock core extra)
set c2c_same_su [expr [lindex $core_overconstraints 0] [lindex $core_clock_uncertainty 0] additional_jitter]
set c2c_same_h [expr [lindex $core_overconstraints 1] [lindex $core_clock_uncertainty 1]]
set c2c_diff_su [expr [lindex $core_overconstraints 2] [lindex $core_clock_uncertainty 2] additional_jitter]
set c2c_diff_h [expr [lindex $core_overconstraints 3] [lindex $core_clock_uncertainty 3] additional_jitter]
foreach src_core_clock_local $core_clocks_local {
se {$src_core_clock_local != ""} {
foreach dst_core_clock_local $core_clocks_local {
se {$dst_core_clock_local != ""} {
if {$src_core_clock_local == $dst_core_clock_local} {
Trasferimenti di rete dello stesso clock
set_clock_uncertainty -da $src_core_clock_local -a $dst_core_clock_local -setup -add $c 2c_same_su
set_clock_uncertainty -da $src_core_clock_local -a $dst_core_clock_local -hold -enable_same_physical_edge -add $c 2c_same_h
} else {
# Trasferimenti tra diverse reti di clock core
set_clock_uncertainty -da $src_core_clock_local -a $dst_core_clock_local -setup -add $c 2c_diff_su
set_clock_uncertainty -da $src_core_clock_local -a $dst_core_clock_local -hold -add $c 2c_diff_h
}
}
}
}
}
7. Per la logica dell'utente che coinvolge user_created_clock e clock di output PHYLite, l'utente dovrà aggiungere l'incertezza aggiuntiva di clock a 100ps su quel percorso di trasferimento del clock nel file sdc dell'utente.
8. Segnalare l'SDC e archiviare il report Assegnazioni SDC>Set Clock Uncertainty, assicurarsi che i 100ps extra siano aggiunti ai percorsi di trasferimento del clock interessati
9. Ricompilare o ricompilare il progetto e garantire la chiusura dei tempi
10. Eseguire rigorosi test hardware per garantire che la progettazione funzioni correttamente prima di entrare in produzione
Quando si aggiorna la progettazione al software Quartus Prime v17.1 o versioni successive:
a) Avvia lo strumento di aggiornamento IP per aggiornare l'IP Arria 10 Altera PHYLite a v17.1
b) Il file SDC PHYLite generato avrà tutta l'incertezza di clock necessaria aggiunta quando viene utilizzato il clock di riferimento PLL core.
c) L'incertezza aggiuntiva di clock di 100ps aggiunta per il percorso logico dell'utente che coinvolge user_created_clock e il clock di output PHYLite in precedenza richiederà di rimanere nel file sdc dell'utente.
d) Eseguire la compilazione completa sulla progettazione e garantire la chiusura dei tempi.