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

Diff between "fig" and "figs"

$
0
0

Hi

I have placed a device in a layout view "try1" 

cv = dbOpenCellViewByType("testAqua" "try1" "layout")

I want to get the device pins layer name, I am using the following skill keywords.
#1 cv~>instances~>master~>terminals~>pins~>fig~>layerName
output: ((("DIFF") ("DIFF") (nil) )
)
I also noticed that there is an extra keyword "figs" which can give all the shapes associated with the corresponding pin.
#2 cv~>instances~>master~>terminals~>pins~>figs~>layerName
output: (((("DIFF" "MET1")) (("DIFF" "MET1")) (nil) )
)
I want to know that how the #1 get the value? What are the changes required to get the output value as
((("MET1") ("MET1") (nil) )


Reverse of dbProduceMemName

$
0
0

Hi,

Is there a function that can create short form bus expression from an expanded expression. Something like a reverse operation of dbProduceMemName

For example, "vdd, nr3<1>,nr3<2>,nr3<3>,nr3<4>, vss" should be returned as "vdd, nr3<1:4>, vss"

Thanks

Ramakrishnan

Skill script to add prefix to existing pins on schematic

$
0
0

Hi all,

I would need to take all the pins placed on an existing schematic and rename them by adding a prefix (or suffix). I navigated throughout the various threads of the forum and tried out several different solutions, but somehow they do not serve my need. I tried to write a script on my own, but I am a newbie on SKILL so it's not so easy...

Can somebody give me a hint on how to do that ?

thanks

Tommaso

Use for loop to create dynamic field in hiCreateAppForm

$
0
0

Hi 

I use for loop to generate same two fields 10 times, so I could change # of two fields easily in the future. Since nameHandle "symmetry1" and "group_instance" or symbol "'instances" and "'symmetry1" are same for two fields (10 times), how could I access the value of 20 fields (10 x 2 fields) in the form callback procedure ? Is it the correct approach ?

I could create 20 fields one by one using different symbol and nameHandle manually, but I don't think it is a good approach for code maintenance. Any suggestion ?  

I saw an article about dynamic field https://community.cadence.com/cadence_technology_forums/f/custom-ic-skill/35948/accessing-dynamic-form-fields  , but I do not know how to use the code in hiCreateAppForm and nameHandle is the same for different symbol name of hiCreateRadioButton.

 

group_instance = hiCreateStringField(
?name 'instances
?prompt "Group instances"
)
symmetry1 = hiCreateRadioField(
?name 'symmetry1
?prompt "Device symmetry"
?choices list("Y" "N")
?value "Y"
?callback "symmetry1CB(hiGetCurrentForm())"
)


allList = nil
startx = 0
starty = 210
width = 600
height = 30

for(i 0 9
finalx = startx
finaly = 210 + (i*height)
finalx_f2 = finalx
finaly_f2 = finaly + height
flist = list(list(group_instance finalx:finaly width:height) list(symmetry1 finalx_f2:finaly_f2 width:height))
allList = append(allList, flist)
)

hiCreateAppForm(
?name 'ExampleForm
?formTitle "example form"
?callback 'ExampleFormCB
?fields allList

..

)

Thanks,

ManChak

Turnoff grid dots in layout view

$
0
0

There is a line in my cdsenv which turn on the layout dots automatically.How to turn it off?

layout dotsOn Boolean nil

pass argument to enterPoints procedure

$
0
0

Hi

How do I pass extra arguments "theForm" and "instances" of CCSbtnFld1CB to addPointProc and doneProc ?  (w done pts) or (w plist) are default argument. The example in SKILL manual does not show the solution.

procedure(CCSbtnFld1CB(theForm instances)
   let( ()

     enterPoints(
     ?prompts list("Click to select instances in the cellview. Press Esc key when done with selections")
    ?addPointProc "CCSAddPtCB"
    ?doneProc "CCSPointsDone"
     );enterPoints
);let
);procedure

procedure( CCSPointsDone( w done pts)
unless( done
   get(ExampleForm instances)->value = buildString(
      setof(obj geGetSelSet()  
      and(obj~>objType=="inst"
      obj~>purpose!="pin"))~>name)
);unless
t
);procedure

procedure( CCSAddPtCB( w ptlist )

geSelectPoint(w car(last(ptlist)))
);procedure

Thanks,

ManChak

How can I change Schematic cross view check severity to ignored with skill?

$
0
0

How can I change Schematic cross view check severity to ignored with skill?

Calculating the std deviation and mean along the y axis on a family of waveform

$
0
0

I have a family of waveform from ADE-XL runing monte carlo simulation with 10 runs plotting the inl of a DAC, the x axis is the code and the y axis is the inl in LSB.

I want to calculate the standard deviation and mean of the inl(along the yaxis) at a particular code(xaxis) and plot it into a single waveform like shown in the figure below. each code has the mean + standard deviation of 10 monte carlo runs

I tried the std function in the calculator but it seems to be taking all the waveforms and calculating the std along the xaxis into a single value, and convert the x axis to the monte carlo run which is not what I want.

Is it possible to use the calculator to calculate what I need? If not, what's an easier approach to plot what I need or if I need to write skill code?

My virtuoso version is IC6.1.7-64b.500.7 

Thanks,


How to create bindkeys that open the descend form with different options

$
0
0

Hi,

In schematic, I am trying to descend in a cell and what I want to do are two things.

First one is to have a bindkey let's "e" and press it to open thedescend form in read mode in current tab. Second one is to have another bindkey let's say Shift+e and press it to open the descend form in edit mode in new tab. I think design descendCanvasType is the way to change where to open but how I can set the open mode: read or edit . I think to comment, I want to still see query window since I want to do this for different views like symbol, schematic and others.

Thanks

yayla

ICADVM18.1

sub-version  19.1.0.292.isr4

Finding overlapping shapes/instances over instances

$
0
0

Hello.

I am in the need to find and mark shapes/instances that are overlapping instances within a cell view in Virtuoso. 

I am using the code below which is taken from Cadence support. The code successfully recognizes instances overlap, but not shapes (polygons, path, pathSegs, etc) that are overlapping instances. I am using ICADVM18.1-64.

Any advice would be greatly appreciated.

Thanks,


Danny

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

procedure(CCScreateOverlapArea(dst src)
let((llAx llBx llAy llBy urAx urBx urAy urBy boxLL boxUR )
                llAx = xCoord( lowerLeft( dst ))
                llBx = xCoord( lowerLeft( src ))
                llAy = yCoord( lowerLeft( dst ))
                llBy = yCoord( lowerLeft( src ))
                urAx = xCoord( upperRight( dst ))
                urBx = xCoord( upperRight( src ))
                urAy = yCoord( upperRight( dst ))
                urBy = yCoord( upperRight( src ))
                boxLL = max( llAx llBx ):max( llAy llBy )
                boxUR = min( urAx urBx ):min( urAy urBy )
                list( boxLL boxUR )
);let
);proc

procedure(CCScheckInstOverlap( @optional (cv geGetEditCellView()))
let(( visited dinstList dbox sbox overlap ignoreCellList)

ignoreCellList=list("abc" "sealring" "mycell")

foreach(sinst cv~>instances
        unless(member(sinst~>cellName ignoreCellList)
        dinstList=dbGetOverlaps(cv dbTransformBBox(sinst~>master~>prBoundary~>bBox list(sinst~>xy sinst~>orient)) nil )
                foreach(dinst dinstList
                        when(dinst~>objType=="inst" && dinst~>name != sinst~>name && !member(dinst~>cellName ignoreCellList) && !member(dinst visited)
                        dbox=dbTransformBBox(dinst~>master~>prBoundary~>bBox list(dinst~>xy dinst~>orient) )
                        sbox=dbTransformBBox(sinst~>master~>prBoundary~>bBox list(sinst~>xy sinst~>orient) )             
                        overlap=CCScreateOverlapArea(dbox sbox)

                        unless(abs(caar(overlap) - caadr(overlap)) < 1e-6 || abs(cadar(overlap) - cadadr(overlap)) < 1e-6
                                dbCreateMarker(cv sprintf(nil "Instance %s overlaps with instance %s" dinst~>name sinst~>name) "CCS"
                                                 list(car(overlap) list(caadr(overlap) cadar(overlap)) cadr(overlap)
                                                 list(caar(overlap) cadadr(overlap))) nil t t "warning" "overlap"
                                                )
                         printf("Instance %s overlaps with instance %s \n" dinst~>name sinst~>name)
                                        )
                                )
                        )
                visited=cons(sinst visited)
                );unless
        );foreach
        t
);let
);proc

Get cursor coordinates from user

$
0
0

Hi, 

Does someone know how I could, during a procedure, prompt the user to click on any two coordinates in layout and then use these coordinates for further processing? 

I have been trying with hiGetCommandPoint() but it is not quite what I need.  

How can design variables be taken into account for optimization in ADE GXL?

$
0
0

In the ADE GXL I can define parameter ranges for transistor parameters such as length, width, number of fingers etc.

What I failed to find, is how I can also make the optimizer vary DC voltages (such as cascode bias voltages for instance).

According to an 8 year old question (https://community.cadence.com/cadence_technology_forums/f/custom-ic-skill/22673/optimization-in-ade-gxl) this should  be possible, but it is not described how it can be achieved.

How can design variables be taken into account for optimization in ADE GXL?

Cadence Auto Route Issue

$
0
0

Hi,

I am trying to use cadence auto-route feature in a simple layout.

I generated the pins and devices using "GenFromSource", then when I go to "Route -> Automatic Routing -> All Nets",  It runs for 2 sec and ends up with below  error.

**************************************************************
* *
* Begin Min-Spanning-Tree Routing Flow for Normal Nets *
* *
**************************************************************
REPORTING_STATS | Elapsed Time: 0.0 Secs | Mem: "Current: 2815.00" Mb | Cmd: initialize_partition -set sel:4e73b690
[::iaAutoRoute::INFO] Number of inaccessible terms reported by routability checker: 3
[::iaAutoRoute::INFO] Number of nets to be excluded for routing: 3
[::iaAutoRoute::INFO] Number of terms to be excluded for routing: 0
*WARNING* Command wrongway_pin_escape requires application feature Router only that cannot be licensed.
*WARNING* TCL error: ERROR - no further information available.
nil

Can anyone help to understand the issue ? I am doing this in Layout-XL.

Thanks In Advance,

Amar

How to change the User title in Viva

$
0
0

Hi,

I want to change user title for the graphs in Viva. It is shown as x-axis vs y-axis as below. I want the other way around. I am suspecting to use "viva.graphFrame title string" but don't what to put as variable to correct the issue. It would be nice to know if there is a variable for the location of User title. I want to move it to a little center.

Also, is there a way to learn the assigned values for the environment variables? For instance, what is the assigned value for env variable ""viva.graphFrame title"?

thanks

yayla

Changing ADEXL output Spec depending on a Sweep variable

$
0
0

Hi,

Is there a way to create a spec for an output expression in ADEXL depending on a sweep variable? Let's say I want to sweep an input tone for IIP3 measurement and for each input level, I have a different spec. If there is a way to use  "case" statement in spec, that would be great since that seems to be easiest and elegant solution.

Thanks

yayla


SKILL Lists

$
0
0

Hi, 

List_Original=

(

((x1, y1) (x2 y2))

((x3 y3) (x4 y4))

((x5 y5) (x6 y6))

...

)

List_Original is a list of coordinates. 

I want to copy this list and make changes to the new copy(say, List_A) while preserving List_Original. The change what i want to do is +/- the y-coordinates by 0.5, I do it as follows:

List_A=nil

List_A=List_Original

foreach(val List_A

a=cadr(nth(0 val)) + 0.5

b=cadr(nth(1 val)) - 0.5

cadr(nth(0 val))=a

cadr(nth(1 val))=b

)

Now the problem coming is List_A is not getting updated and is remaining same as List_Original. Why is that? I am not getting any error or warning in code.

I even checked the variables "a" and "b" and they are getting updated as I wanted, but List_A is not getting updated and is the same as List_Original.

Please tell me what am i doing wrong?

Regards,

Leo

User Triggers for Layout L and Layout XL using deRegUserTriggers Command !!

$
0
0

Hello Everyone,

I need your help regarding understanding of user triggers for Layout L & Layout XL using deRegUserTriggers Command .

Currently i am duplicating this command in my code to have same user triggers for layout Menu in Layout L & Layout Xl . Is it the correct way to do it  ? Can we trigger it for both Layout L & Layout Xl using a single Command?

I am not facing any issue as per now but just to now what is is the correct way to do it .

For Example - 

deRegUserTriggers("maskLayoutXL" nil 'DuvToolKitMenuInLayout)

deRegUserTriggers("maskLayout" nil 'DuvToolKitMenuInLayout)

Regards

Sonu 

Have corners' sweep and temperature sweep corners be auto-populated in maestro.

$
0
0

Hello all.

Let us say that I have a set of corners, for functionality.

I want to have a group of them already set (although by default disabled, and only the typical corner run), so that the user can just select them, for running process corners and voltage.

It would be best if this is something that the user cannot easily edit, like the default corner in maestro now.

I could not find a way to have this setup, so that each new Maetsro view will have this auto-populated.

Thanks.

Replacing characters in a string

$
0
0

I have a layout with instance names that use the underscore as the array delimiters.  For example, instance names such as IDQ_7_.  I want to use SKILL to change the delimiters from underscore to parentheses, changing my example to IDQ(7).  In this specific situation, the following section of code works just fine:

while( rexMatchp( "_[0-9]_" Name )

     rexCompile( "_" )

     Name = rexReplace( Name "(" 1 )

     rexCompile( "_" )

     Name = rexReplace( Name ")" 1 )

)

item~>baseName = Name

My problem is that I also have instance names similar to xofiller_fill15m2_1_.  My above code example will result in the variable Name having a value of xofiller(fill15m2)1_.  This is obviously incorrect, what I want is xofiller_fill15m2(1) instead.  

First, how do I modify my code to change the underscores that surround only a number, while leaving all other underscores alone?

Second, I would just like verification that my "while rexMatchp" line would work on all numbers, not just those with a single digit.  I am still working on the underscore issue, haven't even tried to see if it would catch "_32_" yet.

Rotate instance by 45 degree

$
0
0

Dear all,

How could I rotate a instance by 45 degree?

It seems there is no way to do this.

Any comment is much appreciated.

Thank you very much !!

Will

Viewing all 5066 articles
Browse latest View live


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