view single layout net 5141

Discussion in 'Cadence' started by stuso, Jan 14, 2010.

  1. stuso

    stuso Guest

    Hi all,

    In days gone by i used a Skill function that could take a Diva
    extracted view and create a new layout/extracted view with only the
    metal,poly,via & contact of pre-selected net(s) remaining i.e all
    other polygons were stripped away.

    For example, you may wish to see a layout only with GND in it, so you
    can review it's electromgration or weak points.

    Is there something similar kicking about for Assura or PVS...or
    perhaps
    even 5141 has such a function hidden away? The "mark net" function is
    close to what i want, but not quite.

    Thanks

    Stu
     
    stuso, Jan 14, 2010
    #1
  2. stuso

    PolyPusher Guest

    I do not have an answer for you, but I also need the same
    functionality. I agree that mark net is close, but leaves some to be
    desired.

    PolyPusher.
     
    PolyPusher, Jan 15, 2010
    #2
  3. stuso

    jayl-news Guest

    Stu,

    Not to mention that "mark net" on a power or ground layout of any
    size can take for bloody ever...

    What you want to do is start with your LVS deck (it already has the
    layers and connectivity you want), then add a net select command
    for each layer you want to extract, then output it.

    For Assura (which I used to use) that looks like this (in the extract
    deck:

    if( avSwitch( "probe_GND" )
    then
    m1p = geomGetNet( m1 "GND" )
    vi1p = geomGetNet( vi1 "GND" )
    m2p = geomGetNet( m2 "GND" )
    vi2p = geomGetNet( vi2 "GND" )
    m3p = geomGetNet( m3 "GND" )
    vi3p = geomGetNet( vi3 "GND" )
    m4p = geomGetNet( m4 "GND" )
    vi4p = geomGetNet( vi4 "GND" )
    m5p = geomGetNet( m5 "GND" )
    vi5p = geomGetNet( vi5 "GND" )
    m6p = geomGetNet( m6 "GND" )
    vi6p = geomGetNet( vi6 "GND" )
    m7p = geomGetNet( m7 "GND" )
    vi7p = geomGetNet( vi7 "GND" )
    m8p = geomGetNet( m8 "GND" )
    )

    Then like this in the RSF:

    outFile( "DFII" "PROBE_GND" "."
    "/path/to/your/techfile.tf" flat
    outLayer( m1p "METAL1" type("drawing"))
    outLayer( vi1p "VIA12" type("drawing"))
    outLayer( m2p "METAL2" type("drawing"))
    outLayer( vi2p "VIA23" type("drawing"))
    outLayer( m3p "METAL3" type("drawing"))
    outLayer( vi3p "VIA34" type("drawing"))
    outLayer( m4p "METAL4" type("drawing"))
    outLayer( vi4p "VIA45" type("drawing"))
    outLayer( m5p "METAL5" type("drawing"))
    outLayer( vi5p "VIA56" type("drawing"))
    outLayer( m6p "METAL6" type("drawing"))
    outLayer( vi6p "VIA67" type("drawing"))
    outLayer( m7p "METAL7" type("drawing"))
    outLayer( vi7p "VIA78" type("drawing"))
    outLayer( m8p "METAL8" type("drawing"))
    )

    So the output is a new dfII library with a flat cell in
    it containing your data. You can add any layer that
    shows up in geomConnect().

    You can obviously parameterize this, and put it in a
    batchmode wrapper script, etc., etc. I did that for
    Assura back in the day, and I've also done it in
    Hercules. You can do it in any LVS tool.

    -Jay-
     
    jayl-news, Jan 16, 2010
    #3
  4. stuso

    PolyPusher Guest

    Can anybody give me a leg up on the syntax for Calibre.

    Thank you for sharing this, I knew it could be done.
    PolyPusher
     
    PolyPusher, Jan 18, 2010
    #4
  5. stuso wrote, on 01/14/10 15:30:
    As I also posted at http://www.cadence.com/Community/forums/p/14499/24917.aspx#24917

    This takes care of following nets with presistors on too.

    I'll post the code here for completeness:


    /* abSelectExtractedNet.il

    Author A.D.Beckett
    Group Custom IC (UK), Cadence Design Systems Ltd.
    Language SKILL
    Date Jan 20, 2010
    Modified
    By

    Functions for selecting or copying all figures associated
    with a net in an extracted view. Can also cope with following
    nets through presistors.

    Should work in both IC5141 and IC61X.

    The four public functions are described below in more detail:

    abGetExtractedNetFigs()
    abSelectExtractedNet()
    abSelectSelectedExtractedNets()
    abCopySelectedExtractedNets(?lib "lib" ?cell "cell" ?view "layout")

    ***************************************************

    SCCS Info: @(#) abSelectExtractedNet.il 01/20/10.14:40:02 1.1

    */

    /**********************************************************************
    * *
    * (abGetExtractedNetFigs ?net netId [?followResistors '("presistor")] *
    * [?includeResistors t] [?netTable table]) *
    * *
    * Get all the figures on the netId passed in. Can follow through *
    * any parasitic resistors - ?followResistors is a list of parasitic *
    * resistor cellNames (nil is the default). ?includeResistors says *
    * whether the resistors themselves will be included in the figures *
    * returned. ?netTable is only used inside the function when it *
    * recursively calls itself. *
    * *
    **********************************************************************/

    (defun abGetExtractedNetFigs (@key net (followResistors '("presistor"))
    netTable (includeResistors t))
    ;----------------------------------------------------------------------
    ; If following resistors, it's more complicated - need to track which
    ; nets you've been to avoid loops
    ;----------------------------------------------------------------------
    (if followResistors
    (let (figs inst)
    ;------------------------------------------------------------------
    ; First time around, this table won't exist - so create it and
    ; pass it recursively down
    ;------------------------------------------------------------------
    (unless netTable
    (setq netTable (makeTable 'netTable nil))
    )
    (setarray netTable net t)
    ;------------------------------------------------------------------
    ; Get the figures directly on this piece of the net
    ;------------------------------------------------------------------
    (setq figs (dbGetq net figs))
    ;------------------------------------------------------------------
    ; Now follow any resistors on the net
    ;------------------------------------------------------------------
    (foreach instTerm (dbGetq net instTerms)
    (when (member (dbGetq (setq inst (dbGetq instTerm inst))
    cellName)
    followResistors)
    (foreach instInstTerm (dbGetq inst instTerms)
    ;----------------------------------------------
    ; Only look at nets which have not already visited
    ;----------------------------------------------
    (unless (arrayref netTable
    (dbGetq instInstTerm net))
    (when includeResistors
    (setq figs (cons inst figs)))
    ;--------------------------------------------
    ; Recursively follow the nets on any connected
    ; resistor, and add to the figures. Figures
    ; collected on the way back up the recursive
    ; call.
    ;--------------------------------------------
    (foreach fig
    (abGetExtractedNetFigs
    ?net (dbGetq instInstTerm net)
    ?followResistors followResistors
    ?includeResistors includeResistors
    ?netTable netTable)
    (setq figs (cons fig figs))
    )
    ) ; unless
    ) ; foreach instInstTerm
    ) ; when it's a resistor to be followed through
    ) ; foreach instTerm
    ;------------------------------------------------------------------
    ; Finally return the figures to pass back up
    ;------------------------------------------------------------------
    figs
    )
    ;--------------------------------------------------------------------
    ; Or in the simple case (no following of resistors) only have to
    ; get the figures directly on the net
    ;--------------------------------------------------------------------
    (dbGetq net figs)
    ) ; if
    ) ; defun abGetExtractedNetFigs

    /*********************************************************************
    * *
    * (abSelectExtractedNet ?net netId [?followResistors '("presistor")] *
    * [?includeResistors t]) *
    * *
    * Select all the figures on the net id passed in. See *
    * abGetExtractedNetFigs for meaning of other two arguments *
    * *
    *********************************************************************/

    (defun abSelectExtractedNet (@key net (followResistors '("presistor"))
    (includeResistors t))
    (foreach fig
    (abGetExtractedNetFigs ?net net ?followResistors followResistors
    ?includeResistors includeResistors)
    (geSelectFig fig)
    ) ; foreach fig
    ) ; defun abSelectExtractedNet

    /***************************************************************
    * *
    * (abSelectSelectedExtractedNets [?shapes l_shapes] *
    * [?followResistors '("presistor")] *
    * [?includeResistors t]) *
    * *
    * Looks at the nets associated with a set of shapes - default *
    * is the selected set - and selects all the figures associated *
    * with them. See abGetExtractedNetFigs for details of other *
    * two arguments. *
    * *
    ***************************************************************/

    (defun abSelectSelectedExtractedNets (@key (shapes (geGetSelSet))
    (followResistors '("presistor"))
    (includeResistors t))
    (foreach shape shapes
    (when (dbGetq shape net)
    (abSelectExtractedNet ?net (dbGetq shape net)
    ?followResistors followResistors
    ?includeResistors includeResistors)
    ) ; when
    ) ; foreach
    t
    ) ; defun abSelectSelectedExtractedNets

    /**********************************************************************
    * *
    * (abCopySelectedExtractedNets [?shapes l_shapes] *
    * ?lib "libName" ?cell "cellName" *
    * ?view "viewName" *
    * [?followResistors '("presistor")] *
    * [?includeResistors t]) *
    * *
    * Looks at the nets associated with a set of shapes - default *
    * is the selected set - and copies all the figures associated *
    * with them to the specified lib/cell/view. See abGetExtractedNetFigs *
    * for details of other two arguments. *
    * *
    **********************************************************************/
    (defun abCopySelectedExtractedNets (@key (shapes (geGetSelSet))
    lib cell view
    (followResistors '("presistor"))
    (includeResistors t))
    (let (destCV)
    ;--------------------------------------------------------------------
    ; Check lib/cell/view valid
    ;--------------------------------------------------------------------
    (unless (and
    (stringp lib)
    (stringp cell)
    (stringp view))
    (error
    "abCopySelectedExtractedNets: ?lib/?cell/?view must be strings: %L/%L/%L\n"
    lib cell view)
    )
    (setq destCV
    (dbOpenCellViewByType lib cell view "maskLayout" "a"))
    (unless destCV
    (error
    "abCopySelectedExtractedNets: Could not open cellView %L/%L/%L for append\n"
    lib cell view)
    )
    ;--------------------------------------------------------------------
    ; Find the figures on the selected nets, and copy them to the
    ; destination cellView
    ;--------------------------------------------------------------------
    (foreach shape shapes
    (when (dbGetq shape net)
    (foreach fig
    (abGetExtractedNetFigs
    ?net (dbGetq shape net)
    ?followResistors followResistors
    ?includeResistors includeResistors)
    (dbCopyFig fig destCV)
    ) ; foreach fig
    ) ; when
    ) ; foreach shape
    ;--------------------------------------------------------------------
    ; Return the destination cellView
    ;--------------------------------------------------------------------
    destCV
    ) ; let
    ) ; defun abCopySelectedExtractedNets
     
    Andrew Beckett, Jan 20, 2010
    #5
  6. stuso

    rick Guest

    Can you please post the command syntax to execute this code.

    Thanks
     
    rick, Feb 17, 2010
    #6
  7. rick wrote, on 02/17/10 16:31:
    Isn't that in the comments in the code?

    For example, open your extracted view, select a piece of one net, and then do:

    abCopySelectedExtractedNets(?lib "lib" ?cell "cell" ?view "layout")

    and it will copy all the shapes associated with the net which you've selected a
    piece of into a lib/cell/view called "lib", "cell", "layout".

    Or if you just want to select all the shapes, rather than copying them, just use:

    abSelectSelectedExtractedNets()

    Regards,

    Andrew.
     
    Andrew Beckett, Feb 19, 2010
    #7
  8. stuso

    rick Guest

    Thanks for the clarification! BTW, is there anyway to get the via's
    into the extracted view so they can
    be copied also? ...or would this require an Assura deck?

    Thanks again
     
    rick, Feb 19, 2010
    #8
  9. rick wrote, on 02/19/10 22:29:
    The via shapes would be in the extracted view normally (although this does
    depend on what interconnect layers the extraction rules save). So I don't
    understand your question.

    Regards,

    Andrew.
     
    Andrew Beckett, Feb 22, 2010
    #9
  10. stuso

    PolyPusher Guest

    Hi,

    When you refer to "extracted" data, is this the output of Assura
    loaded back into Virtuoso? Is there a similar path for Calibre as
    well. Some of our PDKs use Assura, some don't.

    Thank you,
    Eric
     
    PolyPusher, Feb 22, 2010
    #10
  11. stuso

    rick Guest

    The extracted view does not contain via layers and it does not appear
    that they are being saved by
    looking at the rules file. The main goal is to get a power plot.
    The solution listed on sourcelink has
    very little info
     
    rick, Feb 22, 2010
    #11
  12. rick wrote, on 02/22/10 16:52:
    Rick,

    Which solution are you talking about?

    Saving the via layers in the Assura rules should be straightforward enough. I
    think you can probably use saveInterconnect to do this (don't have a chance to
    try it right now, but I think it should be OK).

    Regards,

    Andrew.
     
    Andrew Beckett, Feb 23, 2010
    #12
  13. stuso

    rick Guest

    The extract.rul file is missing saveInterconnect for all of the
    vias. I got it work but it
    was alot harder than it should have been because of the revision
    control software and
    the PDK configuration.

    On sourceLink there is a solution(Solution ID:11071310) that is not
    very complete or
    helpful.
     
    rick, Feb 23, 2010
    #13
  14. rick wrote, on 02/23/10 15:40:
    It's OK, but it starts from the assumption that you know how the rest of the
    existing extract rules work and are structured - it's aimed at a rule deck
    writer. It probably should do a better job of explaining the prerequisites.

    You should give some constructive feedback on the support site when looking at
    this solution - this will help the solution author improve the solution.

    Thanks,

    Andrew.
     
    Andrew Beckett, Feb 24, 2010
    #14
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.