Вы находитесь на странице: 1из 29

UNIVERSIDAD YACAMB VICE-RECTORADO ACADMICO FACULTAD DE INGENIERA

VHDL (Very High Speed Integrated Circuits - Hardware Description Language).

Autor: Gustavo Majano Osiel Cordones

VHDL es un lenguaje de descripcin de circuitos electrnicos digitales que utiliza distintos niveles de abstraccin. El significado de las siglas VHDL es VHSIC (Very High Speed Integrated Circuits) y HDL (Hardware Description Language). Esto significa que VHDL permite acelerar el proceso de diseo. VHDL no es un lenguaje de programacin, por ello conocer su sintaxis no implica necesariamente saber disear con l. VHDL es un lenguaje de descripcin de hardware, que permite describir circuitos sncronos y asncronos.

Los estudios para la creacin del lenguaje VHDL (VHSIC HDL) comenzaron en el ao 1981, bajo la cobertura de un programa para el desarrollo de Circuitos Integrados de Muy Alta Velocidad (VHSIC), del Departamento de Defensa de los Estados Unidos. En 1983 las compaas Intermetrics, IBM y Texas Instruments obtuvieron la concesin de un proyecto para la realizacin del lenguaje y de un conjunto de herramientas auxiliares para su aplicacin. Finalmente, en el ao 1987, el lenguaje VHDL se convierte en la norma IEEE-1076-1993. Para realizar una correcta programacin en VHDL se debe tener en cuenta: - Pensar en puertas y biestables, no en variables ni funciones. - Evitar bucles combinacionales y relojes condicionados. - Saber qu parte del circuito es combinacional y cul secuencial. - Poder descubrir problemas en el diseo antes de su implementacin fsica. - La complejidad de los sistemas electrnicos crece exponencialmente, es necesaria una herramienta que trabaje con el ordenador. - Permite que ms de una persona trabaje en el mismo proyecto.

CARACTERSTICAS DEL LENGUAJE El lenguaje VHDL fue creado con el propsito de especificar y documentar circuitos y sistemas digitales utilizando un lenguaje formal. En la prctica se ha convertido, en un gran nmero de entornos de CAD, en el HDL de referencia para realizar modelos sintetizables automticamente. Las principales caractersticas del lenguaje VHDL se explican en los siguientes puntos: Descripcin textual normalizada: El lenguaje VHDL es un lenguaje de descripcin que especifica los circuitos electrnicos en un formato adecuado para ser interpretado tanto por mquinas como por personas. Se trata adems de un lenguaje formal, es decir, no resulta ambiguo a la hora de expresar el comportamiento o representar la estructura de un circuito. Est, como ya se ha dicho, normalizado, o sea, existe un nico modelo para el lenguaje, cuya utilizacin est abierta a cualquier grupo que quiera desarrollar herramientas basadas en dicho modelo, garantizando su compatibilidad con cualquier otra herramienta que respete las indicaciones especificadas en la norma oficial. Es, por ltimo, un lenguaje ejecutable, lo que permite que la descripcin textual del hardware se materialice en una representacin del mismo utilizable por herramientas auxiliares tales como simuladores y sintetizadores lgicos, compiladores de silicio, simuladores de tiempo, de cobertura de fallos, herramientas de diseo fsico, etc.

Amplio rango de capacidad descriptiva: El lenguaje VHDL posibilita la descripcin del hardware con distintos niveles de abstraccin, pudiendo adaptarse a distintos propsitos y utilizarse en las sucesivas fases que se dan en el desarrollo de los diseos. Adems es un lenguaje adaptable a distintas metodologas de diseo y es independiente de la tecnologa, lo que permite, en el primer caso, cubrir el tipo de necesidades de los distintos gneros de instituciones, compaas y organizaciones relacionadas con el mundo de la electrnica digital; y, en el segundo, facilita la actualizacin y adaptacin de los diseos a los avances de la tecnologa en cada momento.
Adems de las ventajas ya reseadas tambin es destacable la capacidad del lenguaje para el manejo de proyectos de grandes dimensiones, las garantas que comporta su uso cuando, durante el ciclo de mantenimiento del proyecto, hay que sustituir componentes o realizar modificaciones en los circuitos, y el hecho de que, para muchas organizaciones contratantes, sea parte indispensable de la documentacin de los sistemas.

FORMAS DE DESCRIBIR UN CIRCUITO Dentro del VHDL hay varias formas con las que podemos disear el mismo circuito y es tarea del diseador elegir la ms apropiada. - Funcional: Describimos la forma en que se comporta el circuito. Esta es la forma que ms se parece a los lenguajes de software ya que la descripcin es secuencial. Estas sentencias secuenciales se encuentran dentro de los llamados procesos en VHDL. Los procesos son ejecutados en paralelo entre s, y en paralelo con asignaciones concurrentes de seales y con las instancias a otros componentes. - Flujo de datos: describe asignaciones concurrentes (en paralelo) de seales. Estructural: se describe el circuito con instancias de componentes. Estas instancias forman un diseo de jerarqua superior, al conectar los puertos de estas instancias con las seales internas del circuito, o con puertos del circuito de jerarqua superior. - Mixta: combinacin de todas o algunas de las anteriores. En VHDL tambin existen formas metdicas para el diseo de mquinas de estados, filtros digitales, bancos de pruebas etc.

SECUENCIA DE DISEO
El flujo de diseo de un sistema podra ser: - Divisin del diseo principal en mdulos separados. La modularidad es uno de los conceptos principales de todo diseo. Normalmente se diferencia entre dos metodologas de diseo: top-down y botton-up. La metodologa top-down consiste en que un diseo complejo se divide en diseos ms sencillos que se puedan disear (o describir) ms fcilmente. La metodologa botton-up consiste en construir un diseo complejo a partir de mdulos, ya diseados, ms simples. En la prctica, un diseo usa generalmente ambas metodologas. - Entrada de diseos, pueden usarse diversos mtodos tal como se vio anteriormente.

- Simulacin funcional, es decir, comprobaremos que lo escrito en el punto anterior realmente funciona como queremos, si no lo hace tendremos que modificarlo. En este tipo de simulacin se comprueba que el cdigo VHDL o Verilog (u otro tipo de lenguaje HDL) ejecuta correctamente lo que se pretende.

- Sntesis. En este paso se adapta el diseo anterior (que sabemos que funciona) a un hardware en concreto, ya sea una FPGA o un ASIC. Hay sentencias del lenguaje que no son sintetizables, como por ejemplo divisiones o exponenciaciones con nmeros no constantes. El hecho de que no todas las expresiones en VHDL sean sintetizables es que el VHDL es un lenguaje genrico para modelado de sistemas (no slo para diseo de circuitos digitales), por lo que hay expresiones que no pueden ser transformadas a circuitos digitales. Durante la sntesis se tiene en cuenta la estructura interna del dispositivo, y se definen restricciones, como la asignacin de pines. El sintetizador optimiza las expresiones lgicas con objeto de que ocupen menor rea, o bien son eliminadas las expresiones lgicas que no son usadas por el circuito. - Simulacin post-sntesis. En este tipo de simulacin se comprueba que el sintetizador ha realizado correctamente la sntesis del circuito, al transformar el cdigo HDL en bloques lgicos conectados entre s. Este paso es necesario ya que, a veces, los sintetizadores producen resultados de sntesis incorrectos, o bien realiza simplificaciones del circuito al optimizarlo.

- Ubicacin y enrutamiento. El proceso de ubicacin consiste en situar los bloques digitales obtenidos en la sntesis de forma ptima, de forma que aquellos bloques que se encuentran muy interconectados entre s se siten prximamente. El proceso de enrutamiento consiste en interconectar adecuadamente los bloques entre s, intentando minimizar retardos de propagacin para maximizar la frecuencia mxima de funcionamiento del dispositivo. - Anotacin final. Una vez ha sido completado el proceso de ubicacin y enrutamiento, se extraen los retardos de los bloques y sus interconexiones, con objeto de poder realizar una simulacin temporal (tambin llamada simulacin post-layout). Estos retardos son anotados en un fichero SDF (Standard Delay Format) que asocia a cada bloque o interconexin un retardo mnimo/tpico/mximo. - Simulacin temporal. A pesar de la simulacin anterior puede que el diseo no funcione cuando se programa, una de las causas puede ser por los retardos internos del chip. Con esta simulacin se puede comprobar, y si hay errores se tiene que volver a uno de los anteriores pasos. - Programacin en el dispositivo. Se implementa el diseo en el dispositivo final y se comprueba el resultado.

PROCEDIMIENTO DE DISEO
El primer paso del diseo consiste en la construccin del diagrama en bloque del sistema. En diseos complejos como en software los programas son generalmente jerrquicos y VHDL ofrece un buen marco de trabajo para definir los mdulos que integran el sistema y sus interfaces, dejando los detalles para pasos posteriores. El segundo paso es la elaboracin del cdigo en VHDL para cada mdulo, para sus interfaces y sus detalles internos. Como el VHDL es un lenguaje basado en texto, se puede utilizar cualquier editor para esta tarea, aunque el entorno de los programas de VHDL incluye su propio editor de texto. Despus de que se ha escrito algn cdigo se hace necesario compilarlo. El compilador de VHDL analiza este cdigo y determina los errores de sintaxis y chequea la compatibilidad entre mdulos. Crea toda la informacin necesaria para la simulacin. El prximo paso es la simulacin, la cual le permite establecer los estmulos a cada mdulo y observar su respuesta. El VHDL da la posibilidad de crear bancos de prueba que automticamente aplica entradas y compara las salidas con las respuestas deseadas. La simulacin es un paso dentro del proceso de verificacin. El propsito de la simulacin es verificar que el circuito trabaja como se desea, es decir es ms que comparar entradas y salidas.

Despus de la verificacin se est listo para entrar en la fase final del diseo. La naturaleza y herramientas en esta fase dependen de la tecnologa, pero hay tres pasos bsicos. El primero es la sntesis, que convierte la descripcin en VHDL en un conjunto de componentes que pueden ser realizados en la tecnologa seleccionada. Por ejemplo, con PLD (Programmable Logic Device) se generan las ecuaciones en suma de productos. En ASIC genera una lista de compuertas y un netlist que especifica cmo estas compuertas son interconectadas. El diseador puede ayudar a la herramienta de sntesis especificando requerimientos a la tecnologa empleada, como el mximo nmero de niveles lgicos o la capacidad de salida que se requiere. En el siguiente paso de ajuste (fiting) los componentes se ajustan a la capacidad del dispositivo que se utiliza. Para PLD esto significa que acopla las ecuaciones obtenidas con los elementos AND OR que dispone el circuito. Para el caso de ASIC se dibujaran las compuertas y se definira como conectarlas. En el ltimo paso se realiza la verificacin temporal, ya que a esta altura es que se pueden calcular los elementos parsitos, como las capacidades de las conexiones.

ESTRUCTURA DE PROGRAMA VHDL fue diseado con base a los principios de la programacin estructurada. La idea es definir la interfaz de un mdulo de hardware mientras deja invisible sus detalles internos. La entidad (ENTITY) en VHDL es simplemente la declaracin de las entradas y salidas de un mdulo mientras que la arquitectura (ARCHITECTURE) es la descripcin detallada de la estructura interna del mdulo o de su comportamiento. En la siguiente figura (Figura 1) se ilustra el concepto anterior. Muchos diseadores conciben la Entity como una funda de la arquitectura dejando invisible los detalles de lo que hay dentro (architecture). Esto forma la base de un sistema de diseo jerrquico, la arquitectura de la entidad de ms nivel (top level) puede usar otras entidades, dejando invisible los detalles de la arquitectura de la identidad de menos nivel. En un fichero texto VHDL la entidad y la arquitectura se escriben separadas, por ejemplo a continuacin (ejemplo 1) se muestra un programa muy simple en VHDL de una compuerta de 2 entradas y una salida. Como otros programas, VHDL ignora los espacios y saltos de lneas. Los comentarios se escriben con 2 guiones (--) y terminan al final de la lnea. En la figura siguiente se muestra la estructura de un modelo en VHDL. SINTAXIS PARA LA DECLARACIN DE LA ENTIDAD VHDL define muchos caracteres especiales llamados palabras reservadas. Aunque las palabras reservadas no son sensibles a las maysculas o minsculas, en el ejemplo que sigue las utilizaremos en maysculas y negrita para identificarlas.

Figura 1.

Ejemplo 1.

Adems de darle nombre a la entidad el propsito de la declaracin es definir sus seales (o ports) de interfaz externa en su declaracin de ports. Adems de las palabras reservadas o claves ENTITY, IS, PORT and END, una ENTITY tiene los siguientes elementos: - Nombre_entidad: es un identificador seleccionado por el usuario para seleccionar la entidad.

- Nombre de seal: es una lista de uno o ms identificadores separados por una coma y seleccionados por el usuario para identificar las seales externas de la interfaz.
- MODO es una de las 4 siguientes palabras reservadas para indicar la direccin de la seal:
Modo IN OUT BUFFER
INOUT

Descripcin En este modo las seales solo entran en la entidad Las seales salen de la entidad Este modo se utiliza para las seales que adems de salir de la entidad pueden usarse como entradas realimentadas Este modo se utiliza para seales bidireccionales. Se emplea en salida con tres estados. Se puede asignar como sustituto de los tres modos anteriores, pero no se aconseja pues dificulta la comprensin del programa.

Cuando se omite el modo de una seal en la declaracin de la entidad se sobreentiende que es de entrada.
Tipo de seal; en VHDL, hay varios tipos de seales predefinidas por el lenguaje, tales como:
TIPO BIT Booleana Std_logic Caractersticas En este tipo las seales solo toman los valores de "1" y "0" En este tipo las seales solo toman los valores de True y False En este tipo las seales toman 9 valores, entre ellos tenemos: "1", "0", "Z" (para el 3er estado), "" (para los opcionales). En este tipo las seales toman valores enteros. Los 1 y los 0 se escriben sin " " En este tipo los valores de las seales son una cadena de unos y ceros. Ejemplo: 1000 En este tipo los valores de las seales son una cadena de los nueve valores permisibles para el tipo std_logic. Contiene todos los caracteres ISO de 8 bits, donde los primeros 128 son los caracteres ASCII.

Integer

Bit_Vector
Std_Logic_Vector

Character

Tipo U X 0 1 Z W L H -

Std_logic Uninitialized (Sin inicializar) Forcing Unknown (Forzar valor desconocido) Forcing 0 (Forzar un cero) Forcing 1 (Forzar un uno) High Impedance (Alta impedancia) Weak Unknown (Valor dbil desconocido) Weak 0 (Cero dbil) Weak 1 (uno dbil) Dont care (Cualquier valor)

Adems el usuario puede definir otros tipos de seales, lo que resulta muy conveniente en algunos casos, como en el diseo de mquinas de estados. El lenguaje VHDL concede mxima importancia a los tipos de seales, no se admite realizar una asignacin mezclando tipos diferentes.

SINTAXIS PARA LA DEFINICIN DE LA ARQUITECTURA

La sintaxis para la declaracin de la arquitectura es la siguiente (aparecen en mayscula las palabras reservadas del lenguaje VHDL, pero esto no es necesario):

Figura 2.

Las declaraciones y definiciones que preceden al BEGIN, pueden estar presentes todas, algunas o ninguna. Esto depende del tipo de diseo que se est realizando. No obstante la declaracin de seales se utiliza mucho, pues contribuye entre otras cosas a la claridad del diseo. Nombre_entidad es el nombre de su entidad. Nombre_arquitectura es el nombre dado por el usuario a la arquitectura. Las seales externas de la arquitectura son las declaradas en el port de la entidad, no obstante una arquitectura puede contener seales y otras declaraciones que solo existen localmente en esa arquitectura. Declaraciones comunes a varias entidades pueden ser puestas en un paquete separado utilizado por todas las entidades. Las declaraciones en la arquitectura pueden aparecer en diferente orden, pero lo ms usual es comenzar por la declaracin de las seales.

Signal signal-name : signal-type Variables en VHDL son similares a las seales excepto que ellas no tienen significado fsico en el circuito. En el ejemplo 1 no se puso declaracin de variables, ellas son usadas en funciones, procedimientos y procesos. Todas las seales, variables y constantes en VHDL tienen asociadas un tipo, este especifica el conjunto de valores que el objeto puede tomar. Tambin hay un conjunto de operadores tales como add, and etc, asociados con un tipo dado.

OPERADORES EN VHDL En VHDL existen diferentes operadores entre los que tenemos: Operadores Definidos en VHDL para los tipos: Lgicos: AND, OR, XOR, NOT, NAND, NOR, XNOR; Bit y Booleanos. De relacin: =, /=, <, >, >=, <=; Integer, Bit_Vector, Aritmticos: +, -, *, /, Mod, Rem, Abs, Mod: Modulo de la divisin. Rem: Resto de la divisin, Abs: valor absoluto. En VHDL lo que se escribe despus de -- es un comentario. Asignaciones condicionales en VHDL: En VHDL hay varias asignaciones que se realizan en forma condicionada. IF . ELSEIF.. WITH ...... SELECT .... WHEN ..... OTHERS WHEN ..... ELSE .

Ejemplo 2. Compuerta XOR con condicionales.

Ejemplo 3. Compuerta NOR con entradas booleanas usando los condicionales WHEN

Ejemplo 4. . Compuerta NOR con entradas booleanas usando los condicionales WITH SELECT WHEN OTHERS..

Sintaxis para el trabajo con vectores. Los vectores se describen como: a(3), a(2), a(1), a(0), siempre comenzando por 0.Cuando un vector se declara en orden descendente utilizando la palabra clave DOWNTO por ejemplo (3 DOWNTO 0), debemos interpretar que el MSB es a(3) y el LSB es a(0). Si se declara (0 to 3), entonces el LSB es a(3) y el MSB es a(0).

BIBLIOTECAS Una biblioteca en VHDL es un lugar en donde se guarda la informacin relacionada con un diseo determinado. Al comienzo de cada diseo el compilador crea automticamente una biblioteca llamada WORK con este objetivo. Adems de esta biblioteca particular existen otras bibliotecas de tipo general que contienen un conjunto de definiciones que pueden utilizarse en cualquier diseo. Un ejemplo de biblioteca general es la llamada Library IEEE, que contiene definiciones estndar para VHDL. Para utilizar una biblioteca general es necesario escribir su nombre al inicio del programa, por eso es muy comn que en la primera lnea de un diseo en VHDL aparezca escrito "Library IEEE", de sta forma dicha biblioteca se hace visible para el diseo. PAQUETES En los paquetes se guardan definiciones de tipos y objetos que pueden ser utilizados en los diferentes diseos que invoquen su utilizacin. Un paquete muy utilizado es el paquete estndar IEEE_STD_LOGIC_1164.ALL. La utilizacin de un paquete en un diseo se realiza invocando su empleo mediante la clusula USE y el nombre del paquete. Por ejemplo USE IEEE_STD_LOGIC_1164.ALL. La terminacin ALL, permite utilizar todas las definiciones y objetos que contiene dicho paquete. Adems del estndar, existen otros paquetes de utilizacin general y tambin los diseadores que trabajan con VHDL pueden definir sus propios paquetes, lo que les permite reutilizar diseos realizados anteriormente como parte de nuevos diseos.

La sintaxis para la definicin de un paquete es la siguiente:

Figura 2.

Esta ltima parte que aparece entre los dos END, la relacionada con el cuerpo del paquete puede o no existir y en el caso de existir las declaraciones y definiciones contenidos en la misma son locales, visibles solo dentro del paquete, mientras que las declaraciones y definiciones contenidas en la primera parte del paquete son visibles para todos los diseos que los utilicen.

SINTAXIS PARA LA DECLARACIN DE UNA COMPONENTE EN VHDL Figura 3.

Ejemplo 5.

Ahora lo empaquetamos para poder utilizarlo en otro diseo:

EJEMPLOS DE PROGRAMAS Ejemplo 1. Multiplexor Este ejemplo simula un multiplexor de dos entradas. Es un ejemplo sencillo que muestra como describir un elemento a partir de su funcionamiento.

Ejemplo 2. Biestable A continuacin se muestra el proceso que describe un biestable D activado por el flanco de subida del reloj (CLK). Este biestable tiene una seal de reset asncrona (RST). El dato D se guarda en el biestable hasta el siguiente flanco de subida del reloj.

Ejemplo 3. Contador Este es un ejemplo de un sistema que contar pulsos de un reloj digital (CLK) hasta llegar a 1000 y entonces volver a empezar. La inicializacin se consigue con un reset (RST).

Ejemplo 4. Hola Mundo El VHDL permite descripciones que no son sintetizables, es decir, que no se pueden implementar directamente en un circuito electrnico digital. Este tipo de descripciones son tiles en simulacin. Un ejemplo de este tipo de descripciones son las que incluyen mensajes que notifican al diseador si se ha cumplido alguna condicin durante la simulacin. Es importante sealar que esta descripcin no es sintetizable en un circuito electrnico digital, y que la descripcin equivalente en VHDL al programa Hola Mundo sera encender un led.