5.2 Un ejemplo

A continuación se muestra un ejemplo de un contador de 8 bits:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all; 
 

entity cont8 is

  port (clk   : in std_logic; - Reloj

        clear : in std_logic;

        q     : out std_logic_vector (7 downto 0)); -Salida         

end cont8; 
 

architecture beh of cont8 is

signal cuenta : std_logic_vector (7 downto 0); 
 

begin

  output: process(clk,clear)

  begin

    if (clear='0') then

      q<="00000000";

      cuenta<="00000000";

    elsif (clk'event and clk='1') then

      cuenta<=(cuenta+1);

      q<=cuenta;

    end if; 

  end process;

end beh;

Este contador se encuentra en el fichero cont8.vhdl. Para simularlo es necesario crear un banco de pruebas (testbench) que introduzca la señal de reloj y coloque un valor adecuado en la entrada de reset. Lo llamamos tb_cont8.vhdl. El proceso para realizar la simulación completa es el siguiente:

  1. Realizar el análisis. A partir de los ficheros tb_cont8.vhdl y cont8.vhdl se obtendrán los ficheros objeto .o:

    $ ghdl -a -ieee=synopsys *.vhdl
  2. Elaboración. A partir de los ficheros objeto obtenemos el ejecutable (tb_cont8):

    $ ghdl -e -ieee=synopsys tb_cont8
  3. Simulación. Ejecutamos el programa y obtenemos el fichero de simulación (simulación.vcd). Especificamos el tiempo que queremos simular.

    $ ./tb_cont8 -vcd=simulacion.vcd -stop-time=200ns
  4. Visualización. Con el programa gtkwave vemos los resultados de la simulación

    $ gtkwave simulacion.vcd
Todos los pasos anteriores se realizan más fácilmente creando un fichero Makefile, pero se ha dejado así por claridad. En la figura 4 se muestra una parte de los resultados obtenidos con GTKWAVE.

Figure 4: Resultados de la simulación con GTKWAVE
\includegraphics{ps/gtkwave-pantallazo4.eps}

Juan Gonzalez 2003-12-31