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 inicializado

Librerí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ño

Las 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 importa

Std_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 datos

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

 

Anterior
Volver a inicio curso
Volver a inicio capítulo
Siguiente


WcN - Joan Oliver. Diseño de circuitos digitales con VHDL: Modelización de sistemas digitales