在源同步输出接口中,FPGA 为目标设备提供源时钟。在边缘对齐源同步接口中,时钟转换与数据转换同时进行。图 1 显示了源同步输出接口示例。
按照以下步骤约束边缘对齐源同步输出接口:
- 创建基础时钟和生成时钟
- 添加输出延迟约束
- 添加伪路径异常,从时序分析和报告中排除无效路径
有关以下任何步骤或计算和约束的更多详细信息,请参阅“约束和分析源同步接口”(PDF)。
时钟
FPGA 的输入端口需要一个基础时钟。
所有锁相环 (PLL) 输出都需要生成时钟。双倍数据速率边缘对齐源同步输出将输出时钟与数据时钟对齐。
FPGA 的输出时钟端口需要生成时钟。生成时钟是数据总线输出延迟值的时钟参考。
输出延迟约束
可以使用最大偏移规格来计算输出延迟值。最大偏移规格表示数据总线的各个位离开 FPGA 所允许的时间变化。
输出最大延迟的值是时钟周期减去最大偏移值。
输出最小延迟的值是最大偏移值。
伪路径异常
在此边缘对齐示例中,数据是在源时钟和目标时钟的上升沿向上升沿转换时以及下降沿向下降沿转换时传输的。由于无法在时钟反沿转换时传输数据,请使用伪路径异常来减少时钟上升沿至下降沿以及下降沿至上升沿的转换。
SDC 文件示例
# 在 FPGA 的输入端口上创建周期为 10 ns 的基础时钟 create_clock -name input_clock -period 10 [get_ports clk_in] # 在 PLL 输出上创建生成时钟 # 输出 clk[0] 驱动数据寄存器 # 输出 clk[1] 驱动输出时钟端口 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]] # 在 FPGA 的输出时钟端口上创建生成时钟 create_generated_clock -name output_clock -source [get_pins pll|clk[1]] \ [get_ports clk_out] # 添加最大和最小输出延迟约束, # 假设偏移要求为 +/- 250ps # 使用以下方程式计算上面列出的输出延迟值 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*] -add set_output_delay -min -clock output_clock 0.250 [get_ports data_out*] set_output_delay -min -clock output_clock -clock_fall 0.250 \ [get_ports data_out*] -add # 为跨时钟传输添加伪路径异常 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]