自动POLY和METAL1打孔:(快捷键7)
自动POLY和METAL1打孔:(快捷键7)(需要根据不同工艺尺寸修改数据)(缺点:不能在Convert to Mosaic下使用)
procedure( create_gate()
let(( cv instList inst_fl inst_l inst_fw
fingers tech viaDefId viaParams xy cutNum
x1 y1 x2 y2 x3 y3 x4 y4 x5 y5
PolyEncloseCO MetalEncloseCO COSpace
PolyExtensionOD MetalWidth COCoreSpaceOD
PolyEncloseMetal PolyWidth FingersPolySpace )
PolyEncloseCO = 0.07
MetalEncloseCO = 0.07
COSpace = PolyExtensionOD
PolyExtensionOD = 0.2
MetalWidth = 0.3
COCoreSpaceOD = 0.41
PolyEncloseMetal = 0.25
PolyWidth = 0.36
FingersPolySpace = 0.42
cv = geGetEditCellView(getCurrentWindow())
tech = techGetTechFile(cv)
instList = geGetSelSet()
foreach(inst instList
inst_fl = atof(car(last(inst~>prop~>l)));get instance l\
prop=information in properties\
atof is change to float from Character string\
atoi is change to integer from Character string
if( (inst_fl >= 100) then inst_fl = inst_fl / 1000 )
inst_fw = atof(car(last(inst~>prop~>fw)));get instance fw
fingers = atof(car(last(inst~>prop~>fingers)));get instance fingers
inst_l = inst_fl * fingers + (fingers - 1) * FingersPolySpace
xy = inst~>xy
cutNum = int(((inst_l - (MetalWidth * 2) ) / PolyWidth) +1)
if( (cutNum <= 2)
then cutNum = 2
else cutNum = cutNum
)
viaDefId = techFindViaDefByName(tech "M1_PO")
viaParams = list(list("cutSpacing" list(COSpace COSpace));cont via space
list("layer1Enc" list(PolyEncloseCO PolyEncloseCO));POLYG enclosures cont via
list("layer2Enc" list(MetalEncloseCO MetalEncloseCO));METAL1 enclosures cont via
list("cutRows" 1) list("cutColumns" cutNum));Row=1 Column=cutNum
case(inst~>orient
("R0"
x1 = car(xy)
y1 = cadr(xy) + inst_fw + PolyExtensionOD
x2 = x1 + inst_l
y2 = y1 + PolyWidth
x3 = x1 + inst_l/2
y3 = cadr(xy) + inst_fw + COCoreSpaceOD
x4 = x1 + PolyEncloseMetal
y4 = y2 - MetalWidth
x5 = x2 - PolyEncloseMetal
y5 = y2
dbCreateRect( cv list( "METAL1" "drawing" ) list(x4:y4 x5:y5))
dbCreateRect( cv list( "POLYG" "drawing" ) list(x1:y1 x2:y2))
dbCreateVia( cv viaDefId list(x3 y3) "R0" viaParams)
);end "R0"
("R90"
x1 = car(xy) - inst_fw - (PolyExtensionOD + PolyWidth)
y1 = cadr(xy)
x2 = car(xy) - inst_fw - PolyExtensionOD
y2 = y1 + inst_l
x3 = x1 + (MetalWidth / 2)
y3 = y1 + inst_l/2
x4 = x1
y4 = y1 + PolyEncloseMetal
x5 = x1 + MetalWidth
y5 = y2 - PolyEncloseMetal
dbCreateRect( cv list( "METAL1" "drawing" ) list(x4:y4 x5:y5))
dbCreateRect( cv list( "POLYG" "drawing" ) list(x1:y1 x2:y2))
dbCreateVia( cv viaDefId list(x3 y3) "R90" viaParams)
);end "R90"
("R180"
x1 = car(xy) - inst_l
y1 = cadr(xy) + PolyExtensionOD
x2 = car(xy)
y2 = cadr(xy) + (PolyExtensionOD + PolyWidth)
x3 = x1 + inst_l/2
y3 = cadr(xy) + COCoreSpaceOD
x4 = x1 + PolyEncloseMetal
y4 = y2 - MetalWidth
x5 = x2 - PolyEncloseMetal
y5 = y2
dbCreateRect( cv list( "METAL1" "drawing" ) list(x4:y4 x5:y5))
dbCreateRect( cv list( "POLYG" "drawing" ) list(x1:y1 x2:y2))
dbCreateVia( cv viaDefId list(x3 y3) "R180" viaParams)
);end "R180"
("R270"
x1 = car(xy) - (PolyExtensionOD + PolyWidth)
y1 = cadr(xy) - inst_l
x2 = car(xy) - PolyExtensionOD
y2 = cadr(xy)
x3 = x1 + (MetalWidth / 2)
y3 = y1 + inst_l/2
x4 = x1
y4 = y1 + PolyEncloseMetal
x5 = x1 + MetalWidth
y5 = y2 - PolyEncloseMetal
dbCreateRect( cv list( "METAL1" "drawing" ) list(x4:y4 x5:y5))
dbCreateRect( cv list( "POLYG" "drawing" ) list(x1:y1 x2:y2))
dbCreateVia( cv viaDefId list(x3 y3) "R270" viaParams)
);end "R270"
("MY"
x1 = car(xy) - inst_l
y1 = cadr(xy) + inst_fw + PolyExtensionOD
x2 = car(xy)
y2 = y1 + PolyWidth
x3 = x1 + inst_l/2
y3 = y1 + PolyExtensionOD
x4 = x1 + PolyEncloseMetal
y4 = y2 - MetalWidth
x5 = x2 - PolyEncloseMetal
y5 = y2
dbCreateRect( cv list( "METAL1" "drawing" ) list(x4:y4 x5:y5))
dbCreateRect( cv list( "POLYG" "drawing" ) list(x1:y1 x2:y2))
dbCreateVia( cv viaDefId list(x3 y3) "MY" viaParams)
);end "MY"
("MYR90"
x1 = car(xy) - inst_fw - (PolyExtensionOD + PolyWidth)
y1 = cadr(xy) - inst_l
x2 = car(xy) - inst_fw - PolyExtensionOD
y2 = cadr(xy)
x3 = x1 + (MetalWidth / 2)
y3 = y1 + inst_l/2
x4 = x1
y4 = y1 + PolyEncloseMetal
x5 = x1 + MetalWidth
y5 = y2 - PolyEncloseMetal
dbCreateRect( cv list( "METAL1" "drawing" ) list(x4:y4 x5:y5))
dbCreateRect( cv list( "POLYG" "drawing" ) list(x1:y1 x2:y2))
dbCreateVia( cv viaDefId list(x3 y3) "MYR90" viaParams)
);end "MYR90"
("MX"
x1 = car(xy)
y1 = cadr(xy) + PolyExtensionOD
x2 = x1 + inst_l
y2 = y1 + PolyWidth
x3 = x1 + inst_l/2
y3 = y1 + PolyExtensionOD
x4 = x1 + PolyEncloseMetal
y4 = y2 - MetalWidth
x5 = x2 - PolyEncloseMetal
y5 = y2
dbCreateRect( cv list( "METAL1" "drawing" ) list(x4:y4 x5:y5))
dbCreateRect( cv list( "POLYG" "drawing" ) list(x1:y1 x2:y2))
dbCreateVia( cv viaDefId list(x3 y3) "MX" viaParams)
);end "MX"
("MXR90"
x1 = car(xy) - (PolyExtensionOD + PolyWidth)
y1 = cadr(xy)
x2 = car(xy) - PolyExtensionOD
y2 = cadr(xy)+ inst_l
x3 = x1 + (MetalWidth / 2)
y3 = y1 + inst_l/2
x4 = x1
y4 = y1 + PolyEncloseMetal
x5 = x1 + MetalWidth
y5 = y2 - PolyEncloseMetal
dbCreateRect( cv list( "METAL1" "drawing" ) list(x4:y4 x5:y5))
dbCreateRect( cv list( "POLYG" "drawing" ) list(x1:y1 x2:y2))
dbCreateVia( cv viaDefId list(x3 y3) "MXR90" viaParams)
);end "MXR90"
);end case
);end foreach
);end let
);end procedure
<div>hiSetBindKey("Layout" "<Key>7" "create_gate()" )
</div>
谢谢分享
页:
[1]