文章目录
一、set_case_analysis
set_case_analysis用于给端口(或引脚)设置固定的逻辑值,然后时序分析会根据该结果优化原先的电路。
比如带DFT的design,选择function mode时,约束命令如下。
代码如下(示例):
set_case_analysis 0 [get_ports PIN_SCNTEST]
set_case_analysis 0 [get_ports PIN_SCN]
二、set_false_path
set_false_path 是用来设置 timing path,表示不用 check 这些 path 的 timing,但是依然会去计算这些 path 上的delay。
例如,对于异步时钟,当我们书写SDC时,可以使用set_false_path语句来指定由于异步时钟导致的timing exceptions。
代码如下(示例):
set_false_path -from [get_clocks CLKA] -to [get_clocks CLKB]]
上述只能指定单方向路径的timing exceptions。如果需要指定双向的timing exceptions,则需要如下设置。
代码如下(示例):
set_false_path -from [get_clocks CLKA]-to [get_clocks CLKB]]
set_false_path -from [get_clocks CLKB]-to [get_clocks CLKA]]
在大型设计中,可能有数百或数千个时钟。如果使用“set_fase_path”,则每个时钟对将需要2个约束,那么约束的语句将成倍增长!!!
三、set_clock_groups
set_clock_groups命令用于定义时钟域之间的关系,能够切断不同clock group中不相关时钟之间的时序。
与set_false_path相比,set_clock_groups能够更有效的指定设计中的异步时钟关系。
代码如下(示例):
set_clock_groups -asynchronous -group CLKA -group CLKB
四、set_disable_timing
set_disable_timing 用来disable 设计中某个timing arc 。设置disable timing之后,所有经过这个timing arc的timing path(data path/clock path),工具都不会去计算和分析。
例如:在 function mode 下不需要管 Test_Clk ,**除了设置case analysis,还可以把 MUX 的 a-y 这条 timing arc 设成 disable **。
代码如下(示例):
set_disable_timing -from U1/a -to U1/y
但是不可以用 set_false_path -from Test_clk -to Int_Clk 来约束。因为 set_false_path 只对数据路径有效,而 [ -from Test_clk -to Int_Clk ] 这段 path 是 clock path,这样设置是无效的。
set_disable_timing 对timing arc起作用,使用set_disable_timing命令需要格外小心,因为它会删除通过指定引脚的所有时序路径,完全不去分析这条timing arc。另外,set_false_path 只对data path起作用, EDA 工具还会分析计算这条时序路径, 只是不报出来是否有时序违例。
五、set_clock_sense
时序分析时有两个很重要的概念:Timing Arc和Timing sense。
1. timing arc
如果两个pin之间在timing上存在因果关系,我们就把这种时序关系称为Timing arc,主要分为定义时序延迟和定义时序检查两种。为什么叫它时序弧?因为时序图中经常用一条弧形线段来表示它。如图所示,图中弧线部分都可以表示为时序弧。
时序延迟的Timing Arc
- Combinational Timing Arc:最基本的TimingArc。Timing Arc 如果不特别指明的话,就是属于此类。定义了从特定输入到特定输出(A到Z)的延迟时间。
- Edge Timing Arc:定义时序组件Clock Active Edge 到数据输出的延迟时间,依据Clock上升或下降分为2类。
- Reset and Clear Timing Arc:定义时序组件清除信号,依据清除信号上升或下降及是Reset或Clear分为4类。这个TimingArc 通常会被取消掉,因为它会造成信号路径产生回路,这对STA而言是不允许的。
- Three State Enable & Disable Timing Arc:定义 Tri-State 组件致能信号(Enable)到输出的延迟时间,依据Enable或Disable分为2类。
时序检查的Timing Arc
- Setup Timing Arc:定义时序组件(Sequential Cell,如Flip-Flop、Latch 等)所需的Setup Time。
- Hold Timing Arc:定义时序组件所需的 Hold Time。
- Recovery Timing Arc:定义时序组件Clock Active Edge 之前,清除信号不准启动的时间。
- Removal Timing Arc:定义序向组件Clock Active Edge 之后,清除信号不准启动的时间。
- Width Timing Arc:定义信号需维持稳定的最短时间。
2. timing sense
Timing sense这个概念和timing arc是对应的,每一个时序弧会有一个timing sense,表征的是输入如何影响输出。
PrimeTime会自动track clock tree中的inverter和buffer,从而得到每个register的clock sense。
如果clock tree中,只有buffer和inverter,输出由唯一输入决定,PT认为timing sense是unate,到达register clock的clock signal分别为positive unate(rising edge的clock source引起register clock pin的rising edge)和negative unate(rising edge的clock source引起register clock pin的falling edge)。
而异或逻辑中,输出clock的极性跟另一个input也有关,PT认为timing sense是non-unate。
3. set_clock_sense
set_clock_sense命令可以设置clock sense是否传递下去。
set_clock_sense设置在non-unate的情况下,需要分析的clock状态;如果施加在unate的情况下,和clock本身冲突,则会报错。
例如,指定只有positive sense的clock传递到mux1的Z端,-clock来指定pin上的clock,一个pin上可能有多个clock source。
代码如下(示例):
set_clock_sense -positive -clock [get_clocks CLK] [get_pins mux1/Z]
例如,让clock从某个pin不往下propagate,如下所示只有I0端的clock输出到Z。
代码如下(示例):
set_clock_sense -stop_propagation -clock [get_clocks CLK] [get_pins mux1/I1]