III-V-on-Silicon DFB Laser
A heterogeneously integrated III-V/silicon distributed feedback laser with a quarter-wave-shifted grating and adiabatic tapers.
Laser from laylight/laser.lyl, compiled in your browserOpen in playgroundSilicon does not emit light, so lasers on silicon chips bond a III-V gain material, such as an InP-based multiple-quantum-well stack, on top of a silicon waveguide. In the gain section the optical mode sits mostly in the III-V; at both ends the III-V mesa narrows to a tip while the silicon waveguide widens, which pushes the mode down into the silicon. A grating etched into the silicon under the gain section makes it a distributed feedback (DFB) laser, and a quarter-wave phase shift in the middle of the grating makes it lase on a single wavelength.
The example follows the DFB lasers of Keyvaninia et al.: a 3 µm mesa over a 680 µm gain section, narrowing to 0.9 µm over 35 µm and then to a 500 nm tip over 150 µm at each end. Under it, the silicon waveguide is 0.68 µm wide and widens to 2.16 µm along the tips, after the laser of Duprez et al. The grating trenches have a 490 nm period and a 25 % duty cycle; the two halves of the grating are a quarter period apart, the quarter-wave shift of a second-order grating. A wider n-InP layer carries the n contacts on either side of the mesa, a p contact runs along the top of the mesa, and metal covers each contact.
References
- S. Keyvaninia et al., "Heterogeneously integrated III-V/silicon distributed feedback lasers," Optics Letters 38(24), 5434 (2013). doi:10.1364/OL.38.005434
- H. Duprez et al., "1310 nm hybrid InP/InGaAsP on silicon distributed feedback laser with high side-mode suppression ratio," Optics Express 23(7), 8489–8497 (2015), for the silicon waveguide. doi:10.1364/OE.23.008489
Parameters
| Parameter | Value | Source |
|---|---|---|
| Gain section | 680 µm | Keyvaninia 2013 (read as the length of the grating section) |
| Grating | 490 nm period, 25 % etched, quarter-wave shift | Keyvaninia 2013, Fig. 1(b), Fig. 2 |
| Mesa | 3 µm; 35 µm taper to 0.9 µm; 150 µm taper to a 500 nm tip | Keyvaninia 2013, Sec. 2 |
| Silicon waveguide | 0.68 µm, widening to 2.16 µm along the tips | Duprez 2015 (taper length matched to the III-V taper) |
| n-InP layer, contacts | 50 µm; 2 µm p contact, 10 µm n contacts | assumed |
How it is written
The mesa is a rectangle with two tapers chained on each end by their start and end anchors; the left ones are clones placed with rotate 180deg. The silicon tapers are placed on the start of the III-V tips, so they run alongside them whatever the dimensions. The grating is one loop that places a trench on each side of the center, offset by an eighth of a period, which leaves the quarter-period shift in the middle. The metal is one line: the three contacts grown by 1 µm, [p_contact, n_upper, n_lower] + 1um.
Implementations
| Implementation | Lines of code | Tokens | Layout |
|---|---|---|---|
| Laylight | 40 | 329 | reference |
| gdsfactory | 48 (1.20×) | 501 (1.52×) | same within 1 nm |
| gdstk | 37 (0.93×) | 441 (1.34×) | same within 1 nm |
| KLayout | 41 (1.02×) | 409 (1.24×) | same within 1 nm |
import "tech.lyl"
# A heterogeneously integrated III-V-on-silicon DFB laser, after Keyvaninia et
# al., Opt. Lett. 2013: a III-V mesa bonded over a Si waveguide with a
# second-order grating and a quarter-wave shift. At both ends the mesa tapers
# to a tip while the Si widens, so that the light moves down into the Si.
cell Laser(
length = 680um, # gain section with the grating
period = 490nm,
duty_cycle = 0.25, # etched fraction of a period
si_width = 680nm, # Si waveguide under the gain section
si_out_width = 2.16um, # ... and at the tips
mesa_width = 3um,
neck_width = 900nm, # after the fast taper
tip_width = 500nm,
fast_length = 35um,
taper_length = 150um, # adiabatic taper
nmesa_width = 50um,
contact_width = 2um, # p contact on the mesa
n_contact_width = 10um,
) {
layer mesa {
shape rect with length, mesa_width as gain at self.origin
shape taper with fast_length, mesa_width, neck_width as right_fast
place right_fast.start at gain.right_center
shape taper with taper_length, neck_width, tip_width as right_tip
place right_tip.start at right_fast.end
clone right_fast as left_fast.start at gain.left_center rotate 180deg
clone right_tip as left_tip.start at left_fast.end
}
layer si {
shape rect with length + 2 * fast_length, si_width as core at self.origin
shape taper with taper_length, si_width, si_out_width as right_out
place right_out.start at right_tip.start
clone right_out as left_out.start at left_tip.start
}
# Grating trenches; the two halves are a quarter wave apart, which is a
# quarter period for a second-order grating.
layer shallow {
for i in 0..round(length / period / 2) {
define x = period / 8 + (i + 0.5) * period
shape rect with duty_cycle * period, si_width as left at (-x, 0)
clone left as right at (x, 0)
}
}
layer nmesa { shape rect with length, nmesa_width as n_layer at self.origin }
# A p contact on the mesa and n contacts on the n layer on either side,
# each under a metal strip 1 um wider.
layer contact {
shape rect with length, contact_width as p_contact at self.origin
shape rect with length, n_contact_width as n_upper
place n_upper at (0, (mesa_width + nmesa_width) / 4)
clone n_upper as n_lower at (0, -(mesa_width + nmesa_width) / 4)
}
layer metal { shape [p_contact, n_upper, n_lower] + 1um as electrodes }
}
"""A heterogeneously integrated III-V-on-silicon DFB laser, as laylight/laser.lyl."""
import gdsfactory as gf
from tech import CONTACT, MESA, METAL, NMESA, SHALLOW, SI
@gf.cell
def laser(
length=680,
period=0.49,
duty_cycle=0.25,
si_width=0.68,
si_out_width=2.16,
mesa_width=3,
neck_width=0.9,
tip_width=0.5,
fast_length=35,
taper_length=150,
nmesa_width=50,
contact_width=2,
n_contact_width=10,
):
"""A III-V mesa over a Si waveguide with a second-order grating and a quarter-wave
shift; at both ends the mesa tapers to a tip while the Si widens."""
c = gf.Component()
mesa = gf.cross_section.cross_section(width=mesa_width, layer=MESA)
gain = c << gf.components.straight(length, cross_section=mesa)
gain.dmove((-length / 2, 0))
for port in gain.ports:
fast = c << gf.components.taper(fast_length, mesa_width, neck_width, layer=MESA)
fast.connect("o1", port)
tip = c << gf.components.taper(taper_length, neck_width, tip_width, layer=MESA)
tip.connect("o1", fast.ports["o2"])
si = gf.cross_section.cross_section(width=si_width, layer=SI)
core = c << gf.components.straight(length + 2 * fast_length, cross_section=si)
core.dmove((-length / 2 - fast_length, 0))
for port in core.ports:
out = c << gf.components.taper(taper_length, si_width, si_out_width, layer=SI)
out.connect("o1", port)
# Grating trenches; the two halves are a quarter wave apart, which is a quarter
# period for a second-order grating.
size = (duty_cycle * period, si_width)
trench = gf.components.rectangle(size, layer=SHALLOW, centered=True)
columns = round(length / period / 2)
for s in [1, -1]:
grating = c.add_ref(trench, columns=columns, column_pitch=s * period)
grating.dmove((s * (period / 8 + period / 2), 0))
c << gf.components.rectangle((length, nmesa_width), layer=NMESA, centered=True)
# A p contact on the mesa and n contacts on the n layer on either side, each
# under a metal strip 1 um wider.
y = (mesa_width + nmesa_width) / 4
for yc, w in [(0, contact_width), (y, n_contact_width), (-y, n_contact_width)]:
contact = c << gf.components.rectangle(
(length, w), layer=CONTACT, centered=True
)
contact.dmove((0, yc))
metal = c << gf.components.rectangle(
(length + 2, w + 2), layer=METAL, centered=True
)
metal.dmove((0, yc))
return c
if __name__ == "__main__":
import sys
laser().write_gds(sys.argv[1])
"""A heterogeneously integrated III-V-on-silicon DFB laser, as laylight/laser.lyl."""
import gdstk
from tech import CONTACT, MESA, METAL, NMESA, SHALLOW, SI
def laser(
length=680,
period=0.49,
duty_cycle=0.25,
si_width=0.68,
si_out_width=2.16,
mesa_width=3,
neck_width=0.9,
tip_width=0.5,
fast_length=35,
taper_length=150,
nmesa_width=50,
contact_width=2,
n_contact_width=10,
):
"""A III-V mesa over a Si waveguide with a second-order grating and a quarter-wave
shift; at both ends the mesa tapers to a tip while the Si widens."""
cell = gdstk.Cell("Laser")
x0 = length / 2
x1 = x0 + fast_length
x2 = x1 + taper_length
mesa = gdstk.FlexPath((-x2, 0), tip_width, **MESA)
mesa.segment((-x1, 0), neck_width).segment((-x0, 0), mesa_width).segment((x0, 0))
mesa.segment((x1, 0), neck_width).segment((x2, 0), tip_width)
si = gdstk.FlexPath((-x2, 0), si_out_width, **SI)
si.segment((-x1, 0), si_width).segment((x1, 0)).segment((x2, 0), si_out_width)
cell.add(mesa, si)
# Grating trenches; the two halves are a quarter wave apart, which is a quarter
# period for a second-order grating.
d = duty_cycle * period
trench = gdstk.rectangle((-d / 2, -si_width / 2), (d / 2, si_width / 2), **SHALLOW)
for i in range(round(length / period / 2)):
x = period / 8 + (i + 0.5) * period
cell.add(trench.copy().translate(-x, 0), trench.copy().translate(x, 0))
cell.add(gdstk.rectangle((-x0, -nmesa_width / 2), (x0, nmesa_width / 2), **NMESA))
# A p contact on the mesa and n contacts on the n layer on either side, each
# under a metal strip 1 um wider.
y = (mesa_width + nmesa_width) / 4
for yc, w in [(0, contact_width), (y, n_contact_width), (-y, n_contact_width)]:
contact = gdstk.rectangle((-x0, yc - w / 2), (x0, yc + w / 2), **CONTACT)
cell.add(contact, *gdstk.offset(contact, 1, **METAL))
return cell
if __name__ == "__main__":
import sys
lib = gdstk.Library()
lib.add(laser())
lib.write_gds(sys.argv[1])
"""A heterogeneously integrated III-V-on-silicon DFB laser, as laylight/laser.lyl."""
import klayout.db as kdb
from tech import CONTACT, MESA, METAL, NMESA, SHALLOW, SI, layout
from waveguides import polygon
def symmetric(points):
"""The polygon symmetric about both axes through `points`, given from right to
left in the upper right quadrant."""
upper = points + [(-x, y) for x, y in reversed(points)]
return polygon(upper + [(x, -y) for x, y in reversed(upper)])
def laser(
length=680,
period=0.49,
duty_cycle=0.25,
si_width=0.68,
si_out_width=2.16,
mesa_width=3,
neck_width=0.9,
tip_width=0.5,
fast_length=35,
taper_length=150,
nmesa_width=50,
contact_width=2,
n_contact_width=10,
):
"""A III-V mesa over a Si waveguide with a second-order grating and a quarter-wave
shift; at both ends the mesa tapers to a tip while the Si widens."""
cell = layout.create_cell("Laser")
def shapes(layer):
return cell.shapes(layout.layer(layer))
x0 = length / 2
x1 = x0 + fast_length
x2 = x1 + taper_length
mesa = [(x2, tip_width / 2), (x1, neck_width / 2), (x0, mesa_width / 2)]
shapes(MESA).insert(symmetric(mesa))
shapes(SI).insert(symmetric([(x2, si_out_width / 2), (x1, si_width / 2)]))
# Grating trenches; the two halves are a quarter wave apart, which is a quarter
# period for a second-order grating.
trench = kdb.DBox(duty_cycle * period, si_width)
for i in range(round(length / period / 2)):
x = period / 8 + (i + 0.5) * period
shapes(SHALLOW).insert(trench.moved(-x, 0))
shapes(SHALLOW).insert(trench.moved(x, 0))
shapes(NMESA).insert(kdb.DBox(length, nmesa_width))
# A p contact on the mesa and n contacts on the n layer on either side, each
# under a metal strip 1 um wider.
y = (mesa_width + nmesa_width) / 4
for yc, w in [(0, contact_width), (y, n_contact_width), (-y, n_contact_width)]:
contact = kdb.DBox(length, w).moved(0, yc)
shapes(CONTACT).insert(contact)
shapes(METAL).insert(contact.enlarged(1, 1))
return cell
if __name__ == "__main__":
import sys
laser()
layout.write(sys.argv[1])
Germanium Electro-Absorption Modulator
A germanium waveguide electro-absorption modulator with a lateral p-i-n junction, butt-coupled to silicon waveguides.
Fiber-Array Test Structure
The unbalanced Mach-Zehnder interferometer wired to focusing grating couplers at the 127 µm pitch of a fiber array, with a loopback that calibrates the couplers.