set_false_path
语法:set_false_path -from pin/clk -to pin/clk -setup/hold 所有开关都是可选的,但至少要有一个from或to
用法:设置无需进行时序检查的路径,即假路径,这些路径的时序弧仍然存在并且会计算时序结果,只不过不进行报告和修复。通常包括某些不需要检查的IP端口、IO端口等,signoff前需要跟前端确认,而且最好尽量少用正则匹配,否则可能会设置了多余的路径导致PR工具没有进行修复违例很大,最后手修可太难了。
set_disable_timing
语法:set_disable_timing [get_cells XX] -from block_pin -to block_pin
用法:打断某个cell的两个pin之间的时序弧,所有经过这两个pin的路径都不会计算延迟也不会报告,所以这个指令比较危险,必须要前端明确确认之后使用。一般用于FLASH等两个不需要检查的端口之间。
set_case_analysis
语法:set_case_analysis 1/0 [get_pins XXX/X]
用法:用于某些IP只检查特定输入情况下的时序,比如插入scan chain的网表在scan mode只检查scan_enable为1的情况
set_multicycle_path
语法:set_multicycle_path int -setup/hold -start/end -from clk/pin-to clk/pin 其中-start是from高频时钟to低频时钟使用,-end是from低频时钟to高频时钟使用
用法:用于放松路径检查,通常用于主时钟(驱动的路径)和分频时钟(驱动的路径)之间,且一般情况下-setup和-hold成对出现,hold放宽倍数值为setup-1,这点自己去搜。另外注意,有些multicycle设置是单边的,比如一些IP 是高速写低速读,此时只有低频时钟到高频时钟可以设置multicycle。
set_sense
语法:set_sense -stop_propagation -type -clocks [get_pins XX/X] ,此处只说stop_propagation的用法,set_sense的另一个用法见我另一篇博客。
用法:用于将某个时钟在某一个cell的pin停掉,比如某个模块或IP不用某个时钟检查。这个指令非常好用,比较常见的用法是某个时钟如果小于一定频率时才穿过ICG去检查ICG后的路径,但高于这个频率时只有分频时钟去检查,此时就可以把设置的高频时钟从这个ICG的outpin停掉,类似的,这个用法也可以用来给某些模块、IP降频。这个指令也有一定风险,需要前端明确确认。
set_path_margin
语法:set_path_margin -int -setup/hold -from XX -to XX
用法:给某些IP、模块降频或升频,对于setup设置margin值为负的时候是降频放宽约束,margin值为正的时候是收紧约束。
set_max/min_delay
语法:set_max/min_delay int -from XX -to XX
用法:用来给部分路径放宽或加紧约束,常用于IO路径放款最大延迟约束,或是一些MEM的pin本身的建立时间就非常大也可以用这条指令来额外放宽约束。
下面额外说一些特殊的group_path
同步时钟:一般来自一个时钟源通过分频等形成的新时钟之间是同步的,同步时钟之间会进行路径检查,只有同步时钟之间可以设置multicycle。
异步时钟:不同时钟源之间是异步的,一般时钟源可以来自片外IO输入、片内PLL生成等。
逻辑互斥:一般是通过MUX进行时钟选择的时候,任一时刻MUX输出端的时钟只可能来自一个时钟源。
物理互斥:两个时钟完全没有路径交汇的时候可以设置为物理互斥。
只有同步时钟之间会检查时序,异步、互斥都不检查。