Seguindo o tutorial da ALTERA para o MODELSIM

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar

Este tutorial ensina como utilizar o Modelsim para realizar a simulação funcional e também temporal. É requisito para a realização do tutorial o acesso ao software Quartus II e Modelsim ou Modelsim-ALTERA.

PASSO 1

/opt/altera/13.0sp1/modelsim_ase/bin/vsim
  • Para usar o ModelSim 10.1d no LabProg abra um terminal e digite:
/opt/altera/13.0/quartus/modelsim_ase/linux/vsim

PASSO 2 - Functional Simulation with ModelSim

Creating a Project

  • To create a project in ModelSim, select [File > New > Project...]
project name = serial_adder,
project location <= <subdiretorio do usuário>/Using_ModelSim/functional
default library name <= tutorial
copy settings field.
click [OK]
  • Since the file for this tutorial exists, click Add Existing File and select serial.vhd file.
  • Once the file is added to the project, it will appear in the Project tab
  • click [Close]

Compiling a Project

Compilation in ModelSim checks if the project files are correct and creates intermediate data that will be used during simulation.

  • select [Compile > Compile All]. A green check mark will appear to the right of the serial.vhd file in the Project tab.

Preparing Simulation

  • Put Modelsim in simulation mode by selecting [Simulate > Start Simulation...]
  • The window to start simulation consists of many tabs. For the purposes of the functional simulation, we only need to look at the Design tab.
  • In the Design tab you will see a list of libraries and entities you can simulate. In this tutorial, simulate a entity called serial.
  • To select this entity, scroll down and locate the tutorial library and click on the plus (+) sign.
  • You will see three entities available for simulation: FSM, serial, and shift_reg. Select the serial entity (Design Unit(s) = tutorial.serial) and click [OK] to begin simulation.
See the equivalent tcl command in Transcript window:
vsim tutorial.serial
  • Using the sim tab and the Objects window we can select signals for simulation. To add a signal to simulation, rightclick (with shift key) on the signals names in the Objects window and [select Add > To Wave > Selected Signals]. Add signals A, B, resetn, start, clock, sumfrom serial entity,
add wave  \
sim:/serial/A \
sim:/serial/B \
sim:/serial/start \
sim:/serial/resetn \
sim:/serial/clock \
sim:/serial/sum
  • Add signal current_state and counter from my_control component.
add wave  \
sim:/serial/my_control/current_state \
sim:/serial/my_control/counter
  • There are two ways to run a simulation in ModelSim: manually or by using scripts. In this tutorial, we perform the simulation manually.

Manual Simulation

  • To set the clock period, right-click on the clock signal and select Clock... from the pop-up menu.
[clock period = 100 ps], [first edge = falling edge] and click [OK].
  • To reset the circuit, set the resetn signal low by right-clicking on it and selecting the Force... from the pop-up menu.
[Value = 0] and [OK].
  • Set the value of the start signal to 0.
[Value = 0] and [OK].
force -freeze sim:/serial/clock 0 0, 1 {50 ps} -r 100
force -freeze sim:/serial/resetn 0 0
force -freeze sim:/serial/start 0 0
  • To run a simulation for 100 ps, set the value in the text field to 100 ps (default) and press the [Run] button.
run 
  • To test the serial adder we will add numbers A=143 and B=57 => sum=200.
  • To specify a value for A (B) in decimal, right-click on it, and choose Force... from the pop-up menu.
A [Value = 10#143] and [OK].
B [Value = 10#57] and [OK].
  • Set resetn to 1 to stop the circuit from resetting. Then set start to 1 to begin serial addition,
force -freeze sim:/serial/A 10#143 0
force -freeze sim:/serial/B 10#57 0
force -freeze sim:/serial/start 1 0
force -freeze sim:/serial/resetn 1 0
  • Change the radix of A and B signal. Highlight them in the simulation window, click right, and select [Radix > Unsigned]. Change the radix of the sum and counter signal to unsigned as well.
  • To complete the operation, the circuit will require 10 clock cycles. run 1000 ps using the Transcript command.
run 1000 ps [enter] (or)
run 1000 [enter]

Simulation with do file

  • Create a do file with all the transcript commands. [File > New > Open > Do] and [File > Save As...] serial_adder.do
# Preparing Simulation
vsim tutorial.serial
# Adding signal to wave
add wave  \
sim:/serial/A \
sim:/serial/B \
sim:/serial/start \
sim:/serial/resetn \
sim:/serial/clock \
sim:/serial/sum
add wave  \
sim:/serial/my_control/current_state \
sim:/serial/my_control/counter
# Defining clock and inicial reset and start value
force -freeze sim:/serial/clock 0 0, 1 {50 ps} -r 100
force -freeze sim:/serial/resetn 0 0
force -freeze sim:/serial/start 0 0
# Simulation of 1 clock periods
run 100
# Defing A = 143 and B = 57
force -freeze sim:/serial/A 10#143 0
force -freeze sim:/serial/B 10#57 0
# Redefining reset and start value
force -freeze sim:/serial/start 1 0
force -freeze sim:/serial/resetn 1 0
# Simulation of 10 clock periods 
run 1000
  • If needed restart the simulation
restart -force
  • type in transcript command
do serial_adder.do
  • Change the radix of A, B, sum and counter signal to unsigned. There is no tcl command for this.

Saving wave format

  • When the wave window is showing the right signal, radix and zoom, save the wave format. Select the wave windows and [File > Save Format ...] as wave.do in the current directory
  • Create a new do simulation file serial_add_v2.do, replacing the add commands with the command do wave.do
# Preparing Simulation
vsim tutorial.serial
# Adding signal to wave
do wave.do
# Defining clock and inicial reset and start value
force -freeze sim:/serial/clock 0 0, 1 {50 ps} -r 100
force -freeze sim:/serial/resetn 0 0
force -freeze sim:/serial/start 0 0
# Simulation of 1 clock periods
run 100
# Defing A = 143 and B = 57
force -freeze sim:/serial/A 10#143 0
force -freeze sim:/serial/B 10#57 0
# Redefining reset and start value
force -freeze sim:/serial/start 1 0
force -freeze sim:/serial/resetn 1 0
# Simulation of 10 clock periods 
run 1000

PASSO 3 - Timing Simulation with ModelSim

For Altera FPGA-based designs the delay information is available after the design is synthesized, placed and routed, and is generated by Quartus II CAD software.

Setting up a Quartus II Project for Timing Simulation with ModelSim

  • To set up EDA Tools for simulation, open the Quartus II project serial.qpf in example/timing subdirectory, and select [Assignment > Settings... > EDA Tool Settings ]. Select the Tool Type = Simulation, Tool Name = ModelSim-Altera, Format = VHDL. click [OK]
  • Compile the project in Quartus II [Processing > Start Compilation]. The compilation process synthesizes, places, and routes the design, and performs timing analysis.
  • Then it stores the compilation result (serial.vho, and serial_vhd.sdo) in the simulation directory for ModelSim to use.

Running a Manual Timing Simulation

  • To create a project in ModelSim, select [File > New > Project...]
project name = serial_adder_timing,
project location <= <subdiretorio do usuário>/Using_ModelSim/timing
default library name <= tutorial
copy settings field.
click [OK]
  • Since the file for this tutorial exists, click Add Existing File and select serial.vho file, click [OK].
  • Once the file is added to the project, it will appear in the Project tab, click [Close]
  • Select [Compile > Compile All]. A green check mark will appear to the right of the serial.vho file in the Project tab.
  • To include the Modelsim libraries in the project, [Simulate > Start Simulation...] and click the Libraries Tab, Add... and choose cycloneive_ver [OK] and Add... and choose altera_ver [OK].
  • Click the SDF Tab, and Add... SDF File = serial_vhd.sdo and Apply to Region = \ [OK]
  • Then, click on the Design Tab, select your project for simulation (tutorial > serial), and click [OK]
vsim -L cycloneive_ver -L altera_ver -sdftyp /=/home/moecke/Using_ModelSim/timing/simulation/modelsim/serial_vhd.sdo tutorial.serial 
  • Using the sim tab and the Objects window we can select signals for simulation. To add a signal A, B, resetn, start, clock, sumfrom serial entity. Include also reg_sum|q, reg_A|q, reg_B|q signals.
  • Add signal current_state and counter from my_control component.
add wave -position end  sim:/serial/resetn
add wave -position end  sim:/serial/clock
add wave -position end  sim:/serial/start
add wave -position end  sim:/serial/A
add wave -position end  sim:/serial/\reg_A|q\
add wave -position end  sim:/serial/B
add wave -position end  sim:/serial/\reg_B|q\
add wave -position end  sim:/serial/sum
add wave -position end  sim:/serial/\reg_sum|q\
add wave -position end  sim:/serial/\my_control|counter\
add wave -position end  sim:/serial/\my_control|current_state\
  • To set the clock period to 20ns (50 MHz), set start and resetn signals to 0, and set A = 143 and B = 57.
force -freeze sim:/serial/clock 0 0, 1 {10 ns} -r 20 ns
force -freeze sim:/serial/resetn 0 0
force -freeze sim:/serial/start 0 0
force -freeze sim:/serial/A 10#143 0
force -freeze sim:/serial/B 10#57 0
run 20 ns
  • To set start and resetn signals to 1,
force -freeze sim:/serial/start 1 0
force -freeze sim:/serial/resetn 1 0
run 200 ns

Using a do file

  • save the wave format, end create a new do simulation file serial_add_timing.do,
vsim -L cycloneive_ver -L altera_ver tutorial.serial 
do wave.do
force -freeze sim:/serial/clock 0 0, 1 {10 ns} -r 20 ns
force -freeze sim:/serial/resetn 0 0
force -freeze sim:/serial/start 0 0
force -freeze sim:/serial/A 10#143 0
force -freeze sim:/serial/B 10#57 0
run 20 ns
force -freeze sim:/serial/start 1 0
force -freeze sim:/serial/resetn 1 0
run 200 ns