【STA】常用约束指令学习记录

在IC/FPGA设计中,为了保证功能逻辑的正确执行,需要保证各功能单元的接口时序均得到满足,静态时序分析(STA)是快速判断接口时序是否满足的方法。
STA根据DUA的内部属性,通过计算得出所有预设约束的时序裕量,进而得出功能逻辑能否正确执行的初步判断。
本文对一些常见约束进行总结:

时钟引脚约束

1. create_clock

规定引脚为具有指定周期、相位的时钟
-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]

2. set_clock_transition

指定理想过渡时间,在实现时钟树计算出实际过渡时间后无效。

set_clock_transition -rise 0.1 [get_clocks CLK_CONFIG]
set_clock_transition -fall 0.12 [get_clocks CLK_CONFIG]

3. set_clock_uncertainty

时钟的不确定度,包括时钟抖动(噪声延时)、悲观估计裕量。

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

4. set_clock_latency

时钟延迟,包含总延迟、网络延迟、源延迟、衍生时钟源延迟。
源延迟:从时钟源到约束时钟的延迟
网络延迟:从约束时钟到触发器的延迟,在实现时钟树计算出实际网络延迟后无效
衍生时钟源延迟:时钟通过从上游时钟衍生得到,变频过程存在延迟

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]

5. create_generated_clock

衍生时钟,相比使用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时序逻辑约束

  • 约束输入端口信号的过渡时间

1. set_input_delay

输入路径延迟,即输入的数据路径相对时钟路径的额外延迟,包含时钟到触发器输出的时序弧延迟、组合逻辑延迟等。在约束时间范围外上游触发器输出引脚数据应保持稳定以让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]

2. set_output_delay

输出路径延时,即输出的数据路径相对时钟路径的额外延迟,包含组合逻辑延迟、下级触发器的建立时钟、保持时间等。在约束时间范围内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可用于进行时序路径分段。

  • 其他

  1. set_case_analysis(在输入引脚/端口上为指定常量值情况下进行时序分析)
  2. set_disable_timing(中断时序弧)
  3. set_false_path(设置伪路径)
  4. set_multicycle_path(设置多周期路径)

DUA组合逻辑约束(点对点约束)

1. set_max_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]

2. set_min_delay

引脚到引脚最小延迟

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]

其他

  • 输入过渡时间

  1. set_drive (驱动强度,根据驱动强度、网络负载、互连线延迟参数计算输入过渡时间)
  2. set_driving_cell (驱动单元类型,根据类型得出驱动强度)
  3. set_input_transition(输入过渡时间)
  • 输出负载电容

  1. set_load(电容负载)
  • 设计规则检查

  1. set_max_transition(最大过渡时间)
  2. set_max_capacitance(最大电容)
  • 22
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wjh776a68

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值