注:pvs rule中的运算字符串不区分大小写,由于manual里都是用的小写,并且与calibre rule作区分,这里也都用小写。
1. 定义图层番号PVS:
layer_map <<
Calibre:
LAYER MAPCalibre:LAYER MAP source_layer {DATATYPE source_type target_layer}
PVS:layer_map Num -datatype { datatypeValue}
2. 定于图层名 <<
PVS:
layer_def >>Calibre:LAYER name original_layerCalibre:
LAYERPVS:layer_def layerName layerNum1
<<
3. 对图层取“或” *** 作,合并图层PVS:cat layerIn1 … layerInN layerOutPVS:
cat>>
Calibre:
OR
Calibre:X = OR layerIn1 … layerInN<<
4. 对图层取“非” *** 作
PVS:
not
>>Calibre:
NOT
PVS:not layerIn1 layerIn2 layerOut<<
Calibre:X = NOT layer1 layer25. 对图层取“与” *** 作
>>PVS:
andCalibre:
AND
<<
PVS:and layerIn1 layerIn layerOutCalibre:X = AND layer2 layer3
6. 对图层各边缘按照固定值扩大/收缩PVS:
shrink
>>Calibre:
SHRINK
PVS:shrink layerIn [ -right value ] [ -left value ] [ -top value ] [ -bottom value
] [ -cell_level ] layerOutCalibre:SHRINK layer [RIGHT BY value] [TOP BY value] [LEFT BY value] [BOTTOM BY value]<<
7. 对图层整体按照固定值扩大/收缩
注:主要区别是PVS rule的option加“-”,而Calibre rule的option不加"-",功能是一样的。
PVS:
size >>Calibre:
SIZE<<
PVS:例:PVS:size layerIn1 -by value layerOut
Calibre:X = SIZE layer1 BY size_value8. 按照density大小获取图层
PVS:
density
>>Calibre:
DENSITY
density M1 -le 0.6 -window 110 -step 55 -backup X
Calibre:例:X = DENSITY M1 <= 0.6 WINDOW 110 STEP 55 BACKUP
<<
运算符对照表:
9. 取两个图层相交的外面的部分
PVS:
select -outside >>Calibre:
OUTSIDE<<
10. 取两个图层相交的里面的部分PVS:select -outside [ -not ] layerIn1 layerIn2 [ -cell_level ] [ [ -outputlayer ]
layerOut ]
Calibre:X = OUTside layer1 layer2
PVS:
select -inside <<
Calibre:
INSIDE>>
PVS:select -inside [ -not ] layerIn1 layerIn2 [ -cell_level ] [ [ -outputlayer ]
layerOut ]
Calibre:X = INside layer1 layer2
11. 取两个图层互相没有交互的部分PVS:
select -interact -notCalibre:
NOT INTERACT
<<
PVS:select -interact [ -not ] layerIn1 layerIn2 [ constraint ] [ -odd | -even ] [-offset { offset | xoffset yoffset } [ -maintain_spacing ]-by_net ] [ -single_point also | only ] [ -cell_level ] [ [ -outputlayer ]
-spacing { spacing | xspacing yspacing }
layerOut ]
Calibre:
X = NOT INTERACT layer1 layer2 [constraint [BY NET] [EVEN | ODD]]
[SINGULAR {ALSO | ONLY}]
12. 生成矩形PVS:
rect_gen
>>Calibre:
RECTANGLES
PVS:
rect_gen -width width -length length
[ -inside_of x1 y1 x2 y2 | -inside_of layer layer ]<<
layerOut例:[{INSIDE OF x1 y1 x2 y2} | {INSIDE OF LAYER layer}]RECT_GEN -width 0.444 -length 0.444 -spacing 0.222 1.776 -offset 0 0.222 -inside_of_layer EXTENT_AA_0 DUMAA_OFF_b_0
Calibre:
[OFFSET {offset | {width_offset length_offset}}]
RECTANGLES width length {spacing | {width_spacing length_spacing}}
[MAINTAIN SPACING]<<
例:DUMAA_OFF_b_0 = RECTANGLES 0.444 0.444 0.222 1.776 OFFSET 0 0.222 INSIDE OF LAYER EXTENT_AA_0
[{DRC CHECK MAP rule_check
13. 设定DRC检查RULEPVS:
rule [RuleName] {RuleBlock}
>>Calibre:
[RuleName] {RuleBlock}
PVS:例:RULE DUMAA_a_all_out { COPY DUMAA_a_all }Calibre:例:DUMAA_a_all_out { COPY DUMAA_a_all }
14. DRC检查的结果的输出PVS:
output
>>Calibre:
DRC CHECK MAP
PVS:
output { -drc | -erc } checkName { [ -gdsii [ layerNum [ datatype ] ] [ properties
] | -ascii | -binary | -oasis [ layerNum [ datatype ]] [ properties ]
[ -layer_name layerName ][ -cblock ] ] }
[ fileName [file-options] ] [ -maximum { number | all } ] [ -prefix string
] [ -append string ] [-aref
[
] [-substitute … ]] [ -autoref
[prefix] ] [ -gzip ] [-max_vertices { number | all } ] [ -user | -pseudo ]
例:OUTPUT DUMAA_a_all_out -GDSII 10 0 -autoref -maximum all
Calibre:
{GDSII | OASIS} [PROPERTIES] [layer [datatype]]} | ASCII]
[filename | “PIPE command”] [PREFIX string] [APPEND string] [MAXIMUM RESULTS {maxresults | ALL}]
[MAXIMUM VERTICES {maxvertex | ALL}]
[TEXTTAG name] [USER | PSEUDO | USER MERGED | TOP | COMBINE]
[PREC value] [MAG value]
[ {AREF cell_name width length [minimum_element_count] [MAXIMUM PITCH pitch] [SUBSTITUTE x1 y1 … xn yn]}… | {AUTOREF [prefix]} ] 例:DRC CHECK MAP DUMAA_a_all_out GDSII 10 1 AUTOREF
二、 PVS rule 中使用TCL BLOCK
1. TCL BLOCK的使用方法
在rule文件中写入如下的命令块,PVS可以识别到并按照tcl的语法读取。可以用于重复性比较强的rule的编写。
PVS_READ_TCL_BLOCK
...
...//中间输入要运行的tcl脚本
...
PVS_END_TCL_BLOCK
2. TCL BLOCK中使用porc
使用tcl 的proc功能编写出子程序块,可以在程序中重复调用。
PVS_READ_TCL_BLOCK
proc abc {1 2 3} {
puts " "
}
abc V1 M1 M2
abc V2 M2 M3
PVS_END_TCL_BLOCK
3. TCL BLOCK中使用foreach
使用tcl 的foreach功能编写出子程序块,可以在程序内循环列表从而简洁化重复性较强rule的编写。
例如以下是使用foreach的方法:
PVS_READ_TCL_BLOCK set via_list{1 2 3 4 5 6 7} foreach via ${via_list} { puts "V${via}" } PVS_END_TCL_BLOCK 三、 PVS rule 中使用#DEFINE/#IFDEF/#ENDIF 和calibre rule的语法一样,使用方法如下:
#DEFINE ABC YES
#IFDEF ABC YES
RULE ABC_RUN {COPY ABC}
OUTPUT ABC_RUN -GDSII 10 0 -autoref -maximum all
#ENDIF
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)