Min. Max. Length check in Klayout DRC

edited November 13 in Verification

Hi all,

There are design rules for creating slits in wide metal wire.
While I can easily code the width check, I’m not sure how to
code the length check.
Metal (actual) = Metal (data) – Slit (data)
Slit data design rules.
(Where Length > Width)
rule1: Width >= a um  (Min. W) - width check
rule2: Length >= b um  (Min. L) - how to check?
rule3: c um >= Length >= b um (Max. L) - how to check? (optional)

Could anyone advise on which commands or functions?
Thanks,

Comments

  • There is a simple solution under these conditions:

    1. The slits are rectangles
    2. They are oriented either 0 or 90 degree
    3. They have a minimum aspect ratio of c/a

    All these conditions can be checked before running the actual check. The actual check is based on "bbox_max" which gives the larger side of the bounding box.

    Here is a sketch:

    report("discussion 2621")
    
    l1 = input(1, 0)
    
    l1.non_rectangles.output("not rectangles")
    rectangles = l1.rectangles
    rectangles.drc(bbox_aspect_ratio < 3).output("slit aspect ratio is < 3")
    rectangles.drc(bbox_max < 5.um).output("slit length is < 5 µm")
    rectangles.drc(bbox_max >= 10.um).output("slit length is >= 10 µm")
    

    which gives me this:

    Matthias

  • Hi. Matthias.
    Thank you very much.
    I will create code and test soon.
    Regards,

  • Hi. Matthias.
    DRC process worked as expected and the check results were fully perfect.
    Thank you for your guidance.

    Regards,

  • Let me interject that I have slotted many, many
    fat metal bus lines drawn at 45 angle....

  • Hi @dick_freebird,

    This was the easiest solution I could come up with. There are other solutions too.

    Like, if you have checked the slot width and it is constant, you may check the area of the slot to confirm the length. Or separating edges into short and long ones and verifying that they connect. Or similar solutions.

    There is just no generic feature currently that fits all cases.

    Matthias

  • One thing that might be handy, presuming deep access to PDK, is to create for each "slottable" layer, a LayerN_slot counterpart. This would be directly checkable for size as plain rect or polygon (for my 45s). Tapeout would use a Boolean ANDNOT to throw the actual layer to a tapeout DB.

    Then metal max-W also runs straight up and will inform of any "misses" leaving excess local W.
  • @dick_freebird Ah, yes - actually I was assuming that there is such a thing than a positive "slot" layer. That is why the check takes positive shapes.

    Apart from being easier to edit, you can use arrays to create slot arrays. I am pretty much used to having boolean steps between drawing and layout. I am assuming this is common practice.

    Best regards,

    Matthias

Sign In or Register to comment.