How to create a MZM

Creating a MZM component

How to create a MZM component with foundry BBs

# example created by Bright Photonics

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

# example created by Bright Photonics

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
19 December 2019

Inverted MMI

In this example we show how to create an inverted MMI with custom interconnects.
Nazca LayoutNazca Foundry
8 December 2019

Euler bends

In this example we show how to use Euler bends
Nazca LayoutNazca Foundry
8 December 2019

Free form curves

In this example we show how to create a free form parametric curve
Nazca LayoutNazca Foundry
11 November 2019

Log your layout

In this example we show how to log your layout.