how to scale OPUS Schematic

Discussion in 'Cadence' started by manpiolam, Mar 8, 2005.

  1. manpiolam

    manpiolam Guest

    Hello Cadence Experts,

    We do customer design for microprocessors. Everytime we adopt a
    new technology, we use the original schematic with old micron size and
    set a scaling factor in spice netlist to do circuit simulation for the
    new technology.

    But for some reasons, we need to convert the micron size in old
    OPUS schematics to real micron size. This is just a multiplication
    factor on W and L of transistors. Since the schematics are large and
    involve many cells, the conversion cannot be done by hand. Does anyone
    have experience of doing this kind of conversion on Cadence OPUS
    schematic? Your input are well appreciated.

    -Bill
     
    manpiolam, Mar 8, 2005
    #1
  2. manpiolam

    S. Badel Guest

    hi,

    here is a bit of code I had and adapted to suit your needs (i guess). It processes one schematic.
    I leave it up to you to recursively process whole libraries (or post back if you need help on this).
    following a recent discussion, i included code to trigger cdf callback of the modified parameters,
    hoping this may save you from possible trouble.

    note: the code expects that the parameters to be changed are strings (interpreted as numbers), which
    is usually the case so you can enter values in suffix notation. it therefore formats the result as a
    string in suffix notation.

    hope this'll help

    stéphane



    let( (libName cellName cellsToProcess paramsToProcess multFactor cv instHeader cdfParam )
    libName="MYLIB"
    cellName="MYCELL"
    cellsToProcess = '("PMOS" "NMOS")
    paramsToProcess = '("width" "length")
    multFactor = 1000

    ; open cellview
    cv = dbOpenCellViewByType( libName cellName "schematic" nil "a" nil )

    ; iterate through cellsToProcess
    foreach( cell cellsToProcess
    ; look for corresponding instance header
    when( instHeader=car(exists(x cv~>instHeaders x~>cellName==cell))
    ; process all instances
    foreach( inst instHeader~>instances
    printf( "inst %s\n" inst~>name )
    ; get cdf
    cdfgData = cdfGetInstCDF( inst )
    ; process each parameter
    foreach( param paramsToProcess
    printf( "%s~>%s : %s -> %s\n" inst~>name param get(inst param)
    aelSuffixNotation(multFactor*evalstring(get(inst param))) )
    putprop(inst aelSuffixNotation(multFactor*evalstring(get(inst param))) param)
    ; trigger cdf callback if needed
    when( cdfgData
    setq(cdfParam cdfFindParamByName( cdfgData param ) ) && errset( evalstring(cdfParam~>callback) t)
    ) ; when
    ) ; foreach
    ) ; foreach
    ) ; when
    ) ; foreach

    dbSave(cv)
    dbClose(cv)
    ) ; let
     
    S. Badel, Mar 8, 2005
    #2
  3. manpiolam

    John Gianni Guest

    Congratulations!

    I ran a 30-second SKILL Survey on this code from within DFII.

    This SKILL code is likely well written & easily maintained now &
    seamlessly migrated in the future. It uses only public documented SKILL
    functions (22), none of which have been changed or deleted since IC441.
    Only two functions were changed (putProp & getSGq) between IC434 & 441;
    and only one function didn't exist in the IC434 days
    (dbOpenCellViewByType).

    This code passed this quick 30-second SKILL hygiene test!

    Good work!
    John Gianni



    Release Public Private Deleted Changed Undefined
    redefined Userdefined
    434 21 0 0 0 1 0 0
    441 22 0 0 2 0 0 0
    442 22 0 0 0 0 0 0
    443 22 0 0 0 0 0 0
    445 22 0 0 0 0 0 0
    446 22 0 0 0 0 0 0
    500 22 0 0 0 0 0 0
    500MSR3 22 0 0 0 0 0 0
    50032 22 0 0 0 0 0 0
    IC5033 22 0 0 0 0 0 0
    IC5033USR1 22 0 0 0 0 0 0
    IC5033USR2 22 0 0 0 0 0 0
    IC5033USR3 22 0 0 0 0 0 0
    IC5141 22 0 0 0 0 0 0
    IC5251 22 0 0 0 0 0 0
    ICOA5033 22 0 0 0 0 0 0
    ICOA5033USR1 22 0 0 0 0 0 0
    ICOA5033USR2 22 0 0 0 0 0 0
    ICOA5033USR3 22 0 0 0 0 0 0
    ICOA5141 22 0 0 0 0 0 0
    ICOA5251 22 0 0 0 0 0 0
     
    John Gianni, Mar 8, 2005
    #3
  4. manpiolam

    manpiolam Guest

    Stéphane,

    Thank you for your generosity. I did a trial of the script and had
    a little problem. I will discuss with our in-house Skill expert first.

    Thank all for the input!

    -Bill
     
    manpiolam, Mar 10, 2005
    #4
Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.