Filtering DRC errors from std. cells with assura

Discussion in 'Cadence' started by Svenn Are Bjerkem, Nov 24, 2007.

  1. Hi,

    I am facing a problem that the std. cells are giving me lots of DRC
    errors that I want to filter because they are "OK". The standard cells
    themselves do not have any special measures so I have to mock up some
    kind of ruleset for assura to identify standard cells and throw away
    *any* DRC errors that come from the std. cell but not from metal
    layers above it. (as they are placed by me, and may be full of
    errors.) Only those geometries already within a std. cell should be
    neglected, whatever I inject in the same space should, so I can not
    just ignore a certain area.

    I have tried to define standardCell and
    blackBoxCell( standardCells ) , but there are still DRC errors on the
    pins that the black box provide, so I still have a few DRC errors
    coming from the std. cell itself, and hence garbles up the user DRC
    errors.

    Anybody has an idea how to tell Assura "these are std. cell
    geometries, ignore errors"? I am just starting to scratch the surface
    of writing runsets so any pointer would be helpful.
     
    Svenn Are Bjerkem, Nov 24, 2007
    #1
  2. Svenn Are Bjerkem

    S. Badel Guest

    Do you care about errors involving shapes from inside AND outside stdandard cell (for example,
    spacing error between one wire above and one metal shape inside the stdcell) ?

    If not, ie you just want to "thraw away" whatever's in the stdcells and consider only the shapes
    above, you could probably use ignoreCell() avParameter. That should have the same effect as deleting
    the cell instances before running DRC, I guess.

    If yes, then you'll need some way of identifying shapes from a stdcell, and consider only error
    which involve at least one shape from above. For example, you could use a different purpose
    (MET1/stdcell) for such shapes and modify the drc rules accordingly. That's what I can think of
    right now :)


    Cheers,

    Stéphane
     
    S. Badel, Nov 25, 2007
    #2
  3. I think the answer is yes. We have been discussing ignoring the entire
    space above a standard cell, but after looking into some more toplevel
    cells, we found that then most of the metal routing done by us would
    be ignored... :-( I am trying to read and understand the assuradev.pdf
    and realize that it is a completely full time job to write runsets. No
    wonder why companies have departments focusing on this topic. And they
    don't seem to hang out here, either. Wonder where they exchange their
    bits and pieces of info......

    --
    Svenn
     
    Svenn Are Bjerkem, Nov 26, 2007
    #3
  4. According to the development manual, Assura is supposed to be able to
    have area based rule.
    I was looking at the function cellBoundary() which is supposed to be
    used with the layerDefs section. There is some talk about the boundary
    of the cell here and it seems that there is actually a layer called
    cellBoundary. Does a rectangle of this layer have to be placed in the
    layout of the cell, or will Assura create a bounding box of itself
    based on whatever layers are placed within the cell? I would probably
    have to create a test layout to find this out, but as it is a bit of
    work to accomplish (I also have to rewrite some of the drc.rul file) I
    thought I should give the question a try here first.
     
    Svenn Are Bjerkem, Nov 28, 2007
    #4
  5. Svenn Are Bjerkem

    S. Badel Guest

    The word "layer" may be a little confusing. They refer as "layer" to the data that is processed,
    i.e. in the layerDefs section you pick original layers from the layout, and following you create new
    layers by processing the original ones.

    Basically, cellBoundary gives you a "layer", ie an area, corresponding to the merged boundary of the
    cells you are giving as arguments - that's at least what I understand -

    Might actually be intersting for your purpose. For example :

    layerDefs( "dfII"
    met1 = layer( "MET1" "drawing" )
    stdcell = cellBoundary( file("standard_cells.txt") )
    ) ; layerDefs

    met1_over_stdcell = geomAnd( met1 stdcell )


    But this selects both shapes from inside and outside the stdcell, as long as it overlaps the stdcell
    area. Actually what seems even more interesting is the extractCellLayer() function, which - as far
    as I understand - will give you the data on a specific layer, but only from the cells you are giving
    as argument.

    layerDefs( "dfII"
    met1 = layer( "MET1" "drawing" )
    met1_stdcell = extractCellLayer( met1 file("standard_cells.txt") )
    ) ; layerDefs

    ;; select met1 shapes not in standard cells
    ;; but including shapes in standard cells that are contacted by met1
    met1_andnot_stdcell = geomAndNot(met1 met1_stdcell)
    met1_over = geomOr(
    geomButting(met1_stdcell met1_andnot_stdcell)
    met1_andnot_stdcell
    )

    ;; check spacing
    met1_spacing_error = geomAnd(
    drc( met1_over sep < 0.1 ) ;; this checks spacing between met1-over - met1-over
    drc( met1_over met1_stdcell sep < 0.1 ) ;; this ichecks spacing between met1-over and met1-stdcell
    )



    * All the code above is untested, just some ideas :) *

    Hope this helps,

    Stéphane
     
    S. Badel, Nov 29, 2007
    #5
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.