数字后端小白学习日志----LVS(持续更新版本-已更新至5月21)

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

-ameans the following lines is DESIGNrev Tcl command
layout filemergeDESIGNrev's merge command
-inpath to input data
-indirtake all files inside the directory as input
-outpath to output data
-topcelloutput 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。

IO内的FP,FPB环是指什么-CSDN博客

以上对版图进行编辑之后,就可以进行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结束结束

----------------------------------------------------------------------------------------------------------------------------

  • 22
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值