Multiple types checking for a procedure.
Can one add dynamically slots to a SKILL++ ?
Selective Marknet
Hi,
I have two questions:
1. Is there any way I can mark the nets in a given area of layout only? Is there any faster alternative to marknet using skill?
2. How can I force that any new rectangle which is drawn in the layout must start from the edge of a previously drawn rectangle (assuming that I invoke this functionality after drawing some rectangles)
Thanks,
Sarik
Layer Panel in app form
Radio Field and String Field doubts
Hi,
I am trying to do a simple script, which should create a form with some text boxes and radio buttons.
Given the code in the end of this post I would like to add the following functionalities:
1 - If myOptionBtn is set to "Yes" send a message to the screen, otherwise do nothing.
2 - If I am refering to the value of a radio field, can I use something like:
if ((formName->radioName->value)=="t") then
hiGetAttention()
warn("some text"))
3 - i would like to pop a window for the user to select a directory and store that into a variable or text file.
I did my code based on an example in Cadence Documentation. Below is what I have done so far.
procedure(formSettings()
; Create the top label
myLabel=hiCreateLabel(
?name 'myLabelText
?labelText "Settings"
?justification 'center
)
; Create the textbox Label
myString=hiCreateStringField(
?name 'myTextBox
?prompt "Path: "
?value "Insert path to your images here !"
?defValue "~/Desktop/"
)
;option Buttons
myOptionBtn = hiCreateRadioField(
?name 'optionbtn
?prompt "Generate all the documents for me"
?defValue "No"
?choices list("Yes" "No")
)
if( boundp('formSettings) then ; If the form already exists do nothing
formSettings
else ; If the form doesn't exist then create it
hiCreateAppForm(
?name 'settingsForm
?formTitle "settings"
?callback "";
?fields list(myLabel myString myOptionBtn)
)
status = hiDisplayForm(settingsForm)
)
)
Thanks in advance,
José
How to add menu items to test mouse right click menu in ADE-XL
Moving cursor from GUI form to Layout window
Help on dbCreateInst function.
Hi,
I have a list of cells that needs to be instantiated in schematic. I chose to use the function dbCreateInstByMasterName() since the list has the library and the cellname. The problem I am facing is when the number of instance is 2, I can never get the function to put 2 instance of the cell. If I give 2 for x_numInst variable it puts <0:2> number of instances and if I give 1 for the x_numInst variable it instantiate only 1(Its suppose to do <0:1> by it logic) instance and if I give 0 it still instantiates 1 instance.
Thanks,
Mithun.
Snapshot functionality in Cadence Skill
I'm building a skill code which works like a snapshot.
There would be some objects(metals, poly, od etc. ) kept on the top level of the cell.
And the user would give a list of bBoxes.
For each bBox acting as a frame of the camera , whatever objects are kept inside that specific area should be copied in a new cell.
By the word specific I mean if a metal elongates outside a bBox then only that part should be copied which is inside the bBox.
Crop functionality in SKILL ?
A leChopShape function chops a shape based on the points given to it. The left out part is preserved.
But does there exist a function which can chop the rest of the shape except the part inscribed inside a given bBox / set of points ?
Does SKILL have a crop function or lets say an inverse chop function ?
"List name" decided by a variable
re-reading .cdsinit
Without leaving virtuoso, how would I initiate a re-read of .cdsinit (or fresh virtuoso startup condition)
Note that I do not have .cdsinit in my local or home directory it is a system wide .cdsinit from tools/dfII/local/.cdsinit
I tried to load "pathto/.cdsinit"
But it doesn't seem to initialize the same way as closing and opening virtuoso.
There are some config.xml that get looked at before loading the above .cdsinit according to the log file, but other than that
the .cdsinit is at the top of the log during virtuoso startup.
Thanks.
ADE-XL select tests
Dear all,
I have an ADE-XL session with multiple tests set. I would like to be able to select the in the results tab one at a time.
When enabling "Accelerated Input", I can see that the command used is _axlTestFilterChanged(axlOutputsForm1->axlOutputsWidget1 "'(\"Test1\")").
Instead of referring by name I would like a way to identify each element of the dropdown menu by an ID.
I tried help from virtuoso and finder but cannot find the function _axlTestFilterChanged anywhere.
Thanks,
José
How to edit NMOS/PMOS W/L of an inverter layout using SKILL code
Hi
I am using Virtuoso IC6.1.6.
I would like to parameterize an inverter layout for automatic layout design from it's schematic.
Therefore I am trying to edit of NMOS/PMOS W/L of an inverter using skill code in following way:
1. I am using instances (NMOS/PMOS pcells) from technology file (ex. umc, tsmc or gpdk) and made a inverter layout.
2. I want to edit 'width/length' of NMOS/PMOS using skill code
Please let me know how can I write a skill code for the above case.
I would be glad if you may provide some examples or test case.
Looking forward to see a quick response.
Thanks.
Create Instance form default setting
Boundary area from virtual open view ?
Hi,
Is there any way how to select boundary in virtual open view via
dbOpenCellViewByType(Lname Cname "layout" "maskLayout" "r")
and give an area value back ?
If not is there any command which could open virtual window and make boundary selection ...
something like this .....
pteSetNoneSelectable(?panel "Layers")
pteSetNoneSelectable(?panel "Objects")
pteSetSelectable("Boundaries" t "Objects")
geSelectAllFig()
selSh=list()
selSh = geGetSelSet(openC)
if(selSh then
foreach(shape selSh
case( cell~>objType
("PRBoundary"
Barea = shape~>area
)
)
)
;);if
Thx
Robert
ADEXL ocean: Saving outputs for each run
Hi,
I have spent a lot of time reading other posts on this topic and I have had no luck. Many of the posts are from many years ago and I'm hoping things may be simpler now. I am using Cadence Version ICADV12.1-64b.500.13
I'm looking to use ocean in ADEXL to plot some of the outputs to a file. Here is an example scenario:
Run a sweep on a variable A and have a few outputs that are plotted. In ADEXL, I would see a few design points (A=1, A=2, ...) and can look at the results for each setting of variable A. I would like to add a variable that perhaps runs some ocean or skill code to save a few of the outputs to a file. I would like this to run for each variable sweep that is happening.
Basically to create a bunch of files:
A=1_transient.png
A=2_transient.png, etc.
Is there a way to do this without running everything in ocean (ie, bypassing ADEXL completely).
I would really appreciate some input on this. I am willing to read whatever manuals or tutorials it requires, I am just looking to be pointed in the right direction and to know if this is even possible.
Thanks,
Shayan
Is it possible to add properties to a layout pcell?
Hi,
This is what I would like to do:
The p-cell code to generate a layout instance must store certain values computed in the code as a property to that instance.
This is simular to someting I have done before: added properties of computed values for a group in layout.
In the code for generating shapes in a layout, I group all the generated shapes together and then add properties to this group. I use the command:
dbCreateProp( topGroupID fieldName fieldType fieldValue )
I want to do the same with a p-cell. The values I want to report are not parameters (I don't want them to be that either), so they should be stored as properties. When an instance is instantiated, upon selecting that instance and hitting the "q" key, I wnat properties to show-up under the properties tab. I tried to do it with the same command like so:
dbCreateProp( pcCellView fieldName fieldType fieldValue )
but this did not work.
Is there any way to get the p-cell code to store certain values as properties to the instance it is creating?
With kind regards,
Sjoerd
Library Manager - Managing Designs
I've noticed in my Library Manager that there is an option to Check in/ Check out a cell, library... These options are grey for me, so I did some research...
I came upon a Library Manager User Manual from 2000th and noticed Team Design Manager (TDM) options that would be cool to have around...!
But scrolling through the cdnshelp for an updated Library Manager User Manual (2015) I came upon something called EDIF (read just the Wiki on it...)
My question is how is Team Design Manager handled nowadays? I would like to work on establishing it in my team, so I could use some starter points.
Thanks!
Grow/Shrink a Via to Path segment
Hello,
I'm still a novice in SKILL, and I'm trying to make a script/procedure that will change via's bBox to match the width of the path's that via is on. I have a problem when it comes to changing the list of bBox values and I have a more general problem when it comes to determing which via is on the corresponding path segment.
My starter point is that the user would select the vias and paths whose size needs to be changed.
So by far I have a piece of the code that renders paths and vias from selected objects:
selected = geGetSelSet()
vias = nil
paths = nil
foreach(object selected
case( object~>objType
(("stdVia") vias = cons(object vias))
(("pathSeg") paths = cons(object paths))
);case
);foreach
so far I get a correct list of vias and paths from the selected objects.
my next problem is what argument to use to determine which via "belongs" to which path? I looked over the paths~>?? and saw that there's a layer attribute I could use to match...but I don't see anything like that in vias properties.
I tried using dbGetOverlaps but I think I made things too complicated:
overlaps = nil
foreach(via vias
overlaps = cons(dbGetOverlaps(via~>cellView via~>bBox) overlaps)
);foreach
so I created a list of lists that contain a via and the path with that via...
now, I need to run through overlaps and for each list in overlaps again determine which argument is a via and which is a path and check the path segments whether they are vertical or not by seeing their beginPt and endPt (they are vertical if beginPt (x) = endPt(x) symbolically (where x = caar(path~>beginPt)), analogous for horizontal path... )
haven't written this part specifically yet...
anyway, I have tried as a test to change the bBox value of a via using: (exemplary values!! )
via~>bBox = list((lowerLeftPt) (upperRightPt))
I get an error:
dbSetq - cannot set attribute - bBox
Then I tried the dbTransformBBox but I get the same error - I made a check with isBBox to see if I'm using bBoxes in the first place, and it all returned true.
Does it have to do with the fact that maybe I am not working with ROD vias? (I don't know anything yet about relative object designs and parametrized cells)
Of course, my goal is to make this universal, and I haven't even touched the issue of addressing angled paths and rotating the vias to correspond them for example...but, I imagine I'd be using the "orient" property from via~>orient, and somehow calculate the angle from the paths coordinates...
I'd appreciate if anyone can share a bit of an advice if there's any easier or quicker way to do this and what is it that I'm doing wrong with the bBox-es ?