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

What am i doing wrong?

$
0
0

If i do

shapes=geGetSelSet()~>layerName

i get all the selected layer names. And if my output is something like

("m0" "m0" "m0" "m0" "m1" "m1" "m2" "m2" "m0" "m2")

how do i get only the list of "m0" ?


Net list creation error

$
0
0

Hello,

An old solution has been posted to running into an error when simulating a schematic created in IC6.1 using specter simulator. 

When I added IC6.1 library (I'm using virtuoso 6.17 version) and other directories and ran the spectre simulation, I got Netlist Error:  

Could not find netlist procedure:ABbnNetlistProc instance "M1" in cell-view "Ch31_IC61" "Fig20_47" "schematic"

As a solution, this code was posted. Where should I place it?

defun(ABbnNetlistProc (inst)

    let((formatter netlister bulk sigs)

        ;----------------------------------------------------------------

        ; Get hold of the formatter and netlister objects

        ;----------------------------------------------------------------

        formatter=nlGetFormatter(inst)

        netlister=nlGetNetlister(formatter)

        nlPrintInstComments(formatter inst)

        nlPrintIndentString(netlister)

        nlPrintInstName(formatter inst)

        ;----------------------------------------------------------------

        ; Print the standard signals. Can't use nlPrintInstSignals

        ; because the parentheses would be around the terminals in

        ; the termOrder, and not include the bulk node

        ;----------------------------------------------------------------

        sigs=nlGetSignalList(inst)

        nlPrintString(netlister " (" car(sigs))

        foreach(sig cdr(sigs)

            nlPrintString(netlister " " sig)

        ) ; foreach

        ;----------------------------------------------------------------

        ; Get the bn parameter and output that as the connection, if

        ; it is set

        ;----------------------------------------------------------------

        bulk=nlGetParamStringValue(inst "bn")

        when(member(bulk '("D" "G" "S"))

            bulk=nlGetTerminalSignalName(inst bulk)

            )

        when(bulk

            nlPrintString(netlister " " bulk)

            )

        ;----------------------------------------------------------------

        ; Write out the close parenthesis, now that the bulk is written

        ;----------------------------------------------------------------

        nlPrintString(netlister ")")

        nlPrintModelName(formatter inst)

        nlPrintInstParameters(formatter inst)

        )

    )

Is there a way of accessing the full net name of a net object in a hierarchical design?

$
0
0

Is there a way of accessing the full net name of a net object in a hierarchical design?

Example

A schematic contains two instances of the same object, called I0 and I1, which have internal nets of "in" and "out", like in the image below.

If I want to plot the voltages associated with the nets I need to use the full net names of "/I0/in" and "/I1/in".

Is there a way to find the full net names from the instances' database objects?

I can traverse the hierarchy and find the database objects for I0 and I1 but the net and signal objects connected to their terminals will just be listed as "in" and "out", which can't be directly plotted.

An alternative question for the same issue would be: are there any functions for directly plotting signal objects rather than needing their associated net names?

If I have the instance object and the signal object associated with one of its nets, is there a way to just plot the signal directly?

Functions like vtime require strings of the net names and can't use database objects.

Via droping

$
0
0

Hai,

I'm a newbie in the skill scripting and I need some help for developing a script for dropping a via where two same nets cross and also need to drop the via based on drc's.

Thanks,

Rakesh K

ciwCreatePulldown

$
0
0

Hi,

I'm using ciwCreatePulldown function to create menu as per  <install_dir>/tools/dfII/etc/tools/menus/layEdit.menus. The documentation for ciwCreatePulldown mentions that this is only for application support. Will this function be available in future virtuoso release also?

Are there any other better way of creating menus?

Thanks

Ramakrishnan

Scheme reduce or fold in Skill

$
0
0

I know Skill implements common Scheme functions like map() (as mapcar) and filter() (as setof).

Is there a Skill equivalent of Scheme's reduce-left(), reduce-right(), fold-left(), or fold-right()?

I searched the docs and the community, but I couldn't find anyone else asking this question.

adding Layersets to bindkeys

$
0
0

I love layersets.  I have unique layersets for vias (ie "via1" = m1 (draw, pin, fill), via1, & m2 (draw, pin, fill)), "base" layers, all "fill", all "pins", etc. 

I would like to be able to map and toggle them with bindkeys (or get some skill code where I could have the same functionality), as well as set the active layer for each - this would increase my productivity dramatically, imho.

Here is some code that Rupinder sent me a couple years ago (i had some time-off), but I am not certain how to implement it to get it working:

procedure( setActiveLayerAndLayerSetVisibility( metalLayer visible)

                let( (layer)

                                sprintf( layer "m%d drawing" metalLayer)

                                sprintf( layerSet "v%d" metalLayer )

                                pteSetLSVisible("All Layers" nil)

                                pteSetLSActive(?layerSets layerSet ?deactivateOthers t)

                                pteSetLSVisible(layerSet visible)

                                ;uncomment the following lines if you want this function to set active layer and start wire command

                                ;pteSetActiveLpp( layer )

                                ;leHiCreateWire()

                ) ;let

) ;procedure

Then you can add bindkeys to call the above function and pass different numbers and visibility status. For example, to activate layerSet v2, pass number 2 and t as arguments to the function call. “t” means the visibility of layers is on. “nil” means visibility is off.

hiSetBindKey "Layout" "<key>2" "setActiveLayerAndLayerSetVisibility( 2 t )"

hiSetBindKey "Layout" "<ctrl>2" "setActiveLayerAndLayerSetVisibility( 2 nil )"

Similarly, you can assign bindkey 3 to set v3 as active layerSet.

My first question is about the "%" - is this a generic string?  If so, how would this procedure include fill and pins for both metal layers associated with, for example, via1 (m1 &m2)?

Also, what does the "?" do? Lastly, would the same procedure work for "all pins", "all fill", and "all base layers?"

Thank you in advance to anyone interested in this topic!

London

Frequently used functions in toolbar or menubar

$
0
0

Hi,

I keep getting request from my team asking for addition of a function to a menubar or toolbar citing that it was heavily used. And I would get another function request from another person. So I am wondering if there is any possibility to have a toolbar or menubar which can lists some of the frequently used functions dynamically. I say dynamic meaning, this can change from person to person.

So looking for any of the following

1. In built cadence feature to activate this if available.

2. A script which can read the CDSLOG and prepare a toolbar or a menu file. (Obviously have to filter few navigation functions like scroll, zoom, etc...)

I just want to open up the discussion here which can give me some direction. Any help here is appreciated.

Thanks

Ramakrishnan 


Is there a command that executes a string?

$
0
0

Say I made a string that evaluated to some skill code - is there a command that will execute it? I guess this would behave similarly to pasting some text into the CIW.

Skill code to read instance and transistors from netlist

$
0
0

Hi,

I am writing a skill code to read the corner and temperature simulation results from adexl in skill and then do post processing and identify which transistors are out of saturation.

I know we can do it via Circuit Conditions but that is too much work for 20 corner and temperature simulations.

My output should look like

Process  |  Temperature |  OutOfSaturation

sf            |    -25              |    I26/MN21

fs            |     85              |    I33/MP22

You can also tell me if there is adexl database function that can do it easily

Regards

Ralph

How to pass a value from a procedure to another?

$
0
0

Hi everybody,

I'm trying to make a skill that renames all the selected objects in the layout with a value that I insert in the form and merging it with a counter.

For example: If I have 30 copied resistors (I1, I2,I3,..., I30), I want to rename them R0.1, R0.2, ..., R0.30 .

At first try I made a single procedure that creates the form and renames. That seemed to work correctly but, if I press the button "cancel" in the form, the procedure continues and renames all the selected objects with the value of the counter (1,2,3...,30).

So I decided to make two procedure, one for the creation of the form and another for the execution of the renaming.

There is only one problem I can't really figure out: how can I pass the name, that I wrote in the form, to the procedure of execution?  

Hope someone can help me.

Bye bye :)

Here it is my form:

/*CREATE FORM*/
procedure( change()
let((myform changeName)        


/*CHECK LAYOUT VIEW*/

if( (geGetEditCellView()~>cellViewType != "maskLayout")
 then hiDisplayAppDBox(
   ?name 'errorbox2
   ?dboxBanner "Errore"
   ?dboxText sprintf( nil "La procedura funziona solo con Layout Window")
   ?dialogType hicErrorDialog
   ?buttonLayout 'Close  
   ?dialogStyle 'modal
   )
 )
  


changeName=hiCreateStringField(
                ?name 'changeName
                ?prompt "Inserire nome"            
  ?defValue ""
  ?editable t
  ;?callback "esec()"
    )

 
 hiCreateAppForm(
            ?name 'myform
            ?formTitle "Change Instance Name"
           ?fields list( changeName )
     ?callback "exec(changeName~>value)"
  )




hiDisplayForm(myform)


)
)


/*EXECUTION RENAMING*/

procedure( exec()
let( (changeName nome num)

nome = changeName~>value

if( (rexMatchp("symbol" buildString(geGetSelSet()~>viewName)) == nil) && (rexMatchp("lay" buildString(geGetSelSet()~>viewName)) == t)
  then for(i 1 geGetSelSetCount()
 
   sprintf(num "%d" i)
   geGetSelSet()~>name = strcat(nome num)
   geSelectNextInSelSet()
  
 )
 )

)
)

skill code to generate OA abstract from layout

$
0
0

Hi All,

I need to generate abstract for a whole lib layout cell.  it would be better if I can generate them using skill code. 

Does anyone know this kind of skill code available ? 

thanks a lot 

Nhumai 

PCB Editor Database Attachment xml form.

$
0
0

Hi all,  can you help me, I want to export attachment like "Color Layer" using axlCreateAttachment but the file i want to use is in xml. I tried some solutions but it doesnt work. Does annybody know how to do it?

Im using Allegro PCB editor.

To know whether LEF Pins location moved or not

$
0
0

Hi,

In top level of layout LEF pins are there right. We already fixed those & I want to know whether each PIN is aligned correctly or not same as in previous LEF.

Can you tell me how to develop the program for this one

Thanks & Regards,

Bala

Change defaults of Qt-subapplication form

$
0
0

Hi all,

I would like to re-define the defaults of the Qt-subapplication when printing waveforms to file. The manual indicates that these defaults are controlled by the LC_ALL environment variable, but I can't find any reference on how to set this variable to do what I want. Especifically, this is how the form looks now:

How do I make it use a custom size defined by me with a landscape orientation and different margins by default? It's pretty annoying and time consuming to have to change the aspect ratio of the waveforms every single time I need to print a file.

Regards,

Lewis


Changing a cell's cdf parameter via skill code

$
0
0

I've spent a daft amount of time trying to figure this out so I'm bailing out and asking here.

I have a cell that has a cdf parameter that is displayed on a symbol via an NLP label e.g. [@myParam].
I also have an ilLabel on that symbol, e.g. myProc(), which is a skill procedure within which the myParam cdf parameter is modified. However, I'm having trouble with the changed value of myParam reflecting itself on the symbol's NLP label [@myParam] - even after manual redraws.

Within the skill procedure myProc(), I know I have the right pointer to the current cell instance and I've tried things like:

ilInst~>myPar = "blah"
cdfgData->par1Name->value = "blah"

The first method works but it breaks the Property Editor window (in the bottom left of the Schematic Editor Window). For example I can no longer click on anything in that window or the contents of that window just disappears when I click in it, or some other darn manifestation of hurt.

The 2nd method works in that I can change the value and read it back (in the CIW), but nothing about that updates the NLP label on the symbol - even after a manual redraw.

Anyway, I hope I haven't confused you too much.
I want to change the value of a cdf parameter (myParam) in a skill procedure and see my schematic symbol (which contains an NLP label [@myParam]) update its cells to reflect the changed myParam.

Is it possible to use rodFillBBoxWithRects with elementsX or elementsY similar to rodCreateRect

$
0
0

Hi All,

    I would like to fill BBox with contacts and need to create rows or columns of the same fillBBox. "rodFillBBoxWithRects " will do the filling of contacts in the specified fillBBox but there is no feature like elementsX,elementsY,spaceX,spaceY (spacing between them) etc. similar to rodCreateRect.

1) One way that I have tried to create fillBBox and use it as a mosaic with elementsX,elementsY,spaceX,spaceY.

2) rodCreateRect with ?subRectArray option, But it leads to more calculations for width, length and spacings

Is there any easy way to do the same?

abIPar.il issue of geGetTopLevelCellView() returning nil

$
0
0

hello experts,

happened to notice the code Andrew made in community.cadence.com/.../1323814

we use this abIPar procedure to collect info from cdf parameters and display them in schematic/symbol. that's all working fine until I have ade session and when I click "run" in ade, all these display procedure go "nil" which traced down to this geGetTopLevelCellView() returning nil. once I do a re-draw then all the display come back to normal life again. 

so wonder why would geGetTopLevelCellView() fail in such occasion? 

P.S., both IC6.1.7-64b.500.21 and IC6.1.7-64b.500.9 have this problem. 

thanks,

David

Finding out if a net is a bus, if so find total number of signals

$
0
0

I.e. foreach(net cellView~>nets 

    ; check if net is a bus, and the total number of signals/iterations

)

I've also tried regex to parse the name to find out, but I'm having trouble with capture groups. I could not find any functions in the pcre regex suite to do the following:

E.g.  I have a string: "<*123>A_signal"

I want to use a regex expression "<\\*([0-9]+)>(.*)" 

In between the round brackets '()' I wish to capture the values, in this case it is "123" and "A_signal". 

Any help is appreciated!

Finding all instances connected to net and pin names

$
0
0

Hello, I wish to find all instances which connect to a net/pin name. What I've tried so far:

valid_nets=dbFindNetByName(cv pin_name)

valid_terms=dbFindTermByName(cv pin_name)

CurrTerm=nil

if(valid_nets&&valid_terms then

  CurrTerm = append( valid_nets~>instTerms valid_terms~>nets->instTerms )

else

if( valid_terms then

  CurrTerm = valid_terms~>nets->instTerms

) if( valid_nets then

  CurrTerm = valid_nets->instTerms

)

)

However this does not get me all the cell instances in my current view... (missing certain instances as well as duplicate cellviews) as well, I need to get the name of the connected net from the current instance into the found instance(external net name to internal net name).

Thanks

Viewing all 5084 articles
Browse latest View live


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