时钟特性
过渡时间:从一个状态到另一个状态转变所需要的时间。
BNF:
set_clock_transition [-rise]
[-fall]
[-max]
[-min]
clock_list transition_time
- rise用于提供时钟上升沿的过渡时间。
- fall用于提供时钟下降沿的过渡时间。
- max–min 为过渡时间的最大最小操作条件。
eg:set_clock_transition –fall –min 0.2–max 0.4 [get_clocks C1]
注意:set_clock_transition只用于预布局阶段,即时钟树综合完成之前。当然综合之后一切都已确定要它也没啥用。
不确定度:偏斜和抖动
偏斜:一个源产生的信号不可能同时到达所有触发器,所产生的差异叫做时钟偏斜。
抖动:在电路中因为串扰,电磁干扰等总之就是互相之间干扰对方就叫做抖动。BNF:set_clock_uncertainty [-from| -rise_from | -fal_from from_clock] [-to| -rise_to | -fal_to to_clock] [-setup] [-hold] [-rise] [-fall] [object_list] uncertainty_value
用户可以根据–setup –hold 对建立和保持检查设定不同的不确定度。
eg:set_clock_uncerainty 0.5 [get_clocks C1] set_clock_uncerainty -setup 0.5 [get_clocks C2] set_clock_uncerainty -hold 0.2 [get_clocks C2]
交互时钟不确定度(过时了,下面就走个形式)
eg: # C1到C2的家里和保持不确定度
set_clock_uncertainty–from C1 –to C2 –setup 0.5
set_clock_uncertainty–from C1 –to C2 –hold 0.5
当交互时钟和内部时钟都确定了不确定度时,交互时钟优先级更高。
时钟延迟 源延迟 和 网络延迟
源延迟:源时钟到定义的时钟点的延迟。
网络延迟:从被时钟定义的点到实际触发的时序设备所需要的时间。
注:同过渡时间,仅在预布局阶段有效,即时钟树综合完成之前。
BNF: set_clock_latency[-rise]
[-fall]
[-min]
[-max]
[-source]
[-late]
[-early] [-clockclock_list]
delay
object_list
- rise用于提供时钟上升沿的过渡时间。
- fall用于提供时钟下降沿的过渡时间。
- max–min 为过渡时间的最大最小操作条件。
当未设定-source 选项时,该命令表示网路延迟。
端口约束
输入
最基本的概念个人感觉深入理解时序分析(1)里边那张图就好了
最大最小有效时间:最大用来确保建立要求是否满足,最小对应保持。
多时钟:一个信号由多个时钟触发,如下图
STA会考虑每个到达时间,并且同时满足这两个条件。
BNF:
set_input_delay
[-clock clock_name]
[-clock_fall]
[-level_sensitive]
[-rise]
[-fall]
[-max]
[-min]
[-add_delay]
[-netowrk_latency_included]
[-source_latency_included]
delay_valueport_pin_list
- clock_fall下降沿触发
- level_sensitive 启动元件不是一个触发器而是一个锁存器。(谨慎使用此选项)
- rise–fall 略 类比之前的
- min 指定延迟值域输入端口信号的最早到达时间。
- max指定延迟值域输入端口信号的最迟到达时间。
- add_delay当同一个端口指定多个参考时间的输入延迟,又想不被覆盖
- netowrk_latency_included
- source_latency_included
延迟值D1是F1的时钟端口到B1的I1引脚之间的延迟。在set_input_delay中定义的就是它,但是在STA中还会就把L1+L2也要算上。但是假设你给的set_input_delay中包括了L1,不想让工具在重复计算则用-source_latency_included,同理-netowrk_latency_included是控制L2是否被计算。
输出类比输入在此就写个BNF
set_output_delay
[-clock clock_name]
[-clock_fall]
[-level_sensitive]
[-rise]
[-fall]
[-max]
[-min]
[-add_delay]
[-netowrk_latency_included]
[-source_latency_included]
delay_valueport_pin_list
负延迟:延迟规格为负值。
input
set_input_delay–min 为负值的时候,信号可能在时钟沿到来之前到达输入端口。
set_input_delay–max 为负值的时候,信号一定在时钟沿到来之前到达输入端口。
为满足时序要求,input_delay + Tpath + Tc-q < T
首先Tpath+ Tc-q 必< T 要是大于,那已经不是input_delay该关心的问题了
-max表示的是最糟糕的延迟 要是input_delay -max + Tpath +Tc-q < T
则信号一定在时钟沿到来之前到达输入端口。
-min表示最理想的延迟 就是input_delay -min + Tpath +Tc-q < T 也是可能在之前到达,同样反过来说,要是最理想的情况的满足不了,那就一定满足不了。
在时钟网络中,可能存在时钟偏斜,从而使启动时钟到达早了。即launch左移。
output
set_output_delay –max 为负值信号被寄存前在电路单元外部的时间为负值。因此,电路单元的内部的信号在通过最后一个寄存器和输出端口之间的组合逻辑时,允许延迟>1个时钟周期。
驱动能力
一个电路,对于输入端口驱动来说,输入过渡时间是未知的。
一个电路,对于输出端口驱动来说,负载是未知的。
所以在此用SDC命令指定相关信息
set_drive 指定驱动器的等效电阻(所用的值就是电阻值,一般人不太了解所以不常用)
BNF: set_drive [-rise] [-fall] [-min] [-max] resistance_value port_list
set_driving_cell 指定驱动单元
BNF: set_driving
[-lib_cell lib_cell_name]
[-rise] [-fall]
[-max] [-min]
[-librarylib_name]
[-pinpin_name]
还有,在此没有一一列举
输入过渡
BNF: set_input_transition
[-rise] [-fall] [-max] [-min]
[-clockclock_name]
[-clock_fall]
transiton port_list
其中[-rise] [-fall] [-max] [-min]和set_driving_cell中的没啥两样。
扇出数
BNF: set_port_fanout_number value_port_list
扇出负载(以缓冲器的负载值为标准单元)
BNF: set_fanout_load value port_list
负载
BNF: set_load
[-min] [-max] 同上
[-subtract_pin_load]
[-pin_load]
[-wire_load]
valueobject