Cadence® system design and verification solutions, integrated under our System Development Suite, provide the simulation, acceleration, emulation, and management capabilities.
System Development Suite Related Products A-Z
Cadence® digital design and signoff solutions provide a fast path to design closure and better predictability, helping you meet your power, performance, and area (PPA) targets.
Full-Flow Digital Solution Related Products A-Z
Cadence® custom, analog, and RF design solutions can help you save time by automating many routine tasks, from block-level and mixed-signal simulation to routing and library characterization.
Overview Related Products A-Z
Driving efficiency and accuracy in advanced packaging, system planning, and multi-fabric interoperability, Cadence® package implementation products deliver the automation and accuracy.
Cadence® PCB design solutions enable shorter, more predictable design cycles with greater integration of component design and system-level simulation for a constraint-driven flow.
An open IP platform for you to customize your app-driven SoC design.
Comprehensive solutions and methodologies.
Helping you meet your broader business goals.
A global customer support infrastructure with around-the-clock help.
24/7 Support - Cadence Online Support
Locate the latest software updates, service request, technical documentation, solutions and more in your personalized environment.
Cadence offers various software services for download. This page describes our offerings, including the Allegro FREE Physical Viewer.
Get the most out of your investment in Cadence technologies through a wide range of training offerings.
This course combines our Allegro PCB Editor Basic Techniques, followed by Allegro PCB Editor Intermediate Techniques.
Virtuoso Analog Design Environment Verifier 16.7
Learn learn to perform requirements-driven analog verification using the Virtuoso ADE Verifier tool.
Exchange ideas, news, technical information, and best practices.
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.
It's not all about the technlogy. Here we exchange ideas on the Cadence Academic Network and other subjects of general interest.
Cadence is a leading provider of system design tools, software, IP, and services.
I want to find whether same metal type shape is overlapping another shape of the same metal.
If it is overlapping, then the overlap area should blink.
Basically this I need for finding SHORT with undesired trace.
For example: I have a trace ( may be a Rectangle/Path). I select this. Then an enabled SKILL script should find a same metal type shape overlapping with the trace and highligting the overlapped area with the trace.
Can anybody show me some light for this.
In reply to Andrew Beckett:
Andrew is correct, dbLayerAnd is the easiest to use to create the overlapping areas but the dbPointArrayAnd (I'm away from Virtuoso so check the name) may be easier to use if you find shapes in the hierarchy. Transform the points to the current cellView, perform the AND and create a marker. If using dbLayerAnd, output the shapes to a layer like "y0" and then turn them into markers. Be sure to delete the new shapes.
In reply to theopaone:
dear andrew & ted,
thanks alot for your replies.
could you please tell th function for creating a marker around the polygon.
is odcRegMarker() the right one ?
In reply to RFStuff:
For that purpose I would try "geCreateMarkerByBBox".
In reply to berndfi:
Bernd's right - that's what I was going to suggest (or any of the geCreateMarker family). Note that when you move to IC61, these functions are obsolete - they create markers using the "old" way of a shape on the marker layer, compared with the new OpenAccess marker objects. So in IC61 you should use dbCreateMarker (this didn't exist in IC5141).
I tried with dbGetOverlaps(). But it did NOT work
The test scenario is as follows:-
I am in the toplevel and I have the hierarchy level of 5.In level 4 only 3 shapes (paths) are overlapping with the trace.
But if you see it is actually showing me 6 shapes. Which is NOT correct.
shapeList = dbGetOverlaps(cv obj1~>bBox obj1~>layer 0:5)\t (db:217705012 \t (db:217517248 db:262161624) \t (db:217517248 db:262161472) \t (db:217517248 db:262161312) \t (db:217517248 db:261977724)\t (db:217517248 db:261977644) \t (db:217517248 db:261977564)\t )
Then for dbLayerAnd() the following returned nil
dbLayerAnd(cv "ME7" list(car(cdr(shapeList))) list(obj1))
1. Before IC6, dbGetOverlaps returned the value of any shape whose Bounding Box intersected with the search bounding box. dbGetTrueOverlaps found shapes that only physically overlapped the search box.
2. The shapes in the hierarchy have to be transformed to the current coordinate space before passing into dbLayerAnd. The shapes that are returned as a list are hierarchical shapes, you have to transform their points into the current coordinate space and then either create new shapes (usually on a layer like y0) or use the point list in the dbPointArray functions. If doing the former, be sure to delete the new shapes after you are done with them. If the latter, you have to transform rectangles into 4 points and paths have to be transformed into their outlines.
Commands to look up: dbConcatTransform, dbTransformPoint.
RFStuffDI tried with dbGetOverlaps(). But it did NOT workThe test scenario is as follows:-I am in the toplevel and I have the hierarchy level of 5.In level 4 only 3 shapes (paths) are overlapping with the trace. But if you see it is actually showing me 6 shapes. Which is NOT correct. shapeList = dbGetOverlaps(cv obj1~>bBox obj1~>layer 0:5)\t (db:217705012 \t (db:217517248 db:262161624) \t (db:217517248 db:262161472) \t (db:217517248 db:262161312) \t (db:217517248 db:261977724)\t (db:217517248 db:261977644) \t (db:217517248 db:261977564)\t )Then for dbLayerAnd() the following returned nil dbLayerAnd(cv "ME7" list(car(cdr(shapeList))) list(obj1)) Kind Regards,
DI tried with dbGetOverlaps(). But it did NOT work
1) The guide says that usage of dbGetTrueOverlaps() should be avoided
2) I couldn't get about your point transformation idea.
1st of all dbLayerAnd() needs the list of shape IDs not the list of POINTS.
2nd if you know the exact points of overlap ( which you think can be transformed), then why one needs the ANDing operation.
It is a chicken egg dilema.
Disregard the warning. It may have performance problems in IC5141 but it is the only way you will get the answer you want.
The shape ID's that are being returned are hierarchical. The dbLayer functions only take shapes defined in the local coordinate space. If you just get the shape from the hierarchical list, you are getting the shape in the local coordinate space for the shape's master cellView. You have to get the points of that shape and then transform them to the current coordinate space (in you open cellView) and then create a new shape with those transformed points. Pass that new shape into the dbLayer functions. You are not transforming the overlap, you are transforming the original points to the current coordinate space, creating a new shape and using that shape to determine the overlap points.
Which came first? The rooster.
I tried with dbGetTrueOverlaps().
But No chnage in the output. As you have mentioned, it should have returned 3 objects instead of 6 objects as there are only total 3 overlapping objects (PATHS) of the same metal layer of the trace.
shapeList = dbGetTrueOverlaps(cv obj1~>bBox obj1~>layer 0:5)\t (db:217705012 \t (db:217517248 db:262161624) \t (db:217517248 db:262161472) \t (db:217517248 db:262161312) \t (db:217517248 db:261977724)\t (db:217517248 db:261977644) \t (db:217517248 db:261977564)\t )
A picture might help, but I suspect that the problem is that the dbGetTrueOverlaps is finding all the objects which interact with the bounding box of obj1. See the attached picture. In this case, the selected object is obj1, and I get:
(db:0x17511f12 (db:0x17511f92 db:0x17512292) (db:0x17511f92 db:0x17512293))
The top right path iteracts with the bounding box of the first shape - that's correct. If the path had moved a little to the right so that it didn't interact with the bBox of the fat path, then dbGetTrueOverlaps wouldn't return it - however, dbGetOverlaps (in IC5141) would still return it if the bBox of the lower shape interacts with the bBox of the selected shape. That's what the difference between the two functions (in IC61 dbGetOverlaps always returns the "true" overlaps).
That's why you need to do the dbLayerAnd as well. Here's what I did to do that:
overlaps=dbGetTrueOverlaps(cv obj1~>bBox obj1~>layer 0:5)shapeList=nilforeach(overlap overlaps unless(overlap==obj1 shapeList=cons(dbCopyFig(abGetOverlapShape(overlap) cv abGetOverlapTransform(overlap)) shapeList) ))interactingRegions=dbLayerAnd(cv "y0" list(obj1) shapeList)foreach(shape shapeList dbDeleteObject(shape)); if a shape on y0 isn't enough, you can convert to markers foreach(shape interactingRegions if(shape~>objType=="polygon" then geCreateMarkerByBBox(cv "warning" "SHORT" "shorting shape" "some reason" shape~>points) else geCreateMarkerByBBox(cv "warning" "SHORT" "shorting shape" "some reason" shape~>bBox) ) dbDeleteObject(shape))
Thanks a lot.
I think you might have forgotten to attach the picture.
I must be getting old and forgetting things. Here it is - sorry!
Thanks a lot. I don't think so. I think I got the snapshot before I have posted the...
You are like rocket fast.