在前面的章节中已经学习了如何从网表(netlist)文件产生版图(layout),以及时序分析等等,在正式流片之前我们还必须作一些其他的工作,例如Design Rule Checking(DRC) 和Logic Versus Schematic(LVS)。其中,DRC是验证设计的几何规则的,它保证版图符合流片厂家的要求,可以保证版图在工艺线上确实可以做出来。事实上,如果不作这一步验证的话, 就有可能发生线条在光刻过程中被刻断等情况,从而导致流片失败。而LVS是把得到的版图和电路原理图进行比较,看它们在是否一致。
能做以上验证的EDA软件主要有mentor的calibre、Cadence的diva和dracula。这里只介绍dracula的使用方法。
DRC
DRC要验证的对象是版图,我们的版图一般是通过两种方法得到的。一种是用virtuoso等版图编辑工具手工绘制。这在模拟设计中较为普遍。另一种是用Cadence的SE等自动布局布线工具(APR)由网表文件自动产生。数字设计中由于电路规模较大且较容易实现计算机辅助设计,所以,版图多为APR产生。 版图文件是可以直接交给半导体加工工厂生产的。但是,在交付厂商之前必须做DRC 验证。因为,为了保证版图能正确制出,流片厂家会根据工艺定义很多的设计规则,只有版图满足厂家的所有的设计规则,才可能被正确的制出。一般说来,设计规则有很多,例如 最小间距、最小孔径等。不符合厂家提出的设计规则要求的版图在工艺线上是不可能被正确生产出来的。
以非门为例,我们制定了以下的规则: n阱(nwell):
n阱的最小宽度 4.8u 阱与阱之间的最小间距 1.8u ndiff 到nwell的最小间距 0.6u pdiff 到nwell的最小间距 1.8u pmos器件必须在nwell内
有源区 (active)
有源区的最小宽度 1.2u 有源区之间的最小间距 1.2u
多晶硅 (poly)
多晶硅的最小宽度 多晶硅之间的最小宽度 多晶硅与有源区的最小间距 多晶硅栅在场区上的最小露头
0.6u 0.6u 0.6u 0.6u
源、漏与栅的最小间距 0.6u
引线孔(contact)
引线孔的最小宽度 0.6u 引线孔之间的最小间距 0.9u
多晶硅覆盖引线孔的最小间距 0.3u metal1覆盖引线孔的最小间距 0.3u
金属1 (metal1)
metal1的最小宽度 1.2u metal1之间的最小间距 0.9u
金属2(metal2)
metal2的最小宽度 1.2u metal2之间的最小间距 1.2u metal2的最小凹槽深度 1.2u
通孔(via)
via的最小宽度 0.6u via之间的最小间距 0.9u via与contact 之间的最小间距 0.6u metal1 overlap(覆盖) via 的最小间距 0.3u metal2 overlap via 的最小间距 0.3u via 与 poly的最小间距 0.3u
先看一下Dracula的工作流程图。
用dracula做DRC,它的输入有两个,一个是版图文件,为GDSII或其他格式,另一个是规则文件(Rule File),Rule File告诉DRC工具怎样做DRC,这个文件十分重要,一般,由流片厂家提供,或者由designer根据流片厂家提供的版图几何规范自己写。
要做版图验证,必须要对各个工艺规则有一定了解。即便不是自己写规则文件,这也是必须的。因为验证结果报错以后,不了解工艺规则就会不知道该怎么去改版图。而如果自己写规
则文件,就对工艺规则的掌握有更高要求了。
对一个dracula DRC的使用者来说,主要有以下几个部分的知识要掌握。第一,工艺规则。要求对芯片在半导体加工工厂里的制造工艺流程有一定程度的了解。第二,rule文件的编写和编辑。第三,dracula输出的DRC信息的使用。其中,第一部分的知识有专门课程讲解,这里将不再详细叙述。以后的部分将主要着重讲解后面两点。
关于rule文件的编写
首先讲述一下rule文件在dracula使用中的作用。Rule文件是一个用unix下的文本编辑工具,例如vi,text editor,ed,emacs等等编写的一个文本文件。它的作用是描述让dracula作什么,例如,读入哪些层,对这些层之间作哪些逻辑运算产生逻辑层,以及在什么样的情况下给出错误提示。可见,rule文件是非常重要的,但是又是非常难写的,因为里面牵涉到很多具体而细致的设计规则,很难写得非常全面。而且,里面的很多参数是工艺相关的。也就是说,不同的半导体加工工厂,要求的设计规则是不同的。所以,很多情况下,规则文件是由半导体加工工厂提供的。规则文件的内容将在后面内容详细介绍。写好规则文件以后还要对它进行处理。有个叫做PDRACULA的工具就是对规则文件进行处理的。它首先检查rule文件有没有语法错误,因为dracula 的rule文件有固定的语法格式。如果没有语法错误的话,PDRACULA就会把rule文件处理成一个脚本文件,这个脚本文件是可执行的。默认的文件名是jxrun.com。再执行这个脚本文件,就可以完成dracla的DRC验证工作。 先看一下rule文件的语法规则。
因为rule文件本身的作用比较单一,所以,语法也比较简单。 编写rule文件的难点不在于语法,而在于非常繁复的规则。由于半导体加工是一个非常
精密复杂的工作,所以与之相关的设计规则也就非常繁多细致。而且由于实际流片一次的费用非常昂贵,所以尽量要求一次流片成功。对后验证的要求也就非常严格。下面介绍一下rule文件的内部结构,并对各模块常用语句做解释。
规则文件通常包括如下几个部分:描述模块(Description Block)、输入层模块(Inputlayer
Block)、操作模块(Operation Block)。每一个模块都有一个标志模块开始的标志和一个用来标志模块结尾的标志(*END)。*END标志通常出现在该模块的最后一行。模块开始标志也由一个*引导,出现在模块的第一行。 描述模块定义了dracula运行的系统环境。它还定义了要被验证的电路。主要包括以下内容:运行模式、基本单元名、输入/输出设备、文件名、格式、图形比例元素、网格大小、输出记录文件、警告消息显示。
输入层模块把布局图的层名或层编号和Dracula的层名对应起来,并提供Dracula进行验证所需的其他关于层的信息。主要是:要输出的层、层名、掩膜顺序、要输出的层、文本层。
操作层定义要进行的操作和应用程序并且标出错误。它定义的操作类型有:逻辑、电气节点、缩放、参数、空间、ERC、DRC、LVS、LPE和PRE。 描述模块(DESCRIPTION BLOCK)常用的语句有: 【语句1】CNAMES-CSEN=YES/NO
这个语句定义了在所有包含层名和文本名的语句中,层名和文本名是否是大小写敏感的。如果仅仅要求定义文本的大小写敏感性,而不包括层名的大小写敏感性,就必须使用另一个语句:TNAMES-CSEN=YES/NO。如果定义CNAMES-CSEN=YES 那么就会把确切的名字和大小写发送到jxrun.com文件中,如果你定义SYSYTEM为CADENCE、CIF、EDGE或者EDIF,那么这将是默认的选择。如果定义CNAMES-CSEN=NO,那么所有的层名和文本都被转换为大写字母。对于定义SYSTEM为APPLE或GDSII,那么这将是默认的。 【语句2】CONVERT-DATABASE=YES/NO 这个语句用于把数据库由一种格式转换到另一种格式。当SYSTEM和SYSOUT语句的格式不一样的时候,就要用这个语句加以转化。这个语句仅仅改变格式,并不改变数据库里的单元的内容。当你使用这个语句的时候,规则文件可以不具备操作模块。另外要提到对不同格式的文件进行比较时,两者的输入文件的SCALE和RESOLUTION参数必须相同。
下面举个例子说明如何把Applicon格式的文件转化为GDSII格式。 *DESCRIPTION
SYSTEM=apple ;输入图形格式 SYSOUT=gds2 ;输出图形格式 OUTDISK=gds2out ;图形输出磁盘文件 PRIMARY=composite ;顶层单元名
INDISK=comp.apl ;图形输入磁盘文件 PRINTFILE=gdsprt ;显示文件名
SCALEIN=0.0000125 mic ;输入图形数据库比例 RESOLUTION=0.5 mic ;输入图形数据库数字单元 SCALEOUT=0.001 mic ;输出图形数据库数字单元 MODE =exec now ;执行模式 CONVERT=yes *INPUT-LAYER layer1=1 text =60 layer2=2 layer3=3 layer4=4 *END
再举例说明GDSII转化为APPLICON *DESCRIPTION SYSTEM=gds2 SYSOUT=apple OUTDISK=appleout PRIMARY=composite INDISK=comp.db PRINTFILE=applprt SCALEIN=0.001 mic RESOLUTION=0.25 mic SCALEOUT=0.0000125 mic MODE=exec now CONVERT=yes *INPUT-LAYER layer1=1 text =60 layer2=2 layer3=3 layer4=4
*END
【语句3】INDISK={filename}{directory-name}
指定包含布局图的输入文件,必须在描述模块中包含这个语句。filename是布局图的输入文件名。最大长度为128个字符。directory-name是包含数据库模块或者DFII的库的文件夹名。
【语句4】INDISK-FILE=filename
作用是指定包含数据库模块的路径和DFII的数据库的路径的文件。这个语句在你应用不只一个的数据库模块和DFII数据库的时候是必须要用的。
【语句5】LIBRARY=library-name
指定了包含了你的设计中用到的基本单元的数据库的路径。当选择SYSTEM=CADENCE的时候,这个语句是必须的。
【语句6】OUTDISK=filename
用于指定包含运行中发现的错误单元的输出文件。如果INDISK和OUTDISK是同样的,dracula就产生一个名字一样但是扩展名不一样的文件。加入你用相对或绝对路径指定一个输出文件MULTIPLE-DISK这个语句将产生一个存于那个路径的输出文件,如果这个路径存在的话。如果这个路径并不存在或者你没有指定,那么MULTIPLE-DISK语句将会决定文件的路径,并且把路径存在.log文件中。 【语句7】PRYMARY=cell-name
指定顶级单元名。这在描述模块中是一个必须要有的语句。 【语句8】RESOLUTION=step-size units
指定布局图的最小步长(网格)。所有的布线工序都以这个语句规定的步长的整数倍进行。假如你的布局图里包含比这个步长还要小的数据,那么这个语句将会把它垂直于网格截断。要想知道Dracula是否截断了某些数据,可以用FLAG-OFFGRID语句。RESOLUTION与SIZE和RELOCATE语句以及它们的取值有关。假如RESOLUTION的大小比SCALE的值小,那么PDRACULA就会产生一个警告信息,并且自动吧RESOLUTION的取值调整到
跟SCALE一样大。假如RESOLUTION的值不是一个整数,那么PDRACULA会发出一个警告信息,并且在验证中采用“真数验证”。 【语句9】SYSOUT=format treefile
指定CAD系统输出文件(OUTDISK)的格式,假如你想要一个同你定义的SYSTEM及SYSIN不同的格式。例如:SYSTEM=GDS2,SYSOUT=CIF,则输入为GDSII格式,而输出的错误文件为CIF格式的。这个语句需要一个由dracula产生的使用你需要的文件格式的文件,这个文件包含了基于缩放和物理单元的格式的信息。treefile指定一个从上次的运行产生的文件,该次运行必须指定与现在的SYSOUT和SCALEOUT相同的SYSTEM和SCALE的值。
下面举一个例子,这个例子输入一个GDSII的数据库,输出采用CIF格式。Dracula拷贝名为tree2100.dat的文件,这个文件是上次定义SYSTEM=CIF和SCALE=0.01MIC的情况下产生的。
SYSTEM=GDS2
SYSOUT= cif tree2100 ;磁盘文件名是 tree2100.dat
SCALE =0.001 MIC SCALEOUT=0.01 MIC
【语句10】TNAMES-CSEN=YES/NO
对所有包含文本名的语句规定了文本名的大小写属性,这些语句包括,但不仅仅是:POWER-NODE, GROUND-NODE, PULL-UP, PULL-DOWN, PROBE, SELECT LABEL, LCONNECT, ECONNECT。
【语句11】 WORK-DIR =directory-name
指定运行目录。dracula把任务产生的所有文件都放在这个目录或其子目录下。使用这个语句时必须填入全名。directory是一个目录或指定的逻辑名。默认的是当前目录。最大的语句行长度为128字符。不能一次从你的当前目录或默认目录运行多于一个的任务即使你使用不同的工作目录。即使dracula在工作目录运行,它还是利用默认目录里的文件运行的。这些文件一次只能运行一个任务。下列的文件是默认目录或当前工作目录里产生或需要的文件。当前工作目录包含INDISK、OUTDISK、和EDTEXT等文件,除非你指定路径名。 输入层模块(INPUT-LAYER BLOCK)的重要语句有: 【语句1】CONNECT-LAYER = layer1 layer2 ……
定义IC自底向上工艺的导体层。假如你在操作模块中使用CONNECT语句,你必须在输入层模块中使用CONNECT-LAYER语句。仅仅指定在CONNECT语句中出现的层(不包括接触的层)。可以在同一行中指定多个层名,也可以在不同的行指定。layer 指定在CONNECT语句中用到的层的掩膜顺序(不包括接触层)。底层的层在先,顶层的层在后。层名至少要有三个字符。
文本次序只有在CONNECT-LAYER和CONNECT语句中都出现的层才产生。 【语句二】CTEXT = text –layer layerPurpose {ATTACH = layer –name}
指定提供了HCELL文本的输入层号。ATTACH语句指定了CTEXT上的HCELL文本被连接到的输入层。
text-layer 布局图里的文本层的序号 layerPurpose 该层的目的,例如,绘制 layer-name 连接的层当中的一层的名字
【语句三】EXPORT layer –name
从输入数据库产生某些层并且把它们以与Dracula兼容的格式输出。可以用这个语句来把来自数个数据库的层联合起来,也可以对来自不同的数据库的层进行比较。EXPORT语句
可以保证dracula不会删掉那些指定的层,即使你在描述模块中使用了KEEPDATA=NO或者KEEPDATA=SMART语句。当使用EXPORT语句的时候,可以没有操作模块。在KEEPDATA=NO的情况下,可以使用EXPORT语句来指定任何的层名来保证处理器不会删掉这些层。因此你可以指定不准备删掉的层和文件。下面举例: *INPUT-LAYER Diff =1 Npuls =2 PolyA =3 McA =4 MetalA =5
EXPORT polyA mcA metalA *END 例二:
*DESCRIPTION KEEPDATA = smart *END
*INPUT –LAYER
EXPORT = 6nets poly nsd psd pwell nsub contact EXPORT=- metal 6nets1 6pads 6pads 6nxrf 6exrf EXPORT= mosxn8g mosxp8g ;为MOS工艺设定的 *END
*OPERATION LVSCHK *END
操作模块(OPERATION BLOCK)常用的语句:
【语句1】AND layer –a layer –b trapfile {OUTPUT c –name l –name {d –num}} AND[E] layer1 layer2 layer3
由另外两个层建立一个新层。新层由那两个层的共有部分组成。 layer –a 第一个输入层的名字
layer –b 第二个输入层的名字
lrapfile 由逻辑操作产生的梯形文件的名字。参数layer –a 和layer –b 是有顺序的,一旦连接建立了,它将会影响到输出的文件。在节点信息被CONNECT语句建立到layer –a上面以后,电气节点信息将自动被标志到输出的层上。输出文件的名字可以最多由七个字符组成,但不能使用特殊字符。A-Z和0-9是可以使用的,但第一个字符必须是一个字母。 OUTPUT 把操作的结果送到一个输出的单元中
C-name l-name C-name 是输出的单元的名字,可以由六个或六个以下的字母组成,但不能含有特殊符号。L-name是由CAD图形系统决定的层的序号。假如你的C-name是rule03,而l-name是5,则输出的单元名为rule0305。
d-num 与输出单元的层号相关联的数据类型号。只对GDSII格式使用该参数。值可以从0到63。
E 为每个产生的层创建一个边缘信息文件。这个信息是用作侧壁电容提取的。 【语句2】 CONNECT layer –a layer –b BY cont –layer
定义中间层的连接,也就是,通过一系列的接触孔把两个层连接起来。
Layer –a 第一个输入层的名字
Layer –b 第二个输入层的名字
Cont –layer 先前定义的包含了layer –a 和 layer –b 的接触点的层。Cont –layer至少要包含三个字符而且开头的三个字符必须不同。第四个字符必须是字母,尽管名字可以包含数字。处理器把指定优先级最高的层为主层。Cont-layer只能够从主层连接到其他的层。下面是个例子
【语句3】NOT layer-a layer-b trapfile {OUTPUT c-name l-num{d-num}}
从其他两个层创建一个新层,由这个操作产生的四边形文件包含了第一个层减去第一层和第二层共有的部分。layer –a第一个输入层的名字 layer-b是第二个输入层的名字。trapfile 是由逻辑操作创建的层。layer-a和layer-b是有顺序之分的,如果颠倒的话会影响到输出的文件。再使用CONNECT语句使节点信息建立以后,电气节点信息被自动从第一层(layer-a)标志到生成的层上。trapfile的名字可以最多由七个字符组成并且不能包含特殊符号。A-Z和0-9是允许使用的,但是第一个字符必须是字母。OUTPUT 把结果送到一个输出的单元中。c-name是输出单元的名字可以由六个或者六个以下的字符组成,并且不能包含特殊字符。L-num是由你的CAD图形系统决定的层的序号。D-num 是与输出单元的层号相联系的数据类型的序号。仅在输入为GDSII格式时使用这个选项。值可以从0―63。下面是例子:
【语句4】 OR layer-a layer-b trapfile {OUTPUT c-name l-num {d-num}}
从两个其他的层创建一个新层。由此产生的四边形文件包括这两个层的所有部分。它的各个参数的定义与AND语句完全类似。举个例子:
以上所讲的都是对层进行逻辑操作的语句。下面再举几个关于违反设计规则的错误的定义的语句。
【语句1】AREA layer –a {RANGE/NE/EQ} n1 n2 {trapfile} [OUTPUT c –name l –num {d –num}]
进行最小面积验证。这个语句检查多边形以确定他们的面积是否在一个范围之内。它还
创建若干个在确定的界限内的层。 lyer –a 输入层的名字
RANGE n1 n2 n1NE 如果指定层的任何一个参数同你指定的值不等,就报错。 EQ 如果指定层的任何一个参数同你指定的值相等,就报错。 tapfile 梯形文件的名字
OUTPUT 把操作的结果送到输出单元中
c-name l-num c-name 是输出单元的名字,可以包含六个或六个以下的字符,且不能包含特殊字符。L-num是由你的CAD系统决定的层号。比如c-name是rule03而l-num 是5,输出的单元名就是rule0305。下面是一个例子:
【语句
LT/LE/EQ/RANGE/SELLT/SELLE/SELGT/SELEQ/SELNE/SELRA n1 {n2}
2】ENC {[]} layer –a {&layer –a}[] layer –b {&layer –b}
{CORNER-CORNER n2 }{CORNER –EDGE n3} {trapfile}{OUTPUT c-name l-num {d-num}}{&}
确定layer-b的多边形局部或全部地包围yer –a 的程度。这个命令通过测量被包围的多边形的外部边界和包围的多边形的内部边界来定值。lyer-a 是包含那个被包围的多边形的层的名字。lyer-b是包含那个包围别的多边形的多边形的层的名字。&layer –al给包含错误标志的层重新命名。原来的层的名字就被恢复到原来的层去。在layer-a和&layer-al中间不要加空格。例如poly&rpoly。&layer-bl和&layer al一样,只不过它指的是layer-b。要完成的是对被包围的多边形的外部边界和包围的多边形的内部边界的测量。然后把测量结果和你定义的范围加以比较并且标出不一致的地方。必须提供下列之一的测量:LT/LE n1 如果选项为LT,则当这两个部分的空间比n1小时,或者如果选项为LE,当这两个部分的空间等于n1时,就报错。假如这两个部分接触或者交叠则不报错。EQ n1 假如这两个部分的空间等于n1时就报错。RANGE n1 n2 假如这两个部分的空间比n2小或者比n1大的时候就报错。如果你不希望锐角被标志出来,就使用范围测量。SELGT/SELGE n1 SELGT 以多边形格式输出当你使用带同样选项的LE测量时没有标出的layer-a上的多边形。使用这个选项的时候就不要使用OUTPUT命令。可以指定一个trapfile名作为代替。SELLT/SELLE n1 SELLT和SELLE以多边形格式输出与你使用相同选项时的LT n1 或者LE n1命令时相同的与错误相关的layer –a上的多边形。指定一个trapfile的名字而不要使用OUTPUT命令。
SELEQ/SELNE n1 SELEQ和SELNE以多边形格式输出与当你使用带相同选项的EQ n1和NE n1命令时相同的与错误相关的layer-a上的多边形。SELRA n1 n2命令输出与使用带相同选项的RANGE n1 n2命令时相同的与错误相关的layer-a的多边形。Trapfile 定义多边形文件的名字。只有在使用R或者R’选项的时候或者使用SELLT、SELLE、SELGT、SELGE或者SELRA操作时才使用。OUTPUT 把结果输出到一个输出单元中。C-name是输出单元的名字,可以有六个或六个以下的字母组成。L-num是由你的CAD图形系统决定的单元层号。例如你的c-name是rule03而l-num 是5,输出的层的名字就是rule0305。D-num是与层号(l-num)相关的输出单元的数据类型号。这个参数仅当输入数据类型为GDSII时被使用。数值可以从0到63。&是联合规则的标志。要注意的是,输出的单元使用多边形格式包含了好的多边形,产生的是简化了的四边形结构行和更加紧凑的单元。trapfile选项和OUTPUT命令是互斥的。
【语句3】LENGTH layer-a {&layer-al} GT/GE/ LT/LE/RANGE n1 {n2} {OUTPUT c-name l-num{d-num}}{&}
这个命令验证长度,并且仅仅用于联合规则。当前一次的尺寸检查失败了,这个命令就检查失败了的那个尺寸。只有当两次验证都出错它才报错。下面介绍一下各个参数的意义:layer-a输入层的名字,&layer-al是给包含错误标志的层重新命名。原来的层的名字被恢复到原来的层。layer-a和&layer-al之间不要加空格。测量选项有如下几个:GT/GE/ GT意味着错误部分的长度比n1要大,由此引发错误。GE表示长度比n1大或者等于n1,并由此产生一个错误。LT/LE/ LT表示长度比n1小,由此引发错误。LE表示长度比n1小或者等于n1时引发错误。RANGE n1 n2 RANGE 表示长度大于n1或者小于n2时引发错误。OUTPUT 是把结果输出到一个输出单元中 c-name是输出单元的名字,可以由六个或者六个以下的字母组成并且不能有特殊字符。L-name是由你的CAD图形系统决定的单元层的序号。例如c-name是rule03而l-num是5,输出层的名字就是rule0305。输出的格式和原来数据库的格式是一样的。D-num 与输出单元的层号相关的数据类型的序号。仅对GDSII格式使用这个选项,值可以从0到63。&是联合规则的标志。下面举一个例子:
注意,用黑线加粗的部分说明此处将给出一个错误标志。 有了上面对于rule文件的语句的基本了解,我们就可以来看一个完整的rule文件了。 *DESCRIPTION
SYSTEM = gds2
INDISK = /export/home/student/wangc/virtuoso_study/amp.gds2 PRIMARY = amp1
OUTDISK = error.gds2 SCALE = .001 MICRON MODE = EXEC NOW
RESOLUTION = .001 MICRON CNAMES-CSEN = NO *END
*INPUT-LAYER poly1 =35 pdiff =2 metal1 =45 nwell=12 ndiff=1 metal2=50 via2=0 cont=55
*END
*OPERATION
AREA poly1 RANGE 0 1000 OUTPUT area 30 *END
下面,对这个文件的语句做一些说明。
这个文件是为了对一个运算放大器电路进行DRC验证而写的。这个放大器有两层金属布线。System语句定义输入版图格式,因为dracula支持的文件格式不止GDS2一种,还有CADENCE、CIF、EDGE、EDIF、APPLE等,所以必须指定输入文件的格式。OUTDISK指定了输出文件名,它也是GDS2格式的。比较容易出问题的是输入层模块,这个模块主要作用是把GDS2文件中的层读进来。在GDS2格式的文件中,层是用数字来标记的,给每个层分配一个整数作为标记。而在dracula的rule文件中,必须给每个层都命名,一般由字母组成,原则上是随便取的,但一般是有一定对应意义的,以方便使用。这就产生了一个问题,那就是,首先,跟在等号右边的数字不是随便取的,它必须是在产生GDS2文件的时候就被定义了的,其次,你必须清楚的知道这个数字对应的是版图中的那个层,不然就没办法写rule文件。事实上,这些层的编号是没有特定要求的,但是在同一个工作组里面,或者说是版图的提供方和使用方之间必须达成一致。要确保双方都清楚版图里的哪些层都分配了哪些编号。一般来说,对于使用DRACULA做验证的人来说,这个层号是由产生版图的人来提供的。而对于自己做版图,同时自己也做验证的人来说,在把其他格式的文件转化为GDS2版图的时候必定是要设定好层的编号的。例如,用virtuoso来画版图,就会有一个编辑层信息的菜单,在那里面可以定义层的编号。或者从icfb中dump出画版图时使用的库的technology file文件,产生一个ASCII的文件,用文本编辑器打开就可以看到对应的层的编号信息。 学习了怎样编写rule文件以后,我们来看看如何把文本文件转化成可执行的脚本文件。这里要用到一个软件工具:PDRACULA。我们首先要找到这个工具安装在什么地方,然后
把这个路径加入到自己的.cshrc文件的命令搜索路径里面,这在前面讲UNIX的章节中已经有详细介绍,这里不细说。然后在在系统提示符下键入::PDRACULA,这是我们会看到命令提示符变成了冒号。键入:/get rulefile (rulefile是你的规则文件的名字)。这时规则文件的内容将显示在屏幕上,如果有错误的话会在出错的地方标出错误原因。如果没有,就可以键入:/fin 来结束PDRACULA的运行。然后命令提示符又变回到UNIX系统的命令提示符。这时候用ls命令,就可以看到在这个文件夹下面产生了很多文件。其中最重要的文件是jxrun.com和jxsub.com.。这两个文件都是可执行的脚本文件。区别在于前者是前台执行的,而后者是后台执行。要在前台运行一项任务,输入下列命令:jxrun.com,这样,运行时候的信息就会显示在屏幕上。如果觉得屏幕上的信息太多,一时看不清楚的话,也可以用UNIX提供的输出重定向功能把信息写入到指定的文件中去。例如键入:jxrun.com > information.log。则运行时的信息不会在屏幕上显示出来而是写入到一个叫做information.log的文本文件中。当然,这里的命名是任意的。要在后台运行一项任务,就键入jxsub.com。 运行结束以后再用ls命令看目录下的文件,会发现产生了一个叫做error.gds2的输出文件,这就是包含错误信息的GDS2格式的输出文件。可以把这个GDS2文件导入到virtuoso的库中,再用virtuoso打开查看错误信息。此外,我们也可以通过查看printf.sum文件来查看错误信息,但是这是文本格式的输出信息。由于数据量很大,看起来不是很方便。
关于dracula输出的DRC信息的使用
这里,假定我们按照前面所说的方法做了DRC验证,现在要做的就是把输出的错误信息给显示出来。假定我们是在一个叫做dracrun的目录下做的DRC验证,这个目录里包含了rule文件和jxrun.com文件以及输出结果。 下面把显示错误的步骤详细说一下。
【步骤1】打开一个叫做draculaInteractive的图形用户界面的工具。 方法是在UNIX命令提示符后键入:draculaInteractive & 注意,UNIX系统是大小写敏感的。几秒钟后,我们会看到
【步骤二】产生一个dummy cell
选择Utility菜单,选择Create Dummy Cell
将会Create Dummy Cell 的对话框。按照下图所示填写
确认,就可以产生一个空的单元(CELL)。就可以用Vrituoso(Cadence 提供的一个单元编辑工具)来打开它。
【步骤三】打开这个空单元
选择File—Open菜单,将会看到打开文件的对话框
打开Library Name 下拉框,选择newlib,也就是刚才建立的那个Library。 在Cell Name处填入newcell,就是那个空单元的名字。 确认,就可以用调用Virtuoso,并打开这个空单元。 【步骤四】在Virtuoso中调出draculaInteractive 我们可以看到Virtuoso的菜单如下图所示。
选择Tools—draculaInteractive菜单。这是,注意到,屏幕上显示的菜单已经变为下图所示。
【步骤五】设置DRC
选择DRC—SETUP菜单,出现对话框如下图
在Dracula Data Path中填入Dracrun。
点击OK,就会看到Virtuoso的显示窗口由一片空白变成了有一些小黑点。这些其实就是所有的错误标志。 参照下图:
同时,还会出现四个窗口,分别是:
◇ Dracula Layer Window
这个窗口列出了原始的层,你可以选择显示或不显示某个层。
◇ View DRC Error Window
这个窗口可以让你选择显示哪些规则对应的错误,或者是选择显示哪些错误。
而且这个窗口还有一个Explain按钮,当你锁定一个错误以后,只要按一下这个按钮,它会告诉你这个错误违反了哪条规则显示出来。
◇ Reference Window
这个窗口相当于一个导航,只是为了让你方便的在较大的版图里面选定要观察的区域。 ◇ Rules Layer Window
它列出了DRC的错误文件的名字,让你可以选择查看哪些错误文件对应的错误被显示出来。
根据以上的步骤做下来就可以比较方便的看到错误处在什么地方,便于修改。
另外,我们也可以先用virtuoso打开版图,再从步骤四开始往下做,这样,我们就可以看到原先的版图和错误输出叠合在一起的图形,便于修改。
因篇幅问题不能全部显示,请点此查看更多更全内容