Keith

Forum Replies Created

Viewing 15 posts - 31 through 45 (of 861 total)
  • Author
    Posts
  • in reply to: Searching, selecting and higlithing nets and instances #2309
    Keith
    Keymaster

    Forgot to add this is in v 4.7.28 out on the server now.

    in reply to: Searching, selecting and higlithing nets and instances #2308
    Keith
    Keymaster

    You 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 def

    color = [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.

    in reply to: Searching, selecting and higlithing nets and instances #2307
    Keith
    Keymaster

    Hi 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

    in reply to: Licensing Python Code #2306
    Keith
    Keymaster

    Sorry 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

    in reply to: flattening oddly affects NETS section of DEF file #2303
    Keith
    Keymaster

    If you're trying to create LEF/DEF you do NOT want to flattent the library (LEF) cells

    in reply to: NETS section of the exported DEF file #2301
    Keith
    Keymaster

    Assuming 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.

    in reply to: LVS Extraction ERROR #2299
    Keith
    Keymaster

    Hi 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.path

    On 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.

    in reply to: NETS section of the exported DEF file #2298
    Keith
    Keymaster

    Instance 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.

    in reply to: NETS section of the exported DEF file #2296
    Keith
    Keymaster

    Look 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.

    in reply to: NETS section of the exported DEF file #2294
    Keith
    Keymaster

    The 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.

    in reply to: NETS section of the exported DEF file #2290
    Keith
    Keymaster

    A 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 path

    Walk 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).

    in reply to: NETS section of the exported DEF file #2289
    Keith
    Keymaster

    Get the net from the polygon (getNet()) and set the net on the path you create (setNet())

    in reply to: NETS section of the exported DEF file #2287
    Keith
    Keymaster

    Do 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.

    in reply to: NETS section of the exported DEF file #2285
    Keith
    Keymaster

    I?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?

    in reply to: How to import Cadence tech files #2283
    Keith
    Keymaster

    Sorry 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.

Viewing 15 posts - 31 through 45 (of 861 total)