. . . VLSI
¯
Introduction to OCEAN
.spectre . ¯ ocean ¯ ocean . cadence virtuoso ,UNIX ¯ ¯ : statistical analysis Virtuoso Analog . (terminals) Ocean : ocean Parametric analysis ¯ ¯ . ¯ Design Environment .ocean ocean
.Virtuoso
SKILL Ocean
Ocean SKILL
¯ ¯
path("~/simulation /schematic/psf" "~/simlation2/schematic/psf") , t_ : ,path ¯ .string ¯ (SKILL convention )
g_ ,string
desVar( t_desVar g_value t_desVar2 g_value2) & ) ocean ,( . ¯ & setenv DISPLAY ¯ scripting ¯ ocean> : , ,strings : strcat("rain" "bow) " ¯ .( ) ocnHelp('ocean_command) . ( ¯ ) CIW .ocnHelp . : ocean > !2 !des .history 2 .des Symbols : analysis('tran …) symbols ¯ SKILL . tran symbol .ocnHelp('analysis) .symbol ¯ s_ Keyword , ¯ keyword ( ) . : analysis( 'tran ?start 0 ?stop u ?step n ) . n u 0 . ( ) transient , .C constant enums symbol ¯ , 20 icfb/virtuoso history , , ¯ .( ctrl+D) ocnHelp ( (bow ) "] )
strcat("rain" "bow") .rainbow
keyword .
2
Data type used in OCEAN data types :OCEAN
,
¯ ¯ :
¯
Return Values OCEAN
.Virtuoso : desVar("a" "b+ ") desVar("b" ) : desVar("b" ) desVar("a" "b+ ") : ocean " ¯
OCEAN
flow
. ac ( ac( 0000 2): ¯ 0000 2) : syntax
OCEAN
: :
OCEAN Scripts
.script ,ocean
,
(netlist) schematic :Test editor
ocean netlist adexl view
ADEXL test editor window .simulation Netlist Create schematic ¯ ¯ ¯ nedit :
simulator('spectre) design(t_netlist_file_location) modelFile('("/jup/tower/tower18_6M/models/tsl018.scs" "tt_18" "/jup/tower/tower18_6M/models/montetest.scs") options('scale 1e-6); resultsDir("./results")
. nedit file_name.ocn
netlist :
¯ ¯
, path cd ~ find –name "netlist" . netlist/netlist .tmpADEDir_username path ¯ ¯ ¯ netlist – ¯ path path ¯ ¯ , ocean : ocean> load("file_name.ocn") ocean , ¯ ¯ . :unix console OCEAN netlist
) design .(ocean
resultsDir
.Model files .
¯ .virtuoso/icfb
.ocean CIW
. : ¯ default save ¯
, :
save(s_saveType [t_saveName1] … [t_saveNameN] )
t_saveNameN
: ¯
s_savetype s_savetype ¯ ¯ ¯ ¯ ¯ : : ¯ ¯
¯ – ‘v – ‘i – ‘all – ‘allv – ‘alli
save( ’all )
: /Q1/b R1
save( ’i "R1" "/Q1/b" )
DC
: ,DC ocean> analysis('dc ?saveOppoint t ?oppoint "rawfile") ,dc . : ocean> run . ¯ inverter symbol cadence ¯ ¯ ¯ top ¯ .virtuoso , ¯ results : transiet DC ocean> results (dcOpInfo tranOp subckts instance dcOP Model variables output designParamVals tran Primitives ) .selectResults('dcOp) DC : , ¯ ¯ ¯ , ¯ results : ¯ . netlist saveOppoint ¯ ¯
¯
¯ ¯
ocean> v("/Vin")
0.0
ocean> v("/Vout")
1.8
.selectResults('dcOpInfo) : ocean> outputs
("/C0" "/I6/M0" "/I6/M1" "/V0" "/V1")
¯
: ocean> report(?name "I /M0") : . report(?param "vgs") NMOS M0
transient
:transient ocean> analysis('tran ?start 0 ?stop 00n ?step 0n) . run . : ocean> selectResults('tran) : ¯ ocean> plot(v("/Vin") v("/Vout")) : ocean> ocnPrint(v("/Vin") v("/Vout"))
¯ ¯
Vin & Vout [v] vs Time[ns]
Advanced OCEAN Scripting
¯ .console .fprintf :outfile of=outfile("./output_file") of=outfile("./output_file" "a") : fprintf of "Here's some sample output." fprintf of "Voltage at Vout: %f\n" v("/Vout") : close(of) : , (procedure run_test ( @optional (start_time stop_time)) fprintf(of "Start time is: %d\n" start time); fprintf(of "Stop time is: %d\n" stop_time); ) (procedure run_test2( @optional (…)) … … ) run_test run_test (0 0) ¯ . ¯ .console ¯ ¯ ¯ ocean script : ¯ ¯ ¯ ¯
load @optional .10 0 run_test IF :
if( (argument <>= argument2) then …. else …. ) foreach ¯ ¯ foreach .ModelList : ¯
ModelList=list("path/Model .scs" "path/Model2.scs" "path/Model .scs") foreach( model ModelList modelFile(model) …. ….
analysis('tran ….) run() fprintf(….) )
paramAnalsysis .paramAnalysis . ¯ ¯ . : ¯ paramRun() .
paramAnalysis( "r " ?start 200 ?stop 00 ?step 200 paramAnalysis( 'rs ?start 00 ?stop 00 ?step 200 ) ) paramRun() .C inverter
Top schematic for Inverter transient DC . ,Top . : . :
;Output file creation and constant definitions
/hm/iit/cadence/ocean/top_batch.ocn
:ocean ocean> load("top_batch.ocn") : ocean> run_all /hm/iit/cadence/ocean/top.out : /hm/iit/cadence/ocean http://homerreid.ath.cx/~homer/misc/ocean/ocean .shtml homer .1 .2