-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathklayout-boe-drc
73 lines (59 loc) · 3.04 KB
/
klayout-boe-drc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<?xml version="1.0" encoding="utf-8"?>
<klayout-macro>
<description/>
<version/>
<category>drc</category>
<prolog/>
<epilog/>
<doc/>
<autorun>false</autorun>
<autorun-early>false</autorun-early>
<priority>0</priority>
<shortcut/>
<show-in-menu>true</show-in-menu>
<group-name>drc_scripts</group-name>
<menu-path>tools_menu.drc.end</menu-path>
<interpreter>dsl</interpreter>
<dsl-interpreter-name>drc-dsl-xml</dsl-interpreter-name>
<text>report("DRC")
tiles(1.mm)
threads(8)
Si = input(1,0) #Silicon Full
SiEtch1 = input(2,0) #Silicon Etch 1
SiEtch2 = input(3,0) #Silicon Etch 2
BOE = input(5010,0) #Buried Oxide Etch Mask
TOE = input(5011,0) #Top Oxide Etch Mask
FP = input(4,0) #Die area
EXCL = input(1000,0) #Exclude
########################################################################################
TOP_OXIDE_THICKNESS = 3.um
BURIED_OXIDE_THICKNESS = 3.um
TOP_OXIDE_ETCH_RATE = 250.nm #per min
BURIED_OXIDE_ETCH_RATE = 100.nm #per min
DELAMINATION_RATE = 600.nm #per min
TOP_ETCH_TIME = 14 #mins
BOTTOM_ETCH_TIME = 30 #mins
N = 20
r1 = 2.um
r2 = 2.um
n1 = 5
n2 = 50
TE = TOE.rounded_corners(r1, r1, n1).sized(TOP_OXIDE_ETCH_RATE * TOP_ETCH_TIME, square_limit).rounded_corners(r2, r2, n2)
BE = BOE.not(Si+SiEtch1+SiEtch2).rounded_corners(r1, r1, n1)
DL = (TE-BOE).not(Si+SiEtch1+SiEtch2).and(BOE.sized(DELAMINATION_RATE * BOTTOM_ETCH_TIME/N, square_limit))
for i in 1..N
DL = (TE-BOE).not(Si+SiEtch1+SiEtch2).and(BE.sized(DELAMINATION_RATE * BOTTOM_ETCH_TIME/N, square_limit))
BE = (BE+DL).sized(BURIED_OXIDE_ETCH_RATE * BOTTOM_ETCH_TIME/N, square_limit).merged.rounded_corners(r2, 500.nm, n2).smoothed(5.nm)
end
BOE.width(10.000, angle_limit(85)).polygons.not_inside(EXCL).output("Width", "Minimum width of BOE is 10um")
BOE.space(10.000, angle_limit(85)).polygons.not_inside(EXCL).output("Spacing", "Minimum spacing of BOE is 10um")
BOE.not(Si+SiEtch1+SiEtch2).width(500.nm, angle_limit(85)).polygons.not_inside(EXCL).output("Hole size", "Minimum Si hole size within BOE is 500nm for BHF penetration")
BOE.separation(ModNpp+ModPdPpp, 1.um).polygons.not_inside(EXCL).output("Separation", "Minimum separation of BOE to P++ or N++ doped Si is 1um")
TOE.width(10.000, angle_limit(85)).polygons.not_inside(EXCL).output("Width", "Minimum width of TOE is 10um")
TOE.space(10.000, angle_limit(85)).polygons.not_inside(EXCL).output("Spacing", "Minimum spacing of TOE is 10um")
TOE.enclosing(BOE, 15.um).polygons.not_inside(EXCL).output("Inclusion", "Minimum inclusion of BOE in TOE is 15um")
TOE.separation((V1+M1+MH+V2+M2), 8.um).polygons.not_inside(EXCL).output("Separation", "Minimum separation of TOE to metal is 8um")
FP.rounded_corners(2.5.mm, 2.5.mm, 300).enclosing(TOE+BOE, 450.um).polygons.not_inside(EXCL).output("Inclusion", "Minimum distance of BOE and TOE to edges is 450um and 1500um from corners")
TE.output("Top Oxide Etch","Estimated region where top oxide etching will occur")
BE.output("Bottom Oxide Etch","Estimated region where bottom oxide etching will occur")</text>
</klayout-macro>