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

Config for .cshrc of Cadence IC615

$
0
0

Hi everyone,

I have installed Cadence IC615 on a Linux systems. Base on the Cadence source file of IC5141, I create my own Cadence source for IC615 (named cadence615). Please take a look at my config: 

setenv CDS_Netlisting_Mode "Analog"

setenv CDS_LIC_FILE xxxx@local_host:xxxx@local_host


setenv SPECTRE_DEFAULTS "-E"


#setenv ASSURAHOME /tools/Cadence/ASSURA412

setenv ASSURAHOME /tools/Cadence/ASSURA414

set path = ($path $ASSURAHOME/tools/bin $ASSURAHOME/tools/assura/bin)

setenv LANG C

setenv SUBSTRATESTORMHOME $ASSURAHOME


#setenv MGC_HOME /tools/Mentor/calibre1302/ixl_cal_2013.2_18.13

setenv MGC_HOME /tools/Mentor/calibre1204/ixl_cal_2012.4_16.11

#setenv MGLS_LICENSE_FILE xxxx@local_host

set path = ($MGC_HOME/bin $path)


setenv MMSIM_HOME /tools/Cadence/MMSIM10.11

set path = ($path $MMSIM_HOME/tools/bin $MMSIM_HOME/tools/dfII/bin )


setenv IC_HOME /tools/Cadence/IC615

set path = ($path $IC_HOME/tools/bin $IC_HOME/tools/dfII/bin)

#setenv CDS_CMI_COMPLEVEL 0


#setenv EXT09_HOME /tools/Cadence/EXT09

#set path = ($path $EXT09_HOME/tools/bin $EXT09_HOME/tools/dfII/bin)

setenv IUS_HOME /tools/Cadence/IUS82

set path = ($path $IUS_HOME/tools/bin)


#setenv EXT_HOME /tools/Cadence/EXT8

#set path = ($path $EXT_HOME/tools/bin)

set path = ($path /tools/Cadence/IS/iscape/bin)


setenv LD_LIBRARY_PATH $IC_HOME/tools/lib/ 

setenv LM_LICENSE_FILE $CDS_LIC_FILE

 

I can run Cadence:

$ source cadence615

$ virtuoso &

I'm not sure these codes are correct or not. Please give me some advice. Thank in advanced.


Assura variable for runset name

$
0
0

 Hi,

I want to include another Assura rulefile  with skill load() command.

When I use absolute path it works well, but I would like to define a relative one, to make it more flexible.

Is there a special variable  in Assura which contains a full path of currently running rule file?

Mybe there is also some other work around which could help including sub-rulefile which is stored in the same directory as a main rulefile.

techGetLxExtractLayers does not work as intended

$
0
0

 Hi,

 I need to extract the layer names defined in the validLayers section of virtuosoDefaultExtractorSetup constraint group in the techfile. I was using techGetLxExtractLayers function for this purpose and it was working fine when the  format of the virtuosoDefaultExtractorSetup constraint group for validLayers did not include layer purposes. 

Now that layer purposes are also included as shown below, the function returns only ("CONT" "VIAS1"). My intention is to get the routing layer names or all the layer names defined in the validLayers section. Is techGetLxExtractLayers function not intended for this purpose ? Is there any new function available to do this task ? Could you hlp me out?

virtuosoDefaultExtractorSetup(

( interconnect ( (vaildLayers ( (METAL1 drawing)

                                            (METAL1 pin)

                                            (CONT drawing)

                                            (VIAS1 drawing)

                                            (METAL2 drawing)

                                            (METAL2 pin)

                                              so on ))

)))

 

Thanks,

Veena

*Error* eval: undefined function – hiGraphicMode

$
0
0

Hi everyone,

I have encountered a new problem on Cadence: *Error* eval: undefined function – hiGraphicMode

This is solution suggested by Cadence [Virtuoso Custom Placement and Rounting Preparation Guide]:

Solution: Check that the pcells in your design do not use SKILL functions

■ That are not available to the translator

■ That work with window graphics

Alternatively, translate in foreground mode so that all necessary SKILL functions are available to the translator.

Can you explain to me what exactly I have to do, please?

Thank you so much.

bindkeys

$
0
0

In the bindkey editor there are two command columns, the command line and the enter function command line. What is the syntax in UNIX for writing the command to the enter function command?

I am wanting to run a command after the move or copy command has been activated.

pCell need load .il file every time I open icfb

$
0
0

Every time I open the cell containing my pCell instance from a new terminal, it has a label "pCellEvalFailed" and cannot reveal some of the layers. The log has warning:

 ("eval" 3 t nil ("*Error* eval: undefined function" TTPointInGap))

But actually the function has been defined in the .il file. And after I load the file in the CIW, all the layers look normal.

What can I do if I want to use the pCell instance without load the .il file every time? 

How to copy and rotate a shape with special angle like 30 degree in skill coding?

$
0
0

Hello, 

I failed to search the manual and the forum to find a way to copy and rotate a shape I created with any agle like 15, 30, 45 etc.

I noticed some posts said that rotate with any angle may raise lithography issues. But in MEMS application, it's very popular to use all kinds of "strange" shapes. As the line/space is over 1um, the litho problem can be neglected. Then, what can I do in skill code?

 Thanks. 

What's the best way to fill a circular shape with plenty of holes?

$
0
0

Andrew answered in another post that It's better to create a mosaic to fill the shape with arrays. (I didn't mention the shape type)

In our design, shape B can fill shape A in different modes. Whatever the mode is, the distribution of B obey some rules, and we can calculate the coordinates for each shape B. I'm not sure if the filling can be releasized by mosaic, as both the rows and cols have shift.

For example, Here given shape A, B and the filling mode as below (fill1, fill2),  how to fill shape A with shape B efficiently and make sure B is inside A and B should not exceed the filling edge?


Is it possible to make pCell parameters have radio-button or check-box or drop-down menu?

$
0
0

Sometimes pCell parameter is just a kind of choice. Is it possible for the user to choose the needed value from radio-button, check-box, or drop-down menu? Programmer use list as the parameters, and users just select from the list.

And, for all kind of parameters, how to do data validation? If the user type a wrong type data, can it raise a hint and terminate the program?

How to write more efficient skill code for PCell?

$
0
0

I wrote a PCell program for a MEMS project recently. The code imitates virtuoso automatic generated PCell program. It looks lengthy and run very slowly.

How can i make it more effective? 

1. How to retrieve PCell parameters more simply. Here is my let paragraph, looks ugly:

    let((p1_d1 p1_r2 p1_r3 v1_r p1_leaf_style p1_leaf_l p1_leaf_w p1_leaf_hd 

p1_notch_w p1_slot_angle p1_slot_ir p1_slot_or p1_slot p2_notch_angle

p2_notch_ir p2_notch_or p2_notch ang ang0 ang1 angi inita DPI x y i num 

p1 p2 p3 p4 sides

pcInst  pcParameters pcParamProp pcLayer pcPurpose 

) ;local parameters 

(pcLib = (pcCellView~>lib)) 

;Retrieve pCell parameters

(pcParameters = ((pcCellView~>parameters)~>value)) 

(pcParamProp = car(exists(prop pcParameters 

   ((prop~>name) == "P1_Visible")

)

   )) 

(p1v = (pcParamProp~>value));P1_Visible

(pcParamProp = car(exists(prop pcParameters 

   ((prop~>name) == "P2_Style")

)

   )) 

(p2s = (pcParamProp~>value));P2_Style

(pcParamProp = car(exists(prop pcParameters 

   ((prop~>name) == "P1_D1")

)

   )) 

(p1_d1 = (pcParamProp~>value));P1_D1

(pcParamProp = car(exists(prop pcParameters 

   ((prop~>name) == "P2_D1")

)

   )) 

(p2_d1 = (pcParamProp~>value));P2_D1

(pcParamProp = car(exists(prop pcParameters 

   ((prop~>name) == "P1_R2")

)

   )) 

(p1_r2 = (pcParamProp~>value));P1_R2

(pcParamProp = car(exists(prop pcParameters 

   ((prop~>name) == "P2_R2")

)

   )) 

(p2_r2 = (pcParamProp~>value));P2_R2

(pcParamProp = car(exists(prop pcParameters 

   ((prop~>name) == "P1_R3")

)

   )) 

(p1_r3 = (pcParamProp~>value));P1_R3

(pcParamProp = car(exists(prop pcParameters 

   ((prop~>name) == "P2_R3")

)

   )) 

(p2_r3 = (pcParamProp~>value));P2_R3

(pcParamProp = car(exists(prop pcParameters 

   ((prop~>name) == "V1_R")

)

   )) 

(v1_r = (pcParamProp~>value)) ;V1_R

(pcParamProp = car(exists(prop pcParameters 

   ((prop~>name) == "V1_L")

)

   )) 

(v1_l = (pcParamProp~>value));V1_L

(pcParamProp = car(exists(prop pcParameters 

   ((prop~>name) == "V3_D")

)

   )) 

(v3_d = (pcParamProp~>value));V3_D

(pcParamProp = car(exists(prop pcParameters 

   ((prop~>name) == "V3_SP")

)

   )) 

(v3_sp = (pcParamProp~>value));V3_SP

(pcParamProp = car(exists(prop pcParameters 

   ((prop~>name) == "V3_EE")

)

   )) 

(v3_ee = (pcParamProp~>value));V3_EE

(pcParamProp = car(exists(prop pcParameters 

   ((prop~>name) == "P1_Leaf_Style")

)

   )) 

(p1_leaf_style = (pcParamProp~>value)) ;P1_Leaf_Style

(pcParamProp = car(exists(prop pcParameters 

   ((prop~>name) == "P1_Leaf_L")

)

   )) 

(p1_leaf_l = (pcParamProp~>value)) ;P1_Leaf_L

(pcParamProp = car(exists(prop pcParameters 

   ((prop~>name) == "P1_Leaf_W")

)

   )) 

(p1_leaf_w = (pcParamProp~>value)) ;P1_Leaf_W

(pcParamProp = car(exists(prop pcParameters 

   ((prop~>name) == "P1_Leaf_HD")

)

   )) 

(p1_leaf_hd = (pcParamProp~>value)) ;P1_Leaf_HD

(pcParamProp = car(exists(prop pcParameters 

   ((prop~>name) == "P1_Notch_W")

)

   )) 

(p1_notch_w = (pcParamProp~>value)) ;P1_Notch_W

(pcParamProp = car(exists(prop pcParameters 

   ((prop~>name) == "P2_Notch_W")

)

   )) 

(p2_notch_w = (pcParamProp~>value)) ;P2_Notch_W

2. How to fill shape A with array of circular shape B efficiently,

    make sure B is inside A and the distance of B edge to A edge should be larger than 3um?

    I tried to use dbCreateEllipse in multiple loops. And it took several minutes to get a final result, seems very inefficient.

How to get coordinates of layers

$
0
0
Greetings!

I want to get coordinates of layers of the selected object.

What what SKILL commands or program will I use?

For example:

I have a resistor in a layout, I select it then execute a SKILL commands or program.

The result will be the x and y coordinates of the layers of the resistor I selected.

Skill++ - create another class that is composed of two instances from another class

$
0
0

I've created a class that is supposed to represent a two-dimensional point. It is defined here:

 defclass( gf_2dPoint

   () ;superclass

   (

      (x

         @initarg x

         @reader getX

         @writer setX

      )

      (y

         @initarg y

         @reader getY

         @writer setY

      )

   )

) ; defclass

Then in my main procedure I instantiate two points like so:
   gf_Pt1 = makeInstance('gf_2dPoint ?x 0 ?y 3)
   gf_Pt2 = makeInstance('gf_2dPoint ?x 2 ?y 5)
 
I wanted to create another class, maybe called gf_line, whereby a gf_line instance could be created with the makeInstance and passing to gf_2dPoint objects.
 
Thanks for any insights.
By the way, I may just use a simpler procedure solution, but was a bit curious.
-Gary 

Pcell conditional inclusion of one layer and remove other

$
0
0

Is there any provison in Pcell GUI that I can include and layer and remove other layer/layers simultaneously using only one conditional inclusion in pcell.

 

Regards,

Marthand.

 

sh command with quotations

$
0
0

Hi All,

 In my skill programme, I would like to excute shell command like --> grep -w "Rule No." inputfile.txt > outputfile.txt

so i written programme like-->

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

k1="inputfile.txt"

k2="outputfile.txt" ;k1 & k2 are variables

k=buildString(list("grep" "-w" "Rule No." k1 > k2))

sh(k)

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

But it prints like --> grep -w Rule No. inputfile.txt > outputfile.txt.

 but i need to execute this command with word "Rule No." in quotations.

Please help me on this

 

Thanks in Advance,

Narendra 

Properties on individual signals from a net

$
0
0

Hello,

I tried the next example and i don't know exactcly what is it wrong; I start from a schematic view;

- I create a net with the label: net<0:2>; this way the net contains 3 signals: net<0>, net<1>, net<2>;

- I select the net and I run, one after other, next commands:

myNet = css()->net   ;;get the net object
sig0 = car(myNet->signals)    ;;get the signal0 object

sig1 = cadr(myNet->signals)    ;;get the signal1 object
sig0->name     ;;only to be sure; it returns: "net<0>"
sig1->name      ;;only to be sure; it returns: "net<1>"
dbCreateProp(sig0 "myProp" "string" "magic")     ;;I create on the object sig0 the string property named "myProp" with the value "magic"
dbGetPropByName(sig0 "myProp")->value     ;;only to be sure; it returns: "magic"
dbGetPropByName(sig1 "myProp")->value      ;;only to be sure that the property is put only to one signal; it returns: nil , which is ok;

Now it comes the tricky part: In schematic window, i press: check and save; I recive the message: "Schematic check completed with no errors." and now I run the last command of sig0, to check if the property on my signal sig0 [sig0->name == "net<0>"] is still there:

dbGetPropByName(sig0 "myProp")->value    ;;I recive nil 

 Why did the property disappeared ?
How can I put a property only on a signal from a net without losing it after check and save?

Thank you,
Best regards,
Adi.

 

 

 

later edit:

one more thing: If there is any netl with the label name net<0> in the cell view, it is treated like the firs signal of the net<0:3> bus and in this case the property acts normally (remaining after the check and save).My problem is whan I have in my cell view only the bus. 


Skill Script to generate Letters in Virtuoso Layout

$
0
0

Hi All

 I'm looking for a skill script to be able to write letters (upper or lower case) into a form select the height of the letters and the mask layer and the result is an instance in Virtuoso layout of the letters I've written

 

How to access metals which are connected to the metal I selected

$
0
0

Hello:

I want to write a skill code to calculate the metal‘s resistance in layout. The tool I use is candace 5.14.

I want to make this come true in the skill code:when I select the metal in the top cellview , the skill code can

trace all the metals which are connected to the metal I selected. I can access to all the metals and vias’ properties.

These metals and vias are may not in the same cellView level.They are hierarchy.

So I can calculate the whole resistance of  whole path which connected to the metal I selected!

Thank  you very much! 

Cadence IC5.1.41 libInit.il

$
0
0

Hi,

I wanted to know is it possible to overwrite the libInit.il file, which is specified in the project area by a local version of the same??
I am actually trying to load a user defined set of "modelPath"s for the analog design environment. So i have another skill script in my local area to do that (this is loaded using .cdsinit). But the libInit.il file in the project area, that is sourced whenever i open the library manager, overwrites the "modelPath"s by loading a script in the project area. 

Any suggestions how this can be done?

Any other suggestions on how to add some default set of "modelPath"s for the ADE?

Thanks

Help me! Skill Experts!

$
0
0

Hi, All!

I'm basic layout engineer.

Today, I made a skill script for layout metal layer on & off.

But, it's not run.

I don't know the reason.

Please, help me!

p.s> I use cadence IC6.1.5

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

procedure(view()

 leSetLayerVisible(list(\"M1\" \"drawing\") t)

 leSetLayerVisible(list(\"M2\" \"drawing\") t)

 hiRedraw()

) ;procedure

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

call bindkey setting

hiSetBindKeys("Layout" list(

list("Ctrl<Key>1"   "view()")

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

CIW error message

 *Error* view : too few arguments (at least 1 expected, 0 given) - nil

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

Schematic cdf value not displaying correctly

$
0
0

I have a script that sets the cdf value of a schematic symbol but it does not display the value correctly in the schematic cellview. When I look at the value from the property menu the values are correct. I have to toggle the variable on the property menu nil and back to t then values will display in the cellview correctly.

 Is there a callback the property menu does when you hit apply/OK that I need to add the script. Or am I missing something in the script to update the schematic cellview.

Some different examples I am trying:

procedure(stdLib_getPcellCdf(obj var)
let(    (cdfVal)
foreach(cdf cdfGetInstCDF(obj)~>parameters
        if(equal(var cdf~>name) cdfVal = cdf))
cdfVal
); end of let
); end of stdLib_getPcellCdf

procedure(stdLib_setPcellCdf(obj var val) stdLib_getPcellCdf(obj var)~>value = val ) 

procedure(chngSymVal(cv) Normal 0 false false false EN-US X-NONE X-NONE MicrosoftInternetExplorer4

/* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-parent:""; mso-padding-alt:0in 5.4pt 0in 5.4pt; mso-para-margin:0in; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman","serif";}

foreach(a cv~>instances

cd=cdfGetInstCDF(a)

foreach(param cd~>parameters

if(equal("multidesign" param~>name) then param~>value=t hiFlush() )

))

schCheck(cv)

dbSave(cv)

)

 

Viewing all 5089 articles
Browse latest View live


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