How to create a MZM

Creating a MZM component

How to create a MZM component with foundry BBs

import nazca as nd
import nazca.demofab as demo

eopm = demo.eopm_dc(length=1000, pads=True)
mmi =  demo.mmi1x2_dp()

#part 1: BBs
left_mmi = mmi.put(0)
top_eopm = eopm.put(left_mmi.pin['b0'].move(135, 50))
bot_eopm = eopm.put(left_mmi.pin['b1'].move(135, -50), flip=True)
right_mmi = mmi.put('b1', top_eopm.pin['b0'].move(135, -50))

#part 2: top connections
demo.deep.sbend_p2p(left_mmi.pin['b0'], top_eopm.pin['a0']).put()
demo.deep.sbend_p2p(top_eopm.pin['b0'], right_mmi.pin['b1']).put()

#part 3: bottom connections
demo.deep.sbend_p2p(left_mmi.pin['b1'], bot_eopm.pin['a0']).put()
demo.deep.sbend_p2p(bot_eopm.pin['b0'], right_mmi.pin['b0']).put()

nd.export_gds()

In this example we show how to create a Mach-Zehnder Modulator (MZM) from foundry components. We use 1×2 MMIs, electro-optical phase modulators (EOPMs) from demofab to make this component. Make sure to use demofab_klayout_colors.lyp to view the mask in KLayout.

Below we show how to define a Mach-Zehnder interferometer Cell with the Pins to connect it in a layout, i.e optical pins ‘a0’, ‘b0’ and metal pins ‘c0’, ‘c1’.

import nazca as nd
import nazca.demofab as demo

with nd.Cell(name='mzi') as mziBB:
    eopm = demo.eopm_dc(length=1000, pads=True)
    mmi =  demo.mmi1x2_dp()

    #part 1: BBs
    left_mmi = mmi.put()
    top_eopm = eopm.put(left_mmi.pin['b0'].move(135, 50))
    bot_eopm = eopm.put(left_mmi.pin['b1'].move(135, -50), flip=True)
    right_mmi = mmi.put('b1', top_eopm.pin['b0'].move(135, -50))

    #part 2: top connections
    demo.deep.sbend_p2p(left_mmi.pin['b0'], top_eopm.pin['a0']).put()
    demo.deep.sbend_p2p(top_eopm.pin['b0'], right_mmi.pin['b1']).put()

    #part 3: bottom connections
    demo.deep.sbend_p2p(left_mmi.pin['b1'], bot_eopm.pin['a0']).put()
    demo.deep.sbend_p2p(bot_eopm.pin['b0'], right_mmi.pin['b0']).put()

    #part 4: add pins
    nd.Pin('a0', pin=left_mmi.pin['a0']).put()
    nd.Pin('b0', pin=right_mmi.pin['a0']).put()
    nd.Pin('c0', pin=top_eopm.pin['c0']).put()
    nd.Pin('c1', pin=bot_eopm.pin['c0']).put()

mziBB.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.