Atenção: Este roteiro utiliza a ferramenta ISE 14.7 da Xilinx e o respectivo simulador ISim. Porém, quanto ao código usado para a simulação deve funcionar em qualquer ferramenta.
1. Preparando um arquivo VHDL muito simples para simular o sinal de clock. Uma porta NOT.
Criar um novo projeto no ISE.
Inserir um novo arquivo fonte VHDL no projeto (menu Project => New Source), com uma entrada “clock” e outro sinal de “saida”.
Acrescentar a linha de código da porta não. O arquivo ficará como a seguir:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity nao_vhd is
Port ( clock : in STD_LOGIC;
saida : out STD_LOGIC);
end nao_vhd;
architecture Behavioral of nao_vhd is
begin
saida <= not clock;
end Behavioral;
Sintetizar o arquivo.
2. Preparando o arquivo testbench para simulação.
Mudar o modo de operação do ISE para “simulation”
Inserir um novo arquivo fonte VHDL Test Bench no projeto (menu Project => New Source). Definir um nome e aceitar as configurações padrão.
Obs: Em um projeto hierárquico é possível escolher o módulo do projeto a ser simulado nesta etapa.
Será criado um arquivo VHDL base para a simulação. Veja os comentários em azul:
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY nao_tb IS
END nao_tb;
ARCHITECTURE behavior OF nao_tb IS
-- Component Declaration for the Unit Under Test (UUT)
--Este bloco coloca nosso CI da porta NOT (a UUT) na bancada (bench)
COMPONENT nao_vhd
PORT(
clock : IN std_logic;
saida : OUT std_logic
);
END COMPONENT;
-- Os sinais de entrada que teremos que definir ou “desenhar” aqui no VHDL
--Inputs
signal clock : std_logic := '0'; -- Nosso sinal de clock já teve o estado inicial declarado como 0.
-- Os sinais de saída que o simulador irá gerar
--Outputs
signal saida : std_logic;
-- Esta é a forma padrão que o ISE adota para definir o período de clock, através de uma constante!
-- Clock period definitions
constant clock_period : time := 10 ns;
BEGIN
-- Agora conectamos nosso CI da porta NOT aos sinais de entrada e saída. É como se estivéssemos conectando as pontas de prova de um analisador lógico ou osciloscópio.
-- Instantiate the Unit Under Test (UUT)
uut: nao_vhd PORT MAP (
clock => clock,
saida => saida
);
-- Este processo cria o sinal de clock na nossa simulação, aproveitando a constante definida anteriormente.
-- Clock process definitions
clock_process :process
begin
clock <= '0';
wait for clock_period/2;
clock <= '1';
wait for clock_period/2;
end process;
-- Esta seção serve para colocarmos outros sinais e não será usada neste primeiro roteiro.
-- Comente esta seção, pois estará habilitada por padrão.
-- Stimulus process
-- stim_proc: process
-- begin
-- -- hold reset state for 100 ns.
-- wait for 100 ns;
--
-- wait for clock_period*10;
--
-- -- insert stimulus here
--
-- wait;
-- end process;
END;
3. Primeira simulação.
Dê um duplo-clique em “Simulate Behavioral Model”:
Atenção! No Windows 10 é comum ocorrer problemas com o simulador, você pode tentar executar a versão 64 bits do Project Navigator, ou os workarounds indicados aqui e aqui.
Será aberta uma nova janela do simulador ISim. Clique no ícone indicado ao lado, pressione <F6>, ou use a opção “Zoom to full view” do menu para poder observar melhor o resultado da simulação. Use os demais ajustes de zoom conforme necessário para visualizar o resultado da simulação.
4. Segunda simulação. Uma variação sem usar a constante para definir o período de clock.
Comente a constante do período de clock:
-- constant clock_period : time := 10 ns;
Faça as seguintes substituições no código:
Antes:
-- Clock process definitions
clock_process :process
begin
clock <= '0';
wait for clock_period/2;
clock <= '1';
wait for clock_period/2;
end process;
Depois:
-- Clock process definitions
clock_process :process
begin
clock <= '0';
wait for 50 ns;
clock <= '1';
wait for 50ns;
end process;
Salve os arquivos.
No simulador ISim clique em "Re-launch" (figura ao lado). Se houver algum erro feche o ISim e clique novamente em “Simulate Behavioral Model” no Project Navigator do ISE.
5. Terceira simulação. Usando a estrutura “after”
Comente todo o bloco clock_process usado nos dois exemplos anteriores.
Insira o seguinte “estímulo” no código:
clock <= not clock after 50 ns;
Salve o arquivo e simule novamente.
Neste roteiro vimos 2 possibilidades e uma variação para a descrição do sinal de clock e que se aplicam também a qualquer sinal periódico. No próximo roteiro veremos como simular uma tabela verdade para um circuito combinacional.
Retornar para Sistemas Digitais.