Innovus与ICC2的体验对比
本次评估使用Innovus common UI,也就是stylus模式,该模式相对legacy UI更容易上手,各类设置有一定规律可循,get_db尤其好用,个人看来容易上瘾,遇事不决get_db多半没错。但也有些缺点:某些情况get_db不太直接,比如想要获取pg net连接的pin的时候,只能用get_db pins -if ".net.name==$nname",速度较慢(可能有什么好的用法我没搞清楚)。部分set_db的option仍然说明不完善,以及attribute editor弹出速度慢。同时默认设置情况下source命令有-echo,log膨胀且难看等,不过都是些小问题,无伤大雅。
与此相比,ICC2整体命令行更成体系,不同设置和命令可以在man结果中看到一定相关性,整体有一定规律可循,新版本qor有一定提升,具体的差距还要等所有结果出来才好比较。但是默认设置下很多时候与StarRC+PT的correlation也不太好,需要使用StarRC-In-Design, ICV-In-Design Metal Fill, PT delay calculation等高级功能才能较好地匹配。电源绕线在边界比较容易出drc,少数base drc会有残留,需要额外添加规则。另外就是为什么cut metal需要手动加入,一直十分不理解这里的意义?
在输入数据的准备方面,Innovus优势比较明显,lef+liberty足够简单,不像ICC2需要db+lef/gds生成ndm。但是7nm下lvf的库体积很大,导致有时候read_db速度比较慢,设置用multi thread模式有改善,但是ndm打开数据仍然更快一些。ecsm格式的库在体积上小很多,但为了避免引入过多变量,本次评估并未使用。
DRC结果对比
平心而论,两个工具剩下的DRC数量都不多,而且preroute相关的DRC数量较多,base DRC也有不同程度的剩余,都需要增加一些特定的设置才能比较好地收敛。主要出现的DRC可以分为以下几类:
a) boundary cell只能连接一个方向的rail/follow pin
b) sram的pin color在某些优化命令执行后改变
优化后的color改变会导致与之相连的VIA出现大量的color spacing,目前没有找到比较好的办法,最好是lef里面没有FIX MASK的设置,如果没有可以通过工具命令重置该cell的mask shift的值。
c) floating input pin引起的DRC(PO.R.19)
本问题是7nm常出现的DRC之一,常见的原因也就是floating 的input pin,少量原因就是绕线导致的open,数量较多的时候不太容易找到原因。
d) VIA0 enclouse问题,常出现在M1 power stripe(纵向)恰好落在row boundary附近
本问题在ICC2中看到较多,可能与tech file中的规则和signoff不匹配有关。
e) 偶数CPP规则,主要在调整boundary cell的边界时注意,尤其是sram较多的地方
主要用于决定sram等hard macro的相对位置,也正是因为这个规则导致7nm中的macro halo大概率不会完全一样,都会有或多或少的偏移,而且手动调整确实麻烦,建议写个脚本自动调整macro的位置和halo
f) TAP cell和ECO DECAP或者FILLER之间的OD spacing,该问题属于Innovus和ICC的已知问题,都可以通过swap tap的类型来解决,个人尝试ICC2 swap后相对干净一些。
replace_fillers_by_rules -replacement_rule od_tap_distance -tap_cells $tap_cells \
-right_violation_tap $right_tap -both_violation_tap $both_tap -left_violation_tap $left_tap \
-adjacent_non_od_cells $vio_cells_type -tap_distance_range {0.228 1000}
swap_well_taps -cells [get_db [get_db base_cells -if .base_name==*_TAP*] .name] -default_cell $default_tap \
-diffusion_forbidden_spacing 0.228 \
-violation_report swap_well_taps.violations.txt -swap_report swap_well_taps.swap.txt
g) SRAM边界的VIA常出现enclosure问题
h) SRAM范围内的metal与via出现的area/spacing等问题(Innovus较多)
具体原因不详,貌似SRAM范围内的metal与core范围内需要满足不同的规则,但是tech lef中或者工具在绕线中并没有做这种区别。
i) macro spacing:没有详细研究具体需要多少,上下左右都5um没有出现问题
j) cut metal spacing CM1B.S.1,出现在Innovus中,可以通过特殊设置规避
该设置属于reference流程中的一部分。
set_db route_design_with_trim_metal "-layer 2 \
-mask2 {-pitch 0.24 -core_offset 0.095 -width 0.03 } \
-mask2 {-pitch 0.24 -core_offset 0.225 -width 0.03 } \
-mask1 {-pitch 0.24 -core_offset 0.015 -width 0.03 } \
-mask1 {-pitch 0.24 -core_offset 0.145 -width 0.03 }"
k) ICC2写出的DEF读入Innovus中可能会有color问题,因为二者在处理color上的策略有些不同,可以在Innovus中通过update_power_vias更新multi-mask层的VIA来解决