Luceda PDK for SiEPIC
The Luceda PDK for SiEPIC allows to design and tape out to SiEPICfab, the Canadian SiEPIC silicon photonics foundry.
Several training courses are organized on the basis of this PDK. In the edX Silicon Photonics Design, Fabrication and Data Analysis course, which runs for 6 weeks, you can design photonic circuits using this PDK, submit your design for fabrication and have it tested.
Contents
PDK Documentation
This document explains how to use the Luceda Process Design Kit (PDK) for SiEPICfab (version 0.3.36.luceda3).
The PDK can be used from Luceda IPKISS, providing the following functionality:
definition and layout of circuits using SiEPIC’s predefined library of cells (building blocks), which is entirely available within IPKISS,
waveguide routing using the waveguide types defined, or custom defined waveguides following design rules,
definition of custom devices using defined layers and design rules,
simulation of custom devices using IPKISS’ built-in solvers and IPKISS Links to 3rd party tools such as Dassault Systemes Simulia CST Studio Suite ® and Ansys Lumerical FDTD,
circuit editing from Siemens L-Edit using Luceda Link for Siemens EDA.
This documentation explains how to get started with the PDK, lists the cells that are available and documents the technology for custom design.
Document information
This PDK is an implementation of SiEPICfab’s PDK.
License
The GDSII library source files from SiEPIC GitHub PDK, replicated here under the
siepic/ipkiss/siepic/gds
directory, are distributed under the terms of an MIT license.Other than these original GDSII files, all files in this PDK implementation are copyrighted by Luceda Photonics © 2020, under the following terms and conditions:
This version of Luceda Academy and related packages (hereafter referred to as Luceda Academy) is distributed under a proprietary License by Luceda. It does allow you to develop and distribute add-ons or plug-ins, but does not allow redistribution of Luceda Academy itself (in original or modified form). This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For the details of the licensing contract and the conditions under which you may use this software, we refer to the EULA which was distributed along with this program. It is located in the root of the distribution folder.
Usage and responsibility
The use of this PDK is intended for the design of photonic integrated circuits in the SiEPIC platform, fabricated by SiEPICfab (Foundry).
All relevant documentation about the SiEPIC platform, including process description and design rules, can be found in the design rule manual as provided by the Foundry. The user is advised to carefully read the SiEPIC design rule manual.
It is the user’s responsibility to verify that the design, made on the basis of this Process Design Kit, meets the Foundry’s design rules.
In case of doubt, the user should consider the Foundry’s design rule manual as the correct reference (as validated by the Foundry).
Under no circumstances does LUCEDA represent or warrant that operation of the photonic integrated circuits by the Foundry, designed on the basis of this Process Design Kit, will be error-free or will accord to the user specifications, and hereby disclaims all liability on account thereof.
Technology settings
The PDK contains layer definitions and virtual fabrication settings for the SiEPIC process. Refer to the SiEPIC design rule manual for details.
Layers
The following table gives an overview of the available layers and how they are named in IPKISS.
Layer name |
Description |
IPKISS Layer (TECH.PPLAYER.) |
GDS Number |
---|---|---|---|
Si |
Silicon 220nm remaining. Where drawn it’s 220nm, elsewhere it’s 0m. Shot pitch 6nm. Recommended for most silicon devices. |
WG |
1/0 |
PinRec |
Pin recognition layer |
PINREC |
1/10 |
TEXT |
Text labels for automated measurements |
TEXT |
10/0 |
SEM_ROI |
SEM imaging request |
SEM_ROI |
26/0 |
Si_p6nm |
Fabricated at same layer as Si, but with shot pitch fracturing of 1nm. Aligned to Si layer. |
WG_P6NM |
31/0 |
Si_p2nm |
Fabricated at same time as Si, but not aligned to Si. Shot pitch 2nm. |
WG_P2NN |
33/0 |
DevRec |
Device recognition layer |
DEVREC |
68/0 |
FbrTgt |
Fiber target |
FIBERCORE |
81/0 |
Floorplan |
Assigned area for layout |
FLOORPLAN |
99/0 |
WGTRACE |
WG layer waveguide routing - Luceda non-tapeout layer |
WGTRACE |
Component Library
Fiber couplers
EbeamGCTE1550
Grating coupler for TE mode, operation around 1550nm wavelength.
from siepic import technology
from siepic.all import EbeamGCTE1550
import ipkiss_fixes
lo = EbeamGCTE1550().Layout()
lo.visualize(annotate=True, box=None, canvas_size=(1000.0, None))
Ports
Name |
Type |
Position |
Angle |
Waveguide Template |
Inclination |
---|---|---|---|---|---|
opt1 |
Optical |
(0.0,0.0) |
0.0 |
StripWaveguideTemplate |
0.0 |
fib1 |
Optical |
(-20.4,0.0) |
0.0 |
-31.0 |
EbeamGCTM1550
Grating coupler for TM mode, operation around 1550nm wavelength.
from siepic import technology
from siepic.all import EbeamGCTM1550
import ipkiss_fixes
lo = EbeamGCTM1550().Layout()
lo.visualize(annotate=True, box=None, canvas_size=(1000.0, None))
Ports
Name |
Type |
Position |
Angle |
Waveguide Template |
Inclination |
---|---|---|---|---|---|
opt1 |
Optical |
(0.0,0.0) |
0.0 |
StripWaveguideTemplate |
0.0 |
fib1 |
Optical |
(-20.4,0.0) |
0.0 |
-31.0 |
EbeamTerminatorTE1550
Termination or edge coupler for TE mode, 1550nm wavelength.
from siepic import technology
from siepic.all import EbeamTerminatorTE1550
import ipkiss_fixes
lo = EbeamTerminatorTE1550().Layout()
lo.visualize(annotate=True, box=None, canvas_size=(1000.0, None))
Ports
Name |
Type |
Position |
Angle |
Waveguide Template |
Inclination |
---|---|---|---|---|---|
opt1 |
Optical |
(0.0,0.0) |
0.0 |
StripWaveguideTemplate |
0.0 |
fib1 |
Optical |
(-10.9,0.0) |
0.0 |
0.0 |
EbeamTerminatorTM1550
Termination or edge coupler for TM mode, 1550nm wavelength.
from siepic import technology
from siepic.all import EbeamTerminatorTM1550
import ipkiss_fixes
lo = EbeamTerminatorTM1550().Layout()
lo.visualize(annotate=True, box=None, canvas_size=(1000.0, None))
Ports
Name |
Type |
Position |
Angle |
Waveguide Template |
Inclination |
---|---|---|---|---|---|
opt1 |
Optical |
(0.0,0.0) |
0.0 |
StripWaveguideTemplate |
0.0 |
fib1 |
Optical |
(-10.9,0.0) |
0.0 |
0.0 |
Couplers
EbeamAdiabaticTE1550
SiEPIC Regular Adiabatic Splitter building block operating at TE polarisation, splitting ratio 50/50.
from siepic import technology
from siepic.all import EbeamAdiabaticTE1550
import ipkiss_fixes
lo = EbeamAdiabaticTE1550().Layout()
lo.visualize(annotate=True, box=None, canvas_size=(1000.0, None))
Ports
Name |
Type |
Position |
Angle |
Waveguide Template |
Inclination |
---|---|---|---|---|---|
opt4 |
Optical |
(195.9,-1.5) |
0.0 |
StripWaveguideTemplate |
0.0 |
opt3 |
Optical |
(195.9,1.5) |
0.0 |
StripWaveguideTemplate |
0.0 |
opt1 |
Optical |
(0.1,1.5) |
180.0 |
StripWaveguideTemplate |
0.0 |
opt2 |
Optical |
(0.1,-1.5) |
180.0 |
StripWaveguideTemplate |
0.0 |
EbeamAdiabaticTM1550
SiEPIC Regular Adiabatic Splitter building block operating at TM polarisation, splitting ratio 50/50.
from siepic import technology
from siepic.all import EbeamAdiabaticTM1550
import ipkiss_fixes
lo = EbeamAdiabaticTM1550().Layout()
lo.visualize(annotate=True, box=None, canvas_size=(1000.0, None))
Ports
Name |
Type |
Position |
Angle |
Waveguide Template |
Inclination |
---|---|---|---|---|---|
opt4 |
Optical |
(217.9,-1.5) |
0.0 |
StripWaveguideTemplate |
0.0 |
opt3 |
Optical |
(217.9,1.5) |
0.0 |
StripWaveguideTemplate |
0.0 |
opt2 |
Optical |
(0.1,-1.5) |
180.0 |
StripWaveguideTemplate |
0.0 |
opt1 |
Optical |
(0.1,1.5) |
180.0 |
StripWaveguideTemplate |
0.0 |
EbeamBDCTE1550
SiEPIC Broadband Directional Coupler based splitter operating at TE polarisation. Splitting ratio 50/50 over a wide wavelength range.
from siepic import technology
from siepic.all import EbeamBDCTE1550
import ipkiss_fixes
lo = EbeamBDCTE1550().Layout()
lo.visualize(annotate=True, box=None, canvas_size=(1000.0, None))
Ports
Name |
Type |
Position |
Angle |
Waveguide Template |
Inclination |
---|---|---|---|---|---|
opt4 |
Optical |
(35.3,-2.35) |
0.0 |
StripWaveguideTemplate |
0.0 |
opt3 |
Optical |
(35.3,2.35) |
0.0 |
StripWaveguideTemplate |
0.0 |
opt1 |
Optical |
(-35.45,2.35) |
180.0 |
StripWaveguideTemplate |
0.0 |
opt2 |
Optical |
(-35.45,-2.35) |
180.0 |
StripWaveguideTemplate |
0.0 |
EbeamBDCTM1550
SiEPIC Broadband Directional Coupler based splitter operating at TM polarisation. Splitting ratio 50/50 over a wide wavelength range.
from siepic import technology
from siepic.all import EbeamBDCTM1550
import ipkiss_fixes
lo = EbeamBDCTM1550().Layout()
lo.visualize(annotate=True, box=None, canvas_size=(1000.0, None))
Ports
Name |
Type |
Position |
Angle |
Waveguide Template |
Inclination |
---|---|---|---|---|---|
opt1 |
Optical |
(-10.0,2.4) |
180.0 |
StripWaveguideTemplate |
0.0 |
opt2 |
Optical |
(-10.0,-2.4) |
180.0 |
StripWaveguideTemplate |
0.0 |
opt3 |
Optical |
(25.6,2.4) |
0.0 |
StripWaveguideTemplate |
0.0 |
opt4 |
Optical |
(25.6,-2.4) |
0.0 |
StripWaveguideTemplate |
0.0 |
EbeamDCTE1550
General direction coupler operating at both TE and TM.
- Parameters:
- coupl_gap: float and number > 0
Gap between the waveguides [um]
- coupl_length: float
Length of the straight coupling section [um]
- ebeam_res: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3. and List with value restriction, allowed values: [‘6NM’, ‘2NM’, ‘1NM’]
Resolution of the EBeam, 6NM = normal 6 nm shot pitch, 2NM = 2 nm shot pitch, 1NM = 1 nm shot pitch
- io_vert_space: float and number > 0
Vertical spacing [um]
- radius: float and number > 0
Radius of the bend [um]
- wg_width: float and number > 0 and [0.4,3.5]
Width of the waveguides [um]
from siepic import technology
from siepic.all import EbeamDCTE1550
import ipkiss_fixes
lo = EbeamDCTE1550().Layout()
lo.visualize(annotate=True, box=None, canvas_size=(1000.0, None))
Ports
Name |
Type |
Position |
Angle |
Waveguide Template |
Inclination |
---|---|---|---|---|---|
opt2 |
Optical |
(0.0,0.0) |
180.0 |
StripWaveguideTemplate |
0.0 |
opt4 |
Optical |
(45.278,0.0) |
0.0 |
StripWaveguideTemplate |
0.0 |
opt1 |
Optical |
(0.0,10.0) |
180.0 |
StripWaveguideTemplate |
0.0 |
opt3 |
Optical |
(45.278,10.0) |
0.0 |
StripWaveguideTemplate |
0.0 |
EbeamY1550
SiEPIC Y-splitter building block operating for TE polarisation.
from siepic import technology
from siepic.all import EbeamY1550
import ipkiss_fixes
lo = EbeamY1550().Layout()
lo.visualize(annotate=True, box=None, canvas_size=(1000.0, None))
Ports
Name |
Type |
Position |
Angle |
Waveguide Template |
Inclination |
---|---|---|---|---|---|
opt2 |
Optical |
(7.4,2.75) |
0.0 |
StripWaveguideTemplate |
0.0 |
opt3 |
Optical |
(7.4,-2.75) |
0.0 |
StripWaveguideTemplate |
0.0 |
opt1 |
Optical |
(-7.4,0.0) |
180.0 |
StripWaveguideTemplate |
0.0 |
EbeamYAdiabatic
SiEPIC adiabatic Y-splitter building block operating for TE polarisation.
from siepic import technology
from siepic.all import EbeamYAdiabatic
import ipkiss_fixes
lo = EbeamYAdiabatic().Layout()
lo.visualize(annotate=True, box=None, canvas_size=(1000.0, None))
Ports
Name |
Type |
Position |
Angle |
Waveguide Template |
Inclination |
---|---|---|---|---|---|
opt3 |
Optical |
(50.05,-1.25) |
0.0 |
StripWaveguideTemplate |
0.0 |
opt2 |
Optical |
(50.05,1.25) |
0.0 |
StripWaveguideTemplate |
0.0 |
opt1 |
Optical |
(0.05,0.0) |
180.0 |
StripWaveguideTemplate |
0.0 |
Waveguide PCells
WaveguideStraight
Straight waveguide.
- Parameters:
- wg_length: float and number > 0
Length of the waveguide [um]
- devrec: ( bool, bool_, bool or int )
Add DEVREC layer (68/0) if True (default=True)
- ebeam_res: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3. and List with value restriction, allowed values: [‘6NM’, ‘2NM’, ‘1NM’]
Resolution of the EBeam, 6NM = normal 6 nm shot pitch, 1NM = 6 NM, but with SPF, 2NM = 2 nm shot pitch
- width: float and number > 0 and [0.4,3.5]
Width of the core [um]
- trace_template: PCell and _WaveguideTemplate
from siepic import technology
from siepic.all import WaveguideStraight
import ipkiss_fixes
lo = WaveguideStraight().Layout()
lo.visualize(annotate=True, box=None, canvas_size=(1000.0, None))
Ports
Name |
Type |
Position |
Angle |
Waveguide Template |
Inclination |
---|---|---|---|---|---|
pin1 |
Optical |
(0.0,0.0) |
180.0 |
StripWaveguideTemplate |
0.0 |
pin2 |
Optical |
(10.0,0.0) |
0.0 |
StripWaveguideTemplate |
0.0 |
WaveguideBend
Bend waveguide.
- Parameters:
- angle: float
Angle of the bend [degrees]
- radius: float and number > 0 and [5.0,None]
Radius of the bend [um]
- devrec: ( bool, bool_, bool or int )
Add DEVREC layer (68/0) if True (default=True)
- ebeam_res: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3. and List with value restriction, allowed values: [‘6NM’, ‘2NM’, ‘1NM’]
Resolution of the EBeam, 6NM = normal 6 nm shot pitch, 1NM = 6 NM, but with SPF, 2NM = 2 nm shot pitch
- width: float and number > 0 and [0.4,3.5]
Width of the core [um]
- trace_template: PCell and _WaveguideTemplate
from siepic import technology
from siepic.all import WaveguideBend
import ipkiss_fixes
lo = WaveguideBend().Layout()
lo.visualize(annotate=True, box=None, canvas_size=(1000.0, None))
Ports
Name |
Type |
Position |
Angle |
Waveguide Template |
Inclination |
---|---|---|---|---|---|
pin1 |
Optical |
(0.0,0.0) |
-179.49999999999994 |
StripWaveguideTemplate |
0.0 |
pin2 |
Optical |
(10.0,10.0) |
89.49999999999996 |
StripWaveguideTemplate |
0.0 |
WaveguideSBend
S-bend waveguide.
- Parameters:
- radius: float and number > 0 and [5.0,None]
Radius of the bend [um]
- x_offset: float and number > 0
Horizontal offset of the s-bend [um]
- y_offset: float
Vertical offset of the s-bend [um]
- devrec: ( bool, bool_, bool or int )
Add DEVREC layer (68/0) if True (default=True)
- ebeam_res: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3. and List with value restriction, allowed values: [‘6NM’, ‘2NM’, ‘1NM’]
Resolution of the EBeam, 6NM = normal 6 nm shot pitch, 1NM = 6 NM, but with SPF, 2NM = 2 nm shot pitch
- width: float and number > 0 and [0.4,3.5]
Width of the core [um]
- trace_template: PCell and _WaveguideTemplate
from siepic import technology
from siepic.all import WaveguideSBend
import ipkiss_fixes
lo = WaveguideSBend().Layout()
lo.visualize(annotate=True, box=None, canvas_size=(1000.0, None))
Ports
Name |
Type |
Position |
Angle |
Waveguide Template |
Inclination |
---|---|---|---|---|---|
pin1 |
Optical |
(0.0,0.0) |
180.0 |
StripWaveguideTemplate |
0.0 |
pin2 |
Optical |
(10.0,5.0) |
0.0 |
StripWaveguideTemplate |
0.0 |
WaveguideBump
Bump waveguide.
Do not provide x_offset, angle and total_length at the same time. If total_length provided, angle or x_offset will be calculated from the others through a minimize function.
- Parameters:
- angle: float and [-120.0,120.0]
Angle of the bend
- total_length: float and number > 0
Total length of the bump [um]
- x_offset: float and number > 0
Horizontal offset of the bump [um]
- devrec: ( bool, bool_, bool or int )
Add DEVREC layer (68/0) if True (default=True)
- ebeam_res: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3. and List with value restriction, allowed values: [‘6NM’, ‘2NM’, ‘1NM’]
Resolution of the EBeam, 6NM = normal 6 nm shot pitch, 1NM = 6 NM, but with SPF, 2NM = 2 nm shot pitch
- width: float and number > 0 and [0.4,3.5]
Width of the core [um]
- trace_template: PCell and _WaveguideTemplate
from siepic import technology
from siepic.all import WaveguideBump
import ipkiss_fixes
lo = WaveguideBump().Layout()
lo.visualize(annotate=True, box=None, canvas_size=(1000.0, None))
Ports
Name |
Type |
Position |
Angle |
Waveguide Template |
Inclination |
---|---|---|---|---|---|
pin1 |
Optical |
(0.0,0.0) |
180.0 |
StripWaveguideTemplate |
0.0 |
pin2 |
Optical |
(100.0,0.0) |
0.0 |
StripWaveguideTemplate |
0.0 |
EbeamTaperTE1550
- Parameters:
- ebeam_res: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3.
Resolution of the EBeam, 6NM = normal 6 nm shot pitch, 1NM = 1 nm shot pitch, 2NM = 2 nm shot pitch
- end_res: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3.
Resolution of the output port
- end_width: float and number > 0
Width of the core
- start_res: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3.
Resolution of the input port
- start_width: float and number > 0
Width of the core
- taper_length: float and number > 0 and [1.0,20.0]
Length of the taper
from siepic import technology
from siepic.all import EbeamTaperTE1550
import ipkiss_fixes
lo = EbeamTaperTE1550().Layout()
lo.visualize(annotate=True, box=None, canvas_size=(1000.0, None))
Ports
Name |
Type |
Position |
Angle |
Waveguide Template |
Inclination |
---|---|---|---|---|---|
pin1 |
Optical |
(0.0,0.0) |
0.0 |
StripWaveguideTemplate |
0.0 |
pin2 |
Optical |
(10.0,0.0) |
180.0 |
StripWaveguideTemplate |
0.0 |
Crossing
EbeamCrossing
SiEPIC Crossing building block that allows for a vertical crossing between two waveguides with minimal cross talk and reflection.
from siepic import technology
from siepic.all import EbeamCrossing
import ipkiss_fixes
lo = EbeamCrossing().Layout()
lo.visualize(annotate=True, box=None, canvas_size=(1000.0, None))
Ports
Name |
Type |
Position |
Angle |
Waveguide Template |
Inclination |
---|---|---|---|---|---|
opt1 |
Optical |
(-4.8,0.0) |
180.0 |
StripWaveguideTemplate |
0.0 |
opt4 |
Optical |
(4.8,0.0) |
0.0 |
StripWaveguideTemplate |
0.0 |
opt2 |
Optical |
(0.0,4.8) |
90.0 |
StripWaveguideTemplate |
0.0 |
opt3 |
Optical |
(0.0,-4.8) |
-90.0 |
StripWaveguideTemplate |
0.0 |
Bragg
EbeamBraggTE1550
Waveguide Bragg Grating (WBG).
- Parameters:
- conn_wav_L: float and number > 0
Length of the connecting waveguides [um]
- corrugation_width: float and [0,0.75]
Corrugation width [um]
- ebeam_res: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3. and List with value restriction, allowed values: (‘6NM’, ‘1NM’, ‘2NM’)
Resolution of the EBeam, 6NM = normal 6 nm shot pitch, 2NM = 2 nm shot pitch
- grating_misalignment: float
Grating misalignment [um]
- grating_period: float
Grating period [um]
- grating_type: ( bool, bool_, bool or int )
Shape of the grating: True=sinusoidal, False=rectangular
- n_periods: int
Number of periods
- width: float and number > 0 and [0.4,3.5]
Width of the core [um]
from siepic import technology
from siepic.all import EbeamBraggTE1550
import ipkiss_fixes
lo = EbeamBraggTE1550().Layout()
lo.visualize(annotate=True, box=None, canvas_size=(1000.0, None))
Ports
Name |
Type |
Position |
Angle |
Waveguide Template |
Inclination |
---|---|---|---|---|---|
pin1 |
Optical |
(0.0,0.0) |
180.0 |
StripWaveguideTemplate |
0.0 |
pin2 |
Optical |
(97.1,0.0) |
0.0 |
StripWaveguideTemplate |
0.0 |
Rings
EbeamDCHalfringStraight
Half ring component containing half a ring (or racetrack) and the adjacent waveguide.
- Parameters:
- coupler_length: float and Real, number and number >= 0
Length of the coupling section [um]
- ebeam_res: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3. and List with value restriction, allowed values: [‘6NM’, ‘1NM’, ‘2NM’]
Resolution of the EBeam, 6NM = normal 6 nm shot pitch, 2NM = 2 nm shot pitch
- gap: float and number > 0
Gap between the ring waveguide and the straight waveguide [um]
- offset_length: float
Length of the waveguide section at the ports [um]
- orthogonal_identifier: int
Indicating whether we excite the component (1: TE, 2: TM)
- radius: float and number > 0
Radius of the ring [um]
- wg_width: float and number > 0 and [0.4,3.5]
Width of the core [um]
from siepic import technology
from siepic.all import EbeamDCHalfringStraight
import ipkiss_fixes
lo = EbeamDCHalfringStraight().Layout()
lo.visualize(annotate=True, box=None, canvas_size=(1000.0, None))
Ports
Name |
Type |
Position |
Angle |
Waveguide Template |
Inclination |
---|---|---|---|---|---|
pin1 |
Optical |
(0.0,0.0) |
180.0 |
StripWaveguideTemplate |
0.0 |
pin2 |
Optical |
(5.0,10.7) |
90.0 |
StripWaveguideTemplate |
0.0 |
pin3 |
Optical |
(25.0,10.7) |
90.0 |
StripWaveguideTemplate |
0.0 |
pin4 |
Optical |
(30.0,0.0) |
0.0 |
StripWaveguideTemplate |
0.0 |
EbeamAddDropSymmStraight
Symmetric add-drop ring (racetrack) resonator, meaning the gap between the ring and bottom adjacent waveguide is the same as the gap between the ring and top adjacent waveguide.
- Parameters:
- coupler_length: float and Real, number and number >= 0
Length of the coupling section [um]
- ebeam_res: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3. and List with value restriction, allowed values: [‘6NM’, ‘1NM’, ‘2NM’]
Resolution of the EBeam, 6NM = normal 6 nm shot pitch, 2NM = 2 nm shot pitch
- gap: float and number > 0
Gap between the ring waveguide and the straight waveguide [um]
- offset_length: float
Length of the waveguide section at the ports [um]
- orthogonal_identifier: int
Indicating whether we excite the component (1: TE, 2: TM)
- radius: float and number > 0
Radius of the ring [um]
- wg_width: float and number > 0 and [0.4,3.5]
Width of the core [um]
from siepic import technology
from siepic.all import EbeamAddDropSymmStraight
import ipkiss_fixes
lo = EbeamAddDropSymmStraight().Layout()
lo.visualize(annotate=True, box=None, canvas_size=(1000.0, None))
Ports
Name |
Type |
Position |
Angle |
Waveguide Template |
Inclination |
---|---|---|---|---|---|
pin1 |
Optical |
(0.0,0.0) |
180.0 |
StripWaveguideTemplate |
0.0 |
pin2 |
Optical |
(0.0,21.4) |
180.0 |
StripWaveguideTemplate |
0.0 |
pin3 |
Optical |
(30.0,21.4) |
0.0 |
StripWaveguideTemplate |
0.0 |
pin4 |
Optical |
(30.0,0.0) |
0.0 |
StripWaveguideTemplate |
0.0 |
EbeamAddDropAsymmStraight
Asymmetric add-drop ring (racetrack) resonator, meaning the gap between the ring and bottom adjacent waveguide is different as the gap between the ring and top adjacent waveguide.
- Parameters:
- gap1: float and number > 0
Gap between the ring waveguide and the straight waveguide at the input [um]
- gap2: float and number > 0
Gap between the ring waveguide and the straight waveguide at the output [um]
- coupler_length: float and Real, number and number >= 0
Length of the coupling section [um]
- ebeam_res: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3. and List with value restriction, allowed values: [‘6NM’, ‘1NM’, ‘2NM’]
Resolution of the EBeam, 6NM = normal 6 nm shot pitch, 2NM = 2 nm shot pitch
- offset_length: float
Length of the waveguide section at the ports [um]
- orthogonal_identifier: int
Indicating whether we excite the component (1: TE, 2: TM)
- radius: float and number > 0
Radius of the ring [um]
- wg_width: float and number > 0 and [0.4,3.5]
Width of the core [um]
from siepic import technology
from siepic.all import EbeamAddDropAsymmStraight
import ipkiss_fixes
lo = EbeamAddDropAsymmStraight().Layout()
lo.visualize(annotate=True, box=None, canvas_size=(1000.0, None))
Ports
Name |
Type |
Position |
Angle |
Waveguide Template |
Inclination |
---|---|---|---|---|---|
pin1 |
Optical |
(0.0,0.0) |
180.0 |
StripWaveguideTemplate |
0.0 |
pin2 |
Optical |
(0.0,21.4) |
180.0 |
StripWaveguideTemplate |
0.0 |
pin3 |
Optical |
(30.0,21.4) |
0.0 |
StripWaveguideTemplate |
0.0 |
pin4 |
Optical |
(30.0,0.0) |
0.0 |
StripWaveguideTemplate |
0.0 |
EbeamRingStraight
Notch-filter ring (racetrack) resonator, meaning there is only adjacent waveguide (at the bottom).
- Parameters:
- coupler_length: float and Real, number and number >= 0
Length of the coupling section [um]
- ebeam_res: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3. and List with value restriction, allowed values: [‘6NM’, ‘1NM’, ‘2NM’]
Resolution of the EBeam, 6NM = normal 6 nm shot pitch, 2NM = 2 nm shot pitch
- gap: float and number > 0
Gap between the ring waveguide and the straight waveguide [um]
- offset_length: float
Length of the waveguide section at the ports [um]
- orthogonal_identifier: int
Indicating whether we excite the component (1: TE, 2: TM)
- radius: float and number > 0
Radius of the ring [um]
- wg_width: float and number > 0 and [0.4,3.5]
Width of the core [um]
from siepic import technology
from siepic.all import EbeamRingStraight
import ipkiss_fixes
lo = EbeamRingStraight().Layout()
lo.visualize(annotate=True, box=None, canvas_size=(1000.0, None))
Ports
Name |
Type |
Position |
Angle |
Waveguide Template |
Inclination |
---|---|---|---|---|---|
pin1 |
Optical |
(0.0,0.0) |
180.0 |
StripWaveguideTemplate |
0.0 |
pin2 |
Optical |
(30.0,0.0) |
0.0 |
StripWaveguideTemplate |
0.0 |
Photonic Crystal
PhotonicCrystalWaveguideAndCavity
2D Photonic crystal waveguide with unit cells arranged in a hexagonal lattice, with the opportunity of putting a cavity in the waveguide
- Parameters:
- hole_radius: float and Real, number and number >= 0
Radius of the unit cell hole [um]
- middle_radii: list
Radii of the cavity unit cell holes in the waveguide [um]
- n_angles: int
Number angles in the unit cell hole
- num_cols: int
Number of unit cells along the waveguide
- num_rows_one_side: int
Number of unit cell layers on each side of the waveguide
- phc_wg_width: float and Real, number and number >= 0
Width of the photonic crystal waveguide [um]
- pitch: float and number > 0
Pitch of the photonic crystal unit cells [um]
- taper_length: float and number > 0
Taper length [um]
from siepic import technology
from siepic.all import PhotonicCrystalWaveguideAndCavity
import ipkiss_fixes
lo = PhotonicCrystalWaveguideAndCavity().Layout()
lo.visualize(annotate=True, box=None, canvas_size=(1000.0, None))
Ports
Name |
Type |
Position |
Angle |
Waveguide Template |
Inclination |
---|---|---|---|---|---|
pin1 |
Optical |
(0.0,0.0) |
180.0 |
StripWaveguideTemplate |
0.0 |
pin2 |
Optical |
(18.6,0.0) |
0.0 |
StripWaveguideTemplate |
0.0 |
Frame
FloorPlan
Chip frame.
- Parameters:
- size: Coord2 and number >= 0
Size of frame as a tuple (x, y) [um, um]
from siepic import technology
from siepic.all import FloorPlan
import ipkiss_fixes
lo = FloorPlan().Layout()
lo.visualize(annotate=True, box=None, canvas_size=(1000.0, None))
Changelog
0.3.36.luceda3
Added an .iclib file (library file recognized by IPKISS Canvas) with symbol drawings
0.3.36.luceda2
Updated for IPKISS 3.9. The PDK runs on Python3 as well as Python2 IPKISS 3.9 is required to run the PDK
0.3.36.luceda1
Updated for IPKISS 3.7
0.3.36
Added PhotonicCrystalWaveguideAndCavity
0.3.30.luceda1
Fixed technology default template (TECH.PCELLS.WG.DEFAULT and TECH.PCELLS.WG.WIRE)
Updated FloorPlan from a RectanglePath to a Rectangle
0.3.30
Initial implementation of the IPKISS PDK for SiEPIC: layers, cell library, tape-out settings, basic documentation