Traces
A range of predefined waveguide trace templates are available in picazzo:
Wire waveguides: fully etched wire (strip) waveguides
Rib waveguides : shallowly etched rib waveguides
Socket waveguides: deep etched rib waveguides
Slot waveguides : slot waveguides
Thinned waveguides : thinned waveguides
Electrical wires : electrical wires
Transitions
In order to build transitions between different trace templates, we use waveguide transitions, also called tapers. Most transitions are built to taper towards a wire waveguide template. Below is a list of available transitions:
picazzo3.traces.thin_wg.ThinnedWireWireWaveguideTransitionLinear
,picazzo3.traces.slot_wg.SlottedWireWaveguideTransitionLinear
,picazzo3.traces.socket_wg.WireSocketWaveguideTransitionLinear
.
If often occurs that you want to taper from a port of a given component towards another waveguide template, with a given taper length. In this case, it’s more convenient to use the matching TransitionFromPort
class. Below is a list of such tapers:
picazzo3.traces.wire_wg.WireWaveguideTransitionFromPortLinear
,picazzo3.traces.rib_wg.WireRibWaveguideTransitionFromPortLinear
,picazzo3.traces.thin_wg.ThinnedWireWireWaveguideTransitionFromPortLinear
,picazzo3.traces.slot_wg.SlottedWireWaveguideTransitionFromPortLinear
,picazzo3.traces.socket_wg.WireSocketWaveguideTransitionFromPortLinear
.
Transition circuit models
Currently, there are two circuit models: CircuitModel
and SimpleCircuitModel
. The weight_factor
property (between 0 and 1) averages all circuit properties of two waveguide templates and uses these values for the transition model. For example:
import si_fab.all as pdk
from ipkiss3 import all as i3
from picazzo3.traces.wire_wg import WireWaveguideTemplate
from picazzo3.traces.rib_wg import RibWaveguideTemplate, WireRibWaveguideTransitionLinear
wire = WireWaveguideTemplate()
wire.CircuitModel(n_eff=2.80)
rib = RibWaveguideTemplate()
rib.CircuitModel(n_eff=3.10)
transition = WireRibWaveguideTransitionLinear(start_trace_template=wire,
end_trace_template=rib)
cm = transition.SimpleCircuitModel(weight_factor=0.5, length=10.0)
print("n_eff of the transition: {n_eff}".format(n_eff=cm.n_eff))
This will print an effective index of 2.95.
If you use SimpleCapheModelFromLayout
, you do not have to specify a length. Rather, after providing the start_position
and end_position
to the Layout of the transition, the length will be calculated automatically.