Anda di halaman 1dari 8

1.

6 HDL (LENGUAJE DE DESCRIPCIN DE HARDWARE)


Introduccin
Un lenguaje de descripcin de hardware (HDL, Hardware Description Lenguage) es similar
a un lenguaje de programacin tpico, salvo que en HDL sirve para describir hardware en
lugar de un programa que la computadora ejecutar. Hay muchos HDL comerciales.
Algunos son sujetos a derechos de propiedad pero en este trabajo se utiliza solo un leguaje
que apoyan prcticamente todo los comercios que ofrecen tecnologa de hardware digital y
oficialmente se respalda como una norma del Instituto De Ingenieros Elctricos Y
Electrnicos (IEEE, Intitute of Electrical and electronics Enginners).
Dos HDL son normas de IEEE: VHDL (Very High Speed Integrated Circuit Hardware
Description Lenguage: Lenguaje de descripcin de hardware de circuitos integrados de
muy alta velocidad) y Verilog VHDL. Ambos lenguajes tiene amplio uso en la industria.
1.6.1 VERILOG
Verilog es el HDL ms comnmente utilizado en el diseo, implementacin y verificacin
de circuitos digitales, adems que es ms fcil de aprender, fue originalmente estandarizado
en el IEEE Estndar 1364 -1995 y posteriormente revisado en el IEEE 1361 -2001.
Verilog describe un sistema digital como un conjunto de mdulos. Cada uno de estos
mdulos tiene una interfaz a otros mdulos.
1.6.2 VHDL
La primera versin de VHDL se llam VHDL-87 y fue el primer HDL en ser estandarizado
por IEEE a travs del estndar IEEE 1076, el mismo que se complement posteriormente
con el estndar IEEE 1164.
A pesar de que VHDL se puede simular totalmente, no todas las contriciones son
sintetizables
EL cdigo se guarda en un archivo con el mismo nombre de la entidad (Elemento de
estructura) y extensin vhd.
Este cdigo puede ser concurrente (paralelo) o secuencial. Solo las instrucciones ubicadas
dentro los procesos, funciones o procedimientos son ejecutadas secuencialmente.
Para realizar un cdigo VHDL es necesario al menos conocer: su estructura, como utilizar
cada uno de los elementos de dicha estructura (Declaracin de libreras, entidad y
arquitectura), los operadores y atributos que se pueden utilizar.

1.6.2.1 Unidades Bsicas de diseo


La estructura general de un programa en VHDL est formada por mdulos o unidades de
diseo, cada uno de ellos compuesto por un conjunto de declaraciones e instrucciones que
definen, describen, estructuran, analizan y evalan el comportamiento de un sistema digital.

Existen cinco tipos de unidades de diseo en VHDL: declaracin de entidad (entity


declaration), arquitectura (architecture), configuracin (configuration), declaracin del
paquete (packege declaration) y cuerpo del paquete (packege body). En el desarrollo del
programa del en VHDL pueden utilizarse o no tres de los cinco mdulos, pero dos de ellos
(entidad y arquitectura) son indispensables en la estructuracin de un programa.
1.6.2.1.1 Declaracin de libreras
Es una coleccin de partes de cdigo usadas comnmente. En la declaracin se deben
incluir todas las libreras que van a ser utilizadas en el diseo.
La sintaxis de la librera es de la siguiente manera:
LIBRARY nombre_libreria;
USE nombre_libreria.nombre_paquete.parte_paquete;
1.6.2.1.2 Entidad
Especifica todos los puertos de entrada y salida. Su sintaxis se muestra a continuacin:
ENTITY nombre_entidad IS
PORT(
Nombre_puert:modo_seal tipo_seal
);
END nombre_entidad;
Todos los puertos deben tener: Nombre, Modo de la seal (la direccin en la que van los
datos, entrada o salida) y tipo de seal.
Modo de la seal
Puede ser: modo in (representa seales de entrada, usado para reloj, entradas de control y
datos), Modo out (representa seales de salida), Modo buffer (representa seales de
realimentacin interna), Modo inout (representa seales bidireccionales, de entrada y
salida).
Tipo de seal
Los tipos de seal se encuentran en diferentes paquetes y libreras, los ms usados son: Bit
(Puede tomar valores lgicos de 0L y 1L), Bit vector (Vector de Bits, representa un
conjunto de bits). Integer (representa un numero entero), Natural (representa enteros no
negativos), Std_logic (Puede tomar 8 valores diferentes, 4 de ellos sintetizables:
Desconocido, 0L, 1L y de alta impedancia), Std_logic vector (representa un vector de
elementos Std_logic).

1.6.2.1.3 Arquitectura
Contiene el cdigo que describe el comportamiento del circuito. Su sintaxis es la siguiente:
ARCHITECTURE nombre_arquitecture OF nombre_entidad IS
[declaraciones]
BEGIN
(Codigo)
END Nombre_arquitectura;
La arquitectura tiene dos partes: la declarativa (que se utiliza slo cuando se requiere
declarar seales y constantes internas a la arquitectura) y la del cdigo.
En la arquitectura se describen las operaciones que se realizan con los puertos de entrada
para obtener los puertos de salida descritos en la entidad.
1.6.2.2 Operadores y atributos
Son smbolos que indican que se debe llevar a cabo operaciones especficas, de los cuales
se deben conocer antes de comenzar a realizar cdigos en VHDL.
1.6.2.2.1 Operadores
Los operadores predefinidos ms utilizados son:
Operadores de asignacin
Entre ellos: <= (asigna un valor a una seal), := (asigna un valor a una variable o
constante, tambin es usado para asignar valores iniciales); => (asigna valores a
elementos individuales de un vector).
Operadores Lgicos
Realizan operaciones lgicas, son: not, and or, nand, nor, xor, xnor.
Operadores aritmticos
Realizan operaciones aritmticas. Los sintetizables son: + (suma),- (resta), *
(multiplicacin), / (divisin) y ** (Exponenciacin).
Operadores de Comparacin
Realizan comparaciones. Son: = (igual a), /= (diferente de), < (Menor que), > (mayor
que), <= (Menor o igual que) >= (mayor o igual que).
1.6.2.2.2 Atributos
Los atributos se aplican a una seal para obtener informacin especfica sobre ella:
SealAtributo

Atributos de funcin:
SealEvent:
Devuelve TRUE si la seal cambia.
SealLAST_VALUE:
Devuelve el valor de la seal antes del ltimo evento.
SealDRIVING_VALUE:
Devuelve el valor actual de la seal.
Atributos de valor:
Seal_escalarLEFT/RIGHT:
Devuelve el valor ms a la izquierda/derecha
Seal_escalarHIGH/LOW:
Seales de Rango:
Seal _arrayRANGE:
Devuelve el rango del array (como se haya definido).
1.6.2.3 Cdigos de Programacin en la arquitectura
La gran ventaja que presenta VHDL para definir una arquitectura, radica en la manera en
qu pueden describirse los diseos; es decir, es decir mediante el algoritmo de
programacin empleado se puede describir desde el nivel de compuertas hasta sistemas
complejos.
De manera general, los estilos de programacin utilizados en el diseo de arquitecturas se
clasifican como:
Estilo funcional
Estilo por flujo de datos
Estilo estructural
El nombre asignado a estos estilos no es importante, ya que es tarea del diseador escribir
el comportamiento de un circuito utilizando uno u otro estilo que a su juicio le sea el ms
acertado.
1.6.2.3.1 Descripcin funcional
Se trata de una descripcin funcional porque expone la forma en que trabaja el sistema; es
decir, las descripciones consideran la relacin que hay entre las entradas y las salidas del
circuito, sin importar como est organizado en su interior, la descripcin funcional se basa
principalmente en el uso de procesos y de declaraciones secuenciales, las cuales permiten
modelar la funcin con rapidez.
Declaraciones Secuenciales
Son aquellas que nos permiten modelar la funcionalidad de un componente. Les podemos
clasificar en sentencias de asignacin (a variable o a seal), sentencias condicionales (if,
case), sentencias iterativas (loop, exit, next), otras sentencias (wait, assert, null) y
llamadas a subprogramas. A continuacin se resume la sintaxis de cada una de ellas.

Las sentencias wait se utiliza para suspender la ejecucin de un proceso. Su sintaxis es:
[etiqueta:] wait [on seal {, ...}]
[until expresin_booleana]
[for expresin_tiempo]
La asignacin a seal como sentencia secuencial presenta la siguiente sintaxis:
[etiqueta:] nombre_seal <= valor [after expresin_tiempo];
La sentencia if se utiliza para escoger en funcin de alguna condicin qu sentencia deben
ejecutarse. Su sintaxis es la siguiente:
if condicion then sentencias_secuenciales
{elsif condicion then sentencias_secuenciales}
[else sentencias_secuenciales]
end if;
La sentencia case se utiliza para escoger que grupo de sentencias deben ejecutarse entre un
conjunto de posibilidades, basndose en el rango de valores de una determinada expresin
de seleccin. Su sintaxis es la siguiente:
[etiqueta:] case expresin is
when valor => sentencias_secuenciales;
{when valor => sentencias_secuenciales;}
end case;
Puede utilizar palabras clave others en valor para especificar todos los dems rangos no
declarados especficamente. En ese caso hay que especificar, esta opcin ultima, despus de
los dems casos.
La sentencia loop se utiliza para ejecutar un grupo de sentencias secuenciales de forma
repetida. El nmero de repeticiones puede controlarse en la misma sentencia, usando
algunas de las opciones que esta ofrece. Su sintaxis es:
[etiqueta:] [while condicin_booleana | for control_repeticin] loop
sentencias_secuenciales;
end loop [etiqueta];
Podemos usar la sentencia loop si ningn tipo de control sobre el nmero de repeticiones
del bucle, de forma que se provoque la ejecucin infinita del grupo de sentencias
secuenciales especificadas.
La sentencia exit est relacionada con la sentencia loop, y ofrece una forma de terminar la
ejecucin del bucle. Su sintaxis es:
[etiqueta:] exit [etiqueta_loop] [when condicin_booleana];

1.6.2.3.2 Descripcin por flujo de datos


La descripcin por flujo de datos indica la forma en que los datos se pueden transferir de
una seal a otra sin necesidad de declaraciones secuenciales (if-then-else). Este tipo de
descripcin permite definir el flujo que tomaran los datos entre mdulos encargados de
realizar operaciones. En esta tipo de descripcin se pueden utilizar dos formato: mediante
instrucciones, when else o por medio de ecuaciones booleanas.
Declaraciones concurrentes
Las declaraciones concurrentes son aquellas que se ejecutan en paralelo por lo que no estn
incluidas en ningn proceso, si no que aparecen en la arquitectura del modelo.
Un proceso es una sentencia concurrente que define un comportamiento a travs de
sentencias secuenciales. Cualquier sentencia concurrente o secuencial en VHDL tiene su
proceso equivalente. La sintaxis general de un proceso es:
[etiqueta:] process [(nombre_seal {, ...})] [is]
declaraciones;
begin
sentencias_secuenciales;
end process [etiqueta];
Las asignaciones a seal pueden darse en el mundo concurrente. Su sintaxis es muy similar
a la asignacin secuencial:
[etiqueta:] nombre_seal <= [transport] forma_onda;
La asignacin concurrente condicional es una forma compacta de expresar las asignaciones
a seal usando la sentencia if secuencial. Su sintaxis es:
[etiqueta:] nombre_seal <= [transport]
{forma_onda when expresin_booleana else}
forma_onda [when expresin_booleana];
La asignacin concurrente con seleccin es una forma compacta de expresar las
asignaciones a seal usando la sentencia case secuencial. Su sintaxis es:
[etiqueta:] with expresin select
nombre_seal <= [transport]
{forma_onda when valor,}
forma_onda when valor;
La llamada concurrente a un subprograma toma la siguiente forma para un procedimiento:
[etiqueta:] nombre_procedimiento [{parmetros , ...}];
Para una funcin se tendr:

nombre_funcin [{parmetros, ...}];


1.6.2.3.3 Descripcin estructural
Como su nombre lo indica, una descripcin estructural basa su comportamiento en modelos
lgicos establecidos (compuertas, sumadores, contadores, etc.).
VHDL proporciona una serie de sentencias dedicadas a la descripcin estructural del
hardware. Son tambin sentencias concurrentes, pues se ejecutan en paralelo con cualquier
otra sentencia concurrente de la descripcin y aparecen en la arquitectura de un modelo
fuera de cualquier proceso.
La declaracin de un componente puede aparecer en una arquitectura o en un paquete. Si
aparee en la arquitectura entonces se puede hacer copias del componente en dicha
arquitectura; si aparece en un paquete se pueden hacer copias del componente en todas
aquellas arquitecturas que usen ese paquete. La sintaxis de la declaracin de un componente
es:
component nombre_componente [is]
[generic (lista_genricos);]
[port (lista_puertos);]
end component [nombre_componente];
Una vez declarado un componente, se pueden hacer referencias al mismo dentro de la
arquitectura, la sintaxis de referencia a un componente es:
[etiqueta_referencia:] nombre_componente
[generic map (lista_asociacin);]
[port map (lista_asociacin)];
Tambin es posible referenciar un componente sin necesidad de haberlo declarado antes.
La sintaxis de referencia es en este caso:
[etiqueta_referencia:] entity nombre_entidad[(nombre_arquitectura)]
[generic map (lista_genricos);]
[port map (lista_puertos)];
Una forma habitual de describir estructuras en el hardware es la realizacin de mltiples
copias de elementos iguales (o parecidos) Estas descripciones estructurales podran
realizarse con la copia o referencia a componente que se ha descrito anteriormente, pero
VHDL ofrece una forma ms cmoda y compacta para realizar descripciones que se basan
en la repeticin de la misma estructura: la sentencia generate. Su sintaxis es:
[etiqueta_generate:]
{[for
condicin]} generate
{sentencias_concurrentes}
end generate;

especificacin_for

if

Otra posible sintaxis para la sentencia generate que permite la inclusin de una parte
declarativa es la siguiente:
[etiqueta_generate:] {[for especificacin_for | if condicin]} generate
[{parte_declarativa}
begin]
{sentencias_concurrentes}
end generate;

Anda mungkin juga menyukai