Elementos de VHDL
1
Tipos de Datos
Todos los sistemas digitales manejan la información como bits o vectores de
bits. Sin embargo no es posible ni conveniente usar sólo estos tipos para
todos los datos.
de direcciones
Decodificador
bits
1k x 8
Los tipos bit y
bit_vector no se
ajustan, el tipo
Control aplicable es Time
Tiempo de (que es un tipo físico)
Acceso
10 nS
2
Tipos Escalares
Booleano :
Declarado como:
type BOOLEAN is (false, true);
Descripción:
Los valores Booleanos son TRUE/FALSE que no necesariamente son iguales a 0/1.
Es decir , TRUE no es lo mismo que ‘1’ y viceversa. Bit y Boolean son dos tipos
diferentes.
Ejemplos: True, false
Caracter :
Declarado como:
type CHARACTER is (null, . . ., ‘a’, ‘b’, ‘c’, . . . );
Descripción:
Cubre todos los caracteres definidos en el conjunto que establece la definición ISO
8859-1 (Conocida también como Latín – 1).
Ejemplos: ‘0’, ‘*’, ‘¿’, ‘A’, ‘}’
3
Entero :
Declarado como:
type INTEGER is range –2147483647 to 2147483647;
Descripción:
El rango de un entero depende del rango especificado en la definición. Usualmente
es limitado a sub-conjuntos completos (p. Ej., 0 a 15, 0 a 99, etc.), para reducir el
número de recursos de almacenamiento.
Ejemplos: 12, 0, 2147483646, -100, 16
Real :
Declarado como:
type REAL is range –1.0 E308 to 1.0 E308;
Descripción:
También es conocido como Punto flotante, por lo general se maneja un sub-rango
que depende de la aplicación. Todas las implementaciones deben garantizar un
mínimo de 6 bits de precisión.
Ejemplos: 0.0, 1.000001, -1.0 e5
4
Bit :
Declarado como:
type BIT is (‘0’, ‘1’);
Descripción:
El tipo Bit es una enumeración que define dos valores lógicos estándares: ‘0’ y ‘1’. Es el
único que puede usarse para operaciones lógicas.
Ejemplos: ‘0’, ‘1’
Son sistemas de información disponibles para que el diseñador pueda contar con mayor
información, o mayor entendimiento.
5
Ejemplo de una Enumeración
IDLE
EXECUTE FETCH
DECODE
6
Tipos Fisicos
Los tipos físicos son únicos en VHDL, ya que no sólo especifican los valores de los
objetos sino también sus unidades.
El estándar de VHDL sólo incluye un tipo físico: El tiempo (Time), pero otros tipos
pueden también definirse.
7
Arreglos
Son tipos complejos con una estructura regular que contiene elementos del mismo tipo. El
número de elementos está especificado en el mismo rango del arreglo.
El rango puede ser ilimitado: range < > (aunque no es lo más conveniente).
Hay dos arreglos pre-definidos en VHDL :
• Bit_Vector – Con elementos del tipo Bit, y
• String – Con elementos de tipo carácter.
Si estos arreglos se declaran con rango ilimitado, difieren en su limite inferior por default
en el bit_vector es 0 y en un string es 1.
Ejemplo: Signal DataBus : bit_vector ( 7 downto 0 );
8
Arreglos . . .
Puesto que los arreglos sólo tienen una dimensión, estos son conocidos como vectores.
El usuario puede declarar arreglos con dimensiones mayores, aunque tres o mas son
poco tratables.
9
Registros (records)
También son tipos complejos, difieren de los arreglos en que sus elementos pueden ser
de diferentes tipos y son referenciados por su nombre y no por un índice.
Ejemplo :
10
Operadores y Expresiones
Aparte de los sistemas triviales, las señales de entrada deben ser transformadas de
alguna forma para generar las señales de salida deseadas.
Entonces una especificación del comportamiento de un sistema puede ser vista como un
conjunto ordenado de expresiones aplicadas sobre las señales de entrada.
Operadores Lógicos:
AND, OR, NAND, NOR, XOR y XNOR ( binarios )
NOT ( unario )
Aplicables en los tipos: Bit, Booleano y Bit_Vector (Ambos operandos deben ser del
mismo tipo).
11
Operadores Numéricos:
OPERADOR SIMBOLO EJEMPLOS DE USO
Resta - BusWidth – 1
12
Operadores Relacionales : Operadores de Desplazamientos :
( Aplicables a Bit_Vector o Arreglos Booleanos )
OPERADOR SIMBOLO
SLL – Desplazamiento lógico a la Izquierda.
Igual a =
No igual a /= 7 6 5 4 3 2 1 0
13
SLA – Desplazamiento Aritmético a la Izquierda. ROL – Rotación a la Izquierda.
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
SLA ( 0 1 0 0 1 1 0 1 ) ROL ( 0 1 0 0 1 1 0 1 )
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
1 0 0 1 1 0 1 1 1 0 0 1 1 0 1 0
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
0 0 1 0 0 1 1 0 0 0 1 0 0 1 1 0
14
Operador de Concatenación :
Facilita la creación de nuevos arreglos a partir de arreglos existentes, los arreglos pueden
ser de cualquier tipo, pero solo de una dimensión.
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
Data2 : Bit_Vector ( 0 to 7 ); 0 0 1 0 1 0 1 0
BitOne : bit; 1
VecRes : Bit_Vector ( 0 to 7 );
15
Asignación de Expresiones a Señales
El operador de asignación es : <= Cuando la respuesta de un sistema es retrazada,
Señal_Destino <= Expresión ¿Qué tan rápido puede la salida seguir los
Ejemplos: cambios de la entrada?
La cláusula “after” impone un retrazo inercial, es
k <= ‘1’;
decir, dos cambios subsecuentes de una entrada
m <= “0101”; son ignorados si el tiempo entre ellos es más corto
n <= m & k; que el retrazo especificado.
a <= b or c;
x <= y <= z;
SWITCH
Una asignación puede ser retrazada, la 0 6 10
cláusula “after” permite definir esos retrazos
LAMP
0 4 10 12
Retrazo
4 seg
SWITCH
0 2 10
16
Retrazo de transporte
El “retrazo Inercial” es común en muchos sistemas electrónicos, pero no en todos. Por
ejemplo en una línea de transmisión los retardos en la propagación son independientes
del ancho de los pulsos.
Este tipo de retrazos se les conoce como retrazos de transporte y en VHDL se modelan
con la palabra reservada “transport”.
Retrazo
4 seg
SWITCH
0 2 10
LAMP
0 4 6 10
17
Comparación de Retrazos
Out1 <= Input after 3s; -- Retrazo inercial (default)
Out2 <= transport Input after 3s; -- Retrazo de transporte
INPUT
0 4 10 12
OUT1
0 3 7 10
OUT2
0 3 7 10 13 15
18
Constantes
Juegan el mismo papel que los parámetros genéricos, excepto que las constantes se
declaran en la arquitectura (y no en la entidad).
La declaración de constantes requiere de la Sintaxis siguiente:
• Palabra reservada Constant
• Nombre de la constante (es un Identificador)
• Dos puntos
• Indicación del tipo de constante
• Valor de la constante despues de :=
• Punto y coma al terminar la linea
Si dos constantes son del mismo tipo y tienen el mismo valor, pueden especificarse
en una declaración.
19
Las constantes pueden utilizarse para :
• Especificar el tamaño de Objetos complejos (arreglos o buses)
• Controlar lazos repetitivos
• Definir parámetros de tiempo como : retrazos, tiempos de conmutación, etc.
Nota: No pueden usarse para definir los tamaños de vectores en los puertos , por que son declarados
en las arquitecturas (solo se puede hacer si la constante está en un paquete usado por la entidad).
20