Lenguajes de descripción de hardware: características y niveles de abstracción.
En esta sección, se describen los conceptos principales de VHDL mediante ejemplos simples y directos.
Circuitos digitales
El lenguaje VHDL es un lenguaje de descripción de hardware. De esta manera, hardware hace referencia a circuitos o sistemas digitales. Las compuertas digitales permiten implementar, de manera electrónica, los operadores booleanos del álgebra de Boole, sobre la cual está fundado todo el diseño de hardware digital.
Representación de circuitos digitales: esquemáticos y álgebra de Boole
Cada una de las compuertas digitales tiene asignado un símbolo que permite expresar circuitos y sistemas digitales en representaciones gráficas, denominadas esquemáticos. La siguiente tabla muestra los operadores lógicos utilizados en diseño digital, su símbolo y su expresión matemática asignada en el álgebra de Boole.
| Operador Booleano | Compuerta digital | Función matemática implementada |
|---|---|---|
| or | Z = A or B | |
| and | Z = A and B | |
| not | Z = not(A) | |
| nor | Z = not(A or B) | |
| nand | Z = not(A and B) | |
| xor | Z = A xor B es igual a Z = (not(A) and B) or (A and not(B)) | |
| xnor | Z = A xnor B es igual a Z = (A and B) or (not(A) and not(B)) |
Puede observarse que las compuertas digitales tienen entradas y salidas. Funciones más complejas pueden representarse gráficamente mediante la conexión entre las salidas de algunas compuertas a las entradas de otras. Estas representaciones gráficas basadas en la interconexión de compuertas conforman los esquemáticos. El siguiente esquemático representa dos funciones lógicas, Z e Y, que comparten una compuerta.
Fig. 1: representación esquemática de un circuito digital de dos salidas.
Los esquemáticos son una representación gráfica de las expresiones matemáticas del algebra de Boole que describen al circuito digital.
Aunque los esquemáticos resultan intuitivos para la representación gráfica de funciones simples, se vuelven complejos cuando el circuito supera la decena de compuertas digitales. Para sistemas más complejos, es común la utilización de representaciones por bloques. En este tipo de representaciones, las diferentes unidades funcionales del sistema son representadas por bloques, cuyas entradas y salidas son interconectadas con las entradas y salidas de otros bloques del sistema. Esto permite dividir la funcionalidad de todo el sistema en unidades funcionales más simples y abordar cada unidad del sistema individualmente. Sin embargo, cuando los sistemas se vuelven aún más complejos, las representaciones gráficas no son adecuadas y es conveniente la utilización de lenguajes de descripción de hardware.
Lenguaje de descripción de hardware VHDL
VHDL es un lenguaje basado en texto que permite la descripción de circuitos digitales tanto para síntesis, como para simulación. Fue propuesto en el marco del programa VHSIC (del inglés Very High Integrated Circuits) del Departamento de Defensa de Estados Unidos y que definió su nombre: V (VHSIC, por Very High Speed Integrated Circuits) H (Hardware) D (Description) L (Language). En 1987, el instituto de ingenieros eléctricos y electrónicos (IEEE, por sus siglas en inglés), lo estandariza en el estándar IEEE Std 1076-1987. Una falencia importante de este estándar es su carencia de lógica multi-valuada. Esto provoca, en 1992, la aprobación del estándar IEEE Std 1164 que define los tipos de datos multi-valuados std_logic, std_ulogic, std_logic_vector y std_logic_uvector. En 1993, se aprueba el estándar IEEE Std 1076-1993 que incorpora mejoras a la versión de 1987 y es ampliamente soportada por las herramientas de síntesis y simulación. Revisiones posteriores del estándar (2000,2002, 2007, 2008 y 2019) incorporan diferentes características al lenguaje.
NOTA: todos los ejemplos y laboratorios estarán realizados utilizando las revisiones 1987 y 1993 de lenguaje VHDL puesto que son soportadas sin requerir licencia de las herramientas de síntesis y simulación.
Niveles de abstracción en lenguajes de descripción de hardware
Un lenguaje de descripción de hardware debe ser capaz de especificar cualquier hardware digital para ser sintetizado en recursos lógicos reales. Una vez que este requisito fundamental es satisfecho, un lenguaje de descripción de hardware puede tener características adicionales para diferentes funciones tales como documentación, especificación de comportamiento o simulación. Estas diferentes características son agrupadas, en diseño digital, en los siguientes cuatro niveles de abstracción:
- Comportamiento (Behavioral Level, en inglés). En este nivel, el comportamiento del circuito o sistema se expresa sin dar mayores detalles de la manera en que se logra dicha funcionalidad en el hardware real. Este tipo de nivel de abstracción es utilizado para simulación, documentación y especificación de comportamiento. En otras palabras, en este nivel se describe cuál es la funcionalidad deseada, pero no cómo se logra dicha funcionalidad en un hardware real.
- Transferencia de registros (RTL, Register Transfer Level, en inglés). Este es el mayor nivel de abstracción que permite una implementación en hardware digital. En este nivel, el hardware es descripto mediante componentes implementables en hardware tales como multiplexores, registros, comparadores, entre otros.
- Compuerta (Gate Level, en inglés). Es un nivel de descripción inferior al RTL y especifica el diseño mediante compuertas lógicas y flip-flops. Este nivel de abstracción puede ser inadecuado cuando se realizan circuitos medianamente complejos.
- Físico (Physical Level, en inglés). Es el menor nivel de abstracción y contempla toda la implementación física del circuito, tanto los componentes, su disposición y las interconexiones físicas. Es muy extraña la descripción de diseños digitales en este nivel de abstracción.
Tanto VHDL como Verilog HDL permiten la descripción a niveles de comportamiento, RTL y compuerta. Es muy importante entonces tener en claro el objetivo de nuestra descripción para obtener resultados adecuados. No es posible implementar (sintetizar) código realizado en nivel de comportamiento.
En este curso se cubre la metodología para describir hardware digital en VHDL. Para ello, debemos saber cuál es el hardware que deseamos describir. El hardware que deseamos es el fin, el lenguaje VHDL, es el medio. Teniendo en cuenta esto, siempre las descripciones en cualquier lenguaje de descripción de hardware se realizarán en el nivel de abstracción correcto.
Características que debe tener un lenguaje de descripción de hardware
Parecerá una obviedad, pero un lenguaje de descripción de hardware deberá ser capaz de describir hardware. Para esto, debemos determinar cómo es un hardware para incluir en el lenguaje, características que permitan describirlo
.
Descripción de actividades concurrentes:
Por su naturaleza, el hardware es concurrente. Esto significa que todas las unidades del hardware (bloques, compuertas, registros) están realizando su funcionalidad de manera simultánea. Por ejemplo, en un circuito con varias compuertas, todas las compuertas implementan sus funciones lógicas sobre los valores de sus entradas y producen los valores correspondientes en sus salidas todo el tiempo y de manera simultáneamente. En el circuito digital representado por el esquemático de la figura 1, todas las compuertas están interconectadas para la implementación de las funciones lógicas:
Z = (A <b>and</b> B) <b>or </b>(A <b>or </b>C)
Y = <b>not</b>((A <b>or </b>C) <b>xor </b>B)
Sabemos que estas funciones lógicas determinan el valor de las salidas Z e Y de acuerdo a los valores en las entradas A, B y C. Debido a que estas funciones son concurrentes, no importa el orden en que son enunciadas, por lo que es lo mismo expresarlas en diferente orden, como el siguiente:
Y = <b>not</b>((A <b>or </b>C) <b>xor</b> B)
Z = (A <b>and </b>B) <b>or </b>(A <b>or </b>C)
Un lenguaje de descripción de hardware, debe permitir describir procesos y funciones concurrentes.
Descripción de jerárquica de estructuras
Hemos visto que, en sistemas en los cuales la complejidad es elevada, es conveniente expresar la funcionalidad del sistema como la interconexión de módulos o unidades que implementan de manera separada las diferentes funciones del sistema. De esta manera, un lenguaje de descripción de hardware debe permitir la descripción jerárquica o estructural. Esto significa que la funcionalidad de una descripción está descripta por la interconexión de bloques o unidades funcionales de menor jerarquía. De esta manera, la funcionalidad de un sistema puede definirse por la interconexión de los componentes que lo integran.
Un lenguaje de descripción de hardware, debe permitir la descripción jerárquica o estructural del hardware.
Descripción secuencial de procesos concurrentes
Por último, aunque no es un requisito necesario, sino conveniente, un lenguaje de descripción de hardware puede permitir la descripción secuencial de procesos o actividades concurrentes. Es importante repetir: la manera de describir es secuencial, lo descripto el concurrente. Por ejemplo, el código:
<strong>if</strong> A = '1' <strong>then</strong>
Z <= '0';
<strong>else</strong>
Z <= '1';
<strong>end if</strong>;
es fácilmente comprendido mediante su evaluación secuencial: si el valor de A es igual a 1, entonces a Z se le asigna el valor 0, si no (si el valor de A es igual 0) a Z se le asigna el valor 1. Cuando se describe hardware, esta descripción, aunque sea secuencial, representa un comportamiento concurrente que puede ser expresado con la siguiente tabla de verdad:
| A | Z |
|---|---|
| 0 | 1 |
| 1 | 0 |
Obviamente, esta tabla de verdad expresa que Z es el complemento de A, por lo que el hardware descripto por la sentencia if anterior, es una función not.
Como puede observarse, el hardware descripto es concurrente (la función lógica not), pero la manera de describirlo fue secuencial. Debido a que naturalmente podemos tener más recursos expresivos si lo realizamos de manera secuencial, debemos tener en cuenta que el hardware descripto SIEMPRE será concurrente. Durante el curso comprenderemos la manera de evaluar las sentencias secuenciales para comprender el hardware concurrente que describen.
Lenguaje de programación vs. lenguaje de descripción.
La mayor dificultad que se enfrenta al introducirse en el aprendizaje de lenguajes de descripción de hardware es la tentación de asimilarlos con lenguajes de programación. Esto es un desafío que se presenta al enseñar un lenguaje de descripción de hardware, por lo que considero conveniente remarcar la completa y total diferencia entre un lenguaje de programación de “software” y un lenguaje de descripción de hardware. Los lenguajes de programación con los que se introduce generalmente la enseñanza de los mismos, son procedimentales, mientras que los lenguajes de descripción de hardawre son, precisamente, descriptivos. En palabras simples, se puede aventurar que un lenguaje de programación procedimiental indica cómo, y el lenguaje descriptivo indica qué. Por ejemplo, un lenguaje de programación diría que para hacer una casa: primero hay que realizar los cimientos, luego levantar las paredes, poner el techo, las ventanas, etc. Un lenguaje de descripción diría que la casa debe tener dos dormitorios, cocina, garaje, ser de una planta, etc. La sintaxis de los lenguajes de programación puede ser similar a la de los lenguajes de descripción de hardware, pero la filosofía en su concepción es totalmente diferente. Los lenguajes de programación están destinados a objetivos conceptualmente diferentes de los de los lenguajes de descripción de hardware y, por consiguiente, también lo son las características de los lenguajes destinados para cada uno de ellos.