在上一讲中一起了解了INVS里的DanglingWire(innovus中的DanglingWire(悬垂线)的理解和处理),常言道理论联系实际,在理解原理的基础上,那一定是要服务项目的,这篇后续火速跟进,一起使用自动化的方式来进行处理,节省芯片的绕线资源。
DanglingWire在INVS看来是可以进行trim的,这些也基本出现在PG gen的过程中,可能会来自于下列命令(或不仅限于下列命令):
- sroute
- editPowerVia
- addStrip
既然大家已经了解了DanglingWire的出现原因,在进行trim收到操作前,用户需要对自己的PG 进行优化,来减少DanglingWire的出现几率,这里有包括但不限于以下的一些建议
- 如果有PG ring的规划,需要优先创建core ring和block ring
- 建立PG stripe,尽量extend到ring上,这里有几个选项用户可以关注
- 在没有 std-cell row的channel,不要创建可能会被macro打断的PG stripe , 譬如
上述工作完成后,用户需要使用verifyConnectivity进行查验,如有遗漏可以尽量补足。
用户始终要明确:INVS的native命令是效率更高,收效更明显的处理手段。在任何手工/脚本操作前,都应该应用尽用INVS native 命令。
反过来讲,一个完美的结果也不是一蹴(一个命令)而就的,打磨在所难免的,在日渐竞争的芯片后端岗位中,掌握别人不了解或者现在不了解的方法,是有机会能够让你获取【短暂的】领先的
对于剩余的DanglingWire的问题,这里提供一个procedure(函数),进行解决。函数的基本使用方法如下
- 打开INVS数据库
- 在INVS,导入函数
这是ICerDev团队原创函数的第三次释放,版本信息如下
- 版本号: V0.12
- 交付时间: 2023-01-10
- 更新内容: 添加trim_danlingwire函数
- 使用help查看函数帮助
- 小试牛刀
在使用trim_danlingwire函数之前,先来使用命令verifyConnectivity验证一下当前数据库的DanglingWire的状态
可以看到,当前数据库有606个DanglingWire的问题
查看细节可以看到,基本是M1的问题,基于上篇文章的讲解对于std-cell的M1 PG rail上的问题,在PG DB上是不用理会的,这些在后期会自动修复。
这里以M6层举例,一起看看这个函数的处理能力
step1: 在进行trim前,推荐使用show_only的方式来进行脚本运行评估(evaluate)
函数此时以评估模式运行,可以看到,在基于M6和VIA5的基础下,函数评估出整个系统会有87根M6共计5237的绕线资源属于DanglingWire的范畴,可以被优化掉。此时,用户可以通过GUI的红色高亮区域进行查验
从full-view视图可以看到,函数评估出来的可优化的点位主要集中在FP的下侧,zoom-in看一下究竟
用户大致查验这些高亮的区域,如果没有明细问题,就可以进行真实的trim
step2: trim DanglingWire
对于上述高亮区域,可以使用下面的命令进行trim
可以看到,刚才高亮的区域,此时已经被trim掉了
用户此时可以通过verifyConnectivity查看DanglingWire状态
可以看到,数据库中的DanglingWire从606 降到了548,其他的错误类型并未发生变化,
再进行GUI进行细节查看
可以看到刚才下部大面积的DanglingWire已经消失了,M6的DanglingWire也从60个降低到了2个,在这个数据库中,基本可以实现一次性全部修复
用户
具体脚本分享,请参见题主的知识星球:艾思IC后端设计的
【INVS里的DanglingWire的自动化清理实战–脚本分享】