Is there a way in skill to force the icon name to "lay" for a layout window and "sch" for a schematic window? Maybe some userPostInstallTrigger is needed? hiSetIconName(getCurrentWindow() "sch") works manually but when I descend/return in hierarchy, the icon name reverts to the cellname, in the gnome taskbar (window selector). Having a short name "lay" or "sch" makes it easier for me to identify the window in the taskbar, since I use one tabbed session window for layout and another for schematic. Thanks.
automatic setIconName ?
"Connectivity - Update - Device Correspondence" SKILL code equivalent.
Layer Cyclic Field within a PCell
I'd like to know if PCells are capable of integrating layerCyclicFields within them. I know individual layer and purpose cyclicFields can be integrated using cdfCreateParam(). I am looking for an elegant solution where I don't need to check for the existence of a layerPurpose pair in skill. My current flow is -
1. Use tech~>layers~>name to generate the layers list.
2. Execute a callback when the required layer is chosen to generate the correct purpose list by using techGetLP() to check for validity of the LPP.
3. Generate a cyclic field for the purpose names using the above generated purpose list.
Thank you,
Girish
is there a way to see changes on layout in real time?
problem with pcell with radio button
Hi all,
i am trying to make a PCELL using SKILL script. I want my PCELL to be able to turn on/off certain layers based on the radio button selected by users. In the following code, I draw m1, m2 and m3. If user selects uptoM1, only M1 should be on, and if user selects uptoM3, all M1, M2 and M3 should be on. I have a call back function, decap_metallevel() in the radio button CDF to turn on and off metal layers.
However, this function doesnt turn on/off metal layers when i select different radio button. Does anyone see where the problem is??
Thanks
Rudy
Problem updating OutputStringField
The following code is assigned to a button i have in a GUI. When i hit the button i have print statements along the way to tell me when it is generating, when it finishes, and if there were any errors. I have get() functions along with them to update the outputStringField in my gui to give me the same information. the only problem is that it only outputs when it is finished or when there was an error, not when it is running.
Could someone take a look and please tell me why the get functions are not functioning like i expect, that is like the printf functions?
I even tried putting the "Generating GDS" get function into a procedure and adding it in front of the wavGenGds() callback and I get the same results.
There is something simple i am missing but cannot figure out what it is.
Thank you very much in advance for your help.
Thanks,
Chris
procedure( wavGenGds( @optional (cv getEditRep()) (strmOutRunDir "./CALIBRE/GDS") )
prog( (bin_strmout,libname,cellname,viewname,strmout_str)
bin_strmout="/cad/tools/cadence/ic616_isr14/bin/strmout>/dev/null"
if( cv~>cellViewType != "maskLayout" then
printf("Expecting maskLayout view type !\n")
return(nil)
)
libname= cv~>libName
cellname= cv~>cellName
viewname=cv~>viewName
tf = ciGetTechFile()
techFileName = tf~>libName
if( cv~>modifiedButNotSaved then
printf("%s %s has been modified, but not saved ! - need to save the views\n",cellname,viewname)
return(nil)
)
strmout_str = strcat(
bin_strmout
" "
sprintf(str "-library %s" libname)
" "
sprintf(str "-strmFile %s.gds" cellname)
" "
sprintf(str "-runDir %s" strmOutRunDir)
" "
sprintf(str "-topCell %s" cellname )
" "
sprintf(str "-view %s" viewname )
" "
sprintf(str "-techLib %s" techFileName)
" "
sprintf(str "-logFile %s.log" cellname)
" "
) nil nil
printf("Running wavStrmOut on cell: %s view: %s\n",cellname,viewname)
;wavRunGuiForm~>wavGenGdsField~>value = sprintf(wavGenGdsRun "GENERATING GDS for %s" cellname)
get(wavRunGuiForm wavRunGuiForm~>wavGenGdsField~>value = "Genereating GDS")
if( !system( strmout_str) then
printf("GDS file generation failed - check %s/%s.log file !\n" strmOutRunDir,cellname)
;wavRunGuiForm~>wavGenGdsField~>value = "Streamout Failed - Check Log File"
get(wavRunGuiForm wavRunGuiForm~>wavGenGdsField~>value = "Streamout Failed - Check Log File")
return(nil)
else
printf( "GDS log file located at %s/strmOut.log\n", strmOutRunDir )
printf( "GDS file located at %s/%s.gds\n", strmOutRunDir,cellname )
;wavRunGuiForm~>wavGenGdsField~>value = "GDS CREATED SUCCESFULLY"
get(wavRunGuiForm wavRunGuiForm~>wavGenGdsField~>value = "GDS Created Successfully")
return(t)
) ; end if
) ; end prog
) ; end wavGenGds
Generating verilog netlist from schematic
Hi,
I am trying to generate verilog netlist from the schematic view of the circuit I am working on.
For doing so I follow following steps---->
1. open schematic.
2. under Launch tab, click on Plugins-->Simulations-->NCVerilog.
3. after this I get a window called "Virtuoso Verilog Environment for NC-Verilog Integration"
4. Then I choose the appropriate Run Directory and Initialise the design.
5. After this I choose to generate netlist option.
Now I am facing an error while generating the netlist. the CIW window says " *Error* eval: undefined function - hnlSetOutputVars".
What is this error and how can I solve this error. Can anybody help?
Regards,
Jagdish
How to open particular schematic or layout with shortcut key
How to select shapes overlapped by a text or label ?
how to cut an array of rectangles in a big rectangle?
Hi All,
I am a newbie to SKILL programming and need help on the following question that seems simple yet getting me stuck for a while. Any help will be appreciated!!
What I am trying to do is simple: I would like to cut several repeated rectangle holes in a rectangle. I have no idea how select the bunch of squares at once and generate the wanted rectangle with holes.
; create the big rectangle
bigrectangle = dbCreateRect(pcCellView mylayer list(0:0 10:5))
; create the array of rectangles
for(i 1 10
xxx = dbCreateRect(pcCellView mylayer list(i*2:4 i*2+1:6)) ;<----------------------------------?? don't know how to select the rectangle array at once and then eventually delete it after layer generation
)
layerAndNot( pcCellView mylayer list(bigrectangle) list(xxx))
dbDeleteObject(bigrectangle) dbDeleteObject(xxx)
Detect and Close Dialog Boxes (Pop-Up Windows) using SKILL
Dear all,
I'm trying to automate cells placement into a layout view using SKILL, and I'm using the famous CCSinvokeInstCdfCallbacks for invoking callbacks, but unfortunately for me, some callbacks are producing dialog boxes with three buttons OK, Cancel, and Help.
Does somebody know how to block or automatically close these callback dialog windows using SKILL?
Actually, I found one solution (https://www.thecadforums.com/threads/detect-and-close-blocking-dialogs.36255/) written by Andrew Beckett almost 10 years ago, but it does really help me, see bellow.
procedure(myDontShowDBox()
; schedule an OK button press on the dialog box when the UI toplevel
; returns - or rather 0 tenths of a second after it returns.
hiRegTimer("hiDBoxOK(myDBOX)" 0)
; display the modal (blocking) dialog box
hiDisplayAppDBox(?name 'myDBOX ?dboxText "Blocking" ?dialogStyle 'modal)
)
Kind regards,
Vadim
Palette side tab variable
Toggle schematic instance, wires, and pins selectable
Launching PVS LVS/DRC results browser from a skill file
Hi All,
Does anyone know how to open up the PVS DRC and LVS browsers from skill that will be linked to the correct layout window?
I have a script that runs LVS and DRC on the command line via ipc. I would like to have the option of once the run is finished to pop open the results.
Thanks for the help,
Chris
find warnings / marks on the layout view using SKILL
Virtuoso XL Auto Router(routing width input ?)
Hi All,
I am using Auto Router option(Virtusos XL -> Route -> Automatic Routing) for the layout routings.However the tool is routing by taking the minimum width of the metal layers.
Is there any way to customize the routing width of each metal layer in Auto Router tool?
I tried searching the option for specifying width input in the Auto Router GUI ,but i could not find it.I have little idea that the width can be controlled by creating a customized "constraint group".But not very clear about this.
Please suggest me some way to do it(I am using Cadence 6.1.6 version).
Thanks In Advance,
Amar
How to get the current expression in the ViVA calculator
I have some SKILL code that was able to get the expression from the calculator in IC5, but I can't figure out how to do it in IC6.
Here is my IC5 code:
procedure( mvGetCalcBuffer()
prog((uniqueSymbol)
;; find the calculator variable - it's the last on the list
i=0
varName = sprintf(nil "_ahiiUniqueSymbolformcalculator%d" i)
while( boundp(stringToSymbol(varName))
when(evalstring(varName)
return(evalstring(sprintf(nil "%s->buffer->value" varName)))
)
i=i+1
varName = sprintf(nil "_ahiiUniqueSymbolformcalculator%d" i)
) ; ** while boundp **
return(nil)
) ; ** prog **
) ; ** procedure mxPsGetCalculatorBuffer **
Access EM shapes of a Voltus-Fi simulation
Hello,
Is it possible to access the colored EM shapes with skill after a voltus-fi simulation? I tried to go trough the data structure e.g. the window object but I didn't figure out the way to the colored shapes. Maybe it isn't possible with my approach. At the end I want to use the information layout position, size and color of the EM shapes for postprocessing. An approach with skill would be very helpful. Maybe there is another approach to get those information.
Best Regards,
Marco.
Rename a schematic labeled net by SKILL
Hello,
I would like to rename a set of LABELED nets in a schematic using SKILL. The following script is my starting point.
procedure(renameNet(oldNet newNet)
prog((cv net)
cv=geGetEditCellView()
net=dbFindNetByName(cv oldNet)
net~>figs~>theLabel=newNet
;dbRenameNet(net newNet)
schCheck(cv)
)
)
I have some doubts to be clarified.
Is it sufficient to modify the label name or have I to use both "net~>figs~>theLabel=newNet" and dbRenameNet (e.g. because there are other properties I need to change)?
Does exist a straight command to modify names of both net and label?
dbRenameName only (without "net~>figs~>theLabel=newNet") doesn't work on a labeled net, is it correct?
If "net" having labeled "net01" is composed by n pieces of wires, then "net~>figs~>theLabel" is the following n+1 element list: ("net01" "net01" ... "net01"), correct?
Thank you very much
Best regards
Aldo