用这些原始层次的“与或非”关系可以生成设计规则检查所需要的额外层次(文件中的分号引导注释行):
;TOP223的规则检查
drcExtractRules(
bkgnd = geomBkgnd()
NT = geomOr( "NT" ) ;N阱,假设技术文件中以”NT”为名。
TO = geomOr( "TO" ) ;有源区,’’
GT = geomOr( "GT" ) ;多晶硅
W1 = geomOr( "W1" ) ;接触孔
A1 = geomOr( "A1" ) ;铝线
下面这个语句相当于一个条件转移语句,当有drc这个命令,执行下面的规则,否则跳转到下一个命令。
ivIf( switch( "drc?" ) then
在设计规则检查中,主要的语句就是drc()了。先简单介绍一下这个语句的语法。
[outlayer]=drc(inlayer1 [inlayer2] function [modifiers] )
outlayer表示输出层,如果定义(给出)输出层,则通过drc检查的出错图形就可以保存在该输出层中。此时,如果没有modifiers选项,则保存的是原始的图形。如果在modifiers选项中定义了修改方式,那么就把修改后的结果保存在输出层中。如果没有定义outlayer层,出错的信息将直接显示在出错的原来层次上。
Inlayer1和inlayer2是代表要处理的版图层次。有些规则规定的是只对单一层次的要求,比如接触孔的宽度。那么可以只有inlayer1。而有些规则定义的是两个层次之间的关系,如接触孔和铝线的距离,那么要注明这两个层次。
Function中定义的是实际检查的规则,关键字有sep(不同图形之间的间距), width, enc(露头), ovlp(过覆盖), area, notch(挖槽的宽度)等。关系有>, =, <=, ==等。结合起来就是:sep<3, width<4, 1例如 drc( GT (width < 3) "Poly width < 3.0 " )
上面已经提到GT表示多晶硅,在此例中,没有outlayer的定义,也没有modifiers的定义,所以发现的错误都直接显示在GT层上。例子中,inlayer就是GT,检查的只是多晶硅层的规则,function是width<3,表示宽度小于3微米。所以上面这句的执行结果就是把多晶硅层中宽度小于3的图形当做错误输出。后面引号中的信息起到说明提示作用,需要时可以查询,对查错没有实际意义。
;POLY RULES
drc( GT (width < 3) "Poly width < 3.0 " ) 对应规则7.a
drc( GT(sep< 3) "Poly to Poly spacing < 3.0") 对应规则7.b
drc(GT TO (enc<2) "Poly Overhang out of Active into Field<2.0")
对应规则7.c 因为规则的不同,有时要分开有源区上和场区上的多晶硅,下面两个语句产生两种不同的层次。geomAnd()把括号内层次“与”之后再赋给前面的新层次, geomAndNot()是把括号内层次“与非”之后再赋给前面的新层次。gate 层是有源区上的多晶硅,connect层是场区上的多晶硅。