| ||
后端人最新换的图案是什么?我想莫过于那一个√+😊了。没错,说的就是深夜里,LVS pass的那一刻,屏幕上出现的笑脸😊。为什么这么说呢?很多做过复杂设计的人都会有感觉,一开始看到满屏的问题,摸不着头脑,最后有可能纠结于一个fail点,却无法快速定位,给人一种不得其门而入的感觉。在自己做了数个复杂的LVS case之后,记录一下心得。
其实看似玄学的LVS是有很逻辑技巧可循的。整理成规范的流程,一路做下来,就会轻松很多。
第一步:趟flow,确保flow能正常跑完。
出数据 lvs.v, gds, hcell. 然后把lvs.v转成spi文件,v2lvs命令实现。gds进行merge,然后也抽取成spi格式。就可以把lvs.spi和gds.spi进行lvs比较了。这里要注意的规范就是,出网表的时候要包含dcap,gdcap,如果有的话。排除普通filler。gds merge的时候也要确保内容完整。
第二步:排除short和open。short比较容易确认,可以在PR的数据当中就做好检查。当然,gds抽取成spi文件的时候也可以看到是否又short,Calibre会生成short.txt, 如果不好定位的话,可以把这个文件导入PR工具,会有marker标记,就可以定位到short了。首先排除short,防止由于short引入的大量电路不等价假问题造成的干扰。
第三步:设置blackbox,排除子模块的影响。如果design比较大,包含的子模块或者IP比较多,则需要分开debug。保证子模块先pass。top only pass。
第四步:定位具体的问题。可以通过lvs.rep 进行分析,也可以通过calibre安装目录先的calibre_innovus.tcl 导入到innovus工具中,在pr里直接定位。
这里就涉及集中常见分析方式。
1. 如果layout missing net,SOURCE 有,很可能是short。
2. 如果LAYOUT 比SOURCE net 多,很可能是open。
3. 如果LAYOUT有电路管子,SOURCE没有,很可能是网表里缺instance,可以追溯出网表时候的option,是否遗漏了某类include的cell
4. 如果LAYOUT没有管子,SOURCE有instance,很可能是网表里多了instance,也可以追溯出网表时候的option,是否遗漏了exclude的cell。同时可以checkplace,检查PR db里是否有unplace,overlap等问题。
5. 可以单独跑某一个ip的lvs,确保ip本身没问题
6. 检查erc的报告,点击fail点去定位电路
7. 检查soft connect的点,确保没有soft connect
8. 如果一开始db问题太多,无从下手,可以先设virtual connect去debug,排除干扰。最终记得拿掉virtual connect再次检查
9. 最直接有效的就是通过innovus gui界面load calibre,starRVE,打开svdb,去定位fail点
具体的技巧根据不同的情况可能有很多种,但是原理就是open 和short的排除。根据已有的线索推导可能存在的问题,进行有方向的debug,效率会高很多。