Avisar de contenido inadecuado

Dispositivos Logicos programables (parte 4)

{
}

 

DISPOSITIVOS LOGICOS PROGRAMABLES

 

LENGUAJES DE PROGRAMACIÓN

LENGUAJE VHDL

VHDL (Very High Speed Integrated Circuit Hardware Description Language) es un lenguaje de descripción de hardware estructurado para modelar sistemas digitales, que vio su origen en el programa VHSIC(Very High Speed Integrated Circuit), VHDL es sólo uno de un conjunto de lenguajes especializados en la descripción de elementos de hardware como ABEL, Verilog, AHDL(Analog Hardware Description Language), entre otros; que se caracterizan por permitir implementar casi cualquier tipo de circuito lógico sin la necesidad de utilizar esquemáticos pues la descripción de los componentes y su comportamiento se hace por medio de instrucciones similares a las de un lenguaje de programación como PASCAL o C. Aún cuando el estándar no coloca ninguna limitación a la complejidad del diseño, no todos los circuitos descritos con VHDL pueden ser traducidos a una implementación física posterior. Este proceso de tomar el código en VHDL y generar los elementos lógicos que efectúan la función deseada se conoce como síntesis. Las descripciones que admiten este proceso se les denomina Sintetizables.


HISTORIA DEL LENGUAJE VHDL
A mediados de los años setenta se produce una fuerte evolución en los procesos de fabricación de los circuitos integrados, y junto a las tecnologías bipolares, surge la MOS(metal oxide semiconductor), principalmente la NMOS(Negative-channel Metal-Oxide Semiconductor), promoviendo el desarrollo de circuitos digitales hasta la primera mitad de los años ochenta.

Alrededor de 1981 el Departamento de Defensa de los Estados Unidos desarrolla un proyecto llamado VHSIC (Very High Speed Integrated Circuit ) su objetivo era rentabilizar las inversiones en hardware haciendo más sencillo su mantenimiento. Se pretendía con ello resolver el problema de modificar el hardware diseñado en un proyecto para utilizarlo en otro, lo que no era posible hasta entonces porque no existía una herramienta adecuada que armonizase y normalizase dicha tarea, era el momento de los HDL's (Hardware Description Language).

En 1983, IBM, Intermetrics y Texas Instruments empezaron a trabajar en el desarrollo de un lenguaje de diseño que permitiera la estandarización, facilitando con ello, el mantenimiento de los diseños y la depuración de los algoritmos, para ello el IEEE propuso su estándar en 1984.

Tras varias versiones llevadas a cabo con la colaboración de la industria y de las universidades, que constituyeron a posteriori etapas intermedias en el desarrollo del lenguaje, el IEEE publicó en diciembre de 1987 el estándar IEEE std 1076-1987 que constituyó el punto firme de partida de lo que después de cinco años sería ratificado como VHDL.

Esta doble influencia, tanto de la empresa como de la universidad, hizo que el estándar asumido fuera un compromiso intermedio entre los lenguajes que ya habían desarrollado previamente los fabricantes, de manera que éste quedó como ensamblado y por consiguiente un tanto limitado en su facilidad de utilización haciendo dificultosa su total comprensión. Este hecho se ha visto incluso ahondado en su revisión de 1993.

Pero esta deficiencia se ve altamente recompensada por la disponibilidad pública, y la seguridad que le otorga el verse revisada y sometida a mantenimiento por el IEEE.La independencia en la metodología de diseño, su capacidad descriptiva en múltiples dominios y niveles de abstracción, su versatilidad para la descripción de sistemas complejos, su posibilidad de reutilización y en definitiva la independencia de que goza con respecto de los fabricantes, han hecho que VHDL se convierta con el paso del tiempo en el lenguaje de descripción de hardware por excelencia.



TIPO DE PROGRAMA

VHDL es sólo uno de un conjunto de lenguajes especializados en la descripción de elementos de hardware como ABEL, Verilog, AHDL, entre otros; que se caracterizan por permitir implementar casi cualquier tipo de circuito lógico sin la necesidad de utilizar esquemáticos pues la descripción de los componentes y su comportamiento se hace por medio de instrucciones similares a las de un lenguaje de programación como PASCAL o C. Aún cuando el estándar no coloca ninguna limitación a la complejidad del diseño, no todos los circuitos descritos con VHDL pueden ser traducidos a una implementación física posterior. Este proceso de tomar el código en VHDL y generar los elementos lógicos que efectúan la función deseada se conoce como síntesis. Las descripciones que admiten este proceso se les denomina Sintetizables.

VHDL es un lenguaje de tipos fuertes (strong typing) como el Ada o Pascal. Esto significa que no pueden asignarse valores a señales o variables que no sean del tipo declarado para esa señal o variable. Para poder asignar un tipo diferente, el programador debe llamar explícitamente a una función de conversión de tipo.

Hay cuatro clases de objetos en VHDL: constantes, variables, señales y archivos. El tipo de un objeto es muy importante, ya que no solo define que valores podrá tomar, sino también que operaciones se pueden realizar sobre él.

VHDL fue desarrollado como un lenguaje para el modelado y simulacion logica dirigida por eventos de sistemas digitales, y actualmente se lo utiliza tambien para la sintesis automatica de circuitos. El VHDL fue desarrollado de forma muy parecida al ADA debido a que el ADA fue tambien propuesto como un lenguaje puro pero que tuviera estructuras y elementos sintacticos que permitieran la programacion de cualquier sistema hardware sin limitacion de la arquitectura. El ADA tenia una orientacion hacia sistemas en tiempo real y al hardware en general, por lo que se lo escogio como modelo para desarrollar el VHDL.

VHDL es un lenguaje con una sintaxis amplia y exible que permite el modeladov estructural, en flujo de datos y de comportamiento hardware. VHDL permite el modelado preciso, en distintos estilos, del comportamiento de un sistema digital conocido y el desarrollo de modelos de simulacion.

Uno de los objetivos del lenguaje VHDL es el modelado. Modelado es el desarrollo de un modelo para simulacion de un circuito o sistema previamente implementado cuyo comportamiento, por tanto, se conoce. El objetivo del modelado es la simulacion.

Otro de los usos de este lenguaje es la sintesis automatica de circuitos. En el proceso de sintesis, se parte de una especicacion de entrada con un determinado nivel de abstraccion, y se llega a una implementacion mas detallada, menos abstracta. Por tanto, la sintesis es una tarea vertical entre niveles de abstraccion, del nivel mas alto en la jerarquia de diseño se va hacia el mas bajo nivel de la jerarquia.

El VHDL es un lenguaje que fue diseñado inicialmente para ser usado en el modelado de sistemas digitales. Es por esta razon que su utilizacion en sintesis no es inmediata, aunque lo cierto es que la sosticacion de las actuales herramientas de sintesis es tal que permiten implementar diseños especi cados en un alto nivel de abstraccion.

La sintesis a partir de VHDL constituye hoy en dia una de las principales aplicaciones del lenguaje con una gran demanda de uso. Las herramientas de sintesis basadas en el lenguaje permiten en la actualidad ganancias importantes en la productividad de diseño.


Algunas ventajas del uso de VHDL para la descripcion hardware son:

- VHDL permite diseñar, modelar, y comprobar un sistema desde un alto nivel de abstraccion bajando hasta el nivel de definicion estructural de puertas.

- Circuitos descritos utilizando VHDL, siguiendo unas guias para sintesis, pueden ser utilizados por herramientas de sintesis para crear implementaciones de diseños a nivel de puertas.

- Al estar basado en un estandar (IEEE Std 1076-1987) los ingenieros de toda la industria de diseño pueden usar este lenguaje para minimizar errores de comunicacion y problemas de compatibilidad.

- VHDL permite diseño Top-Down, esto es, permite describir (modelado) el comportamiento de los bloques de alto nivel, analizandolos (simulacion), y rediseñar la funcionalidad de alto nivel requerida antes de llegar a niveles mas bajos de abstraccion de la implementacion del diseño.

- Modularidad: VHDL permite dividir o descomponer un diseño hardware y su descripcion VHDL en unidades mas pequeñas.

 

ESTRUCTURA DEL LENGUAJE VHDL

- Entidad: Es la declaración de entradas /salidas de un módulo. De acuerdo al IEEE Std 1076-2002, una entidad "es la abstracción principal de hardware en VHDL. Esta representa una parte de un diseño de hardware que tiene entradas y salidas bien definidas y realiza una función bien definida. Una entidad de diseño puede representar un sistema entero, un sub-sistema, una tarjeta, un chip, una macro-celda, una compuerta lógica o cualquier nivel de abstracción intermedio".

La declaración de una entidad define la interfaz entre esta y el ambiente en el cual se utiliza. En este sentido, la entidad es una especie de bloque o caja negra que define como se "ve" el componente desde el exterior. La entidad define una serie de puertos que sus terminales visibles, quedando su estructura funcional oculta dentro de una o más arquitecturas.

 Declaración de una entidad:

 entity Nombre_de_la_entidad is
port ( Nombre_Señal : modo tipo;
Nombre_Señal : modo tipo;
Nombre_Señal : modo tipo);
end Nombre_de_la_entidad;


Los posibles modos de la señal son: in, out , buffer, inout.

En la figura siguiente se muestra un diagrama esquematico que representa la estructura del lenguaje VHDL.

 

Estrutura

Figura 44, Esquematico de la estructura del VHDL.

 

- Arquitectura: Es la descripción detallada del comportamiento o estructura interna de un módulo (entidad). En el estándar IEEE 1076-2002, se define "Una arquitectura define el cuerpo de una entidad. Esta especifica las relaciones entre las entradas y las salidas de una entidad, pudiendo ser expresada en términos de estructura, flujo de datos o comportamiento". La descripción estructural muestra a la entidad y sus componentes internos junto con las conexiones entre estos, siendo bastante similar al proceso de diseño basado en esquemáticos y componentes MSI (Micro-Star International) o SSI discretos. Cuando se utiliza una descripción de comportamiento (funcional), se especifica el algoritmo que describe la operación del circuito en forma bastante similar a un programa. En este caso, existen diferentes procesos que se activan según el estado de las entradas del diseño y en su interior contienen las acciones a ejecutar según sea el requerimiento del circuito. Por su parte, la descripción por medio de flujo de datos, establece una relación directa entre las señales de entrada y las salidas.

La arquitectura de una entidad de mayor nivel, puede hacer uso de entidades de nivel más bajo dentro de la estructura jerárquica, la implementación de cada entidad puede obedecer a cualquiera de las descripciones mencionadas anteriormente, permitiendo que en mismo diseño coexistan diferentes tipos de implementaciones operando en conjunto. De esta manera, los diseños extensos pueden ser fraccionados en varias entidades que residen en diferentes archivos, cada entidad puede ser verificada, simulada y depurada de forma independiente.

Definición de la arquitectura.
Architecture Nombre_de_la_Arquitectura of Nombre_de_la_entidad is
Declaraciones de: Tipos, señales, constantes, funciones, procedimientos, componentes
begin
Sentencias concurrentes
end Nombre_de_la_Arquitectura

Instrucción de proceso:
process (lista sensitiva)
begin
Instrucciones;
end process;


- Puertos:
Los puertos son los puntos de conexión entre una entidad y el medio exterior. Se caracterizan por tener una representación física relacionada con un terminal de entrada/salida y requerir de una definición de sentido ya sea como entrada, salida o bidireccional.

 - Señales: Son similares a una declaración de puerto pero sin ningún modo, pueden leerse, escribirse o hacer referencia a ellas sólo dentro de la arquitectura ya que son locales. Son la analogía de los cables de interconexión o señales eléctricas que serán usadas dentro del circuito. En la librería IEEE 1164, se encuentran definidos varios tipos de señales que representan de forma bastante adecuada el comportamiento real de una señal digital en hardware.

 Se declaran antes del BEGIN de la arquitectura y se puede usar en cualquier lugar de ella. Si va en un proceso su valor se actualiza al salir de el. La asignación usa el símbolo <=.
- Variables:
Se utilizan en las funciones, procedimientos y procesos, no tienen significado físico pero son elementos de gran utilidad al momento de efectuar la programación.

 

DISEÑO CON VHDL

 - División del diseño principal en módulos separado. La modularidad es uno de los conceptos principales de todo diseño. Normalmente se diferencia entre dos metodologías de diseño: top-down y botton-up.

 La siguiente figura 45, representa un diagrama para el diseño con el lenguaje VHDL. 

 

ESTRUCTURA


 Figura 45, Diseño con VHDL  

 La metodología top-down consiste en que un diseño complejo se divide en diseños más sencillos que se puedan diseñar (o describir) más fácilmente.

La metodología botton-up consiste en construir un diseño complejo a partir de módulos, ya diseñados, más simples. En la práctica, un diseño usa generalmente ambas metodologías.


- Simulación 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 simulación se comprueba que el código VHDL o Verilog (u otro tipo de lenguaje HDL) ejecuta correctamente lo que se pretende.


- Síntesis. En este paso se adapta el diseño anterior (que sabemos que funciona) a un hardware en concreto, ya sea una FPGA (Field Programmable Gate Array) o un ASIC (Application-specific integrated circuit). Hay sentencias del lenguaje que no son sintetizables, como por ejemplo divisiones o exponenciaciones con números no constantes. El hecho de que no todas las expresiones en VHDL no sean sintetizables es que el VHDL es un lenguaje genérico para modelado de sistemas (no sólo para diseño de circuitos digitales), por lo que hay expresiones que no pueden ser transformadas a circuitos digitales. Durante la síntesis se tiene en cuenta la estructura interna del dispositivo, y se definen restricciones, como la asignación de pins. El sintetizador optimiza las expresiones lógicas con objeto de que ocupen menor área, o bien son eliminados las expresiones lógicas que no son usadas por el circuito.

 - Simulación post-síntesis. En este tipo de simulación se comprueba que el sintetizador ha realizado correctamente la síntesis del circuito, al transformar el código HDL en bloques lógicos conectados entre sí. Este paso es necesario ya que, a veces, los sintetizadores producen resultados de síntesis incorrectos, o bien realiza simplificaciones del circuito al optimizarlo.

- Placement y routing. El proceso de placement consiste en situar los bloques digitales obtenidos en la síntesis de forma óptima, de forma que aquellos bloques que se encuentran muy interconectados entre si se sitúen próximamente. El proceso de routing consiste en rutar adecuadamente los bloques entre si, intentando minimizar retardos de propagación para maximizar la frecuencia máxima de funcionamiento del dispositivo. 

- Back-annotation. Una vez que ha sido completado el placement & routing, se extraen los retardos de los bloques y sus interconexiones, con objeto de poder realizar una simulación temporal (también llamada simulación post-layout). Estos retardos son anotados en un fichero SDF (Standart Delay Format) que asocia a cada bloque o interconexción un retardo mínimo/típico/máximo.

- Simulación temporal. A pesar de la simulación anterior puede que el diseño no funcione cuando se programa, una de las causas puede ser por los retardos internos del chip. Con esta simulación se puede comprobar, y si hay errores se tiene que volver a uno de los anteriores pasos.

- Programación en el dispositivo. Se implementa el diseño en el dispositivo final y se comprueba el resultado.


Algunos tips a la hora de trabajar con el lenguaje VHDL.

Evitar las cláusulas temporales. Normalmente los simuladores prohíben expresamente el uso de asignaciones con retraso en las señales, en otras simplemente los ignoran, pero lo que está claro es que el sintetizador intentará implementar el circuito funcionalmente, por lo que estos retrasos no tienen sentido para el sintetizador. Aparte de esto, no se permiten las asignaciones múltiples, en una única sentencia, a una señal por la misma razón.

Identificar cada puerta con claridad. Las puertas lógicas y otros elementos tienen generalmente una estructura clara e incluso se pueden utilizar comandos directos que realizan estas funciones. Evitar las sentencias de espera. En algunos sintetizadores quizá sea posible utilizar sentencias de espera WAIT dentro de los procesos, pero no es nada aconsejable puesto que la herramienta puede tener dificultades en interpretar estas sentencias. Es aconsejable en cambio el uso de listas sensibles, y en muchos sintetizadores es casi la única posibilidad. El uso del WAIT está bastante restringido, así, si se usa, algunas herramientas exigen que sea la primera instrucción del PROCESS, y sólo se permite una condición. Cuidado con las listas sensibles. La mayoría de sintetizadores admiten la lista sensible o una sentencia WAIT al principio, pero no siempre la interpretan como lo hará un simulador ya que en determinadas ocasiones el proceso se ejecutará cuando cambia una señal que se encuentra en el proceso pero no en la lista sensible o en el WAIT.

Permitir discrepancia. Normalmente es fácil sintetizar algo simple como s<=NOT s ya que no es más que una puerta inversora conectada sobre si misma que puede servir muy bien para generar una señal de reloj con periodo el doble que el retraso que la puerta presente. Si se intenta simular algo como la instrucción anterior, se comprobará que la simulación se queda colgada en esa instrucción puesto que no hay retrasos y se llama a sí misma una y otra vez. Por lo tanto, en estos casos, aunque la simulación es incorrecta, la síntesis lo es.

Señales de reloj. Normalmente sólo se permite una señal de reloj por proceso, y además debe especificarse claramente el flanco de subida del reloj mediante la condición clk='1' AND clk'EVENT. En general sólo puede ponerse esta condición una vez por proceso y en ningún caso se puede poner ELSE en el IF en el que se usó a condición.

Asignaciones únicas. Aunque en simulación es bastante corriente que a una señal se le asignen varios valores a lo largo de un mismo proceso, en síntesis esto resulta difícil de interpretar y no debe usarse (normalmente no se permite).

Evitar IFs anidados. Normalmente las herramientas tienden a no sintetizar de manera óptima varios condicionales anidados entre sí. Los condicionales es mejor utilizarlos a solas.
Utilizar CASE mejor que varios IFs Las estructuras CASE tienen para los sintetizadores un modelo optimizado de síntesis, generalmente mejor que lo mismo descrito mediante IFs.
Utilizar el estilo indicado para las máquinas de estado Muchos de los problemas digitales se pueden resolver de forma sencilla mediante una máquina de estados. En VHDL hay muchos estilos diferentes para poder describir máquinas de estados, entonces a veces ocurre que el sintetizador no se da cuenta de que lo que tiene delante es una máquina de estados y no optimiza bien el circuito resultante. En los manuales de los sintetizadores suelen venir ejemplos de lo que la herramienta entenderá que es una máquina de estados, entonces es mejor utilizar ese estilo aunque no nos resulte cómodo, el resultado final será bastante más óptimo.

Especificar la arquitectura. Es posible que se creen varias descripciones para un mismo circuito. Normalmente el sintetizador cogerá la primera que le parezca, por lo que conviene especificar cuál de todas las arquitecturas se desea sintetizar mediante un bloque de configuración CONFIGURATION. 

 

 

REFERENCIAS

- J. del Barrio,, Desarrollo sobre FPGA de un Emulador de una Planta de Microgeneración Eléctrica, Proyecto final ETSII de la Universidad de Valladolid, España, 2004. [2] BK Bose,

- Electrónica de Potencia y unidades AC, Prentice-Hall Hall, Englewood Cliffs, New Jersey, 1986.

- C. Cascón, Diseño de un entorno de desarrollo para un DSP en coma fija es de 16/24 bits integrado, Proyecto final en la ETSII de la Universidad de Valladolid, España, 2003.

- SK Knapp, "XC4000 Serie Edge - Triggered y de puerto dual RAM capacidad", Xilinx XAPP065, 1996.

- B. Norris, Control de electrónica de potencia y técnicas digitales (Texas Instruments Electronics Series), McGraw-Hill, 1976.

- AB Rey, Control digital vectoriales con deslizamiento en fuente de corriente con convertidores CC / CA trifásicos conectados a una Red, Ph.D. Tesis, Universidad de Valladolid, España, 2000.

- J. Schaefer, Rectifier Circuits: Teoría y diseño, John Wiley & Sons, Inc, la Library of Congress Catalog Card Número 65-12703, 1965.

- S.de Pablo, J. Cebrian, L.C.Herrero, Universidad de Valladolid, E.T.S.I:I. , Paseo del Cauce, s/n 47011 Valladolid (España), sanpab@eis.uva.es.

- A.B.Rey Polytechnic University of Cartagena, Edif. Antiguo Hospital de Marina 30202 Cartegena, Murcia (España) alexis.rey@upct.es

- http://lenguajevhdl.blogspot.com/2007/11/blog-post.html

{
}

Álbum de fotos de Dispositivos Logicos programables (parte 4)

2 de 2

Ver fotos de Dispositivos Logicos programables (parte 4)

{
}

Deja tu comentario Dispositivos Logicos programables (parte 4)

Identifícate en OboLog, o crea tu blog gratis si aún no estás registrado.

Avatar Tu nombre