在ipkiss中,可以通过WindowWaveguideTemplate来定义自己的波导模板(trace_template),
如SlotWaveguidetemplate:
所有代码如下(注:只适用于ipkiss3.11及以上版本):
import si_fab.all as pdk # noqa: F401
import ipkiss3.all as i3
class SlotWaveguideTemplate(i3.WindowWaveguideTemplate):
class Layout(i3.WindowWaveguideTemplate.Layout):
core_width = i3.PositiveNumberProperty(doc="Core width of the waveguide")
slot_width = i3.PositiveNumberProperty(doc="slot width of the waveguide")
cladding_width = i3.PositiveNumberProperty(doc="cladding width of the waveguide")
def _default_core_width(self):
return 0.4
def _default_slot_width(self):
return 0.4
def _default_cladding_width(self):
return 4
def _default_windows(self):
return [
i3.PathTraceWindow(
layer=i3.TECH.PPLAYER.SI,
start_offset=-self.core_width - 0.5 * self.slot_width,
end_offset=- 0.5 * self.slot_width,
),
i3.PathTraceWindow(
layer=i3.TECH.PPLAYER.SI,
start_offset=0.5 * self.slot_width,
end_offset=self.core_width + 0.5 * self.slot_width,
),
i3.PathTraceWindow(
layer=i3.TECH.PPLAYER.SI_CLADDING,
start_offset=-0.5 * self.cladding_width,
end_offset=0.5 * self.cladding_width
),
]
if __name__ == '__main__':
# Instantiate the new waveguide template to use it in our waveguide below
wg_tmpl = SlotWaveguideTemplate()
wg = i3.RoundedWaveguide(trace_template=wg_tmpl)
wg_lay = wg.Layout(shape=[(0, 0), (10, 0), (10, 10)])
wg_lay.visualize(annotate=True)