Keith

Forum Replies Created

Viewing 15 posts - 91 through 105 (of 861 total)
  • Author
    Posts
  • in reply to: detecting overlap of rectangle? #2189
    Keith
    Keymaster

    It's on the server right now if you want to download it and try – compiled this morning.

    in reply to: detecting overlap of rectangle? #2187
    Keith
    Keymaster

    Yes the current geomArea() function flags shapes that lie outside the specified range. You need one that flags shapes inside the range.

    I've implemented a function geomAreaIn() which does this:

    Code:
    foo = geomGetRawShapes("foo", "drawing")
    foo2_ovlp = geomAnd(foo)
    ovlp = geomAreaIn(foo_ovlp, 0, 4, "foo overlap")

    This is in version 4.6.46

    in reply to: diode area #2184
    Keith
    Keymaster

    If you add the property to the pcell code, it will get created when a PCell submaster is created. So it will be correct for that particular submaster, and all instances of that.

    However, you mention schematics – you will be using symbol view instances in your schematic, so a layout PCell will not have any effect.

    To use schematics, it would need changing the NLP expression parser to handle expressions. And that's not been done (yet). I have a good idea of what needs to be done, but it is not a trivial enhancement.

    in reply to: diode area #2182
    Keith
    Keymaster

    One thing you could do – in your PCell code, create a property e.g. 'area' by multiplying the 'w' and 'l' properties.

    Then, you can refer to this property in the NLP expression. Ideally this would be a hidden property so it is not editable in the query properties dialog, but it would at least be part of the solution.

    in reply to: diode area #2181
    Keith
    Keymaster

    Is this for extraction i.e. the extracted pcell?

    Or is this a symbol and layout pcell that you have created that uses w/l as the pcell properties / symbol properties, yet you want a related property (let's call it 'area') on the symbol for simulation from the schematic?

    There's currently no equivalent of expression evaluation in the NLP properties e.g. something like

    [@area:area='@w*@l']

    where area is a dummy property that is created during NLP parsing based on an expression containing other properties of the pcell instance (in this example w and l). Is that the sort of thing you are looking for?

    in reply to: layer conversion in GDS import? #2178
    Keith
    Keymaster

    Not exactly sure if I fully understandf, but if e.g you have a library with (say)

    -poly on GDS layer 3
    – active on GDS layer 4

    and you want to import a GDS with poly on layer 1 and active on layer 2, then there are 2 ways you can do it:

    1) Using a techfile
    – Edit your Glade techfile (or export one from the existing library) and change the GDS layer number/datatype of the layers from 3 & 4 to 1 & 2.
    – Import the GDS
    – Optionally import the techfile again after changing the layer mapping back

    2) Using the LSW
    – Double-right clock on the LSW layer e.g. poly to display the Layer Properties dialog
    – change the GDS layer number / datatype number to match those in the GDS you wish to import
    – Import the GDS
    – change the layer numbers back after import to revert to the original mappings.

    in reply to: LVS in command windows #2176
    Keith
    Keymaster

    Sorry – only just noticed this.

    You can run gemini (the LVS engine) standalone.

    D:C++Stuffglade>gemini -h


    Gemini 2.7.4 (64 bit) Compiled at 12:13:15 on May 11 2018 by Visual C++ 13.1



    Gemini started at 08:57:12 on 12/05/2018

    gemini {-[SCFIPabcfhmotvz]} {-[DE]filename} {-[enpsw]number} file1 file2

    -C : Do not reduce different sized series transistors
    -F : Do not reduce parallel MOS transistors
    -S : Use Spice(CDL) file format instead of SIM format
    -a : Do not reduce series resistors/capacitors/inductors
    -b : Do not reduce parallel resistors/capacitors/inductors
    -c : Do not reduce series MOS transistors
    -cw: Print warnings for out-of-order series MOS transistors
    -f : Case-insensitive net names (ABC==abc)
    -h : Help: print this usage summary
    -m : Do not use local matching
    -o : Do not optimize labeling procedure
    -P : Match by device properties
    -L : Use subckt pins for initial labelling
    -t : Trace execution
    -v : Verbose output
    -z : Print nets with zero connections
    -D<filename> : Output correspondence point file
    -E<filename> : Input correspondence point file
    -g<filename> : Output Glade file with error markers at mismatched device locations
    -e<number> : Set error limit (0)
    -n<number> : Set net size limit when printing connections (10)
    -p<number> : Set no-progress limit (2)
    -s<number> : Set suspect-node limit (1)
    -w<number> : Tolerance for comparing device properties (10%)

    in reply to: Layer mapping in GDS import #2173
    Keith
    Keymaster

    Did you set the GDS layer number / datatype number in the techfile?

    Check by hovering the cirsor over the Nwell layer in the LSW. It will display the GDS layer/datatype numbers. The GDS you are reading has the nwell shapes on layer 1, datatype 0 (from the names you mention) which did not map to any techfile layer.

    Just edit the techfile and set the layer/datatype mapping numbers and it should correct the issue.

    in reply to: open extracted view after extract #2165
    Keith
    Keymaster

    When you say 'does not work', what happens? Do you get an error message?

    in your code you appear to be mixing ui() and ui – the former will create an instance of the ui class, the second is a variable name. Normally you should use the global C variable cvar.uiptr, or create a variable that is an alias of this.

    in reply to: Booleans in Python scripts #2163
    Keith
    Keymaster

    In 4.6 38 you can just create polygon data form vertices:

    Code:
    from ui import *
    ui = cvar.uiptr

    lib = library("lib1")
    lib.dbOpenLib("lib1")
    ui.openCellView("lib1", "test", "layout")
    cv = ui.getEditCellView()

    # Start boolean ops
    geomBegin(cv)

    y3 = geomEmpty()
    y4 = geomEmpty()

    # Add a single shape
    y4 = geomAddPoly(y4, [[-500, 200], [8000, 200], [8000, 1800], [-500, 1800]])

    # Add a list of shapes
    y3 = geomAddPoly(y3, [[0, 0], [1000, 0], [1000, 2000], [0, 2000]])
    y3 = geomAddPoly(y3, [[2000, 0], [3000, 0], [3000, 2000], [2000, 2000]])
    y3 = geomAddPoly(y3, [[4000, 0], [5000, 0], [5000, 2000], [4000, 2000]])
    y3 = geomAddPoly(y3, [[6000, 0], [7000, 0], [7000, 2000], [6000, 2000]])

    # Process shapes
    result = geomAndNot(y3, y4)
    saveDerived(result, "y5", "drawing", "layout")

    geomEnd()
    # Done boolean ops

    cv.update()

    in reply to: Booleans in Python scripts #2162
    Keith
    Keymaster

    In 4.6.37 there are some API enhancements that make it more easy to use boolean operations on shapes in Python scripts.

    Previously, the boolean ops from the geometry engine were available, but only to all shapes on a layer when used in scripts.

    Now there are API calls to allow individual shapes to be used. THe mechanism is basically:

    – Initialise the geometry engine
    – Create empty layers (edgefiles) for the shape layers you want to process
    – Add the shapes to the layers
    – run the boolean operation(s)
    – save the results back to the cellview

    An example to create some shapes and process them is:

    Code:
    from ui import *

    ui = cvar.uiptr

    lib = library("default")
    tech = lib.tech()
    ui.openCellView("default", "test", "layout")
    cv = ui.getEditCellView()

    # Get layer geoms
    y3_lyr = tech.getLayerNum("y3", "drawing")
    y4_lyr = tech.getLayerNum("y4", "drawing")

    box = Rect(0, 0, 1000, 2000)
    cut = Rect(-500, 200, 8000, 1800)
    cutshape = cv.dbCreateRect(cut, y4_lyr)

    # Start boolean ops
    geomBegin(cv)

    y3 = geomEmpty()
    y4 = geomEmpty()

    # Add a single shape
    y4 = geomAddShape(y4, cutshape)

    # Add a list of shapes
    shapes = []
    for i in range(0,4) :
    shape = cv.dbCreateRect(box, y3_lyr)
    box.offset(2000, 0)
    shapes.append(shape)

    y3 = geomAddShapes(y3, shapes)

    # Process shapes
    result = geomAndNot(y3, y4)
    saveDerived(result, "y5", "drawing", "layout")

    geomEnd()
    # Done boolean ops

    cv.update()
    ui.winFit()

    Note that operations are layer based; you can add any shapes to an edgelayer, but they are treated as all on the same layer.

    in reply to: Export Netlist #2161
    Keith
    Keymaster

    Use the File->Export CDL menu. Depending on the viewType (schematic or layout) it invokes either the hierarchical netlister or the flat netlister.

    Both now use the NLPDeviceFormat property on symbols to control the formatting of instances in the netlist.

    in reply to: Grid resolution #2159
    Keith
    Keymaster

    Good to hear it.

    in reply to: Open GDS top cell from command line #2156
    Keith
    Keymaster

    It's not possible currently,the stage of finding and opening a top cell is limited to interactive mode. You could do it by using a script invoked from the command line.

    in reply to: Grid resolution #2154
    Keith
    Keymaster

    It's hard to say without seeing an example. Normally its best to make schematic parameters in metres, and use spice-like notation i.e. a property like 'w' is a string prop with values e.g. '1.2u'. Although this is by no means essential.

    Have you compared with e.g. the example lib or the apdk lib?

Viewing 15 posts - 91 through 105 (of 861 total)