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 ao centro, a transição do clock ocorre no meio da janela válida 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 pelo centro:
- 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 AN 433:Restrição e análise de interfaces síncronas de origem (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 código-fonte sincronizada com taxa de dados dupla muda o clock de saída em 90 graus, em comparação 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 é(intervalo da unidade / 2) - valor máximo de distorção.
O valor do atraso mínimo de saída é o valor máximo de distorção - (intervalo de 1,5 * unidade).
Exceções de caminho falso
Neste exemplo alinhado ao centro, os dados são transferidos em transições de fontes 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
# Create a base clock on the input port of the FPGA, with a 10 ns period
create_clock -name input_clock -period 10 [get_ports clk_in]
# Create generated clocks on the PLL outputs
# Output clk[0] drives the data register
# Output clk[1] drives the output clock port with a 90 degree shift
create_generated_clock -name data_clock -source [get_pins pll|inclk[0]] \
[get_pins pll|clk[0]]
create_generated_clock -name clock_clock -phase 90 -source [get_pins pll|inclk[0] \
[get_pins pll|clk[1]]
# Create the generated clock on the output clock port of the FPGA
create_generated_clock -name output_clock -source [get_pins pll|clk[1]] \
[get_ports clk_out]
# Add maximum and minimum output delay constraints
# assuming a skew requirement of +/- 250ps
# Use the equations for the output delay values listed above
set_output_delay -max -clock output_clock [expr { (5 / 2) - 0.250 }] \
[get_ports data_out*]
set_output_delay -max -clock output_clock -clock_fall \
[expr { (5 / 2) - 0.250 }] [get_ports data_out*] -add
set_output_delay -min -clock output_clock [expr { (0.250 - (1.5 * 5) }] \
[get_ports data_out*]
set_output_delay -min -clock output_clock -clock_fall \
[expr { (0.250 - ( 1.5 * 5 ) }] [get_ports data_out*] -add
# Add false path exceptions for cross-clock transfers
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]