棋子 · 1月17日

物理签核工具Calibre学习之DRC和LVS

第一章 Calibre简述

1.1 Calibre 简介

Calibre 作为Mentor Graphics 公司出品的后端物理验证(Physical Verification)工具,它提供了最为有效的DRC/LVS/ERC 解决方案,特别适合超大规模IC电路的物理验证。它支持平坦化(Flat mode )和层次化(Hierarchical mode)的验证,大大缩短了验证的过程;它高效可靠的性能已经被各大Foundry 认证,作为Tape Out 之前的验证标准。它独有的RVE(Result ViewEnviroment)界面可以把验证错误反标到版图工具中去,而且良好的集成环境便于用户在版图和电路图之间轻松转换,大大提高了改错的效率。xCalibre 具有版图寄生参数抽取的功能。
         

1.2手册

在工作站下输入mgcdocs &命令,就可阅读Calibre的所有手册。

1.3几个常用的缩写命令

1、SVRF---Standard Verification Rule Format(标准的检查文件)
2、RVE---Results Viewing Environment(显示结果用的环境窗口)
3、SVDB---Standard Verification Database (LVS results)
4、DRC---Design Rule Checking
5、LVS---Layout Versus Schematic
6、ERC---Electrical Rule Checking

第二章Calibre DRC

2.1数据准备

完成CalbireDRC需要的数据有版图数据和执行DRC检查的命令文(Runset)。版图数据支持GDSII、CIF、BINARY、ASCII 格式。

2.2流程图

image.png
         

2.3 DRC Runset File

1 基本控制,原有DRACULA的file可以用drac_cvt  sourcefile  targetfile命令来转换。

(1)Calibre是一个“Edge-Based”Tool,默认错误的显示是边

image.png

(2)DRC 检查的结果有三种控制 Euclidean(default)、Square、Opposite。

image.png

(3)常用的几条检查规则,具体可阅读Calibre的手册

(a)Internal(内边对内边)用来检查 Width、Overlap;

(b)External(外边对外边)用来检查 Space、Notch;

(c)Enclosure(内边对外边)

image.png

2 一般的DRC检查文件包含以下几个部分:

(1)运行设置,设置GDS的位置,结果文件放的位置等;

(2)层次定义,定义输入的层次;

(3)层次运算,产生运算需要的一些中间层次;

(4)规则检查,具体对每条规则的检查;

(5)选择控制,可以只检查某几条规则或者只检查某个单元。

3 一个简单的Rule File,“//”后面为注释

image.png
image.png
image.png
image.png

2.4用commond line 来运行Calibre DRC检查

(1)先必须有一个完整的规则检查文件,必须包含运行设置、层次定义、层次运算、规则检查等几部分。

(2)在UNIX的命令窗口里输入 calibre –hier –drc rulefile 。

(3)运行完后可在Cadence的版图窗口里的Calibre菜单点出start RVE ,然后就可进行DRC错误的修改了。

(4)也可输入 calibre –gui 调出calibre  图形界面,具体的运行方式类似Cadence环境下的模式。

2.5查看结果文件和改错

1、 drc 检查运行完毕后, 首先看drc_err.sum 文件,看有无错误。下面是一个例子:

前面是本次运行的一些信息:

CALIBRE:: DRC-F SUMMARY REPORT

Execution Date/Time: Fri Jan 2 20:10:46 2004

Calibre Version: v9.1_9.3 Fri Dec 13 15:05:27 PST 2002

Rule File Pathname: drc.rule

Rule File Title:

Layout System: GDS

Layout Path(s): test_nand3.gds

Layout Primary Cell: test_nand3

Current Directory: /export/home/project/cpu863/LVStest/calibre/drc/test

User Name: cpu863

Maximum Results/RuleCheck: 1000

Maximum Result Vertices: 4096

DRC Results Database: drc.out (ASCII)

Layout Depth: ALL

Text Depth: PRIMARY

Summary Report File: drc_err.sum (REPLACE)

Geometry Flagging: ACUTE = YES SKEW = YES OFFGRID = NO

NONSIMPLE POLYGON = YES NONSIMPLE PATH = NO

CheckText Mapping: COMMENT TEXT + RULE FILE INFORMATION

Layers: MEMORY-BASED

Keep Empty Checks: YES

image.png
image.png
image.png

也包含了检查的错误信息,该数据库主要是被后面的RVE 来调用的。然后要根据错误去版图中相应的位置改,Calibre 提供了良好的RVE(Result View Enviroment)界面,它能直接调用DRC 或者LVS 检查后的结果数据库,图形化很直观地显示错误所在,并且可以调用版图工具如Virtuoso,直接在Virtuoso 中快速定位错误位置。

2、用RVE 查看结果和改错

RVE(Result View Enviroment)是Calibre 自带的看验证结果的集成工具。启动方式为:

calibre –rve database

database 为DRC 或LVS 检查结果的数据库,这里是drc_err :

calibre -rve drc_err

激活后界面如图1

可见左边显示DRC 错误种类和数目,右边显示坐标位置,下面是对该Rule 的解释。清晰的界面,方便的操作能帮助用户快速找到错误和修改。RVE 能调用很多版图工具,把错误直接反映在版图位置上,见菜单Setup —— > Layout , 这里可以设置调用的版图工具。具体配置方法见在线帮助中Calibre 与其他工具的接口。在Cadence的Virtuoso 中集成了Calibre 以后,Virtuoso 的菜单中会多出Calibre 的菜单,如:即可以直接从Virtuoso 中调用图形化的DRC, LVS 和RVE,显得十分方便。点击Start RVE , 选择数据库名称,同样可以得到同图1 一样的界面,这时RVE 已经和版图工具集成在一起,可以在RVE 中点击一些错误坐标,Virtuoso 中立刻会显示错误的位置,如图3:

这里点击M1 小于最小面积的错误中的第1 个错误点:右边坐标红色下划线的(-1.96 ,3.97 ) , 在版图工具中会立刻高亮显示位置,如图4:

因此改错起来十分方便。可以在RVE 菜单View ――> By Check , RVE 左边会显示出Check 每条rule 的结果,见图5:绿色的表示检查该rule 无误。而且利用File 菜单中可以方便地打开DRC 结果报告、DRC Runset 等,如图6:

第三章 Calibre LVS

3.1数据准备

需要的数据为版图数据、电路图数据和runset 文件。Calibre 把电路图网表的部分叫SOURCE。SOURCE 部分要求的网表格式为标准spice 格式或者Calibre自身的一种类似spice 的格式。Calibre 有一种把verilog 转为自身类spice 格式的功能,叫v2lvs,下面先介绍v2lvs:v2lvs 能够把verilog 网表和相对应的spice 库、verilog 子库转成Calibre LVS 用到的电路图SOURCE 网表,其功能如图:

image.png
转换的原理是verilog 网表根据verilog 子库对元件端口的定义,去spice 子库找同样名称和端口的元件,然后进行网表和格式上的替换。因此v2lvs 转类spice 网表时,需要verilog 网表、spice 库、verilog 子库描述(可选),其命令格式如下:

v2lvs –v verilog_file –o spice_like_file [-l verilog_lib_file ] [-lsp spice_lib_file]

[-lsr spice_lib_file] [-s spice_lib_file] [-s0 groundnet] [-s1 powernet] [-sk] [-i]

-v 后面接verilog 文件名称;-o 为输出类spice 格式文件;-l 是verilog 子库描述;-lsp

接spice 库网表,p 是pin 模式,即不允许有数组类的verilog 端口(比如PA[3]、PA[2]、

PA[1]、PA[0])出现;-lsr与-lsp 意义同,不过pin 是range 模式,即可以接受verilog

的数组端口;与-lsp,-lsr 不同的是,-s 是只是让转出文件在前面INCLUDE 这些spice子库,而不会读它们;-s0 , -s1 为对verilog 中1’b0, 1’b1 的电源网络取代;-sk 指允许多组复合电源,不仅仅是一对全局电源VDD,VSS;-i 指输出文件采用spice 通用的pin 格式,没有$引导,便于仿真。常见的例子如下:

v2lvs –v top_design.hv –o top_design.sp –s0 VSS –s1 VDD –sk –l pll_risc.v

-l cache_core.v –l pad.v –l std.v -lsr pll_risc.sp –lsr cache_try_new.sp

–lsp std.sp -lsp pad.sp -s pll_risc.sp –s cache_try_new.sp –s std.sp –s pad.sp

根据几个子模块的情况,转出整个芯片的LVS 网表。

实际上,verilog 子库并不是都需要的,v2lvs 在转spice 网表的时候,是根据verilog 子库中元件端口和spice 子库中的元件端口名称对应关系来转的。如果在verilog 网表中没有数组端口,则该元件端口名称在spice 子库网表中元件的端口名称中也是唯一的标识,因此不会转错。但是对于数组端口(如PA[31:0]),如果没有verilog 子库对模块的端口定义,v2lvs 按照缺省的从高位到低位的方式转出端口对应关系,因此会出错。因此对于有数组端口的verilog 网表,一定要求有verilog子库网表。上面的例子可以简化为:

v2lvs –v top_design.hv –o top_design.sp –s0 VSS –s1 VDD –sk -l

pll_risc.v –l cache_core.v -lsr pll_ric.sp -lsr cache_try_new.sp -lsp

std.sp –lsp pad.sp -s pll_risc.sp –s cache_try_new.sp –s std.sp –spad.sp

3.2  LVS 流程

从下面的流程中可看出,Calibre LVS都先把版图提取出SPICE格式的网表来,实际上Calibre LVS比对的是两个SPICE网表。

image.png

3.3一个简单的LVS Runset文件

image.png
image.png
image.png
         

3.4  Runset文件里器件的定义

器件定义的一般格式

DEVICE  element_name [(model_name)] device_layer {pin_layer} [property_spectification]

Example:

image.png

3.5用commond line 来运行Calibre LVS检查

(1)先必须有一个完整的规则检查文件,必须包含运行设置、层次定义、层次运算、器件定义等几部分。

(2)建一个批处理命令比如叫run_lvs,内容为

image.png

(3)前面rm的目的是每次清空LVS Database目录,命令中topcell 为版图的顶层单元名。

(4)然后每次运行这个批处理命令就可以了,在Unix命令行下输入 ./run_lvs命令就可。运行完后可以到存放结果文件的目录里看Report File,还可以在版图里用RVE调LVS Database进行Debug

(5)hcell_file的格式如下

image.png
可见单元名可以1 VS N 或者 N VS 1 ,但是不要出现 M VS N 的情况。

3.6 查看结果文件及改错

(1)打开LVS结果文件,下面是个实例:

image.png

可见总的比较结果是不正确,错误有5 种:不同网络、不同元件个数、连接错误、不同元件类型、属性错误,CELL SUMMARY 里面有Layout 和Source 的TOPCELL 不匹配。然后直接翻页到文件的后面,看到

image.png

这里列出了匹配的统计情况(同dracula lvspr.lvs 的最后),可以看见SOURCE 和LAYOUT 匹配了多少,各有多少没有匹配,错在哪种单元上面等,这里可以看出共有10 个layout 单元和16 个source 单元没有匹配。下面是管子等删减的情况统计:

image.png

下面是顶层端口对应情况,这个很重要:

image.png

如果Ports 部分没有出现顶层模块的所有端口, 则肯定会导致整个比较的失败,因此如果端口方面信息错误的话, 应该去查一下版图抽取的时候是否出了问题,可以去看TOPCELL.sp 和TOPCELL.rep.ext。注意:Ports 报告的数目和LVS Report MAXIMUM number 的设置数据有关,最好使number 大于顶层的端口数目。下面是具体详细的连接信息。如果发现端口基本正确,可以直接到文件的前面看详细的 Error 信息。CELL SUMMARY 下面是LVS PARAMETERS 部分,即回放LVS 比较的所有选项设置:

看TOPCELL.rep 的方法是:先看OVERALL COMPARISON RESULTS,看总体比较是否正确,如果不对,看错误的类型;然后去文件后面看INFORMATION AND WARNINGS , 看具体元器件匹配的情况, 尤其是下面的Initial Correspondence Points Ports 中顶层端口匹配的情况,如果端口没有匹配好,去查版图抽取的情况;如果出现很多大量的管子不匹配,请检查电源网络是否有开路,短路现象,同时可以设置LVS Recongnize gates 和LVS Reduce split gates 为yes 再试一次(即允许pin 交换和删减复杂门);最后可以回到文件开头看INITIAL NUMBERS OF OBJECTS 和NUMBERS OF OBJECTS AFTER TRANSFORMATION , 以及具体的INCORRECT NETS , INCORRECT INSTANCES,PROPERTY ERRORS 信息,在版图和电路图上找到相对应的地方进行检查。

注意:对于短路现象,则Layout 中的网络数目必然少于Source 中的,并且出现Layout 中几个网络对应与Source 中的一个网络的信息;对于开路,Layout 中的网络数目必然大于Source 中的,且Source 中的一个网络可以对应与Layout 中的几个网络。

3.7用RVE看结果及改错

与DRC 一样在运行目录下激活RVE 或者在Virtuoso 中Start RVE :

calibre -rve svdb

svdb 是LVS Runset 中MASK SVDB DIRECTORY "svdb" QUERY 中所确定的数据库名称,LVS 所有信息(包括版图抽取)都存放在该数据库。

当用RVE窗口来Debug时,在版图的Calibre菜单下的Setup 的RVE的设置里选中Edit-in-place while highlighting , 在Layout cells 的命令行里输入版图库的名称,在Schematic cells 的命令行里输入逻辑库的名称。

RVE激活后,打开窗口如图7

可以看见被Query 的Cell 叫cache_core,即本设计的TOPCELL。RVE 的左边一栏是:输入文件:Runset 文件、SOURCE 文件;输出文件:Layout 网表、抽取报告、LVS 比较报告、ERC 电气检查结果。这些都可以用鼠标单击即可打开,如下面的Runset 文件:

同样可以点击打开Source Netlist:

可见SOURCE 的网表的层次十分清楚,这都很有利于后面的对应到版图和改错。打开LAYOUT 网表:

Layout 的网表层次关系也十分清楚,这些都有利于理清版图的层次。抽取版图的信息报告(TOPCELL.rep.ext)如下:

LVS 比较的结果报告(TOPCELL.rep)如下:

RVE 的右边一栏(见图7)是错误的列表,每种错误类型(Discrepancy)和具体错误的个数;下面一栏是具体某个错误的详细信息,比如座标位置。错误的详细信息已经高亮度显示(黄色,蓝色,绿色),右键点击左边Layout Name 栏的错误点,选Zoom to Point,如图:

在Virtuoso 中会立刻高亮显示该处的位置。这样每个错误都可以直接定位到版图上,改起来很方便。同时还可以选上图的Highlight Closeset,可以高亮附近的网络和器件。更为巧妙的是,图7 下面Source Name 栏相对应的错误点也可以直接在版图工具中显示,右键点Source Name 对应的错误点,选Highlight Net,如图15:

Calibre 会打开新的Virtuoso 窗口,如图16:

然后在新打开的窗口高亮该网络:

这样很方便Discrepancy 中Layout 与Source 具体位置的对比,便于及时找到错误。对于图10 中Layout Netlist 中的每一个网络名称和元件,都可以直接在Layout Netlist窗口中单击该名称,在Virtuoso 中会立刻显示,就像超链接一样,见图18:

图18 询问用户是否现在显示该网络或者元件,选Yes , Virtuoso 中会高亮该网络或器件。

这也很容易理解,因为Layout Netlist 本来就是Calibre 根据Runset 规定的层次抽取出来的,因此每个网络或者元件,数据库中都有记录。对于图9 的Source Netlist ,同样可以用类似的方法点击网络或元件(只对顶层模块),来在版图工具中显示。因此利用RVE 读入LVS 的结果数据库把电路图网表,版图网表,LVS 比较结果紧密地联系起来,集成在非常方便的图形工具中,用超链接的方式快速找到每个节点,每个器件与版图的对应关系,又凭借着电路图网表窗口和版图网表窗口良好的层次化结构,因此能很快的找到错误的所在。这也是Calibre RVE 最出色的方面之一。

END

作者:志芯编辑
文章来源:志芯

推荐阅读

更多IC设计干货请关注IC设计专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。
推荐阅读
关注数
20187
内容数
1307
主要交流IC以及SoC设计流程相关的技术和知识
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息