Anda di halaman 1dari 20

V.

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.

Por ejemplo, para una memoria:


Convendría
usar un arreglo
Convendría usar de Bytes
números Decimales
RAM o Hexadecimales Arreglo
de

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

Por lo tanto, VHDL debe incluir otros tipos de datos.

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’

Enumeraciones: Tipos definidos por el usuario.

Son sistemas de información disponibles para que el diseñador pueda contar con mayor
información, o mayor entendimiento.

Un ejemplo clásico es una Máquina de Estados Finitos (FSM) representando un diseño


secuencial. Para propósitos de síntesis, cada estado es codificado con variables de
estado (Flip-Flops) para almacenar la información del estado actual. Sin embargo, al
nivel de especificación conviene mas asignar un nombre a cada estado.

5
Ejemplo de una Enumeración
IDLE

EXECUTE FETCH

DECODE

type EstadosFSM is (IDLE, FETCH, DECODE, EXECUTE);

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.

Type time is range –2147483647 to 2147483647


units
fs; -- Primarias
ps = 1000 fs; -- Secundarias
ns = 1000 ps;
us = 1000 ns;
ms = 1000 us;
sec = 1000 ms;
min = 60 sec;
hor = 60 min;
end units;

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

Único elemento (comilla simple):


7 6 5 4 3 2 1 0
DataBus( 7 ) = ‘0’;
0 1 0 0 1 1 0 1 DataBus( 3 ) = ‘1’;

Dos o mas elementos (comilla doble):


MSB LSB
DataBus = “01001101”;
DataBus( 5 downto 3) = “001”;

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.

Un ejemplo típico es una memoria: Ej. Memoria de 1 K x 4


0
1
Type memory1k4 : Array ( 0 to 1023 ) of
2
Bit_Vector ( 3 downto 0 );
3

Signal Memory : memory1k4;


1019
1020

Es una especie de Vector de Vectores. 1021


1022
1023

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 :

Type Instr_T is record


mnemonico : String ( 1 to 14 );
opcode : Bit_Vector ( 3 downto 0 );
CiclosEx : Integer;
End record;

Signal Instr1, Instr2, Instr3 : Instr_T;

Instr1.mnemonico = “add reg1 reg2”;


Instr1.opcode = “0010”;
Instr1.CiclosEx = 2; Nota : No todos los records son sintetizables, pero la
Instr2.mnemonico = “xor reg1 reg2”; mayoría de herramientas que sintetizan cubren los
Instr2.opcode = “0001”; records que incluyen los tipos: bit, bit_vector, boolean y
Instr2.CiclosEx = 1; integer.

Instr3.mnemonico = “mul reg1 reg2”;


Instr3.opcode = “1110”;
Instr3.CiclosEx = 8;

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.

Outputs <- transformaciones( inputs )

Las transformaciones son realizadas por expresiones : Fórmulas que consisten de


operadores con un apropiado número de operandos.

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

Suma + IntX1 + 17, RealX2 + 2.0

Resta - BusWidth – 1

A * B (ambos enteros o ambos reales),


Producto *
Mult * 5nS (Mult entero o real)

División / CLK/2 , 10 ns / 2 ns (resultado sin Unidad)

Módulo Mod 6 mod 4 ( = 2 ), (-6) mod 4 ( = 2 ), 6 mod (-4) ( = -2)

Residuo Res 6 res 4 ( = 2 ), (-6) res 4 ( = - 2 ), 6 res (-4) ( = 2)

Exponenciación ** A**2 ( A*A ), B**3 ( B*B*B ), C*0.5 ( Ilegal )

Valor Absoluto Abs Abs 1 ( = 1 ), Abs ( - 1) ( = 1 ), Abs ( 5*(-2) ) ( = 10 )

Operadores aplicables en cada tipo de datos

Enteros Reales Tiempo


+, -, /, abs +, -, / (Ambos de Tiempo)
Todos
** con el 2o. Operando Entero *, / (Uno entero o real)

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

Menor que <


SLL ( 0 1 0 0 1 1 0 1 )
0
Menor o igual que <=
7 6 5 4 3 2 1 0
Mayor que > 1 0 0 1 1 0 1 0

Mayor o igual que >=


SLR – Desplazamiento lógico a la Derecha.
7 6 5 4 3 2 1 0
Estos operadores se aplican sobre los
tipos: Booleanos, Bits, Caracteres,
SLR ( 0 1 0 0 1 1 0 1 )
Enteros, Reales, Tiempo, Cadenas y 0
Bit_Vector (ambos del mismo tipo).
7 6 5 4 3 2 1 0
El resultado siempre es Booleano:
True o False 0 0 1 0 0 1 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

SRA – Desplazamiento Aritmético a la Derecha. ROR – Rotación a la Derecha.


7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
SRA ( 0 1 0 0 1 1 0 1 ) ROR ( 0 1 0 0 1 1 0 1 )

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

Ejemplo: Data1 : Bit_Vector ( 0 to 7 ); 1 0 1 1 0 0 1 0

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

VecRes <= ( Data1( 0 to 3 ) & Data2 (3 to 5) & BitOne );


0 1 2 3 4 5 6 7
1 0 1 1 0 1 0 1

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

Lamp <= switch after 4s;


LAMP
0 4

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

Lamp <= transport switch after 4s;

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.

Architecture Arch1 of Ent1 is Block_1 : block P1 : process( A, B)


Constant t_prop : time := 10nS; Constant N : integer := 123; Constant t_hold : time := 5 ns;
Begin Begin Begin
.... .... ....
End architecture Arch1; End block Block1; End process P1;

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).

PARÁMETROS GENERICOS CONSTANTES

UBICACIÓN DE LA Sólo en la Entidad En una arquitectura o


DECLARACION ( cláusula generic ) En un paquete

Es una lista: Una declaración por constante :


DECLARACION Generic ( name : tipo := valor_op; Constant name : tipo := valor;
name : tipo := valor_op ); Constant name : tipo := valor;

En la arquitectura (si ahí se declaro).


En la entidad, incluyendo los puertos y
VISIBILIDAD en todas las arquitecturas asociadas En cualquier Unidad de diseño que use el
con esa Entidad paquete (si se declaró en un paquete),
esto incluye entidades y arquitecturas.

20

Anda mungkin juga menyukai