时钟的约束html
关于时钟的约束命令:app
create_clock-name clk-period 10.000[get_ports{clk}] derive_pll_clocks //当约束了主时钟以后加上这句话就不用逐一约束pll时钟啦 derive_clock_uncertainty create_generated_clock //当 FPGA 的引脚要向外部其余芯片提供时钟的时候
当出现警告: The following clock transfer have no clock uncertainty assignment. For more accurate results, apply clock uncertainty or use the derive_clock_uncertainty command.spa
只要加上 derive_clock_uncertainty 这条命令就能够解决。code
output引脚约束命令htm
set_output_delay-clock{clk}-min 2.5 [get_ports{reg1}] //最大 set_output_delay-clock{clk}-max 2.5 [get_ports{reg1}] //最小 set_output_delay-clock{clk}- 2.5 [get_ports{reg1}] //当最大和最小的值相等时
由于 Timequest 只能约束 FPGA 的内部走线延时,可是没法知道 PCB 板上的走线延时或者外部寄存器芯片的延时, 因此这些不知道的延时都要算到 FPGA 的保持裕量和创建裕量。PCB 板的路径延时越大,创建裕量越小,保持裕量越大。反之路径延时越小,创建裕量越大,保持裕量越小。blog
创建裕量考虑的是最大值get
Delay Value = PCB最长走线的时间 + 外部芯片的创建时间 Tsu - clock skewinput
保持裕量考虑的是最小值io
Delay Value = PCB最短走线的时间 - 外部芯片的保持时间 Th - clock skewclass
input引脚约束命令
set_input_delay-clock{clk}-min 2.5 [get_ports{reg1}] //最大 set_input_delay-clock{clk}-max 2.5 [get_ports{reg1}] //最小 set_intput_delay-clock{clk}- 2.5 [get_ports{reg1}] //当最大和最小的值相等时
创建裕量考虑的是最大值
Delay Value = PCB最长走线的时间 + 外部芯片的创建时间 Tco - clock skew
保持裕量考虑的是最小值
Delay Value = PCB最短走线的时间 + 外部芯片的保持时间 Tco - clock skew
其他约束
set_clock_latency //将外部时钟信号的抖动信息告诉 TimeQuest
set_min_delay //将有关路径延时告诉 TimeQuest
set_max_delay