How to create a laser

Creating a laser component

How to create a laser component with foundry BBs

In this example we show how to create a laser from foundry components. We use DBR gratings, gain section (SOA) and isolation sections from demofab to make a laser. Make sure to use demofab_klayout_colors.lyp to view the mask in KLayout.

import nazca as nd
import nazca.demofab as demo

#create a iso cell for reuse
iso = demo.isolation_act(length=20)
#draw the laser
demo.dbr(length=30).put(0)
iso.put()
demo.soa(length=300).put()
iso.put()
demo.phase_shifter(length=50).put()
iso.put()
demo.dbr(length=500).put()

nd.export_gds()

To create a laser building block we will use Nazca ‘Cell’ object. Nazca calls a building block a ‘Cell’ object, because it will be exported as a cell in GDS. The new laser building block can be put several times in the mask.

import nazca as nd
import nazca.demofab as demo

with nd.Cell(name='laser') as laser:
    #create a iso cell for reuse
    iso = demo.isolation_act(length=20)
    #draw the laser
    demo.dbr(length=30).put(0)
    iso.put()
    demo.soa(length=300).put()
    iso.put()
    demo.phase_shifter(length=50).put()
    iso.put()
    demo.dbr(length=500).put()

laser.put(0)
laser.put(0, 300)
laser.put(0, 600)

nd.export_gds()

We can also add Pins to the laser building block in order to connect it to the rest of the layout, for example to interconnect laser metal pads to external DC pads.

import nazca as nd
import nazca.demofab as demo

def dbr_laser(Ldbr1=50, Ldbr2=500, Lsoa=750, Lpm=70):
    """Create a parametrized dbr laser building block."""
    with nd.Cell(name='laser') as laser:
        #create a iso cell for reuse
        iso = demo.isolation_act(length=20)

        #draw the laser
        s2a = demo.s2a().put(0)
        dbr1 = demo.dbr(length=Ldbr1).put()
        iso.put()
        soa = demo.soa(length=Lsoa).put()
        iso.put()
        phase = demo.phase_shifter(length=Lpm).put()
        iso.put()
        dbr2 = demo.dbr(length=Ldbr2).put()
        a2s = demo.a2s().put()

        # add pins to the laser building block
        nd.Pin('a0', pin=s2a.pin['a0']).put()
        nd.Pin('b0', pin=a2s.pin['b0']).put()
        nd.Pin('c0', pin=dbr1.pin['c0']).put()
        nd.Pin('c1', pin=soa.pin['c0']).put()
        nd.Pin('c2', pin=phase.pin['c0']).put()
        nd.Pin('c3', pin=dbr2.pin['c0']).put()
    return laser

#place the laser block
laser1 = dbr_laser().put(0)

#add guides to the laser
demo.shallow.strt(length=100).put(laser1.pin['a0'])
demo.shallow.strt(length=200).put(laser1.pin['b0'])

#add pads to the laser
for i, pinname in enumerate(['c0', 'c1', 'c2', 'c3']):
    pad = demo.pad_dc().put(i*250+150, 600, 90)
    demo.metaldc.sbend_p2p(laser1.pin[pinname], pad.pin['c0'], Lstart=(i+1)*100).put()

nd.export_gds()

Related Tutorials

Nazca LayoutNazca Foundry
16 November 2018

Add text to your layout

In this example we show how to add text to your layout.
Nazca LayoutNazca FoundryPhotonic BBs
19 January 2018

Create a building block using Polygons

In this example we show how to create a building block from Polygons.
Nazca LayoutNazca FoundryPhotonic BBs
19 January 2018

Create a photonic crystal using a GDS array

In this example we show how to create a photonic crystal using GDS array.