• 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. extract connectivity using skill

Stats

  • Locked Locked
  • Replies 15
  • Subscribers 143
  • Views 20888
  • 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 connectivity using skill

posh
posh over 15 years ago

Hi all,

I am a new Skill User, iam trying to write a code for extracting a net from one cellview and put it into a different cellview (only the extracted net). i have read some previous threads but most of them were pointed to VXL. i do not have a VXL licence. so can anyone hint me how to extract a net using skill in VLE.

 

thanks

Harish Poshala 

 

  • Cancel
  • Andrew Beckett
    Andrew Beckett over 15 years ago
    Or save yourself the bother and use mark net in IC614, or use VXL to extract the connectivity.

    Why reinvent the wheel if it's already been invented ;-)

    Regards,

    Andrew
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • dmay
    dmay over 15 years ago

    But there is so much more you can do when you actually get the objects on the hilighted net. We have dozens of functions that take advantage of the extracted net.

    • Calculate length/width
    • Get net names
    • Find connection names through the hierarchy
    • Find shorts
    • Check if the net is pinned at the top and even move the pin to the edge of the net
    • Add labels on the net
    • Report label or device markers on the net
    • Save the net to a separate cell
    • Cause the hilighting to stop if a supply pin is encountered (short to a supply)
    • Add features like tracing nets through buffers/repeaters

    This was one of the most useful tools we ever wrote. We waited until Mark Net was released, discovered that the first release was buggy and wrote our own. By the time Mark Net was fixed, we had something better.

    Derek

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • posh
    posh over 15 years ago

    Thanks Derek, Lawrence and Andrew

    You guys are just unbelievable, I thought being a new skill user, i may never be able to write this code, but the amount of information and advices u give are simply outstandung. this gave me a lot of confidence.

    i have just started the code, and i shall fall back to u guys if i find any difiiculties.

    once again Thankyou verymuch

    Regards

    Harish

      

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • posh
    posh over 15 years ago

    Hi Lawrence,

    Thank you very much for the outline. i have worked according to your outline with the following functions but held up at recursion,

    1) I selected an object from the layout by using obj=car(selectedSet())

    2) then i have done an overlap function for this by using list1 = dbGetTrueOverlaps(cv obj~>bBox list("m1" "drawing"))

    3) similar to step 2 i have done all the overlaps for m2 m3 and poly. Here i have got a problem that if i use a search level 0:4, the vias in the layout are also selected and when iam using a dbCopyFig() function it says that the vias are not dbObjects. can u help me why it not copying vias.

    4) At this point i have list4 whish contains all the dbobjects which overlap with my selected objects.

    5) Now if i want to know what objects are overlapping these list of objects, i'll be using a foreach , do u think we can do this in different way.

    please do comment or advise on these steps

    Thank you

    Regards

    Harish

                                                  

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

    Harish,

    Seeing your code would probably have helped, but my guess is that you're not understanding the output of dbGetTrueOverlaps. If it's a top level (level 0) shape, you get it directly, but if down in the hierarchy (e.g. inside a via or an instance of some sort), you'll get a set of instance (or via) dbobjects prior to the actual object, which are giving  you the hierarchical path down to that shape. You can't pass this directly to dbCopyFig - instead you need to compute the appropriate transform and then copy the figure itself. I've usually used functions like this:

    /*****************************************************************
    *                                                                *
    *                (abGetOverlapTransform overlap)                 *
    *                                                                *
    * Get the transform needed to transform the shape in the overlap *
    *           into the current cell's coordinate system            *
    *                                                                *
    *****************************************************************/
    
    (procedure (abGetOverlapTransform overlap)
      (let (transform)
           (if (listp overlap)
    	   (setq transform (dbConcatTransform 
    			    (abGetOverlapTransform (cadr overlap))
    			    (or
    			      (dbGetq (car overlap) transform)
    			      (list (dbGetq (car overlap) origin)
    				    (dbGetq (car overlap) orient)
    				    1.0)
    			      )
    			    ))
    	   (setq transform (list 0:0 "R0" 1.0)))
           transform
           ))
    
    /***************************************************************
    *                                                              *
    *                 (abGetOverlapShape overlap)                  *
    *                                                              *
    *         get hold of the actual shape in the overlap          *
    *                                                              *
    ***************************************************************/
    
    (procedure (abGetOverlapShape overlap)
      (if (listp overlap)
          (abGetOverlapShape (cadr overlap))
          overlap))
    

    to compute the transform and find the shape, and then call:

    (dbCopyFig (abGetOverlapShape overlap) cellView (abGetOverlapTransform overlap))

    But you could also use geGetInstTransform() to find the transform from the overlap. In these examples, overlap is one of the items in the list of results from dbGetTrueOverlaps().

    Essentially at step 5 in your list, you are calling your function again - tracing the shapes from that. You need to keep track of shapes you've already seen, to avoid visiting them over and over again...

    Sorry, don't have time to go into more details.

    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