*【编者按】 在之前的Calibre Calibre物理验证技术点滴 有一个对LV整体概貌的讲解,但是针对LV里边相对有一点挑(fu)战(za)的LVS而言,这里拿出来专本的一个系列进行讲解,期待各位读者从中获取一些灵感和收获。 *
在一个芯片的最终tape-out时候,物理验证的一个重要的检查项当属LVS莫属。先来一张帅图镇贴。 ^_^

和功能类的一致性的比较formal相对而言,芯片里边的LVS可以视为物理版图(GDS)和原理图(Schematic)的已于比对规则文件(LVS)完成的一致性比较。所以LVS的全称即是:Layout Versus Schematic。
版图(Layout)是指:工具(Calibre)对二进制文件(GDS)进行到spice网表的转化,
原理图(Schematic)是指:工具(v2lvs)将verilog进行spice的网表转化,
规则文件(RSF):是对GDS的操作,以及LVS比对是的常规配置
所以,用下表来对LVS和formal(LEC/formality)进行一个比较
| 类目/工具 | Golden | Revised |
|---|---|---|
| formal RTL | RTL | syn-netlist |
| formal gate | syn-netlist | layout-netlist |
| LVS | layout-netlist | GDS |
可以看到,最终的用户会得到这样一个功能侧的恒等式
RTL = syn-netlsit = layout-nelist = GDS
最终的目标就是让流片的GDS功能恒等于RTL,确保功能,版本等等的正确。
PS:这里的等式标注了功能侧,这是因为GDS里边包含了除过功能侧意外的其他的组件(这些组件并不会影响对RTL功能的比对),包括但不限于:
综上所述,开始一个LVS的比对,通常需要有下列三个文件,分别是:
这里的GDS的源头,就是从APR的layout数据库里边直接吐出来的GDS,但是通常这个GDS是无法直接给LVS去使用的,可能会有包含并不限于下列的因素:
write_gds -merge_files $GDS_FILE LIST进行GDS导出时的GDS merge。这个是强制复写,无论NDM是否包含实际的instance的GDS信息,通过-merge_files选项,在导出GDS的时候强行merge-in 指定的GDS信息streamOut -merge $GDS_FILE LIST进行GDS导出时的GDS merge。通过-merge选项,在导出GDS的时候merge-in 指定的GDS信息。layout filemerge -in $TOP_GDS -in $LIB1_GDS -in $LIB2_GDS [-mode append|overwrite|rename|forcerename] -out $FULL_GDSPS:Calibre里边还有一个layout merge,这个命令的作用将两个GDS内容合并成一个新的GDS,这里不做赘述
由于LVS的比对方式很像formal,把实际的目标当作一个黑盒,所以无论是flatten(nmLVS)还是hierarchy(nmLVS-H:这个基本是现代LV的常用方式)的LVS,都需要将两个目标黑盒(GDS/netlist)的port先进行比对。所以GDS里的port信息,在用户导出GDS之前需要谨慎处理,但是calibre DRC通常对这个信息不敏感,这个也是LVS的特殊之处。
Calibre通常使用text(label)对芯片的port进行识别,通过查阅DRM手册,可以看到GDS里边的text版层定义

所以,用户在导出GDS的之前,需要在所有的port上定义好对于的port text(label),譬如:port:“A”对于的terminal 在M5,那么用户需要在M5 terminal的shape 范围上创建一个文本:“A”。通常建议放置到这个terminal的中心位置,并且要谨记port和terminal layer的不能错层,这个对于后期出bump坐标也是可以共用的坐标点。譬如这里的信号port:P11

对于所有的信号port,通常比较容易,因为常规的方法是一个信号 port通常只会有一个terminal,多terminal通常是被禁止的,不利于extraction和顶层连接。
PG的port会有一些特殊,这是因为PG通常是multi-terminal,这个会很方便连接PG,通过看IP的PG pin 就能感受到这个现象

主要是可以有效提高供电质量。
所以对于PG 的text,这里需要强调以下几点:


对于port还有一个有趣的事情,所有的IP都有自己的port text,也会放到比较高的层级,譬如IO上的port,VDD IO的通常会在M5层级创建一个text恰好也叫VDD,但是top-level的对于这恶VDD IO在顶层的应用是在VDD_MAIN net上,譬如下图

所以,最终的GDS在同样的M5 shape会有两个text:VDD和VDD_MAIN,遇到这种情形,通常需要在LVS的配置里边声明如下命令,来强制工具只识别top-level的text,来避免产生这种冲突:TEXT DEPTH PRIMARY
随着工艺复杂度不断提升,layer:datatype的应用也越来越普遍,APR工具在导出GDS的时候,都会应用一些类似map file的方式进行GDS stream-out的微控制,可以控制port/text的输出。就算用户创建了port text,也需要在mapfile里边,进行对应的配置,否则也会出现text没有被导出的情形,这样也会导致LVS的失败。具体操作细节,请参考各个EDA工具的配置手册
PS:由于C家和S家的一些策略区别,prboundary的处理也有一些不同:S家需要在工艺指定的prboundary层基于die boundary创建user_shape ,才可以导出;C家需要在mapfile 里边定义layerObjName/layerObjType 非别为DIEAREA/ALL,以及层号和数据类型(layer 和datatype),即可导出。
未完待续(To Be Continued )…

LVS可以简单理解为物理级别的formal,专注目标,一定要从专注细节开始。
Cadence Innovus user guide
Synopsys ICC/ICC2 user guide
Mentor Standard Verification Rule Format(SVRF) Manual
Mentor Calibre® DESIGNrev™ Reference Manual
Mentor Calibre® Verification User’s Manual