Quantcast
Channel: Cadence Custom IC Skill Forum
Viewing all 5075 articles
Browse latest View live

automatic setIconName ?

$
0
0

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.


"Connectivity - Update - Device Correspondence" SKILL code equivalent.

$
0
0

Hi All,

How to use SKILL code to "Connectivity - Update - Device Correspondence"  in

layout and schematic window.

I am using IC5141 .

Please help.

Best regards,

Marben

Layer Cyclic Field within a PCell

$
0
0

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?

$
0
0

Hello all,

I just want to ask a simple question is there a way to see changes on layout view in real time, I mean my SKILL scripts doing a lot of stuff, can I see the whole process, not the result? 

Kind regards,

Vadim

problem with pcell with radio button

$
0
0

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??  

pcDefinePCell(list(ddGetObj("testbench") "decap_pcell_test_1_SKILL" "layout") 
    ((uptoM1 boolean "TRUE") 
(uptoM2 boolean "TRUE") 
(uptoM3 boolean "TRUE")
    ) 
    let((uptoM1 uptoM2 uptoM3 pcMember pcStretchGroup
   stretchOffsetX stretchOffsetY pcLib pcMaster pcInst
   pcTerm pcPin pcPinName pcNet pcTermNet
   pcNetName pcTermNetName pcMosaicInst pcParameters pcParamProp
   pcStep pcStepX pcStepY pcRepeat pcRepeatX
   pcRepeatY pcIndexX pcIndexY pcLayer pcPurpose
   pcLabelText pcLabelHeight pcPropText pcParamText pcCoords
   pcPathWidth pcPolygonMargin
(pcLib = (pcCellView~>lib)) 
(pcParameters = ((pcCellView~>parameters)~>value)) 
(pcParamProp = car(exists(prop pcParameters 
   ((prop~>name) == "uptoM1")
)
   )) 
(uptoM1 = (pcParamProp~>value))
if(((pcParamProp~>valueType) == "boolean") 
   (uptoM1 = (uptoM1 == "TRUE"))
(pcParamProp = car(exists(prop pcParameters 
   ((prop~>name) == "uptoM2")
)
   )) 
(uptoM2 = (pcParamProp~>value)) 
if(((pcParamProp~>valueType) == "boolean") 
   (uptoM2 = (uptoM2 == "TRUE"))
(pcParamProp = car(exists(prop pcParameters 
   ((prop~>name) == "uptoM3")
)
   ))
(uptoM3 = (pcParamProp~>value)) 
if(((pcParamProp~>valueType) == "boolean") 
   (uptoM3 = (uptoM3 == "TRUE"))
if(uptoM1 then 
   (pcLayer = 12) 
   (pcPurpose = "drawing") 
   (pcInst = dbCreatePath(pcCellView 
   list(pcLayer pcPurpose) 
   list((0.209:0.705) 
(1.963:0.705)
   ) 0.2 "truncateExtend"
))
if(uptoM2 then 
   (pcLayer = 15) 
   (pcPurpose = "drawing") 
   (pcInst = dbCreatePath(pcCellView 
   list(pcLayer pcPurpose) 
   list((0.999:1.429) 
(0.999:0.185)
   ) 0.2 "truncateExtend"
))
if(uptoM3 then 
   (pcLayer = 18) 
   (pcPurpose = "drawing") 
   (pcInst = dbCreatePath(pcCellView 
   list(pcLayer pcPurpose) 
   list((0.344:0.988) 
(1.922:0.988)
   ) 0.2 "truncateExtend"
))
)
t
    )
)
;select or unselect all based on SelectAll 
procedure(decap_metallevel()
case( cdfgData->MetalLevel->value 
( "uptoM1t"
 cdfgData->uptoM1->value = "true"
 cdfgData->uptoM2->value = "nil"
 cdfgData->uptoM3->value = "nil"
)
( "uptoM2t"
 cdfgData->uptoM1->value = "true"
 cdfgData->uptoM2->value = "true"
 cdfgData->uptoM3->value = "nil"
)
( "uptoM3t"
 cdfgData->uptoM1->value = "true"
 cdfgData->uptoM2->value = "true"
 cdfgData->uptoM3->value = "true"
)
);case
)
;; Create the CDF 
let( (cellId cdfId)
  when(cellId = ddGetObj("testbench" "decap_pcell_test_1_SKILL")
    ;; if the cell CDF already exists, delete it
    when( cdfId = cdfGetBaseCellCDF(cellId)
      cdfDeleteCDF(cdfId)
    )
    ;; create the base cell CDF
    cdfId = cdfCreateBaseCellCDF(cellId)
    ;; create the parameters 
     cdfCreateParam( cdfId
      ?name    "uptoM1"
      ?prompt  "uptoM1"
      ?defValue    "true"
      ?type    "boolean"
      ?display    "nil"
    )  
    cdfCreateParam( cdfId
      ?name    "uptoM2"
      ?prompt  "uptoM2"
      ?defValue    "true"
      ?type    "boolean"
      ?display    "nil"
    )
    cdfCreateParam( cdfId
      ?name    "uptoM3"
      ?prompt  "uptoM3"
      ?defValue    "true"
      ?type    "boolean"
      ?display    "nil"
    )
    cdfCreateParam( cdfId
      ?name    "MetalLevel"
      ?type    "radio"
      ?prompt  "MetalLevel"
      ?defValue    "uptoM1t"
      ?choices list("uptoM1t" "uptoM2t" "uptoM3t")
      ?display "t"
      ?callback  "decap_metallevel()"
    )
    cdfSaveCDF(cdfId)
  ); when
); let

Thanks

Rudy

Problem updating OutputStringField

$
0
0

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

$
0
0

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

$
0
0

Hi

I have too many schematic libraries and layout libraries with many cells. I was wondering if I can set up shortcut key to open a particular schematic or layout ?. 

Thanks


How to select shapes overlapped by a text or label ?

$
0
0

Hi All,

How to select shapes such as rectangle in the layout that is overlapped by a label name "vref_1 " or "vref_2" or" vref_3" ?,

by using SKILL and rexMatchp ?

Best regards,

Marben

how to cut an array of rectangles in a big rectangle?

$
0
0

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

$
0
0

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  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

$
0
0

What is the variable for having the tabs on the side of the palette rather than on the bottom?

Paul

Toggle schematic instance, wires, and pins selectable

$
0
0

Is there an env varaible for toggling instances, wires, and pins selectable in a schematic?

Paul

Launching PVS LVS/DRC results browser from a skill file

$
0
0

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

$
0
0

Dear all,

I have numbers of PCell on my layout view, and some of them have markers with warnings, is there a SKILL way to detect such markers?

cv~>markers gives nil

Ideally, I want to find to which cell a marker belongs. 

Best regards,

Vadim


Virtuoso XL Auto Router(routing width input ?)

$
0
0

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

$
0
0

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

$
0
0

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

$
0
0

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

Toggle Annotation Browser nets visibility

$
0
0

Is there a way to find the annotation browser name to toggle with a bindkey the nets visibility?

Ex: _vbAssistantReplay_treeEvent(dwindow('annotationBrowser10) "toggleVisibilityState = 1")

annotationBrowser* changes

Paul

Viewing all 5075 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>