Em uma interface de saída síncrona de origem, o FPGA o clock do dispositivo de destino. Em uma interface síncrona de origem alinhada à borda, a transição do clock ocorre ao mesmo tempo que a transição de dados. A Figura 1 mostra uma interface de saída de origem síncrona de amostra.
Use as seguintes etapas para restringir uma interface de saída de origem sincronizada com borda:
- Crie clocks básicos e gerados
- Adicionar restrições de atraso de saída
- Adicione exceções de caminhos falsos para excluir caminhos inválidos da análise de sincronização e relatórios
Para obter mais detalhes sobre qualquer uma dessas etapas, ou os cálculos e restrições descritos abaixo, consulte Restringir e analisar interfaces síncronas deorigem (PDF) .
Relógios
É necessário um clock base na porta de entrada do FPGA.
Os clocks gerados são necessários em todas as saídas de loop bloqueado por fase (PLL). Uma saída de origem sincronizada com taxa de dados dupla alinha o clock de saída com o clock de dados.
É necessário um clock gerado na porta do clock de saída do FPGA. O clock gerado é a referência de clock para valores de atraso de saída para o barramento de dados.
Restrições de atraso de saída
Você pode usar uma especificação de distorção máxima para calcular os valores de atraso de saída. A especificação de distorção máxima indica a variação de tempo permitida para que bits individuais de um barramento de dados saiam do FPGA.
O valor do atraso máximo de saída é o período de clock - valor máximo de distorção.
O valor do atraso mínimo de saída é o valor máximo de distorção.
Exceções de caminho falso
Neste exemplo alinhado à borda, os dados são transferidos em transições de origem de ascensão e queda e de clock de destino. Use exceções de caminho falsos para reduzir as transições de clock de queda e queda, porque os dados não são transferidos em transições de clock de borda oposta.
Arquivo SDC de amostra
# Crie um clock base na porta de entrada do FPGA, com um período de 10 ns create_clock -name input_clock -período 10 [get_ports clk_in] # Criar clocks gerados nas saídas PLL # Saída clk[0] impulsiona o registro de dados # Saída clk[1] impulsiona a porta do clock de
saída create_generated_clock
-name data_clock -source [get_pins pll|inclk[0]] \
[get_pins pll|clk[0]]
create_generated_clock -name clock_clock -source [get_pins pll|inclk[0] \ [get_pins pll|clk[1]] # Crie o clock gerado na porta do clock de saída da FPGA create_generated_clock -name output_clock -source [get_pins pll|clk[1]] \ [get_ports clk_out] # Adicione restrições máximas e mínimas de atraso de saída # assumindo um requisito de distorção de +/- 250ps # Use as equações para os valores de atraso de saída listados acima
set_output_delay
-max-clock output_clock [expr { 10 - 0,250 }] \
[get_ports data_out*]
set_output_delay -max-clock output_clock -clock_fall \
[expr { 10 - 0,250 }] [get_ports data_out*] -adicionar
set_output_delay -min-clock output_clock 0,250 [get_ports data_out*]
set_output_delay output_clock -output_clock -clock_fall 0,250 \ [get_ports data_out*] -adicionar # Adicionar exceções de caminho falso para transferências de set_false_path
-setup -end -rise_from [get_clocks data_clock] \
-fall_to [get_clocks output_clock]
set_false_path -setup -end -fall_from [get_clocks data_clock] \
-rise_to [get_clocks output_clock]
set_false_path -hold -end -rise_from [get_clocks data_clock] \
-fall_to [get_clocks output_clock]
set_false_path -hold-end -fall_from [get_clocks data_clock] \
-rise_to [get_clocks output_clock]