Home Forums Nazca Adding Phase Shifters from demofab to Directional Coupler

Tagged: 

Viewing 10 posts - 1 through 10 (of 10 total)
  • Author
    Posts
  • #5558
    AleksandarK
    Member

    Dear Nazca designers,

    I have played with Nazca and in documentation (here to be precise) i discovered a phase shifter. Now i am wondering how could i add it to the Directional Coupler like this little demonstration i created (the gray box) here: https://imgur.com/nX6Bp7L

    I would like to add the phase shifter there with some leads from it.

    Here is my Directional Coupler:

    import nazca as nd
    import nazca.demofab as demo
    
    with nd.Cell("Coupler") as coupler:
        # Upper arm
        demo.shallow.sinebend(distance=200, offset=-40).put(0, 50)
        demo.shallow.strt(length=40).put()
        demo.shallow.sinebend(distance=200, offset=40).put()
    
        # Lower arm
        demo.shallow.sinebend(distance=200, offset=40).put(0, -50)
        demo.shallow.strt(length=40).put()
        demo.shallow.sinebend(distance=200, offset=-40).put()
    
        # Add pins
        nd.Pin("a0").put(0, 50, 180)
        nd.Pin("a1").put(0, -50, 180)
        nd.Pin("b0").put(220, 50, 0)
        nd.Pin("b1").put(220, -50, 0)
    
    coupler.put(0, 0)
    
    nd.export_gds()

    Thanks for reading 🙂

    #5560
    Ronald
    Keymaster

    Dear AlexsandarK,

    This link to getting started may be helpful to start connecting components, as well as this topic on cells and instances.

    In your specific case you want to connect the phase shifter (electro-optical phase modulator) to pin[‘b0’] of the coupler you placed:

    C = coupler.put(0)
    demo.eopm_dc().put(C.pin['b0'])

    Ronald

    #5563
    AleksandarK
    Member

    Thanks for the answer Ronald!

    I was looking at how are lasers are made and saw how to add external pin here. I would like to add external pin to phase shifter in order to for it to be controled. How can i pass that argument to it? I understand how to do it when drawing a cell from schratch, but how to add external pin(with leads to it) when i use demo.eopm_dc() func to draw the phase shifer?

    #5564
    Ronald
    Keymaster

    Dear AleksandarK,

    Pins are added at cell level. A good example you may have been looking at as you mention is in getting started part “7 Creating a parametrized DBR laser”. After a cell is closed (after leaving the with-context), you can’t add stuff to the cell any more and pin positions and properties are fixed (which is intended). Parameters to add to a pin at definition time are described here.

    Ronald

    #5573
    AleksandarK
    Member

    Dear Ronald,

    I added the pin, but i seem to get an error.

    Here is the code.

    I get:

    Traceback (most recent call last):
    File “dc_with_phase_shifter.py”, line 23, in <module>
    demo.eopm_dc(length=150).put(C.pin[‘b0’], pin[‘c0’])
    NameError: name ‘pin’ is not defined

    Can anyone please help? 🙂

    #5585
    AleksandarK
    Member

    So, after some more trials I managed to do this.

    Here is what my code looks like now. Ideally i would like the pin and a connection to it to be similar to the one found on laser module tutorial. Anyone has any ideas?

    #5587
    Xaveer
    Moderator

    Hi Aleksandar,

    The phase shifter has a different cross section (“deep”) and you therefore need to add a shallow-to-deep junction. Also, placing the pad directly on top of the modulator is not advised, because the underlying structure could be damaged during electrical probing or bonding. So I added an offset w.r.t. the phase modulator.

    Instead of the bend_strt_bend I used an sbend, which is usually what you’d have in such cases.

    import nazca as nd
    import nazca.demofab as demo
    
    with nd.Cell("Coupler") as coupler:
        # Upper arm
        demo.shallow.sinebend(distance=100, offset=-40).put(0, 50)
        demo.shallow.strt(length=20).put()
        demo.shallow.sinebend(distance=100, offset=40).put()
    
        # Lower arm
        demo.shallow.sinebend(distance=100, offset=40).put(0, -50)
        demo.shallow.strt(length=20).put()
        demo.shallow.sinebend(distance=100, offset=-40).put()
    
        # Pins
        nd.Pin("a0").put(0, 50, 180)
        nd.Pin("a1").put(0, -50, 180)
        nd.Pin("b0").put(220, 50, 0)
        nd.Pin("b1").put(220, -50, 0)
    
    C = coupler.put(0)
    demo.s2d().put()
    eopm = demo.eopm_dc(length=150).put()
    
    pad = demo.pad_dc().put(eopm.pin["c1"].move(200, 100, 0))
    
    demo.metaldc.sbend_p2p(eopm.pin["c1"], Lstart=100).put()
    
    nd.export_gds()

    Xaveer

    #5590
    AleksandarK
    Member

    Thank you!

    So if i wish to continue a waveguide from pin c1(if that is possible to do while still having external dc pin on that port), i have to use deep to shallow junctiom as well?

    #5591
    Xaveer
    Moderator

    In this case the eopm has four ports: a0, b0 and c0, c1. a0 and b0 are the optical ports, c0, c1 the electrical ports. They can be at the same location, depending on the specific component. a0 and b0 are the ports that by default are connected to.

    If you want to connect an optical waveguide to the eopm, it has to be at b0 (or a0, but that is already connected). You can tell from the color of the stub if the connections match, deep-deep, or shallow-shallow, for the demofab technology. You should have loaded the demofab_klayout_colors.lyp file in klayout for proper visual feedback. Colors are very important in Nazca. See https://nazca-design.org/manage-klayout-technologies for instructions.

    After the eopm you indeed have to add a deep to shallow junction and continue with shallow waveguides, or you can just continue with waveguides in the deep cross section, in which case of course there is no need for the transition.

    #5592
    AleksandarK
    Member

    Thank you very much!

Viewing 10 posts - 1 through 10 (of 10 total)
  • You must be logged in to reply to this topic.