Mudanças entre as edições de "Simulação Funcional usando o ModelSim"
(2 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
Linha 34: | Linha 34: | ||
Verifique se o caminho para o ModelSim está correto '''[Tools > Options > General > EDA Tools Options''']. O campo '''Modelsim-Altera''' deve estar com | Verifique se o caminho para o ModelSim está correto '''[Tools > Options > General > EDA Tools Options''']. O campo '''Modelsim-Altera''' deve estar com | ||
/opt/intelFPGA/20.1/modelsim_ae/linuxaloem | /opt/intelFPGA/20.1/modelsim_ae/linuxaloem | ||
− | {{fig|1| EDA Tools Options | | + | {{fig|1| EDA Tools Options | EDA_Tools_Options.png | 600 px |}} |
;Passo 3: | ;Passo 3: | ||
Verifique se o formato do arquivo de simulação no ModelSim está correto '''[Assigments > Settings.. > General > EDA Tools Settings ''']. O campo '''Formats''' da linha '''Simulation''' deve estar com | Verifique se o formato do arquivo de simulação no ModelSim está correto '''[Assigments > Settings.. > General > EDA Tools Settings ''']. O campo '''Formats''' da linha '''Simulation''' deve estar com | ||
VHDL | VHDL | ||
− | {{fig|2| EDA Tools Settings | EDA_Tools_Settings.png | | + | {{fig|2| EDA Tools Settings | EDA_Tools_Settings.png | 600 px |}} |
==Executando o Modelsim== | ==Executando o Modelsim== | ||
Linha 95: | Linha 95: | ||
;Passo 11: | ;Passo 11: | ||
Quando o Waveform estiver como deseja, salve essa formatação clicando em '''[File > Save Format]''' ou [Ctrl+S]. Esse comando irá salvar os sinais apresentados no Wave em um arquivo wave.do | Quando o Waveform estiver como deseja, salve essa formatação clicando em '''[File > Save Format]''' ou [Ctrl+S]. Esse comando irá salvar os sinais apresentados no Wave em um arquivo wave.do | ||
− | < | + | <syntaxhighlight lang=tcl> |
onerror {resume} | onerror {resume} | ||
quietly WaveActivateNextPane {} 0 | quietly WaveActivateNextPane {} 0 | ||
Linha 122: | Linha 122: | ||
update | update | ||
WaveRestoreZoom {0 ps} {21 us} | WaveRestoreZoom {0 ps} {21 us} | ||
− | </ | + | </syntaxhighlight> |
;Passo 12: | ;Passo 12: | ||
Preparando um script de simulação automática. | Preparando um script de simulação automática. | ||
Para repetir de forma automática uma simulação já realizada, selecione os comandos executados e salve como um novo arquivo '''tb_Bin2bcd.do'''. Antes de salvar o arquivo apague as linhas de comentário (iniciadas com #), e na linha de compilação, substitua o caminho absoluto do arquivo por um relativo '''../../filename.vhd'''. Também substitua todos os comandos '''add wave''' utilizados pelo script '''do wave.do'''. | Para repetir de forma automática uma simulação já realizada, selecione os comandos executados e salve como um novo arquivo '''tb_Bin2bcd.do'''. Antes de salvar o arquivo apague as linhas de comentário (iniciadas com #), e na linha de compilação, substitua o caminho absoluto do arquivo por um relativo '''../../filename.vhd'''. Também substitua todos os comandos '''add wave''' utilizados pelo script '''do wave.do'''. | ||
− | < | + | <syntaxhighlight lang=tcl> |
do bin2bcd_run_msim_rtl_vhdl.do | do bin2bcd_run_msim_rtl_vhdl.do | ||
vcom -reportprogress 300 -93 -work work ../../bin2bcd.vhd | vcom -reportprogress 300 -93 -work work ../../bin2bcd.vhd | ||
Linha 134: | Linha 134: | ||
force -freeze sim:/bin2bcd/A 10#45 0, 10#13 8us, 10#97 12us, 10#09 12.2us | force -freeze sim:/bin2bcd/A 10#45 0, 10#13 8us, 10#97 12us, 10#09 12.2us | ||
run 20 us | run 20 us | ||
− | </ | + | </syntaxhighlight> |
+ | |||
+ | Para executar o script, digite apenas | ||
+ | do tb_bin2bcd.do | ||
+ | |||
+ | ;Consulte: | ||
+ | *[[Documentação do ModelSim]] | ||
+ | *[https://avi-brown.medium.com/how-to-use-do-files-in-modelsim-vhdl-simulations-dd8e5a663a5a How to use .do files in ModelSim VHDL simulations] |
Edição atual tal como às 11h04min de 13 de junho de 2023
Essa página descreve os passos a serem realizados para a simulação funcional no Modelsim de um circuito implementado no Quartus Prime 20.1.1, disponibilizados na nuvem do IFSC.
Antes de acessar o simulador, o circuito deve estar descrito em VHDL utilizando o Quartus Prime, e o este deve ser configurado corretamente.
Configurando o Quartus Prime
- Passo 1
Digite o seguinte código VHDL ou seu próprio código e após salvar o projeto faça a Analysis & Synthesis [Crtl+k].
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity bin2bcd is
port (
A : in std_logic_vector (6 downto 0);
sd, su : out std_logic_vector (3 downto 0)
);
end entity;
architecture ifsc_v1 of bin2bcd is
signal A_uns : unsigned (6 downto 0);
signal sd_uns, su_uns : unsigned (6 downto 0);
begin
sd <= std_logic_vector(resize(sd_uns, 4));
su <= std_logic_vector(resize(su_uns, 4));
sd_uns <= A_uns/10;
su_uns <= A_uns rem 10;
A_uns <= unsigned(A);
end architecture;
- Passo 2
Verifique se o caminho para o ModelSim está correto [Tools > Options > General > EDA Tools Options]. O campo Modelsim-Altera deve estar com
/opt/intelFPGA/20.1/modelsim_ae/linuxaloem
Figura 1 - EDA Tools Options
- Passo 3
Verifique se o formato do arquivo de simulação no ModelSim está correto [Assigments > Settings.. > General > EDA Tools Settings ]. O campo Formats da linha Simulation deve estar com
VHDL
Figura 2 - EDA Tools Settings
Executando o Modelsim
- Passo 4
Execute o Modelsim a partir da IDE do Quartus, [Tools > Run Simulation Tool > RTL Simulation]. O Modelsim deverá abrir uma tela semelhante a mostrada abaixo. No painel Libray, clique na caixa [-] na frente da pasta [work] para mostrar a entity e a architecture.
Figura 3 - Modelsim - tela entrada
- Passo 5
Para iniciar o simulador, de um duplo-click sobre o nome da architecture. Abrirá uma nova aba [sim], e o painel de Objects irá mostrar os sinais de entrada, saída e internos do circuito. A tela deverá ficar semelhante a mostrada abaixo. Observe as colunas atentamente.
Figura 4 - Modelsim - tela inicial simulador
- Passo 6
Para inserir os sinais no painel Wave, na aba [sim] de um clique com o botão direito do mouse sobre o nome da Instance e clique em [Add Wave]. Abrirá um novo painel [Wave]. Todos os sinais de entrada e saída (Portas da Entity) serão inseridos no Wave, assim como os sinais internos (declarados como Signal). A tela deverá ficar semelhante a mostrada abaixo.
Figura 5 - Modelsim - tela inicial wave
Note que a aba [Transcript] mostrará o comando equivalente, que poderá ser utilizado depois para gerar um script de automatização da simulação.
add wave -position insertpoint sim:/bin2bcd/*
- Passo 7
Modifique o forma de interpretação das informações mostrados no Wave, selecionando os sinais desejados e clicando com o botão direito do mouse sobre a seleção e clique em [Radix > Unsigned]. Com isso os bits serão interpretados com números inteiros sem sinal.
- Passo 8
Defina o valor inicial dos estímulos. No exemplo temos apenas uma entrada, portanto
Figura 6 - Tela do Wave do Modelsim - comando force
Note que a aba [Transcript] mostrará o comando equivalente, que poderá ser utilizado depois para gerar um script de automatização da simulação.
force -freeze sim:/bin2bcd/A 10#13 0
- Passo 9
Execute um passo de simulação. Existem várias formas de executar o Run:
run
- Em todos os casos serão simulados (por default) 100 ns.
- Se desejar simular um tempo maior, pode repetir várias vezes o comando ou digitar o tempo de simulação após o comando run.
run 13 ps run 130 ns
- As subunidades de tempo aceitas no Modelsim são:
fs; ps = 1000 fs; ns = 1000 ps; us = 1000 ns; ms = 1000 us; sec = 1000 ms; min = 60 sec; hr = 60 min;
Simulação funcional
- Passo 10
Após executar diversos comandos force e run, você terá na aba Wave algo como mostrado na figura a seguir. No exemplo é possível mostrar que os valores da entrada binária "A" foram separados em saídas BCD sd e su.
Figura 7 - Modelsim - resultado da simulação
Os ícones acima do painel Wave são uteis durante a simulação e são utilizados para inspecionar os sinais. Para conhecer os detalhes, leia o Getting Started Using Mentor Graphic’s QuestaSim / ModelSim. Veja especialmente as seções 2.4 Display Waveform, 2.7 Using the Waveform Window (Zooming, Selecting Signals, Using Cursors, Saving and Restoring Waveforms)
- Passo 11
Quando o Waveform estiver como deseja, salve essa formatação clicando em [File > Save Format] ou [Ctrl+S]. Esse comando irá salvar os sinais apresentados no Wave em um arquivo wave.do
onerror {resume}
quietly WaveActivateNextPane {} 0
add wave -noupdate -radix unsigned /bin2bcd/A
add wave -noupdate -radix unsigned /bin2bcd/A_uns
add wave -noupdate -radix unsigned /bin2bcd/sd
add wave -noupdate -radix unsigned -childformat {{/bin2bcd/sd_uns(6) -radix unsigned} {/bin2bcd/sd_uns(5) -radix unsigned} {/bin2bcd/sd_uns(4) -radix unsigned} {/bin2bcd/sd_uns(3) -radix unsigned} {/bin2bcd/sd_uns(2) -radix unsigned} {/bin2bcd/sd_uns(1) -radix unsigned} {/bin2bcd/sd_uns(0) -radix unsigned}} -subitemconfig {/bin2bcd/sd_uns(6) {-height 19 -radix unsigned} /bin2bcd/sd_uns(5) {-height 19 -radix unsigned} /bin2bcd/sd_uns(4) {-height 19 -radix unsigned} /bin2bcd/sd_uns(3) {-height 19 -radix unsigned} /bin2bcd/sd_uns(2) {-height 19 -radix unsigned} /bin2bcd/sd_uns(1) {-height 19 -radix unsigned} /bin2bcd/sd_uns(0) {-height 19 -radix unsigned}} /bin2bcd/sd_uns
add wave -noupdate -radix unsigned /bin2bcd/su
add wave -noupdate -radix unsigned -childformat {{/bin2bcd/su_uns(6) -radix unsigned} {/bin2bcd/su_uns(5) -radix unsigned} {/bin2bcd/su_uns(4) -radix unsigned} {/bin2bcd/su_uns(3) -radix unsigned} {/bin2bcd/su_uns(2) -radix unsigned} {/bin2bcd/su_uns(1) -radix unsigned} {/bin2bcd/su_uns(0) -radix unsigned}} -expand -subitemconfig {/bin2bcd/su_uns(6) {-height 19 -radix unsigned} /bin2bcd/su_uns(5) {-height 19 -radix unsigned} /bin2bcd/su_uns(4) {-height 19 -radix unsigned} /bin2bcd/su_uns(3) {-height 19 -radix unsigned} /bin2bcd/su_uns(2) {-height 19 -radix unsigned} /bin2bcd/su_uns(1) {-height 19 -radix unsigned} /bin2bcd/su_uns(0) {-height 19 -radix unsigned}} /bin2bcd/su_uns
TreeUpdate [SetDefaultTree]
WaveRestoreCursors {{Cursor 3} {8000000 ps} 0} {{Cursor 4} {13000000 ps} 0}
quietly wave cursor active 1
configure wave -namecolwidth 150
configure wave -valuecolwidth 100
configure wave -justifyvalue left
configure wave -signalnamewidth 1
configure wave -snapdistance 10
configure wave -datasetprefix 0
configure wave -rowmargin 4
configure wave -childrowmargin 2
configure wave -gridoffset 0
configure wave -gridperiod 1
configure wave -griddelta 40
configure wave -timeline 0
configure wave -timelineunits us
update
WaveRestoreZoom {0 ps} {21 us}
- Passo 12
Preparando um script de simulação automática. Para repetir de forma automática uma simulação já realizada, selecione os comandos executados e salve como um novo arquivo tb_Bin2bcd.do. Antes de salvar o arquivo apague as linhas de comentário (iniciadas com #), e na linha de compilação, substitua o caminho absoluto do arquivo por um relativo ../../filename.vhd. Também substitua todos os comandos add wave utilizados pelo script do wave.do.
do bin2bcd_run_msim_rtl_vhdl.do
vcom -reportprogress 300 -93 -work work ../../bin2bcd.vhd
vsim work.bin2bcd(ifsc_v1)
do wave.do
force -freeze sim:/bin2bcd/A 10#45 0, 10#13 8us, 10#97 12us, 10#09 12.2us
run 20 us
Para executar o script, digite apenas
do tb_bin2bcd.do
- Consulte