Forum Replies Created
-
AuthorPosts
-
Keith
KeymasterYou might be able to use the Edit->Scale command to scale cells after changing the dbu size.
Keith
KeymasterNo, it's something you set when you create a library. For example the File->New Library command. Or when importing a techfile for the first time.
You can set a library's DBU retrospectively, for example
lib = getLibByName("some_lib_name")
lib.dbuPerUU(10000)Then any cellViews subsequently created will inherit this dbuPerUU factor. Or, you can set an existing cellView's DBUPerUU by querying its properties (q bindkey). This will have the side effect of scaling anything in the cellView.
Keith
KeymasterWhat's your database resolution?
e.g. open a cellview and in the command line type
cv = getEditCellView()
print cv.dbuPerUU()If it's 1000, then snapping will be rounded to 1nm. YOu would need to set it to 2000, or maybe 10000 in order to accept sub-nm grid/snapping.
Keith
KeymasterI updated it this morning as it was missing the extraction pcells.
Keith
KeymasterThe align command doesn't work on the selected set – after starting the command and setting any options you use the 'Set Reference Object' button and click on the reference to align to, then click sequentially on the shapes you want to align.
Keith
KeymasterNormally you would get that error if using an older version of Glade which does not support the latest library version.
Have you tried with the latest version (4.6.27)?
Keith
KeymasterIf you are an academic user the advanced DRC feature is free, just send an email with your host ID (use the hostid program in the distribution directory) from your university address. If a commercial user, please enquiry for more details.
Keith
KeymasterThese are part of the Advanced DRC functionality for Finfet etc. technologies. and are licensed.
Please send an email to support@peardrop.co.uk for more details.
regards
Keith
Keith
KeymasterThere are some requirements for exporting LEF. You need to add connectivity to the shapes you want to designate as pins, for example. Have you looked at the section in the FAQ about creating LEF from GDS2? That gives some details of a typical flow.
Keith
KeymasterIt shouldn?t crash, but for various reasons if drcInit() or the preferred geomBegin() is not called, then things are highly likely to fail.
Keith
KeymasterWhat you're trying to do is read data in one cellView (let's call it cv1) and write data to another cellView (cv2), and you have to open the cellViews yourself.
So in general you want to open a cellView to get a pointer to it. e.g. if lib is the library that contains both cellViews,
# open a cellView with the given cell name and view name in read mode:
cv1 = lib.dbOpenCellView('mycell', 'layout', 'r')# open a cellView with another cellName/viewName in write ('w') or append ('a') mode:
cv2 = lib.dbOpenCellView('mycell', 'abstract', 'a')Of course as previously if you just want to process the current open cellView you can use getEditCellView() for the first case.
If the two cells are in the same library then lib = cv.lib() will get you the library… if you want to get some named library, assuming it exists, then
lib = getLibByName('libName')
will find it for you, or return a NoneType if it fails.
Don't forget to use cv.update() to commit any shape creation to the cellView.
Keith
KeymasterThe answer as always is that it depends on what you're trying to do.
Some cell libraries have layout data which includes a boundary rectangle for the std cell. Then its just a case of getting this, and creating a rectangle of similar size in your abstract view, on the required layer (for LEF export this is the 'boundary drawing' layer/purpose pair.
Other cases which you need to work out the size of the rectangle are going to depend on exactly what's there.
In general, you can use on of two methods:
– get the lpp (layer purpose pair) of shapes of interest, then iterate thru them, identifying the ones of interest and extracting the required coordinates
– use a region query to find shapes on a specified lpp in a specified areaLook in the cellView class / lpp class for iterators and query ( getOverlaps() will get you just shapes in a rectangular region).
Then, by iterating through the shapes on the layer in question, you could for example get the max/min x/y values and create a rectangle using those values.
An example (I haven't tested it):
Code:cv = getEditCellView()lib = cv.lib()
tech = lib.tech()
layerNum = tech.getLayerNum('METAL1', 'pin')
lpp = cv.getLpp(layerNum)# Gett an iterator of all the shapes in the lpp
iter = objIterator(lpp)
while not iter.end() :
obj = iter.value()
obj = obj.toShape()
box = obj.bBox()
# Do something with the shape, in this case print its bounding box
print '(', box.left(), ',', box.bottom(), ') (', box.right(), ',', box.top(), ')'
iter = iter.next()
#Keith
KeymasterThis issue is fixed in a patch version of 4.6.21 dated 16th Nov 2017
Keith
KeymasterWhen you select a shape, the brief info on the status bar gives the layer name , or, if the shape also has net info, it gives the net info instead. If the selected object is an instance, it gives the instance name.
If you want more info on what is selected, use the ?q? bindkey or edit properties command.
I?m not sure if there is some confusion here about ?net?, you can have a layer with purpose ?net?, but whether a shape has connectivity information i.e a net name is different.
If you import a LEF then the abstract views will normally have shapes on e.g layer M1, purpose ?pin?, and these shapes will have a net associated with them. Other shapes (obstructions) will be on e.g M1 purpose ?boundary? and have no net info.
It is hard to know exactly what you have without seeing an example. A single cell would probably be enough.
Keith
KeymasterSure, use saveDerived(edgelayer, ?layername?, ?purposename?)
Where edgelayer is the derived layer you wish to save, and layername/purposename are an existing layer/purpose. You can use a system layer e,g ?y4? ?drawing? for the destination layer/purpose. -
AuthorPosts