viernes, 11 de enero de 2008

VHDL

VHDL es el acrónimo que representa la combinación de VHSIC y HDL, donde VHSIC es el acrónimo de Very High Speed Integrated Circuit y HDL es a su vez el acrónimo de Hardware Description Language.

Es un lenguaje usado por ingenieros definido por el IEEE (Institute of Electrical and Electronics Engineers) (ANSI/IEEE 1076-1993) que se usa para diseñar circuitos digitales. Otros métodos para diseñar circuitos son la captura de esquemas (con herramientas CAD) y los diagramas de bloques, pero éstos no son prácticos en diseños complejos. Otros lenguajes para el mismo propósito son Verilog y ABEL.

Aunque puede ser usado de forma general para describir cualquier circuito se usa principalmente para programar PLD (Programable Logic Device - Dispositivo Lógico Programable), FPGA (Field Programmable Gate Array), ASIC y similares.

Formas de describir un circuito

Dentro del VHDL hay varias formas con las que podemos diseñar el mismo circuito y es tarea del diseñador elegir la más apropiada.

  • Funcional: describimos la forma en que se comporta el circuito. Esta es la forma que más se parece a los lenguajes de software ya que la descripción 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 señales y con las instancias a otros componentes.
  • Flujo de datos: describe asignaciones concurrentes (en paralelo) de señales.
  • Estructural: se describe el circuito con instancias de componentes. Estas instancias forman un diseño de jerarquía superior, al conectar los puertos de estas instancias con las señales internas del circuito, o con puertos del circuito de jerarquía superior.
  • Mixta: combinación de todas o algunas de las anteriores.

En VHDL también existen formas metódicas para el diseño de máquinas de estados, filtros digitales, bancos de pruebas etc.

Secuencia de diseño

El flujo de diseño de un sistema podría ser:

  • División del diseño principal en módulos separados. 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 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.
  • Entrada de diseños, pueden usarse diversos métodos tal como VHDL como se vio anteriormente.
  • 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 o un ASIC. 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 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.

No hay comentarios: