You are on page 1of 18

2016

Instituto Tecnológico de Tuxtla Gutiérrez

Descripción general del lenguaje VHDL

Catedrático:
Héctor Hernández De León

Integrantes
Lopez Ruiz Fredi Francisco
Perez Ozuna Marco Emilio

Descripción general del lenguaje VHDL
12 de abril del 2016

sintaxis y operadores) ……………………………………………………………. 9 Declaraciones concurrentes…………………………………………. 17 Descripción general del lenguaje VHDL .. 3 Declaraciones básicas de objetos…………………………………….. 10 Ejemplos de declaraciones secuenciales……………………………. Diseño Digital con VHDL Índice 2 Elementos del lenguaje VHDL (Estructura de programa..…… 14 Programación de FPGA’s o CPLD’S en una aplicación…………………. 12 Funciones y subprogramas……………………………………….

'3'. De igual manera. nombres de rutina. Las mayúsculas y minúsculas son consideradas iguales. Puede ser cualquier nombre compuesto por letras incluyendo el símbolo de subrayado "_". etc. Ejemplo: 2#11000100# y 16#C4# representan el entero 196. Descripción general del lenguaje VHDL . 4) Caracteres: Es cualquier letra o carácter entre comillas simples: 'l'. Algunos de estos elementos sintácticos son: 1) Comentarios: Cualquier línea que empieza por dos guiones "--" es un comentario. Es posible poner números en otras bases utilizando el símbolo del sostenido "#".1.1 Elementos sintácticos del VHDL El lenguaje VHDL tiene sus elementos sintácticos. No puede haber ningún identificador que coincida con alguna de las palabras clave del VHDL. señales. Comparando un HDL con los lenguajes para el desarrollo de software vemos que en un lenguaje de este tipo un programa que se encuentra en un lenguaje de alto nivel (VHDL) necesita ser ensamblado a código máquina (compuertas y conexiones) para poder ser interpretado por el procesador.1 Elementos del lenguaje VHDL 3 Los lenguajes de descripción de hardware (HDLs) son utilizados para describir la arquitectura y comportamiento de un sistema electrónico los cuales fueron desarrollados para trabajar con diseños complejos. Diseño Digital con VHDL 1.'t'. 2) Identificadores: Son cualquier cosa que sirve para identificar variables. El hecho de que sirva para la descripción hardware lo hace un poco diferente de un lenguaje convencional. sus tipos de datos. el objetivo de un HDL es describir un circuito mediante un conjunto de instrucciones de alto nivel de abstracción para que el programa de síntesis genere (ensamble) un circuito que pueda ser implementado físicamente. así que JOSE y José representan el mismo elemento. 3) Números: Cualquier número se considera que se encuentra en base 10. 1. y sus estructuras como cualquier otro tipo de lenguaje. Una de estas diferencias es probablemente la posibilidad de ejecutar instrucciones a la vez de forma concurrente. Se admite la notación científica convencional para números en coma flotante.

/ (División) También funciona con cualquier dato de tipo numérico. o X (hexadecimal). El operador de la izquierda puede ser entero o real. 6) Cadenas de bits: Los tipos bit y bit vector son en realidad de tipo carácter y matriz de caracteres respectivamente. pero el de la derecha sola puede ser entero. ABS() (Valor absoluto) Como su propio nombre indica esta función devuelve el valor absoluto de su argumento que puede ser de cualquier tipo numérico. Operadores varios & (Concatenación) Concatena matrices de manera que la dimensión de la matriz resultante es la suma de las dimensiones de las matrices sobre las que opera:  salida <=x&y Operadores aritméticos ** (Exponencial) Sirve para elevar un número a una potencia: 4**2 es 4^2. Ejemplo: B"11101001". X"FE". En VHDL se tiene una forma elegante de definir números con estos tipos y es mediante la cadena de bits. O (octal).1. Descripción general del lenguaje VHDL . 1. Diseño Digital con VHDL 4 5) Cadenas: Son un conjunto de caracteres englobados por comillas dobles: "Esto es una cadena". * (Multiplicación) Sirve para multiplicar dos números de cualquier tipo (los tipos bit o bit vector no son numéricos).2 Operadores y expresiones en VHDL Las expresiones en VHDL son prácticamente iguales a como pudieran ser en otros lenguajes de programación o descripción. Dependiendo de la base en que se especifique el número se puede poner un prefijo B (binario). O"126". por lo que se expondrán brevemente algunos de los existentes en VHDL y su utilización.

SRL (desplazamiento lógico a izquierda y a derecha) Desplaza un vector un número de bits a izquierda (SLL) o derecha (SRL) rellenando con ceros los huecos libres. La precedencia es diferente en cada caso. SLA.(resta y signo negativo) Cuando va entre dos operadores se realiza la operación de sustracción. El segundo indica desigualdad. REM (Resto) Calcula el resto de la división entera y se define como el operador que cumple: a=(a/b)*b+(a REM b). lo multiplica por 4. y si va delante de una expresión le cambia el signo. El resultado toma el signo de a. es decir. . Diseño Digital con VHDL MOD (Módulo) Calcula en módulo de dos números. Los operadores pueden ser numéricos de cualquier tipo. Los operadores solo pueden ser enteros. funciona justo al Descripción general del lenguaje VHDL . Exactamente se define 5 el módulo como la operación que cumple: a=b*N+(a MOD b) donde N es un entero. si va al principio de una expresión. Operadores relacionales Devuelven siempre un valor de tipo booleano (TRUE o FALSE). Los tipos con los que pueden operar dependen de la operación: =. Operadores de desplazamiento SLL. siendo la división entera. /= (igualdad) El primero devuelve TRUE si los operadores son iguales y FALSE en caso contrario. ROR (rotación a izquierda y a derecha) Es como el de desplazamiento pero los huecos son ocupados por los bits que van quedando fuera. o signo. si va entre dos operadores. Los operadores solo pueden ser enteros. Se utiliza en notación infija de manera que la señal a la izquierda del operador es el vector que se quiere desplazar y el de la derecha es un valor que indica el número de bits a desplazar. Por ejemplo dato SLL 2 desplaza a izquierda el vector dato. SRA (desplazamiento aritmético a izquierda y derecha) ROL. El resultado toma el signo de b. Opera sobre valores numéricos de cualquier tipo. + (Suma y signo positivo) Este operador sirve para indicar suma.

<=.. ambar. útiles para definir los estados de una máquina de estados finitos. El funcionamiento es el habitual para este tipo de operadores. la operación se realiza bit a bit.>= (menor mayor) Tienen el significado habitual.>. Actúan sobre los tipos bit. valorN). apagado). Diseño Digital con VHDL revés.3 Tipos de datos Tipos de datos escalares: Conjuntos ordenados de identificadores o caracteres definidos por el usuario. Los operadores pueden ser de cualquier tipo con la condición de que 6 sean ambos del mismo tipo. valor2. <... VARIABLE logicaMitad: variosLogicos. TYPE nombre_del_tipo IS (valor1. OR. NAND. ’1’. Descripción general del lenguaje VHDL . TYPE semaforo IS (rojo. La diferencia con los anteriores es que los tipos de datos que pueden manejar son siempre de tipo escalar o matrices de una sola dimensión de tipos discretos. 1. TYPE variosLogicos IS (‘X’. ’Z’). Ejemplos SIGNAL estadoActual: semaforo:= apagado. ’0’. bit vector y booleana.. En el caso de realizarse estas operaciones sobre un vector. verde. Enteros: Definidos en el paquete estándar TYPE integer IS RANGE -2147483648 TO 2147483647.1. Operadores lógicos Son NOT. AND. incluyendo la operación NOT. NOR y XOR.

–Internamente son considerados como enteros.0E38. El rango puede ser especificado en orden: –Ascendente: (límiteInferior TO límiteSuperior). capacidad). Diseño Digital con VHDL 7 Tienen asociados las operaciones matemáticas de suma (+). Descripción general del lenguaje VHDL . -.Kiloherzios MHz = 1000 KHz. -.0E38 TO 1. multiplicación (*) y división (/). UNITS Hz. -.microsegundo ms = 1000 us. -. – Tienen un valor y unas unidades. -.Megaherzios GHz = 1000 MHz. Coma flotante Números reales definidos en el paquete estándar TYPE real IS RANGE -1. TYPE nombreMagnitud IS RANGE restricción de rango UNITS Identificador= valores unidades. TYPE frecuencia IS RANGE 0 TO 10000000.nanosegundo us = 1000 ns.Herzios KHz = 1000 Hz. -- Gigaherzios END UNITS. Ejemplos: TYPE tiempo IS RANGE 0 TO 10000000. END UNITS. UNITS ns. distancia. -. –Descendente: (límiteSuperior DOWNTO límiteInferior). -- milisegundo s = 1000 ms.segundo END UNITS. Físicos: Físico Es un tipo enumerado que se utiliza para representar magnitudes físicas (tiempo. resta (-).

 Un tipo y un subtipo se consideran el mismo tipo de datos y pueden mezclarse en una operación. resta (-).  Declarados de igual forma que los enteros. Tipos de datos compuestos: Vectores y matrices  Es una colección indexada de elementos que son del mismo tipo.0.0 TO 1. Diseño Digital con VHDL 8  Tienen asociados las operaciones matemáticas de suma (+).  Números reales definidos por el usuario TYPE nombre IS RANGE rango de números reales.0 DOWNTO 0.0.1. TYPE identificador IS ARRAY rango OF tipoDatos. multiplicación (*) y división (/).  Son útiles para detectar si un objeto toma valores dentro del rango esperado. Ejemplos: TYPE notas IS RANGE 10. TYPE probabilidad IS RANGE 0. Descripción general del lenguaje VHDL . 1.4 Subtipos de datos  Se utilizan para definir subconjuntos ya declarados en un tipo de datos.  Cada elemento de un vector o una matriz puede ser accedido por uno o más índices.  Son especialmente útiles para modelar memorias (RAM/ROM).

’4’.1 Declaración de constantes Las contantes son elementos que se inicializan con un valor que no puede ser cambiado CONSTANT pi=3.3 Declaración de señales Se declaran de forma similar a las contantes y variables. Diseño Digital con VHDL SUBTYPE identificadorSubtipo IS identificadorTipo [RANGE valor1 9 O/DOWNTO valor2] Ejemplo. ’9’.2. SIGNAL dato:std_logic_vector (7DOWNTO 0). ’A’.4 Declaración de ficheros En algunas ocasiones es interesante utilizar ficheros para leer información o incluso almacenarla. CONSTANT retraso:time:= 10ns 1.14159. pero pueden ser de 3 tipos.2 Declaraciones básicas de objetos 1. VARIABLE aux:_std_logic_vector (31DOWNTO 0). ’5’.2. Por defecto se usa el tipo normal. SUBTYPE octal IS hexadecimal RANGE ‘0’ TO ‘7’. ’2’. ’6’. 1. ’C’. ’F’). VARIABLE contador: natural:=0. ’8’. 1.2 Declaración de variables Se diferencia de una constante en que si se puede cambiar su valor. register y bus. ’7’.2. Se le puede dar valor inicial. TYPE hexadecimal IS (‘0’. El uso de ficheros únicamente es válido en la Descripción general del lenguaje VHDL . 1. ’3’. ’E’. ’D’. SIGNAL selec: std_logic_=0.2. normal. ’1’. ’B’ .

mientras que en la síntesis no es posible su uso. La ventaja de pensar en una entidad como en una caja negra a la que se conectan cables es que es más fácil comprender la ejecución concurrente que ocurrirá en el hardware. punteros o ficheros.] [PORT(lista de puertos). Descripción general del lenguaje VHDL . FILE nombre : fichero_tipo IS [modo] "fichero": -.3. 1. Diseño Digital con VHDL simulación. Estos ficheros 10 no pueden almacenar matrices multidimensionales.VHDL'93. En primer lugar se debe declarar el tipo de datos que contendrá dicho archivo.3 Declaraciones concurrentes 1. Para definir una entidad se realizará mediante la palabra reservada ENTITY. ENTITY nombre IS [GENERIC(lista de parámetros).2 Declaración de arquitectura La arquitectura es lo que define cómo se comporta un circuito. En VHDL es más conveniente ver a la entidad como una caja negra con cables para las entradas y salidas.3.VHDL'87 [fichero_tipo [OPEN modo] IS "fichero"] -. Mediante las palabras reservadas TYPE y FILE se genera la siguiente estructura. TYPE fichero_tipo IS FILE OF tipo.] END [ENTITY] nombre. 1.1 Declaración de entidad La entidad sirve para definir las entradas y salidas que tendrá un determinado circuito. En principio pudiera parecer que esta definición sea equivalente a la cabecera de una función de un lenguaje cualquiera de programación. La descripción de cómo funciona por dentro esa caja negra es la arquitectura.

por ejemplo en un circuito puede tener una entrada que se aplique a dos puertas lógicas y de cada una obtener una salida. No hay que olvidar que en VHDL hay que describir un hardware. en este caso tendría dos caminos en los que se ejecutarían acciones (operaciones lógicas (AND. Sin embargo es más difícil de desarrollar porque requiere de mayor experiencia del diseñador para hacer los diseños más eficientes. 1.3 Diferentes tipos de arquitectura (estructural.3.OR. como consecuencia no se seguirá el orden en que están escritas las instrucciones a la hora de ejecutar el código.3. si hay dos instrucciones.NOT. s <= "00" WHEN a = b ELSE "01" WHEN a > b ELSE "11". VHDL es un lenguaje concurrente. Diseño Digital con VHDL 11 ARCHITECTURE mux_comportamiento OF mux IS ARCHITECTURE mux_rtl OF mux IS ARCHITECTURE mux_estructural OF mux IS 1. algo que no se hace en un programa para ordenador. De hecho.4 Ejemplos de descripción flujo de datos A la hora de plantearse crear un programa en VHDL no hay que pensar como si fuera un programa típico para ordenador. de intersección y de complemento) de forma paralela. Esto es lo que se llama concurrencia. flujo de datos y funcional). Descripción general del lenguaje VHDL .IF). de unión. pueden ejecutarse a la vez. Un circuito electrónico puede tener muchos elementos que estén ejecutando acciones a la vez. La descripción estructural es mucho más fácil de sintetizar que la descripción funcional por que se refiere a componentes físicos concretos. no tiene porqué ejecutarse una antes que otra.

rst : IN std_logic. USE IEEE. estado: Salida del estado. También se añade una señal para sacar el estado al exterior. b : OUT std_logic. 1. Diseño Digital con VHDL 1. estado : OUT Descripción general del lenguaje VHDL . b: Salida de datos. Ejemplo: IF (reloj='1' AND enable='1') THEN salida<=entrada.  Salidas: a: Salida de datos.  Entradas: rst: Reset del sistema. Por consiguiente. hará falta el reset y reloj del sistema como entradas del sistema. ELSIF (enable='1') THEN salida<=tmp. dependiendo de los estados por donde va fluyendo la ruta de datos. clk: Reloj del sistema. LIBRARY IEEE. a : OUT std_logic.ALL. END IF. ENTITY maquina_estados IS PORT (clk : IN std_logic.4. ELSE salida<='0'.1 Ejemplos de diagramas de máquinas de estado El objetivo es crear un sistema que genere unas salidas determinadas.4 Ejemplos de declaraciones secuenciales 12 Permite la ejecución de un bloque de código dependiendo de una o varias condiciones.STD_LOGIC_1164.

a <= '1' WHEN pstate = "0000" ELSE --0 '0' WHEN pstate = "0001" ELSE --1 '0' WHEN pstate = "0010" ELSE --2 '1' WHEN pstate = "0011" ELSE --3 '1' WHEN pstate = "0100" ELSE --4 '1' WHEN pstate = "0101" ELSE --5 '1' WHEN pstate = "0110" ELSE --6 '1' WHEN pstate = "0111" ELSE --7 '1' WHEN pstate = "1000" ELSE --8 '1' WHEN pstate = "1001" ELSE --9 '0'. END PROCESS. Descripción general del lenguaje VHDL . 13 ARCHITECTURE synth OF maquina_estados IS SIGNAL pstate. estado <= pstate. ELSIF clk = '1' AND clk'event THEN pstate <= n_state. rst) BEGIN IF rst = '1' THEN pstate <= "0000". END IF. n_state : std_logic_vector(3 downto 0). END synth. n_state <= "0001" WHEN (pstate = "0000") ELSE "0010" WHEN (pstate = "0001") ELSE "0011" WHEN (pstate = "0010") ELSE "0100" WHEN (pstate = "0011") ELSE "0101" WHEN (pstate = "0100") ELSE "0011" WHEN (pstate = "0101") ELSE "0111" WHEN (pstate = "0011") ELSE "1000" WHEN (pstate = "0111") ELSE "1001" WHEN (pstate = "1000") ELSE "0000".maquina de estados PROCESS (clk. BEGIN -. b <= '1' WHEN pstate = "0000" ELSE --0 '1' WHEN pstate = "0001" ELSE --1 '1' WHEN pstate = "0010" ELSE --2 '1' WHEN pstate = "0011" ELSE --3 '1' WHEN pstate = "0100" ELSE --4 '0' WHEN pstate = "0101" ELSE --5 '0' WHEN pstate = "0110" ELSE --6 '1' WHEN pstate = "0111" ELSE --7 '1' WHEN pstate = "1000" ELSE --8 '1' WHEN pstate = "1001" ELSE --9 '0'. END maquina_estados. Diseño Digital con VHDL std_logic_vector(3 downto 0)).

5 Funciones y subprogramas 14 Como en otros lenguajes de programación. Diseño Digital con VHDL 1. en caso de tener una sentencia de ese tipo interrumpirá la ejecución del procedimiento. PROCEDURE nombre[(parámetros)] IS [declaraciones] BEGIN [sentencias] Descripción general del lenguaje VHDL . Una función devuelve un valor y un procedimiento devuelve los valores a través de los parámetros que le han sido pasados como argumentos. Las funciones nunca pueden tener una sentencia WAIT. paquetes. las primeras deberán contener la palabra reservada RETURN.5. bloques.1 Declaración de procedimientos y funciones Las declaraciones de estos elementos pueden realizarse en la parte declarativas de las arquitecturas. en VHDL es posible estructurar el código mediante el uso de subprogramas. un subprograma es una función o procedimiento que realiza una determinada tarea. Los procedimientos pueden tener efectos colaterales al poder cambiar señales externas que han sido pasadas como parámetros. por lo que sólo pueden ser leidos dentro de la misma. A consecuencia de la anterior. de salida o de entrada y salida (unidireccionales o bidireccionales). se muestra la estructura de un procedimiento. aunque existen ciertas diferencias entre ambas. A continuación. pero los procedimientos sí. por el contrario en un procedimiento los parámetros pueden ser de entrada. Por ello. etc. por otro lado las funciones no poseen estos efectos. Realmente. en una función todos sus parámetros son de entrada. sin embargo. los procedimientos se llaman como una sentencia secuencial o concurrente. 1. Las funciones se usan en expresiones. mientras que las segundas no tienen necesidad de disponer dicha sentencia.

Asociación implícita: Poniendo los parámetros en el mismo orden en el que se declaran en el subprograma. 15 1. Por ejemplo. PROCEDURE limite(CONSTANT conj : IN std_logic_vector(3 DOWNTO 0).2 Subprogramas Es muy sencillo realizar una invocación a un subprograma. limite(min=>valmin. conj=>cjt(31 DOWNTO 28)). valmin.. Un ejemplo de la llamada al procedimiento anterior podría ser la siguiente.. max=>valmax.. Descripción general del lenguaje VHDL . 1 Asociación explícita: Los parámetros se colocan en cualquier orden. max : INOUT integer) IS . los cuales irán entre paréntesis. y en el caso de pasar un valor a dichos argumentos puedan tomar el valor especificado. limite(cjt(31 DOWNTO 28). basta con indicar el nombre de dicho subprograma seguido de los argumentos. END PROCEDURE. -. PROCEDURE lee(longuitud : IN integer := 200) IS BEGIN . En VHDL existen varias formas de pasar los parámetros a un subprograma.. de forma que tengan unos valores por defecto. Un ejemplo de este tipo de llamadas sería el siguiente. valmax). 2 Parámetros libres: En VHDL es posible dejar parámetros por especificar.5.Llamada al procedimiento.. VARIABLE min. Diseño Digital con VHDL END [PROCEDURE] [nombre]. si se dispone del siguiente procedimiento.

Por consiguiente. se puede sacar la conclusión de que cada unidad secundaria deberá estar asociada con una unidad primaria. como se explicó en el Descripción general del lenguaje VHDL . un paquete consta de un conjunto de subprogramas.3 Paquetes Como se comentó al principio. esto se debe a que en VHDL no existe un estándar para crear bibliotecas. Así se pueden hacer visibles las interfaces de los subprogramas y ocultar su descripción. Además. éstos se denominan ficheros de diseño. están las unidades primarias. etc. que corresponderán a entidades. Por un lado. constantes. La forma que toma la librería una vez compilada es muy diversa. La biblioteca donde se guardan los resultados de la compilación se denomina work.5. paquetes y archivos de configuración. declaraciones. Al realizar una compilación se analizarán las unidades que vayan apareciendo en el texto.5. Por lo tanto. también es posible hacer visibles elementos internos de estas bibliotecas con el uso de la sentencia USE. en uno o más ficheros. Mientras que las unidades secundarias serán arquitecturas y cuerpos de paquetes. Una librería se compone de dos partes bien diferenciadas. para que de esta forma se puedan cumplir las dependencias existentes entre las mismas. estos ficheros serán compilados para obtener una librería o biblioteca de diseño. etc. Diseño Digital con VHDL Posibles llamadas 16 lee. lee(350). los paquetes. es importante establecer un orden lógico de las distintas unidades. como pueden ser las entidades. dependiendo de la herramienta de compilación utilizada así será el resultado obtenido.4 bibliotecas Hasta ahora se han visto varios elementos del lenguaje. de forma que esta biblioteca contiene los elementos que componen el circuito. dependiendo de las unidades que la formen.. con la intención de implementar algún servicio. Posteriormente. 1. 1. las arquitecturas. Para incluir una librería a un diseño basta con utilizar la palabra reservada LIBRARY seguida del nombre de la biblioteca a utilizar. Cuando se realiza una descripción en VHDL se utilizan estas unidades.

en una forma similar a los CPLDs grandes. El término field-programmable (literamente programable en el campo) se refiere a que la matriz se define fuera de la fábrica. pero este método no es manejable para dispositivos con cientos de pines. 17 1. se pueden utilizar PLDs complejos o CPLDs. Esta corriente de desarrollo desembocó en un dispositivo basado en la tecnología de matriz de puertas y se le denominó field-programmable gate array (FPGA). todo ello en el mismo circuito integrado. Para circuitos lógicos mayores. Un segundo método de programación es soldar el dispositivo en su circuito impreso. pero la programación en este caso la realiza el cliente. o incluso cientos de miles de puertas lógicas. Diseño Digital con VHDL apartado anterior. Algunas veces la decisión sobre una u otra es más económica que técnica. Las CPLDs contienen un circuito que descodifica la entrada de datos y configura la CPLD para realizar su función lógica específica. En las FPGAs más grandes. presentados a finales de los 70. Las FPGAs y los CPLDs son buenas opciones para una misma tarea. La configuración se guarda normalmente en una PROM o EEPROM. similar a la de una matriz de puertas ordinarias. o "en el campo". En el caso de querer hacer visible todos los elementos de un paquete se puede utilizar la palabra reservada ALL. Algunas CPLDs se programan utilizando un programador PAL. o puede depender de la preferencia personal o experiencia del ingeniero. equivalentes a unos pocos cientos de puertas lógicas. Las PALs y GALs están disponibles sólo en tamaños pequeños. no el fabricante. Las FPGAs utilizan una rejilla de puertas lógicas. Algunos ejemplos de las primeras FPGAs son la matriz 82s100 y el secuenciador 82S105 de Signetics. Estos contienen el equivalente a varias PAL enlazadas por interconexiones programables. El 82S100 era una matriz de términos AND.6 Programacion de FPGA’s 0 CPLD’S en una aplicación Mientras el desarrollo de las PALs se enfocaba hacia las GALs y CPLDs apareció una corriente de desarrollo distinta. Las versiones EEPROM pueden ser programadas mediante técnicas como el uso de cables JTAG. la configuración es volátil y debe ser reescrita cada vez que se enciende o se necesita una funcionalidad diferente. y también tenía funciones de biestable. Descripción general del lenguaje VHDL . Las CPLDs pueden reemplazar miles. Las FPGAs se programan normalmente tras ser soldadas en la placa.

Diseño Digital con VHDL Cada fabricante tiene un nombre propietario para este sistema de programación. Lattice Semiconductor la llama In-system 18 programming (Programación en el sistema). Por ejemplo. Sin embargo. Descripción general del lenguaje VHDL . estos sistemas propietarios están dejando paso al estándar del Joint Test Action Group (JTAG).