Se você estiver conectando o clock de referência PLL a partir de uma saída PLL ou um pino de clock não dedicado no seu design Arria® 10, será introduzido o jitter adicional. Esse nervosismo pode ser compensado adicionando uma restrição de incerteza de clock de 100ps nos clocks de saída do PLL de downstream no design.
Consulte o documento a seguir para obter os detalhes da aplicação da restrição de incerteza do clock.
Arria®10 pll cascading ou diretriz de solução de caminho de clock não dedicada
Ao atualizar o design para o software Quartus Prime v17.1 ou mais recente, as restrições adicionadas anteriormente precisam ser revisadas:
a) se a incerteza do clock existente vem apenas de derive_clock_uncertainty set_clock_uncertainty -add -para -, do 0,1
b) se a incerteza do clock existente vem de derive_clock_uncertainty adicional "set_clock_uncertainty -add" v17.0: set_clock_uncertainty -add -para -a partir de > [expr 0.1] v17.1 ou mais recente: set_clock_uncertainty -add -to -do
c) se o derive_clock_uncertainty for substituído por "set_clock_uncertainty" (sem -adicionar) - não há alteração, é necessário manter a restrição existente set_clock_uncertainty -para a partir de [expr 0.1]
Se o PLL de downstream afetado estiver Arria IOPLL 10 PHYLite, consulte as etapas a seguir para obter os detalhes da aplicação da restrição de incerteza do clock.
A partir da versão 17.0 do software Quartus Prime, a conexão de clock de referência "Use core PLL" não é mais visível no editor de parâmetros Arria 10 Altera PHYLite IP. A maneira recomendada é usar o pino de clock dedicado para conectá-lo ao clock de referência PHYLite IOPLL. Se o seu projeto precisar usar este recurso, leia cuidadosamente as seguintes diretrizes e acate-as.
Para habilitar a "conexão do clock de referência PLL do núcleo" (software Quartus Prime versão 17.0 e posterior), adicione o INI abaixo no arquivo quartus.ini.
ip_altera_phylite_en_pll_core_ref_ck = em
a2t_allow_cascaded_pll_in_cpa_compensation=on
Ao conectar o clock de referência PLL a partir de uma saída PLL ou um pino de clock não dedicado, será introduzido um jitter adicional.
Para o projeto implementado com Arria 10 Altera PHYLite versão 17.0 e anteriores, este jitter pode ser compensado adicionando restrição de incerteza de clock de 100ps nos clocks de saída do PLL de downstream no projeto.
Adicione as seguintes restrições para a incerteza do clock no arquivo SDC gerado pelo PHYLite para o software Quartus Prime versão 17.0 e anterior. Você precisará fazer as seguintes alterações sempre que regenerar o Altera PHYLite IP.
1. Atribua o valor de 100ps ao nome variável de jitter adicional.
conjunto additional_jitter 0.000
# Primeiro determine se um clock de referência já foi criado (ou seja, compartilhamento de clock de referência)
se {$var(PLL_USE_CORE_REF_CLK) == "falso"} {
set ref_clock_exists [phy_altera_phylite_arch_nf_171_flagyzi_does_ref_clk_exist $pins(pll_ref_clock)]
se { $ref_clock_existe == 0 } {
Este é o clock de referência usado pelo PLL para derivar qualquer outro clock no núcleo
create_clock -period $ref_period -waveform [ lista 0 $ref_half_period ] $pins(pll_ref_clock) -add -name ${inst}_ref_clock
}
} outra {
conjunto additional_jitter 0.100
}
2. Adicione incerteza adicional de clock no clock FIFO de gravação:
definir i_wf_clock 0
foreach_in_collection wf_clock $write_fifo_clk_neg {
definir vco_clock_id [phy_altera_phylite_arch_nf_171_flagyzi_get_vco_clk_id $wf_clock var]
se {$vco_clock_id == -1} {
post_message tipo critical_warning "Falha ao encontrar o clock de VCO"
} outra {
definir 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 ]
}
incr i_wf_clock
}
#new restrição:
se {$additional_jitter != 0} {
set_clock_uncertainty -para [get_clocks ${inst}_wf_clk_grp_*] -adicionar $additional_jitter
}
3. Adicione incerteza adicional de clock no caminho de gravação:
se {[llength $write_clocks]>0} {
Não precisamos de números derive_clock_uncertainty porque incluímos FLS JITTER em set_output_delay
set_clock_uncertainty -para [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. Nenhuma alteração no read_clocks
se {[llength $read_clocks]>0} {
Não precisamos de números derive_clock_uncertainty porque incluímos FLS JITTER em set_input_delay
set_clock_uncertainty -para [get_clocks $read_clocks] 0,0
}
5. Adicione incerteza adicional de clock nas transferências c2p/p2c (phy_clk usr_clock)
se {$i_phy_clock > $same_tile_index} {
Nº C2P/P2C onde a telha da periferia != bloco CPA.
# Para essas transferências, o SDC substitui explicitamente os valores de incerteza do clock.
# Portanto, ao sobreconstruir, não devemos usar a opção "adicionar".
definir add_to_derived ""
definir c2p_su [expr {$p 2c_c2p_multi_tile_clock_uncertainty [lindex $periphery_overconstraints 0] [lindex $periphery_clock_uncertainty 0]} additional_jitter]
definir c2p_h [expr {$p 2c_c2p_multi_tile_clock_uncertainty [lindex $periphery_overconstraints 1] [lindex $periphery_clock_uncertainty 1]} additional_jitter]
definir p2c_su [expr {$p 2c_c2p_multi_tile_clock_uncertainty [lindex $periphery_overconstraints 2] [lindex $periphery_clock_uncertainty 2]} additional_jitter]
definir p2c_h [expr {$p 2c_c2p_multi_tile_clock_uncertainty [lindex $periphery_overconstraints 3] [lindex $periphery_clock_uncertainty 3]} additional_jitter]
} outra {
Nº C2P/P2C onde a telha da periferia == bloco CPA
# Para essas transferências, é seguro usar a opção -add, uma vez que contamos com
Nº derive_clock_uncertainty pelo valor base.
definir add_to_derived "-adicionar"
definir c2p_su [expr [lindex $periphery_overconstraints 0] [lindex $periphery_clock_uncertainty 0] additional_jitter/2]
definir 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]
definir p2c_h [expr [lindex $periphery_overconstraints 3] [lindex $periphery_clock_uncertainty 3] additional_jitter/2]
}
6. Adicione incerteza adicional de clock dentro da transferência do núcleo (usr_clock/clock de núcleo extra usr_clock/clock de núcleo extra)
definir 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]
definir 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 != """} {
se {$src_core_clock_local == $dst_core_clock_local} {
# Transferências de rede do mesmo clock
set_clock_uncertainty -de $src_core_clock_local -a $dst_core_clock_local -setup -add $c 2c_same_su
set_clock_uncertainty -de $src_core_clock_local -a $dst_core_clock_local -hold -enable_same_physical_edge -add $c 2c_same_h
} outra {
# Transferências entre diferentes redes de clock core
set_clock_uncertainty -de $src_core_clock_local -a $dst_core_clock_local -setup -add $c 2c_diff_su
set_clock_uncertainty -de $src_core_clock_local -a $dst_core_clock_local -hold -add $c 2c_diff_h
}
}
}
}
}
7. Para a lógica do usuário que envolve user_created_clock e o clock de saída PHYLite, o usuário precisará adicionar a incerteza extra de clock de 100ps nesse caminho de transferência de clock no arquivo sdc do usuário.
8. Informe a SDC e verifique as Atribuições do SDC>Conjunto de incerteza do clock, certifique-se de que os 100ps extras são adicionados aos caminhos de transferência de clock afetados
9. Retime ou recompile o projeto e garanta o encerramento do tempo
10. Realize testes rigorosos de hardware para garantir que o design esteja funcionando corretamente antes de entrar em produção
Ao atualizar o design para o software Quartus Prime v17.1 ou mais recente:
a) Iniciar a ferramenta de atualização de IP para atualizar o Arria 10 Altera PHYLite IP para v17.1
b) O arquivo PHYLite SDC gerado terá toda a incerteza de clock necessária adicionada quando o clock de referência PLL do núcleo for usado.
c) A incerteza adicional de clock de 100ps adicionada para o caminho lógico do usuário que envolve o user_created_clock e o clock de saída PHYLite anteriormente exigirá permanecer no arquivo sdc do usuário.
d) Execute a compilação completa sobre o projeto e garanta o encerramento do tempo.