Forum Replies Created
-
AuthorPosts
-
Keith
KeymasterIt's on the server right now if you want to download it and try – compiled this morning.
Keith
KeymasterYes 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
Keith
KeymasterIf 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.
Keith
KeymasterOne 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.
Keith
KeymasterIs 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?
Keith
KeymasterNot 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 4and 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 back2) 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.Keith
KeymasterSorry – only just noticed this.
You can run gemini (the LVS engine) standalone.
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/2018gemini {-[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%)Keith
KeymasterDid 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.
Keith
KeymasterWhen 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.
Keith
KeymasterIn 4.6 38 you can just create polygon data form vertices:
Code:from ui import *
ui = cvar.uiptrlib = 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 opscv.update()
Keith
KeymasterIn 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 cellviewAn 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 opscv.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.
Keith
KeymasterUse 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.
Keith
KeymasterGood to hear it.
Keith
KeymasterIt'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.
Keith
KeymasterIt'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?
-
AuthorPosts