Roteiro para Simulação em VHDL - Parte I

Descrição do sinal de clock no testbench


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.