build_awg_1xM

awg_designer.sample_designs.awg.demux1xM.build_awg_1xM(aperture_in, aperture_arms, aperture_out, waveguide_template, delay_length, N_arms, R_grating, R_input, angles_arms_in, angles_arms_out, angles_out, multiaperture_class=<class 'awg_designer.components.multi_aperture.multi_aperture.MultiApertureShallowMerged'>, dummy_apertures=1, bend_radius=None, simulation_wavelengths=None, name=None, straight_trace_template=None)

Build an 1xM rectangular form AWG demux PCell.

Note

This function is considered legacy. Please consider building an AWG following the new conventions, as explained in the AWG porting in IPKISS 3.5 guide.

Parameters:
aperture_in, aperture_arms, aperture_out: ipkiss pcell

The apertures to be used for the input, grating arms, and output, respectively.

waveguide_template: waveguide template

The waveguide template to be used for the waveguide arms.

delay_length: float

Delay line length of the AWG See also awg_designer.all.delay_length_from_FSR().

N_arms: int

Number of grating arms of the AWG.

R_grating: float

Radius of the grating. Normally, this is determined in such a way that the first order diffraction of the grating falls outside of the range of the output apertures. See also awg_designer.all.get_R_grating().

R_input: float

Radius of the gratings at the input star coupler. Usually taken the same as R_grating.

angles_arms_in, angles_arms_out: list of angles

Angles at which to position the grating apertures for the input/output star coupler, respectively.

angles_out: list of angles

Angles at which to position the output apertures. The length of this array determines the number of outputs. See also awg_designer.all.get_angles_out(). Note: this list may be swapped internally to provide a consistent netlist.

multiaperture_class: pcell class (default: filters.MultiApertureShallowMerged)

The class to use for building the multiapertures. Currently, you can use awg_designer.all.MultiAperture (which, for the layout, will re-use the layout of the apertures), or awg_designer.all.MultiApertureShallowMerged (which will replace the layout with a DRC-clean, merged version).

dummy_apertures: integer >= 0

When set to a value, dummy apertures will be added to the star coupler to make the input/output modes more similar (to reduce crosstalk / loss).

bend_radius: float or None

When set to None, use the default values from your technology. When set, use this for the bend radius in the waveguide arms of the AWG.

simulation_wavelengths: list of floats or None

The wavelengths for which to calculate the underlying physical model of the star couplers. When set to None, the physical model will be calculated for each wavelength requested from the CircuitModel/ When set to a singleton (e.g. [1.55]), the star coupler model will be wavelength independent (it will be simulated for this value). When set to a list (e.g. [1.53, 1.54]), the star coupler model will only be valid for these values.

name: string or None

When set to a string, used as the name for the AWG cell

straight_trace_template: waveguide template

If provided, the waveguide template to use in the expanded / straight sections of the AWG. Using a broader waveguide in the straight sections is used to decrease phase error.

Returns:
Returns an AWG PCell.
  • Use awg_lay = awg.get_default_view(i3.LayoutView) to access the layout.
  • Use awg_cm = awg.get_default_view(i3.CircuitModelView) to access the circuit model

    (for calculating the full AWG S-matrix).

See also

awg_designer.all.get_layout_params_1xM_demux_um

Function to get the layout parameters, with equidistant channels in wavelength domain.

awg_designer.all.get_layout_params_1xM_demux_ghz

Function to get the layout parameters, with equidistant channels in frequency domain.

Examples

The following illustrates how to use the design function (the full sample can be found in the samples: samples/filters/sample_rect_awg_design.py).

>>> # This design function will give equidistant channels in the frequency domain
>>> layout_params = filters.get_layout_params_1xM_demux_ghz(
>>>     aperture_in=ap_rib,
>>>     aperture_arms=ap_rib,
>>>     aperture_out=ap_rib,
>>>     waveguide_template=wg_tmpl,
>>>     output_spacing=4.0, M=8,
>>>     center_frequency=center_frequency,
>>>     channel_spacing=400,
>>>     verbose=True)
>>>
>>> print(layout_params)
>>>
>>> from awg_designer.sample_designs.awg.demux1xM import build_awg_1xM
>>> awg = build_awg_1xM(
>>>     aperture_in=ap_rib,
>>>     aperture_arms=ap_rib,
>>>     aperture_out=ap_rib,
>>>     waveguide_template=wg_tmpl,
>>>     dummy_apertures=2,
>>>     multiaperture_class=filters.MultiApertureShallowMerged,
>>>     bend_radius=40,
>>>     simulation_wavelengths=[center_wavelength],
>>>     **layout_params)