stop pin、ignore pin、exclude pin和float pin的区别如下图:
1、Stop pins
stop pin是clock tree的leaf pin,作为clock tree的终点,需要balance insertion delay(latency),clock sink都是stop pin。
2、Ignore pins
ignore pin也是clock treee的sink pin,区别是ignore pin不做balnce。
3、exclude pins
exclude pin和ignore pin很像,同样不会做banlance,但exclude pin不是时钟树的一部分,所以即便修DRV(max transition、max cap)也只会依照data path的约束去处理。
4、float pins
一些stop pin我们需要他们的insertion delay能够比clock tree的平均值更长或更短些,这样的pin就是float pin,例如,一个sram内部包含insertion delay,那么CTS时就需要让该sram把tree做的比平均insertion delay更短些。
举个例子,在ICC2中正常长tree,report_clock_qor -type latency报告如下:
如上图,mem_sp32x16k_wrap_u_mem_sp32x16k/CLK这个sram其内部有internal insertion delay(.lib中定义为max_clock_tree_path和min_clock_tree_path),所以CTS之后sram的latency 非常大,连带着其他stop pin(cnt_reg_*_/CK)都变得很长。
做出如下设置:
#1. 给mem_sp32x16k_wrap_u_mem_sp32x16k/CLK设为float pin,内部延迟设置为0
set_clock_balance_points -blance_points mem_sp32x16k_wrap_u_mem_sp32x16k/CLK -delay 0
#2. 给cnt_reg_1_/CK设置成ignore pin
set_clock_balance_points -blance_points cnt_reg_1_/CK -consider_for_balancing false
#3. 给cnt_reg_3_/CK设置成exclude pin,使用set_sense命令,在sdc中设置
set_sense -stop_propagation -type clock -clock [all_clocks] [get_pins cnt_reg_3_/CK]
CTS之后,report_clock_qor -type latency报告如下:
可见, mem_sp32x16k_wrap_u_mem_sp32x16k/CLK的latency正常了,cnt_reg_1_/CK、cnt_reg_3_/CK没有出现在报告中。
使用report_clock_timing -type latency -to cnt_reg_1_/CK报告如下:
cnt_reg_1_/CK作为ignore pin,虽然也作为clock sink pin,但是其latency与其他stop pin有明显差别,可见其没有做balance。
使用report_clock_timing -type latency -to cnt_reg_3_/CK报告如下:
cnt_reg_3_/CK作为exclude pin没有出现在clock tree上,值得注意的是,作为data与clock的分割,exclude pin前面工具会自动插入一个隔离作用的buffer,其命名可以识别其作用。
APS_CLK_ISO的命名就是data与clock isolation的意思。