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

Program Skill Development

$
0
0
 Hi all,
 
 I have to realize a project about PCB. To do this I have to use SKILL language. 
 
 My subject: I have to write a SKILL program which automatizes the creation of text block. In fact I have to use a library to take PCB dimension, and text block format (A4, A3, ...). Then I write a script which calls many functions to do that.
 Well the text block need to be fill with information of PCB (Client name, no Pb in the PCB, Date, name of responsible, etc...). Informations are present in text files, So I have to take them, put in text blocks, select format of text block, and then, generate the Gerber files.
 
 Anyone could help me please.
 
 English is not my native language, so please ask me for more information. It's very important for me and urgent.
 
 Thanks

insert a varibale_name = value into the ade usrCmdLineOption

$
0
0

Hi, Im trying to add : lmod=some_number  into the usrCmdLineOption ( inside the ADE L).

Im trying to do it from the CIW, because im running a perl script that doing some calculation and set the right number.

however the commands : asisetenvoptionval & asiaddenvoption dont seems to work here.

can anyone provide any help ?

 

thx

 

meny 

 

sort lists in SKILL/OCEAN

$
0
0

 I have a list which includes several lists inside. Is there any way that I can sort the lists alphabetly based on the first part of each list (signal name)?

 

Thanks!

list( 

list("V105A_ymax_v9overshoot_1"   float(0.9975)  float(1.1025) "[V]"   )
list("V105A_riseTime_v9ramptime_1"   float(300u)  float(2m) "[s]"   )
list("V5A_DS3_delay10_v5a_on_1"   float(0.0)  float(500u) "[s]"   )
list("V33A_DSW_peakToPeak_v4vripple_1"   float(0.0)  float(50.0m) "[V]"   )
list("V5A_DS3_ymin_v2pgoodincr_1"   float(4.65)  float(4.85) "[V]"   )
list("DPWROK_delay90_pwrok_delay_1"   float(10m)  float(15m) "[s]"   )
list("V33A_DSW_average_v4voutavg_1"   float(3.135)  float(3.465) "[V]"   )
list("V105A_ymin_v9pgoodincr_1"   float(0.965)  float(1.03) "[V]"   )

)

Assign Shell output to Ocean variable

$
0
0

Hi,

 

I'd like to assign a shell command (sh or csh) output to an OCEAN variable but the problem is that Shell always return "t" and nothing else.

 

I would need to be able to get the results of a "pwd | cut -d "/" -f 8" command (that returns the name of my testbench which is the same as my testbench-cellview) where my script is loaded from, and put the results of this command in an OCEAN variable so that I can paste the name to the right directory to open all my result in batch.

 

My script would look like this :

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

newWindow()

corner_list='("corner_1" "corner_2" "corner_3")

simDir = "/home/my_name/path/to/all/testbench/"

testbench = sh("pwd | cut -d "/" -f 8")

foreach(corner corner_list)

openResults( strcat( simDir "/" testbench "/" corner ) )

selectResults( 'tran )

)

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

 

This script would be automatically load all my corner PSF results in Cadence Results Browser for "familly plot" without editing the script to change the testbench name inside before running it.

 

Thanks !

Damien

how to observe the transistor dimension variation in monte carlo simulation

$
0
0

 Hello,

      I know that people can observe some transistor parameter changes during the monte carlo simulation, but there is no options to let user choose width or length of a transistor as a observed parameter, what's your method?

by the way, my approach is to build an expression including some parameters picked up by "opt" in calculator, but the transistor size is not there.

generally, are all the transistors in a circuit applied the same variation in a simulation? or each transistor has its own variation in the simulation? I noticed that some people mentioned one model card and multiple model card, is this related to the transistor dimension variation?

regards,

zfeng 

pCell skill for beginners

$
0
0

Hi,

i'd like some advice for creating my first simple pCell from skill. I have no skill experience so i'm looking for a good place to start.

My ultimate aim (for now) is to create a rectangular via array with X and Y stretch handles. For example you have M1->M4(the top & bottom layers would be parameters) that you can stretch in X or Y and it fills with the max vias allowed by spacing rules. However to begin with i'd be happy to create a parameterised rectangle of M1 that i can stretch in one direction & take it from there.

Pointers to on-line tutorials and very simple examples would be great, right now i am blindly searching around source-link.

Thanks

Stu

 

 

   

 

 

Strange error putprop

$
0
0

 Hi,

       I am  running a script (pasted below) in Ocean. The simulations have already finished fine. This script just selects the run and extracts measurements from it. It runs fine for a few iterations then it gives me this error (on the 12th iteration)

 *Error* putprop: first arg must be either symbol, list, defstruct or user type - nil

 This happens right after the plot command of IBIAS_FIN since I see this on the terminal:

*Warning* Wave82 is not a waveform object that can be displayed and
          will be DELETED automatically.
          name: "IBIAS_FIN"

 But if I restart the script onwards from the 12th iteration, the12th iteration works fine it shows the same problem on the 13th iteration. If I execute the script commands 1 at a time for the 12th iteration they work fine.

   Please help me figure out why I am getting this error. These measurement statements are from the ocean script generated by ADE, I did not change them so I don't know why they cause a problem.

 

Thanks,

Milind

 

 

OCEAN SCRIPT:

 

for(i 1 54
    sprintf(corDir "%s%d/psf" "/home/milind/BIAS_TB_TRAN/corner" i)
    openResults(corDir )
    IBIAS_TEMP = IS("/I0/M38/D")
    plot( IBIAS_TEMP ?expr '( "IBIAS_TEMP" ) )
    IBIAS_FIN = value(IS("/I0/M38/D") VAR("gt"))
    plot( IBIAS_FIN ?expr '( "IBIAS_FIN" ) )
    IBIAS_AT_POK = value(IT("/I0/M38/D") cross(VT("/POK") (VAR("vsup") / 2) 1 "rising" nil nil))
    plot( IBIAS_AT_POK ?expr '( "IBIAS_AT_POK" ) )
    POK_Time = cross(VT("/POK") (VAR("vsup") / 2) 1 "rising" nil nil)
    plot( POK_Time ?expr '( "POK_Time" ) )
    IBIAS_DC = IDC("/I0/M38/D")
    plot( IBIAS_DC ?expr '( "IBIAS_DC" ) )
    ISUP_DC = IDC("/V0/MINUS")
    plot( ISUP_DC ?expr '( "ISUP_DC" ) )
    ISUP_FIN = value(IT("/V0/MINUS") VAR("gt"))
    plot( ISUP_FIN ?expr '( "ISUP_FIN" ) )
    IBIAS_AFGL = value(IS("/I0/M38/D") (2 * VAR("gt")))
    plot( IBIAS_AFGL ?expr '( "IBIAS_AFGL" ) )
    ISUP_AFGL = value(IT("/V0/MINUS") (2 * VAR("gt")))
    plot( ISUP_AFGL ?expr '( "ISUP_AFGL" ) )
    POK = VT("/POK")
    plot( POK ?expr '( "POK" ) )
    VSUP = VT("/VDD")
    plot( VSUP ?expr '( "VSUP" ) )
    IBIAS = IT("/I0/M38/D")
    plot( IBIAS ?expr '( "IBIAS" ) )
    LG_Phase = phaseDegUnwrapped(getData("loopGain" ?result "stb"))
    plot( LG_Phase ?expr '( "LG_Phase" ) )
    LG_dB20 = db(mag(getData("loopGain" ?result "stb")))
    plot( LG_dB20 ?expr '( "LG_dB20" ) )
    Phase_Margin = value(getData("phaseMargin" ?result "tran_stb_margin-tran_margin.stb") 0.01)
    plot( Phase_Margin ?expr '( "Phase_Margin" ) )
    PM_Freq = value(getData("phaseMarginFreq" ?result "tran_stb_margin-tran_margin.stb") 0.01)
    plot( PM_Freq ?expr '( "PM_Freq" ) )
    Gain_Margin = value(getData("gainMargin" ?result "tran_stb_margin-tran_margin.stb") 0.01)
    plot( Gain_Margin ?expr '( "Gain_Margin" ) )
    GM_Freq = value(getData("gainMarginFreq" ?result "tran_stb_margin-tran_margin.stb") 0.01)
    plot( GM_Freq ?expr '( "GM_Freq" ) )
    LG_DC = value(value(dB20(getData("loopGain" ?result "tran_stb-tran_stb")) 1e-05) "time" 0.01)
    plot( LG_DC ?expr '( "LG_DC" ) )
   
    if(i==1 then
        fileHandle = outfile("/home/milind/BIAS_TB_TRAN/data.csv" "w")
        ocnPrint( ?output fileHandle ?numberNotation 'engineering  "vdd=5" "ttttttt" "-40" Phase_Margin PM_Freq )
        close(fileHandle)
    else
        fileHandle = outfile("/home/milind/BIAS_TB_TRAN/data.csv" "a")
        ocnPrint( ?output fileHandle ?numberNotation 'engineering  "vdd=5" "ttttttt" "-40" Phase_Margin PM_Freq )
        close(fileHandle)   
    )
)

GDS number for a layer

$
0
0

 Hi all,

             How can I get gds number for a layer(m1 label). My version is 5141.

 Thank you.


Help on create VIA in 6.1.4 version

$
0
0

Hi all,

I am able to create contact in IC5141 version using leCreateContact command.  But this is not works in 614 version. Please let me know create a VIA in layout in 614 version.

Thank you,

Sarvani

Is that a way to set exclude particular layers (different purpose) from carry connectivivy

$
0
0

Hi Guru,

I owned a techfile where define M1 with purpose of drawing, PH and SW. (Info:PH is for place holder and SW is for switch). How can i set that only M1;drawing carry the connectivity but other won't.

 I tried to manipulated the interconnect validLayers setting but failed, M1;PH still carry connectivity when connected with M1;drawing. Any best way to tackle this issue. Thanks

  ( "virtuosoDefaultExtractorSetup" nil
    interconnect(            
        ( validLayers   
            (                 
                (M1 drawing)                              
                (VIA1 drawing)
                (M2 drawing)
                (VIA2 drawing)
                (M3 drawing)

                ..................)))

 

 My intension is simple, im looking a way to set that ONLY M1;drawing carry connectivity, the layer with other purposes are ignore.

Thanks in advance. =)

how to determine some cellview is editing by somebody else?

$
0
0

Hi... This is Alvin Park. SKILL Beginner ^_^

 

I programmed a SKILL code for auto editing.

first DB open by "dbOpenCellViewByType"

 TDB = dbOpenCellViewByType( LibName CellName "layout" "masklayout" "a")

in case normal... this return correct DB code to TDB parameter. So far so good.

 

but in case of editing by somebody else (locked) , CIW shows warning that this cell is locked. (shows warning only!)

This code return correct DB code in spit of not editing the cell.  

 

So before DB open by editing mode,

How can I determine some cell is editing by sombody else?

 

PSF name changed - unable to run anything

$
0
0

Hi,

 

I'm having very strange issue here. When I run a transient simulation, the PSF output file is named 'an1.tran' and I am not able to run any OCEAN script on it, nor to do any calculation with the Results Browser and the calculator.

 

It always return me the same error message in the ICW :

expression evaluation failed: val is not legal.
expression evaluation failed: val is not legal.
expression evaluation failed: v("clk_p" ?result "tran")
"(\"lowerCase\" 0 t nil (\"*Error* lowerCase: argument #1 should be either a string or a symbol (type template = \\\"S\\\")\" nil))"

 

But if I write in the ICW :

plot(v("clk_p" ?result "tran")) 

It work just fine.

(same if I use getData( ) )

I didn't change anything since for this to happen and I have no idea how to fix it.

 

Thank you.

Damien

Subtraction Between two layers?

$
0
0

 

 Hi,

I just started cadence couple of days back for designing my patterns, I wanted to subtract two layers and already wrote a code but not sure its a right one or not. Could anyone help me please and let me know is this a right on or not,

 load("/usr/cdscad/libw/utils/rectw.il")


procedure( subtraction( @optional origin ww tlength outlayer)
(prog (xx yy np xo yo lw)

   subl1 = nil
   subl2 = nil

   xo = xCoord(origin)
   yo = yCoord(origin)
   


;; Draw First rect Layer

   xx = xo
   yy = yo-ww/2.0
   r = rectw(xx yy tlength ww "metal1")
 subl1 = append(subl1, list(r))

;; Draw Second rect Layer

   xx = xo
   yy = yo-ww/2.0
   r = rectw(xx yy tlength ww "metal2")
  subl2 = append(subl2, list(r))

dbLayerAndNot((getEditRep) outlayer subl1 subl2)

)

)

 

Thanks

attach label to a pin as a 'children'

$
0
0

Dear all,

 I have only pins in the layout and I want to attach a label to it. Unfortunatelly the 'children' cannot be set.

Anyone knows how to set it correctly?

Here is the example of my code. 

Regards,

 

Normal 0 21 false false false FR X-NONE X-NONE MicrosoftInternetExplorer4

/* Style Definitions */ table.MsoNormalTable {mso-style-name:"Tableau Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-qformat:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:"Times New Roman"; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi;}

cv=geGetWindowCellView()
p=caar(cv~>terminals~>pins)
foreach(p cv~>terminals~>pins
p1=car(p)
p1~>net~>name
f1=car(p1~>figs)
unless(f1~>children f1~>children=
dbCreateLabel(cv list(f1~>layerName  "label" ) centerBox(f1~>bBox)
p1~>net~>name "centerLeft""R0""roman" 0.5)))
 
 
*Error* setSGq: (DB-370034): dbSetq: Cannot set attribute - children
 

 

leHiCreateGroup

$
0
0

 Hi..
I am trying to group a selected group of metal into 1 group. But everytime I do leHiCreateGroup, there is a GUI window popup "Create Group" and you have to hit apply in order to create group.. It's kinda annoying to hit apply everytime.. Is there any other Skill command I can use to bypass this popup GUI window and achieve the same result..

Thank you very much for your help
Howard


Cell name as a pcell variable

$
0
0

Hi,

I have developed a skill based pcell for a particluar device. One of the parameters for the pcell is a string which is the name of a cell in the library I am working. It works fine, but when I try  copy these pcells into a diferent library I do not see these cells copied since cadence thinks they are just properties. The limitation I have with the code is I need to pass the names of the cells as parameters . When I do this I exprerience these problems.  I would really appreciate if someone could tell me if there is a way around.

Thanks

C. 

BindKey - Error in IC6

$
0
0

Hi experts,

 I'm facing some issue with pre-loaded bindkeys after virtuoso upgraded from IC5.1.X to IC6.1.X.

The Error is related to the skill command "leSetAllLayerValid" (complaining cannot get current techfile in the LSW").

I believe this is due to the diff program loading sequence, as in IC6.1.X, the Palette(or LSW) will only present when a cell is open in virtuoso.

unlike in IC5.1.X, the LSW will be loaded before a cell is open. (leSetAllLayerValid won't return error because LSW is present)

Anyone can help me to resolve this issue?

Thanks,

Peter

 

 

How to get minimum two VIA's when using AutoVIA

$
0
0

 I am using 614 version. Auto option in Create Via creates possible no. of VIA's when I click on two layers which need to be connected. If area of overlap of these two layers is very small then only one VIA is placed at that area. I would like to get minimum two VIA's at that overlap place. Please help me on this.

 Thank you,

Sarvani

For Skill Help

$
0
0

 Hi all,

  could you please help any body to learn skill language basics

Thank you

Rambabu

help on "geAddInstProbe"

$
0
0

hi all,

I am currently writing a script that will probe instances by using "geAddInstProbe" that meets my specified requirement.
To why I want to do this, is because my top-level schematics chip or macro level, all instances supply nets are defined via netset property assignement or supply pin net expression or explicit signal. So I am not able to probe or highlight for example a power net and see which blocks are sharing the same supply.

Now it is only working on the current cellview and only if the block has netset porperty and value. If I try to push or EIP into the block to probe again, evaluated name of the supply is different to the local value. Is there a possibilty to extract in skillmode the evaluated name of a supply pin which was defined several hierarchies above?

 Btw, I am using virtuoso  Schem Editor 6.1.4-64b.500.11

BR  ~lrlsk

Viewing all 5067 articles
Browse latest View live


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