to run parametric simulation over different corners using an

  • Thread starter shanu.sudalai@gmail.com
  • Start date
S

shanu.sudalai@gmail.com

Guest
Hi,
Iam analysing an NMOS ciruit for different CORNERS and also for
different parametric simulatons sweep such as temperature and body
voltage. Iam doing all my simulations using analog artist GUI.

I could run my NMOS circuit for different CORNERS without any
parametric sweep perfectly using Analog artist. But when i try to do
parametric sweep and plot the same, iam not able to view the different
parametric sweep curves for different CORNERS using analog artist.

In regard to this problem, i also checked a previous post concerning
parametric simulation for different CORNERS using OCEAN. But i could
not understand the solution posted in that post very much since iam
very new to this cadence and also to OCEAN script.

I would like to know if there is any solution to this problem using
analog artist ????
Or
I can only run this kind of simulation using OCEAN script ???
If so i would be glad if some one can help me out to do the same using
an OCEAN script.
Also any tips using analog artist.

Thankyou very much,
shanthi
 
In article <1130151046.038204.125780@g14g2000cwa.googlegroups.com>,
shanu.sudalai@gmail.com says...
Hi,
Iam analysing an NMOS ciruit for different CORNERS and also for
different parametric simulatons sweep such as temperature and body
voltage. Iam doing all my simulations using analog artist GUI.
You want to run your parametric simualtion over corners?

I could run my NMOS circuit for different CORNERS without any
parametric sweep perfectly using Analog artist. But when i try to do
parametric sweep and plot the same, iam not able to view the different
parametric sweep curves for different CORNERS using analog artist.
This is because analog artist does not support this. The corner tool and
the parametric tool are two different tools that do not know about each
other.

In regard to this problem, i also checked a previous post concerning
parametric simulation for different CORNERS using OCEAN. But i could
not understand the solution posted in that post very much since iam
very new to this cadence and also to OCEAN script.
It would help if you put a groups.google.com reference to the thread
that you have already read in order to clarify what you already know.
With OCEAN you can do everyhing on the command line. You just have to
learn to program LISP first.

--
Svenn
 
Hi Svenn,

Yes, I wanted to do parametric simulations over corners.
In fact iam running a DC analysis and also parametric analysis for two
other variables.


I tried with analog artist, but it did not work (understood the reason
).

So i tried using OCEAN script, even that did not succeed since iam very
new to this OCEAN script.

I referred to the the thread named ""Running a parametric simulation
over corners in OCEAN"", dated 25 May 14:33. That was posted by you in
fact.

I also tried the same OCEAN script as you did, which goes as
follows,,,,

loadPcf("./cornerTool.pcf")
loadDcf("./cornerTool.dcf")
paramAnalysis("sdel" ?start 350p ?stop 400p ?lin 20 )
cornerRun()

But it didnot gave me the answers for different corners using
parametric analysis ::::

I also checked the whole thread, but i didnot get any idea regarding
the solution posted in that thread.
Can you give me clue to go ahead with this problem ??

Thanks,
shanthi
 
In article <1130318995.613733.100400@g44g2000cwa.googlegroups.com>,
shanu.sudalai@gmail.com says...
Hi Svenn,

Yes, I wanted to do parametric simulations over corners.
In fact iam running a DC analysis and also parametric analysis for two
other variables.


I tried with analog artist, but it did not work (understood the reason
).

So i tried using OCEAN script, even that did not succeed since iam very
new to this OCEAN script.

I referred to the the thread named ""Running a parametric simulation
over corners in OCEAN"", dated 25 May 14:33. That was posted by you in
fact.
I was fearing that, yes.

I also tried the same OCEAN script as you did, which goes as
follows,,,,

loadPcf("./cornerTool.pcf")
loadDcf("./cornerTool.dcf")
paramAnalysis("sdel" ?start 350p ?stop 400p ?lin 20 )
cornerRun()

But it didnot gave me the answers for different corners using
parametric analysis ::::
I didn't find any either. (Wrote my own, see below)

I also checked the whole thread, but i didnot get any idea regarding
the solution posted in that thread.
Can you give me clue to go ahead with this problem ??
I had the opportunity to switch to our in-house simulator on commandline
and did that as time was running out. In a different case I wrote my own
routine to do setup and hold time simulation over corner with parametric
sim: (You may have to add or remove some lines to get this to work for
your setup)



(load "SABdoPlot.il")
(ocnWaveformTool 'awd )
(simulator 'spectre )
(setq host (getHostName))
(setup
?numberNotation 'engineering
?messageOn nil)

(design "wk_bjerkem" "dff" "schematic" "r" )

(setq modelsDir "/modeldir")
(foreach var (list
;nth 0 1 2 3 4 5
(list "nom-LV-RT" "0.9" "nom" "27.0" -20p 20p)
(list "nom-LV-HT" "0.9" "nom" "125.0" -20p 20p)
(list "nom-HV-RT" "1.1" "nom" "27.0" -20p 20p)
(list "nom-HV-HT" "1.1" "nom" "125.0" -20p 20p)
(list "slow-LV-RT" "0.9" "slow" "27.0" -20p 20p)
(list "slow-LV-HT" "0.9" "slow" "125.0" -20p 20p)
(list "slow-HV-RT" "1.1" "slow" "27.0" -20p 20p)
(list "slow-HV-HT" "1.1" "slow" "125.0" -20p 20p)
(list "fast-LV-RT" "0.9" "fast" "27.0" -20p 20p)
(list "fast-LV-HT" "0.9" "fast" "125.0" -20p 20p)
(list "fast-HV-RT" "1.1" "fast" "27.0" -20p 20p)
(list "fast-HV-HT" "1.1" "fast" "125.0" -20p 20p))
(setq Run (nth 0 var))
(setq Voltage (nth 1 var))
(setq Corner (nth 2 var))
(setq Temp (nth 3 var))
(setq Start (nth 4 var))
(setq Stop (nth 5 var))

(resultsDir (strcat baseDir "/" Run) )
(desVar "vvdd" Voltage)
(temp Temp)
(modelFile (list (strcat modelsDir "include.scs") Corner))
(paramAnalysis "tdeltalead" ?start Start ?stop Stop ?lin 11
(paramAnalysis "tdeltalag" ?start 20p ?stop 100p ?lin 11 ))
(printf "%s %L\n" desVar("vvdd") modelFile())
(paramRun ?block nil)
(SABdoPlot ?title (strcat "setup-time " Run)
?subtitle (strcat "C=" Corner " "
"V=" Voltage "V "
"T=" Temp "degC")
?xrange '(-20p 30p)
?yrange '(0p 200p))
(SABdoPlot ?title (strcat "hold-time " Run)
?subtitle (strcat "C=" Corner " "
"V=" Voltage "V "
"T=" Temp "degC")
?xrange '(20p 100p)
?yrange '(0p 1500p))
return
)

;; SABdoPlot.il
;; This is a procedure to create some plots after each simulation
;; has been run.
procedure(SABdoPlot(
@key
(title " ")
(subtitle "")
xrange
yrange
(bbox list(100:200 800:800))
)
"Adjusts Waveform Window Size, sets titles, and Plot Options"
(let (wid plotfile)
wid = newWindow()
hiResizeWindow(wid bbox)
awvDisplayTitle(wid title)
awvSetXAxisLabel(wid "DtoC")
awvSetYAxisLabel(wid 1 "delay")
;;awvSetXLimit(wid '(-30p 30p))
awvSetXLimit(wid xrange)
;;awvSetYLimit(wid 1 '(0p 200p))
awvSetYLimit(wid 1 yrange)
awvSetOptionValue("displayAxesBy125" t)
when(subtitle
addSubwindowTitle(subtitle))
t
))
--
Svenn
 
Hi Svenn,

Thanks for your hint and the example code.

Iam working on it.

Regards,
shanthi
 
Svenn, Shanu,

Apart from ocean, there is another solution: make a model file derived from
the existing *.scs files you have, such that it is possible to step over corners.

The principle is to use a variable to switch between different altergroups. This
works nicely under 2 main conditions:

1- models are fully parameterised. This is OK to use alter statements within a
spectre structural "if", because alters are instances. But model definitions are
not instances. ( cf
http://groups.google.com/group/comp.cad.cadence/browse_frm/thread/c9e280f69248d993/4191abff33cdcad1?lnk=st&q=fogh+conditional+model+group:comp.cad.cadence&rnum=1#4191abff33cdcad1
for details.)
I remember that this was not possible in some Jazz technology because of a
single model card which was defined differently in the various corner sections.
Apart from that the model file was really nicely parameterised, so I made once a
request to James Victory of JazzSemi for parameterising the last bit.
For tsmc 180n, the model file is completely parameterised. It is possible, but
the include structure with sections is so messy that it discouraged me. It is
not nice to do with simply texteditor and diff; if you have the time you can
script a generator for tsmc (perl or SKILL).

2- use spectre 6 , in batch mode. Else, in interactive mode, the conditional
alters are considered to clash with eachother at the second run in the stepped
analysis.



Here is an example to make things clearer. Assuming your foundry models and
subcircuits only 2 "toplevel" process parameters "nTepi" and "dLe", you would
use this:

// corner analysis include for spectre
if (corner==0) {
nominal altergroup {
parameters
+ nTepi = 1
+ dLe = 0
} //altergroup nominal
} else if (corner==1) {
high altergroup {
parameters
+ nTepi = 0.885
+ dLe = 0.2e-6
} //altergroup high
} else if (corner==-1) {
low altergroup {
parameters
+ nTepi = 1.115
+ dLe = -0.2e-6
} //altergroup low
} else {
assertWrongCorner assert message="corner variable out of range."
} //if corner in [0 1 -1]


instead of using sections. Install MMSIM version >6 if you do not use that
already. Then you would use, for instance in a .cdsinit file, the setting
envSetVal("spectre.envOpts" "controlMode" 'string "batch")

After that you are ready and you can do a param step on the variable "corner",
and nest this within (or around) any over parameter stepping.

--


Svenn Are Bjerkem wrote:

In article <1130318995.613733.100400@g44g2000cwa.googlegroups.com>,
shanu.sudalai@gmail.com says...

Hi Svenn,

Yes, I wanted to do parametric simulations over corners.
In fact iam running a DC analysis and also parametric analysis for two
other variables.


I tried with analog artist, but it did not work (understood the reason
).

So i tried using OCEAN script, even that did not succeed since iam very
new to this OCEAN script.

I referred to the the thread named ""Running a parametric simulation
over corners in OCEAN"", dated 25 May 14:33. That was posted by you in
fact.


I was fearing that, yes.


I also tried the same OCEAN script as you did, which goes as
follows,,,,

loadPcf("./cornerTool.pcf")
loadDcf("./cornerTool.dcf")
paramAnalysis("sdel" ?start 350p ?stop 400p ?lin 20 )
cornerRun()

But it didnot gave me the answers for different corners using
parametric analysis ::::


I didn't find any either. (Wrote my own, see below)


I also checked the whole thread, but i didnot get any idea regarding
the solution posted in that thread.
Can you give me clue to go ahead with this problem ??


I had the opportunity to switch to our in-house simulator on commandline
and did that as time was running out. In a different case I wrote my own
routine to do setup and hold time simulation over corner with parametric
sim: (You may have to add or remove some lines to get this to work for
your setup)



(load "SABdoPlot.il")
(ocnWaveformTool 'awd )
(simulator 'spectre )
(setq host (getHostName))
(setup
?numberNotation 'engineering
?messageOn nil)

(design "wk_bjerkem" "dff" "schematic" "r" )

(setq modelsDir "/modeldir")
(foreach var (list
;nth 0 1 2 3 4 5
(list "nom-LV-RT" "0.9" "nom" "27.0" -20p 20p)
(list "nom-LV-HT" "0.9" "nom" "125.0" -20p 20p)
(list "nom-HV-RT" "1.1" "nom" "27.0" -20p 20p)
(list "nom-HV-HT" "1.1" "nom" "125.0" -20p 20p)
(list "slow-LV-RT" "0.9" "slow" "27.0" -20p 20p)
(list "slow-LV-HT" "0.9" "slow" "125.0" -20p 20p)
(list "slow-HV-RT" "1.1" "slow" "27.0" -20p 20p)
(list "slow-HV-HT" "1.1" "slow" "125.0" -20p 20p)
(list "fast-LV-RT" "0.9" "fast" "27.0" -20p 20p)
(list "fast-LV-HT" "0.9" "fast" "125.0" -20p 20p)
(list "fast-HV-RT" "1.1" "fast" "27.0" -20p 20p)
(list "fast-HV-HT" "1.1" "fast" "125.0" -20p 20p))
(setq Run (nth 0 var))
(setq Voltage (nth 1 var))
(setq Corner (nth 2 var))
(setq Temp (nth 3 var))
(setq Start (nth 4 var))
(setq Stop (nth 5 var))

(resultsDir (strcat baseDir "/" Run) )
(desVar "vvdd" Voltage)
(temp Temp)
(modelFile (list (strcat modelsDir "include.scs") Corner))
(paramAnalysis "tdeltalead" ?start Start ?stop Stop ?lin 11
(paramAnalysis "tdeltalag" ?start 20p ?stop 100p ?lin 11 ))
(printf "%s %L\n" desVar("vvdd") modelFile())
(paramRun ?block nil)
(SABdoPlot ?title (strcat "setup-time " Run)
?subtitle (strcat "C=" Corner " "
"V=" Voltage "V "
"T=" Temp "degC")
?xrange '(-20p 30p)
?yrange '(0p 200p))
(SABdoPlot ?title (strcat "hold-time " Run)
?subtitle (strcat "C=" Corner " "
"V=" Voltage "V "
"T=" Temp "degC")
?xrange '(20p 100p)
?yrange '(0p 1500p))
return
)

;; SABdoPlot.il
;; This is a procedure to create some plots after each simulation
;; has been run.
procedure(SABdoPlot(
@key
(title " ")
(subtitle "")
xrange
yrange
(bbox list(100:200 800:800))
)
"Adjusts Waveform Window Size, sets titles, and Plot Options"
(let (wid plotfile)
wid = newWindow()
hiResizeWindow(wid bbox)
awvDisplayTitle(wid title)
awvSetXAxisLabel(wid "DtoC")
awvSetYAxisLabel(wid 1 "delay")
;;awvSetXLimit(wid '(-30p 30p))
awvSetXLimit(wid xrange)
;;awvSetYLimit(wid 1 '(0p 200p))
awvSetYLimit(wid 1 yrange)
awvSetOptionValue("displayAxesBy125" t)
when(subtitle
addSubwindowTitle(subtitle))
t
))
 

Welcome to EDABoard.com

Sponsor

Back
Top