Nota: Se recomienda seguir esta serie de tutoriales de VHDL en orden, comenzando con el primer tutorial .
En el tutorial anterior, VHDL-18, diseñamos un flip-flop T usando VHDL.
Para este proyecto, haremos:
- Escriba un programa VHDL un programa VHDL para construir un contador binario de 4 bits
- Verifique la forma de onda de salida del programa (el circuito digital) con la tabla de verdad del contador.
El contador binario de 4 bits
Mesa de la verdad
Ahora escribamos, compilemos y simulemos un programa VHDL. Luego obtendremos la salida de la forma de onda y la verificaremos con la tabla de verdad proporcionada.
Antes de comenzar, asegúrese de revisar el procedimiento paso a paso proporcionado en el Tutorial VHDL – 3 para diseñar el proyecto. Esto asegurará que edite y compile correctamente el programa y el archivo de forma de onda, así como el resultado final.
Programa VHDL
biblioteca IEEE;
utilice IEEE.STD_LOGIC_1164.ALL;
utilizar IEEE.STD_LOGIC_ARITH.all;
utilice IEEE.STD_LOGIC_UNSIGNED.all;
contador de entidades es
Puerto (primero, clk: en std_logic;
o: salida std_logic_vector(0 a 3));
contador final;
La arquitectura count_arch del contador es
recuento de señales: std_logic_vector (0 a 3);
para comenzar
proceso (primero, clk)
para comenzar
si (primero = '1') entonces cuente <= “0000”;
elsif (clk'event y clk = '1') luego cuenta <= cuenta + 1;
terminara si;
fin del proceso;
o <= contar;
recuento final_arch;
Para refrescar su memoria sobre cómo funciona esto, lea los dos primeros tutoriales de VHDL ( 1 y 2 ) de esta serie.
Luego compile el programa anterior, creando y guardando un archivo de forma de onda con todas las entradas y salidas requeridas enumeradas (asegurándose de que se apliquen todas las combinaciones de entradas diferentes). Luego simule el proyecto. Deberías obtener el siguiente resultado...
Forma de onda de simulación
Se puede ver fácilmente en la forma de onda que cuando rst=1, la salida 'o' es 0 (0000). Luego aumenta en incrementos con cada flanco positivo del reloj: 0001(1), 0010(2), 0011(3), etc.
Ahora, construyamos el contador ascendente-descendente. Tiene una señal de entrada adicional para “up_down”, de modo que cuando:
- El up_down = 0 ->, el contador cuenta desde 0, 1, 2, 3,…15, etc.
- El up_down = 1 ->, el contador cuenta atrás desde 15, 14, 13,… hasta 0.
El contador binario ascendente y descendente (4 bits)
Programa VHDL
biblioteca IEEE;
utilice IEEE.STD_LOGIC_1164.ALL;
utilizar IEEE.STD_LOGIC_ARITH.all;
utilice IEEE.STD_LOGIC_UNSIGNED.all;
contador de entidades es
Puerto (rst,clk,up_dwn: en std_logic;
o: salida std_logic_vector(0 a 3));
contador final;
La arquitectura count_arch del contador es
recuento de señales: std_logic_vector (0 a 3);
para comenzar
proceso (primero, clk)
para comenzar
si (primero = '1') entonces cuente <= “0000”;
elsif (clk'event y clk = '0') entonces
si (up_dwn = '1') entonces cuenta <= cuenta – 1;
de lo contrario contar <= contar + 1;
terminara si;
terminara si;
fin del proceso;
o <= contar;
recuento final_arch;
Formas de onda de simulación
Como puede ver en esta figura, cuando up_dwn = 0, el recuento aumenta en incrementos con cada flanco negativo del reloj. Entonces, cuando up_dwn = 1, el recuento disminuye. Estos ejemplos están resaltados en rojo y azul, respectivamente.
En el siguiente tutorial, crearemos un conversor de código binario a código Gray y un conversor de código Gray a binario usando VHDL.