Programación en VHDL/Introducción

De Wikilibros, la colección de libros de texto de contenido libre.
Introducción Elementos básicos del lenguaje →


Descripción[editar]

VHDL significa HDL Hardware Description Language, y a su vez VHSIC significa Very High Speed Integrated Circuit. Se trata de un lenguaje de descripción de hardware, esto significa que mediante él se puede describir la forma de comportarse de un circuito electrónico. El comportamiento puede ser llevado a algún dispositivo que dispondrá de sus propios componentes con los que lograr ese comportamiento deseado. La forma de comportarse es independiente del hardware donde se implementará.

El VHDL es un estándar llamado IEEE 1076-1993. Sus ventajas son:

  • Una disponibilidad pública
  • Independencia de dispositivos y fabricantes
  • Reutilización
  • Diseño jerárquico

Un proyecto de VHDL puede contener muchos ficheros. El código VHDL usualmente se encuentra en los ficheros con extensión *.vhd. La estructura típica de uno de estos ficheros es:

Llamadas a librerías

Entidad

Arquitectura(s)

Historia[editar]

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 tecnología MOS (metal oxide semiconductor ), principalmente la MOS, promoviendo el desarrollo de circuitos digitales hasta la primera mitad de los años ochenta. En aquellas épocas, el esfuerzo de diseño se concentraba en los niveles eléctricos para establecer características e interconexiones entre los componentes básicos a nivel de transistor. El proceso de diseño era altamente manual y tan solo se empleaban herramientas como el PSPICE para simular esquemas eléctricos con modelos previamente personalizados a las distintas tecnologías. A medida que pasaban los años, los procesos tecnológicos se hacían más y más complejos. Los problemas de integración iban en aumento y los diseños eran cada vez más difíciles de depurar y de dar mantenimiento. Inicialmente los circuitos MSI (Medium Scale Integration ) y LSI (Large Scale Integration ) se diseñaron mediante la realización de prototipos basados en módulos más sencillos. Cada uno de estos módulos estaba formado por puertas ya probadas, este método poco a poco, iba quedándose obsoleto. En ese momento (finales de los años setenta) se constata el enorme desfase que existe entre tecnología y diseño. La considerable complejidad de los chips que se pueden fabricar, implica unos riesgos y costes de diseño desmesurados e imposibles de asumir por las empresas. Es entonces, cuando diversos grupos de investigadores empiezan a crear y desarrollar los llamados "lenguajes de descripción de hardware" cada uno con sus peculiaridades. Empresas tales como IBM con su IDL, el TI - HDL de Texas Instruments, ZEUS de General Electric, etc., así como los primeros prototipos empleados en las universidades, empezaron a desarrollarse buscando una solución a los problemas que presentaba el diseño de los sistemas complejos. Sin embargo, estos lenguajes nunca alcanzaron el nivel de difusión y consolidación necesarios por motivos distintos. Unos, los industriales, por ser propiedad de la empresa permanecieron encerrados en ellas y no estuvieron disponibles par su estandarización y mayor difusión, los otros, los universitarios, perecieron por no disponer de soporte ni mantenimiento adecuado. 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

VHDL

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...

Otras alternativas[editar]

ABEL[editar]

Abreviatura de Advanced Boolean Expression Language. ABEL permite describir diseños mediante tablas de verdad o ecuaciones lógicas. También permite la programación secuencial con máquinas de estados.

AHDL[editar]

Abreviatura de Altera Hardware Description Language (Lenguaje de Descripción de Hardware de Altera). Este lenguaje hardware es propietario de Altera Corporation para la programación de CPLDs y FPGAs. Destacar que este lenguaje tiene una sintaxis similar a C, pero su funcionalidad es parecida a la del VHDL.

Verilog[editar]

Es la gran alternativa al VHDL. Tuvo gran aceptación por parte de los ingenieros, puesto que la sintaxis de este lenguaje es muy parecida a la del lenguaje de programación C.

Otros[editar]

La última tendencia en los lenguajes de descripción de hardware es parecerse cada vez más a los lenguajes informáticos más habituales, como C o C++. El objetivo de estos lenguajes es que la descripción de un algoritmo sea única, independientemente de la plataforma destino (PC, FPGA, ASIC, etc).

Los más destacados son BachC, Handel-C y SystemC.

Tipos de descripción[editar]

Como se ha dicho antes, VHDL sirve para describir un circuito electrónico, pero el mismo circuito puede ser descrito de varias formas. Las formas de hacerlo son:

  • Descripción de comportamiento
  • Descripción de flujo de datos (RTL Registred Transfer Level)
  • Descripción estructural

A continuación se presenta una descripción de cada tipo de descripción y un ejemplo en VHDL, obviamente aún no se ha visto la sintáxis de VHDL por lo que habrá partes del código que el lector no pueda entender. El código se pone sólo para poder comparar las distintas formas de descripción. Los tres ejemplos de código son sólo las arquitecturas, los tres podrían tener como entidad:


  ENTITY mux
    PORT(control, entrada1, entrada2: IN BIT;
      salida: OUT BIT);
  END mux;

Descripción de comportamiento[editar]

Una descripción de comportamiento de un multiplexor de dos entradas, una salida y una señal de selección sería: la salida será igual a la primera entrada si la señal de control está desactivada y la salida será la segunda entrada si la señal de control está activada.

En VHDL la arquitectura de este multiplexor para la entidad llamada mux sería:


  ARCHITECTURE mux_comportamiento OF mux IS
  BEGIN
    PROCESS(entrada1, entrada2, control)
    BEGIN
      IF(control = '0') THEN 
        salida <= entrada1;
      ELSE 
        salida <= entrada2;
      END IF;
    END PROCESS;
  END mux_comportamiento;

Descripción de flujo de datos[editar]

En una descripción de flujo de datos del mismo multiplexor la salida sería la ecuación lógica: s=(entrada1 AND NOT control) OR (entrada2 AND control)

En VHDL la arquitectura sería:


  ARCHITECTURE mux_rtl OF mux IS
    SIGNAL int1, int2, int3 : BIT;
  BEGIN
    int1 <= NOT control;
    int2 <= entrada1 AND int1;
    int3 <= entrada2 AND control;
    salida <= int2 OR int3;
  END mux_rtl;

Esta descripción hay varias instrucciones concurrentes, por lo que son ejecutadas cada vez que una señal interviene en su asignación. Realmente, se trata casi de una descripción estructural, puesto que se están describiendo señales y sus componentes. Aunque también son asignaciones a señales y no una lista de componentes y sus conexiones. En el siguiente ejemplo se muestra una descripción de flujo de datos pura.


  ARCHITECTURE mux_rtl OF mux IS
  BEGIN
    salida <= entrada1 WHEN control = '0' ELSE
              entrada2;
  END mux_rtl;

Descripción estructural[editar]

Una descripción estructural consistiría en decir que el circuito tiene una puerta inversora U1, dos puertas AND de dos entradas U2 y U3 y una puerta lógica OR de dos entradas U4, además también describe las conexiones entre estas puertas, un ejemplo sería: la entrada de U1 es la señal de control, la salida de U1 se conecta a la segunda entrada de U2, la primera entrada de U2 es entrada1, etc.

El código VHDL sería:


  ARCHITECTURE mux_estructural OF mux IS
  SIGNALl int1, int2,int3:bit;
  BEGIN
    U1: inversor PORT MAP(control, int1);
    U2: and_2_entradas PORT MAP(entrada1, int1, int2);
    U3: and_2_entradas PORT MAP(entrada2, control, int3);
    U4: or_2_entradas PORT MAP(int2, int3, salida);
  END mux_estructural;

En el código anterior se deberían haber definido previamente las puertas inversor, and_2_entradas y or_2_entradas.

Introducción Elementos básicos del lenguaje →