第八章DRCandLVS在前面的章节中已经学习了如何从网表(netlist)文件产生版图(layout),以及时序分析等等,在正式流片之前我们还必须作一些其他的工作,例如DesignRuleChecking(DRC)和LogicVersusSchematic(LVS)。其中,DRC是验证设计的几何规则的,它保证版图符合流片厂家的要求,可以保证版图在工艺线上确实可以做出来。事实上,如果不作这一步验证的话,就有可能发生线条在光刻过程中被刻断等情况,从而导致流片失败。而LVS是把得到的版图和电路原理图进行比较,看它们在是否一致。能做以上验证的EDA软件主要有mentor的calibre、Cadence的diva和dracula。这里只介绍dracula的使用方法。DRCDRC要验证的对象是版图,我们的版图一般是通过两种方法得到的。一种是用virtuoso等版图编辑工具手工绘制。这在模拟设计中较为普遍。另一种是用Cadence的SE等自动布局布线工具(APR)由网表文件自动产生。数字设计中由于电路规模较大且较容易实现计算机辅助设计,所以,版图多为APR产生。版图文件是可以直接交给半导体加工工厂生产的。但是,在交付厂商之前必须做DRC验证。因为,为了保证版图能正确制出,流片厂家会根据工艺定义很多的设计规则,只有版图满足厂家的所有的设计规则,才可能被正确的制出。一般说来,设计规则有很多,例如昀小间距、昀小孔径等。不符合厂家提出的设计规则要求的版图在工艺线上是不可能被正确生产出来的。以非门为例,我们制定了以下的规则:n阱(nwell):n阱的昀小宽度4.8u阱与阱之间的昀小间距1.8undiff到nwell的昀小间距0.6updiff到nwell的昀小间距1.8upmos器件必须在nwell内有源区(active)有源区的昀小宽度1.2u有源区之间的昀小间距1.2u多晶硅(poly)多晶硅的昀小宽度0.6u多晶硅之间的昀小宽度0.6u多晶硅与有源区的昀小间距0.6u多晶硅栅在场区上的昀小露头0.6u源、漏与栅的昀小间距0.6u引线孔(contact)引线孔的昀小宽度0.6u引线孔之间的昀小间距0.9u多晶硅覆盖引线孔的昀小间距0.3umetal1覆盖引线孔的昀小间距0.3u金属1(metal1)metal1的昀小宽度1.2umetal1之间的昀小间距0.9u金属2(metal2)metal2的昀小宽度1.2umetal2之间的昀小间距1.2umetal2的昀小凹槽深度1.2u通孔(via)via的昀小宽度0.6uvia之间的昀小间距0.9uvia与contact之间的昀小间距0.6umetal1overlap(覆盖)via的昀小间距0.3umetal2overlapvia的昀小间距0.3uvia与poly的昀小间距0.3u先看一下Dracula的工作流程图。用dracula做DRC,它的输入有两个,一个是版图文件,为GDSII或其他格式,另一个是规则文件(RuleFile),RuleFile告诉DRC工具怎样做DRC,这个文件十分重要,一般,由流片厂家提供,或者由designer根据流片厂家提供的版图几何规范自己写。要做版图验证,必须要对各个工艺规则有一定了解。即便不是自己写规则文件,这也是必须的。因为验证结果报错以后,不了解工艺规则就会不知道该怎么去改版图。而如果自己写规则文件,就对工艺规则的掌握有更高要求了。对一个draculaDRC的使用者来说,主要有以下几个部分的知识要掌握。第一,工艺规则。要求对芯片在半导体加工工厂里的制造工艺流程有一定程度的了解。第二,rule文件的编写和编辑。第三,dracula输出的DRC信息的使用。其中,第一部分的知识有专门课程讲解,这里将不再详细叙述。以后的部分将主要着重讲解后面两点。关于rule文件的编写首先讲述一下rule文件在dracula使用中的作用。Rule文件是一个用unix下的文本编辑工具,例如vi,texteditor,ed,emacs等等编写的一个文本文件。它的作用是描述让dracula作什么,例如,读入哪些层,对这些层之间作哪些逻辑运算产生逻辑层,以及在什么样的情况下给出错误提示。可见,rule文件是非常重要的,但是又是非常难写的,因为里面牵涉到很多具体而细致的设计规则,很难写得非常全面。而且,里面的很多参数是工艺相关的。也就是说,不同的半导体加工工厂,要求的设计规则是不同的。所以,很多情况下,规则文件是由半导体加工工厂提供的。规则文件的内容将在后面内容详细介绍。写好规则文件以后还要对它进行处理。有个叫做PDRACULA的工具就是对规则文件进行处理的。它首先检查rule文件有没有语法错误,因为dracula的rule文件有固定的语法格式。如果没有语法错误的话,PDRACULA就会把rule文件处理成一个脚本文件,这个脚本文件是可执行的。默认的文件名是jxrun.com。再执行这个脚本文件,就可以完成dracla的DRC验证工作。先看一下rule文件的语法规则。因为rule文件本身的作用比较单一,所以,语法也比较简单。编写rule文件的难点不在于语法,而在于非常繁复的规则。由于半导体加工是一个非常精密复杂的工作,所以与之相关的设计规则也就非常繁多细致。而且由于实际流片一次的费用非常昂贵,所以尽量要求一次流片成功。对后验证的要求也就非常严格。下面介绍一下rule文件的内部结构,并对各模块常用语句做解释。规则文件通常包括如下几个部分:描述模块(DescriptionBlock)、输入层模块(InputlayerBlock)、操作模块(OperationBlock)。每一个模块都有一个标志模块开始的标志和一个用来标志模块结尾的标志(*END)。*END标志通常出现在该模块的昀后一行。模块开始标志也由一个*引导,出现在模块的第一行。描述模块定义了dracula运行的系统环境。它还定义了要被验证的电路。主要包括以下内容:运行模式、基本单元名、输入/输出设备、文件名、格式、图形比例元素、网格大小、输出记录文件、警告消息显示。输入层模块把布局图的层名或层编号和Dracula的层名对应起来,并提供Dracula进行验证所需的其他关于层的信息。主要是:要输出的层、层名、掩膜顺序、要输出的层、文本层。操作层定义要进行的操作和应用程序并且标出错误。它定义的操作类型有:逻辑、电气节点、缩放、参数、空间、ERC、DRC、LVS、LPE和PRE。描述模块(DESCRIPTIONBLOCK)常用的语句有:【语句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格式。*DESCRIPTIONSYSTEM=apple;输入图形格式SYSOUT=gds2;输出图形格式OUTDISK=gds2out;图形输出磁盘文件PRIMARY=composite;顶层单元名INDISK=comp.apl;图形输入磁盘文件PRINTFILE=gdsprt;显示文件名SCALEIN=0.0000125mic;输入图形数据库比例RESOLUTION=0.5mic;输入图形数据库数字单元SCALEOUT=0.001mic;输出图形数据库数字单元MODE=execnow;执行模式CONVERT=yes*INPUT-LAYERlayer1=1text=60layer2=2layer3=3layer4=4*END再举例说明GDSII转化为APPLICON*DESCRIPTIONSYSTEM=gds2SYSOUT=appleOUTDISK=appleoutPRIMARY=compositeINDISK=comp.dbPRINTFILE=applprtSCALEIN=0.001micRESOLUTION=0.25micSCALEOUT=0.0000125micMODE=execnowCONVERT=yes*INPUT-LAYERlayer1=1text=60layer2=2layer3=3layer4=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-sizeunits指定布局图的昀小步长(网格)。所有的布线工序都以这个语句规定的步长的整数倍进行。假如你的布局图里包含比这个步长还要小的数据,那么这个语句将会把它垂直于网格截断。要想知道Dracula是否截断了某些数据,可以用FLAG-OFFGRID语句。RESOLUTION与SIZE和RELOCATE语句以及它们的取值有关。假如RESOLUTION的大小比SCALE的值小,那么PDRACULA就会产生一个警告信息,并且自动吧RESOLUTION的取值调整到跟SCALE一样大。假如RESOLUTION的值不是一个整数,那么PDRACULA会发出一个警告信息,并且在验证中采用“真数验证”。【语句9】SYSOUT=formattreefile指定CAD系统输出文件(OUTDISK)的格式,假如你想要一个同你定义的SYSTEM及SYSIN不同的格式。例如:SYSTEM=GDS2,SYSOUT=CIF,则输入为GDSII格式,而输出的错误文件为CIF格式的。这个语句需要一个由dracula产生的使用你需要的文件格式的文件,这个文件包含了基于缩放和物理单元的格式的信息。treefile指定一个从上次的运行产生的文件,该次运行必须指定与现在的SYSOUT和SCALEOUT相同的SYSTEM和SCALE的值。下面举一个例子,这个例子输入一个GDSII的数据库,输出采用CIF格式。Dracula拷贝名为tree2100.dat的文