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

    • 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"

    • Insira um VHDL Test Bench.

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

    • 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

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

    • Simule:

    • 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 "Re-launch" em na janela do simulador.

    • 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!

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

    • 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.


Retornar para Sistemas Digitais.