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

Creating PCells with rounded shapes

$
0
0

Hello,

I'm trying to create a PCell with rounded or curved shapes.  I know how to create rectangles and polygons using the rodCreateRect() and rodCreatePolygon() methods, but I wanted to know if there is an easier way to create a ROD object with curves, instead of using rodCreatePolygon() with a list of dozens or hundreds of points. 

Thanks,

Miguel 


skill script return wrong value for floating-point data, failed at if condition statement

$
0
0

version IC 6.1.7-64b.500.23

I had a skill script created some time ago and it works, but starting with this version above, i find the ade-xl windows doesn't show the value any more.

After some debugging, I find the root cause is floating-point value. %g doesn't show the floating point value anymore, but something like an address is returend. When I try to compare the address with 0 in the if statement, the if statement will give me an error.

Below is the test script defined. The line of printf will shows the returned value if proper x waveforms are given, I expect to have a floating point number returned as the average of the waveform, however, an address of 

"avg_x=srrWave:0x3bb0a780" was returned to the CIW windows. Un-comment the three lines I mentioned will results in an error for the if statement.

"

expression evaluation failed: val is not legal.
expression evaluation failed: MYrms(IT("/R10/PLUS") )
("greaterp" 0 t nil ("*Error* greaterp: can't handle (srrWave:0x3bb0a7a0 > 0)"))

"

skill script is defined below

procedure(MYrms(x)
poport=stdout
printf("enter procedure\n")
printf("avg_x=%g \n",average(x))
;;un-comment the below three lines to re-run and have the error
; if((average(x) > 0) then
; printf("%g \n",average(x))
; )
rms(x - average(x))
)

quotation mark replacement with pcreReplace?

$
0
0

Hi,

I am trying to get outputs from ocean using  outputs() function into a list from a post layout simulation(netlist is dspf file). The format of outputs() is sth like this: /VCO/VCO_CORE/CAPBANK[0]/MMN0:G

To be able to plot these with ocean, I need to convert them to below format:

v("VCO.VCO_CORE\\/CAPBANK\\[0\\]\\/MMN0\\:G)

In other words, I need to use double escape character before "/ [ ] : " characters. We can assume VCO section is common for all saved nets so /VCO/ => VCO. is not much an issue. Also I was able to change [ ] : and / with pcreCompile and pcreReplace but I couldn't figure out how to add quotation mark after v(

To add double backslach before : [ ]/ , I have below

comPat2 = pcreCompile("[:/\\[\\]]")

pcreReplace(comPat1 "/VCO/VCO_CORE/CAPBANK[0]/MMN0:G" "\\\\&" 0)

The question is how I can replace quotation mark in pcreReplace such that /VCO/ becomes v("VCO?

Thanks

yayla

Version Info:

ICADV12.3 64b 500.21

spectre -W =>

Tool 'cadenceMMSIM' Current project version '16.10.479'
sub-version  16.1.0.479.isr9

moveOrigin does not work

$
0
0

I've tried making the origin of the rectangle stretchable by giving 't' to ?moveOrigin in the function rodAssignHandleToParameter but I failed. I succeeded in creating the rectangle and making it stretchable but I can not move the origin of the rectangle. Can anyone tell me why?

Here is my code:

pcDefinePcell(

     list(ddGetObj( "test_lib") "test_pcell" "layout")

     (Metal_W  0.23)

     (Metal_L    0.6)

     (Met1     "METAL1")

     let(()

       Metal=rodCreateRect(

          ?layer   Met1

         ?width   Metal_W

         ?length  Metal_L

       )

      rodAssignHandleToParameter(

          ?Parameter "Metal_L"

          ?rodObj   Metal

          ?handleName list("upperCenter" "lowerCenter")

          ?displayName "Metal_L"

          ?stretchDir "y"

          ?stretchType "relative"

          ?moveOrigin t

          ?updateIncrement    0.005

      )

  )

)

Regards

John

Toggle in schematic view 'Dynamic Net Highlighting' between On and Off using bindkey

$
0
0

Hi all,

In a schematic view, I would like to toggle 'Dynamic Net Highlighting' between On and Off.

When I set only the envSetVal, it does not work. 

The only way I found is to call schHiDisplayOptions() and make a hiFormDone(schDisplayOptionsForm) :

if( envGetVal("schematic" "schDynamicNetHilightOn" 'boolean) then
envSetVal("schematic" "schDynamicHilightOn" 'boolean t)
envSetVal("schematic" "schDynamicNetHilightOn" 'boolean nil)
envSetVal("schematic" "schDynamicNetHilightNoIslands" 'boolean nil)
print("Disable Dynamic Net Highlighting")
else
envSetVal("schematic" "schDynamicHilightOn" 'boolean t)
envSetVal("schematic" "schDynamicNetHilightOn" 'boolean t)
envSetVal("schematic" "schDynamicNetHilightNoIslands" 'boolean nil)
print("Enable Dynamic Net Highlighting")
)
hiRegTimer( "hiFormDone(schDisplayOptionsForm)" 1)
schHiDisplayOptions()

Is there a way to do it without calling schHiDisplayOptions?

Regards

Eric

Grid env variables

$
0
0

Trying to find the env variable for grids

Paul

awvPlotList of waveforms with only symbols - no connecting lines between

$
0
0

Hi,

I am trying to plot waveforms in ocean and using awvPlotList(). I have looked at Virtuoso Visualization and Analysis XL SKILL Reference to find how to plot only Symbols but there is no option to do that. It seems that lineSyle has to be one of "Solid, Dotted, Dashed, Dotdashed". However, when Waveform window opens, in Trace properties I can choose line syle "None"  from GUI.

awvPlotList(w list(dcy_list) dcy_x_list ?expr list(cnrName) ?showSymbols t ?dataSymbol list("o"))

What options should I use to plot waveforms with only symbols? Also, another missing option is "points" in lineType in awvPlot which is again available through GUI.

Thanks,

yayla

Tree Hierarchy of layout to table format

$
0
0

Hi all,

I want to create a tree hierarchy of layout to the table as mentioned below & should not see any cell repetitions of particular library and the same cell name can be in different library.

Could anyone help me in creating this?

Default Option should be 'Current to stop level'.

library1 cell1oflib1

             cell2oflib1

             cell3oflib1

             cell4oflib1

library2 cell1oflib2

             cell2oflib2

             cell3oflib2

             cell4oflib2

library3 cell1oflib3

             cell2oflib3

             cell3oflib3

             cell4oflib3

.

.

.

.

.

Can we dump that table to a file without disturbing its format so that We can read that file and check parent and child of the cells?


skill code to highlighting layout metals extended beyond via

$
0
0

Hi,

I was wondering if there is any skill code that can highlight metals lets say Metal 5, which are extended beyond Via4 or Via6. Basically I want to chop out these extended metals, for that I want to able to find them first without visual inspection.

Thanks

GC

Load SKILL file, call procedure and get return value (string) from Linux Terminal

$
0
0

I need to call few SKILL procedure one by one. Each of the procedure is written in it's own file. So I need to load the SKILL file before calling the procedure. I also need the return value; generally a string might be some other data type; from the calling procedure. I know I can write the commands in a file and use "virtuoso -nograph -replay commands_file" to load and run the procedures. Is there a way to load file and call procedure without writing in a file? How can I get the return values?

ddRegTrigger: trigger a function when a cell is opened for edit

$
0
0

We'd like to register a trigger function to be called whenever a cell is requested to be opened for edit.  (or, a function called whenever a cell is accessed, which can determine whether the requested mode is edit/append)

For starters, we have this:

procedure(preObjAccessTrigger(a b c d e f)
  printf("preObjAccessTrigger called: %L %L %L %L %L %L\n" a b c d e f)
  t
)

ddRegTrigger("PreObjAccess" 'preObjAccessTrigger)

But the last argument (mode) is always "r" regardless of whether the cell is being opened for edit or for read, or being changed from edit to read or vice versa after it is already opened.

What we are trying to accomplish is to give a warning and prompt for confirmation before edit is allowed on cells from certain libraries.  Changing the linux permissions of the entire libraries in question is a much less desirable option.

What can be done to tell what file mode is being requested before the cell is actually opened in that mode?

I've also tried PreAutoCheckout:

procedure(preAutoCheckoutTrigger(a b)
  printf("preAutoCheckoutTrigger called: %L %L\n" a b)
  t
)

ddRegTrigger("PreAutoCheckout" 'preAutoCheckoutTrigger)

which does indeed get called (even though we are not using any Data Management) - but it errors out with an odd error every time - here's the CIW transcript immediately after trying to open a cell for edit:

\i ddsServOpen("v8685" "channel_i3712" "layout" "edit" nil)
\o preObjAccessTrigger called: "v8685" "channel_i3712" "layout" "*" nil "r"
\o preObjAccessTrigger called: "v8685" nil nil nil nil "r"
\o preObjAccessTrigger called: "v8685" "channel_i3712" "layout" "layout.oa" nil "r"
\o preObjAccessTrigger called: "v8685" "channel_i3712" "layout" "*" nil "r"
\o preObjAccessTrigger called: "v8685" "channel_i3712" "layout" nil nil "r"
\o preObjAccessTrigger called: "v8685" "channel_i3712" "layout" "layout.oa" nil "r"
\o preObjAccessTrigger called: nil nil nil "*" dd:0x2c4ad500 "r"
\o preAutoCheckoutTrigger called: (dd:0x2c4ad500) nil
\e *Error* car: Can't take car of atom - t
\w *WARNING* (DEBASE-102079): A SKILL error occurred in function _leDataTrigger
\a _hiSetCurrentWinNum(2)
\w *WARNING* (DEBASE-102084): Data trigger for viewType maskLayout failed.
\r t

Hilight color setting in layout

$
0
0

When select any object in layout, it will hilight in certain color.

How can we change the color use some skill code in .cdsinit or CIW?

Thanks

Kevin

How do I access the real value of a resistor used in a transient simulation at a given PVT?

$
0
0

I have a schematic that contains a "smart note" that evaluates a SKILL expression and displays the result on the schematic. The basis of this comes from Andrew Beckett's code that uses dynamic scoping to temporarily set ilInstPath which allows me to access information about instances via their cdsParams.

My schematic depicts a simple resistively loaded, differential amplifier whose gain is just gm*R and I want the smart note to display that gain after a transient sim completes. At the completion of the sim the skill code in the note interrogates the transistor and extracts it's gm (via transient operating point annotations) but I can't similarly extract the value of the resistor because TSMC annoyingly didn't provide transient operating point capability for resistors (or capacitors, but they did for transistors). The actual resistor value is a function of temperature and what process corner I'm in, but I don't know how to get the actual value so that I can calculate gm*R. I know R=V/I but the resistors don't appear to be enabled to provide transient current annotations either. Is there an alternative way access the value of a resistor used in a transient simulation?

list slice (equivalent of myList[start:stop])

$
0
0

Is there an easy way to take a list slice in skill?  Seems like a core functionality but I'm not finding it in the docs.  Something like:

a='("a" "b" "c" "d")

a[1:2] --> ("b" "c")   (or if it were python-like just ("b"))

a[:2] --> ("a" "b" "c")

a[2:] --> ("c" "d")

splitting a pathname then moving up two directories

$
0
0

We'd like to do some file operations in a directory two levels above the readPath of a cell's directory.

cv->lib->readPath  --> /home/user/project/version/lib

we want to get '/home/user/project'

Using parseString, then chopping off the two last elements, then building the string again, would get us there; is this the best scheme?  If so, what's the most efficient way of chopping off the last two elements?  Right now we're looking at the list slice question to accomplish it which would be pretty universal but maybe not the most efficient or the least code?


how to Create Antenna models constraint in incremental techLib or in a design ?

$
0
0

create custom constraint for antenna in design or incremental Techlib skill api/ skill code

Merging and creating new shapes in PCell

$
0
0

Hello,

I've tried to research as much as I could but I have a PCell which creates certain ROD shapes.  Once all of those shapes are created, I wanted to merge them to create one new single ROD object which I could then use as the basis to create additional shapes with different sizing on different layers.  I can get the shapes to merge using leMergeShapes(pcCellView~>shapes) but that just returns the list of merged shapes.  How can I use this to create a new ROD object which I can then use with rodCreatePolygon() and using the ?fromObj setting?  

Thanks,

Miguel

How to chop a wires in schematic using SKILL?

$
0
0

Hi All,

Is there a SKILL code to chop wires in schematic?,

just like the leHiChop() in layout editor.

I'm using IC617.

Best regards,

Marben

marking net/wire in layout by layer

$
0
0

Hi,

I want to have a  following functionality in layout  using skill & bindkeys .

1. select  a net/wire  for example  a net in  METAL5

2.On pressing  incremental bindkey  it should  mark/highlight the nets  connected   to METAL 6

3.On pressing  decremental bindkey  it should  mark/highlight the nets  connected  to METAL 4

Let me know the commands I can use to have the above functionality or suggest changes .

Thanks,

Raghu

How to create dynamically CDF item field by calback

$
0
0

Hi all,

I try to load parameters from a file in order to create/delete dynamically by a callback parameters into the CDF of a component.

is it possible to do that ?

Thanks in advance for your help,

Olivier

Viewing all 5074 articles
Browse latest View live