filename = "ICSkillSharing.ocn"
design_dir = "/home/IC/Documents/analog_ic/simulation/inv/spectre/schematic/netlist/netlist" ;dir of netlist file
modelfile_dir = "/home/IC/Documents/pdks/smic18mmrf/models/spectre/ms018_v1p9_spe.lib" ;dir of process models
for(corner_sim 1 3 ;;loop for corner, corner_mos、corner_bjt、corner_res、corner_cap are different corners
if(corner_sim == 1 then corner_dir = "tt" corner_mos = list(modelfile_dir "tt") corner_res = list(modelfile_dir "res_tt") corner_cap = list(modelfile_dir "mim_tt") corner_bjt = list(modelfile_dir "bjt_tt"))
if(corner_sim == 2 then corner_dir = "ss" corner_mos = list(modelfile_dir "ss") corner_res = list(modelfile_dir "res_tt") corner_cap = list(modelfile_dir "mim_tt") corner_bjt = list(modelfile_dir "bjt_tt"))
if(corner_sim == 3 then corner_dir = "ff" corner_mos = list(modelfile_dir "ff") corner_res = list(modelfile_dir "res_tt") corner_cap = list(modelfile_dir "mim_tt") corner_bjt = list(modelfile_dir "bjt_tt"))
;if(corner_sim == 4 then corner_dir = "sf" corner_mos = list(modelfile_dir "sf") corner_res = list(modelfile_dir "res_tt") corner_cap = list(modelfile_dir "mim_tt") corner_bjt = list(modelfile_dir "bjt_tt"))
;if(corner_sim == 5 then corner_dir = "fs" corner_mos = list(modelfile_dir "fs") corner_res = list(modelfile_dir "res_tt") corner_cap = list(modelfile_dir "mim_tt") corner_bjt = list(modelfile_dir "bjt_tt"))
for(vdd_sim 1 3 ;;loop for power supply
if( vdd_sim == 1 then vdd = 3.0 vdd_dir = "3p0")
if( vdd_sim == 2 then vdd = 3.3 vdd_dir = "3p3")
if( vdd_sim == 3 then vdd = 2.7 vdd_dir = "2p7")
for(temp_sim 1 3 ;;loop for temp
if(temp_sim == 1 then temp = 27 temp_dir = "27")
if(temp_sim == 2 then temp = -40 temp_dir = "m40")
if(temp_sim == 3 then temp = 125 temp_dir = "125")
results_dir = strcat(substring(design_dir 1 62) substring(filename 1 14) "/" corner_dir "_v" vdd_dir "_t" temp_dir) ;save results dir
simulator( 'spectre ) ;setup siulator
design( design_dir ) ;netlist file
resultsDir( results_dir ) ;save results dir
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;; add simulation script blow ;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
modelFile( corner_mos corner_bjt corner_res corner_cap ) ;setup process models
analysis('dc ?saveOppoint t ?param "va" ?start "0"
?stop "3" ) ;add dc simulation
;analysis('ac ?start "1" ?stop "1G" ) ;add ac simulation
;analysis('stb ?start "1" ?stop "10G" ?probe "/IPRB0" ) ;add stb simulation
analysis('tran ?stop "10u" ?errpreset "conservative" ) ;add tran simulation
desVar( "avdd" vdd ) ;setup avdd
desVar( "va" 1.5 ) ;setup va
envOption(
'analysisOrder list("dc" "tran")
) ;setup simulation order
option( ?categ 'turboOpts
'apsplus t
'errorLevel "Moderate"
'uniMode "APS"
) ;use aps
saveOption( 'subcktprobelvl "5" ) ;save results option, for 5th subckt blow
saveOption( 'currents "all" ) ;save all current
temp( temp ) ;setup temp
run() ;start the simulation
selectResult( 'tran ) ;select result for tran simulation
VTEST = average(VT("/Y"))
plot(getData("/A") getData("/Y") ?expr list(strcat("A_" corner_dir "_v" vdd_dir "_t" temp_dir) strcat("Y_" corner_dir "_v" vdd_dir "_t" temp_dir)) ) ;plot A & Y
selectResult( 'dc ) ;select result for dc simulation
plot(getData("/A") getData("/Y") ?expr list(strcat("A:" corner_dir "_v" vdd_dir "_t" temp_dir) strcat("Y:" corner_dir "_v" vdd_dir "_t" temp_dir)) ) ;plot A & Y
;selectResult( 'ac ) ;select result for ac simulation
;plot(getData("/A") getData("/Y") ?expr list(strcat("A:" corner_dir "_v" vdd_dir "_t" temp_dir) strcat("Y:" corner_dir "_v" vdd_dir "_t" temp_dir)) ) ;plot A & Y
;YN = clip((- VT("/Y")) 1e-06 9e-06) ;use calculator
;plot( YN ?expr list( strcat("YN:" corner_dir "_v" vdd_dir "_t" temp_dir) ) ) ;plot result
;results_outfile = outfile(strcat(substring(design_dir 1 62) substring(filename 1 14) ".txt") "a") ;save VTEST to a file
;fprintf(results_outfile "The PVT are:\t\t %s_v%s_t%s\n" corner_dir vdd_dir temp_dir) ;save PVT info
;fprintf(results_outfile "The results are:\t VTEST = %f\n" VTEST) ;save result to file
;close(results_outfile) ;close file opened before
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;; add simulation script above ;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
) ;;end loop for temp
) ;;end loop for power supply
) ;;end loop for corner