Difference between revisions of "Simulation Tutorial"

From Vlsiwiki
Jump to: navigation, search
(Adding Model Library Files)
m (Adding Model Library Files)
 
(139 intermediate revisions by 7 users not shown)
Line 1: Line 1:
 +
There are many ways to simulate from Virtuoso. Which one is best depends on your PDK and your final goals.
 +
 +
== Setting up analogLib ==
 +
 +
Before you start virtuoso, make sure to add the analogLib to your libraries. Do this by editing cds.lib in your home directory (or in the project directory). You should see something like this:
 +
 +
DEFINE analogLib $CDSHOME/tools/dfII/etc/cdslib/artist/analogLib
 +
DEFINE US_8ths  $CDSHOME/tools/dfII/etc/cdslib/sheets/US_8ths
 +
DEFINE basic    $CDSHOME/tools/dfII/etc/cdslib/basic
 +
DEFINE cdsDefTechLib $CDSHOME/tools/dfII/etc/cdsDefTechLib
 +
DEFINE NCSU_TechLib_FreePDK45  $PDK_DIR/ncsu_basekit/lib/NCSU_TechLib_FreePDK45
 +
DEFINE NCSU_Devices_FreePDK45  $PDK_DIR/ncsu_basekit/lib/NCSU_Devices_FreePDK45
 +
DEFINE cmpe_222_lib /mada/users/rsankara/cmpe_222_lib
 +
 +
 +
In case your cds.lib does NOT have analogLib or one of the above libraries, then add it as follows:
 +
DEFINE  analogLib $CDSHOME/tools/dfII/etc/cdslib/artist/analogLib
 +
 +
Save the file and start virtuoso. You should see a new library in the library manager.
 +
 
== Select Analog Environment ==
 
== Select Analog Environment ==
With the schematic file open, Ultrasim can be invoked from within icfb.  
+
With the schematic file open, hspice can be invoked from within Virtuoso.  
:Select <b>Tools &rarr; Analog Environment</b>. (See [http://bacon.cse.ucsc.edu/cgi-bin/wiki.pl?Basic_GUI_Usage#fig1 figure 1])<br>  
+
:Select <b>Launch &rarr; ADE L</b>. <br>
At this stage, it is assumed that there is a schematic open with power sources and signal inputs defined.  Otherwise Ultrasim is going to simulate a non powered circuit which is pointless.
+
  
[[Image:ultrasim_setup1.jpg|400px]]
+
== Select Simulator (<nowiki>hspiceD</nowiki>) ==
 +
Virtuoso Analog Design Environment supports various simulators such as hspiceD, Spectre, and Ultrasim. hspiceD was previously chosen. Now, run   
 +
:Select<b> <nowiki> Setup &rarr; Simulator/Directory/Host. </nowiki> </b>
 +
A follow up window will pop up giving your simulator options. Select '''hspiceD'''. Also specify a run directory. Press ok.
  
  
  
This is the window that pops up once Analog Environment is chosen.
+
<b>Simulation Run Directory</b> indicates where your simulation files will be stored.
 +
The generated netlist file will be stored within in a file called "netlist".
 +
All of the other options necessary for running the simulation are stored in this directory as well in the form of separate files like netlistHeader, netlistFooter.
 +
When you run the simulation, all the options are put together by the simulator.
 +
This is useful for storing separate simulation setups for different parts of your design.
  
[[Image:ultrasim_setup2.jpg|400px]]
 
  
  
----
+
== Choosing Analysis Type and Length ==
 +
From the Analog Environment window
 +
:Select <b>Analysis &rarr; Choose </b>
  
== Select Simulator (<nowiki>UltraSim</nowiki>) ==
+
Make sure to select tran and specify an appropriate stop time and time step (example 1ns).
Virtuoso Analog Design Environment supports various simulators such is hSpice, Spectre, and Ultrasim. Ultrasim will have to be chosen before simulations can be run.  
+
The start time is typically 0.
:Select<b> <nowiki> Setup &rarr; Simulator/Directory/Host. </nowiki> </b> (See [http://bacon.cse.ucsc.edu/cgi-bin/wiki.pl?Basic_GUI_Usage#fig2 figure 2])
+
Be sure to choose a stop time that is greater than the period of the input signal.
A follow up window will pop up giving your simulator options.
+
Hspice supports the SI prefixes so 500n would be 500 nano seconds.
  
[[Image:ultrasim_setup3.jpg|400px]]
 
  
 +
== Adding Model Library Files ==
 +
The next step is to add the spice data for the simulator.
 +
:Select <b> Setup &rarr; Model Library Setup </b>.
 +
We will be adding the data for the NMOS and PMOS transistor.
  
  
With current settings, <tt>hspiceD is chosen by default every time Analog Environment is launched.</tt> 
+
If you are using FreePDK as your Process Design Kit,
:Click on the Simulator button and choose <i>Ultrasim</i> .
+
  
<b>Project Library</b> indicates where your simulation files will be stored.
+
Click on <i>Add File</i> and add these files:
The generated netlist file will be stored within <b> <nowiki> ~/cadence/simulation/YOUR SCHEMATIC/simulation/netlist/netlist </nowiki> </b>.
+
  
<i>*It is important to note that once the simulation has been ran, it can be initiated again via the console command <br> <b> <nowiki> ~/cadence/simulation/YOUR SCHEMATIC/simulation/netlist/RUNSIMULATION </nowiki> </b>. <br> This way the netlist can be manually edited, saved, and simulated again without having to edit schematic and reinitiating ultrasim.</i>
+
$PDK_DIR/ncsu_basekit/models/hspice/tran_models/models_nom/NMOS_VTL.inc
 +
$PDK_DIR/ncsu_basekit/models/hspice/tran_models/models_nom/PMOS_VTL.inc
  
----
 
  
== Choosing Analysis Length ==
+
Select <b> OK </b> when finished.
From the Analog Environment window
+
:Select <b>Analysis &rarr; Choose </b>  
+
  
This will bring up a smaller window prompting you for the duration of the simulation.  
+
These paths will be automatically written as ".include" into a file called input.ckt
  
[[Image:ultrasim_setup4.jpg|400px]]
 
  
 +
If you are using SCMOS(TSMC_02d) as your Process Design Kit,
  
Make sure <b>tran</b> is selected.  The other option <b>envlp</b> is for fast envelope analysis for use on RF circuits. 
+
Click on <i>Add File</i> and add these files instead:
Be sure to choose a stop time that is greater than the period of the input signal.
+
Ultrasim supports the SI prefixes so 500u would be 500 micro seconds.
+
  
== Adding Model Library Files ==
+
/mada/software/techfiles/ncsu/models/hspice/public/tsmc18dP.m
The next step is to add the spice data for the simulator.
+
/mada/software/techfiles/ncsu/models/hspice/public/tsmc18dN.m
:Select <b> Setup &rarr; Model Libraries </b>. (See [http://bacon.cse.ucsc.edu/cgi-bin/wiki.pl?Basic_GUI_Usage#fig2 figure 2])
+
We will be adding the data for the Nmos and Pmos transistor using the TSMC 180nm process.
+
  
[[Image:ultrasim_setup5.jpg|400px]]
 
  
 +
Select <b> OK </b> when finished.
  
  
:Click on <i>browse</i> and go to: <b>/mada/software/techfiles/NCSU_CDK_1.5.1/models/hspice/public</b><br>
 
(See [http://bacon.cse.ucsc.edu/cgi-bin/wiki.pl?Basic_GUI_Usage#fig5 figure 5])
 
  
:Select files
+
Perform this '''Adding Model Library Files''' step only for the process you are supposed to use. Adding multiple process files may lead to simulation problems.
:/mada/software/techfiles/NCSU_CDK_1.5.1/models/hspice/public/public/tsmc18dN.m
+
:/mada/software/techfiles/NCSU_CDK_1.5.1/models/hspice/public/public/tsmc18dP.m
+
  
Be sure to click on add after selecting each file.  Select <b> OK </b> when finished.
+
== Running Simulation ==
  
== Selecting Outputs to be Plotted ==
+
To run a simulation, first select the type of analysis in <b>Analysis &rarr; Choose...</b> For a transient, specify the stop time (e.g. 1n).
From the Analog Environment window
+
:Select <b>Outputs &rarr; To Be Plotted &rarr; Select on Schematic </b> (See [http://bacon.cse.ucsc.edu/cgi-bin/wiki.pl?Basic_GUI_Usage#fig2 figure 2])
+
Now refer back to your schematic that is open on a different window, click on various parts to add it to the output section of the Analog Design Environment Window. (for example, the output pin Z) in your schematic that you want to be plotted. Repeat this as necessary for all nets you want to see (for example, the input pin IN).
+
  
----
+
It is easier to not add voltage sources to the inputs directly and instead make stimulus in a file. You can edit a stimulus file directly and include it in your simulation.
 +
Create a text file named ''stimulus.sp'' in your simulation directory and create something like this in it:
 +
 +
// Stimulus Statements Hspice format
 +
.global VDD! vdd! GND! gnd!
 +
vdd vdd! 0 vhigh
 +
.param vhigh=1200mV
 +
.param vlow=0
 +
.param tdelay=0n
 +
.param trise=5p * pick a reasonable value
 +
.param tfall=5p * pick a reasonable value
 +
.param tpulse = 10n
 +
v_A  A  0 pat (vhigh vlow tdelay trise tfall tpulse  b01010101  rb=1 r=1)
 +
C_Z Z    0 100fF * pick a reasonable value
  
== Running Simulation and Ouput Window ==
+
The above statements define the global signals, define the '''vdd''' voltage using a parametrized statement and also some timing values.
:Select <b> Simulation  &rarr; Netlist and Run </b>
+
These statements may also be written in the netlist file itself if you wish to have it all in a single file.
This will generate the netlist file, run the simulation, and feed the results to the waveform viewer. (See [http://bacon.cse.ucsc.edu/cgi-bin/wiki.pl?Basic_GUI_Usage#fig6 figure 6])
+
The '''.param''' statements above are used for parameterizing simulation variables. This way, if you wish to change some values for simulation, you only need to change it in the '''.param''' statement and it will take effect throughout.
 +
The '''v_A''' is a voltage source statement producing a bit stream of 01010101 as stimulus with rise,fall and pulse width times defined in the '''.param''' statements.
 +
Save the file you have now created as stimulus.sp and store it in your simulation directory.
  
 +
To specify the stimulus, select <b>Setup &rarr; Simulation Files..</b>. and provide the path to your ''stimulus.sp''.
  
http://bacon.cse.ucsc.edu/vlsi/ultrasim_tutorial/output_waveform.png
 
  
 +
For more information on Hspice commands you can look at the manual:
  
----
+
/projects/cmpe122/software/I-2013.12-1/hspice/docs_help/hspice_sa.pdf
 +
 
 +
== Ouput Window ==
 +
Before Running, select <b>Output &rarr; Save All...</b> to save all schematic data. (Note, this might not be best on big designs!) Or, you can select <b>Outputs &rarr; To Plot &rarr; Select on Schematic</b> and then click on all of the items on the schematic.
 +
 
 +
Then,
 +
:Select <b> Simulation  &rarr; Run</b>
 +
This will generate the netlist file, run the simulation, and save the results for the waveform viewer. You should re-run this every time you change your schematic.
 +
 
 +
You can also select <b>Simulation &rarr; Create Raw</b> to create the raw simulation file for debugging. You should be able to see your include stimulus, netlist, and a bunch of other stuff.
 +
 
 +
If this pops up a window that says it failed, fix the previous options. You need to debug this by looking at the output of the simulator in si.log (which is the output of running the simulator, if the simulator failed to run) or si.out (which is the actual simulator output if it ran successfully, but simulation may have failed). This will show you if it even got to the point of running the simulator.
 +
 
 +
 
 +
If it succeeded, you can select <b> Tools &rarr; Waveform  </b>. When you do this, you get three windows:
 +
 
 +
[[Image:waveform_graph.jpg|400px]]
 +
[[Image:waveform_browser.jpg|400px]]
 +
[[Image:waveform_results.jpg|400px]]
 +
 
 +
Select the "File Open" icon and then find the appropriate "raw" result file in the browser. This should open the data in the browser. Double click on the transient simulation directory and you should see signal names that correspond to your design. Double click on "A" to add it. Change the upper right option to "Append" and double click on "Z" to add it as well. If you don't change the option, it will replace the A waveform with Z. If there are problems with vdd! and gnd! you can debug that here.
 +
 
 +
You should get something that looks similar to this in the graph window:
 +
 
 +
[[Image:output_waveform.jpg|400px]]
 +
 
 +
Note that your signals should always rise to full vdd (1.2V) and down to gnd (0V) or else something is wrong with your logic. This is CMOS so everything is "rail to rail". It is likely an unconnected supply voltage or floating body.
  
 
== Waveform - Zooming and Trace ==
 
== Waveform - Zooming and Trace ==
Line 86: Line 143:
  
 
=== Zoom ===
 
=== Zoom ===
:Select <b> Zoom &rarr; X Zoom </b> (See [http://bacon.cse.ucsc.edu/cgi-bin/wiki.pl?Basic_GUI_Usage#fig6 figure 6]).
+
:Select <b> Zoom &rarr; X Zoom </b>.
 
:Now click and drag in the waveform window to select the x-range you want to zoom to.
 
:Now click and drag in the waveform window to select the x-range you want to zoom to.
 
   
 
   
Line 92: Line 149:
 
:Select <b> Marker &rarr; Place &rarr; Trace Marker </b>
 
:Select <b> Marker &rarr; Place &rarr; Trace Marker </b>
  
http://bacon.cse.ucsc.edu/vlsi/ultrasim_tutorial/zoom_waveform.png
+
[[Image:zoom_waveform.jpg|400px]]
  
:Click on one of the waveforms in the window. This places a small label on the waveform. You can drag this marker anywhere on the waveform (See [http://bacon.cse.ucsc.edu/cgi-bin/wiki.pl?Basic_GUI_Usage#fig7 figure 7]).
+
:Click on one of the waveforms in the window. This places a small label on the waveform. You can drag this marker anywhere on the waveform.
+
 
----
+
=== Separate Windows ===
 +
:Sometimes the window will get too cluttered. You can plot each signal in a separate window by clicking the 4th icon in the toolbar from the left to put it in "Strip Mode".
 +
 
 +
=== Reloading ===
 +
:If you make a change and resimulation, you can simply click <b> File &rarr; Reload </b>
 +
 
 +
=== Exporting Tip ===
 +
:If you intend to export the plot, it would be wise to change the background color to something other than black. In addition you can change the width of the lines by right clicking on the line and selecting properties.
 +
 
 +
== Power/Energy Analysis ==
 +
 
 +
To enable power analysis in hspice, add this statement to your stimulus file:
 +
 
 +
.measure tran toplvl_avg_power avg  power from=0ns to=100ns
 +
.measure tran toplvl_avg_energ integ power from=0ns to=100ns
 +
.measure tran toplvl_avg_current avg I(VDD) from=0ns to=100ns
 +
 
 +
For more information on the .measure syntax, please refer hspice user guide at:
 +
/projects/cmpe122/software/synopsys/I-2013.12-1/hspice/docs_help/hspice_sa.pdf
 +
 
 +
You can then plot the power in the waveform viewer. It will be shown with all the other signals. In order to find the average power, you select :pwr and click on the calculator option instead of the plot option. In the calculator window, select "average" in the special functions. Then select the "Evaluate" button. (It is on the right of the "Clip" option and to the left of the Table and Append options). This will give you the average power in Watts.  
 +
 
 +
[[Image:spectrePower.jpg|400px]]
 +
 
 +
 
 +
To enable power analysis in hspice
 +
:1) go to Simulation->Analog Options->All
 +
This will open a dialog box listing various Hspice analysis commands and fields for their values.
 +
Refer to Hspice documentation before using any of these options
 +
 
 +
== Documentation ==
 +
 
 +
Finally, for more help...
 +
 
 +
:Open file: /projects/cmpe122/software/synopsys/I-2013.12-1/hspice/docs_help/hspice_sa.pdf

Latest revision as of 22:37, 24 December 2020

There are many ways to simulate from Virtuoso. Which one is best depends on your PDK and your final goals.

Setting up analogLib

Before you start virtuoso, make sure to add the analogLib to your libraries. Do this by editing cds.lib in your home directory (or in the project directory). You should see something like this:

DEFINE analogLib $CDSHOME/tools/dfII/etc/cdslib/artist/analogLib
DEFINE US_8ths   $CDSHOME/tools/dfII/etc/cdslib/sheets/US_8ths
DEFINE basic     $CDSHOME/tools/dfII/etc/cdslib/basic
DEFINE cdsDefTechLib $CDSHOME/tools/dfII/etc/cdsDefTechLib
DEFINE NCSU_TechLib_FreePDK45  $PDK_DIR/ncsu_basekit/lib/NCSU_TechLib_FreePDK45
DEFINE NCSU_Devices_FreePDK45  $PDK_DIR/ncsu_basekit/lib/NCSU_Devices_FreePDK45
DEFINE cmpe_222_lib /mada/users/rsankara/cmpe_222_lib


In case your cds.lib does NOT have analogLib or one of the above libraries, then add it as follows:

DEFINE   analogLib $CDSHOME/tools/dfII/etc/cdslib/artist/analogLib

Save the file and start virtuoso. You should see a new library in the library manager.

Select Analog Environment

With the schematic file open, hspice can be invoked from within Virtuoso.

Select Launch → ADE L.

Select Simulator (hspiceD)

Virtuoso Analog Design Environment supports various simulators such as hspiceD, Spectre, and Ultrasim. hspiceD was previously chosen. Now, run

Select Setup → Simulator/Directory/Host.

A follow up window will pop up giving your simulator options. Select hspiceD. Also specify a run directory. Press ok.


Simulation Run Directory indicates where your simulation files will be stored. The generated netlist file will be stored within in a file called "netlist". All of the other options necessary for running the simulation are stored in this directory as well in the form of separate files like netlistHeader, netlistFooter. When you run the simulation, all the options are put together by the simulator. This is useful for storing separate simulation setups for different parts of your design.


Choosing Analysis Type and Length

From the Analog Environment window

Select Analysis → Choose

Make sure to select tran and specify an appropriate stop time and time step (example 1ns). The start time is typically 0. Be sure to choose a stop time that is greater than the period of the input signal. Hspice supports the SI prefixes so 500n would be 500 nano seconds.


Adding Model Library Files

The next step is to add the spice data for the simulator.

Select Setup → Model Library Setup .

We will be adding the data for the NMOS and PMOS transistor.


If you are using FreePDK as your Process Design Kit,

Click on Add File and add these files:

$PDK_DIR/ncsu_basekit/models/hspice/tran_models/models_nom/NMOS_VTL.inc
$PDK_DIR/ncsu_basekit/models/hspice/tran_models/models_nom/PMOS_VTL.inc


Select OK when finished.

These paths will be automatically written as ".include" into a file called input.ckt


If you are using SCMOS(TSMC_02d) as your Process Design Kit,

Click on Add File and add these files instead:

/mada/software/techfiles/ncsu/models/hspice/public/tsmc18dP.m
/mada/software/techfiles/ncsu/models/hspice/public/tsmc18dN.m


Select OK when finished.


Perform this Adding Model Library Files step only for the process you are supposed to use. Adding multiple process files may lead to simulation problems.

Running Simulation

To run a simulation, first select the type of analysis in Analysis → Choose... For a transient, specify the stop time (e.g. 1n).

It is easier to not add voltage sources to the inputs directly and instead make stimulus in a file. You can edit a stimulus file directly and include it in your simulation. Create a text file named stimulus.sp in your simulation directory and create something like this in it:

// Stimulus Statements Hspice format 
.global VDD! vdd! GND! gnd!
vdd vdd! 0 vhigh
.param vhigh=1200mV
.param vlow=0
.param tdelay=0n
.param trise=5p * pick a reasonable value
.param tfall=5p * pick a reasonable value
.param tpulse = 10n
v_A  A  0 pat (vhigh vlow tdelay trise tfall tpulse  b01010101  rb=1 r=1)
C_Z Z     0 100fF * pick a reasonable value

The above statements define the global signals, define the vdd voltage using a parametrized statement and also some timing values. These statements may also be written in the netlist file itself if you wish to have it all in a single file. The .param statements above are used for parameterizing simulation variables. This way, if you wish to change some values for simulation, you only need to change it in the .param statement and it will take effect throughout. The v_A is a voltage source statement producing a bit stream of 01010101 as stimulus with rise,fall and pulse width times defined in the .param statements. Save the file you have now created as stimulus.sp and store it in your simulation directory.

To specify the stimulus, select Setup → Simulation Files... and provide the path to your stimulus.sp.


For more information on Hspice commands you can look at the manual:

/projects/cmpe122/software/I-2013.12-1/hspice/docs_help/hspice_sa.pdf

Ouput Window

Before Running, select Output → Save All... to save all schematic data. (Note, this might not be best on big designs!) Or, you can select Outputs → To Plot → Select on Schematic and then click on all of the items on the schematic.

Then,

Select Simulation → Run

This will generate the netlist file, run the simulation, and save the results for the waveform viewer. You should re-run this every time you change your schematic.

You can also select Simulation → Create Raw to create the raw simulation file for debugging. You should be able to see your include stimulus, netlist, and a bunch of other stuff.

If this pops up a window that says it failed, fix the previous options. You need to debug this by looking at the output of the simulator in si.log (which is the output of running the simulator, if the simulator failed to run) or si.out (which is the actual simulator output if it ran successfully, but simulation may have failed). This will show you if it even got to the point of running the simulator.


If it succeeded, you can select Tools → Waveform . When you do this, you get three windows:

Waveform graph.jpg Waveform browser.jpg Waveform results.jpg

Select the "File Open" icon and then find the appropriate "raw" result file in the browser. This should open the data in the browser. Double click on the transient simulation directory and you should see signal names that correspond to your design. Double click on "A" to add it. Change the upper right option to "Append" and double click on "Z" to add it as well. If you don't change the option, it will replace the A waveform with Z. If there are problems with vdd! and gnd! you can debug that here.

You should get something that looks similar to this in the graph window:

Output waveform.jpg

Note that your signals should always rise to full vdd (1.2V) and down to gnd (0V) or else something is wrong with your logic. This is CMOS so everything is "rail to rail". It is likely an unconnected supply voltage or floating body.

Waveform - Zooming and Trace

With the waveform window open, you can zoom in and find exact values.

Zoom

Select Zoom → X Zoom .
Now click and drag in the waveform window to select the x-range you want to zoom to.

Tracing

Select Marker → Place → Trace Marker

Zoom waveform.jpg

Click on one of the waveforms in the window. This places a small label on the waveform. You can drag this marker anywhere on the waveform.

Separate Windows

Sometimes the window will get too cluttered. You can plot each signal in a separate window by clicking the 4th icon in the toolbar from the left to put it in "Strip Mode".

Reloading

If you make a change and resimulation, you can simply click File → Reload

Exporting Tip

If you intend to export the plot, it would be wise to change the background color to something other than black. In addition you can change the width of the lines by right clicking on the line and selecting properties.

Power/Energy Analysis

To enable power analysis in hspice, add this statement to your stimulus file:

.measure tran toplvl_avg_power avg   power from=0ns to=100ns
.measure tran toplvl_avg_energ integ power from=0ns to=100ns
.measure tran toplvl_avg_current avg I(VDD) from=0ns to=100ns

For more information on the .measure syntax, please refer hspice user guide at:

/projects/cmpe122/software/synopsys/I-2013.12-1/hspice/docs_help/hspice_sa.pdf

You can then plot the power in the waveform viewer. It will be shown with all the other signals. In order to find the average power, you select :pwr and click on the calculator option instead of the plot option. In the calculator window, select "average" in the special functions. Then select the "Evaluate" button. (It is on the right of the "Clip" option and to the left of the Table and Append options). This will give you the average power in Watts.

SpectrePower.jpg


To enable power analysis in hspice

1) go to Simulation->Analog Options->All

This will open a dialog box listing various Hspice analysis commands and fields for their values. Refer to Hspice documentation before using any of these options

Documentation

Finally, for more help...

Open file: /projects/cmpe122/software/synopsys/I-2013.12-1/hspice/docs_help/hspice_sa.pdf