Você está na página 1de 12

Lenguaje de Descripcin de Hardware :

VHDL ( Very High Speed Integrated Circuit )

Victor Castieira Garcia I.T.I.S

1 . Que es VHDL ?
VHDL es un lenguaje utilizado para describir circuitos en un nivel alto de abstraccin el cual est siendo rpidamente aceptado como un medio estndar de diseo. VHDL es producto del programa Very High Speed Integrated Circuit desarrollado por el Departamento de Defensa de los Estados Unidos a finales de la dcada de los 70's. El propsito del VHDL es disear, modelar y documentar de una manera estndar los diseos desarrollados de manera que cualquier empresa pueda entender su diseo. En diciembre de 1987 VHDL se estableci como el estndar IEEE-1076. En 1993 el estndar IEEE-1076 se actualiz y un estndar adicional, el IEEE-1164, fue adoptado. En 1996, el estndar IEEE-1076.3 se convirti en un estndar de VHDL para sntesis siendo este el que se utiliza en el diseo de sistemas digitales. En la actualidad VHDL es un estndar de la industria para la descripcin, modelado y sntesis de circuito digitales. El mercado entero de sntesis ha alcanzado aproximadamente los 100 millones de dlares, con un crecimiento del 20% al 30% al ao. Por esto, los ingenieros de la mayora de las reas de electrnica, si no es que todas, deben aprender a programar en VHDL para incrementar su eficiencia. En un periodo muy corto de tiempo el VHDL ha sido capaz de ser el lenguaje de descripcin de hardware mas usado en la industria electronica gracias a su capacidad de descripcin de hardware a distintos niveles de abstraccin y la reutilizacin en diferentes aplicaciones del mismo cdigo.

2. Usando VHDL para sntesis de circuitos


2

El proceso de diseo implementando VHDL se puede resumir en los siguientes seis pasos :
1. Definicion de los requerimientos del sistema

Antes de comenzar el diseo del circuito es primordial tener claro los requerimientos del sistema tales como las funciones del circuito, maxima frecuencia de operacin y puntos criticos del sistema
2. Descripcin del circuito en VHDL

Antes de comenzar a escribir el codigo hay que elegir que metodologia de diseo como por ejemplo TopDown , Bottom-Up o Flat. La metodologa Top-Down consiste en dividir el sistema en varios bloques de manera que se puedan resolver los problemas por separado. Cada bloque a su vez se puede dividir en otros bloques si es necesario. Bottom-Up es todo lo contrario, comenzamos por caracterizar los componentes bsicos del circuito y con estos formamos bloques de mayor tamao que representen un circuito ms complejo que sus partes individuales. La metodologa Flat es comnmente utilizada para diseos pequeos, donde los requerimientos son pocos y no muy complejos por lo que no nos distraen y no perdemos de vista la funcionalidad del circuito. Despus de decidir cual ser la metodologa que debemos implementar entonces comenzamos a describir el circuito de acuerdo con lo que se haba establecido.
3. Simulacin de la descripcin en VHDL

La simulacin del cdigo nos permite detectar y corregir errores antes que se implemente en el dispositivo. Lo cual es de gran ayuda en grandes diseos en los que es complicado tratar de encontrar errores en el dispositivo una vez que es programado. La modularidad implementada tambin ayuda a encontrar los errores rpidamente, porque as cuando
3

describimos el circuito por bloques podemos evaluar cada bloque por separado antes de conjuntarlos.
4. Sntesis

La Sntesis consiste en reducir una descripcin de alto nivel abstraccin a un nivel de compuerta que pueda ser implementado en el circuito. Dicho de otra manera, sntesis es el proceso mediante el cual una descripcin es convertida en un listado de conexiones entre las compuertas, registros, multiplexores, etc. de un CPLD o FPGA. El proceso utilizado para sintetizar un cdigo en un CPLD es conocido como Fitting o ajuste y consiste en tratar de acomodar las ecuaciones booleanas en los diferentes bloques lgicos. Cuando se utiliza un FPGA el proceso empleado se le llama Place and Route y consiste en adecuar las ecuaciones a travs de varias celdas lgicas. Aunque la finalidad es la misma, la manera en que se sintetiza un cdigo en un CPLD es totalmente distinta que cuando se utiliza un FPGA. Por otro lado la optimizacin de la conversin del cdigo en VHDL a ecuaciones booleanas depende de tres cosas: la descripcin del circuito, los recursos disponibles en el dispositivo seleccionado, y las directivas de sntesis seleccionadas por el usuario.
5. Simulacin del cdigo sintetizado

Simular el cdigo sintetizado en el circuito permite verificar los retrasos de tiempo de un pin a otro, evaluar la mxima frecuencia de operacin del circuito y verificar que funcione adecuadamente. En caso de que el cdigo no pueda ser sintetizado podemos tratar de mejora la descripcin, encontrar algn error en la descripcin, cambiar las directivas de sntesis o definitivamente seleccionar otro dispositivo.
6. Programacin del dispositivo

Despus de completar la descripcin, sintetizar y simular con xito el circuito, ahora el siguiente paso es generar el archivo que nos permite programar el dispositivo. Todos los programas de VHDL para sntesis generan un
4

archivo con el que podemos programar el dispositivo. Ya sea JEDEC o JTAG de acuerdo al dispositivo.

3. Constantes ,Variables y Seales


3.1 Constantes Una constante es un elemento que puede tomar un nico valor de un tipo dado. A las constantes se les debe asignar un valor en el momento de la declaracin. Una vez que se le ha asignado algn valor, ste no puede ser cambiado dentro de la descripcin del diseo. Las constantes pueden ser declaradas dentro de las entidades, arquitecturas, procesos o paquetes. Las constantes que se declaren en un paquete pueden ser utilizadas en cualquier descripcin en la que se este utilizando dicho paquete. Por otra parte las constantes declaradas dentro de una entidad pueden ser utilizadas por la o las arquitecturas en las que se este haciendo la descripcin de dicha entidad, y aquellas constantes que sean declaradas dentro de una arquitectura o proceso, son validas nicamente dentro de la estructura correspondiente. DECLARACIN DE CONSTANTES CONSTANT identificador [, identificador...]: tipo := valor; []: opcional EJEMPLO : CONSTANT byte: integer := 8; 3.2 Variables

Los objetos de datos de la clase variable son similares a las constantes, con la diferencia que su valor puede ser modificado cuando sea necesario. Las variables en VHDL son similares a cualquier tipo de variable de un lenguaje de programacin de alto nivel. A las variables tambin se les puede asignar un valor inicial al momento de ser declaradas. Se utilizan nicamente en los procesos y subprogramas (funciones y procedimientos). Las variables generalmente se utilizan como ndices, principalmente en instrucciones de bucle, o para tomar valores que permitan modelar componentes. Las variables no representan conexiones o estados de memoria. DECLARACIN DE VARIABLES VARIABLE identificador [, identificador...]: tipo [:=valor] ; EJEMPLO VARIABLE aux1, aux2: bit_vector ( 31 DOWNTO 0 ) ; 3.3 Seales Un objeto de la clase seal es similar a un objeto de la clase variable, con una importante diferencia: las seales si pueden almacenar o pasar valores lgicos, mientras que una variable no lo puede hacer. Las seales, por lo tanto, representan elementos de memoria o conexiones y si pueden ser sintetizadas. Los puertos de una entidad son implcitamente declarados como seales en el momento de la declaracin, ya que estos representan conexiones. Tambin pueden ser declaradas en las arquitecturas antes del BEGIN, lo cual nos permite realizar conexiones entre diferentes estructuras de programacin. La asignacin de valores a un objeto de datos del tipo seal no es inmediata como en el caso
6

de las variables, esto se explicar ms detalladamente cuando se exponga la estructura PROCESS y los tipos de instrucciones. DECLARACIN DE SEALES SIGNAL identificador [, identificador...]: tipo [:=valor] ; EJEMPLOS SIGNAL selec: bit := '0' ; SIGNAL datos: bit_vector ( 7 DOWNTO 0 ) := B"11100010" ;

4 . Diferencias entre variables y seales


Un objeto de datos del tipo seal es muy diferente a uno del tipo variable. Ya se haba mencionado que las seales pueden ser sintetizados en elementos lgicos y/o conexiones, lo cual no es posible con un variable. Una seal representa un nodo de conexin entre elementos lgicos (compuertas, registros, buffers, etc.). Inclusive un mismo nodo puede recibir ms de un nombre para facilitar la descripcin, sin que esto implique ms trminos en las ecuaciones de salida. Una seal que se vea involucrada dentro de un proceso no recibe inmediatamente el valor asignado, slo hasta el final del mismo. Una variable que sea utilizada dentro de un proceso s recibe el valor de forma inmediata, por lo que son muy tiles para poder obtener el estado de salida deseado para alguna seal de salida. Una variable funciona exactamente igual que cualquier variable de cualquier lenguaje de programacin de software.

Podemos decir que una seal est formada por dos partes: un valor actual y un valor futuro (o valor en proceso). El valor futuro es el que se calcula dentro del proceso y una vez que se termina el proceso, los valores futuros de todas las seales se convierten en valores actuales. Al valor futuro se le conoce como driver. En VHDL para sntesis el driver nunca es afectado fuera de un proceso, fuera de ste siempre estamos modificando el valor actual. Otro detalle importante en VHDL para sntesis, es que el valor actual de una seal no puede verse modificado ms de una vez dentro de la arquitectura, porque las seales representan conexiones y esto equivaldra a unir dos cables. Y esto generalmente resultar en un error de compilacin durante el proceso de sntesis. EJEMPLOS ARCHITECTURE modificacion_no_valida1 OF senial IS BEGIN z <= x AND y; z <= x OR y; END modificacion_no_valida1;

5. Concepto de retardo delta


El concepto de retardo delta es importante para entender otra diferencia importante entre variable y seal. Una variable actualiza su contenido en cuanto se ejecuta una asignacin
8

sobre ella. En cambio cuando se ejecuta una asignacin sobre una seal, se proyecta un nuevo evento sobre su cola de eventos y solo cuando todos los procesos se hayan ejecutado y estn suspendidos, el valor de la seal se actualizar con el valor proyectado en su cola de eventos. Este mecanismo de retardo delta se introduce para permitir la simulacin de hardware (paralelo por naturaleza) usando mquinas secuenciales. Ejemplo : El mecanismo de retardo delta permite que, independientemente del orden en que se ejecuten los dos procesos, el segundo (FF2) siempre reciba el valor correcto de Q1, ya que aunque se haya ejecutado con anterioridad el primer proceso (FF1), la asignacin que ste realiza sobre Q1 an no habr tenido lugar (en todo caso se habr proyectado el evento sobre la cola de eventos de Q1). De forma que al realizar la asignacin de D1 sobre Q2 se colocar en la cola de eventos de Q2 el valor correcto de D1 (an sin actualizar). Slo en el momento en que ambos procesos se hayan suspendido, se actualizarn las seales con los valores que contengan sus colas de eventos.

6.Sentencia WAIT
La sentencia wait indica en que punto del flujo debe suspenderse la ejecucin de un proceso, al mismo tiempo puede fijar en qu condiciones debe reactivarse dicho proceso. Al ejecutar la sentencia wait el proceso se suspende y al mismo tiempo se fijan las condiciones para su reactivacin. La primera forma en que se puede utilizar la sentencia wait es sin ningn tipo de condicin para despertar el proceso. Esto significa que el proceso en cuestin ejecutar las sentencias que contenga hasta el wait y entonces se suspender, sin que pueda volver a activarse en toda la simulacin. El uso ms comn de este estilo lo encontramos en los bancos de pruebas a realizar sobre el dispositivo a verificar, y a continuacin se termina la simulacin.

10

La segunda forma de usar la sentencia wait establece a que seales ser sensible el proceso (wait on lista_seales). Por lo tanto, siempre que se produzca un evento en alguna de las seales indicadas en la sentencia wait el proceso se despertar y ejecutar sus sentencias secuenciales hasta ejecutar otra vez una sentencia wait. Es usual utilizar esta forma de la sentencia wait para modelar lgica combinacional que debe responder a cualquier cambio que se produzca en sus entradas.

Al suspender un proceso tambin puede fijarse una condicin para su reactivacin, esta condicin se especifica con la forma wait until condicion_booleana. En condicin_booleana puede aparecer cualquier expresin que al evaluarse de cmo resultado TRUE o FALSE. Un ejemplo tpico de este uso se encuentra en el modelado de elementos sensibles al flanco de un reloj. El siguiente proceso describe el comportamiento de un biestable sensible al flanco de subida del reloj:

11

Al ejecutar la sentencia wait el proceso se suspender y no se reactivar hasta que no se produzca un evento en Reloj y adems Reloj pase a valer 1. Si al llegar a esta sentencia wait, Reloj ya valiese 1, entonces el proceso no se reactivara, ya que debe cumplirse que haya un evento en la seal adems de cumplirse la condicin booleana. Por ltimo al suspender un proceso se puede especificar un cierto tiempo antes de que ste se reactive. Para ello se utiliza la forma wait for; como ejemplo, el siguiente proceso utiliza esta opcin de la sentencia wait para generar un reloj de un determinado perodo.

12

Você também pode gostar