| |||
背景: 准备最后验证数据发现有两条drc error,分别报的是pplus nplus包diff的space问题.看起来是不能waived.
dry run gds 时候并没有发现这条错误. 这次为什么出现了? 下面是花费大约一个早上一步一步排除过程记录下.
Ø 打开gds查看报错位置,报错在stand cell 上. 这套stdcell lib 是arm的,查找lib 的releasenote.并没有说明这两条错可以waived.
Ø 查看run drc 环境变量setenv IP_WAIVER YES, 环境设置没有问题.(做过的指定GF工艺的rule option 喜欢环境变量控制),进一步到rule deck 中查看waiver switch 设置DEFINE ARM_WAIVER_LIB 也是正常的.
Ø 对比上一版的环境设置,也没有发现异常.
Ø 对比当前版本与上一个版本的gds 是否有特色层次丢失.(这条对比是怀疑有drc 中可以有waived 层次).对比结构是std 中都是一些常规层次并没有参与waived的层.
Ø 通过上一条检查结构,推断估计是根据cell的名字判断,那就从报错的具体rule 中去看怎么运算来的.
看到waiver_ARM_NP.xx 窃喜,继续查看这层又是怎么来的,waiver_ARM_NP.xx =EXPAND CELL XXXX YYYY ZZZZ
基本已经很清楚了,drc 中对ARM的std cell 中的错误是通过cell name 来判断的.那我这个为啥还会报错呢?
Ø 总结下dry run 时候没有报错.这次报错了.查看merge进来的数字pr 部分看看. 部分std cell 名字被重新命名了.
总结下:这个数字模块merge stdcell 是使用skipper 做的,有个Rename Suffix Prefix 默认是勾上的.
对于stdcell 重命名导致DRC 这条rule 不在产生waiver_ARM_NP.xx 层.导致DRC 报出错误.
其实不难debug,只是一直没想到会是这里的原因.