Home Forums Nazca Creating priority rule for overlapping layers in specific regions

Viewing 5 posts - 1 through 5 (of 5 total)
  • Author
    Posts
  • #6263
    mpapadov
    Participant

    Hello Nazca team,

    I am facing a problem with the creating of a ring resonator device. The devices consists of rib waveguides so there are two layers: full thickness (blue) and partially etched (red).

    My problem is that when creating the ring cell, the partially etched layer overlaps with the other, thus creating an issue with the rib waveguides of the ring and the bus close to the coupling region. The resulting GDS looks like in the first picture, but ideally I would like the highlighted sections of the second picture to be removed.

    Ring resonator rib waveguides

    https://imgur.com/a/sEp1Wqq

    The title I have used is a bit vague because I am not sure what the best  way to approach this problem would be.

    I have tried to use the clipper operations from the example of https://nazca-design.org/inverted-mmi-creation/ and the Boolean operations in Klayout but I have not been successful so far because the priority I want is only local in those 2 highlighted sections, not global for the whole cells.

    Any help or guidance will be greatly appreciated.

    Thank you in advance.

    Marios

    #6265
    Xaveer
    Moderator

    Dear Marios,

    This is best done with a combination of nazca and klayout. Here is an example nazca script:

    import nazca as nd
    
    nd.add_xsection("marios")
    nd.add_layer2xsection(xsection="marios", layer=1)
    nd.add_layer2xsection(xsection="marios", layer=2, growx=10)
    nd.add_layer2xsection(xsection="marios", layer=3, growx=12)
    
    marios = nd.interconnects.Interconnect(xs="marios", radius=100)
    
    marios.strt(length=200, width=2).put(-100, 0, 0)
    marios.bend(radius=100, angle=-45, width=1.5).put(0, -2.2, 0)
    marios.bend(radius=100, angle=45, width=1.5).put(0, -2.2, 180)
    
    nd.export_gds()
    

    and the corresponding klayout script (save as “some_name.drc”):

    # Run with: klayout -b -r some_name.drc
    source("nazca_export.gds")
    target("output.gds", "processed")
    
    # Input waveguide layer (and "heal" tiny gaps)
    wg = input(1).sized(1.nm).sized(-1.nm)
    red = input(2)
    blue = input(3)
    
    # Subtract waveguide from red layer and output blue and new red layers
    result = (red - wg)
    result.output(12)
    blue.output(13)
    

    Run the latter script as argument to klayout from the command line:
    “klayout -b -r some_name.drc” and your output will be in the output.gds file.

    Xaveer

    #6267
    mpapadov
    Participant

    Dear Xaveer,

    Thank you for your very prompt response.

    Indeed  this script seems to do exactly what I need!

    I will try to incorporate it in my design and let you know if I face any issues.

    Thank you very much, once again.

    Marios

    #6268
    mpapadov
    Participant

    Dear Xaveer,

    I was able to implement your idea in my design and it works very well.

    However, I would prefer it if I could isolate this DRC script on specific cell(s).

    Is this possible maybe when defining the source file on the DRC script, or elsewhere?

    Maybe something like:

    source("nazca_export.gds[cell1, cell2]")

    Thank you in advance.

    #6269
    Xaveer
    Moderator

    Dear Marios,

    You can do almost anything with the DRC engine of Klayout. Please check the Klayout manuals on the website and the Klayout forum to find out.

    It is possible to specify the cell in the source command:

    source("nazca_export.gds", "cell")
    

    will use that cell.

    Xaveer

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