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

Make local procedures to use in pcell code

$
0
0

I want to make local SKILL procedures, so they can be used inside pcell code.

I have made some custom Pcells, that use a set of custom procedures. Is there a way to easily embed these procedures inside the pcell code, so that they can still be used by calling the procedure with it's arguments, but that they only exist inside the Pcell?


Help with rdbWriteToFormat

$
0
0

Hello!

I am trying to use the command rdbWriteToFormat to save my output data and later use in matlab. But when I run the script it does not create the file and I am not sure why.

This is my script

simulator( 'spectre )
design( "/home/ponth428/simulation/DAC_TB/spectre/schematic/netlist/netlist")
resultsDir( "/home/ponth428/simulation/DAC_TB/spectre/schematic" )
modelFile( 
'("/sw/cadence/libraries/gpdk180_v3.3/models/spectre/gpdk.scs" "stat")
)
analysis('tran ?stop "$tstop" ?errpreset "conservative" )
desVar( "fclk" 1G )
desVar( "fsin" 0.5M )
desVar( "vdd" 1 )
desVar( "vss" 0 )
desVar( "tstop" "2/fsin" )
envOption(
'analysisOrder list("tran") 
)
temp( 27 ) 
run()
selectResult( 'tran )
plot(getData("/clk") getData("/sin") getData("/out") )
rdbWriteToFormat( "unbound" "/home/ponth428/output.vcsv" "VCSV" '(("/home/ponth428/simulation/DAC_TB/spectre/schematic/psf" (("tran" ("/out"))))))

Change Label Purpose from Drawing to Pin

$
0
0

Hi,

I have generated a layout using Innovus. Once I transfer it into Virtuoso, all the labels that are created have the Purpose of "drawing." In order for the Calibre LVS to pass, these labels need to have the Purpose of "pin." For large designs, I would like to avoid manually changing each label and was wondering if there are any SKILL scripts that I can reference to change each label Purpose from "drawing" to "pin." Hopefully, this question has not been asked before. 

Regards.

How to identify on which procedure call a warning message have been generated?

$
0
0

Hi there,

In some skill code to process simulation results I get few warnings like below.

WARNING (OCN-6038): Results variables are not available for /path/to/.../dir. Use results() for a list of available results.

Because there are many lines of code (written by multiple users)  I couldn't identify what line generates it.

Did some search/grep for selectResult() and pv(... ?result ...) calls but none of them is using "variables" results.

Any idea about how to identify the procedure(stacktrace) that generates the message? 

Any other skill/ocean procedures that may directly access "variables" result?

The only idea that I have now is to do some debug printing in various places in the code.

Thank you,

Marcel

LSW windows cannot edited like locked

$
0
0

Recently, when doing my layout, the LSW window often cannot be edited, no matter using mouse scrolling or keyboard, only reboot the CIW (IC614) can make it work.

Dose anyone know how to solve this problem? Thanks.  

*Error* loadContext: could not open pdkutils.cxt in virtousu (6.17-64bit)

$
0
0

Hello
I have tsmc13rf pdk .I add it into virtousu (6.16-32bit) without problem but I want to use virtousu (6.17-64bit) when I add this pdk into 6.17
I receive this error in icw =
*Error* loadContext: could not open file "/home/disk/simulation/TSMC130_PDK/tsmc13rf/../skill/64bit/pdkUtils.cxt"
there isn't any 64bit folder in skill library
is there any way to convert skill for virtousu 6.17-64bit
Can this error message be ignored?

I just created an object and need to get that database ID to use in the next command

$
0
0

Another seemly simple request that I cannot find the easy solution

1. I create a path : leCreatePath(...info...) and it returns a database ID

2. I need to get that ID to use in my next command but don't see how.

You would think that ID is stored in a stack or something.

I could always get it out of the CDS.log file but that seems ridiculous 

-Mike

passing the useterms=name option to spectre trough an ocean script

$
0
0

Hi all,

I have the following problem. I want to run my simulations via an ocean script and want to read some currents for some subcircuits out of the psf file later. This all works in principle. The only problem I have is that the currents of subcircuits are stored by pin order rather than pin name by default. I know that I need to change the save option "useterms=name" to get the wanted result. However the ocean function: saveOptions() does not support the 'useterms option. What to do now?

Thanks for your help 


hiCreateDisclosureTriangle bold fonts

$
0
0

Hello,

Is it possible to set a bold font type for text in "hiCreateDisclosureTriangle", like in "OBJECTS" and "GROUPS" of the attached image?

Thank you

Aldo

How to add pin to end of a wire

$
0
0

In schematic, there is a wire with net name of "net01". One end of the wire connects to an instance and the other end of the wire is floating. I'd like to add a pin with same net name "net01" on the floating end of the wire. What I want like this: select the wire first, then run a skill, and the skill will add a pin named "net01" on the floating end of the wire. How to realize this with a skill script?

BR,

Martin

How to add design variables every time a new maestro view is created in Explorer/Assembler?

$
0
0

Hello everyone,

I am trying to automatically add some global variables and design variables when a new maestro view is created. It was quite easy to do it with ADE L using "asimenv.designVarSetting", however I could not find a straightforward method for maestro views. 

I used a solution suggested by Andrew in another post. I used "createdTest"  trigger to add the design variables after a new test is created. Here is the SKILL code;

procedure(CCFaddTestCreatedTrigger(sessionName)
  axlSessionConnect(sessionName "createdTest" 'CCFtestCreatedTrigger)
)

procedure(CCFregCreatedTestTrigger()
  axlSessionRegisterCreationCallback('CCFaddTestCreatedTrigger)
)

procedure(CCFtestCreatedTrigger(sessionName testName)
  printf("> ADE Window Session %L is loaded\n> Test %L is created\n" sessionName list(testName))
  maeSetVar("myvar" "1" ?session sessionName) ; Add Global Variable
  maeSetVar("myvar" "1" ?session sessionName ?typeName "test" ?typeValue list(testName)) ; Add Local Variable to Created Test
)

The problem here is that the global variable is added but the design variable is not under the new created test.

I tried adding the design variable after the maestro view is created and loaded by running the following code in CIW;

sessionName=axlGetWindowSession()
openedTests = maeGetSetup(?session sessionName)
maeSetVar("myvar" "1" ?session sessionName ?typeName "test" ?typeValue openedTests)

and this method adds the design variable.

What am I missing here? Is there any better way to automatically add some global variables and/or design variables when a new maestro view is created?

Kind regards,

Naci

finding grey colored(uncolred) metals/vias in layout

$
0
0

Hi,

Can somebody share me a script to find all uncolored(grey color) metals/vias in layout for latest technology nodes.

same can be done through violation check under multipatterning tool bar. But is taking more time for bigger layouts.

So can some please help me.

Thanks in Advance.

Running Cadence in the background of the server and successfully reconnect it after network stops

$
0
0

Dear all,

I came across a tricky situation when running the graphical interface of Cadence at the server's background and would like to ask help here.

I want to perform MC simulation on my design, which is very time consuming and hence I want the Cadence to run in the background.

I used screen session that runs Cadence. Then I detached the session and closes the Cadence graphical Interface.

However, when I re-attached the screen session again, I got the following error:

Cadence IC 6.1.6-64b.500.8 (2015) Startup: Loading 180nm CMOS 9M/2P Generic PDK.
IO Error 11 (Resource temporarily unavailable) on Display "localhost:11.0"
Aborting due to fatal X IO error.
Abort
Could anyone please kindly explain what happened in this situation. Is it because of server error or something else?
If anyone could kindly give an alternative way of running Cadence's simulation in the background, I would appreciate!
Thank you very much!
Mingqiang

Qualifying arguments in SKILL++ methods, do not accept children.

$
0
0

Hello all.

Let's say that I define a method.

The method does have the ability to qualify the arguments' class, when defining the argument.

However, any child of the class would pass too.

Is there a way, in the definition of the arguments, to qualify just the class, and not its' children?

Thanks.

Update Pcell parameter with skill

$
0
0

I need to update a pcell parameter in a layout; specifically the pcell revision parameter. I would like to open the layout and update all the instances from the process library to the latest revision.  I have included the following code that seems to work but I wanted to ask if there is a safer way to update this parameter and also if there is anything I'm omitting in the update process that may be a problem.  I know that different pcell revisions have new layers/parameters that are added and I'm thinking there might be another step I'm missing. Note: this code assumes that the defValue param is the latest rev.

procedure( updatePcellRevs( lib cell view pLib)
    let ( cv targetObjs paramIQ )
        cv=dbOpenCellViewByType( lib cell view "" "a")
        targetObjs=setof(x cv~>instances x~>libName==pLib)
        if( targetObjs then
            foreach( inst targetObjs
                if( paramIQ=cdfFindParamByName(cdfGetInstCDF(inst),"pcellRev") then
                    if( paramIQ~>value==paramIQ~>defValue then
                        printf("No update needed.\n" nil )
                    else
                        if( cdfUpdateInstSingleParam(inst,paramIQ) then
                            printf("Changing \"%s\": %s --> %s\n" paramIQ~>prompt paramIQ~>paramIQ~>value paraIQ~>defValue )
                        else
                            printf("ERROR --> Parameter update failed!\n" nil )
                        ); close if
                    ); close if
                ); close if
            ); close foreach
        ); close if
        dbSave(cv)
        dbClose(cv)
    ); close let
); close procedure


How to get the skill function about creating a new pcell

$
0
0

Recently,I need to create the pcell using skill in virtuoso.

I want to know where I can understand these function,eg:dbOpenCellViewByType,dbCreateParamInst.

I have queried many docments,eg:SKILL Language Usere Guide,SKILL Language Reference.but its useless.

I also try to open 'the skill finder' from virtuoso,but its no response,maybe my cadence is not intact. 

And,I find that maybe the doc 'Design Framework II  SKILL Functions' is useful for me.But i don't find it.

Thanks for your help.

Help on the use of hiCreateBooleanButton( ) function

$
0
0

Hello everyone:

   In   IC618.  I am having trouble making a skill tool menu。

When creating a button using the hiCreateBooleanButton() function,

When Guard Ring is selected, the following two items can be edited,As shown below:

When the Guard Ring is cancelled, the following two items cannot be edited,As shown below:

I know I need to modify the ?editable value, but I don't know how to connect them.

Code:

procedure(rkMatchForm()
      let((guard_ring button_ring space_left matchForm)
            button_ring = hiCreateBooleanButton(
                     ?name            'button_ring
                     ?buttonText    "Guard Ring"
                     ?defValue       t
                     ?callback        nil
                     ?buttonLocation    'left
                                                            );end button_ring
     guard_ring = hiCreateCyclicField(
                     ?name           'guard_ring
                     ?choices        mpp_list
                     ?defValue       "ntap"
                     ?prompt         "MPP Template:"
                     ?enabled        t
                     ?callback        nil
                                                          );end guard_ring
      space_left = hiCreateFloatField(
                     ?name           'space_left
                     ?prompt         "Left Spacing"
                     ?defValue      1.0
                     ?editable        t
                     ?callback       nil
                                                         );end space_left
      matchForm = hiCreateAppForm(
                     ?name             'matchForm
                     ?formTitle        "Match Options"
                     ?initialSize        t
                     ?callback         nil
                     ?fields list(
                                       list(button_ring 20:20 160:25 20)
                                       list(guard_ring 20:50 200:25 100)
                                       list(space_left 20:80 200:25 100)
                                     );end list
      ?unmapAfterCB t );end matchForm
      hiDisplayForm(matchForm)
      );end let
);end procedure

Thanks everyone

Jen

How to make the pcell parameters visible upon placement of cellview

$
0
0

I am learning pcell creation , so I started out with this basic structure, a metal resistor.

problem : when the pcell is FIRST placed into a layout cell , the parameters for "metalLayer" and "squareSize"

I can address them and change them with css()~>metalLayer = some layer,  or,  css()~>squareSize = something.

If after they are first placed, I type in CIW :  css()~>metalLayer <ret> the value returned is nil.

I cannot query the value of the parameter.  Not until I type something like , 

if(!css()~>metalLayer then css()~>metalLayer="metal2" )

Why is that and how can I make visible the parameter value as soon as the instance is placed ?? 

(current cadence version 18 )

TIA.   Malcolm

-------------------------------------------------------

pcDefinePCell(

   ;  Identify the target cellview.

   list(ddGetObj("myPcellLib") "metalResistor" "pcell")

 

   ;  Define formal parameter name-value pairs.

   (

     (metalLayer "metal1")

     (squareSize 2)

   )

 

   ;  Define the contents of this cellview.

   let(()

 

   rodCreateRect(

       ?layer list(metalLayer "resistor")

       ?width squareSize

       ?length squareSize

       ?origin list(-squareSize*0.5 -squareSize*0.5)

 

    ) ; close LET

) ; close pcDefinePcell

editing pcell parameter values, having type mismatch

$
0
0

Hi Cadence -

I created a new pcell and gave it 5 parameter values.  ( param1 thru param5 )

I thought it was going to be easy to feed a new value to the pcell with replaceable text string where I concatenate a string

with a count number:

myPcell = car(selectedSet() ) 

count=1

while(count< 6

    myPcell~>concat("param" count) = newValue

   count = count +1 )

When I do this I get a *error* getsgq: arguement 2 should be a string or symbol

I've also tried myPcell~>strcat("param" count)   and gotten a similar error.

How can I address the parameter name with replaceable variable names ; is this possible ?

thanks.

SKILL CODE TO CONNECT TWO SELECTED METALS NET

$
0
0

Hello,

I am trying to connect two metal nets (objType~>path).

if both metal net layers are same then simply align nets abutted.

if nets have different metal layers then check if metals layers can be connected using VIA .

eg if metals layers are M1 and M2 then connect using VIA1 taking via's  min.  width and min. enclosure by metal from techfile, 

Viewing all 5094 articles
Browse latest View live