Innovus常见 ERROR: (IMPOPT-628)全自动解决方案(ecoChangeCell报错问题)
今天给大家分享一个项目后期做timing eco时特别容易出现的典型问题。
Q: 我用pt修完时序导出timing eco脚本,在innovus中导入时报错,请问是什么原因导致的?
报错信息如下:
ecoChangeCell -inst U3775 -cell NOR2XB_X1M_A7TH_C50
Ignoring all MSV checks during this manual ECO operation.
**ERROR: (IMPOPT-628): No equivalent cell found in the library for the substitution. Use “setEcoMode -LEQCheck false” to allow the swapping of cells if the two cells are of different functionality.
Type ‘man IMPOPT-628’ for more detail.
从报错的信息提示我们其实很容易知道问题的主要原因是Innovus认为你当前要把U3775这颗instance换成NOR2XB_X1M_A7TH_C50,而且工具发现这颗cell的功能和原设计功能是不一样的。
如果看不太懂英文,也没有关系。咱们社区钉钉系统支持中文回答工具报的所有错误类型。
通过分析我们知道U3775这颗instance原来的cell name是NOR2XB,现在PT是给替换成NOR2B。从这两颗cell的符号图可以清晰看到cell的两个输入端的名字都不一样。
那为何PT在做DMSA时会进行size_cell呢?原因是PT是根据时序库lib中的function来判断cell的功能的,默认情况下PT才不管cell的输入输出pin name是否一致,它只管cell本身功能是否一致。
一般遇到这个错误,我们通常会根据提示来设置如下变量设置
setEcoMode -LEQCheck false
然后再继续执行ecoChangeCell。但是尝试关闭LEQCheck检查后替换,又报pin names不匹配。
**ERROR: (IMPOPT-340): Cannot determine how to connect NAND2XB_X3M_A7TR_C50. There is a mismatch in pin names between the cells being swapped. Use ecoChangeCell -pinMap to specify pin mapping when swapping cells with different pin names。
LEQcheck是进行功能一致性检查,比如buffer和inverter是不能互换的,因为lib中定义了他们的function了。所以开启LEQ检查后这两种cell替换时工具会报错。
这里的setEcoMode -LEQCheck 要改成true。否则formal大概率要出问题,特别是做一些非常规的ECO时。
这里顺便科普一个在实际项目中经常要用到的技能。项目中如何把clock buffer换成clock inverter?
即便开启了LEQ检查false后,还是无法指定替换。因为clock buffer的两个pin分别是I和Z,而clock inverter的两个pin分别是I和ZN。工具会识别到pin名字都不一样,无法替换。
在用ecoChangeCell时需要带上pinMap,具体命令如下。
setEcoMode -LEQCheck false
ecoChangeCell -inst $instance -cell DCCKND8BWP7T35P140LVT -pinMap {Z ZN I I}
所以我们可以尝试把最上面的命令改成如下命令:
ecoChangeCell -inst U3775 -cell NOR2XB_X1M_A7TH_C50 -pinMap {A AN B BN Y Y}
但由于PT DMSA修复setup,transition进行size cell的命令可能有几万行,我们不可能这样一条条去改吧。
那是否有从PT DMSA Flow中做一些提前的规避呢?
答案是真的有!
在PT中我们要善于利用prinvar pin来获取相关的变量。
关于更多PrimeTime DMSA Flow的教程,特别是PT的physical aware dmsa教程,可以查看社区数字后端知识库。
PrimeTime Physical Aware DMSA Flow可以确保工具在修timing的时候考虑physical物理位置,即工具修setup和hold violation会先看看当前位置是否有空位以及空位是否充足来决定是否修复当前timing violation。
数字IC后端设计实现中的Post-mask ECO应该怎么做?
所以为了彻底解决这个问题,我们可以在PT做timing fixing前设置如下变量即可。
set eco_strict_pin_name_equivalence true (默认是false)
ARM A75 PrimeTime(PT) DMSA golden流程脚本