Diseño lógico combinacional mediante VHDL Ing. Diego Barragán Guerrero http://www.decom.fee.unicamp.br/~diego/
Introducción La lógica combinacional es probablemente la más fácil de diseñar. En cada momento las salidas de un circuito combinacional sólo dependen del estado actual de sus entradas. El circuito no tiene memoria.
Programación con declaraciones concurrentes Declaraciones concurrentes: fuera de la declaración de un proceso. Usadas en arquitectura de flujo de datos y estructural. Tipos: Declaraciones condicionales asignadas a una señal WHEN – ELSE Declaraciones concurrentes asignadas a señales. Selección de una señal: WITH – SELECT - END
Declaraciones condicionales asignadas a una señal WHEN – ELSE Un circuito multiplexor acepta N entradas y presenta una salida en la que aparecerá el valor lógico asociado a una de estas entradas. La selección de cuál de esas entradas es la que aparece en la salida se determina por un conjunto de M señales de control, cumpliéndose que N = 2^M. La salida presentará aquella entrada cuyo índice concuerda con el número codificado en binario en las líneas de control (o selección).
Usando operadores
Operadores lógicos 1 Expresiones entre paréntesis. 2 Complementos 3 AND, OR, NAND, XORD, XNORD, NOT. Válidos para comparar palabras del mismo número de bits. Prioridad: 1 Expresiones entre paréntesis. 2 Complementos 3 Función AND 4 Función OR
Operadores de asignación Usando para asignar valores a señales, variables y constantes: Op Descripción <= Asignar valores a una SEÑAL. := Asignar valores a una VARIABLE, CONSTANTE, GENERICO. Establece valores iniciales. => Asignar valores a los elementos de un vector individual o con WITH OTHERS.
Operadores de asignación Declaración de señales y variables: Asignaciones legales:
Usando operadores Código VHDL 1 Library ieee; F 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Código VHDL 1 Library ieee; 2 USE ieee.std_logic_1164.all; 3 Entity funcion is port( 4 D,C,B,A: IN std_logic; 5 F: OUT std_logic); 6 End funcion; Architecture a_func of funcion is begin F<= ‘1’ when (A=‘0’ and B=‘0’ and C=‘1’ and D=‘0’) else 10 ‘1’ when (A=‘1’ and B=‘0’ and C=‘1’ and D=‘0’) else 11 ‘1’ when (A=‘0’ and B=‘1’ and C=‘1’ and D=‘0’) else 12 ‘1’ when (A=‘1’ and B=‘1’ and C=‘1’ and D=‘0’) else 13 ‘0’; 14 end a_func;
Declaraciones concurrentes asignadas a señales Función de salida en base a ecuaciones booleanas.
Declaraciones concurrentes asignadas a señales: multiplexor.
Declaraciones concurrentes asignadas a señales: multiplexor
Selección de una señal: with-select-when Whith-select-else se utiliza para asignar un valor a una señal con base en el valor de otra señal previamente seleccionada.
Selección de una señal: with-select-when El selector puede ser entero.
Estructuras básicas con declaraciones secuenciales Declaraciones secuenciales: son aquellas en las que el orden que llevan pueden tener un efecto significativo en la lógica descrita. ¡Forman parte de un PROCESO! Un proceso en un sección secuencial de VHDL. Contiene IF, WAIT, CASE y LOOPs y una lista sensitiva. Sintaxis:
Reglas de procesos Si una señal es leída en el interior de un proceso (aparece en el lado derecho de una sentencia de asignación o en una condición), debe aparecer en su lista de sensibilidad. Si a una señal se le asigna un valor de forma condicional (con sentencias if o case) debemos asegurar que no existen condiciones para las cuales el valor de la señal no se ha definido en el código. En VHDL las señales mantienen su valor hasta que se les asigna uno nuevo.
Estructuras básicas con declaraciones secuenciales Sintaxis IF: Ejemplo:
Ejemplo: contador de un dígito
Sumadores: completo
Decodificador: BCD a 7 segmentos
Referencias: Volnei A. Pedroni. 2004. Circuit Design with VHDL. MIT Press, Cambridge, MA, USA. Maxinez, D.G., Alcalá, J. 2003. VHDL: el arte de programar sistemas digitales. Compañía Editorial Continental.