阎浮提 · 2022年01月26日

后端进阶系列:Innovus+ICC2对比7nm工艺的后端实现(物理篇)

Innovus和ICC2在先进工艺的下的表现本身已有定论,毕竟大部分公司已经用脚投票了。尽管如此,对于大部分没有从事过工艺和工具评估的同学来说,很难直接认识到它们在结果上的差距。最近终于有机会实现这样一件事,借此机会将大部分结果分享出来供大家参考。由于篇幅较长,本期只将二者的整体对比和在物理DRC方面的比较贴出,timing和详细的对比会在后续的文章中陆续发出来,敬请持续关注~

在对比过程中两个工具的流程都吸取了部分已有的经验,但是流程和脚本基本从零开始。不了解原因的option尽量不加,以便充分暴露更多问题,当然官方推荐的设置还是大部分加上了,否则可能会出现很多意外的问题。这是一项浩大的工程,从后端实现到signoff在一般公司中需要投入大量的时间去做,本人时间精力和水平有限,难以覆盖完全,有经验的同学欢迎指正并一起讨论。

前提

工具版本基本为最新或者次新,以便让比较更具实际意义,尤其是ICC2在新旧版本上的表现有较大差异,因此尽量使用最新版本。结果的验证工具使用StarRC+PT+Calibre,顺便验证了一下ICValidator。其中signoff条件采用或者部分采用silicon proved设置,如果引入QRC+Tempus则变量增多不利于实验和对比,同理也没有使用ecsm格式的时序库。主要工具版本如下:
image.png

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

image.png

b) sram的pin color在某些优化命令执行后改变

优化后的color改变会导致与之相连的VIA出现大量的color spacing,目前没有找到比较好的办法,最好是lef里面没有FIX MASK的设置,如果没有可以通过工具命令重置该cell的mask shift的值。
image.png

c) floating input pin引起的DRC(PO.R.19)

本问题是7nm常出现的DRC之一,常见的原因也就是floating 的input pin,少量原因就是绕线导致的open,数量较多的时候不太容易找到原因。
image.png

d) VIA0 enclouse问题,常出现在M1 power stripe(纵向)恰好落在row boundary附近

本问题在ICC2中看到较多,可能与tech file中的规则和signoff不匹配有关。
image.png

e) 偶数CPP规则,主要在调整boundary cell的边界时注意,尤其是sram较多的地方

主要用于决定sram等hard macro的相对位置,也正是因为这个规则导致7nm中的macro halo大概率不会完全一样,都会有或多或少的偏移,而且手动调整确实麻烦,建议写个脚本自动调整macro的位置和halo
image.png

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问题

image.png

h) SRAM范围内的metal与via出现的area/spacing等问题(Innovus较多)

具体原因不详,貌似SRAM范围内的metal与core范围内需要满足不同的规则,但是tech lef中或者工具在绕线中并没有做这种区别。
image.png

i) macro spacing:没有详细研究具体需要多少,上下左右都5um没有出现问题

j) cut metal spacing CM1B.S.1,出现在Innovus中,可以通过特殊设置规避

该设置属于reference流程中的一部分。
image.png

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来解决

以上就是两个工具在实现过程中主要出现的DRC汇总,数量不多的金属绕线DRC并没有一一列出。当然不同的设计,采用不同的IP都可可能出现更多问题,欢迎大家留言或者加群共同讨论~

来源:数字后端设计芯讲堂
作者:数字后端设计芯讲堂

推荐阅读

如果大家有任何后端技术与职业发展方面的问题,抑或关于数字后端感兴趣的技术话题想要了解和探讨,欢迎关注我的知乎专栏: 数字IC后端设计工程师修炼之路
同时欢迎关注微信公众号:数字后端芯讲堂,一起探讨技术,共同提升!
本极术专栏也会同步更新芯片设计后端的技术干货,也请关注数字IC后端设计工程师修炼之路
推荐阅读
关注数
3845
内容数
46
本专栏致力于将数字芯片后端设计的技术,经验和技巧介绍给想入门或提高的你。一方面从基础知识方面的讲解使初学者少走弯路,另一方面用实际工作中的经验技巧方便从业者提高和交流。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息