how to scale OPUS Schematic

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



manpiolam@gmail.com wrote:
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
 
S. Badel wrote:
Here is a bit of code I had and adapted to suit your needs (i guess).
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
 
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



John Gianni wrote:
S. Badel wrote:
Here is a bit of code I had and adapted to suit your needs (i
guess).

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
 

Welcome to EDABoard.com

Sponsor

Back
Top