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];
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;