Help to give some ideas to write code to add dummy layer

Discussion in 'Cadence' started by Tech11, Apr 18, 2006.

  1. Tech11

    Tech11 Guest

    Hello everyone,

    I need to write one script to add dummy layer to resolve the density
    question of verification, but I don't know how to do it, who may help to
    give some ideas? Thanks for your help!

    Have a good day!

    B.R.

    Joffre
     
    Tech11, Apr 18, 2006
    #1
  2. Tech11

    S. Badel Guest

    I need to write one script to add dummy layer to resolve the density
    You can usually do it with DRC verification software. For example, assura has commands generateFill
    and generateCustomFill to do it. You would need to create a custom deck.

    Doing it with SKILL code is also possible. I would generate a fill pattern the size of the layout,
    , then generate a temporary layer covering areas empty of metal, using dbLayerAndNot() and
    dbLayerSize() for example, then keep the fill patterns inside that area by dbLayerInside().

    I however believe the SKILL solution will be heavy for large layouts.

    stéphane
     
    S. Badel, Apr 18, 2006
    #2
  3. The dbLayer procedures do not flatten the hierarchy, so they are of
    limited use. I would go with the DRC tool approach. If you don't want to
    use Assura, there is always Diva's density check and area fill. The
    geomArrayShapes command not as sophisticated as the Assura fill
    generators, but it gets the job done for most cases.

    Create a fill cell:
    rep = dbOpenCellViewByType("Lib" "filler" "layout" "maskLayout" "w")
    dbCreateRect(rep list("m1" "boundary") list(0:0 0.3:0.3))
    dbCreateRect(rep list("m1" "drawing1") list(0:0 0.15:0.15))
    dbCreateRect(rep list("m1" "drawing2") list(0.05:0.075 0.1:0.37))
    dbCreateRect(rep list("m1" "drawing3") list(0.075:0.05 0.37:0.1))

    Tweak the fill cell to be appropriate for your process size.

    Then a DRC deck:
    drcExtractRules(
    ; remove the old fill so it does not interfere
    geomErase("m1" "fill")
    ; collect the layer to fill
    m1 = geomOr("m1")
    ; measure the density in the area occupied by m1
    lowdensity = drc(m1 geomExtent(m1) coverage < 0.4 windowSize(10)
    stepSize(2.5))
    ; keep fill shapes at least 0.1 from real m1
    fillarea = geomAndNot(lowdensity geomSize(m1 0.1))
    ; get the fill shapes
    filler = geomArrayShapes(fillarea "filler layout"
    ("m1" "drawing1") ("m1" "boundary"))
    ; only use fill shapes that are completely inside fillarea
    fill = geomInside(filler fillarea)
    if( avSwitch("connectFill")
    then
    conv = geomArrayShapes(met1 "filler layout"
    ("m1" "drawing2") ("m1" "boundary"))
    conh = geomArrayShapes(met1 "filler layout"
    ("m1" "drawing3") ("m1" "boundary"))
    ; select connectors that touch two fill shapes
    conv = geomOverlap(conv fill keep > 1)
    conh = geomOverlap(conh fill keep > 1)
    ; merge it all together
    fill = geomOr(fill conv conh)
    )
    ; save to the design
    saveDerived(fill ("m1" "fill"))
    )

    If it does not work quite the way you want, play with it some.
     
    Edward Kalenda, Apr 18, 2006
    #3
Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.