我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?
拾陆楼知识星球入口
clock route的net type分为三种,分别是root、trunk和leaf,其中root是指fanout超过routing_top_fanout_count约束的net,leaf是指接sink的net,剩下的就是trunk,工具会给既接sink又接组合逻辑的net插buf来避免net type定义冲突。
top net的fanout限制是人为控制的。
set_ccopt_property routing_top_fanout_count 1000
还可以设置如下命令,让mem/CLK相当于1000个FF/CK,通过这种方式可以让mem/CLK用top route rule去绕线。
set_ccopt_property -pin mem/CLK -routing_top_fanout_count 1000
net_type参考命令:
innovus: add_ndr
innovus: add_ndr使用自定义via def
add_ndr -name 2w2s -spacing_multiplier {M3:M5 2} -width_multiplher {M3:M5 2}
create_route_type _name top -non_default_rule 2w2s
create_route_type _name trunk -non_default_rule 2w2s
create_route_type -name leaf -top_preferred_layer M2 -bottom_preferred_layer M5
set_ccopt_property -net_type top route_type trunk
set_ccopt_property -net_type top route_type trunk
set_ccopt_property -net_type leaf route_type leaf
clock buffer_cells / inverter_cells / clock_gating_cells / logic_cells 设置方法如下:
innovus: clock cell list如何设置
选型参考如下方法:
长tree的buffer_cells/inverter_cells如何选型
使用innovus分段长tree时可以用以下三种方式先做subtree(分别使用,也可以结合使用)。
ICC2/innovus 分段长tree思路
1)修改spec,保留subtree clock。
2)修改sdc,创建新的analysis_view,产生对应的spec file。
3)使用opt_ignore,设置为true工具不会balance指定clock。
set_ccopt_property -opt_ignore true -clock_tree $clock_name
用户通过set_ccopt_property控制的sink type有三种,分别是stop pin ,ignore pin和exclude pin,具体区别见如下文章:
stop pin / ignore pin /exclude pin /float pin
设置方法如下:
set_ccopt_property \
-pin
sink_type ignore/stop/exclude
在cts前后,由于clock latency造成in2reg和reg2out的时序发生很大变化,为了减小这种变化的影响,工具会自动update io latency,具体内容可见如下文章:
update io latency详解
默认情况下,innovus ccopt会自动update io latency,命令如下:
set_ccopt_property update_io_latency true(default)
但如果cts时遇到core clock已经是propagated的情况,工具不会update io latency除非做出如下设置。
set_ccopt_property force_update_io_latency true(default: false)