约束中心对齐源同步输入

author-image

作者

源同步输入接口的约束方式与系统同步输入接口类似。FPGA 接收时钟并使用此时钟锁存输入数据。在中心对齐源同步接口中,时钟转换在数据有效窗口的中间进行。图 1 显示了源同步输入接口示例。

图 1.源同步输入接口。

按照以下步骤约束中心对齐源同步输入接口:

  1. 创建虚拟时钟、基础时钟和生成时钟
  2. 添加输入延迟约束
  3. 添加伪路径异常,从时序分析和报告中排除无效路径

有关以下任何步骤或计算和约束的更多详细信息,请参阅“AN 433:约束和分析源同步接口”(PDF)

时钟

虚拟时钟对外部设备中驱动数据寄存器向 FPGA 传输数据的时钟进行建模。

FPGA 的输入端口需要一个基础时钟。基础时钟描述了 FPGA 时钟输入端口的时钟特性。如果输入时钟与数据中心对齐,必须使用 -waveform 选项指定与时钟相移对应的时钟上升沿和下降沿。

所有锁相环 (PLL) 输出都需要生成时钟。

输入延迟约束

可以使用最大偏移规格来计算输入延迟值。最大偏移规格表示数据总线的各个位到达 FPGA 所允许的时间变化。

输入最大延迟的值是最大偏移值。

输入最小延迟的值是时钟周期减去最大偏移值。

伪路径异常

在此中心对齐示例中,数据是在源时钟和目标时钟的上升沿向上升沿转换时以及下降沿向下降沿转换时传输的。由于无法在时钟反沿转换时中传输数据,请使用伪路径异常来减少时钟上升沿至下降沿和下降沿至上升沿的转换。

SDC 文件示例

# 在外部设备中创建用于描述数据时钟的
# 虚拟时钟。
create_clock -name virt_clk -period 10

# 由于接口是中心对齐的,在 FPGA 的输入端口上
# 创建周期为 10 ns、相移为 90 度的基础时钟
create_clock -name input_clock -period 10 -waveform { 2.5 7.5 } [get_ports clk_in]

# 在 PLL 输出上创建生成时钟
create_generated_clock -name data_clock -source [get_pins pll|inclk[0]] \
[get_pins pll|clk[0]]

# 添加最大和最小输入延迟约束,
# 假设偏移要求为 +/- 250ps
# 使用以下方程式计算上面列出的输入延迟值
set_input_delay -max -clock virt_clk 0.250 [get_ports data_in*]
set_input_delay -min -clock virt_clk -0.250 [get_ports data_in*]
set_input_delay -max -clock virt_clk -clock_fall \
0.250 [get_ports data_in*] -add
set_input_delay -min -clock virt_clk -clock_fall \
-0.250 [get_ports data_in*] -add

# 为跨时钟传输添加伪路径异常
set_false_path -setup -end -rise_from [get_clocks virt_clk] \
-fall_to [get_clocks data_clock]
set_false_path -setup -end -fall_from [get_clocks virt_clk] \
-rise_to [get_clocks data_clock]
set_false_path -hold -end -rise_from [get_clocks virt_clk] \
-rise_to [get_clocks data_clock]
set_false_path -hold -end -fall_from [get_clocks virt_clk] \
-fall_to [get_clocks data_clock]