LEC:lec(logic equivalence checking)又叫formal check,是对ic design的综合,PR前后的设计进行逻辑对比检查的工具/手段,保证综合不改变rtl原始的logic function。目前用的较多的就是C家的formal工具。接下来介绍一下lec的流程,关于原理介绍,见上一个章节。
1. 概要
如下图所示,LEC过程主要分为两个大步骤:
第一步,setup阶段,设定相应的rules,然后读入lib和designs
第二部,lec 阶段,Map然后compare,有问题debug
正如在上面的两个步骤所示,lec也有两个mode ,setup相关的设定只能在setup mode下进行,而map和compare只能在lec mode下进行。
接下来将会详细讲解相关flow。
2. 详细flow
-
set read desige rule and save logs name。如下所示,为针对读取design时候设定的一些rule,还未到真正的setup mode下的一些设置。可以看到下面红字的内容,vpxmode和tclmode对应,相应的命令设置用“ ”空格,而不是“_”下划线。工具中可以自主切换。
-
SETUP mode — Read design,elaborate and read lib
如下所示为读对应的lib库,设定相应的design top,分别读入godel 和revised design然后进行elab,并设置root module
-
SETUP mode — Specify design constraints。
下图所示,指定了godel和revised design的map rule,指定对应map类型。
对于有吃upf的综合,在做lec时候需要读入相应的upf file,针对插入的特殊cell进行匹配
-
SETUP mode — Specify flatten model通过一些特殊的model设定,让lec 过程更加顺畅,增加pass几率。虽然工具已经按照人的思想进行了操作,但是终究有一些特殊的点。比如由于在综合过程中,可能会增加latch,可能由于综合造成的时序冗余逻辑,可能reg的D端口为1时候综合会被优化掉,可能由于transparent latch,可能由于sequential merge等等问题,都会导致lec不过。
-
SETUP mode — Option before lec mode
在lec mode之前,设置map method以及对于compare过程中针对abort的处理方式 -
Lec mode — map and compare
从setup mode进入tcl mode,开始add map points然后进行compare
至此,整个的lec的整体流程大致讨论完毕,如果没有non_equential或者not mapped,那我们的lec就是pass了,而如果有的话,就需要进行debug了。关于lec fail的debug内容也比较多,有关于unmapped,non_equential, abort或者lec时间非常久等情况。下一章节再进一步分析。