• Skip to main content
  • Skip to search
  • Skip to footer
Cadence Home
  • This search text may be transcribed, used, stored, or accessed by our third-party service providers per our Cookie Policy and Privacy Policy.

  1. Community Forums
  2. Custom IC Design
  3. extract specified layout net 5141 (Assura & pvs)

Stats

  • Locked Locked
  • Replies 3
  • Subscribers 125
  • Views 1619
  • Members are here 0
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

extract specified layout net 5141 (Assura & pvs)

stuso
stuso over 15 years ago

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

  • Cancel
Parents
  • Andrew Beckett
    Andrew Beckett over 15 years ago

    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.

     

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • Andrew Beckett
    Andrew Beckett over 15 years ago

    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.

     

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Children
No Data

Community Guidelines

The Cadence Design Communities support Cadence users and technologists interacting to exchange ideas, news, technical information, and best practices to solve problems and get the most from Cadence technology. The community is open to everyone, and to provide the most value, we require participants to follow our Community Guidelines that facilitate a quality exchange of ideas and information. By accessing, contributing, using or downloading any materials from the site, you agree to be bound by the full Community Guidelines.

© 2025 Cadence Design Systems, Inc. All Rights Reserved.

  • Terms of Use
  • Privacy
  • Cookie Policy
  • US Trademarks
  • Do Not Sell or Share My Personal Information