LVS的启动方式
与DRC一样,LVS也有两种启动方式:
方式一
calibre -gui -lvs
方式二
第一步:在calibre中的lvs文件夹下面 calibredrv
第二步:File-->Open Layout Files,然后把Merge之后的GDS文件加进去即可。
第三步:Verification --> Run nmLVS,就打开了LVS的GUI操作界面(同方式一的结果一样)
Load Runset File窗口是来调用运行LVS的基本设置文件的,该文件主要记录的是Rule文件的位置,程序运行以及结果保存的位置。
其中:
Rules:设置LVS规则检查文件
Inputs:设置输入的GDS文件
Outputs:设置输出的LVS文件
Run_Control:设置一些LVS的控制选项
Transcript:LVS检查过程的log显示
Run LVS:运行LVS检查
Start RVE:开启RVE查看运行的结果
---05/13 此处只是介绍了calibre的启动以及很简单的介绍,本文将持续更新。。。。。
------------------------------------------------------------------------------------------------------------------
原文链接:https://blog.csdn.net/LEBRON599/article/details/138821632
------------------------------------------------------------------------------------------------------------------
---05/14 继续学习LVS
还未对LVS做基本的介绍:LVS(Layout Versus Schemetic)。版图原理图一致性检查。
数字IC:对应的原理图是电路的门级网表,我们要看的是PR工具实现的物理版图是否与其一致。
模拟/射频IC:是根据原理图绘制版图,版图和原理图要一致。
工具:Calibre(Mentor),ICV(Synopsys)
LVS的简要流程:
首先要准备的三个文件:
Completed Source:就是原理图。手工绘制的原理图(对于模拟IC)/布局布线工具吐出的PR后的门级网表(对于数字IC)。
Completed Layout:完整的版图,此处需注意“完整”,也就是Merge之后的。(为什么要Merge之后的,后续文章会解答)---此处指数字IC,后续内容不特殊说明都指数字IC中的。
Rule File:Foundary提供的一个规则文件。
把这三个文件输入到Calibre里面。同样也会吐出来三个文件(在一般情况下是这三个文件,设置的Mode不同情况会有所不同)
ASCII Report:LVS的report,一个文本文件
Extracted netlist:从GDS里面抽取出的网表文件
LVS Results Database:svdb文件,可以用Calibre的RVE打开这个文件。作用:可以到很方便的到版图里面去定位错误
实际上,Calibre LVS比对的是两个SPICE网表。版图里面抽出来的SPICE网表(Completed Layout)和输入的原理图的SPICE网表(Completed Source)的对比,看两者是否一致。
下面开始系统讲解整个流程
一 数据准备
开始LVS之前,要准备的文件:
Completed Layout---完整的版图GDS文件(1)-(2),
Completed Source----电路原理图/PR工具导出的门级网表(3)-(5),
Rule File----Foundary提供的Calibre LVS规则文件(6)。
(1)导出版图的GDS文件
在输出GDSII文件之前,为方便后边导入Virtuoso用Calibre做LVS,最好给整个设计的输入输出端口打上Label。
为什么要打Label?对门级网表而言,很容易知道哪些是输入,哪些是输出(学过Verilog的应该都明白,写Verilog时会指定input和output,很容易分辨)。但是对于版图的GDS文件,则不好识别它的输入输出端口,因为GDS文件不像Verilog那样指明input和Output。所以我们在输入输出端口上打Label,告诉工具哪些是输入哪些是输出。
那应该怎样打Label?若设计是模块级别(Block Level),没有IO和PAD,那么可以直接打在Port或者Terminal上,一般情况下,假设该Terminal是M4层,那么我们就用对应的TXT层去打,即此处用M4TXT去打,一般工艺库都会有这样的层次。(当然也可以不打,因为可以在PR工具中做一些设置即可以让导出的GDS在Terminal上有text)。若设计是Chip级别的,那么需要打在PAD上面。
(2)版图的合并与编辑
(2.1)版图的合并
布局布线(PR)的时候并不会用完整的版图去做,因为完整的GDS里面的层次非常多,直接用完整的GDS做PR会非常耗内存,时间。一般情况下,用抽象的层次,只提取其中的某些层次进行PR,这样速度会大大加快。这种情况下,布局布线工具吐出的GDS就不是完整的GDS,里面会缺失某些东西(因为没用完整的GDS进行PR),这样的GDS不能直接交给Foundary进行生产,同理也不能去做signoff的DRC/LVS等的检查。
CEL View | 版图物理数据 | 是一个完整的GDS |
FRAM View | 抽象化的版图物理信息(只有单元大小,端口名称,端口位置等简单的PR所需的物理信息) | 是一个用于PR的一个抽象的,简化的GDS |
以std cell为例(CEL View的层次更加丰富)
CEL View:
FRAM View:
解决办法:
进行Layout Merge的操作,把如图所示的macro,IO pad,std cell等给替换掉,替换成一个完整的GDS,这样的操作就叫Layout Merge。其本质是一个GDS进行替换的过程。
没有Merge之前的层次:
Merge之后的层次:
工具:
Virtuoso:需要手动一个一个的导入,效率低,容易出错
Calibredrv:更高级的工具,无需手动一个个导入,只需要一个命令
Merge的位置:物理验证之前,布局布线之后
使用Calibredrv进行版图的合并:
(2.1.1)GUI File-Merge
(2.1.2)calibredrv -shell的方式
layout filemerge -in xxxxx.gds -in xxxxx.gds -in xxxxx.gds -out ../xxxx/xxxxx.gds(导入三个gds,对他们做layout merge)
(2.1.3)-shell的方式会占据终端,可以以另一种不占据终端的方式:
calibredrv -a layout filemerge -in xxxxx.gds -indir xxxxx/ -out ../xxxx/xxxxx.gds -topcell top
-a | means the following lines is DESIGNrev Tcl command |
layout filemerge | DESIGNrev's merge command |
-in | path to input data |
-indir | take all files inside the directory as input |
-out | path to output data |
-topcell | output topcell |
特别说明:-indir,会把这个文件里面所有的gds都作为input的gds,非常方便,我们可以把所有的cell都放在这个路径下,比如把所有的macro的gds都放在这下面,就不用对各个macro依次进行-in的重复操作。
可以将上述内容写出Makefile的形式,这样需要运行的时候可以直接make target。如:
LayoutMerge:
calibredrv -a layout filemerge -in xxxxx.gds -in xxxxx.gds -in xxxxx.gds -out ../xxxx/xxxxx.gds
这样一来可以直接make LayoutMerge进行此操作。
(2.2)版图的编辑
对版图进行Merge之后能不能直接进行LVS的检查?答案是不行的,我们还需要对版图进行一定的编辑。那么我们需要做哪些编辑呢?针对后续是要做DRC还是LVS分情况讨论。
第一种,如果要对版图做DRC,我们需要在版图外部打上Border层。下图所示,蓝色的就是Border层,需要用Border层对整个design覆盖起来,并且也不是随意打的,比如Border的边界距Metal的距离等等。具体的见design rule的描述。
第二种,如果要对版图做LVS的检查,如果之前(ICC或innovus中)没对PAD或者pin打Label,那么就需要使用Virtuoso或者Calibredrv打Label。
除此之外还需要对IO上的FP和FPB环打上Label。
以上对版图进行编辑之后,就可以进行LVS了。
(3)导出Verilog门级网表
需要在布局布线后导出整个Design的Verilog门级网表,用于静态时序分析,后仿真和LVS。并且做LVS的时候我们会把该门级网表或者是原理图当成Golden的Design,如果有问题就去修改版图,而不会怀疑是门级网表的问题。整个Design网表里面区分大小写,另外导出网表的时候需要用hier导出。
--------------------------------------------------------------------------------------------------------------------------
插一段内容:那么我们如何去检查门级网表的正确性呢?答案是我们会通过仿真,静态时序分析,以及形式验证去验证门级网表是否正确。
------------------------------------------------------------------------------------------------------------------------------
导出门级网表的注意事项:
----什么样的Cell需要导出?
如果该Cell里面有mos管,那么该Cell一定要导出。
小tips:怎样才能形成mos管:当栅(GT)穿过有源区(AA)就形成mos管,没有穿过则不形成。如下第一张图穿过了,就形成mos管,第二张图没穿过,就不形成mos管。第三张图(corner filler),一样没有穿过,也不形成mos管
----什么Cell不能导出来?
corner_pad_cells,pad_filler_cells,core_filler_cells,PAD不能导出来。因为它们里面没有MOS管,如果导出来,后面做LVS的时候会有问题。其实还有一层原因,是因为上述的cells在SPICE网表里没有被定义。而LVS实际上不就是比较的SPICE网表嘛,都没有被定义,导出来怎么比?
因为资料有限,所以此处仅对ICC的进行解析,后面会继续持续更新,加上innovus的。但是两者最多也只是形式上的不同,原理其实都是一样的。注意下面是导出用于LVS的Verilog文件的命令,若是用于STA或后仿真,需要使用的命令是不一样的
下面依次进行解析:(\是换行的意思,换行后便于查看)
net都是以wire的形式进行导出的,所以需要做一些声明。比如:wire abc,就是对名为abc的net进行声明。
默认情况下write_verilog命令会将整个design里面的所有Cell都吐出来。也就是所有Cell都会写到门级网表里面,但是实际情况下,某些Cell是不希望被写到门级网表里面的。(见上方----什么Cell不能导出来?)
-no_core_filler_cells上面已经解析过了,而且默认情况下是不导出的,但是实际上存在一些core_filler(DECAP)(是存在mos管需要被导出的,这里便出现了矛盾,为了解决,我们要将这些需要被导出的放在“$FILLER_CELL_WITH_METAL”(意思就是filler里面有metal)里面,然后force它给output出来。physical only cell(Well Tap,Endcap,Decap)介绍-CSDN博客
那么既然有上一条那样的强制导出(force_output),那么相应的也应该有强制不导出(force_no_output),我们可以把强制不导出的放在列表里面,如图所示的“PADI30RN PADO30RN FILLTIE_8TH40”。我们把不想导出的放在里面即可。
这一句代表的是导出的Verilog门级网表的路径。后面加上".lvs.v"代表这是做LVS的门级网表即可。
于05/14
----------------------------------------------------------------------------------------------------------
05/15 又又又开始了,好累,但是还得继续啊。
-----------------------------------------------------------------------------------------------------------
(4)将Verilog门级网表转为Spice网表(v2lvs)
Calibre把电路原理图/门级网表的部分叫SOURCE。SOURCE部分要求的网表格式为标准Spice格式或者Calibre自身的一种类似Spice的格式。Calibre有一个工具v2lvs可以将门级Verilog网表转换成Spice网表。
v2lvs命令所在的位置:
v2lvs能够把Verilog网表和相应的Spice库,Verilog子库转成Calibre LVS用到的电路图SOURCE网表,其功能图:
转换的原理:将Verilog门级网表根据Verilog子库对元件端口的定义,去Spice子库找同样名称和端口的元件,然后进行网表和格式上的替换。因此v2lvs转类Spice网表时,需要Verilog网表,Spice库,Verilog子库(可选项,不是必须的,其原因下文有解释)。
命令格式:
-v 后面接Verilog文件名称
-o 为输出类Spice格式文件
-l 是verilog子库描述
-lsp 接Spice库网表,p是pin模式,即不允许有数组类的Verilog端口出现(呈现出的是这样的端口:PA[3],PA[2],PA[1],PA[0])。
-lsr 于-lsp意义相同,不过pin是range模式,即可接受Verilog的数组端口(如:PA[31:0])。当端口为数组时,就必须要加Verilog子库,这也就是为什么Verilog子库是可选的。
-s 只是转出文件在前面INCLUDE这些Spice子库,而不会读它们
-s0,-s1为对Verilog中1’b0,1‘b1的电源网络取代,后面需要加上电源或者地的名称
-sk指允许多组复合电源,不仅仅是一对全局电源VDD,VSS
-i 指输出文件采用Spice通用的pin格式,没有$引导,便于仿真。
常见的例子:
实际上,Verilog子库并不是都需要的,v2lvs在转spice网表的时候,是根据verilog子库中元件端口和Spice子库中的元件端口名称对应关系来转的。如果Verilog网表中没有数组端口,则该元件端口名称在spice子库网表中元件的端口名称也是唯一的标识,因此不会转错。但是对有数组端口的Verilog网表,一定要求有Verilog子库网表,因此,上面的例子可简化为:
参考命令(一般情况下用的)-----【-v -o -lsp】
(5)Spice网表的修改
生成Spice网表之后,在做LVS之前,我们还需要根据情况对网表进行一定的修改。修改内容主要有以下三项:
(5.1)Include一些Spice子库
如果生成的Spice网表中没有Include里面调用的一些元件所属的库(std cell的库,IO的库,如果有macro那么还有macro的库等),那么LVS会报错,我们需要将它们INCLUDE到整个Design的Spice网表中。eg(注意此处的命令:“.INCLDUE ”--不要少了那一个点)
(5.2)电源与地的修改
有时两家公司的电源都是VDD,但是一家的地是VSS,一家的是GND。所以在做LVS时,在保证VSS和GND是连接的,那么可以通过将Std cell的cdl网表中的GND全部改为VSS来解决。
(5.3)添加FP FPB端口的定义
我们之前在版图的IO内部的FP,FPB环上为它们打了Label,相应的,也需要在转出来的Spice网表上加上它们的定义(因为IO的网表内声明了这个的端口)
什么是FP,FPB?IO内的FP,FPB环是指什么-CSDN博客
(6)Rule File--对LVS规则文件的解读与修改
解读:
(6.1)Total Metal:总的Metal层次,这里一定是总的层次,见例子1P8M2TM的解释
1P8M2TM(一层Poly,8层Metal,其中2层是Top Metal,注意此处是一共8层,而不是底层8层,顶层2层)。所以对1P8M2TM,它的Total Metal是8。下图中用到Metal10-4,一共7层。而图中是8层,图应该改动过,7层才是对的。
(6.2)TOP_Metal_Num double/single
定义顶层金属有几层,有两个选项,double与single。由于用的是1P8M2TM,所以填double
(6.3)TM_METAL_TYPE 0/1
顶层金属的类型,也有两个选项0/1,若顶层金属用的是TM2,此处就填0,是MTT2,就填1.
TM2与MTT2的区别:它们的width和thickness都是不一样的,根据流片工艺进行选择。
(6.4)对ALPA层的厚度进行设置。
----------------------------- 待补齐
下班下班!!!!!
-05/15
-----------------------------------------------------------------------------------------------------------------------------
05/20 因为期末考试停更了几天,继续来学LVS的整个流程
二 Calibre LVS详细流程
(1)LVS流程图(DRC和LVS都属于物理上sign off 的一个流程)
(2)详细流程
(2.1) calibredrv 打开Merge后的gds
输入命令后的GUI界面:
(2)点击Verification--Run nmLVS就可以调出Run LVS的界面(做LVS之前一定要将版图给编辑好----如何Lab是否打好,FP和FPB环是否打上)
(Load Runset File是跑LVS的配置文件,当我们第一次跑LVS的时候,这里是空的,那它有什么用呢?比如说,当我们跑完一次LVS之后,我们可以把Rules,input,output等写在一个文件里面,这样下一次跑LVS的时候可以直接Load这个文件,可以直接运行)
然后我们可以看到左侧有红色和绿色的两种颜色的选项,其中红色的是必须要做的,绿色的是代表可选的。
(一)Rules:
LVS Rules Files:就是LVS的规则文件,该文件由Foundary来提供
LVS Run Directory:就是指定要在什么样的路径下去Run这个LVS(这里建议专门建一个文件去跑DRC和LVS,因为跑的过程中会生成很多的文件)
input:
(二) Inputs
Inputs:顾名思义,就是我们需要提供的文件,layout和netlist。一个是完整的版图,一个是完整的网表。
在跑LVS的时候有几种模式需要进行检查
Hierarchical:层次性的检查,会先对底层的cell进行检查,然后对顶层的进行检查
Flat:会将整个Design打散,都打成管级的,然后对整个Design做管级的LVS,这种模式的优点:会LVS的更彻底一点,缺点:非常慢。
(Hierarchical和Flat是最常用的两种模式,在这两种模式下进行切换工作,能提升debug的效率)
然后step就是一下三种(Layout VS Netlist)(Netlist VS Netlist)( Netlist的提取---就是从版图里面提取出一个网表)
除此之外,还需要设置一些输入的信息,下图红框所示,我们下面挨个解读
layout:
直接选择GDSII,然后选择我们做好Merge之后的GDS
若我们正打开了layout,就可以直接从界面去提取版图,可以勾选-Export from layout viewer。这样工具会从版图编辑工具中去抽界面的GDS,抽出来就是GDSII格式。
然后我们还需要指定对哪个Cell做LVS的检查。填在Top Cell里面即可。
此外,在herarchical mode 下还会从layout里面抽出一个网表,就是这里的Layout Netlist。
Netlist:
Netlist默认的就是SPICE格式
对于模拟电路,我们可以点击--Export from schematic viewer,就是从电路原理图中抽网表
Spice Files:就是选择我们生成的spice格式的文件(即使用v2lvs工具后生成的文件)
Top cell:我们还需要指定Top cell,也就是我们顶层design的名字。
H-cells
可以提高LVS的速度,不是必选项(即不影响LVS的结果),且只能在Hierarchial模式下运行,在Flat mode下无法运行。所以对于Hierarchical mode,为了加快验证的速度,可以采用H-Cells来匹配。
点击Match cells by names。然后H-cells analysis
然后就会得到一些结果,以红线为例,红线左边是软件分析的结果,右边是对应的layout cell name和netlist cell name。save h-cells文件前,最好自己检察一遍name是否对应正确。
然后就可以save H-Cells。
如果有H-Cells就可以点击--Use H-Cells file,选择该H-cells file了。
(三)Outputs
然后我们来看Outputs:
output就是设置LVS之后的文件都吐在哪,都吐哪些文件。
LVS Repoets File:就是LVS之后的report文件存在哪个目录下。(此处建议不论对DRC还是LVS都专门mkdir一个名为report的file专门用于report文件的存储)
--View Report after LVS finished:顾名思义,就是做完LVS之后是否打开report文件
---Create SVDB Database.此外,还会生成一个db文件---SVDB Database格式的文件,此处建议都要勾选,因为勾选后发现一个错误,可以通过StarRVE这个工具打开SVDB Database格式的文件得到一个图形化的界面的LVS的结果。
---Star RVE after LVS finished:会在做完LVS后通过Star RVE的方式打开LVS的结果
关于RVE --DRC和LVS的区别
DRC和LVS的db文件不同,DRC的db文件就是reports文件,LVS的db文件是SVDB文件
-----DRC:(calibre -rve reports file)通过reports文件打开
DRC的结果:
----LVS:calibre -rve svdb 通过svdb文件打开
LVS的结果:
(四)LVS Options
然后是LVS Options(默认情况下不会勾选,现在我们勾选它)
里面有很多项,下面依次来介绍
supply,就是供电电源,地
第一项---Abort LVS on power/ground net errors 一定要勾选。它是设置一些和电源地有关的东西。该项的意思就是在做LVS的过程中,会对电源地网络做一些电源地的抽取,在抽取的过程中如果遇到电源地short(短路)的一些问题就终止LVS,不再继续往下跑了。这是因为电源地的问题都很关键,如果遇到问题,就不用再往下跑,而是首先去修电源地的问题。
--Power nets
--Ground nets
比如我们需要设置的Power nets和Ground nets分别是VDD和VSS,那我们就在该处填上VDD和VSS即可。
reports(就是做LVS的过程中关于reports的一些设置)
LVS Report Options
其中最常见的选项就是S=Report detailed Sconnect conflicts。就是一些软链接的问题。默认情况下,软链接的问题工具是不会报出的。所以需要勾选。然后点击OK。
然后是Max.discrepancles printed in report:最大错误的个数
然后是Gates,逻辑门
其中有两项,Gate Recogntition(逻辑门的识别)和Filler Unused Device Options(就是过滤一些没有用的器件)
Gate Recogntition
里面有四个选项:(第四个几乎不使用)
Recognize all gates:就是识别所有的门(与非门,反相器,或非门,与非或门等)
Recognize simple gates:就是识别一些简单的门(反相器,与非门,或非门)
Turn off:就是关掉,不以门为单位进行比对。而是以单管作为LVS的比对单位
tips:如果选择 Recognize all gates,速度会很快,但是如果出现错误,不容易debug。一般用Turn off结合Flat模式,可以大大减少LVS错误的个数,从而方便查找错误。而Recognize all gates结合Hierarchical模式可以加快检查速度。设计中可以在这些选项之间互相切换,从而找到错误最少的情况进行Debug。
Filler Unused Device Options
就是过滤一些没有用的器件,这些器件是指版图中用到的一些dummy cell(可能在模拟版图的用的更多,是为了提高匹配性),这里的L和S是指从Layout还是从Schematic中去过滤。
接着就是short,就是一些短路
要想之后用工具对short进行分析,就需要勾选--Run short isolation
然后去定位short,有两个选项,是以layer还是以cell去定位short
然后是ERC,电器规则检查
(五)Run Control
再来就是Run Control,跑LVS控制的一些选项。
其中可以选择使用单线程还是多线程来跑,如果是正版软件,且核较多,可以使用多线程,因为多线程比较耗license,此外,勾选Hyperscale也可以加快跑的速度。
(六)Run LVS了
这样就可以Run LVS了(LVS的结果如图所示)
---05/20
对上述理论部分的简单实战内容请看:
数字IC后端小白学习日志---005 day(LVS的实战演示流程)-CSDN博客
数字IC后端小白学习日志---005 day(LVS的Lab实战流程)-CSDN博客
--------------------------------------------------------------------------------------------------------------------------
05/21
---开始了-------------------------------
版图中的短路(Short)问题是很关键的,我们要尽早的解决。下面就来分析:电源短路问题的定位、验证与解决。
Debug LVS的步骤及Instance对不上的原因
数字IC后端小白学习日志---006 day (分析Debug lVS的错误的步骤)-CSDN博客
今日的Short实战见文章
数字IC后端小白学习日志---006 day(实战Lab-解决Short问题)-CSDN博客
05/21结束结束
----------------------------------------------------------------------------------------------------------------------------