Skill code to automatically map instances via name in layout xl
Destroying structures
Hi there,
I came across defstrct and was amazed at the capability it gives. I make many structures and store them in a list and do some sorting etc. ex:
struct1=make_myStrcut(..)
struct2=make_myStrcut(..)
myStructList=('struct1 'struct2..)
In logic everything is working fine and as expected. However, I need to do this task many times, and everytime I am making new structures and storing this in this list, without destroying the previous instances.
myStructList=('newStruct1 'newStruct2..)
This clogs up the memory (RAM + swap) in the server as the previous 'struct1s are not 'destroyed'. Is there a simple function to clean up these structures.
Note: The no. of structures are many (with considerable data).
I had a quick look in the forum and manual, but could not come up with anything close.
Any help would be appreciated.
Thanks and Regards,
Atul
How to get reference to selected instance pin
If you select an instance in your schematic, you can get a reference to it using geGetSelSet().
I find this doesn't work if the selected object is an instance pin.
My ultimate goal is to create a bindkey to name add a wire label for the wire connected to these pins and make the lable name equal to the pin name. This will save me some drudgery in the future. Too often I'm plotting signals with random names like net0153 because I didn't have the patience to name every net in my testbench.
So if anyone knows a way to get db refernces to these objects, please share.
Thanks!
Connectivity lost while changing technology.
Hi there,
As the subject suggests I am trying to migrate a design from one technology to another. The method adopted is by changing the master:
selectedObject=car(geGetSelSet())
masterID=dbOpenCellViewByType("newTechLibName" "newTechCellName" "symbol" "schematicSymbol")
selectedObject~>master=masterID
This indeed changes the master and I can see the MOS of new technology appearing, but the wires connecting them are not connected now (it seems as if because of change in symbol).
A slight adjustment does the job at graphical schematic level. Is there any way to change the master and preserve the connectivity also (the w's and l's value remains same, fortunately!)
Thanks and Regards,
Atul
Ultrasim: error measurement on internal node
How to reorder the CDF in SKILL?
Hi,
I've been coding SKILL for a long time, and right now I'm basically doing this:
cdfid2 = cdfGetBaseCellCDF(cell2)
cdfid1 = cdfCopyCDF(cell1 "baseCellData" cdfid2)
cdfCreateParam(cdfid1 ?name <blah blah blah> )
cdfCreateParam(cdfid1 ?name <blah blah blah> )
....
cdfSaveCDF(cdfid1)
Basically I have a cell1 which borrows almost exactly the CDF from cell2--callbacks and all--and then adds a few more parameters. My problem is, the additional parameters appear at the BOTTOM of the cdfgForm. I need them at the top. How do I reorder them? I tried something along the lines of:
cdfid~>parameters = append1(cdr(cdfid~>parameters) car(cdfid~>parameters))
and it didn't work. Attempts to modify cdfid~>parameters directly don't seem to respond. cdfDump doesn't work very well, because that requires some manual invervention to inject the new parameters at the beginning before reloading it (unless you did some fancy SKILL/Python code to hack up the ascii cdfDump.il file). Is there some command similar to hiInsertMenuItem where I just say, "I want this parameter to appear at this position, before this other parameter"?
thanks!
Get cut layer from symbolic
How to copy and rotate a shape with any angle in skill ?
I failed to search the manual and the forum to find a way to copy and rotate a shape I created with any agle like 15, 30, 45 etc.
I noticed some posts said that rotate with any angle may raise lithography issues. But in MEMS application, it's very popular to use all kinds of "strange" shapes. As the line/space is over 1um, the litho problem can be neglected. Then, what can I do in skill code?
Adding library pathes
The envirnoment creates a new cds.lib file when cadence virtuoso starts per session.
Is there a better way of adding additional library pathes than creating a procedure to append the cds.lib by printing out a text file to the cds.lib file?
Example of current procedure:
procedure(addLibPath()
let( (
(addLibFile "./adLibs.txt")
(mainLibFile "./cds.lib")
)
if(isFile(addLibFile) && isFile(mainLibFile) csh(strcat("cat " addLibFile " >> " mainLibFile)))
)
)
Thanks
New to skill, looking to do something simple, add text to a path
I am new to skill coding and am trying to do something pretty simple but having some trouble and haven't been able to find something to help me out. Basically I am trying to create a path and then add text to it for the path name. I can generate the paths using the leCreatePath command but I can't find the right command and format for adding text to the path. Ideally I would like the text to be attached to the path. Any help would be greatly appriciated.
The edge is hilighted when the cursor is close to, how to use skill to achieve it.
Making SKILL manipulation of objects constraint aware
I'm wondering if there's some kind of callback function I could call to make any manipulation I do on an object constraint aware. For example, if the symmetry constraint is set for two instances just so they are symmetrical along an axis. If I use non-interactive SKILL command to change one of the instances e.g. dbMoveFig(), the other objects will not move and it will break the constraint right away with warnings marker drawn on top of both instances.
Any way I can get around this problem without using functions like leHiMove()? Thanks!
Moving over to 6.1.4
Hi Cadence Community
I am having a bit of a problem transitioning existing layout designs from Cadence’s Virtuoso 5.10.4 to Virtuoso 6.1.4. Using the Conversion Tool Box feature CDB to OpenAccess Translator that is provided. The design transition over to 6.1.4 is relatively smooth, lvs checks are clean. However, in running the Design Rule Check the following error message is trigger when running top level hierarchy cellview check which includes the seal ring and bondpads. All sub-cells DRC checks are clean.
[2044] offGridShapeErrors: GRCE001: CHIPEDEG x and y dimensions must be an even number of grid points
I hope there is a fix or a work around for this challenge.
Any help or insight will be greatly appreciated
Johnny
Setting location of custom toolbar
Hi,
The query is about setting the location of a custom toolbar. When the toolbar gets placed using the hiPlaceToolbar function, there's this option to mention the location - top/bottom/left/right.
hiPlaceToolbar(
w_windowID
o_hiToolbar
[s_toolbarArea]
)
But, it gets placed along the same row of toolbars which are already there - thereby getting squeezed to a corner. How do I set it to get placed on a new row automatically and always?
Thanks,
Leo
SKILL for image saving in ViVA
accessing hiCreateToggleField individual values
Hello, I have been struggling for a long time trying to figure out how this hiCreateToggleField works. I can't seem to figure out how to access individual items that are actually selected by the user. I put together a little testcase that I think will help me understand if you could modify it to "only" print what is selected in the form?
procedure(serdes_pop()
let((popWhat singleLib allLib libChoice labelField lib)
mylist=list( list( 'MT1 "MT1" ) list( 'MT2 "MT2" ) )
popWhat = hiCreateToggleField(
?name 'popWhat
?prompt "Populate:"
?choices mylist
?itemsPerRow 1
)
labelField = hiCreateLabel(
?name 'myLabel
?labelText "_________________________________________________"
)
popForm=hiCreateAppForm(
?name 'popFormdcr
?formTitle "Populate cadencelibs"
?callback 'popLib16CB
?fields list(popWhat labelField)
?unmapAfterCB t
)
hiDisplayForm(popForm)
);endlet
);endprocedure
procedure(popLib16CB(popForm)
prog((singleLib)
when(popForm
foreach(a popForm->popWhat->_toggleItems
print(symbolToString(a))
)
)
return(t)
))
Setting multiple snap spacings
Hi,
My requirement is to set snap spacings according to the layer been selected in LSW. To achieve this, i have following questions:
1)How to check which layer is selected currently?
2)If i have the script which is able to identify the layer selected and accordingly change my snap spacings, then how can i schedule that script so that as soon as i change my layer selection in my LSW snap spacings should change automatically. Is there a way to do that?
Thanks,
Arunkumar A
How to reconnect the wires after cell replacement?
How to detect and remove dangling nets in schematic?
Adding corners to ADE-XL setup
Hello,
I'm pretty new to Skill and am currently trying to add corners with variable values I read in from a .csv-file. So far I'm using axlPutCorner() to create a new one which then gives me handle to it but I wasn't able to find any following command to set the variables and values.
I guess there is the possibility to save the .sdb-file for the corners and change that file with the script, but was wondering if there is an easier way to create a corner, like creating outputs with axlAddOutputExpr(). It seems rather difficult to change the xml-code with Skill.