Seguindo o tutorial da ALTERA para o MODELSIM
Revisão de 20h39min de 16 de setembro de 2015 por Moecke (discussão | contribs) (→Manual Simulation)
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
- Ler o tutorial Using ModelSim to Simulate Logic Circuits in VHDL Designs, ou [1]
- Obter os arquivos para realizar o tutorial
- Para usar o ModelSim 10.1d na CLOUD-IFSC abra um terminal e digite:
/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.