Forum Replies Created
-
AuthorPosts
-
March 26, 2020 at 11:51 am in reply to: Searching, selecting and higlithing nets and instances #2309
Keith
KeymasterForgot to add this is in v 4.7.28 out on the server now.
March 26, 2020 at 11:51 am in reply to: Searching, selecting and higlithing nets and instances #2308Keith
KeymasterYou should be able to do something like this now:
ui = cvar.uiptr
#
def hiliteNet(netName, color) :
cv = getEditCellView()
net = cv.dbFindNetByName(netName)
ui.addHilite(net, color[0], color[1], color[2])
#end defcolor = [255, 0, 255]
hiliteNet('vout', color)addHilite() in this case takes a net object (from dbFindNetByName() and highlights it according to the RGB values given.
I've also added 3 functions :
cv.getInstByRegExp(exp)
cv.getNetsByRegExp(exp)
cv.getPinsByRegExp(exp)These take a Qt-style QRegExp as a string, and return a python list of the objects that match.
I haven't done much testing of these yet, so please give it a try and let me know of any issues.
Also the ui.selectObj(), ui.deselectObj() and ui.addSelect() can take a net now, and select/deselect all shapes for that net.
March 26, 2020 at 10:30 am in reply to: Searching, selecting and higlithing nets and instances #2307Keith
KeymasterHi Joerg,
You can't select or highlight nets as such, as they are logical entities. However you can highlight/select the *shapes* of that net, if it has associated shapes.
Currently it's not that easy in a script, I will update the code to make it simpler with an addHilite() ui command that takes a net as an argument, along with rgb colour.
I should be able to do the same for selection.
Alas it's not possible to call the gui 'Find/Replace' cmd with args, it's a bit too complex for that.
I can also probably do regular expressions, I'll put it on the todo list for v 4.7.28.
regards
Keith
Keith
KeymasterSorry thought I had responded to this one but it seems not.
The only way of doing this would be to add a license code in Glade to limit the execution of specific named modules.
In other words, I'd write a C++ license check that looks for a user-defined license feature name (e.g. my_python_code), and if present allows the running of the name named python module.
Of course your users may be able to decompile .py/.pyc files you supply, and run them from the cmd line. There's nothing obvious that could prevent this
Keith
KeymasterIf you're trying to create LEF/DEF you do NOT want to flattent the library (LEF) cells
Keith
KeymasterAssuming you have instance in your design (instances of std cells), you need to take your netlist, identify each standard cell in the layout, find its corresponding one in the netlist, then create an instPin for each net connecting to your standard cell pin.
Keith
KeymasterHi Fixrouter4400,
The message 'no module named inspect' is coming from Glade trying to load the system 'inspect' module so it can deduce the argument names of PCell function calls.
Firstly, if you type 'import inspect' in the Glade cmd window, does it manage to import the module (I'lm guessing it doesn't)?
Secondly, if you use a native python installation on your machine and try the same, does that work?
It is most probaby a PYTHONHOME or PYTHONPATH problem. You can print the PYTHONPATH used by typing
import sys
print sys.pathOn WIndows check %PYTHONHOME% and make sure there is a %PYTHONHOME%bin and %PYTHONHOME%lib with all the system modules in it.
The instpect.py module will normally be ini your python/lib directory.
Keith
KeymasterInstance pins are the things that allow connectivity to cross the hierarchical boundary. So an instance pin allows a top level wire to connect to a pin in a lower level of hierarchy.
Keith
KeymasterLook at e.g. the PCell examples on how to create pins:
drain = cv.dbCreateRect(met, metal1)
net = cv.dbCreateNet("D")
pin = cv.dbCreatePin("D", net, DB_PIN_INOUT)
cv.dbCreatePort(pin, drain)First you create a shape. Then you create a net. Then you create a (logical) pin for the net. Finally you create a pin shape (a port) from the pin and the shape.
Now for instance pins, you need to know the instance, the pin name on the instance you want to connect to, and the net.
Here's a bit of C++ code from the schematic checker that might help you understand:
if (wire->ptInRect(pin_rect)) {
// Create the instPin if we don't already have one…
if (nullptr == device->dbFindInstPinByName(pin_name)) {
(void)device->dbCreateInstPin(wire_net, pin_name);
…
}
}device is an instance which has pins at it's level of hierarchy. So we are effectively calling
cdb::inst *inst->dbCreateInstPin(cdb::net * net, const char *pin_name)
This is making a hierarchical connection from the wire through the instPin to the pin (and hence internal nets) of the instance.
Keith
KeymasterThe PINS section will be written based on the top level PINS. Query the cellView; if you don't see any pins then there won't be any in the DEF. If you do, it may be that there are pins, but the shapes have not been assigned to be pins (use dbCreatePort(cdb::pin *pin, cdb::shape *shape) )
THe NETS/SPECIALNETS will need instances with instance pins connected to the net(s). Did you create instance pins for the instances and the nets they are connected to? After the inst name and the inst pin name, then the routing shapes are reported.
Keith
KeymasterA possible algorithm for converting polygons to paths:
Iterate through all the polygon edges.
Find the two shortest ones (if they are different lengths, error)
Halfway along these edges will be the start/end points of the pathWalk along the polygon edges from the start edge to the end edge
That edge list then needs to be shifted by half the path width. You'll need to figure out if they are horizontal edges (shift in Y) or vertical edges (shift in X).Keith
KeymasterGet the net from the polygon (getNet()) and set the net on the path you create (setNet())
Keith
KeymasterDo you really have path objects rather than polygon objects? As geomConnect writes back polygons, not paths. And the DEF writer only looks at paths when writing NETS / SPECIALNETS.
You might be able to convert the polygons to paths with a bit of effort in python. Not sure of an algorithm to do that.
Keith
KeymasterI?m not sure what you are trying to do. If it?s taking some layout eg gds2 with paths, then running extraction (geomConnect) and somehow linking the extracted net info with the original paths, that?s not really possible. Are you trying to write a gds2def converter?
Keith
KeymasterSorry can't advise on Cadence issues. Just edit your techfile (using the LSW is easiest) and save it.
Or, if you want support we can provided it at cost and under NDA. -
AuthorPosts