IoFibcoupEastWest¶
- class picazzo3.container.iofibcoup.IoFibcoupEastWest(*args, **kwargs)¶
Adapter for grating fiber couplers East and West.
The component East and West ports are treated separately, and routed towards the East and West, respectively. For this routing, they go through several steps. The settings for the East and West grating couplers can be tuned.
Here, we discuss the use for the East ports, but a similar set of parameters is available for the West ports.
First of all, the ports of the component are transitioned to a common trace template
east_trace_template
. By default, it uses the standard waveguide definition defined inTECH.PCELLS.WG.DEFAULT
. However, if set toNone
, the trace will use the trace template of the actual port. The same holds foreast_transition_length
. This can be manually specified by the user, but if a value in the list is set toNone
, the default length of that type of transition will be used.Then, the ports are fanned out to the fixed
y_spacing
of the fiber couplers. The length of that Fanout can be specified througheast_fanout_length
. Similarly, bend radius and rounding algorithm can be set through the parameterbend_radius
androunding_algorithm
. Ifwest_bundle_traces
isTrue
, the cover layers will be drawn over the Fanout. This can help reduce DRC errors.Then, the waveguides are transitioned to another waveguide template, specified in
east_connect_trace_template
. By default, this is the same template aseast_trace_template
, but it is possible to override it to use a lower loss multi-mode waveguide. The connection for which this waveguide is used is a simple straight connection, but depending on the chip layout it can have a long length. The transition length can be manually specified using theeast_connect_transition_length
.At the output, the waveguides are transitioned to the waveguide template of the individual input and output fiber couplers. The transition length from the connection waveguide to the grating coupler can be specified using
east_fiber_coupler_transition_length
.Finally, the circuit is terminated with fiber couplers, using the PCell specified in
east_fiber_coupler
The same procedure and parameters are used for the west ports
- Parameters
- east_trace_template: ( PCell and _WaveguideTemplate ), *None allowed*
The trace template that will be used for the Fanout of the East ports. If ‘None’, the trace template of the individual port will be used. Defaults to
TECH.PCELLS.WG.DEFAULT
.- west_trace_template: ( PCell and _WaveguideTemplate ), *None allowed*
The trace template that will be used for the Fanout of the West ports. If ‘None’, the trace template of the individual port will be used. Defaults to
TECH.PCELLS.WG.DEFAULT
.- east_fiber_coupler: PCell
Fiber coupler to be attached to the East ports. Defaults to
TECH.IO.FIBCOUP.DEFAULT.PCELLS.DEFAULT_GRATING
- east_fiber_coupler_external_port_name_map: str
Dicts to map the names of the East fiber coupler ports that will be exposed as external ports. The dict is of the form {‘port_name_on_termination’: ‘unique_external_port_name’, …}. the ‘unique_external_port_name’ string can contain the identifier {port}, which will be replaced by the corresponding port name on the component. For example, the default is {‘vertical_in’ : ‘{port}’}, which will map the port ‘vertical_in’ of the fiber coupler to the name of port on the component.
- west_fiber_coupler: PCell
Fiber coupler to be attached to the West ports. Defaults to
TECH.IO.FIBCOUP.DEFAULT.PCELLS.DEFAULT_GRATING
- east_connect_trace_template: ( PCell and _WaveguideTemplate ), *None allowed*
The trace template that will be used for connecting the Fanout of the East ports. to the Grating couplers. If ‘None’, the trace template of the individual port will be used. Defaults to the same as
east_trace_template
.- west_connect_trace_template: ( PCell and _WaveguideTemplate ), *None allowed*
The trace template that will be used for connecting the Fanout of the West ports. to the Grating couplers. If ‘None’, the trace template of the individual port will be used. Defaults to the same as
west_trace_template
.- west_fiber_coupler_external_port_name_map: str
Dicts to map the names of the West fiber coupler ports that will be exposed as external ports. The dict is of the form {‘port_name_on_termination’: ‘unique_external_port_name’, …}. the ‘unique_external_port_name’ string can contain the identifier {port}, which will be replaced by the corresponding port name on the component. For example, the default is {‘vertical_in’ : ‘{port}’}, which will map the port ‘vertical_in’ of the fiber coupler to the name of port on the component.
- east_fiber_coupler_port_labels: List with type restriction, allowed types: <class ‘str’>
Port labels of the East fiber couplers connected to the ports of the contents. For fiber couplers with more than one port, the port labels should be concatenated with a ‘,’. For example, when using 2D grating couplers, the ports could be [‘in1,in2’, ‘in’]. This will use ports ‘in1’ and ‘in2’ of the first grating coupler, and ‘in’ of the second.By default, all the West ports of all the fiber couplers are used. If an entry in the list is ‘None’, also the west ports of that fiber coupler are used. The number of entries in the list should not be identical to the number of East port. If the component has fewer East ports, only the first entries in the list will be used. If the component has more East ports, the list is just recycled. Therefore, it is allowed to use a list of just one element for multiple ports.
- west_fiber_coupler_port_labels: List with type restriction, allowed types: <class ‘str’>
Port labels of the West fiber couplers connected to the ports of the contents. For fiber couplers with more than one port, the port labels should be concatenated with a ‘,’. For example, when using 2D grating couplers, the ports could be [‘in1,in2’, ‘in’]. This will use ports ‘in1’ and ‘in2’ of the first grating coupler, and ‘in’ of the second.By default, all the East ports of the fiber coupler are used. If an entry in the list is ‘None’, also the East ports of that fiber coupler are used. The number of entries in the list should not be identical to the number of West port. If the component has fewer West ports, only the first entries in the list will be used. If the component has more West ports, the list is just recycled. Therefore, it is allowed to use a list of just one element for multiple ports.
- east_port_labels: ( List with type restriction, allowed types: <class ‘str’> ), *None allowed*
Labels of the ports to directed to the East. Set to None to process all East ports.
- west_port_labels: ( List with type restriction, allowed types: <class ‘str’> ), *None allowed*
Labels of the ports to directed to the West. Set to None to process all West ports.
- contents: PCell
the contents of the container: the child cell
- external_port_names: str
Dictionary for remapping of the port names of the contents to the external ports
- 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
- east_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked
- west_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked
- east_connect_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked
- west_connect_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked
- east_fiber_coupler_external_port_name_maps: locked
- east_fiber_couplers: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked
- west_fiber_coupler_external_port_name_maps: locked
- west_fiber_couplers: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked
- port_labels: locked
Examples
"""This example illustrates how the IoFibcoupEastWest properties can customize the routing in an IoColumn.""" from technologies import silicon_photonics # noqa: F401 from ipkiss3 import all as i3 from picazzo3.filters.mmi import MMIIdentical from picazzo3.traces.wire_wg import WireWaveguideTemplate wg_t1 = WireWaveguideTemplate() wg_t1.Layout(core_width=7.0, cladding_width=8.0) my_mmi = MMIIdentical(mmi_trace_template=wg_t1, n_inputs=1, n_outputs=5) my_mmi.Layout(length=10.0, input_y_positions=[-1.0], output_y_positions=[-2.0, -1.0, 0.0, 1.0, 2.0]) from picazzo3.container.iofibcoup import IoFibcoupEastWest from ipkiss3.pcell.blocks.iocolumn import IoColumn my_column = IoColumn(name="iocol", adapter=IoFibcoupEastWest, max_n_o_lines=100) my_column.Layout(south_east=(1200.0, 0.0)) my_column.add(my_mmi) my_column.add(my_mmi, relative_offset=(0.0, 50.0), transformation=i3.Rotation(rotation=180.0)) layout = my_column.Layout() layout.visualize(annotate=True)
Views
- Layout = <class 'picazzo3.container.iofibcoup.cell.IoFibcoupEastWest.Layout'>¶