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()