set_sense
使用set_sense可以人为的制造sink pin和ignore pin,set_sense两种常用开关: -stop_propagation(给指定clock设置endpoint)和**-clock_leaf**。
例1:set_sense -stop_propagation -type clock -clocks [get_clocks clk] [get_pins FF1/Q] (如果是一个output pin,那么input 端clk会被balance)
此时FF1/CK就会被当作sink pin,CTS阶段会balance,如果此时FF1后面有generate clock,那么generate clock仍然会长tree,只不过不会与clk其他的sink pin balance。
如果get_pins FF1/clk,那么clk会被作为ignore pin不会被balance,但是会给它前面插一个特殊的buffer,表示clk在这个buf之后的分支不长tree,ICC2中这个特殊的buf命名规则是btd, buf前使用clock tree约束修drc violation(max_tran/max_cap),buf后使用data path的约束修drc violation,同样的如果inst后面有generate clock,set_sense也会让它单独长tree,不跟clock clk其他sink pin banlance。
例2:set_sense -clock_leaf -clocks [get_clocks clk] [get_pins FF1/CK]
给clock clk设置leaf pin FF1/CK,FF1/CK是clock pin所以这里作为sink pin,设置在非clock pin上相当于ignore pin。此时CTS结果如图6,此时FF1在clock clk时钟树上需要balance,在FF1/Q之后的generate clock需要自己balance,效果和set_sense -stop_propagation -type clock -clocks [get_clocks clk] [get_pins FF1/Q]是一样的。
**应用方法:**分频时钟的寄存器不与主时钟或者主时钟下的分频时钟有timing check,则可以使用set_sense -stop_propagation 在分频器定义的寄存器的CK pin上,cts阶段分频时钟单独长tree不与主时钟sink balnace,cts之后可以用remove_sense移出set_sense后做时序分析。set_sense和remove_sense都不需要放到sdc里,在clock_opt前后使用即可。
set_disable_timing
每个单元内部从输入端口到输出端口都定义有时序弧,默认情况下所有的时序弧都应该有效并用于时序分析。但是在设计中由于具体逻辑设计的原因,某些单元内部的时序弧由于没有对应功能逻辑的触发条件而应该是无效的,对于这样的特殊情况可以通过屏蔽时序弧的约束命令来实现,以指导时序分析工具进行正确的时序分析。
比如,选择器单元存在选择输入端到输出端的时序弧,但是设计中不存在通过该单元选择端口到输出端口的时序路径,这样可以通过屏蔽该时序弧,指导时序分析跳过包含该
时序弧的时序分析。命令是set_disable_timing -from S -to Z [get_cells MUX]只适用移除单元内部时序弧,伪路径要用set_false_path注意区分
以下两个命令等效:
set_false_path -through [get_pins ADDER/CI]
set_disable__timing [get_pins ADDER/CI]
这样做的好处是可以减少静态时序分析工具的计算负载,对应的时序弧已经无效,所以不需要在计算该路径。