a simple way to convert AEL evaluation symbols suffixes?
ABE commands can't process round/circular shapes
Hi,
I was using ABE commands to get shapes from the layout. We have some round shapes which needs to be processed. When i use ABE command to get the layer and process it, the round shapes are not anymore round they are converting to polygons with 45deg bends.
do we have a way to process round shapes in ABE?
Thanks & Regards
Neeraj
Module Generator
In the help section of cadence virtuoso,one example of routing a module generator is given in which they have used a function gpeAddTwigEntries() but while using the same function in my own script I am getting error as "undefined function"
Andrew, a help from you would be highly appreciated
Regards,
Vishal
Is it possible to make aelEnvInterpret correctly evaluate the expression containing "pPar/iPar"?
Hi,
Strictly speaking, AEL function is not skill function, so I put it here.
env = aelEnvCreate( 'f t t )
aelSetLineage(env tmp4) ;tmp4 is the lineage correctly retrieved
aelEnvSetGlobals(env "a" "0.1u")
aelEnvSetGlobals(env "b" "0.2u")
expression1 = "a+b"
expression2 = "pPar(\"sbn\")"
expression3 = "a+b+pPar(\"sbn\")"
In my test, if do aelEnvInterpret respectively for these three expressions, I can get correct result from expression1 and expression2. In expression3, aelEnvGetErrStr() will croak "data type error".
Any ideas?
Thanks.
Fred
Accessing values of dynamically created properties of a symbol
Hi,
I have a symbol 'a' which is having multiple properties that were created dynamically during execution.
The names of all the properties are having the prefix 'b' followed by an integer, for ex: b1, b2 etc.
The property list for symbol 'a' would be like (b1 value1 b2 value2 ...)
I have a counter 'cnt' to keep track of the number of such properties that were created dynamically.
My objective is to access the values of each of the properties, starting from a -> b1 to a -> b<cnt>.
Please let me know how can this be done.
Thanks,
Mallikarjun
transform to current hierarchy
Hi,
i have a list of cellnames . I need to lookout for these cells inside a layout having lot of hierarchies . Currently I used lesearchierarchy() to get these cells or instances coordinates. I need to get these cells cordinates a/c to current hierarchy . I gone through dbconcatetransform() but didn't get idea how to implement this . Please let me know if anyone dealt with this before .
Thanks,
Raghu
No supermaster is created
Hi
From pcell library tpPcell (I do not have write permission) , I instantiated pcell A in Cell X and pcell B in Cell Y in stdcellLib . Then I create a top level cell "DRC_TOP" by placing Cell X and Cell Y using SKILL code "CCFplaceAllnstances" (obtained from this community 1 year ago). I got the following error code (DB-27000) and no supermaster is created. What is supermaster ? Why do I get this warning message ? Although I could place Cell X and Cell Y in DRC_TOP successfully, I try to understand why the SKILL code wants to create supermaster and the purpose of the supermaster ?
CCFplaceAllInstances(?libName "stdcellLib" ?viewName "layout" ?columns 20
?spacing 2.0 )
\w *WARNING* (DB-260014): dbOpenBag: Library tpPcell: cannot upgrade library access from read to write.
\w *WARNING* (DB-260014): dbOpenBag: Library tpPcell: cannot upgrade library access from read to write.
\w *WARNING* Parameter 'layer1' already exists.
\w *WARNING* Parameter 'layer2' already exists.
\w *WARNING* Parameter 'w1' already exists.
\w *WARNING* Parameter 'l1' already exists.
\w *WARNING* Parameter 's1' already exists.
\w *WARNING* Parameter 'samepattern' already exists.
\w *WARNING* Parameter 'discription1' already exists.
\w *WARNING* Parameter 'w2' already exists.
\w *WARNING* Parameter 'l2' already exists.
\w *WARNING* Parameter 'errpattern' already exists.
\w *WARNING* Parameter 'discription2' already exists.
\w *WARNING* Parameter 'overlap' already exists.
\w *WARNING* (DB-260014): dbOpenBag: Library tpPcell: cannot upgrade library access from read to write.
\o Loading pCellGen.cxt
\w *WARNING* (DB-270000): dbOpenCellViewByType: Cannot obtain write access for library tpPcell to access design database: library has read access.
\w *WARNING* Pcell evaluation failed. No supermaster was created.
\e *Error* dbPurge: argument #1 should be a database object (type template = "d") - nil
\w *WARNING* (DB-270000): dbOpenCellViewByType: Cannot obtain write access for library tpPcell to access design database: library has read access.
Thanks,
MC
Launch MonteCarlo simulations on ADE-XL using SKILL
Hi,
I have a setup on ADE-XL with many tests and corners. Every time that I do verification I run 10s of Montecarlo simulations and I have to click on the play button one by one till all of them have started successfully .
How can I automate this task, so I can launch a script which will take care of that ?
I did the first part, which creates and configures each corner, to point to the correct test, variables used, models used, etc.
Can you help me with this please?
Thanks in advance.
Best regards,
Pedro
Using SKILL to copy content between layout views
I am using SKILL to (select and) copy layout content between Virtuoso layout views.
From previous posts, there seem to be 2 commonly recommended approaches - (1) using dbCopyFig(), and (2) dbCreateInst() followed by dbFlattenInst().
I would like to use both in different situations, but whereas dbCopyFig() will capture selected prBoundaries, they are not retained by the flattening functions dbFlattenInst() and leFlattenInst().
How to retain a cell boundary when removing hierarchy / using the flatten operations?
Modgen Topology Constraints
Hi,
Cadence Virtuoso version- ICADV12.3-64b
In the help section find the term "Modgen Topology Constraints"
There you see a list of different Constraints, Go inside 'Via control' , in the example given for via control Constraint they have defined in the following manner if you see..
list ("viaControl" nil 1
list(stringToSymbol "viaControlOrient" Horizontal)
list(stringToSymbol "viaControlInline t)
list(stringToSymbol "viaControlOffset t)
...........
.............
))
I am using the same list in my script but getting an error as "unbound variable stringToSymbol"
which is obvious as stringToSymbol is a function which requires a string as a parameter....
So i am not getting where i need to change the sytax !!!
Andrew please clarify!!
Thanks,
Vishal
What am i doing wrong in the script (for form with grids)?
Hello...
I'm creating a form with different tabs and in one of the tabs, i'm trying to add a Browse button using ddsFileBrowseCB to browse a file and display that in a stringField.
But unfortunately i'm having a trouble doing it and it says
ddsFileBrowseCB( hiGetCurrentForm() 'filename)
*WARNING* ddsFileBrowseCB: Invalid target string field: filename; not found on the form.
And my code for that particular grid is:
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
CellListField = hiCreateGridLayout( 'CellListField ;?frame "Select the cell-list"
?items list(
;list( hiCreateLabel( ?name 'CellListFieldName ?labelText "Cell-list : " ) 'row 1 'col 0 )
list( hiCreateStringField(
?name 'filename
?prompt "Cell-list : "
?value CellListFieldValue
?defValue "celllist"
?editable t) 'row 1 'col 1)
list( hiCreateFormButton(
?name 'browseBtn
?buttonText "Browse..."
?callback "ddsFileBrowseCB( hiGetCurrentForm() 'filename)") 'row 2 'col 1)
;list( 'col_stretch 1 1 )
))
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Could someone help me fix this issue?
Thanks
SSR
Test if a technology supports layer coloring
I have some scripts that work with getting layer coloring, but there dont work with older technology that does not support coloring.
Sorry I dont have the print out error in the CIW, but believe the script did not work and gave some message about the unsupported coloring in technology.
Is there a function to test if the technology does or does not supports coloring?
Paul
Which function in IC 5.1.41 corresponds to dbCreateVia() in the IC 6.1.6 version?
How to reinvoke an ocean script
I am recently encountering a challenge that an ocean script leaks memory over time. If nothing is done to deal with it, the script will eventually crash.
I want to make the script more robust in the sense that when it detects memory usage over certain boundary, it will stop the script, release the memory and start the script again.
What I have in mind is to use combination of bash and ocean. The bash script will be in an outer loop to control the execution of the ocean script.
What I am not sure about is how the outter loop communicates with the ocean script, maybe the most stupid idea is to let the ocean script write to some intermediate file and the bash script to constantly monitor the content of that file. So, I am looking for input regarding how the outter loop can catch this 'break' in the inner loop of ocean script.
Below is the pseudo code i have in mind:
#!/bin/bash
ocean; enter ocean environment
load("ocean.ocn")
if memoryAllocated() > [some threshold]
then tell ocean.ocn to stop
exit; exit ocean environment to free leaked memory
;detect this event has occurred
ocean ; enter ocean environment again
load("ocean.ocn") ; repeat the process
asynchronous ocean coding
Below is the pseudo code that I want to do:
math() ;
ipcBeginProcess(watchdog()) ;
Basically what I want to achieve is to have the watchdog() function watch over math() function. From what I read, this should is exactly what the function ipcBeginProcess is designed to do. But somehow, I just can't make it work. I would like to know why my code doesn't work.
Below is my exact code:
bsh> ocean -restore script.ocn
The expected output is:
------------------I am asynchronous--------------
------------hello world-----------
------------hello world-----------
------------hello world-----------
------------hello world-----------
------------hello world-----------
However, I never saw '------------hello world-----------' in the output. Instead, all ipcBeginProcess did was bringing up a 2nd Welcome window, which I assume it means the child process was created successfully but looks like almost nothing happened after. BTW, the virtuoso version I am using is IC6.1.7.
Accessing the properties of a Via (ie. enclosures) in ~SKILL
Hi,
I'm working in version ICADV12.3-64b.500.21 of Virtuoso.
I am currently writing a SKILL program that changes the value layer2Enc of a via, but retains its layer1Enc. In order to do this, I create a new via with a corresponding property list (association list) containing properties such as layer1Enc, cutWidth, etc. If I would like to retain the layer 1 enclosure of the via that I intend to replace, where would I find this enclosure?
I've tried:
via~>viaHeader~>overrideParams
But the parameters specified within overrideParams differ from what appears in the GUI form, "Edit Via Properties".
I've also tried:
via~>viaHeader~>viaDef~>params
This also contradicts the data I'm getting from Edit Via Properties. I'm relatively new to SKILL, so I first assumed that there would be a CDF description associated with an instantiated via. But I am unable to retrieve any cdf description, partially because vias aren't created as instances and defined within a tech database.
How could I find a Via's layer1Enc using SKILL?
Thanks,
Alex
How to disable/enable a device in schematic pcell while netlisting
Hi,
I've created a schematic parameterized cell (Pcell) in which I've 3 types of capacitors (MOS, MIM and MOM caps). When I insatiate this cell in a top cell, I want to have a switch for each of these caps, so that I can disable/enable them in the top cell based on my requirement. Let's say in one case, I want to netlist MOS and MIM only. And in another case, I want to netlist MIM and MOM.
I came to know that there is an option called nlAction. If I add this as netset, CDL export is ignoring the particular cap while netlisting. This is working fine for the current schematic. But I want this to be parameterized, so that I can toggle net listing of each cap from top cell.
Could someone help me with this.
Thanks,
Prasad
Skill script for uniquification of cells
Skill equiv to Update components and nets of Instance
Sorting list by sublist elements
I have a list like the following
myList =(("I1" 0 0) ("I2" 2 1) ("I3" 1 1))
i would like to sort this list by the 2nd or 3rd element in the sublists. the results would look like the following sorting by the 2nd element.
(("I1" 0 0) ("I3" 1 1) ("I2" 2 1)
can anyone help with this? Your help is much appreciated.
Thanks,
Chris