Tipos de Datos en VHDL (Data Types)
Juan Diego Cervantes Suarez
Boolean
Es un tipo enumerado de dos valores: false y true. Soporta operaciones lógicas y de comparación. En términos de números de bis es un escalar. Su definición es:
TYPE BOOLEAN IS (FALSE, TRUE);
Ejemplo:
SIGNAL ready: BOOLEAN;
x <= “111” WHEN ready ELSE “000”;
El valor de x cambia de “000” a “111” cuando ready es igual a TRUE
Std_logic/std_ulogic y Std_(u)logic_vector
Los tipos de datos estándar-lógico (standard-logic) son STD_LOGIC y STD_LOGIC_VECTOR. Ambos están definidos en la paquete std_logic_1164. STD_LOGIC y STD_LOGIC_VECTOR son el estándar en la industria. La definición de STD_LOGIC está en función de STD_ULOGIC. El primero es un tipo de dato “resuelto” y el último es “no resuelto”. Su definición es:
TYPE STD_ULOGIC IS (‘U’, ‘X’, ‘0’, ‘1’, ‘Z’, ‘W’, ‘L’, ‘H’, ‘-’);
TYPE STD_LOGIC IS resolved STD_ULOGIC;
Unsigned - Signed
Los tipos de datos sin singo (UNSIGNED) y con signo (SIGNED) están definidos en los paquetes numeric_std y std_logic_arith. Estos paquetes son parcialmente equivalentes, por lo tanto, solo uno de ellos puede declararse en el código.
El rango para el tipo de dato sin signo es de 0 a 2N-1 (limitado a INTEGER’HIGH), donde N es el número de bits.
El rango para el tipo de dato con signo es de -2 N-1 a 2N-1 -1 (limitado entre INTEGER’LOW y INTEGER’HIGH), y usa la representación en complemento a 2.
Desafortunadamente, los nombre elegidos para los paquetes std_logic_unsigned y std_logic_signed pueden causar confusión. Estos paquetes únicamente definen los operadores (+, -, *, …) sin signo o con singo para STD_LOGIC_VECTOR, y no los tipos de datos SIGNED y UNSIGNED.
Integer
Soporta operaciones aritméticas y de comparación. Su rango por defecto va de –(231-1) a (231-1). Su definición es:
TYPE INTEGER IS RANGE implementation_defined;
TYPE INTEGER IS -2147483647 a 2147483647;
Los limites son referidos como INTERGER´LOW (limite inferior) y INTEGER´HIGH (limite superior).Es importante especificar el rango cada vez que se usa este tipo de dato, de lo contrario el sintetizador emplea 32 bits para representarlo.
Ejemplo
SIGNAL a: INTEGER RANGE 0 TO 15; -- 4 bits
SIGNAL b: INTEGER RANGE -15 TO 15; -- 5 bits
SIGNAL x: INTENGER RANGE -31 TO 31; -- 6 bits
X <= a + b;
Comentarios
Publicar un comentario