SiEPICfab

Luceda PDK for SiEPIC Shuksan

The Luceda PDK for SiEPIC Shuksan allows to design and tape out to the first ever laser integration multi-project wafer (MPW) run offered by SiEPICfab.

Contents

PDK Documentation

This document explains how to use the Luceda Process Design Kit (PDK) for SiEPICfab (version 0.2.3.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 Shuksan GitHub PDK, replicated here under the siepic_shuksan/ipkiss/siepic_shuksan/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 © 2021, 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 Shuksan 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 Shuksan process. Refer to the SiEPIC Shuksan git repository, also containing the links for the manuals for details.

Layers

The following table gives an overview of the available layers and how they are named in IPKISS.

Table 1 Layer Table

Layer name

Description

IPKISS Layer (TECH.PPLAYER.)

GDS Number

Si

Silicon full etch

SI

1/0

Ox_open_Si

Oxide etch to expose the Si waveguide; used for photonic wire bonds, sensors, and depositing materials such as polymer for modulators, phase change materials, chalcogenide glasses.

OX_OPEN_SI

6/0

M1_heater

Layer to draw a heater element, Tri-layer metal: TiW alloy

M1_HEATER

11/0

M2_routing

Layer to draw routing and bond pads for elements defined on layer 11/0. Tri-layer metal: TiW/Al Bilayer

M2_ROUTING

12/0

M_Open

Layer to draw oxide openings. Tri-layer metal: Oxide windows

M_OPEN

13/0

Floor Plan

Virtual Layer to define layout design area.

FLOOR_PLAN

99/0

SEM imaging

Virtual Layer to define areas to be SEM imaged. $25 per image. The SEM site must be a 4:3 ratio rectangle. SEMs are not allowed over blackbox devices.

SEM_IMAGING

200/0

Text

Virtual Layer to define measurement labels on.

TEXT

10/0

DevRec

Virtual Device recognition layer for DRC.

DEVREC

68/0

PinRec

Virtual Port/pins recognition layer for snapping and connectivity checks.

PINREC

1/10

PinElecRec

Virtual Port/pins recognition layer for snapping and connectivity checks for electric wires.

PINELECREC

1/11

FgcRec

Virtual recognition layer for the fiber grating couplers.

FGCREC

81/0

Waveguide

Virtual layer to draw waveguide paths.

WAVEGUIDE

1/99

Component Library

Bondpads

BondPad

Bond pad for the electrical probing

from siepic_shuksan import technology
from siepic_shuksan.all import BondPad
import ipkiss_fixes
lo = BondPad().Layout()
lo.visualize(annotate=True, box=None, canvas_size=(1000.0, None))

Ports

Name

Type

Position

Angle

Waveguide Template

Inclination

m_pin_left

Electrical

(-50.0,0.0)

180.0

M2WireTemplate

0.0

m_pin_right

Electrical

(50.0,0.0)

0.0

M2WireTemplate

0.0

m_pin_bottom

Electrical

(0.0,-50.0)

-90.0

M2WireTemplate

0.0

m_pin_top

Electrical

(0.0,50.0)

90.0

M2WireTemplate

0.0

Directional Couplers

DirectionalCoupler

Directional coupler or evanescent coupler where the gap, bending radius and coupling length are user defined. This PCell does not have a circuit model.

Parameters:
radius: float and number > 0

Gap between the waveguides

coupling_length: float and Real, number and number >= 0

Length of the coupling straight section

gap: float and number > 0

Gap between the waveguides

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

from siepic_shuksan import technology
from siepic_shuksan.all import DirectionalCoupler
import ipkiss_fixes
lo = DirectionalCoupler().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)

-90.0

WaveguideWireTemplate

0.0

pin3

Optical

(20.0,0.0)

-90.0

WaveguideWireTemplate

0.0

pin2

Optical

(0.0,20.75)

90.0

WaveguideWireTemplate

0.0

pin4

Optical

(20.0,20.75)

90.0

WaveguideWireTemplate

0.0

Layout

Parameters
view_name: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3.

The name of the view

Electric Wires

HeaterWire

Heater metal wire for creating heaters.

Parameters:
metal_width: float and number > 0

Width of the metal layer [um]

trace_template: PCell and _WaveguideTemplate
name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

from siepic_shuksan import technology
from siepic_shuksan.all import HeaterWire
import ipkiss_fixes
lo = HeaterWire().Layout()
lo.visualize(annotate=True, box=None, canvas_size=(1000.0, None))

Ports

Name

Type

Position

Angle

Waveguide Template

Inclination

in

Optical

(0.0,0.0)

180.0

HeaterWireTemplate

0.0

out

Optical

(2.0,0.0)

0.0

HeaterWireTemplate

0.0

Layout

Parameters
shape: Shape

Shape from which the Trace is calculated

bend_radius: float and number > 0

Bend radius for the auto-generated bends.

CircuitModel

Parameters
length: float and Real, number and number >= 0

The physical length of the waveguide during simulation

layout_view: ( _LayoutView ), None allowed netlist_view: ( NetlistView ), None allowed view_name: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3.

The name of the view

Other Parameters
solver: str and String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters, locked

circuit solver to use

M2Wire

DC metal wire defined in the M2 layer.

Parameters:
m_width: float and number > 0

Width of the metal routing [um]

trace_template: PCell and ElectricalWireTemplate
name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

from siepic_shuksan import technology
from siepic_shuksan.all import M2Wire
import ipkiss_fixes
lo = M2Wire().Layout()
lo.visualize(annotate=True, box=None, canvas_size=(1000.0, None))

Ports

Name

Type

Position

Angle

Waveguide Template

Inclination

in

Electrical

(0.0,0.0)

180.0

M2WireTemplate

0.0

out

Electrical

(50.0,-0.0)

0.0

M2WireTemplate

0.0

Layout

Parameters
shape: Shape

Shape from which the Trace is calculated

CircuitModel

Parameters

layout_view: ( _LayoutView ), None allowed netlist_view: ( NetlistView ), None allowed view_name: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3.

The name of the view

Other Parameters
solver: str and String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters, locked

circuit solver to use

Floor Plan

Floorplan

Chip floor plan on which the integrated designs are drawn.

Parameters:
height: float and number > 0

Height of the floorplan [mu]

width: float and number > 0

Width of the floorplan [mu]

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

from siepic_shuksan import technology
from siepic_shuksan.all import Floorplan
import ipkiss_fixes
lo = Floorplan().Layout()
lo.visualize(annotate=True, box=None, canvas_size=(1000.0, None))

Layout

Parameters
view_name: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3.

The name of the view

Grating couplers

GC_1270_TE_8deg

Fiber grating coupler for operation at 1270 nm and TE polarization, under an angle of 8 degrees

from siepic_shuksan import technology
from siepic_shuksan.all import GC_1270_TE_8deg
import ipkiss_fixes
lo = GC_1270_TE_8deg().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

WaveguideWireTemplate

0.0

fib1

Optical

(-21.762,-0.069)

8.0

0.0

GC_1290_TE_8deg

Fiber grating coupler for operation at 1290 nm and TE polarization, under an angle of 8 degrees

from siepic_shuksan import technology
from siepic_shuksan.all import GC_1290_TE_8deg
import ipkiss_fixes
lo = GC_1290_TE_8deg().Layout()
lo.visualize(annotate=True, box=None, canvas_size=(1000.0, None))

Ports

Name

Type

Position

Angle

Waveguide Template

Inclination

fib1

Optical

(-21.762,-0.069)

8.0

0.0

opt1

Optical

(0.0,0.0)

0.0

WaveguideWireTemplate

0.0

GC_1310_TE_8deg

Fiber grating coupler for operation at 1310 nm and TE polarization, under an angle of 8 degrees

from siepic_shuksan import technology
from siepic_shuksan.all import GC_1310_TE_8deg
import ipkiss_fixes
lo = GC_1310_TE_8deg().Layout()
lo.visualize(annotate=True, box=None, canvas_size=(1000.0, None))

Ports

Name

Type

Position

Angle

Waveguide Template

Inclination

fib1

Optical

(-21.762,-0.069)

8.0

0.0

opt1

Optical

(0.0,0.0)

0.0

WaveguideWireTemplate

0.0

GC_1330_TE_8deg

Fiber grating coupler for operation at 1330 nm and TE polarization, under an angle of 8 degrees

from siepic_shuksan import technology
from siepic_shuksan.all import GC_1330_TE_8deg
import ipkiss_fixes
lo = GC_1330_TE_8deg().Layout()
lo.visualize(annotate=True, box=None, canvas_size=(1000.0, None))

Ports

Name

Type

Position

Angle

Waveguide Template

Inclination

fib1

Optical

(-21.762,-0.069)

8.0

0.0

opt1

Optical

(0.0,0.0)

0.0

WaveguideWireTemplate

0.0

Grating Coupler Matrix

GratingCouplerMatrix

Fully parametric matrix of grating couplers, including parameters for placing the routing waveguides. Circuit model is derived from the hierarchical model.

Parameters:
add_extensions: ( bool, bool_ or int )

Adding extensions to the output waveguides for easier and more robust external routing

wg_sep: float and number > 0

Separation between the waveguide

wg_radius: float and number > 0

Radius of the routed waveguide bends

wg_str_len: float and Real, number and number >= 0

Length straight wavelength at the GC port

gc_sep_y: float and number > 0

Vertical separation between the grating couplers

gc_sep_x: float and number > 0

Horizontal separation between the grating couplers

gc: PCell

Grating coupler cell (only for 1D gratings)

n_cols: int

Number of GC columns

n_rows: int

Number of GC rows

strict: ( bool, bool_ or int )

If True, any error will raise an exception and stop the program flow. If False, any routing error will give a warning and draw a straight line on an error layer. See i3.ConnectLogical for more information.

exposed_ports: ( dict ), *None allowed*

Ports to be exposed, mapping {‘instance_name:port_name’: external_port_name’} map for i3.expose_ports().Set to None (default) to expose all unconnected ports

specs: list

Placement and routing specifications

insts: OrderedDict and key: str, value: PCell, _View

Instances of child cells which this circuit is composed of: {‘instance_name’: cell, …} where cell is an i3.PCell object.

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

from siepic_shuksan import technology
from siepic_shuksan.all import GratingCouplerMatrix
import ipkiss_fixes
lo = GratingCouplerMatrix().Layout()
lo.visualize(annotate=True, box=None, canvas_size=(1000.0, None))

Ports

Name

Type

Position

Angle

Waveguide Template

Inclination

fib_0_0

Optical

(21.762,0.069)

-172.0

0.0

wg_0_0

Optical

(-1.0,0.0)

180.0

WaveguideWireTemplate

0.0

fib_0_1

Optical

(66.762,0.069)

-172.0

0.0

wg_0_1

Optical

(-3.0,20.5)

180.0

WaveguideWireTemplate

0.0

fib_0_2

Optical

(111.762,0.069)

-172.0

0.0

wg_0_2

Optical

(-5.0,22.5)

180.0

WaveguideWireTemplate

0.0

fib_0_3

Optical

(156.762,0.069)

-172.0

0.0

wg_0_3

Optical

(-7.0,24.5)

180.0

WaveguideWireTemplate

0.0

fib_1_0

Optical

(21.762,45.069)

-172.0

0.0

wg_1_0

Optical

(-9.0,45.0)

180.0

WaveguideWireTemplate

0.0

fib_1_1

Optical

(66.762,45.069)

-172.0

0.0

wg_1_1

Optical

(-11.0,65.5)

180.0

WaveguideWireTemplate

0.0

fib_1_2

Optical

(111.762,45.069)

-172.0

0.0

wg_1_2

Optical

(-13.0,67.5)

180.0

WaveguideWireTemplate

0.0

fib_1_3

Optical

(156.762,45.069)

-172.0

0.0

wg_1_3

Optical

(-15.0,69.5)

180.0

WaveguideWireTemplate

0.0

fib_2_0

Optical

(21.762,90.069)

-172.0

0.0

wg_2_0

Optical

(-15.0,90.0)

180.0

WaveguideWireTemplate

0.0

fib_2_1

Optical

(66.762,90.069)

-172.0

0.0

wg_2_1

Optical

(-13.0,110.5)

180.0

WaveguideWireTemplate

0.0

fib_2_2

Optical

(111.762,90.069)

-172.0

0.0

wg_2_2

Optical

(-11.0,112.5)

180.0

WaveguideWireTemplate

0.0

fib_2_3

Optical

(156.762,90.069)

-172.0

0.0

wg_2_3

Optical

(-9.0,114.5)

180.0

WaveguideWireTemplate

0.0

fib_3_0

Optical

(21.762,135.069)

-172.0

0.0

wg_3_0

Optical

(-7.0,135.0)

180.0

WaveguideWireTemplate

0.0

fib_3_1

Optical

(66.762,135.069)

-172.0

0.0

wg_3_1

Optical

(-5.0,155.5)

180.0

WaveguideWireTemplate

0.0

fib_3_2

Optical

(111.762,135.069)

-172.0

0.0

wg_3_2

Optical

(-3.0,157.5)

180.0

WaveguideWireTemplate

0.0

fib_3_3

Optical

(156.762,135.069)

-172.0

0.0

wg_3_3

Optical

(-1.0,159.5)

180.0

WaveguideWireTemplate

0.0

Layout

Parameters
view_name: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3.

The name of the view

CircuitModel

Parameters

layout_view: ( _LayoutView ), None allowed netlist_view: ( NetlistView ), None allowed view_name: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3.

The name of the view

Other Parameters
solver: str and String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters, locked

circuit solver to use

Heaters

wg_heater

The wg_heater is a thermo-optic device that performs as a phase shifter. The heater length and width are 200 micron and 4 micron, respectively.

from siepic_shuksan import technology
from siepic_shuksan.all import wg_heater
import ipkiss_fixes
lo = wg_heater().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)

180.0

WaveguideWireTemplate

0.0

opt2

Optical

(200.0,0.0)

0.0

WaveguideWireTemplate

0.0

m_pin1

Optical

(10.0,2.0)

90.0

WaveguideWireTemplate

0.0

m_pin2

Optical

(190.0,2.0)

90.0

WaveguideWireTemplate

0.0

Lasers

laser_1270nm

Laser black box emitting light at 1270 nm

from siepic_shuksan import technology
from siepic_shuksan.all import laser_1270nm
import ipkiss_fixes
lo = laser_1270nm().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

WaveguideWireTemplate

0.0

elec1_p

Electrical

(-900.0,-149.63)

180.0

M2WireTemplate

0.0

elec2_n

Electrical

(-900.0,100.37)

180.0

M2WireTemplate

0.0

laser_1290nm

Laser black box emitting light at 1290 nm

from siepic_shuksan import technology
from siepic_shuksan.all import laser_1290nm
import ipkiss_fixes
lo = laser_1290nm().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

WaveguideWireTemplate

0.0

elec1_p

Electrical

(-900.0,-149.63)

180.0

M2WireTemplate

0.0

elec2_n

Electrical

(-900.0,100.37)

180.0

M2WireTemplate

0.0

laser_1310nm

Laser black box emitting light at 1310 nm

from siepic_shuksan import technology
from siepic_shuksan.all import laser_1310nm
import ipkiss_fixes
lo = laser_1310nm().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

WaveguideWireTemplate

0.0

elec1_p

Electrical

(-900.0,-149.63)

180.0

M2WireTemplate

0.0

elec2_n

Electrical

(-900.0,100.37)

180.0

M2WireTemplate

0.0

laser_1330nm

Laser black box emitting light at 1330 nm

from siepic_shuksan import technology
from siepic_shuksan.all import laser_1330nm
import ipkiss_fixes
lo = laser_1330nm().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

WaveguideWireTemplate

0.0

elec1_p

Electrical

(-900.0,-149.63)

180.0

M2WireTemplate

0.0

elec2_n

Electrical

(-900.0,100.37)

180.0

M2WireTemplate

0.0

Photonic Wire Bonds

pwb_8ch_array

8 photonic wire bonds for optical fibre array coupling

from siepic_shuksan import technology
from siepic_shuksan.all import pwb_8ch_array
import ipkiss_fixes
lo = pwb_8ch_array().Layout()
lo.visualize(annotate=True, box=None, canvas_size=(1000.0, None))

Ports

Name

Type

Position

Angle

Waveguide Template

Inclination

opt6

Optical

(628.6,489.7)

0.0

WaveguideWireTemplate

0.0

opt5

Optical

(628.6,616.7)

0.0

WaveguideWireTemplate

0.0

opt4

Optical

(628.6,743.7)

0.0

WaveguideWireTemplate

0.0

opt3

Optical

(628.6,870.7)

0.0

WaveguideWireTemplate

0.0

opt2

Optical

(628.6,997.7)

0.0

WaveguideWireTemplate

0.0

opt1

Optical

(628.6,1124.7)

0.0

WaveguideWireTemplate

0.0

fib6

Optical

(5.527,489.649)

8.0

0.0

fib5

Optical

(5.527,616.649)

8.0

0.0

fib4

Optical

(5.527,743.649)

8.0

0.0

fib3

Optical

(5.527,870.649)

8.0

0.0

fib2

Optical

(5.527,997.649)

8.0

0.0

fib1

Optical

(5.527,1124.649)

8.0

0.0

Ring Based Components

RingFilterTunableGeneral

Heated add-drop ring/racetrack where the gaps, bending radius, coupling length, heater length, width and contact length are user defined. Also the widths of the ring waveguide and adjacent waveguides can all be set independently. This PCell does not have a circuit model.

Parameters:
heater_contact_length: float and Real, number and number >= 0

Length of the heater contact

heater_width: float and Real, number and number >= 0

Length of the heater length

heater_length: float and Real, number and number >= 0

Length of the heater length

coupling_length: float and Real, number and number >= 0

Length of the coupling straight section

wg_top_width: float and number > 0

Width of the top adjacent waveguide

wg_ring_width: float and number > 0

Width of the ring waveguide

wg_bot_width: float and number > 0

Width of the bottom adjacent waveguide

radius: float and number > 0

Gap between the waveguides

gap_top: float and number > 0

Gap between the waveguides

gap_bot: float and number > 0

Gap between the waveguides

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

from siepic_shuksan import technology
from siepic_shuksan.all import RingFilterTunableGeneral
import ipkiss_fixes
lo = RingFilterTunableGeneral().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

WaveguideWireTemplate

0.0

pin3

Optical

(20.0,0.0)

0.0

WaveguideWireTemplate

0.0

pin4

Optical

(0.0,21.5)

180.0

WaveguideWireTemplate

0.0

pin2

Optical

(20.0,21.5)

0.0

WaveguideWireTemplate

0.0

heater_in

Electrical

(1.11,11.532)

-90.0

M2WireTemplate

0.0

heater_out

Electrical

(18.89,11.532)

-90.0

M2WireTemplate

0.0

RingFilterTunable

Heated add-drop ring/racetrack where the gaps, bending radius, coupling length, waveguide width and heater width are user defined. This PCell does not have a circuit model.

Parameters:
wg_width: float and number > 0

Width of the waveguides

heater_width: float and Real, number and number >= 0

Length of the heater length

coupling_length: float and Real, number and number >= 0

Length of the coupling straight section

radius: float and number > 0

Gap between the waveguides

gap_top: float and number > 0

Gap between the waveguides

gap_bot: float and number > 0

Gap between the waveguides

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

from siepic_shuksan import technology
from siepic_shuksan.all import RingFilterTunable
import ipkiss_fixes
lo = RingFilterTunable().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

WaveguideWireTemplate

0.0

pin3

Optical

(20.0,0.0)

0.0

WaveguideWireTemplate

0.0

pin4

Optical

(0.0,21.5)

180.0

WaveguideWireTemplate

0.0

pin2

Optical

(20.0,21.5)

0.0

WaveguideWireTemplate

0.0

heater_in

Electrical

(3.808,-1.442)

-90.0

M2WireTemplate

0.0

heater_out

Electrical

(16.192,-1.442)

-90.0

M2WireTemplate

0.0

SeriesRings

Rings/racetracks evanescently coupled in series where the gap, bending radius, coupling length and number of rings are user defined. This PCell does not have a circuit model.

Parameters:
num_rings: int

Number of rings

radius: float and number > 0

Gap between the waveguides

coupling_length: float and Real, number and number >= 0

Length of the coupling straight section

gap: float and number > 0

Gap between the waveguides

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

from siepic_shuksan import technology
from siepic_shuksan.all import SeriesRings
import ipkiss_fixes
lo = SeriesRings().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)

-90.0

WaveguideWireTemplate

0.0

pin3

Optical

(20.0,0.0)

-90.0

WaveguideWireTemplate

0.0

pin2

Optical

(0.0,83.0)

90.0

WaveguideWireTemplate

0.0

pin4

Optical

(20.0,83.0)

90.0

WaveguideWireTemplate

0.0

Layout

Parameters
view_name: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3.

The name of the view

Spirals

SpiralCircular

Circular spiral with a fixed length. The angular offset to achieve a given spiral length, with a given set of parameters such as the radius of the central bends, the spacing between the waveguides and the core width, is automatically calculated. This PCell does not contain heaters and is thus purely used for delay.

Parameters:
spiral_length: float and number > 0

Length of the total spiral waveguide

spacing: float and number > 0

Separation between adjacent waveguides

radius: float and number > 0

Radius of the central bends

core_width: float and number > 0

Core width of the bend waveguide

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters:
layout_properties: ndarray, locked

Calculated layout properties of the spiral.

from siepic_shuksan import technology
from siepic_shuksan.all import SpiralCircular
import ipkiss_fixes
lo = SpiralCircular().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)

180.0

WaveguideWireTemplate

0.0

opt2

Optical

(0.896,-38.817)

0.0

WaveguideWireTemplate

0.0

Layout

Parameters
view_name: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3.

The name of the view

CircuitModel

Parameters
vbias: float

Heater bias voltage (use only for frequency domain simulations) [V]

optical_correction_factor: float and Real, number and number >= 0

Correction factor taking into account how much optical waveguide is below the heater. It is calculated as being the length of the optical waveguide below the heater divided by the heater length.

resistance: float and number > 0

Resistance of the heater material [Ohm]

resistivity: float and number > 0

Resistivity of the heater material [Ohm]

p_pi: float and number > 0

Power needed for a pi phase shift on the full heater [W]

length: float and number > 0

Length of the trace [micron]

loss_db_per_cm: float and number > 0

Waveguide propagation loss [dB/cm]

wavelength_bounds: ndarray

Wavelength range in which the model is valid

ng_fit_coeff: ndarray

Fit coefficients of the group indices

neff_fit_coeff: ndarray

Fit coefficients of the effective indices

layout_view: ( _LayoutView ), None allowed netlist_view: ( NetlistView ), None allowed view_name: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3.

The name of the view

Other Parameters
solver: str and String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters, locked

circuit solver to use

SpiralCircularWithHeater

Circular spiral with a fixed length, covered with a circular heater. The angular offset to achieve a given spiral length, with a given set of parameters such as the radius of the central bends, the spacing between the waveguides and the core width, is automatically calculated. The angular position of the two contact pads on the heater can be changed but by default overlap with the input/output optical waveguides.

Parameters:
ox_open_xy_ext: Coord2

Open oxide region horizontal and vertical extension compared to the spiral center

ox_open_sep: float and Real, number and number >= 0

Open oxide region separation from the spiral

ox_open_width: float and Real, number and number >= 0

Width of open oxide region

heater_width_extra: float

Width extension of the heater waveguide as compared to the inner and outer waveguide

contacts_width: float and Real, number and number >= 0

Width of the contacts.

contacts_angle: float

Angle of the contacts as compared with the input port

spiral_length: float and number > 0

Length of the total spiral waveguide

spacing: float and number > 0

Separation between adjacent waveguides

radius: float and number > 0

Radius of the central bends

core_width: float and number > 0

Core width of the bend waveguide

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters:
layout_properties: ndarray, locked

Calculated layout properties of the spiral.

from siepic_shuksan import technology
from siepic_shuksan.all import SpiralCircularWithHeater
import ipkiss_fixes
lo = SpiralCircularWithHeater().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)

180.0

WaveguideWireTemplate

0.0

opt2

Optical

(0.896,-38.817)

0.0

WaveguideWireTemplate

0.0

elec1

Electrical

(0.448,0.991)

90.0

M2WireTemplate

0.0

elec2

Electrical

(0.448,-39.809)

-90.0

M2WireTemplate

0.0

Layout

Parameters
view_name: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3.

The name of the view

CircuitModel

Parameters
vbias: float

Heater bias voltage (use only for frequency domain simulations) [V]

optical_correction_factor: float and Real, number and number >= 0

Correction factor taking into account how much optical waveguide is below the heater. It is calculated as being the length of the optical waveguide below the heater divided by the heater length.

resistance: float and number > 0

Resistance of the heater material [Ohm]

resistivity: float and number > 0

Resistivity of the heater material [Ohm]

p_pi: float and number > 0

Power needed for a pi phase shift on the full heater [W]

length: float and number > 0

Length of the trace [micron]

loss_db_per_cm: float and number > 0

Waveguide propagation loss [dB/cm]

wavelength_bounds: ndarray

Wavelength range in which the model is valid

ng_fit_coeff: ndarray

Fit coefficients of the group indices

neff_fit_coeff: ndarray

Fit coefficients of the effective indices

layout_view: ( _LayoutView ), None allowed netlist_view: ( NetlistView ), None allowed view_name: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3.

The name of the view

Other Parameters
solver: str and String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters, locked

circuit solver to use

Heated Spiral Matrix

HeatedSpiralMatrix

Fully parametric matrix of heated spiral, including parameters for placing the routing waveguides and electric wires. Circuit model is derived from the hierarchical model, with the netlist being adapted in order to enable circuit simulations.

Parameters:
add_extensions: ( bool, bool_ or int )

Adding extensions to the output waveguides for easier and more robust external routing

add_common_ground: ( bool, bool_ or int )

Create common ground for all the spirals

wg_sep: float and number > 0

Separation between the waveguides

wg_radius: float and number > 0

Radius of the routed waveguide bends

wg_str_len: float and Real, number and number >= 0

Length straight wavelength at the spiral port and outputs

spiral_sep_y: float and number > 0

Vertical separation between the spirals

spiral_sep_x: float and number > 0

Horizontal separation between the spirals

spiral: PCell

Spiral cell

n_cols: int

Number of spiral columns

n_rows: int

Number of spiral rows

strict: ( bool, bool_ or int )

If True, any error will raise an exception and stop the program flow. If False, any routing error will give a warning and draw a straight line on an error layer. See i3.ConnectLogical for more information.

exposed_ports: ( dict ), *None allowed*

Ports to be exposed, mapping {‘instance_name:port_name’: external_port_name’} map for i3.expose_ports().Set to None (default) to expose all unconnected ports

specs: list

Placement and routing specifications

insts: OrderedDict and key: str, value: PCell, _View

Instances of child cells which this circuit is composed of: {‘instance_name’: cell, …} where cell is an i3.PCell object.

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

from siepic_shuksan import technology
from siepic_shuksan.all import HeatedSpiralMatrix
import ipkiss_fixes
lo = HeatedSpiralMatrix().Layout()
lo.visualize(annotate=True, box=None, canvas_size=(1000.0, None))

Ports

Name

Type

Position

Angle

Waveguide Template

Inclination

wg_in_0_0

Optical

(-65.0,30.0)

180.0

WaveguideWireTemplate

0.0

wg_out_0_0

Optical

(328.896,-74.817)

0.0

WaveguideWireTemplate

0.0

bias_0_0

Electrical

(-34.002,10.45)

90.0

M2WireTemplate

0.0

wg_in_0_1

Optical

(-65.0,32.0)

180.0

WaveguideWireTemplate

0.0

wg_out_0_1

Optical

(326.896,-72.817)

0.0

WaveguideWireTemplate

0.0

bias_0_1

Electrical

(48.998,10.45)

90.0

M2WireTemplate

0.0

wg_in_0_2

Optical

(-65.0,34.0)

180.0

WaveguideWireTemplate

0.0

wg_out_0_2

Optical

(324.896,-70.817)

0.0

WaveguideWireTemplate

0.0

bias_0_2

Electrical

(131.998,10.45)

90.0

M2WireTemplate

0.0

wg_in_0_3

Optical

(-65.0,36.0)

180.0

WaveguideWireTemplate

0.0

wg_out_0_3

Optical

(322.896,-68.817)

0.0

WaveguideWireTemplate

0.0

bias_0_3

Electrical

(214.998,10.45)

90.0

M2WireTemplate

0.0

wg_in_1_0

Optical

(-65.0,146.0)

180.0

WaveguideWireTemplate

0.0

wg_out_1_0

Optical

(320.896,41.183)

0.0

WaveguideWireTemplate

0.0

bias_1_0

Electrical

(-34.002,126.45)

90.0

M2WireTemplate

0.0

wg_in_1_1

Optical

(-65.0,148.0)

180.0

WaveguideWireTemplate

0.0

wg_out_1_1

Optical

(318.896,43.183)

0.0

WaveguideWireTemplate

0.0

bias_1_1

Electrical

(48.998,126.45)

90.0

M2WireTemplate

0.0

wg_in_1_2

Optical

(-65.0,150.0)

180.0

WaveguideWireTemplate

0.0

wg_out_1_2

Optical

(316.896,45.183)

0.0

WaveguideWireTemplate

0.0

bias_1_2

Electrical

(131.998,126.45)

90.0

M2WireTemplate

0.0

wg_in_1_3

Optical

(-65.0,152.0)

180.0

WaveguideWireTemplate

0.0

wg_out_1_3

Optical

(314.896,47.183)

0.0

WaveguideWireTemplate

0.0

bias_1_3

Electrical

(214.998,126.45)

90.0

M2WireTemplate

0.0

wg_in_2_0

Optical

(-65.0,262.0)

180.0

WaveguideWireTemplate

0.0

wg_out_2_0

Optical

(314.896,157.183)

0.0

WaveguideWireTemplate

0.0

bias_2_0

Electrical

(-34.002,242.45)

90.0

M2WireTemplate

0.0

wg_in_2_1

Optical

(-65.0,264.0)

180.0

WaveguideWireTemplate

0.0

wg_out_2_1

Optical

(316.896,159.183)

0.0

WaveguideWireTemplate

0.0

bias_2_1

Electrical

(48.998,242.45)

90.0

M2WireTemplate

0.0

wg_in_2_2

Optical

(-65.0,266.0)

180.0

WaveguideWireTemplate

0.0

wg_out_2_2

Optical

(318.896,161.183)

0.0

WaveguideWireTemplate

0.0

bias_2_2

Electrical

(131.998,242.45)

90.0

M2WireTemplate

0.0

wg_in_2_3

Optical

(-65.0,268.0)

180.0

WaveguideWireTemplate

0.0

wg_out_2_3

Optical

(320.896,163.183)

0.0

WaveguideWireTemplate

0.0

bias_2_3

Electrical

(214.998,242.45)

90.0

M2WireTemplate

0.0

wg_in_3_0

Optical

(-65.0,378.0)

180.0

WaveguideWireTemplate

0.0

wg_out_3_0

Optical

(322.896,273.183)

0.0

WaveguideWireTemplate

0.0

bias_3_0

Electrical

(-34.002,358.45)

90.0

M2WireTemplate

0.0

wg_in_3_1

Optical

(-65.0,380.0)

180.0

WaveguideWireTemplate

0.0

wg_out_3_1

Optical

(324.896,275.183)

0.0

WaveguideWireTemplate

0.0

bias_3_1

Electrical

(48.998,358.45)

90.0

M2WireTemplate

0.0

wg_in_3_2

Optical

(-65.0,382.0)

180.0

WaveguideWireTemplate

0.0

wg_out_3_2

Optical

(326.896,277.183)

0.0

WaveguideWireTemplate

0.0

bias_3_2

Electrical

(131.998,358.45)

90.0

M2WireTemplate

0.0

wg_in_3_3

Optical

(-65.0,384.0)

180.0

WaveguideWireTemplate

0.0

wg_out_3_3

Optical

(328.896,279.183)

0.0

WaveguideWireTemplate

0.0

bias_3_3

Electrical

(214.998,358.45)

90.0

M2WireTemplate

0.0

gnd

Electrical

(320.898,285.183)

90.0

M2WireTemplate

0.0

Layout

Parameters
view_name: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3.

The name of the view

CircuitModel

Parameters

layout_view: ( _LayoutView ), None allowed netlist_view: ( NetlistView ), None allowed view_name: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3.

The name of the view

Other Parameters
solver: str and String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters, locked

circuit solver to use

Splitters

splitter_2x2_1310

2x2 splitter operating at TE and 1310 nm

from siepic_shuksan import technology
from siepic_shuksan.all import splitter_2x2_1310
import ipkiss_fixes
lo = splitter_2x2_1310().Layout()
lo.visualize(annotate=True, box=None, canvas_size=(1000.0, None))

Ports

Name

Type

Position

Angle

Waveguide Template

Inclination

opt4

Optical

(63.001,-2.0)

0.0

WaveguideWireTemplate

0.0

opt3

Optical

(63.001,2.0)

0.0

WaveguideWireTemplate

0.0

opt2

Optical

(-63.001,-2.0)

180.0

WaveguideWireTemplate

0.0

opt1

Optical

(-63.001,2.0)

180.0

WaveguideWireTemplate

0.0

y_splitter_1310

1x2 Y-splitter operating at TE and 1310 nm

from siepic_shuksan import technology
from siepic_shuksan.all import y_splitter_1310
import ipkiss_fixes
lo = y_splitter_1310().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)

180.0

WaveguideWireTemplate

0.0

opt2

Optical

(29.791,0.675)

0.0

WaveguideWireTemplate

0.0

opt3

Optical

(29.791,-0.675)

0.0

WaveguideWireTemplate

0.0

tap_10_90_1270nm

This component is used to tap 10% of the input signal at 1270 nm. It can be also used at longer wavelengths, however, the power tapped will be slightly more than 10%.

from siepic_shuksan import technology
from siepic_shuksan.all import tap_10_90_1270nm
import ipkiss_fixes
lo = tap_10_90_1270nm().Layout()
lo.visualize(annotate=True, box=None, canvas_size=(1000.0, None))

Ports

Name

Type

Position

Angle

Waveguide Template

Inclination

opt3

Optical

(10.77,2.225)

0.0

WaveguideWireTemplate

0.0

opt4

Optical

(10.77,-2.225)

0.0

WaveguideWireTemplate

0.0

opt2

Optical

(-10.77,-2.225)

180.0

WaveguideWireTemplate

0.0

opt1

Optical

(-10.77,2.225)

180.0

WaveguideWireTemplate

0.0

Splitter Trees

ShuksanSplitterTree

Custom splitter tree for the SiEPIC Shuksan PDK, where the vertical spacing of the output waveguides is not constant. The output waveguides are distributed over several waveguide groups in which the waveguides are closer together than the vertical distance between those groups. Circuit model is derived from the hierarchical model.

Parameters:
wg_radius: float and number > 0

Radius of the routed waveguide bends

splitter: PCell

Splitter used

spacing_y_groups: float and number > 0

Vertical spacing between the groups

spacing_y_ports: float and number > 0

Vertical spacing between the output ports

n_wg_groups: int

Number of grouped output waveguides (or sub splitter trees)

n_wgs_per_wg_group: int

Number of waveguides per group

strict: ( bool, bool_ or int )

If True, any error will raise an exception and stop the program flow. If False, any routing error will give a warning and draw a straight line on an error layer. See i3.ConnectLogical for more information.

exposed_ports: ( dict ), *None allowed*

Ports to be exposed, mapping {‘instance_name:port_name’: external_port_name’} map for i3.expose_ports().Set to None (default) to expose all unconnected ports

specs: list

Placement and routing specifications

insts: OrderedDict and key: str, value: PCell, _View

Instances of child cells which this circuit is composed of: {‘instance_name’: cell, …} where cell is an i3.PCell object.

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters:
spacing_x: float and number > 0, locked

Horizontal spacing between the levels

n_levels_ports: int, locked

Number of port levels within a group

n_levels_groups: int, locked

Number of group levels

from siepic_shuksan import technology
from siepic_shuksan.all import ShuksanSplitterTree
import ipkiss_fixes
lo = ShuksanSplitterTree().Layout()
lo.visualize(annotate=True, box=None, canvas_size=(1000.0, None))

Ports

Name

Type

Position

Angle

Waveguide Template

Inclination

in

Optical

(0.0,0.0)

180.0

WaveguideWireTemplate

0.0

out_0_0

Optical

(159.164,-177.0)

0.0

WaveguideWireTemplate

0.0

out_0_1

Optical

(159.164,-175.0)

0.0

WaveguideWireTemplate

0.0

out_0_2

Optical

(159.164,-173.0)

0.0

WaveguideWireTemplate

0.0

out_0_3

Optical

(159.164,-171.0)

0.0

WaveguideWireTemplate

0.0

out_1_0

Optical

(159.164,-61.0)

0.0

WaveguideWireTemplate

0.0

out_1_1

Optical

(159.164,-59.0)

0.0

WaveguideWireTemplate

0.0

out_1_2

Optical

(159.164,-57.0)

0.0

WaveguideWireTemplate

0.0

out_1_3

Optical

(159.164,-55.0)

0.0

WaveguideWireTemplate

0.0

out_2_0

Optical

(159.164,55.0)

0.0

WaveguideWireTemplate

0.0

out_2_1

Optical

(159.164,57.0)

0.0

WaveguideWireTemplate

0.0

out_2_2

Optical

(159.164,59.0)

0.0

WaveguideWireTemplate

0.0

out_2_3

Optical

(159.164,61.0)

0.0

WaveguideWireTemplate

0.0

out_3_0

Optical

(159.164,171.0)

0.0

WaveguideWireTemplate

0.0

out_3_1

Optical

(159.164,173.0)

0.0

WaveguideWireTemplate

0.0

out_3_2

Optical

(159.164,175.0)

0.0

WaveguideWireTemplate

0.0

out_3_3

Optical

(159.164,177.0)

0.0

WaveguideWireTemplate

0.0

Layout

Parameters
view_name: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3.

The name of the view

CircuitModel

Parameters

layout_view: ( _LayoutView ), None allowed netlist_view: ( NetlistView ), None allowed view_name: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3.

The name of the view

Other Parameters
solver: str and String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters, locked

circuit solver to use

Tapers

taper_350nm_2000nm

Standard taper between the standard 350 nm and 2000 nm waveguide

from siepic_shuksan import technology
from siepic_shuksan.all import taper_350nm_2000nm
import ipkiss_fixes
lo = taper_350nm_2000nm().Layout()
lo.visualize(annotate=True, box=None, canvas_size=(1000.0, None))

Ports

Name

Type

Position

Angle

Waveguide Template

Inclination

opt2

Optical

(50.01,0.0)

0.0

WaveguideWireTemplate

0.0

opt

Optical

(0.01,0.0)

180.0

WaveguideWireTemplate

0.0

Terminators

terminator_1310

Terminator waveguide at 1310 nm

from siepic_shuksan import technology
from siepic_shuksan.all import terminator_1310
import ipkiss_fixes
lo = terminator_1310().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

WaveguideWireTemplate

0.0

Waveguides

WaveguideWire

Waveguide wire where the core width can be user defined.

Parameters:
core_width: float and number > 0

Width of the core [um]

trace_template: PCell and _WaveguideTemplate
name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

from siepic_shuksan import technology
from siepic_shuksan.all import WaveguideWire
import ipkiss_fixes
lo = WaveguideWire().Layout()
lo.visualize(annotate=True, box=None, canvas_size=(1000.0, None))

Ports

Name

Type

Position

Angle

Waveguide Template

Inclination

in

Optical

(0.0,0.0)

180.0

WaveguideWireTemplate

0.0

out

Optical

(2.0,0.0)

0.0

WaveguideWireTemplate

0.0

Layout

Parameters
core_width: float and number > 0

Width of the core [um]

shape: Shape

Shape from which the Trace is calculated

trace_template: _LayoutView bend_radius: float and number > 0

Bend radius for the auto-generated bends.

CircuitModel

Parameters
length: float and Real, number and number >= 0

The physical length of the waveguide during simulation

layout_view: ( _LayoutView ), None allowed netlist_view: ( NetlistView ), None allowed view_name: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3.

The name of the view

Other Parameters
solver: str and String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters, locked

circuit solver to use

wg_strip_o_350

Standard single mode waveguide with a core width of 350 nm

Parameters:
name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

from siepic_shuksan import technology
from siepic_shuksan.all import wg_strip_o_350
import ipkiss_fixes
lo = wg_strip_o_350().Layout()
lo.visualize(annotate=True, box=None, canvas_size=(1000.0, None))

Ports

Name

Type

Position

Angle

Waveguide Template

Inclination

in

Optical

(0.0,0.0)

180.0

WaveguideWireTemplate

0.0

out

Optical

(2.0,0.0)

0.0

WaveguideWireTemplate

0.0

Layout

Parameters
shape: Shape

Shape from which the Trace is calculated

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

bend_radius: float and number > 0

Bend radius for the auto-generated bends.

CircuitModel

Parameters
length: float and number > 0

Length of the trace [micron]

loss_db_per_cm: float and number > 0

Waveguide propagation loss [dB/cm]

wavelength_bounds: ndarray

Wavelength range in which the model is valid

ng_fit_coeff: ndarray

Fit coefficients of the group indices

neff_fit_coeff: ndarray

Fit coefficients of the effective indices

layout_view: ( _LayoutView ), None allowed netlist_view: ( NetlistView ), None allowed view_name: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3.

The name of the view

Other Parameters
solver: str and String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters, locked

circuit solver to use

wg_strip_o_mm_2000

Standard multimode waveguide with a core width of 2000 nm

Parameters:
name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

from siepic_shuksan import technology
from siepic_shuksan.all import wg_strip_o_mm_2000
import ipkiss_fixes
lo = wg_strip_o_mm_2000().Layout()
lo.visualize(annotate=True, box=None, canvas_size=(1000.0, None))

Ports

Name

Type

Position

Angle

Waveguide Template

Inclination

in

Optical

(0.0,0.0)

180.0

WaveguideWireTemplate

0.0

out

Optical

(2.0,0.0)

0.0

WaveguideWireTemplate

0.0

Layout

Parameters
shape: Shape

Shape from which the Trace is calculated

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

bend_radius: float and number > 0

Bend radius for the auto-generated bends.

CircuitModel

Parameters
length: float and number > 0

Length of the trace [micron]

loss_db_per_cm: float and number > 0

Waveguide propagation loss [dB/cm]

wavelength_bounds: ndarray

Wavelength range in which the model is valid

ng_fit_coeff: ndarray

Fit coefficients of the group indices

neff_fit_coeff: ndarray

Fit coefficients of the effective indices

layout_view: ( _LayoutView ), None allowed netlist_view: ( NetlistView ), None allowed view_name: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3.

The name of the view

Other Parameters
solver: str and String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters, locked

circuit solver to use

Waveguide Bragg Gratings

WaveguideBraggGrating

Parametric Waveguide Bragg Grating (WBG). In this WBG, you can include chirp, apodization, an offset between the gratings on both sides of the waveguide, and you can choose between a rectangular or sinusoidal grating. The gratings have a standard duty cycle of 50%, but this can be adapted (only for the rectangular grating).

Parameters:
apodized: ( bool, bool_ or int )

Cosine apodization

corrugation_width: float

Corrugation width [um]

grating_chirp: float

Linear chirp parameter of the grating, meaning the difference in grating period at start and end [um]

grating_duty_cycle: float and number > 0 and ]0.0,1.0[

Factor for the wide section (width of the wide section divided by grating period)

grating_offset: float and Real, number and number >= 0

Horizontal offset between top and bottom grating

grating_period: float and number > 0

Grating period at the center unit cell(s) [um]

grating_shape: str and String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters and List with value restriction, allowed values: (‘RECT’, ‘SINE’)

Rectangular (‘RECT’) or sine (‘SINE’) grating

n_periods: int and number >= 0

Number of periods

width: float and number > 0

Average width of the grating [um]

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

from siepic_shuksan import technology
from siepic_shuksan.all import WaveguideBraggGrating
import ipkiss_fixes
lo = WaveguideBraggGrating().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

WaveguideWireTemplate

0.0

pin2

Optical

(3.0,0.0)

0.0

WaveguideWireTemplate

0.0

Changelog

0.2.3.luceda3

  • Use np.int32 instead of np.int for compatibility with numpy 1.26

  • Use np.float64 instead of np.float for compatibility with numpy 1.26

0.2.3.luceda2

  • Added an .iclib file (library file recognized by IPKISS Canvas) with symbol drawings

0.2.3.luceda1

  • Updated for IPKISS 3.9. The PDK runs on Python3 as well as Python2 IPKISS 3.9 is required to run the PDK

0.2.3

  • Fix snapping issues in the spirals and rings

  • Fix circuit model of the generic waveguide templates (and associated semi-autoroute waveguides)

  • Add Waveguide Bragg Grating parametric cell (only layout) and Terminator building block (only layout)

  • Add Heated Ring Filter parametric cells (only layout)

0.1.3

  • Initial implementation of the IPKISS PDK for SiEPIC Shuksan: layers, cell library, tape-out settings, basic documentation