赞
踩
在IC/FPGA设计中,为了保证功能逻辑的正确执行,需要保证各功能单元的接口时序均得到满足,静态时序分析(STA)是快速判断接口时序是否满足的方法。
STA根据DUA的内部属性,通过计算得出所有预设约束的时序裕量,进而得出功能逻辑能否正确执行的初步判断。
本文对一些常见约束进行总结:
规定引脚为具有指定周期、相位的时钟
-waveform 内的 时间戳 个数为偶数,且均在一个时钟周期内。
create_clock -name 自定义时钟名,默认同引脚 -period 时钟周期 -waveform {上升沿时间戳 下降沿时间戳 ...} [get_ports 引脚id]
create_clock -name SYSCLK -period 1.2 -waveform {0.3 0.4 0.8 1.0} [get_ports JTAG_CLK]
不指定[get_ports]从而创建虚拟时钟,用于进行DUA输入输出引脚时序约束。
create_clock -name VIRTUAL_CLK_SAD -period 10 -waveform {2 8}
create_clock -name VIRTUAL_CLK_CFG -period 8-waveform {0 4}
create_clock -period 10 [get_ports CLK_CORE]
set_input_delay -clock VIRTUAL_CLK_SAD -max 2.7 [get_ports ROW_IN]
set_output_delay -clock VIRTUAL_CLK_CFG -max 4.5 [get_ports STATE_O]
指定理想过渡时间,在实现时钟树计算出实际过渡时间后无效。
set_clock_transition -rise 0.1 [get_clocks CLK_CONFIG]
set_clock_transition -fall 0.12 [get_clocks CLK_CONFIG]
时钟的不确定度,包括时钟抖动(噪声延时)、悲观估计裕量。
set_clock_uncertainty -setup 0.2 [get_clocks CLK_CONFIG]
set_clock_uncertainty -hold 0.05 [get_clocks CLK_CONFIG]
时钟间不确定度,用于指定跨时钟边界路径上的时钟不确定度。
set_clock_uncertainty -from VIRTUAL_SYS_CLK -to SYSCLK -hold 0.05
set_clock_uncertainty -from VIRTUAL_SYS_CLK -to SYSCLK -setup 0.3
set_clock_uncertainty -from SYS_CLK -to CFG_CLK -hold 0.05
set_clock_uncertainty -from SYS_CLK -to CFG_CLK -setup 0.1
时钟延迟,包含总延迟、网络延迟、源延迟、衍生时钟源延迟。
源延迟:从时钟源到约束时钟的延迟
网络延迟:从约束时钟到触发器的延迟,在实现时钟树计算出实际网络延迟后无效
衍生时钟源延迟:时钟通过从上游时钟衍生得到,变频过程存在延迟
set_clock_latency 1.8 -rise [get_clocks MAIN_CLK]
set_clock_latency 2.1 -fall [all_clocks]
set_clock_latency 0.851 -source -min [get_clocks CFG_CLK]
set_clock_latency 1.322 -source -max [get_clocks CFG_CLK]
衍生时钟,相比使用create_clock约束时钟,可以共享主时钟时钟域、继承主时钟的源延迟、相位
-multiply_by和-divide_by选项指定衍生时钟的频率与主时钟的关系
create_clock -name CLKP 10 [get_pins UPLL0/CLKOUT]
create_generated_clock -name CLKPDIV2 -source UPPL0/CLKOUT -divide_by 2 [get_pins UFF0/Q]
create_generated_clock -name PCLK×2 -source [get_ports PCLK] -multiply_by 2 [get_pins
UCLKMULTREG/Q]
-edges选项挑选源主时钟{上升,下降,上升}的边沿列表,形成新的衍生时钟。
-edge_shift选项以指定相应边沿的任何偏移以形成新的衍生波形。它指定边沿列表中每个边沿的
偏移量(以时间单位)
-invert翻转衍生时钟沿
create_clock -period 2 [get_ports DCLK]
create_generated_clock -name DCLKDIV2 -edge {2 4 6} -source DCLK [get_pins UBUF2/Z]
create_generated_clock -name PH0CLK -edges {3 4 7} -source DCLK [get_pins UAND0/Z]
create_generated_clock -name NCLKDIV2 -divide_by 2 -invert -source CLK [get_pins UINVQ/Z]
-edges中序列需为非降序排列,对于下述约束,需添加edge_shift改写成后面形式
create_generated_clock -name MIIDIV2 -source MIICLK -edges {1 6 5} -edge_shift {0 5 0} [get_pins UMIIDIV/Q]
正确形式:
create_generated_clock -name MIIDIV2 -source MIICLK -edges {1 1 5} -edge_shift {0 5 0} [get_pins UMIIDIV/Q]
. create_clock_group
输入路径延迟,即输入的数据路径相对时钟路径的额外延迟,包含时钟到触发器输出的时序弧延迟、组合逻辑延迟等。在约束时间范围外上游触发器输出引脚数据应保持稳定以让DUA触发器正确采样。
create_clock -period 15 -waveform {5 12} [ get_ports CLKP]
set_input_delay -clock CLKP -max 6.7 [ get_ports INPA]
set_input_delay -clock CLKP -min 3.0 [ get_ports INPA]
set_input_delay -clock clk_core 0.5 [ get_ports sad_state]
输出路径延时,即输出的数据路径相对时钟路径的额外延迟,包含组合逻辑延迟、下级触发器的建立时钟、保持时间等。在约束时间范围内DUA输出引脚数据应保持稳定以让下游触发器正确采样。
create_clock -period 20 -waveform {0 15} [ get_ports CLKQ]
set_output_delay -clock CLKQ -min -0.2 [ get_ports OUTC]
set_output_delay -clock CLKQ -max 7.4 [ get_ports OUTC]
同时,set_input_delay/set_output_delay可用于进行时序路径分段。
引脚到引脚最大延迟
set_max_delay 0.45 -from UMUX0/Z -through UAND1/A -to UOR0/Z
set_max_delay 1.2 from [get_clocks SYS_CLK] -to [get_clocks CFG_CLK]
引脚到引脚最小延迟
set_min_delay 0.15 -from UMUX0/Z -through UAND1/A -to UOR0/Z
set_min_delay 0.4 from [get_clocks SYS_CLK] -to [get_clocks CFG_CLK]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。