|
1 | 1 | import tidy3d as td |
2 | 2 | import photonforge as pf |
3 | | - |
4 | | - |
5 | | -_Medium = td.components.medium.MediumType |
| 3 | +import photonforge.typing as pft |
6 | 4 |
|
7 | 5 |
|
8 | 6 | @pf.parametric_technology |
9 | 7 | def ebeam( |
10 | 8 | *, |
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 | | - metal_si_separation: float = 2.2, |
19 | | - router_thickness: float = 0.6, |
20 | | - heater_thickness: float = 0.2, |
21 | | - top_oxide_thickness: float = 0.3, |
22 | | - bottom_oxide_thickness: float = 3.017, |
| 9 | + si_thickness: pft.PositiveDimension = 0.220, |
| 10 | + si_slab_thickness: pft.PositiveDimension = 0.090, |
| 11 | + sin_thickness: pft.PositiveDimension = 0.400, |
| 12 | + si_mask_dilation: pft.Coordinate = 0.0, |
| 13 | + si_slab_mask_dilation: pft.Coordinate = 0.0, |
| 14 | + sin_mask_dilation: pft.Coordinate = 0.0, |
| 15 | + sidewall_angle: pft.Angle = 0.0, |
| 16 | + metal_si_separation: pft.Dimension = 2.2, |
| 17 | + router_thickness: pft.PositiveDimension = 0.6, |
| 18 | + heater_thickness: pft.PositiveDimension = 0.2, |
| 19 | + top_oxide_thickness: pft.PositiveDimension = 0.3, |
| 20 | + bottom_oxide_thickness: pft.PositiveDimension = 3.017, |
23 | 21 | include_top_opening: bool = False, |
24 | 22 | include_substrate: bool = False, |
25 | | - sio2: dict[str, _Medium] = { |
| 23 | + sio2: dict[str, pft.Medium] = { |
26 | 24 | "optical": td.material_library["SiO2"]["Palik_Lossless"], |
27 | 25 | "electrical": td.Medium(permittivity=4.2, name="SiO2"), |
28 | 26 | }, |
29 | | - si: dict[str, _Medium] = { |
| 27 | + si: dict[str, pft.Medium] = { |
30 | 28 | "optical": td.material_library["cSi"]["Li1993_293K"], |
31 | 29 | "electrical": td.Medium(permittivity=12.3, name="Si"), |
32 | 30 | }, |
33 | | - sin: dict[str, _Medium] = { |
| 31 | + sin: dict[str, pft.Medium] = { |
34 | 32 | "optical": td.material_library["Si3N4"]["Luke2015PMLStable"], |
35 | 33 | "electrical": td.Medium(permittivity=7.5, name="Si3N4"), |
36 | 34 | }, |
37 | | - router_metal: dict[str, _Medium] = { |
| 35 | + router_metal: dict[str, pft.Medium] = { |
38 | 36 | "optical": td.material_library["Au"]["JohnsonChristy1972"], |
39 | 37 | "electrical": td.LossyMetalMedium( |
40 | 38 | conductivity=17, |
41 | 39 | frequency_range=[0.1e9, 200e9], |
42 | 40 | fit_param=td.SurfaceImpedanceFitterParam(max_num_poles=16), |
43 | 41 | ), |
44 | 42 | }, |
45 | | - heater_metal: dict[str, _Medium] = { |
| 43 | + heater_metal: dict[str, pft.Medium] = { |
46 | 44 | "optical": td.material_library["W"]["Werner2009"], |
47 | 45 | "electrical": td.LossyMetalMedium( |
48 | 46 | conductivity=1.6, |
49 | 47 | frequency_range=[0.1e9, 200e9], |
50 | 48 | fit_param=td.SurfaceImpedanceFitterParam(max_num_poles=16), |
51 | 49 | ), |
52 | 50 | }, |
53 | | - opening: _Medium = td.Medium(permittivity=1.0), |
| 51 | + opening: pft.Medium = td.Medium(permittivity=1.0), |
54 | 52 | ) -> pf.Technology: |
55 | 53 | """Create a technology for the e-beam PDK. |
56 | 54 |
|
57 | 55 | The current version does not extrude heaters or metal layers, nor oxide |
58 | 56 | opening windows. |
59 | 57 |
|
60 | 58 | Args: |
61 | | - si_thickness (float): Full silicon layer thickness. |
62 | | - si_slab_thickness (float): Partially etched slab thickness in |
63 | | - silicon. |
64 | | - sin_thickness (float): SiN layer thickness. |
65 | | - si_mask_dilation (float): Mask dilation for the full-thickness Si |
| 59 | + si_thickness: Full silicon layer thickness. |
| 60 | + si_slab_thickness: Partially etched slab thickness in silicon. |
| 61 | + sin_thickness: SiN layer thickness. |
| 62 | + si_mask_dilation: Mask dilation for the full-thickness Si layer. |
| 63 | + si_slab_mask_dilation: Mask dilation for the partially etched Si |
| 64 | + layer. |
| 65 | + sin_mask_dilation: Mask dilation for the SiN layer. |
| 66 | + sidewall_angle: Sidewall angle (in degrees) for Si and SiN etching. |
| 67 | + metal_si_separation: Separation between the metal layers and the Si |
66 | 68 | layer. |
67 | | - si_slab_mask_dilation (float): Mask dilation for the partially |
68 | | - etched Si layer. |
69 | | - sin_mask_dilation (float): Mask dilation for the SiN layer. |
70 | | - sidewall_angle (float): Sidewall angle (in degrees) for Si and SiN |
71 | | - etching. |
72 | | - metal_si_separation (float): Separation between the metal layers and |
73 | | - the Si layer. |
74 | | - router_thickness (float): Thickness of the routing metal layer. |
75 | | - heater_thickness (float): Thickness of the heater metal layer. |
76 | | - top_oxide_thickness (float): Thickness of the top oxide clad, |
77 | | - measured from the substrate. |
78 | | - bottom_oxide_thickness (float): Thickness of the bottom oxide clad. |
79 | | - include_top_opening (bool): Flag indicating whether or not to |
80 | | - include the region above the top oxide. |
81 | | - include_substrate (bool): Flag indicating whether or not to include |
82 | | - the silicon substrate. |
83 | | - sio2 (Medium): Background medium. |
84 | | - si (Medium): Silicon medium. |
85 | | - sin (Medium): Silicon nitride medium. |
86 | | - router_metal (Medium): Routing metal medium. |
87 | | - heater_metal (Medium): Heater metal medium. |
88 | | - opening (Medium): Medium for openings. |
| 69 | + router_thickness: Thickness of the routing metal layer. |
| 70 | + heater_thickness: Thickness of the heater metal layer. |
| 71 | + top_oxide_thickness: Thickness of the top oxide clad, measured from |
| 72 | + the substrate. |
| 73 | + bottom_oxide_thickness: Thickness of the bottom oxide clad. |
| 74 | + include_top_opening: Flag indicating whether or not to include the |
| 75 | + region above the top oxide. |
| 76 | + include_substrate: Flag indicating whether or not to include the |
| 77 | + silicon substrate. |
| 78 | + sio2: Background medium. |
| 79 | + si: Silicon medium. |
| 80 | + sin: Silicon nitride medium. |
| 81 | + router_metal: Routing metal medium. |
| 82 | + heater_metal: Heater metal medium. |
| 83 | + opening: Medium for openings. |
89 | 84 |
|
90 | 85 | Returns: |
91 | 86 | Technology: E-Beam PDK technology definition. |
|
0 commit comments