• 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 SKILL
  3. Zoom in to the probed net in schematic

Stats

  • Locked Locked
  • Replies 6
  • Subscribers 143
  • Views 16426
  • 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

Zoom in to the probed net in schematic

GDCRA
GDCRA over 8 years ago

Hi,

Is there way to zoom in to the probed net in schematic? I am tracing net from lower level cells to all the way to top level schematics. At many intermediate cell levels in hierarchy, the net is connected just by name hence net has very small length in schematic. so it become very difficult to spot the net.

Thanks

GC

  • Cancel
  • Andrew Beckett
    Andrew Beckett over 8 years ago

    Not sure there's a built-in API to do this - here's something I wrote a very long time ago to do it (seems to work from the quick tests I just did) - abZoomProbes() is the function that does the job:

    /* abZoomSel.il
    
    Author     A.D.Beckett
    Group      Structured Custom, Cadence Design Systems Ltd
    Machine    SUN
    Date       May 20, 1993 
    Modified   A.D.Beckett
    By         Feb 04, 1998 
    
    Various procedures for zooming to selected set, and for
    zooming to probed things.
    
    ***************************************************
    
    SCCS Info: @(#) abZoomSel.il 11/20/08.15:26:22 1.3
    
    */
    
    /*************************************************
    *                                                *
    *          (abExtendBBox bbox @rest xy)          *
    *                                                *
    * procedure to take a bounding box and extend it *
    *              by a list of points.              *
    *                                                *
    *************************************************/
    
    (procedure (abExtendBBox bbox @rest xy)
      (let (minx maxx miny maxy coord)
           (if (and (listp xy)
                    (listp (car xy))
                    (listp (car (car xy))))
               (setq xy (car xy)))
           (if (null bbox) 
               (setq bbox (list (car xy) (car xy))))
           (setq minx (xCoord (lowerLeft bbox)))
           (setq maxx (xCoord (upperRight bbox)))
           (setq miny (yCoord (lowerLeft bbox)))
           (setq maxy (yCoord (upperRight bbox)))
           (foreach coord xy
                    (if (lessp (xCoord coord) minx) (setq minx (xCoord coord)))
                    (if (lessp (yCoord coord) miny) (setq miny (yCoord coord)))
                    (if (greaterp (xCoord coord) maxx) (setq maxx (xCoord coord)))
                    (if (greaterp (yCoord coord) maxy) (setq maxy (yCoord coord))))
           /* return the new bbox */
           (list (list minx miny) (list maxx maxy))))
    
    /******************************************
    *                                         *
    *      (abEnlargeBBox bbox percent)       *
    *                                         *
    * extend the bounding box by a percentage *
    *                                         *
    ******************************************/
    
    (procedure (abEnlargeBBox bbox percent)
      (let (extendX extendY)
           /* calculate extensions */
           (setq extendX
                 (quotient
                  (times
                   (difference
                    (xCoord (upperRight bbox))
                    (xCoord (lowerLeft bbox)))
                   percent)
                  200.0))
           (setq extendY
                 (quotient
                  (times
                   (difference
                    (yCoord (upperRight bbox))
                    (yCoord (lowerLeft bbox)))
                   percent)
                  200.0))
           /* return the enlarged bounding box */
           (list 
            (list 
             (difference (xCoord (lowerLeft bbox)) extendX)
             (difference (yCoord (lowerLeft bbox)) extendY))
            (list 
             (plus (xCoord (upperRight bbox)) extendX)
             (plus (yCoord (upperRight bbox)) extendY)))))
    
    /******************************************
    *                                         *
    *          (abBBoxToPoints bbox)          *
    *                                         *
    * Convert a bounding box to a point list. *
    *                                         *
    ******************************************/
    
    (procedure (abBBoxToPoints bbox)
      (list 
       (lowerLeft bbox)
       (list (xCoord (lowerLeft bbox)) (yCoord (upperRight bbox)))
       (upperRight bbox)
       (list (xCoord (upperRight bbox)) (yCoord (lowerLeft bbox)))))
    
    
    /**********************************************************
    *                                                         *
    *                   (abFindBBox select)                   *
    *                                                         *
    * Find the bounding box of the list of objects passed in. *
    *     Copes with partially selected objects as well.      *
    *                                                         *
    **********************************************************/
    
    (procedure (abFindBBox select @optional forceWholeObject)
      (let (bbox)
           (foreach dbp select
                    (if (or forceWholeObject (geIsFigAllSelected dbp))
                        (setq bbox (abExtendBBox bbox (dbGetq dbp bBox)))
                        (let (pointList)
                             /* generate a point list for object, either directly or from bbox */
                             (unless (setq pointList (dbGetq dbp points))
                                     (setq pointList (abBBoxToPoints (dbGetq dbp bBox))))
                             /* scan two lists, extending bbox if point is selected */
                             (mapc '(lambda (point bool) 
                                            (when bool (setq bbox (abExtendBBox bbox point))))
                                   pointList
                                   (geGetSelSetFigPoint dbp)))))
           /* return bounding box */
           bbox))
    
    
    /*******************************************
    *                                          *
    *    (abZoomSel @optional (select nil))    *
    *                                          *
    * Zoom in on the selected set (no overlap) *
    *  Copes with partially selected objects   *
    *                                          *
    *******************************************/
    
    (procedure (abZoomSel @optional (select nil))
      (let (bbox wind forceWholeObject)
           /* get current window */
           (setq wind (hiGetCurrentWindow))
           /* get selected set if not passed in */
           (if select 
               (setq forceWholeObject t)
               (setq select (geGetSelSet wind)))
    
           (setq bbox (abFindBBox select forceWholeObject))
           (if bbox
               (hiZoomIn wind (list (geEditToWindowPoint wind (lowerLeft bbox))
                                    (geEditToWindowPoint wind (upperRight bbox))))
               (hiDisplayAppDBox
                ?name 'abZSnothingSelected
                ?dboxBanner "Nothing Selected"
                ?dboxText "Nothing is selected for Zoom Selected"
                ?dialogType hicMessageDialog
                ?buttonLayout 'Close))))
    
    
    /*****************************************
    *                                        *
    * (abZoomSelPlus @optional (select nil)) *
    *                                        *
    * same as abZoomSel, but enlarges by 10% *
    *                                        *
    *****************************************/
    
    (procedure (abZoomSelPlus @optional (select nil) (percent 10))
      (let (bbox wind forceWholeObject)
           /* get current window */
           (setq wind (hiGetCurrentWindow))
           /* get selected set if not passed in */
           (if select 
               (setq forceWholeObject t)
               (setq select (geGetSelSet wind)))
    
           (setq bbox (abFindBBox select forceWholeObject))
           (if bbox
               (progn
                (setq bbox (abEnlargeBBox bbox percent))
                (hiZoomIn wind (list (geEditToWindowPoint wind (lowerLeft bbox))
                                     (geEditToWindowPoint wind (upperRight bbox)))))
               (hiDisplayAppDBox
                ?name 'abZSnothingSelected
                ?dboxBanner "Nothing Selected"
                ?dboxText "Nothing is selected for Zoom Selected"
                ?dialogType hicMessageDialog
                ?buttonLayout 'Close))))
    
    /***************************************************************
    *                                                              *
    *                       (abZoomOrig win)                       *
    *                                                              *
    *         simple function for zooming in at the origin         *
    *                                                              *
    ***************************************************************/
    
    (procedure (abZoomOrig win)
      (hiZoomIn win '((-0.2 -0.2) (0.2 0.2))))
    
    /******************************************************************************
    *                                                                             *
    *           (abZoomProbes @optional (window (hiGetCurrentWindow)))            *
    *                                                                             *
    * Zoom into probed objects. Works with nets and instances in extracted views. *
    *         Haven't tested with all objects, but seems to work so far!          *
    *                                                                             *
    ******************************************************************************/
    
    (procedure (abZoomProbes @optional (window (hiGetCurrentWindow)))
      (let (cellView probedObjects probedFigs)
           (setq cellView (geGetEditCellView window))
           ;-----------------------------------------------------------------
           ; find all the probed objects in the current window
           ;-----------------------------------------------------------------
           (setq probedObjects 
                 (setof obj (foreach mapcar probe 
                                     (geGetAllProbe window) (getq probe objectId))
                                      (equal (dbGetq obj cellView) cellView)))
           (setq probedFigs
                 (foreach mapcan object probedObjects 
                          (case (dbGetq object objType)
                                ("sig"
                                 ;-------------------------------------------
                                 ; combine the figures
                                 ;-------------------------------------------
                                 (foreach mapcan net
                                          ;----------------------------------
                                          ; get from sigs to member nets
                                          ;----------------------------------
                                          (foreach mapcar memNet 
                                                   (dbGetq object memNets) 
                                                   (car memNet))
                                          (dbGetq net figs))
                                 )
                                ("net"
                                 (dbGetq object figs)
                                 )
                                (t (list object))
                                )))
           ;-----------------------------------------------------------------
           ; zoom into them
           ;-----------------------------------------------------------------
           (abZoomSel probedFigs)
           ))
    
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • GDCRA
    GDCRA over 8 years ago
    Thanks for code Andrew. I am having difficulty making it work at my end. When I select some net, it works but when I probe some net, I get error "Nothing is selected for Zoom Selected".
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 8 years ago

    Just to check - you are calling abZoomProbes() not abZoomSel() ? If so, what does each of these return:

    geGetAllProbe()~>objectId~>objType
    geGetAllProbe()~>objectId~>cellView
    geGetEditCellView()
    getVersion(t)

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • GDCRA
    GDCRA over 8 years ago

    Yes. I am calling abZoomProbes() but this procedure call abZoomSel() in the end.

    geGetAllProbe()~>objectId~>objType return ("net")
    geGetAllProbe()~>objectId~>cellView return (db:0x61790e1a)
    geGetEditCellView() returns db:0x4e87239a
    getVersion(t) returns sub-version  ICADV12.3-64b.500.10

    Zooming probes work at the hierarchical level where net is actually probed. Once you come up the hierarchy, zooming around probe doesn't work. and I get error message.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 8 years ago
    OK, I know why this is failing - this code was thrown together years ago, and is certainly incomplete. I'll have to think about how I could make it more general and cope with the probe being displayed at a different level to which it was created...
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 8 years ago

    Having thought about this a bit more, it would be quite hard to implement in SKILL without doing a lot of work to trace a net to the current level of hierarchy. It's easy to find the net at the highest level of hierarchy (geGetAdjustedPath does this) but to find the objects in the current level is not that easy; there's clearly code doing that (otherwise the probing wouldn't know what to highlight) but I don't believe the APIs which do this are exposed at the SKILL level. So it would need quite a lot of reimplementation to do all that tracing - not something I have time (or the motivation!) to do, I'm afraid.

    So, the choices (other than trying to implement this yourself) are either to contact customer support and ask for an enhancement request to zoom to the probes, or to use the Dimming feature instead (Options->Display to turn it on). This will then automatically dim anything that isn't probed when probing is used - another way of making the probes stand out.

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel

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