Fundamentos de VHDL: tipos de datos, subtipos y conversiones
Resumen
Este apartado repasa los fundamentos básicos de VHDL: cómo se nombran los identificadores y qué son las palabras reservadas. Describe los tipos de datos escalares (enteros, físicos, reales y enumerados) y los compuestos (matrices y registros). Por último explica los subtipos, la conversión de tipos y la diferencia entre constantes, variables y señales.
Puntos clave
- Un identificador es una cadena de caracteres formada por letras o por letras y números que identifica variables, señales o procesos.
- Los tipos escalares incluyen enteros, físicos, reales (coma flotante) y enumerados, y se definen con la palabra RANGE en el caso de enteros y reales.
- Los tipos compuestos agrupan elementos: las matrices contienen elementos del mismo tipo accesibles por índice y los registros equivalen al record de otros lenguajes.
- Un subtipo es un tipo existente con una restricción de rango o de índice aplicada.
- La conversión de tipos (casting) se usa cuando hay que pasar de un tipo a otro, por ejemplo de std_logic_vector a entero.
- Las constantes se declaran con CONSTANT y no cambian su valor, las variables pueden modificarse en cualquier instante y las señales se declaran con SIGNAL.
Identificadores: Son cualquier cadena de caracteres que sirven para identificar variables, señales, procesos, etc. Puede ser cualquier nombre compuesto por letras (aux) o números y letras (aux1, aux2, aux3, ..).
Palabras reservadas: Son las instrucciones, órdenes y elementos que permiten definir sentencias.
Tipos de Datos
Tipos Escalares: Son tipos simples que contienen algún tipo de magnitud.
- Enteros: Son datos con un valor numérico entero. La forma de definirlos es con la palabra
RANGE. Ejemplo:TYPE byte IS RANGE 0 TO 255; - Físicos: Se trata de datos que corresponden con magnitudes físicas, que tienen un valor y unas unidades.
- Reales o coma flotante: Se definen igual que los enteros con la diferencia de que los límites son números reales. Ejemplo:
TYPE nivel IS RANGE 0.0 TO 5.0 - Enumerados: Son datos que pueden tomar siempre que se encuentre en una lista o conjunto finito. Es idéntico a las enumeraciones en C (
enum). Ejemplo:TYPE color IS (ROJO, VERDE, AMARILLO);
Tipos Compuestos: Son tipos de datos compuestos por los que se han visto anteriormente.
- Matrices: Se trata de un conjunto de elementos del mismo tipo, accesibles mediante un índice. Los hay de dos tipos: monodimensionales o multidimensionales. Ejemplo:
TYPE word IS ARRAY (31 DOWNTO 0) OF bit; - Registros: Es equivalente al tipo
recordde otros lenguajes.TYPE trabajador IS RECORD nombre : string; edad : integer; END RECORD;
Subtipos de Datos
Subtipos de datos: En VHDL se pueden definir subtipos, los cuales corresponden a tipos ya existentes. Se pueden diferenciar dos tipos dependiendo de las restricciones que se apliquen.
- Restricciones de un tipo escalar a un rango:
SUBTYPE indice IS integer RANGE 0 TO 7; SUBTYPE digitos IS character RANGE '0' TO '9'; - Restricciones del rango de una matriz:
SUBTYPE id IS string(0 TO 15); SUBTYPE dir IS bit_vector(31 DOWNTO 0);
Otros Elementos
Conversión de tipos: En ocasiones puede ser necesario convertir unos tipos a otros, esta operación es conocida como casting. Ejemplo: conv_integer(std_logic_vector); -- Conversión de vector a entero
Constantes: Es un elemento que se inicializa con un valor determinado, el cual no puede ser modificado, es decir siempre conserva el mismo valor. Esto se realiza con la palabra reservada CONSTANT.
Variables: Es lo mismo que una constante, pero con la diferencia que puede ser modificada en cualquier instante, aunque también es posible inicializarlas.
Señales: Las señales se declaran con la palabra reservada SIGNAL, a diferencia con las anteriores este tipo de elementos pueden ser de varios tipos: normal, register o bus. Es posible asignarles un valor inicial.
Descargar
PDF Word HTMLPreguntas frecuentes
¿Qué diferencia hay entre una constante, una variable y una señal en VHDL?
Una constante se inicializa con un valor que no puede modificarse. Una variable es similar pero puede cambiar en cualquier instante. Las señales se declaran con SIGNAL y pueden ser de tipo normal, register o bus.
¿Cómo se define un tipo entero o enumerado en VHDL?
Un entero se define con la palabra RANGE, por ejemplo TYPE byte IS RANGE 0 TO 255. Un enumerado enumera los valores posibles entre paréntesis, como TYPE color IS (ROJO, VERDE, AMARILLO), y es idéntico a los enum de C.
Ponte a prueba
Tarjetas de repaso
Pulsa una tarjeta para ver la respuesta.
Test
Preguntas generadas con IA a partir del documento: comprueba las respuestas con el texto.