Known backwards incompatibilities 3.1.3
Waveguide circuit models
Before IPKISS 3.1.3, waveguide models did not extract the length from the layout except when you explicitly set the
default waveguide model to CapheModelFromLayout
, for example:
import ipkiss3.all as i3
i3.Waveguide.set_default_view("CapheModelFromLayout")
i3.RoundedWaveguide.set_default_view("CapheModelFromLayout")
Using a zero-length by default was not a sensible default. Now we extract the length from the layout. This means
that the Python code above can be ommitted in scripts now. For backward compatibility reasons, CapheModelFromLayout
and CapheModel
will remain to exist, but we recommend using CircuitModel
now, which replaces both views.
See also the circuit model tutorial to learn more about the new
CircuitModel view.
Subclassing legacy CapheModel
All components in ipkiss and picazzo have both a new CircuitModel
and a legacy CapheModel
. This ensures that scripts
that use the old CapheModel
will still be working as before, this way you can gradually transition to using CircuitModel
. Both models
are made to be equivalent, the only difference is in the way they’re executed.
In some cases however, you might have subclassed from the CapheModel
view to extend the default behavior. In this case you’ll
need to tell ipkiss to prefer your extended model over the CircuitModel
. You can use set_default_view
for this, as illustrated in
the example below.
import si_fab.all as pdk
from ipkiss.technology import get_technology
TECH = get_technology()
import ipkiss3.all as i3
from picazzo3.filters.mmi import MM1x2
class MyMMI(MM1x2):
class CapheModel(MM1x2.CapheModel):
def _default_back_coupling(self):
return 0.1
# Required to ensure that the adapted model is used.
MyMMI.set_default_view(MyMMI.CapheModel)
mmi = MyMMI()
assert isinstance(mmi.get_default_view(i3.CircuitModelView), MyMMI.CapheModel)
ShapeWindowTraceTransition.straight_extension
The straight_extension property of ShapeWindowTraceTransition was incorrectly used in previous releases when the trace template types were reversed. This is also the case for the following predefined transitions in picazzo3:
WireRibWaveguideTransitionLinear, WireRibWaveguideTransitionFromPortLinear
WireRibWireWaveguideTransitionLinear, WireRibWireWaveguideTransitionFromPortLinear
WireSocketWaveguideTransitionLinear, WireSocketWaveguideTransitionFromPortLinear
ThinnedWireWireWaveguideTransitionLinear, ThinnedWireWireWaveguideTransitionFromPortLinear
In the following example a rib waveguide to wire waveguide transition is created, with and (exaggerated) straight extension set to (1.0, 2.0). WireRibWaveguideTransitionLinear is used and is called with a rib waveguide as the start and a wire waveguide as the end trace template. In ipkiss 3.1.2, the transition would have gotten a 2.0um extension at the start point (rib waveguide) and a 1.0um extension at the end point (strip waveguide), whereas one would expect the reverse. In Ipkiss 3.1.3, the first value of the straight_extension corresponding always to the start point and the second value to the end point of the transition. Designs from before 3.1.3 will therefore render slightly different on 3.1.3 in case straight_extension was used.
import technologies.silicon_photonics
from ipkiss3 import all as i3
from picazzo3.traces.wire_wg import WireWaveguideTemplate
from picazzo3.traces.rib_wg import RibWaveguideTemplate
from picazzo3.traces.rib_wg import WireRibWaveguideTransitionLinear
wg_start = RibWaveguideTemplate()
wg_start.Layout(core_width=1.0, cladding_width=5.0)
wg_end = WireWaveguideTemplate()
wg_end.Layout()
trans = WireRibWaveguideTransitionLinear(name="my_rib_wire_transition",
start_trace_template=wg_start,
end_trace_template=wg_end)
trans_lo = trans.Layout(start_position=(0.0, 0.0),
end_position=(6.0, 0.0),
straight_extension=(1, 2))
trans_lo.visualize_2d()