Elementos léxicos y sintaxis del VHDL
Se ha introducido ya el formato estructural de la descripción VHDL.
Aquí se va a realizar una breve introducción a los elementos léxicos y la sintaxis del VHDL. Puesto que se encuentran especificados en multitud de libros, manuales, tutoriales, en lo que sigue sólo se comentarán aquellos aspectos indispensables para comprender el VHDL como lenguaje de modelización y síntesis para el hardware
La primera consideración surge de que el VHDL es un lenguaje muy tipado. Esto es, cada objeto sólo asume tipos de valores por los que está definido.
…como en todos los lenguajes, se recomienda:
Comentar siempre las descripciones
Utilizar identificadores fáciles de recordar (de acuerdo con su propósito)
Las palabras reservadas … están reservadas!
Referente a los datos...
el VHDL 'seco' sólo usa dígitos binarios (bits):'0' y '1', permitiendo especificaciones en binario (B"1110_0111"), octal (o "457") o hexadecimal (X"FA")
Pueden definirse literales enteros y reales
Los caracteres se especifican en comillas simples, los strings en comillas dobles
Como datos pueden definirse constantes, señales/variables, tipos …
...los tipos de datos!!!! Cuidado con ellos! el VHDL es altamente 'tipado'
Ejemplo:
signal a: std_logic :='0';
signal b: bit :'0';
...
c <= a AND b; -- ERROR: operación con datos pertenencientes a distinto tipo!VHDL: como todos los lenguajes implica … práctica !
Más sobre datos...
Pueden declararse
Constantes. Ejemplo: constant tiempo: time := 0 ns;
Señales. Ejemplo: signal contador: std_logic;
Variables. Ejemplo: variable indice: integer range 0 to 15:= 0;
La asignación de datos puede realizarse con
Señales. Ejemplo: contador <= contador + indexado;
Variables. Ejemplo: indice := indice + 1;
Tipos de datos que pueden usarse
Los definidos en el VHDL estándar
Boolean. Ejemplo: type boolean is (false, true);
Integer. Ejemplo: type integer is range -2E31 to (2E31-1);
Character. Ejemplo: Cuidado con las definiciones entre VHDL-87 y VHDL-93
Bit. Ejemplo: type bit is ('0', '1')
Time. Ejemplo: type time is range implementation_defined units….;Y los tipos propios definidos por los usuarios
Aunque el VHDL permite la especificación de datos ádhoc para cada situación, la descripción de hardware mediante VHDL utiliza, muy a menudo, sólo un subconjunto reducido de datos.
Sobre los tipos definidos en VHDL estándard
Así, con los tipos definidos en VHDL estándard…
...para síntesis
… no se puede describir el estado de alta impedancia
… no se pueden tener distintos drivers para la misma señal
… no es posible asignar estados desconocidos
… no es posible asignar estados ‘no importa’
… no se puede describir el estado de alta impedancia...para simulación
… no se puede trabajar con pull-up’s (uno débil)
… no se puede trabajar con pull-down’s (cero débil)
… no es posible dejar un estado no inicializadoLibrerías estándard IEEE
Trabajar con librerías estándar IEEE normalmente …
...soluciona los defectos del VHDL estándar en tipología de datos porque
… fueron desarrollados independientemente del estándard de simulación
… fueron desarrollados independientemente de la plataforma de diseñoLas librerías IEEE están siendo usadas, actualmente, como estándar en la industria
Tipos de datos definidos en la librería IEEE
Std_ulogic.
Declarado en el package std_logic_1164
Asume los valores: 'U', 'X', '0', '1', 'Z', 'W', 'L', 'H', '-', que se corresponden, respectivamente, a: no inicializado, desconocido, 0, 1, alta impedancia, desconocido débil, 0 débil, 1 débil, no importaStd_logic
Asume los valores del std_ulogic y se define como
Subtype std_logic is resolved std_ulogic;
Esto es, asume todos los tipos de valores del std_ulogic y además contiene la tabla de resolución para cuando se opera con tipos no iguales
Clasificación de tipos de datosLa siguiente figura resume los distintos tipos de datos que se pueden encontrar en VHDL
Definición de tipos y de subtipos
Los tipos definen un conjunto de valores
Ejemplos:
type estados is (parado, funcionando, paso, reposo); -- enumerado
type diasMes is range 0 to 31; -- entero
type palabra is array (15 downto 0) of std_logic; -- vector
type distancia is range 0 to 1E6; -- físico
units um; --unidad primaria
mm = 1000 um;
m = 1000 mm;end units distancia;
Los subtipos definen un rango restringido de valores de un tipo
Ejemplos:
subtype semana is diasMes range 0 to 7;
subtype natural is integer range 0 to highest_integer;Los vectores se utilizan a menudo como un tipo de dato. de hecho, definen un rango de valores pertenecientes a un mismo tipo
Ejemplos:
type bit_vector is array (natural range <>) of bit;
type string is array (positive range <>) of character;