Aulas‎ > ‎Sistemas Digitais‎ > ‎

Roteiro para Simulação em VHDL - Parte II

Descrição de uma tabela verdade para circuitos combinacionais 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.


Preparação

  1. Crie um projeto e insira um arquivo VHDL com a descrição de um circuito combinacional qualquer ou uma simples porta lógica.

    Obs: Nos exemplos a seguir os sinais de entrada são "ENT_A" e "ENT_B" e o sinal de saída é "saida"
  2. Insira um VHDL Test Bench.

  3. Neste exemplo não iremos utilizar clock, então pode-se comentar, ou remover, as linhas geradas referentes a esse sinal:

-- constant <clock>_period : time := 10 ns;


  -- Clock process definitions

--   <clock>_process :process

--   begin

-- <clock> <= '0';

-- wait for <clock>_period/2;

-- <clock> <= '1';

-- wait for <clock>_period/2;

--   end process;


--     wait for <clock>_period*10;


  1. Remova também o sitm_proc, pois iremos criar um processo novo a seguir.


-- 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;




Construção usando Wait em um Process


  1. Crie um novo processo (tabela_proc, por exemplo) e defina-o como a seguir:

tabela_proc: process

begin

ENT_A <= '0';

     ENT_B <= '0';

    wait for 100 ns;

ENT_A <= '0';

ENT_B <= '1';

    wait for 100 ns;

ENT_A <= '1';

ENT_B <= '0';

    wait for 100 ns;

ENT_A <= '1';

ENT_B <= '1';

    wait for 100 ns;

end process;


  1. Simule:

            

  1. Altere o código modificando a última linha do process de “wait for 100 ns;” para apenas “wait;” e repare na diferença. Dica, clique em na janelado simulador.

  2. Para simularmos os sinais de forma independente, basta criarmos “processes” independentes. Importante: O que acontece dentro de um process é sequencial, porém, se houver mais de um process em seu vhdl, eles serão concorrentes!

  3. Simule o seguinte exemplo:

tabela_A_proc: process

    begin

            ENT_A <= '0';

wait for 100 ns;

    ENT_A <= '0';

wait for 100 ns;

            ENT_A <= '1';

wait for 100 ns;

    ENT_A <= '1';

wait for 100 ns;

    end process;

    tabela_B_proc: process

    begin

            ENT_B <= '0';

        wait for 50 ns;

            ENT_B <= '1';

        wait for 150 ns;

            ENT_B <= '0';

        wait for 50 ns;

            ENT_B <= '1';

        wait for 150 ns;

    end process;


  1. O resultado deve ser:

            


Construção usando After


Apague os processos dos exemplos anteriores e insira os seguintes estímulos:


    ENT_A <= ‘0’, ‘1’ after 100 ns, ‘0’ after 200 ns, ‘1’ after 300 ns;

    ENT_B <= ‘0’, ‘0’ after 100 ns, ‘1’ after 200 ns, ‘1’ after 300 ns;

    -- a repetição dos estados é apenas para facilitar a visualização da sequência.


Varie os tempos e observe o que ocorre!



Lembrete:


  • As construções usando “wait” usam como referências intervalos de tempo fixos.

    • É uma ótima opção para simular toda as possibilidades de uma tabela-verdade para validar um projeto combinacional, ou um circuito com uma sequência padrão de entradas.

  • As construções usando after usam como referência o instante inicial (t = 0).

    • É uma ótima opção para simular as entradas livremente.