Home > Community > Forums > Custom IC Design > extract specified layout net 5141 (Assura & pvs)

Email

* Required Fields

Recipients email * (separate multiple addresses with commas)

Your name *

Your email *

Message *

Contact Us

* Required Fields
First Name *

Last Name *

Email *

Company / Institution *

Comments: *

 extract specified layout net 5141 (Assura & pvs) 

Last post Wed, Jan 20 2010 6:43 PM by Andrew Beckett. 3 replies.
Started by stuso 14 Jan 2010 07:31 PM. Topic has 3 replies and 2675 views
Page 1 of 1 (4 items)
Sort Posts:
  • Thu, Jan 14 2010 7:31 PM

    • stuso
    • Top 100 Contributor
    • Joined on Mon, Nov 3 2008
    • Posts 77
    • Points 1,315
    extract specified layout net 5141 (Assura & pvs) Reply

    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

    • Post Points: 20
  • Fri, Jan 15 2010 12:41 AM

    Re: extract specified layout net 5141 (Assura & pvs) Reply
    Hi Stu,

    Are there parasitic resistances on the net? (That makes it harder - not that hard, but it's trivial if there are no parasitic resistors as everything is on the same net, otherwise I assume you'd want to trace through the parasitic resistances).

    How would you expect to specify the net(s) - just select one or more shape or via on the net?

    Is this for IC5141 or IC61 (the way vias are handled on nets is simpler in IC61).

    I don't think it really matters whether it was Diva or Assura or PVS (presumably QRC in the latter two) - the structure of the view will be the same.

    Regards,

    Andrew
    • Post Points: 20
  • Fri, Jan 15 2010 1:25 PM

    • stuso
    • Top 100 Contributor
    • Joined on Mon, Nov 3 2008
    • Posts 77
    • Points 1,315
    Re: extract specified layout net 5141 (Assura & pvs) Reply

    Hi Andrew,

    1) Extracting without Rpar is no problem, we commonly create multiple av_extracted views (Conly, RC, Ronly) anyway. We run Assura lvs_QRC then QRC to generate the av_extracted.

    2) selecting the net by a click on a polygon would be fine  for me

    3) currently IC5141 (we will be moving to IC6 later this year)

    Thanks

    Stu

     

     

    • Post Points: 20
  • Wed, Jan 20 2010 6:43 PM

    Re: extract specified layout net 5141 (Assura & pvs) Reply

    Hi Stu,

    I realised that it doesn't actually make any difference if it's IC5141 or IC613 - because this is an extracted view, there won't be via objects in it (shapes on Via layers, yes, but not via objects).

    It's actually really trivial to do this for extracted views without resistance extracted - it would be a matter of copying all the figures on the net - i.e. car(geGetSelSet())~>net~>figs to the new cellView.

    Anyway, I decided to write a bit of code which does this, and while I was at it, I made it handle parasitic resistors too - it can follow the net through the parasitic resistors.

    So here's the code:

    /* 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
    
    

    Regards,

    Andrew.

     

    • Post Points: 5
Page 1 of 1 (4 items)
Sort Posts:
Started by stuso at 14 Jan 2010 07:31 PM. Topic has 3 replies.