本文是对网上时序约束相关文章进行学习记录;
主要来源公众号:科学计算Tech
目录
1.IO约束
2.时钟周期约束
3.多周期约束
4.伪路径
5.XDC约束优先级
1
IO约束
1.1管脚约束
管脚约束指管脚分配,我们要指定管脚的位置PACKAGE_PIN和管脚对应的电平标准IOSTANDARD两个属性的值;
set_property PACKAGE_PIN AD8 [get_ports srio_rxp0]
1.2延迟约束
延迟约束用的是set_input_delay和set_output_delay,分别用于input端和output端,其时钟源可以是时钟输入管脚,也可以是虚拟时钟。
set_input_delay
从图中可以得到:T_inputdelay = Tco + TD
从图中可以得到:上游器件和FPGA的时钟沿是同时到达的,但是上游器件发送的数据在到达接收端的时候比时钟沿要延迟1-2ns之间,当满足图中的时序时,最大延迟为2ns,最小延迟为1ns。
设置方式为:
create_clock -name sysclk -period 10 [get_ports clkin]set_input_delay 2 -max -clock sysclk [get_ports Datain]set_input_delay 1 -min -clock sysclk [get_ports Datain]
set_output_delay
set_output_delay的用法跟set_input_delay相似;
02
时钟周期约束
2.1 Create_clock
在Vivado中使用create_clock来创建时钟周期约束。使用方法为:
create_clock -period 8.333 -name jesd_refclk_p [get_ports jesd_refclk_p]
如何确定主时钟是时钟周期约束的关键,可以借助Tcl脚本判断;
在Open Synthesized Design或者Open Implementation Design之后,并通过以下两种方式查看主时钟。
方式一
运行tcl指令report_clock_networks -name mainclock,显示结果如下:
方式二
运行tcl指令check_timing -override_defaults no_clock,显示结果如下:
使用report_clocks指令可以查看约束是否生效。执行report_clocks后,如下所示: