4.2. Electro-optic phase-shifter

An electo-optic phase shifter works by varying the voltage over a p-n diode in reverse bias. The waveguide is placed in correspondence of the junction. Varying the reverse bias moves the position of the junction, modulating the carrier density in the waveguide. As a result, the refractive index of the waveguide material is modulated through the plasma-dispersion effect. This, in turn, modulates the effective index and the phase of the light at the end of the waveguide.

4.2.1. Layout

4.2.1.1. Optical Waveguide

The layout of a phase shifter is composed of an optical part and an electrical part. The optical part controls the layers to etch in the silicon as to create the waveguide mode.

from si_fab import all as pdk
from ipkiss3 import all as i3

tt = pdk.SiRibWaveguideTemplate()
tt.Layout(core_width=0.8)

ps = pdk.PhaseShifterWaveguide(trace_template=tt,
                               length=2.0)
ps_lv = ps.Layout()
ps_lv.visualize(annotate=True)
xs = ps_lv.cross_section(cross_section_path=i3.Shape([(1.0, -8.0),
                                                      (1.0, 8.0)]))
xs.visualize()
../../../_images/explore_trace_template_00.png
../../../_images/explore_trace_template_01.png

4.2.1.2. Electrical contact

The modulation happens because of the plasma-dispersion effect at the junction. The electrical characteristics of the junction are controlled by the doping profile as a function of the position in the waveguide cross-section. SiFab has four possible doping levels: NPLUS, N, P and PPLUS. Each of these has its equivalent layer: i3.TECH.PPLAYER.NPLUS, i3.TECH.i3.PPLAYER.N, i3.TECH.i3.PPLAYER.P and i3.TECH.PPLAYER.PPLUS.

By default, the junction is exactly in the middle of the waveguide. If asymmetric doping profiles are used, the junction can be offset by using the junction_offset property. The width of the p-doped and n-doped layers are set by p-width and n-width. The offset of the highly doped regions are set by pplus-offset and nplus_offset for p-type and n-type doping, respectively. The highly doped regions are contacted via contact vias with pitch offset contact_offset_p and contact_offset_n, while using nr_contact_rows_n and nr_contact_rows_p. Finally, a connection is made to the metal layer M2 through M1 and contact vias, using the parameters m1_width, m1_offset, m2_width, m2_offset, nr_via_row, via_pitch, via_offset.

from si_fab import all as pdk
from ipkiss3 import all as i3

tt = pdk.SiRibWaveguideTemplate()
tt.Layout(core_width=0.8)

ps = pdk.PhaseShifterWaveguide(trace_template=tt,
                               length=2.0,
                               junction_offset=0.1,
                               p_width=6.0,
                               n_width=6.0,
                               pplus_offset=2.0,
                               nplus_offset=2.0,
                               contact_offset_p=3.0,
                               contact_offset_n=3.0,
                               nr_contact_rows_p=3,
                               nr_contact_rows_n=3,
                               m1_width=3.6,
                               m1_offset=2.0,
                               m2_width=4.8,
                               m2_offset=3.2,
                               nr_via_rows=6,
                               via_pitch=0.6,
                               via_offset=3.8)


ps_lv = ps.Layout()
ps_lv.visualize(annotate=True)
xs = ps_lv.cross_section(cross_section_path=i3.Shape([(1.0, -10.0),
                                                      (1.0, 10.0)]))
xs.visualize()
../../../_images/explore_electrical_00.png
../../../_images/explore_electrical_01.png

4.2.2. Model

The phase shifter is modeled using a \(V_{\pi}L_{\pi}\) model that is associated with a time constant \(\tau\). Usually, \(V_{\pi}L_{\pi}\) is determined by the reverse bias and the doping profile of the junction, as well as by temperature. Its value can be obtained through device level simulations or measurements. \(\tau\) is usually dominated by the \(RC\) constant associated with the capacitance of the phase shifter and the driver output resistance. Both \(\tau\) and \(V_{\pi}L_{\pi}\) need to be obtained through measurements or simulations and are not calculated by IPKISS.

SiFab also contains a simulation recipe simulate_phaseshifter that allows to experiment with the dynamics of the phase shiter.

from si_fab import all as pdk
from si_fab.components.phase_shifter.simulate.simulate import simulate_phaseshifter
import pylab as plt
import numpy as np
import os
# Phase Shifter

name = "simple_step"
results_array = []
length = 1e4
ps = pdk.PhaseShifterWaveguide(length=length,
                               trace_template=pdk.RWG450(),
                               junction_offset=-0.1)
vpi_lpi = 1.2
Cl = 1.1e-15  # F/um
R = 50
tau = ps.length * Cl * R
ps.CircuitModel(vpi_lpi=vpi_lpi)


results = simulate_phaseshifter(cell=ps,
                                nsteps=1000,
                                dt=5e-12,
                                step_amplitude=vpi_lpi,
                                center_wavelength=1.5,
                                simulate_sources=True,
                                simulate_circuit=True,
                                debug=False)
times = results["timesteps"]
results_array.append(results)


def phase_unwrap_normalize(results):
    unwrapped = np.unwrap(np.angle(results))
    return (unwrapped-unwrapped[1] * np.ones(unwrapped.shape))/np.pi


outputs = ["in", "elec1", "elec2", "out"]
process = [np.real, np.real, np.real, phase_unwrap_normalize]
fig, axs = plt.subplots(nrows=len(outputs), ncols=1, figsize=(6, 8))

for cnt, (f, pn) in enumerate(zip(process, outputs)):
    axs[cnt].set_title(pn)
    axs[cnt].plot(times, f(results[pn]), label="length: {}".format(length))

plt.tight_layout()
fig.savefig(os.path.join("{}.png".format(name)), bbox_inches='tight')
../../../_images/example_ps_simulation.png

4.2.3. Test your knowledge

Exercise 1

  1. Copy topical_training/mzm/explore_phaseshifter/explore_electrical.py.
  2. Try to replicate the following cross-section.
../../../_images/exercise_1.png

Solution

Exercise 2

  1. Copy topical_training/mzm/explore_phaseshifter/explore_electrical.py.
  2. Sweep the length of the phase shifter and explore the compromise between speed and modulation amplitude of the phase.
../../../_images/exercise_21.png

Solution