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

Extract UI information in SKILL program

$
0
0
Hi all,


Well i am in allegro PCB Design,
I go tools/reports/New then i save Board_ACCURACY, Board_extents, Board_units,
etc... and i put that on text file.

I know how to do that with the user interface, but I need to translate that in
SKILL program in order to automate this informations record.

Could anybody help me?

Best regards,

Yann

Transistors in Series in Cadence

$
0
0

Hi! How are you?

 

My question is: when I change the multiplicity or the number of finger in a FET transistor, it means I'm putting them in parallel.

My question is how I put them in series, without doing it manually.

 

Please explain carefully 'cause i'm pretty new to Cadence. 

Thanks. 

How to find out if you're edit-in_place in a group or in an instance

$
0
0

Hi..

Which Skill command I can use to find out whether I am edit-in-place in a group (created from the leHiCreateGroup command) or edit-in-place in an instance?

 When I edit-in-place of an instance, the window will tell me the name of the instance I am editing in. But when I edit-in-place of a "group", the window name doesnt change,  the "EIP" group just give me a "halo" boundary to indicate that I am EIP in that group.. Is there a skill command that I can use to tell me that I am EIP of a group??

 

Thank you very much for your help

Howard

 

Find Instances That Used a Design Variable

$
0
0

Hello,
I've been trying get a list of instances that used a design variable in a design via a SKILL script. It is like the "Variable -> Find" command in an Analog Artist, but it search for only one instance. If possible I would like to get a list of instances.

I know how to get a list of design variables used in a design,
asiGetDesignVarList( session )

Is there a direct command or a script to get a list of instances that used a design variable in a design?

Thanks in advance for the help.

Gilbert


Originally posted in cdnusers.org bygilbertd3

creating list of celviews

$
0
0

Hi,

   I am trying to create multiple new layouts from a list unix file in to one library. In each cell Iam also trying to create a PR boundary with the coordinates that are present in the unix file.

 

The list file contains the cell name and PR boundary coordinates as shown below. 

cell_name                      llx   lly   urx      ury

BUF                                0     0     4.448    4.424

AND                                0     0     4.448    4.424 

 My code for this is as shown below.

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 

ListPath = "/home/san/tiler/cell_list"

;lib_name="test"

inPort = infile( ListPath )

when( inPort

while( gets( line inPort )

;println( nextLine )

 

lineData = parseString(line " ")

        ;portTable[car(lineData)] = evalstring(cadr(lineData))

;cell_name=car(lineData)

cell_name=nth(0 lineData)

llx=nth(1 lineData)

lly=nth(2 lineData)

urx=nth(3 lineData)

ury=nth(4 lineData)

create_boundary(cell_name llx lly urx ury)

)

close( inPort )

)

procedure(create_boundary(cell_name llx lly urx ury)

let (cv)

cv=dbOpenCellViewByType("test" "cell_name" "layout" "maskLayout" "w")

dbCreateRect(cv list("prBoundary" "drawing") list(llx:lly urx:ury))

dbSave(cv)

);procedure

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
For this code, I am getting the following error.
 
*Error* eval: undefined function - create_boundary
*Error* load: error while loading file - "create_cell.il" at line 20 

  Kindly help me to solve this.

Is it because of the "parsing", as i expect \n is coming for the "urx" variable when I try to access it??

 Regards,

santhosh. 

problem with "XStream Out" using skill command

$
0
0

  Hello everyone, 

       I try to set some of the setings from the "Geometry" tab of the X Stream Out form using skill commands, but they don't work!?

       For example I try to set this

                xstSetField("rectToBox" "true") 

           the returned value is t, but the check box is still unchecked .This happens when I try to setup and the other check boxes ( export settings) from this tab.

     Am I wrong with the commands, or there is a bug?

  Regars,

      Nikolay 

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?

 

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)   
    )
)


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 

How to parse the contents of a file?

$
0
0

Hi everyone,

    If for example i have some file say rules file with contents of file being : <ruleno.> <rule name> <value>.

   How to parse the contents of this file and store in  table format?

  Can i get code for this?

Thanks,

  Messi

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

 

 

   

 

 

How can I acquire waveform expression using a trace in ViVA?

$
0
0

Hi All,

Good Day. I 'am trying to get the information from a selected trace on the graph. For example I have a trace AVDD and when I send "/AVDD" to a calculator, it's equivalent expression is value(getData(“/AVDD” ?result “tran”) “Cload” 2e-12) as shown in the buffer part of the calculator GUI. How can I acquire value(getData(“/AVDD” ?result “tran”) “Cload” 2e-12) using a trace(ex. "/AVDD") to get this information using SKILL?

My main goal is how can I acquire "value(getData(“/AVDD” ?result “tran”) “Cload” 2e-12)" after or during an analysis executes and/or finishes using SKILL and/or OCEAN?

btw, I want to do this in batch mode(ocean session).

Thanks and Regards,

Reinice

*Warning* Wavenil is not a waveform object

$
0
0

Hi All,

Good Day. I have an OCEAN script and I' am executing it in batch mode(ocean session). After the run finishes I' am having this warning:

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

Here is the snippet of my script that I think is involve about the warning I' am getting:

newWindow()

awvPlotWaveform(awvGetCurrentWindow() list(value(value(v("/Signal_Name" ?result "tran") "temperature" -40) "modelFiles" "model.scs:top_ss") ?expr list("Signal_Name") ) )

YminNew = ymin(value(value(v("/Signal_Name" ?result "tran") "temperature" -40) "modelFiles" "model.scs:top_ss"))

YmaxNew = ymax(value(value(v("/Signal_Name" ?result "tran") "temperature" -40) "modelFiles" "model.scs:top_ss"))

STime = settlingTime(value(value(v("/Signal_Name" ?result "tran") "temperature" -40) "modelFiles" "model.scs:top_ss") YminNew nil YmaxNew nil 5 nil "time")

awvPlaceWindowLabel(awvGetCurrentWindow list(0 0.99) "settling Time" "STime")

ocnPrint(?output p5 "corner21,temperature=-40 AVDD=3.63 DVDD=1.2 Cload=2p modelFiles=model.scs:top_ss")

ocnPrint(?output p5 "Signal_Name,SetTime," STime)

addSubWindowTitle("Analysis:tran corner21,temperature=-40 AVDD=3.63 DVDD=1.2 Cload=2p modelFiles=model.scs:top_ss")

hardCopyOptions(?hcOutputFile "my_test_bench.png")

hardCopy()

1. Can anyone explain why I' am getting this warning?

2. Also in awvPlotWaveform, when I use ViVA to view the expression of my "Signal_Name" using a calculator, I' am getting only value(v("/Signal_Name" ?result "tran") "temperature" -40) instead of value(value(v("/Signal_Name" ?result "tran") "temperature" -40) "modelFiles" "model.scs:top_ss") as written in the script above. I don't know why is this occurring.?

3. Is there a work around where I can get the correct expression of my "Signal_Name"?

Actually this post is related to my previous post (How can I acquire waveform expression using a trace in ViVA?  started by Reinice  on 12 Nov 2012 06:46 PM)

btw, I' am using version IC06.15.132-615. 

Thank you very much in advance.

Best Regards,

Reinice

Running only one Corner Setup eventhough "modelGroup" are different?

$
0
0

Hi All,

Good Day. Everytime I run my OCEAN-XL script in batch mode or in GUI mode, I notice that when "variable" and it's values in Corner Setup are the same eventhough "modelGroup" are different, it seems that it's running only one Corner Setup. Why is this occurring?

I have a snippet of my Corner Setup.

ocnxlCorner( "corner1"

'(

("variable" "temperature" "-40")

("variable" "AVDD" "3.63")

("variable" "DVDD" "1.2")

("variable" "Cload" "2p")

("modelGroup" "\"top_ss\" ")

))

ocnxlCorner( "corner2"

'(

("variable" "temperature" "-40")

("variable" "AVDD" "3.63")

("variable" "DVDD" "1.2")

("variable" "Cload" "2p")

("modelGroup" "\"top_tt\" ")

))

Thanks and Regards,

Reinice

Unable to open nodeset file Warning

$
0
0

I have noticed that in my SP simulations the following warning occurs when a DC operating point simulation doesn't precede it:

WARNING (CMI-2015): Unable to open nodeset file `spectre.dc'. No such file or directory.

 

 Could someone please clarify what the function of the spectre.dc file in performing a SP simulation? Also, why is this a warning instead of an error?

 

Thanks for the help. 



.cdsplotinit and Hp laserjet M1536

$
0
0

Hi,

We are using IC614 on redhat 5.8 and looking to print directly to the printer using .cdsplotinit. Can someone here please tell me what should be the parameters for HP laserjet M1536? The printer is installed in the system using hplip and queue is ' HP_LaserJet_M1536dnf_MFP'

 

Thanks.

update "cutSpacing" of a via

$
0
0

Hi guys,

Long time lurker, first time poster.  I first want to thank Andrew, Lawrence and other regulars for contributing to this forum.

 I have a simple problem that I can't seem to figure out and I am hoping you guys can point me to the right direction.  I am trying to update the "cutSpacing" of a via using the following code, where cutSpacing= x_width:y_width and I got the error below

*Error* dbReplacePropList: Invalid float - (0.09 0.09)

I figured I am not setting the type of "cutSpacing" correctly but I can't figure what it should be. 

 dbReplacePropList(fig

               list(

   list("cutSpacing" 'float cutSpacing)

                   list("cutColumns" 'int numCols)

                   list("cutRows" 'int numRows)

   )

Thanks in advance,

Andy

PS I am using IC6.1.5-64b.500.12 

create a table inside the class

$
0
0

Hi,

I would like to create a table for each instance of a class. How best to do it. If i define "makeTable" inside a defclass it gives me an error.

 defclass( pinInfo
    ()
    (
     ( pinName   @initarg pinName )
     ( pinType   @initarg pinType )
     ( netName   @initarg netName )

     PinTable = makeTable("aTable1" 0)

     tablep(PinTable)
    )

  );defclass

I get an error when i define it like this "*Error* slotValue: no such slot - PinTable.

Thanks

Getting the techfile's via

$
0
0

Anyone who has a better idea of getting the techfile's via?

I tried this but its too slow.

lxGetValidViaDefs(techGetTechFile(geGetEditCellView()))

Thanks.

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?

 

Viewing all 5066 articles
Browse latest View live