Aulas‎ > ‎Sistemas Digitais‎ > ‎

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.

    1. Criar um novo projeto no ISE.

    2. Inserir um novo arquivo fonte VHDL no projeto (menu Project => New Source), com uma entrada “clock” e outro sinal de “saida”.

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

    4. Sintetizar o arquivo.



  1. Preparando o arquivo testbench para simulação.

    1. Mudar o modo de operação do ISE para “simulation”

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

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



  1. Primeira simulação.

    1. Dê um duplo-clique em “Simulate Behavioral Model”:

      Obs.: No Windows 10 esta opção funciona apenas na versão 64 bits do Project Navigator.
    2. Será aberta uma nova janela do simulador ISim. Clique no ícone , 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.




  1. Segunda simulação. Uma variação sem usar a constante para definir o período de clock.

    1. Comente a constante do período de clock:

      -- constant clock_period : time := 10 ns;

    2. Faça as seguintes substituições no código:

    3. Antes:

      Depois:

        -- Clock process definitions

        clock_process :process

        begin

      clock <= '0';

      wait for clock_period/2;

      clock <= '1';

      wait for clock_period/2;

        end process;

       -- Clock process definitions

        clock_process :process

        begin

      clock <= '0';

      wait for 50 ns;

      clock <= '1';

      wait for 50ns;

        end process;


      Salve os arquivos.

    4. No simulador ISim clique em . Se houver algum erro feche o ISim e clique novamente em “Simulate Behavioral Model” no Project Navigator do ISE.



  1. Terceira simulação. Usando a estrutura “after”

    1. Comente todo o bloco clock_process usado nos dois exemplos anteriores.

    2. Insira o seguinte “estímulo” no código:

      clock <= not clock after 50 ns;
    3. Salve o arquivo e simule novamente.



Neste roteiro vimos 2 possibilidades e uma variação para a descrição do sinal de clock. No próximo roteiro veremos como simular uma tabela verdade para um circuito combinacional.