siepic-forge 1.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- siepic_forge/__init__.py +4 -0
- siepic_forge/component.py +416 -0
- siepic_forge/library/EBeam/GCs_BB.gds +0 -0
- siepic_forge/library/EBeam/ebeam_adiabatic_te1550.gds +0 -0
- siepic_forge/library/EBeam/ebeam_adiabatic_tm1550.gds +0 -0
- siepic_forge/library/EBeam/ebeam_bdc_te1550.gds +0 -0
- siepic_forge/library/EBeam/ebeam_crossing4.gds +0 -0
- siepic_forge/library/EBeam/ebeam_gc_te1550.gds +0 -0
- siepic_forge/library/EBeam/ebeam_gc_tm1550.gds +0 -0
- siepic_forge/library/EBeam/ebeam_splitter_swg_assist_te1310.gds +0 -0
- siepic_forge/library/EBeam/ebeam_splitter_swg_assist_te1550.gds +0 -0
- siepic_forge/library/EBeam/ebeam_terminator_te1310.gds +0 -0
- siepic_forge/library/EBeam/ebeam_terminator_te1550.gds +0 -0
- siepic_forge/library/EBeam/ebeam_terminator_tm1550.gds +0 -0
- siepic_forge/library/EBeam/ebeam_y_1550.gds +0 -0
- siepic_forge/library/EBeam/ebeam_y_adiabatic.gds +0 -0
- siepic_forge/library/EBeam/ebeam_y_adiabatic_500pin.gds +0 -0
- siepic_forge/library/EBeam/taper_si_simm_1310.gds +0 -0
- siepic_forge/library/EBeam/taper_si_simm_1550.gds +0 -0
- siepic_forge/library/EBeam_SiN/ANT_MMI_1x2_te1550_3dB_BB.gds +0 -0
- siepic_forge/library/EBeam_SiN/GC_SiN_TE_1550_8degOxide_BB.gds +0 -0
- siepic_forge/library/EBeam_SiN/ULaval.gds +0 -0
- siepic_forge/library/EBeam_SiN/ebeam_BondPad.gds +0 -0
- siepic_forge/library/EBeam_SiN/ebeam_DC_2-1_te895.gds +0 -0
- siepic_forge/library/EBeam_SiN/ebeam_DC_te895.gds +0 -0
- siepic_forge/library/EBeam_SiN/ebeam_Polarizer_TM_1550_UQAM.gds +0 -0
- siepic_forge/library/EBeam_SiN/ebeam_YBranch_895.gds +0 -0
- siepic_forge/library/EBeam_SiN/ebeam_gc_te895.gds +0 -0
- siepic_forge/library/EBeam_SiN/ebeam_terminator_SiN_1550.gds +0 -0
- siepic_forge/library/EBeam_SiN/ebeam_terminator_SiN_te895.gds +0 -0
- siepic_forge/library/EBeam_SiN/taper_SiN_750_3000.gds +0 -0
- siepic_forge/technology.py +291 -0
- siepic_forge-1.0.0.dist-info/LICENSE +19 -0
- siepic_forge-1.0.0.dist-info/METADATA +99 -0
- siepic_forge-1.0.0.dist-info/RECORD +37 -0
- siepic_forge-1.0.0.dist-info/WHEEL +5 -0
- siepic_forge-1.0.0.dist-info/top_level.txt +1 -0
siepic_forge/__init__.py
ADDED
|
@@ -0,0 +1,416 @@
|
|
|
1
|
+
try:
|
|
2
|
+
from importlib.resources import files, as_file
|
|
3
|
+
except ImportError:
|
|
4
|
+
from importlib_resources import files, as_file
|
|
5
|
+
|
|
6
|
+
import math
|
|
7
|
+
import warnings
|
|
8
|
+
|
|
9
|
+
import photonforge as pf
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
_symmetries_2port = [("P0", "P1", {"P1": "P0"})]
|
|
13
|
+
|
|
14
|
+
_symmetries_3port = [("P1", "P2", {"P0": "P0", "P2": "P1"})]
|
|
15
|
+
|
|
16
|
+
_symmetries_crossing = [
|
|
17
|
+
("P0", "P1", {"P1": "P0", "P2": "P3", "P3": "P2"}),
|
|
18
|
+
("P0", "P2", {"P1": "P3", "P2": "P1", "P3": "P0"}),
|
|
19
|
+
("P0", "P3", {"P1": "P2", "P2": "P0", "P3": "P1"}),
|
|
20
|
+
]
|
|
21
|
+
|
|
22
|
+
_symmetries_directional_coupler = [
|
|
23
|
+
("P0", "P1", {"P1": "P0", "P2": "P3", "P3": "P2"}),
|
|
24
|
+
("P0", "P2", {"P1": "P3", "P2": "P0", "P3": "P1"}),
|
|
25
|
+
("P0", "P3", {"P1": "P2", "P2": "P1", "P3": "P0"}),
|
|
26
|
+
]
|
|
27
|
+
|
|
28
|
+
_symmetries_mmi12 = [("P0", "P2", {"P1": "P1", "P2": "P0"})]
|
|
29
|
+
|
|
30
|
+
_symmetries_mmi22 = _symmetries_directional_coupler
|
|
31
|
+
|
|
32
|
+
_waist = 5.0
|
|
33
|
+
|
|
34
|
+
_angle = 8 * math.pi / 180
|
|
35
|
+
_vx8 = math.sin(_angle)
|
|
36
|
+
_vy8 = -math.cos(_angle)
|
|
37
|
+
|
|
38
|
+
_angle = 7 * math.pi / 180
|
|
39
|
+
_tm1550_vx = math.sin(_angle)
|
|
40
|
+
_tm1550_vy = -math.cos(_angle)
|
|
41
|
+
|
|
42
|
+
_angle = -21 * math.pi / 180
|
|
43
|
+
_te1550_vx = math.sin(_angle)
|
|
44
|
+
_te1550_vy = -math.cos(_angle)
|
|
45
|
+
|
|
46
|
+
_angle = -7 * math.pi / 180
|
|
47
|
+
_te895_vx = math.sin(_angle)
|
|
48
|
+
_te895_vy = -math.cos(_angle)
|
|
49
|
+
|
|
50
|
+
_component_data = {
|
|
51
|
+
"ANT_MMI_1x2_te1550_3dB_BB": (
|
|
52
|
+
"EBeam_SiN",
|
|
53
|
+
"ANT_MMI_1x2_te1550_3dB_BB",
|
|
54
|
+
[
|
|
55
|
+
((-12.88, 0.0), 0, "SiN_TE_1550_750"),
|
|
56
|
+
((12.88, -0.975), 180, "SiN_TE_1550_750"),
|
|
57
|
+
((12.88, 0.975), 180, "SiN_TE_1550_750"),
|
|
58
|
+
],
|
|
59
|
+
None,
|
|
60
|
+
),
|
|
61
|
+
"GC_SiN_TE_1550_8degOxide_BB": (
|
|
62
|
+
"EBeam_SiN",
|
|
63
|
+
"GC_SiN_TE_1550_8degOxide_BB",
|
|
64
|
+
[
|
|
65
|
+
((0.0, 0.0), 180, "SiN_TE_1550_750"),
|
|
66
|
+
((-29.7, 0.0), (_vx8, 0, _vy8), _waist, 90),
|
|
67
|
+
],
|
|
68
|
+
None,
|
|
69
|
+
),
|
|
70
|
+
"ebeam_MMI_2x2_5050_te1310": (
|
|
71
|
+
"EBeam_SiN",
|
|
72
|
+
"ULaval",
|
|
73
|
+
[
|
|
74
|
+
((-16.72, -1.2), 0, "SiN_TE_1550_800"),
|
|
75
|
+
((-16.72, 1.2), 0, "SiN_TE_1550_800"),
|
|
76
|
+
((16.72, -1.2), 180, "SiN_TE_1550_800"),
|
|
77
|
+
((16.72, 1.2), 180, "SiN_TE_1550_800"),
|
|
78
|
+
],
|
|
79
|
+
{"port_symmetries": _symmetries_mmi22},
|
|
80
|
+
),
|
|
81
|
+
# NOTE: no TE port at 1310 nm with 800 nm
|
|
82
|
+
"ebeam_YBranch_te1310": (
|
|
83
|
+
"EBeam_SiN",
|
|
84
|
+
"ULaval",
|
|
85
|
+
[
|
|
86
|
+
((-7.69, 0.0), 0, "SiN_TE_1550_800"),
|
|
87
|
+
((7.69, 0.7), 180, "SiN_TE_1550_800"),
|
|
88
|
+
((7.69, -0.7), 180, "SiN_TE_1550_800"),
|
|
89
|
+
],
|
|
90
|
+
{"port_symmetries": _symmetries_3port},
|
|
91
|
+
),
|
|
92
|
+
"ebeam_BondPad": (
|
|
93
|
+
"EBeam_SiN",
|
|
94
|
+
"ebeam_BondPad",
|
|
95
|
+
[],
|
|
96
|
+
None,
|
|
97
|
+
),
|
|
98
|
+
"ebeam_DC_2-1_te895": (
|
|
99
|
+
"EBeam_SiN",
|
|
100
|
+
"ebeam_DC_2-1_te895",
|
|
101
|
+
[
|
|
102
|
+
((-14.56, -2.285), 0, "SiN_TE_895_450"),
|
|
103
|
+
((-14.56, 2.285), 0, "SiN_TE_895_450"),
|
|
104
|
+
((14.56, -2.285), 180, "SiN_TE_895_450"),
|
|
105
|
+
((14.56, 2.285), 180, "SiN_TE_895_450"),
|
|
106
|
+
],
|
|
107
|
+
{"port_symmetries": _symmetries_directional_coupler},
|
|
108
|
+
),
|
|
109
|
+
"ebeam_DC_te895": (
|
|
110
|
+
"EBeam_SiN",
|
|
111
|
+
"ebeam_DC_te895",
|
|
112
|
+
[
|
|
113
|
+
((-14.137, -2.285), 0, "SiN_TE_895_450"),
|
|
114
|
+
((-14.137, 2.285), 0, "SiN_TE_895_450"),
|
|
115
|
+
((14.137, -2.285), 180, "SiN_TE_895_450"),
|
|
116
|
+
((14.137, 2.285), 180, "SiN_TE_895_450"),
|
|
117
|
+
],
|
|
118
|
+
{"port_symmetries": _symmetries_directional_coupler},
|
|
119
|
+
),
|
|
120
|
+
# WARN: Missing port (-6.0, 0.0).
|
|
121
|
+
# WARN: Missing port (6.0, 0.0).
|
|
122
|
+
# "ebeam_Polarizer_TM_1550_UQAM": (
|
|
123
|
+
# "EBeam_SiN",
|
|
124
|
+
# "ebeam_Polarizer_TM_1550_UQAM",
|
|
125
|
+
# [],
|
|
126
|
+
# None,
|
|
127
|
+
# ),
|
|
128
|
+
"ebeam_YBranch_895": (
|
|
129
|
+
"EBeam_SiN",
|
|
130
|
+
"ebeam_YBranch_895",
|
|
131
|
+
[
|
|
132
|
+
((0.0, 0.0), 0, "SiN_TE_895_450"),
|
|
133
|
+
((15.0, -2.75), 180, "SiN_TE_895_450"),
|
|
134
|
+
((15.0, 2.75), 180, "SiN_TE_895_450"),
|
|
135
|
+
],
|
|
136
|
+
{"port_symmetries": _symmetries_3port},
|
|
137
|
+
),
|
|
138
|
+
"ebeam_gc_te895": (
|
|
139
|
+
"EBeam_SiN",
|
|
140
|
+
"ebeam_gc_te895",
|
|
141
|
+
[
|
|
142
|
+
((-24.2, 0.0), 0, "SiN_TE_895_450"),
|
|
143
|
+
((8, 0), (_te895_vx, 0, _te895_vy), _waist, 90),
|
|
144
|
+
],
|
|
145
|
+
{"symmetry": (0, -1, 0), "bounds": ((None, -10, None), (25, 10, None))},
|
|
146
|
+
),
|
|
147
|
+
"ebeam_terminator_SiN_1550": (
|
|
148
|
+
"EBeam_SiN",
|
|
149
|
+
"ebeam_terminator_SiN_1550",
|
|
150
|
+
[((0.0, 0.0), 180, "SiN_TE_1550_750")],
|
|
151
|
+
{},
|
|
152
|
+
),
|
|
153
|
+
"ebeam_terminator_SiN_te895": (
|
|
154
|
+
"EBeam_SiN",
|
|
155
|
+
"ebeam_terminator_SiN_te895",
|
|
156
|
+
[((0.0, 0.0), 180, "SiN_TE_895_450")],
|
|
157
|
+
{},
|
|
158
|
+
),
|
|
159
|
+
"taper_SiN_750_3000": (
|
|
160
|
+
"EBeam_SiN",
|
|
161
|
+
"taper_SiN_750_3000",
|
|
162
|
+
[
|
|
163
|
+
((0.0, 0.0), 0, "SiN_TE_1550_750"),
|
|
164
|
+
((50.0, 0.0), 180, "MM_SiN_TE_1550_3000"),
|
|
165
|
+
],
|
|
166
|
+
{},
|
|
167
|
+
),
|
|
168
|
+
"GC_TE_1310_8degOxide_BB": (
|
|
169
|
+
"EBeam",
|
|
170
|
+
"GCs_BB",
|
|
171
|
+
[
|
|
172
|
+
((0.0, 0.0), 180, "TE_1310_350"),
|
|
173
|
+
((-20.4, 0.0), (_vx8, 0, _vy8), _waist, 90),
|
|
174
|
+
],
|
|
175
|
+
None,
|
|
176
|
+
),
|
|
177
|
+
"GC_TE_1550_8degOxide_BB": (
|
|
178
|
+
"EBeam",
|
|
179
|
+
"GCs_BB",
|
|
180
|
+
[
|
|
181
|
+
((0.0, 0.0), 180, "TE_1550_500"),
|
|
182
|
+
((-20.4, 0.0), (_vx8, 0, _vy8), _waist, 90),
|
|
183
|
+
],
|
|
184
|
+
None,
|
|
185
|
+
),
|
|
186
|
+
# NOTE: no TM port with width 350 nm
|
|
187
|
+
"GC_TM_1310_8degOxide_BB": (
|
|
188
|
+
"EBeam",
|
|
189
|
+
"GCs_BB",
|
|
190
|
+
[
|
|
191
|
+
((0.0, 0.0), 180, "TE_1310_350"),
|
|
192
|
+
((-20.4, 0.0), (_vx8, 0, _vy8), _waist, 0),
|
|
193
|
+
],
|
|
194
|
+
None,
|
|
195
|
+
),
|
|
196
|
+
"GC_TM_1550_8degOxide_BB": (
|
|
197
|
+
"EBeam",
|
|
198
|
+
"GCs_BB",
|
|
199
|
+
[
|
|
200
|
+
((0.0, 0.0), 180, "TM_1550_500"),
|
|
201
|
+
((-20.4, 0.0), (_vx8, 0, _vy8), _waist, 0),
|
|
202
|
+
],
|
|
203
|
+
None,
|
|
204
|
+
),
|
|
205
|
+
"ebeam_adiabatic_te1550": (
|
|
206
|
+
"EBeam",
|
|
207
|
+
"ebeam_adiabatic_te1550",
|
|
208
|
+
[
|
|
209
|
+
((0.1, -1.5), 0, "TE_1550_500"),
|
|
210
|
+
((0.1, 1.5), 0, "TE_1550_500"),
|
|
211
|
+
((195.9, -1.5), 180, "TE_1550_500"),
|
|
212
|
+
((195.9, 1.5), 180, "TE_1550_500"),
|
|
213
|
+
],
|
|
214
|
+
{},
|
|
215
|
+
),
|
|
216
|
+
"ebeam_adiabatic_tm1550": (
|
|
217
|
+
"EBeam",
|
|
218
|
+
"ebeam_adiabatic_tm1550",
|
|
219
|
+
[
|
|
220
|
+
((0.1, -1.5), 0, "TM_1550_500"),
|
|
221
|
+
((0.1, 1.5), 0, "TM_1550_500"),
|
|
222
|
+
((217.9, -1.5), 180, "TM_1550_500"),
|
|
223
|
+
((217.9, 1.5), 180, "TM_1550_500"),
|
|
224
|
+
],
|
|
225
|
+
{},
|
|
226
|
+
),
|
|
227
|
+
"ebeam_bdc_te1550": (
|
|
228
|
+
"EBeam",
|
|
229
|
+
"ebeam_bdc_te1550",
|
|
230
|
+
[
|
|
231
|
+
((-35.45, -2.35), 0, "TE_1550_500"),
|
|
232
|
+
((-35.45, 2.35), 0, "TE_1550_500"),
|
|
233
|
+
((35.3, -2.35), 180, "TE_1550_500"),
|
|
234
|
+
((35.3, 2.35), 180, "TE_1550_500"),
|
|
235
|
+
],
|
|
236
|
+
{},
|
|
237
|
+
),
|
|
238
|
+
"ebeam_crossing4": (
|
|
239
|
+
"EBeam",
|
|
240
|
+
"ebeam_crossing4",
|
|
241
|
+
[
|
|
242
|
+
((-4.8, 0.0), 0, "TE_1550_500"),
|
|
243
|
+
((4.8, 0.0), 180, "TE_1550_500"),
|
|
244
|
+
((0.0, -4.8), 90, "TE_1550_500"),
|
|
245
|
+
((0.0, 4.8), 270, "TE_1550_500"),
|
|
246
|
+
],
|
|
247
|
+
{"port_symmetries": _symmetries_crossing},
|
|
248
|
+
),
|
|
249
|
+
"ebeam_gc_te1550": (
|
|
250
|
+
"EBeam",
|
|
251
|
+
"ebeam_gc_te1550",
|
|
252
|
+
[
|
|
253
|
+
((0.0, 0.0), 180, "TE_1550_500"),
|
|
254
|
+
((-20.4, 0.0), (_te1550_vx, 0, _te1550_vy), _waist, 90),
|
|
255
|
+
],
|
|
256
|
+
{"symmetry": (0, -1, 0), "bounds": ((-33, -11, None), (None, 11, None))},
|
|
257
|
+
),
|
|
258
|
+
"ebeam_gc_tm1550": (
|
|
259
|
+
"EBeam",
|
|
260
|
+
"ebeam_gc_tm1550",
|
|
261
|
+
[
|
|
262
|
+
((0.0, 0.0), 180, "TM_1550_500"),
|
|
263
|
+
((-24.4, 0.0), (_tm1550_vx, 0, _tm1550_vy), _waist, 0),
|
|
264
|
+
],
|
|
265
|
+
{"symmetry": (0, 1, 0), "bounds": ((None, -11, None), (None, 11, None))},
|
|
266
|
+
),
|
|
267
|
+
"ebeam_splitter_swg_assist_te1310": (
|
|
268
|
+
"EBeam",
|
|
269
|
+
"ebeam_splitter_swg_assist_te1310",
|
|
270
|
+
[
|
|
271
|
+
((-63.001, -2.0), 0, "TE_1310_350"),
|
|
272
|
+
((-63.001, 2.0), 0, "TE_1310_350"),
|
|
273
|
+
((63.001, -2.0), 180, "TE_1310_350"),
|
|
274
|
+
((63.001, 2.0), 180, "TE_1310_350"),
|
|
275
|
+
],
|
|
276
|
+
{},
|
|
277
|
+
),
|
|
278
|
+
"ebeam_splitter_swg_assist_te1550": (
|
|
279
|
+
"EBeam",
|
|
280
|
+
"ebeam_splitter_swg_assist_te1550",
|
|
281
|
+
[
|
|
282
|
+
((-63.001, -1.975), 0, "TE_1550_500"),
|
|
283
|
+
((-63.001, 1.975), 0, "TE_1550_500"),
|
|
284
|
+
((63.001, -1.975), 180, "TE_1550_500"),
|
|
285
|
+
((63.001, 1.975), 180, "TE_1550_500"),
|
|
286
|
+
],
|
|
287
|
+
{},
|
|
288
|
+
),
|
|
289
|
+
"ebeam_terminator_te1310": (
|
|
290
|
+
"EBeam",
|
|
291
|
+
"ebeam_terminator_te1310",
|
|
292
|
+
[((0.0, 0.0), 180, "TE_1310_350")],
|
|
293
|
+
{},
|
|
294
|
+
),
|
|
295
|
+
"ebeam_terminator_te1550": (
|
|
296
|
+
"EBeam",
|
|
297
|
+
"ebeam_terminator_te1550",
|
|
298
|
+
[((0.0, 0.0), 180, "TE_1550_500")],
|
|
299
|
+
{},
|
|
300
|
+
),
|
|
301
|
+
"ebeam_terminator_tm1550": (
|
|
302
|
+
"EBeam",
|
|
303
|
+
"ebeam_terminator_tm1550",
|
|
304
|
+
[((0.0, 0.0), 180, "TM_1550_500")],
|
|
305
|
+
{},
|
|
306
|
+
),
|
|
307
|
+
"ebeam_y_1550": (
|
|
308
|
+
"EBeam",
|
|
309
|
+
"ebeam_y_1550",
|
|
310
|
+
[
|
|
311
|
+
((-7.4, 0.0), 0, "TE_1550_500"),
|
|
312
|
+
((7.4, -2.75), 180, "TE_1550_500"),
|
|
313
|
+
((7.4, 2.75), 180, "TE_1550_500"),
|
|
314
|
+
],
|
|
315
|
+
{"port_symmetries": _symmetries_3port},
|
|
316
|
+
),
|
|
317
|
+
"ebeam_y_adiabatic": (
|
|
318
|
+
"EBeam",
|
|
319
|
+
"ebeam_y_adiabatic",
|
|
320
|
+
[
|
|
321
|
+
((0.05, 0.0), 0, "TE-TM_1550_450"),
|
|
322
|
+
((50.05, -1.25), 180, "TE-TM_1550_450"),
|
|
323
|
+
((50.05, 1.25), 180, "TE-TM_1550_450"),
|
|
324
|
+
],
|
|
325
|
+
{"port_symmetries": _symmetries_3port},
|
|
326
|
+
),
|
|
327
|
+
"ebeam_y_adiabatic_500pin": (
|
|
328
|
+
"EBeam",
|
|
329
|
+
"ebeam_y_adiabatic_500pin",
|
|
330
|
+
[
|
|
331
|
+
((-1.0, 0.0), 0, "TE_1550_500"),
|
|
332
|
+
((51.0, -1.25), 180, "TE_1550_500"),
|
|
333
|
+
((51.0, 1.25), 180, "TE_1550_500"),
|
|
334
|
+
],
|
|
335
|
+
{"port_symmetries": _symmetries_3port},
|
|
336
|
+
),
|
|
337
|
+
"taper_si_simm_1310": (
|
|
338
|
+
"EBeam",
|
|
339
|
+
"taper_si_simm_1310",
|
|
340
|
+
# NOTE: no MM TM port at 1310 nm
|
|
341
|
+
[((50.0, 0.0), 180, "MM_TE_1550_3000"), ((0.0, 0.0), 0, "TE_1310_350")],
|
|
342
|
+
{},
|
|
343
|
+
),
|
|
344
|
+
"taper_si_simm_1550": (
|
|
345
|
+
"EBeam",
|
|
346
|
+
"taper_si_simm_1550",
|
|
347
|
+
[((50.0, 0.0), 180, "MM_TE_1550_3000"), ((0.0, 0.0), 0, "TE_1550_500")],
|
|
348
|
+
{},
|
|
349
|
+
),
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
component_names = set(_component_data.keys())
|
|
353
|
+
|
|
354
|
+
|
|
355
|
+
def component(
|
|
356
|
+
cell_name: str, technology: pf.Technology = None, tidy3d_model_kwargs: dict = {}
|
|
357
|
+
) -> pf.Component:
|
|
358
|
+
"""Load a component from the default PDK library.
|
|
359
|
+
|
|
360
|
+
Args:
|
|
361
|
+
cell_name (str): Name of the component to load.
|
|
362
|
+
technology (Technology): Technology for the created component.
|
|
363
|
+
tidy3d_model_kwargs (dict): Keyword arguments passed to the Tidy3D
|
|
364
|
+
model of the created component.
|
|
365
|
+
|
|
366
|
+
Returns:
|
|
367
|
+
Component: Component loaded from the default PDK library.
|
|
368
|
+
|
|
369
|
+
Note:
|
|
370
|
+
The available component names are listed in the module-level tuple
|
|
371
|
+
``component_names``.
|
|
372
|
+
"""
|
|
373
|
+
family, libname, port_data, kwargs = _component_data.get(cell_name, (None, None, None, None))
|
|
374
|
+
if family is None:
|
|
375
|
+
raise KeyError(f"{cell_name} is not a library component.")
|
|
376
|
+
|
|
377
|
+
if technology is None:
|
|
378
|
+
technology = pf.config.default_technology
|
|
379
|
+
if not technology.name.startswith("SiEPIC EBeam"):
|
|
380
|
+
warnings.warn(
|
|
381
|
+
f"Current default technology {technology.name} does not seem supported by the "
|
|
382
|
+
"SiEPIC EBeam UW component library",
|
|
383
|
+
RuntimeWarning,
|
|
384
|
+
1,
|
|
385
|
+
)
|
|
386
|
+
|
|
387
|
+
# Load library cell
|
|
388
|
+
gdsii = files("siepic_forge") / "library" / family / (libname + ".gds")
|
|
389
|
+
with as_file(gdsii) as fname:
|
|
390
|
+
c = pf.load_layout(fname, technology=technology)[cell_name]
|
|
391
|
+
|
|
392
|
+
# Add ports
|
|
393
|
+
z = technology.parametric_kwargs.get("top_oxide_thickness", -1.0)
|
|
394
|
+
if z > 0:
|
|
395
|
+
z += 0.1
|
|
396
|
+
else:
|
|
397
|
+
z = 1.0
|
|
398
|
+
for data in port_data:
|
|
399
|
+
if len(data) == 3:
|
|
400
|
+
port = pf.Port(data[0], data[1], technology.ports[data[2]])
|
|
401
|
+
else:
|
|
402
|
+
port = pf.GaussianPort(
|
|
403
|
+
data[0] + (z,),
|
|
404
|
+
data[1],
|
|
405
|
+
waist_radius=data[2],
|
|
406
|
+
polarization_angle=data[3],
|
|
407
|
+
)
|
|
408
|
+
c.add_port(port)
|
|
409
|
+
|
|
410
|
+
# Add model
|
|
411
|
+
if kwargs is not None:
|
|
412
|
+
kwargs = dict(kwargs)
|
|
413
|
+
kwargs.update(tidy3d_model_kwargs)
|
|
414
|
+
c.add_model(pf.Tidy3DModel(**kwargs), "Tidy3D")
|
|
415
|
+
|
|
416
|
+
return c
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
import tidy3d as td
|
|
2
|
+
import photonforge as pf
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
_Medium = td.components.medium.MediumType
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@pf.parametric_technology
|
|
9
|
+
def ebeam(
|
|
10
|
+
*,
|
|
11
|
+
si_thickness: float = 0.220,
|
|
12
|
+
si_slab_thickness: float = 0.090,
|
|
13
|
+
sin_thickness: float = 0.400,
|
|
14
|
+
si_mask_dilation: float = 0.0,
|
|
15
|
+
si_slab_mask_dilation: float = 0.0,
|
|
16
|
+
sin_mask_dilation: float = 0.0,
|
|
17
|
+
sidewall_angle: float = 0.0,
|
|
18
|
+
top_oxide_thickness: float = 2.0,
|
|
19
|
+
bottom_oxide_thickness: float = 3.017,
|
|
20
|
+
include_top_opening: bool = False,
|
|
21
|
+
include_substrate: bool = False,
|
|
22
|
+
sio2: _Medium = td.material_library["SiO2"]["Palik_Lossless"],
|
|
23
|
+
si: _Medium = td.material_library["cSi"]["Li1993_293K"],
|
|
24
|
+
sin: _Medium = td.material_library["Si3N4"]["Luke2015PMLStable"],
|
|
25
|
+
opening: _Medium = td.Medium(permittivity=1.0),
|
|
26
|
+
) -> pf.Technology:
|
|
27
|
+
"""Create a technology for the e-beam PDK.
|
|
28
|
+
|
|
29
|
+
The current version does not extrude heaters or metal layers, nor oxide
|
|
30
|
+
opening windows.
|
|
31
|
+
|
|
32
|
+
Args:
|
|
33
|
+
si_thickness (float): Full silicon layer thickness.
|
|
34
|
+
si_slab_thickness (float): Partially etched slab thickness in
|
|
35
|
+
silicon.
|
|
36
|
+
sin_thickness (float): SiN layer thinckness.
|
|
37
|
+
si_mask_dilation (float): Mask dilation for the full-thickness Si
|
|
38
|
+
layer.
|
|
39
|
+
si_slab_mask_dilation (float): Mask dilation for the partially
|
|
40
|
+
etched Si layer.
|
|
41
|
+
sin_mask_dilation (float): Mask dilation for the SiN layer.
|
|
42
|
+
sidewall_angle (float): Sidewall angle (in degrees) for Si and SiN
|
|
43
|
+
etching.
|
|
44
|
+
top_oxide_thickness (float): Thickness of the top oxide clad,
|
|
45
|
+
measured from the substrate.
|
|
46
|
+
bottom_oxide_thickness (float): Thickness of the bottom oxide clad.
|
|
47
|
+
include_top_opening (bool): Flag indicating wether or not to include
|
|
48
|
+
the region above the top oxide.
|
|
49
|
+
include_substrate (bool): Flag indicating wether or not to include
|
|
50
|
+
the silicon substrate.
|
|
51
|
+
sio2 (Medium): Background medium.
|
|
52
|
+
si (Medium): Silicon medium.
|
|
53
|
+
sin (Medium): Silicon nitride medium.
|
|
54
|
+
opening (Medium): Medium for openings.
|
|
55
|
+
|
|
56
|
+
Returns:
|
|
57
|
+
Technology: E-Beam PDK technology definition.
|
|
58
|
+
"""
|
|
59
|
+
|
|
60
|
+
layers = {
|
|
61
|
+
"Waveguide": pf.LayerSpec((1, 99), "Waveguides", "#ff80a818", "\\"),
|
|
62
|
+
"Si": pf.LayerSpec((1, 0), "Waveguides", "#ff80a818", "\\\\"),
|
|
63
|
+
"SiN": pf.LayerSpec((1, 5), "Waveguides", "#a6cee318", "\\\\"),
|
|
64
|
+
"Si slab": pf.LayerSpec((2, 0), "Waveguides", "#80a8ff18", "/"),
|
|
65
|
+
"Si_Litho193nm": pf.LayerSpec((1, 69), "Waveguides", "#cc80a818", "\\"),
|
|
66
|
+
"Oxide open (to BOX)": pf.LayerSpec((6, 0), "Waveguides", "#ffae0018", "\\"),
|
|
67
|
+
"Text": pf.LayerSpec((10, 0), "", "#0000ff18", "\\"),
|
|
68
|
+
"Si N": pf.LayerSpec((20, 0), "Doping", "#7000FF18", "\\\\"),
|
|
69
|
+
"Si N++": pf.LayerSpec((24, 0), "Doping", "#0000ff18", ":"),
|
|
70
|
+
"M1_heater": pf.LayerSpec((11, 0), "Metal", "#ebc63418", "xx"),
|
|
71
|
+
"M2_router": pf.LayerSpec((12, 0), "Metal", "#3471eb18", "xx"),
|
|
72
|
+
"M_Open": pf.LayerSpec((13, 0), "Metal", "#00000018", "xx"),
|
|
73
|
+
"VC": pf.LayerSpec((40, 0), "Metal", "#3a027f18", "xx"),
|
|
74
|
+
"FloorPlan": pf.LayerSpec((99, 0), "Misc", "#8000ff18", "hollow"),
|
|
75
|
+
"Deep Trench": pf.LayerSpec((201, 0), "Misc", "#c0c0c018", "solid"),
|
|
76
|
+
"Dicing": pf.LayerSpec((210, 0), "Misc", "#a0a0c018", "solid"),
|
|
77
|
+
"Chip design area": pf.LayerSpec((290, 0), "Misc", "#80005718", "hollow"),
|
|
78
|
+
"Keep out": pf.LayerSpec((202, 0), "Misc", "#a0a0c018", "//"),
|
|
79
|
+
"SEM": pf.LayerSpec((200, 0), "Misc", "#ff00ff18", "\\"),
|
|
80
|
+
"DevRec": pf.LayerSpec((68, 0), "SiEPIC", "#00408018", "hollow"),
|
|
81
|
+
"PinRec": pf.LayerSpec((1, 10), "SiEPIC", "#00408018", "/"),
|
|
82
|
+
"PinRecM": pf.LayerSpec((1, 11), "SiEPIC", "#00408018", "/"),
|
|
83
|
+
"FbrTgt": pf.LayerSpec((81, 0), "SiEPIC", "#00408018", "/"),
|
|
84
|
+
"Errors": pf.LayerSpec((999, 0), "SiEPIC", "#00008018", "/"),
|
|
85
|
+
"FDTD": pf.LayerSpec((733, 0), "SiEPIC", "#80005718", "hollow"),
|
|
86
|
+
"BlackBox": pf.LayerSpec((998, 0), "SiEPIC", "#00408018", "solid"),
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
extrusion_specs = [
|
|
90
|
+
pf.ExtrusionSpec(
|
|
91
|
+
pf.MaskSpec((1, 0), dilation=si_mask_dilation),
|
|
92
|
+
si,
|
|
93
|
+
(0, si_thickness),
|
|
94
|
+
sidewall_angle,
|
|
95
|
+
),
|
|
96
|
+
pf.ExtrusionSpec(
|
|
97
|
+
pf.MaskSpec((2, 0), dilation=si_slab_mask_dilation),
|
|
98
|
+
si,
|
|
99
|
+
(0, si_slab_thickness),
|
|
100
|
+
sidewall_angle,
|
|
101
|
+
),
|
|
102
|
+
pf.ExtrusionSpec(
|
|
103
|
+
pf.MaskSpec((1, 5), dilation=sin_mask_dilation),
|
|
104
|
+
sin,
|
|
105
|
+
(0, sin_thickness),
|
|
106
|
+
sidewall_angle,
|
|
107
|
+
),
|
|
108
|
+
pf.ExtrusionSpec(pf.MaskSpec((201, 0), (210, 0), "+"), opening, (-pf.Z_INF, pf.Z_INF)),
|
|
109
|
+
]
|
|
110
|
+
|
|
111
|
+
if include_top_opening:
|
|
112
|
+
extrusion_specs.insert(
|
|
113
|
+
0, pf.ExtrusionSpec(pf.MaskSpec(), opening, (top_oxide_thickness, pf.Z_INF))
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
if include_substrate:
|
|
117
|
+
extrusion_specs.insert(
|
|
118
|
+
0, pf.ExtrusionSpec(pf.MaskSpec(), si, (-pf.Z_INF, -bottom_oxide_thickness))
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
ports = {
|
|
122
|
+
"TE_1550_500": pf.PortSpec(
|
|
123
|
+
description="Strip TE 1550 nm, w=500 nm",
|
|
124
|
+
width=2.0,
|
|
125
|
+
limits=(-1, 1 + si_thickness),
|
|
126
|
+
num_modes=1,
|
|
127
|
+
target_neff=3.5,
|
|
128
|
+
path_profiles=((0.5, 0.0, (1, 0)),),
|
|
129
|
+
),
|
|
130
|
+
"TE_1310_410": pf.PortSpec(
|
|
131
|
+
description="Strip TE 1310 nm, w=410 nm",
|
|
132
|
+
width=2.0,
|
|
133
|
+
limits=(-1, 1 + si_thickness),
|
|
134
|
+
num_modes=1,
|
|
135
|
+
target_neff=3.5,
|
|
136
|
+
path_profiles=((0.41, 0.0, (1, 0)),),
|
|
137
|
+
),
|
|
138
|
+
"TE_1310_350": pf.PortSpec(
|
|
139
|
+
description="Strip TE 1310 nm, w=350 nm",
|
|
140
|
+
width=2.0,
|
|
141
|
+
limits=(-1, 1 + si_thickness),
|
|
142
|
+
num_modes=1,
|
|
143
|
+
target_neff=3.5,
|
|
144
|
+
path_profiles=((0.35, 0.0, (1, 0)),),
|
|
145
|
+
),
|
|
146
|
+
"TM_1550_500": pf.PortSpec(
|
|
147
|
+
description="Strip TM 1550 nm, w=500 nm",
|
|
148
|
+
width=2.5,
|
|
149
|
+
limits=(-1, 1 + si_thickness),
|
|
150
|
+
num_modes=2,
|
|
151
|
+
target_neff=3.5,
|
|
152
|
+
path_profiles=((0.5, 0.0, (1, 0)),),
|
|
153
|
+
),
|
|
154
|
+
"TE-TM_1550_450": pf.PortSpec(
|
|
155
|
+
description="Strip TE-TM 1550, w=450 nm",
|
|
156
|
+
width=2.0,
|
|
157
|
+
limits=(-1, 1 + si_thickness),
|
|
158
|
+
num_modes=2,
|
|
159
|
+
target_neff=3.5,
|
|
160
|
+
path_profiles=((0.45, 0.0, (1, 0)),),
|
|
161
|
+
),
|
|
162
|
+
"MM_TE_1550_2000": pf.PortSpec(
|
|
163
|
+
description="Multimode Strip TE 1550 nm, w=2000 nm",
|
|
164
|
+
width=6.0,
|
|
165
|
+
limits=(-2, 2 + si_thickness),
|
|
166
|
+
num_modes=10,
|
|
167
|
+
target_neff=3.5,
|
|
168
|
+
path_profiles=((2.0, 0.0, (1, 0)),),
|
|
169
|
+
),
|
|
170
|
+
"MM_TE_1550_3000": pf.PortSpec(
|
|
171
|
+
description="Multimode Strip TE 1550 nm, w=3000 nm",
|
|
172
|
+
width=6.0,
|
|
173
|
+
limits=(-2, 2 + si_thickness),
|
|
174
|
+
num_modes=14,
|
|
175
|
+
target_neff=3.5,
|
|
176
|
+
path_profiles=((3.0, 0.0, (1, 0)),),
|
|
177
|
+
),
|
|
178
|
+
"Slot_TE_1550_500": pf.PortSpec(
|
|
179
|
+
description="Slot TE 1550 nm, w=500 nm, gap=100nm",
|
|
180
|
+
width=2.0,
|
|
181
|
+
limits=(-1, 1 + si_thickness),
|
|
182
|
+
num_modes=1,
|
|
183
|
+
target_neff=3.5,
|
|
184
|
+
path_profiles=((0.2, -0.15, (1, 0)), (0.2, 0.15, (1, 0))),
|
|
185
|
+
),
|
|
186
|
+
"eskid_TE_1550": pf.PortSpec(
|
|
187
|
+
description="eskid TE 1550",
|
|
188
|
+
width=3.31,
|
|
189
|
+
limits=(-1, 1 + si_thickness),
|
|
190
|
+
num_modes=1,
|
|
191
|
+
target_neff=3.5,
|
|
192
|
+
path_profiles=(
|
|
193
|
+
(0.35, 0.0, (1, 0)),
|
|
194
|
+
(0.06, 0.265, (1, 0)),
|
|
195
|
+
(0.06, -0.265, (1, 0)),
|
|
196
|
+
(0.06, 0.385, (1, 0)),
|
|
197
|
+
(0.06, -0.385, (1, 0)),
|
|
198
|
+
(0.06, 0.505, (1, 0)),
|
|
199
|
+
(0.06, -0.505, (1, 0)),
|
|
200
|
+
(0.06, 0.625, (1, 0)),
|
|
201
|
+
(0.06, -0.625, (1, 0)),
|
|
202
|
+
),
|
|
203
|
+
),
|
|
204
|
+
"Rib_TE_1550_500": pf.PortSpec(
|
|
205
|
+
description="Rib (90 nm slab) TE 1550 nm, w=500 nm",
|
|
206
|
+
width=2.5,
|
|
207
|
+
limits=(-1, 1 + si_thickness),
|
|
208
|
+
num_modes=1,
|
|
209
|
+
target_neff=3.5,
|
|
210
|
+
path_profiles=((0.5, 0.0, (1, 0)), (3.0, 0.0, (2, 0))),
|
|
211
|
+
),
|
|
212
|
+
"Rib_TE_1310_350": pf.PortSpec(
|
|
213
|
+
description="Rib (90 nm slab) TE 1310 nm, w=350 nm",
|
|
214
|
+
width=2.35,
|
|
215
|
+
limits=(-1, 1 + si_thickness),
|
|
216
|
+
num_modes=1,
|
|
217
|
+
target_neff=3.5,
|
|
218
|
+
path_profiles=((0.35, 0.0, (1, 0)), (3.0, 0.0, (2, 0))),
|
|
219
|
+
),
|
|
220
|
+
"SiN_TE_895_450": pf.PortSpec(
|
|
221
|
+
description="SiN Strip TE 895 nm, w=450 nm",
|
|
222
|
+
width=4.0,
|
|
223
|
+
limits=(-2.0, 2.0 + sin_thickness),
|
|
224
|
+
num_modes=2,
|
|
225
|
+
target_neff=2.1,
|
|
226
|
+
path_profiles=((0.45, 0.0, (1, 5)),),
|
|
227
|
+
),
|
|
228
|
+
"SiN_TE_1550_750": pf.PortSpec(
|
|
229
|
+
description="SiN Strip TE 1550 nm, w=750 nm",
|
|
230
|
+
width=3.0,
|
|
231
|
+
limits=(-1, 1 + sin_thickness),
|
|
232
|
+
num_modes=1,
|
|
233
|
+
target_neff=2.1,
|
|
234
|
+
path_profiles=((0.75, 0.0, (1, 5)),),
|
|
235
|
+
),
|
|
236
|
+
"SiN_TE_1550_800": pf.PortSpec(
|
|
237
|
+
description="SiN Strip TE 1550 nm, w=800 nm",
|
|
238
|
+
width=3.0,
|
|
239
|
+
limits=(-1, 1 + sin_thickness),
|
|
240
|
+
num_modes=1,
|
|
241
|
+
target_neff=2.1,
|
|
242
|
+
path_profiles=((0.8, 0.0, (1, 5)),),
|
|
243
|
+
),
|
|
244
|
+
"SiN_TE_1550_1000": pf.PortSpec(
|
|
245
|
+
description="SiN Strip TE 1550 nm, w=1000 nm",
|
|
246
|
+
width=3.0,
|
|
247
|
+
limits=(-1, 1 + sin_thickness),
|
|
248
|
+
num_modes=1,
|
|
249
|
+
target_neff=2.1,
|
|
250
|
+
path_profiles=((1.0, 0.0, (1, 5)),),
|
|
251
|
+
),
|
|
252
|
+
"SiN_TM_1550_1000": pf.PortSpec(
|
|
253
|
+
description="SiN Strip TM 1550 nm, w=1000 nm",
|
|
254
|
+
width=3.0,
|
|
255
|
+
limits=(-1.5, 1.5 + sin_thickness),
|
|
256
|
+
num_modes=2,
|
|
257
|
+
target_neff=2.1,
|
|
258
|
+
path_profiles=((1.0, 0.0, (1, 5)),),
|
|
259
|
+
),
|
|
260
|
+
"SiN_TE_1310_750": pf.PortSpec(
|
|
261
|
+
description="SiN Strip TE 1310 nm, w=750 nm",
|
|
262
|
+
width=3.0,
|
|
263
|
+
limits=(-1, 1 + sin_thickness),
|
|
264
|
+
num_modes=1,
|
|
265
|
+
target_neff=2.1,
|
|
266
|
+
path_profiles=((0.75, 0.0, (1, 5)),),
|
|
267
|
+
),
|
|
268
|
+
"SiN_TM_1310_750": pf.PortSpec(
|
|
269
|
+
description="SiN Strip TM 1310 nm, w=750 nm",
|
|
270
|
+
width=3.0,
|
|
271
|
+
limits=(-1.5, 1.5 + sin_thickness),
|
|
272
|
+
num_modes=2,
|
|
273
|
+
target_neff=2.1,
|
|
274
|
+
path_profiles=((0.75, 0.0, (1, 5)),),
|
|
275
|
+
),
|
|
276
|
+
"MM_SiN_TE_1550_3000": pf.PortSpec(
|
|
277
|
+
description="Multimode SiN Strip TE 1550 nm, w=3000 nm",
|
|
278
|
+
width=8.0,
|
|
279
|
+
limits=(-2.5, 2.5 + sin_thickness),
|
|
280
|
+
num_modes=6,
|
|
281
|
+
target_neff=2.1,
|
|
282
|
+
path_profiles=((3.0, 0.0, (1, 5)),),
|
|
283
|
+
),
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
result = pf.Technology("SiEPIC EBeam", "0.4.11", layers, extrusion_specs, ports, sio2)
|
|
287
|
+
result.random_variables = [
|
|
288
|
+
pf.monte_carlo.RandomVariable("si_thickness", value=0.22, stdev=0.0223 / 6),
|
|
289
|
+
pf.monte_carlo.RandomVariable("bottom_oxide_thickness", value=3.017, stdev=0.006 / 6),
|
|
290
|
+
]
|
|
291
|
+
return result
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
Copyright 2024 Flexcompute Inc.
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
4
|
+
this software and associated documentation files (the “Software”), to deal in
|
|
5
|
+
the Software without restriction, including without limitation the rights to
|
|
6
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
|
7
|
+
of the Software, and to permit persons to whom the Software is furnished to do
|
|
8
|
+
so, subject to the following conditions:
|
|
9
|
+
|
|
10
|
+
The above copyright notice and this permission notice shall be included in all
|
|
11
|
+
copies or substantial portions of the Software.
|
|
12
|
+
|
|
13
|
+
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
16
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
17
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
19
|
+
SOFTWARE.
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: siepic-forge
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Author-email: "Flexcompute Inc." <info@flexcompute.com>
|
|
5
|
+
Description-Content-Type: text/markdown
|
|
6
|
+
License-File: LICENSE
|
|
7
|
+
Requires-Dist: photonforge ~=1.0.0rc1
|
|
8
|
+
Provides-Extra: test
|
|
9
|
+
Requires-Dist: pytest >=7.2 ; extra == 'test'
|
|
10
|
+
|
|
11
|
+
# SiEPIC Forge
|
|
12
|
+
|
|
13
|
+
This python module implements the [SiEPIC EBeam
|
|
14
|
+
PDK](https://github.com/SiEPIC/SiEPIC_EBeam_PDK) PDK as components and
|
|
15
|
+
technology specification for
|
|
16
|
+
[PhotonForge](https://docs.flexcompute.com/projects/photonforge/)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
## Installation
|
|
20
|
+
|
|
21
|
+
### Python interface
|
|
22
|
+
|
|
23
|
+
Installation via `pip`:
|
|
24
|
+
|
|
25
|
+
pip install siepic-forge
|
|
26
|
+
|
|
27
|
+
### PhotonForge Web UI
|
|
28
|
+
|
|
29
|
+
In the Tidy3D web interface, go to your [*Account
|
|
30
|
+
Center*](https://tidy3d.simulation.cloud/account) and upload the token file
|
|
31
|
+
(.tok) under *PhotonForge Libraries* to enable this module.
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
## Usage
|
|
35
|
+
|
|
36
|
+
The simplest way to use the this PDK in PhotonForge is to set its technology as
|
|
37
|
+
default:
|
|
38
|
+
|
|
39
|
+
import photonforge as pf
|
|
40
|
+
import siepic_forge as siepic
|
|
41
|
+
|
|
42
|
+
tech = siepic.ebeam()
|
|
43
|
+
pf.config.default_technology = tech
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
The `ebeam` function creates a parametric technology and accepts a number of
|
|
47
|
+
parameters to fine-tune the technology.
|
|
48
|
+
|
|
49
|
+
PDK components are available through the `component` function, which takes a
|
|
50
|
+
component name as first argument. The list of component names is available as a
|
|
51
|
+
set `component_names`:
|
|
52
|
+
|
|
53
|
+
print(siepic.component_names)
|
|
54
|
+
|
|
55
|
+
pdk_component = siepic.component("ebeam_y_1550")
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
More information can be obtained in the documentation for each function:
|
|
59
|
+
|
|
60
|
+
help(siepic.ebeam)
|
|
61
|
+
|
|
62
|
+
help(siepic.component)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
## Warnings
|
|
66
|
+
|
|
67
|
+
Please note that the 3D structures obtained by extrusion through this module's
|
|
68
|
+
technologies are a best approximation of the intended fabricated structures,
|
|
69
|
+
but the actual final dimensions may differ due to several fabrication-specific
|
|
70
|
+
effects. In particular, doping profiles are represented with hard-boundary,
|
|
71
|
+
homogeneous solids, but, in practice will present process-dependent variations
|
|
72
|
+
with smooth boundaries.
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
## Third-Party Licenses
|
|
76
|
+
|
|
77
|
+
- [`SiEPIC_EBeam_PDK`](https://github.com/SiEPIC/SiEPIC_EBeam_PDK)
|
|
78
|
+
|
|
79
|
+
> This project is licensed under the terms of the MIT license.
|
|
80
|
+
>
|
|
81
|
+
> Copyright (c) 2016-2020, Lukas Chrostowski and contributors
|
|
82
|
+
>
|
|
83
|
+
> Permission is hereby granted, free of charge, to any person obtaining a
|
|
84
|
+
> copy of this software and associated documentation files (the "Software"),
|
|
85
|
+
> to deal in the Software without restriction, including without limitation
|
|
86
|
+
> the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
87
|
+
> and/or sell copies of the Software, and to permit persons to whom the
|
|
88
|
+
> Software is furnished to do so, subject to the following conditions:
|
|
89
|
+
>
|
|
90
|
+
> The above copyright notice and this permission notice shall be included in
|
|
91
|
+
> all copies or substantial portions of the Software.
|
|
92
|
+
>
|
|
93
|
+
> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
94
|
+
> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
95
|
+
> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
96
|
+
> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
97
|
+
> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
98
|
+
> FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
99
|
+
> DEALINGS IN THE SOFTWARE.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
siepic_forge/__init__.py,sha256=pLMxZqzR5bbVHcUQpzSA6DZYpPLeNbYYz2jqOotLod4,103
|
|
2
|
+
siepic_forge/component.py,sha256=1mliBavvE53OvRMOI0su2J80acAByH3PPovt-i5ulbs,11926
|
|
3
|
+
siepic_forge/technology.py,sha256=1XfM4me4XRrgFimKXpTiRDtqUjSBiiRiOArAgNECTwA,11130
|
|
4
|
+
siepic_forge/library/EBeam/GCs_BB.gds,sha256=bM4YdbvNZJovRI2TB3yl5_LrOmJsWu2277tMu1UUrF8,29234
|
|
5
|
+
siepic_forge/library/EBeam/ebeam_adiabatic_te1550.gds,sha256=KXrOtatWZ4OuHg1DXRqiwvtafK8KWhvSpC2yTieWmL8,5072
|
|
6
|
+
siepic_forge/library/EBeam/ebeam_adiabatic_tm1550.gds,sha256=aZpiw-C0KaYhI5b4kb2BU0sBbI9p7o6BRszGWgkkgls,5072
|
|
7
|
+
siepic_forge/library/EBeam/ebeam_bdc_te1550.gds,sha256=t-c-HG_-xoKTT9BC0FC3xf3nr7ErPAyRyq-12lyPSuU,7674
|
|
8
|
+
siepic_forge/library/EBeam/ebeam_crossing4.gds,sha256=mF55TxZzLMBqIWyYHJbqDAdxmyaRG-mgFhDjENYb83M,1566
|
|
9
|
+
siepic_forge/library/EBeam/ebeam_gc_te1550.gds,sha256=J7X5g1iLgR9bCe_IsKQw10sAFEB7aCVu33Gj1EkvOrg,115348
|
|
10
|
+
siepic_forge/library/EBeam/ebeam_gc_tm1550.gds,sha256=J1PWiHFO5yQxq1h4SZLOtDTipuXQiggddaHg6qrPhxU,92308
|
|
11
|
+
siepic_forge/library/EBeam/ebeam_splitter_swg_assist_te1310.gds,sha256=mnCzNgGccWy_SjQ0k44eM6hB2jx-_owLT9s4_qTDoek,36446
|
|
12
|
+
siepic_forge/library/EBeam/ebeam_splitter_swg_assist_te1550.gds,sha256=S3AdXfgC6OI_nF_ajLexOK4HIv_gdPND1J1p4Ompvv8,36438
|
|
13
|
+
siepic_forge/library/EBeam/ebeam_terminator_te1310.gds,sha256=kMkyK1gfYthM1CVGXRnu2rmgYgBL70n8uRrWQiykx10,756
|
|
14
|
+
siepic_forge/library/EBeam/ebeam_terminator_te1550.gds,sha256=tjzqkKHBjK3QmNqNY2S26tCsn-zHO2-ah4RhtdNR-kQ,756
|
|
15
|
+
siepic_forge/library/EBeam/ebeam_terminator_tm1550.gds,sha256=Jw3c735tR8C-R3ka4jJXzkNs5R1HDrMK49eT55CdtRg,692
|
|
16
|
+
siepic_forge/library/EBeam/ebeam_y_1550.gds,sha256=pGbtG0Fv46yqM359J7Vh0JPA3DtV41tCprMQmBOdJLU,12006
|
|
17
|
+
siepic_forge/library/EBeam/ebeam_y_adiabatic.gds,sha256=hDDdtByXcTUra6YCO_wZHJKSDjjprYkTLyjh-mxvMZM,15170
|
|
18
|
+
siepic_forge/library/EBeam/ebeam_y_adiabatic_500pin.gds,sha256=yw8oymx5nDV2-3UPY4tSTRd0lf7t6GDAGG4Az9_VCDk,15176
|
|
19
|
+
siepic_forge/library/EBeam/taper_si_simm_1310.gds,sha256=DYXflob03z33_wNtx49Z52Uczn0-9Pf2KnHyy4kmm4c,638
|
|
20
|
+
siepic_forge/library/EBeam/taper_si_simm_1550.gds,sha256=9OA2ze0oY_IS336qYuwaYufkccTKI7aNL8oAIkUvHlw,650
|
|
21
|
+
siepic_forge/library/EBeam_SiN/ANT_MMI_1x2_te1550_3dB_BB.gds,sha256=PIMEx_KvWEmugrqgBZ8Wu2ihWh65uUi6TJ3NPL59CKk,41142
|
|
22
|
+
siepic_forge/library/EBeam_SiN/GC_SiN_TE_1550_8degOxide_BB.gds,sha256=1hKkk-QoC-JxmdNorUBeYaAZYAtyIjbALFUz2TNtI_A,5272
|
|
23
|
+
siepic_forge/library/EBeam_SiN/ULaval.gds,sha256=x4oF8esrQVN5_LtSiqbnqgM_dCqEhZp-9aoIS6_NxD4,3752
|
|
24
|
+
siepic_forge/library/EBeam_SiN/ebeam_BondPad.gds,sha256=B3gcdcetfAC3lj8wYyHZbs3DLf4BOGzGo6Hr5Nq_5CY,844
|
|
25
|
+
siepic_forge/library/EBeam_SiN/ebeam_DC_2-1_te895.gds,sha256=YJ2sygEo6sPGWTY55BA--Z9IDRJdMRJzm5kUvZ9p1rE,3776
|
|
26
|
+
siepic_forge/library/EBeam_SiN/ebeam_DC_te895.gds,sha256=ehKkD98Ez0mgrNyucYRJdqB_Q29ZB8jd0wPxVT02S-I,3852
|
|
27
|
+
siepic_forge/library/EBeam_SiN/ebeam_Polarizer_TM_1550_UQAM.gds,sha256=eymP8D1ddwuSAB0h6Pd1sIlJovaU9cYDYMIRlTwN_ss,14970
|
|
28
|
+
siepic_forge/library/EBeam_SiN/ebeam_YBranch_895.gds,sha256=q8tT6ozGYCOyA-Nh3qApty-ZCob4EAgld9qedDfcXt8,11994
|
|
29
|
+
siepic_forge/library/EBeam_SiN/ebeam_gc_te895.gds,sha256=xplHRpcrynwhCNy9WceSr2Y3K24JbKeYziPP383OcDY,48184
|
|
30
|
+
siepic_forge/library/EBeam_SiN/ebeam_terminator_SiN_1550.gds,sha256=dwngVtq0dIUSOQmA1HOWL7rj842ZjPXva-V_1vDFngQ,532
|
|
31
|
+
siepic_forge/library/EBeam_SiN/ebeam_terminator_SiN_te895.gds,sha256=GkoGhSOWmqbdj17xQGe1Jn_YHuHxk7hoJ_5T_ayE8go,710
|
|
32
|
+
siepic_forge/library/EBeam_SiN/taper_SiN_750_3000.gds,sha256=AroOmi_wcpgWhJlb0nU0nRCUXDwKCifEpQssvS7jlz4,480
|
|
33
|
+
siepic_forge-1.0.0.dist-info/LICENSE,sha256=_IcpRPkknVPr3mMG9iaMPIX6PrxrgRwohBs5mAGclzU,1064
|
|
34
|
+
siepic_forge-1.0.0.dist-info/METADATA,sha256=wYgp50rtWJfh6pcbhRYcTIbhD4X4Xyz1bsek9EgniwA,3322
|
|
35
|
+
siepic_forge-1.0.0.dist-info/WHEEL,sha256=cVxcB9AmuTcXqmwrtPhNK88dr7IR_b6qagTj0UvIEbY,91
|
|
36
|
+
siepic_forge-1.0.0.dist-info/top_level.txt,sha256=LHN4bZ2Us-Hi-TnKa-7zcWISQj7vFkvttWv5PTdVJxo,13
|
|
37
|
+
siepic_forge-1.0.0.dist-info/RECORD,,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
siepic_forge
|