v. elementos de la arquitectura -...
TRANSCRIPT
2
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.
Tipos de Datos
Por ejemplo, para una memoria:
RAM
1k x 8
Tiempo de
Acceso
10 nS
Convendría usar
números Decimales
o HexadecimalesD
eco
dific
ado
r
de
dire
ccio
ne
s
Arreglo
de
bits
Control
Convendría
usar un arreglo
de Bytes
Los tipos bit y
bit_vector no se
ajustan, el tipo
aplicable es Time
(que es un tipo físico)
Por lo tanto, VHDL debe incluir otros tipos de datos.
3
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‟, „}‟
Tipos Escalares
4
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
5
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.
6
Ejemplo de una Enumeración
IDLE
FETCH
DECODE
EXECUTE
type EstadosFSM is (IDLE, FETCH, DECODE, EXECUTE);
7
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;
8
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 );
0 1 0 0 1 1 0 1
7 6 5 4 3 2 1 0
MSB LSB
Único elemento (comilla simple):
DataBus( 7 ) = „0‟;
DataBus( 3 ) = „1‟;
Dos o mas elementos (comilla doble):
DataBus = “01001101”;
DataBus( 5 downto 3) = “001”;
9
Es una especie de Vector de Vectores.
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
2
3
1020
1021
1022
1023
1019
Type memory1k4 : Array ( 0 to 1023 ) of
Bit_Vector ( 3 downto 0 );
Signal Memory : memory1k4;
10
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;
Instr2.mnemonico = “xor reg1 reg2”;
Instr2.opcode = “0001”;
Instr2.CiclosEx = 1;
Instr3.mnemonico = “mul reg1 reg2”;
Instr3.opcode = “1110”;
Instr3.CiclosEx = 8;
Nota : No todos los records son sintetizables, pero la
mayoría de herramientas que sintetizan cubren los
records que incluyen los tipos: bit, bit_vector, boolean y
integer.
11
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).
12
Operadores Numéricos:
OPERADOR SIMBOLO EJEMPLOS DE USO
Suma + IntX1 + 17, RealX2 + 2.0
Resta - BusWidth – 1
Producto *A * B (ambos enteros o ambos reales),
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 )
Enteros Reales Tiempo
Todos+, -, /, abs
** con el 2o. Operando Entero
+, -, / (Ambos de Tiempo)
*, / (Uno entero o real)
Operadores aplicables en cada tipo de datos
13
Operadores Relacionales :
OPERADOR SIMBOLO
Igual a =
No igual a /=
Menor que <
Menor o igual que <=
Mayor que >
Mayor o igual que >=
Estos operadores se aplican sobre los
tipos: Booleanos, Bits, Caracteres,
Enteros, Reales, Tiempo, Cadenas y
Bit_Vector (ambos del mismo tipo).
El resultado siempre es Booleano:
True o False
Operadores de Desplazamientos :
( Aplicables a Bit_Vector o Arreglos Booleanos )
SLL – Desplazamiento lógico a la Izquierda.
SLL
1 0 0 1 1 0 1 0
7 6 5 4 3 2 1 0
0 1 0 0 1 1 0 1
7 6 5 4 3 2 1 0
0
( )
SLR – Desplazamiento lógico a la Derecha.
SLR
0 0 1 0 0 1 1 0
7 6 5 4 3 2 1 0
0 1 0 0 1 1 0 1
7 6 5 4 3 2 1 0
0
( )
14
SLA – Desplazamiento Aritmético a la Izquierda.
SLA
1 0 0 1 1 0 1 1
7 6 5 4 3 2 1 0
0 1 0 0 1 1 0 1
7 6 5 4 3 2 1 0
( )
SRA – Desplazamiento Aritmético a la Derecha.
SRA
0 0 1 0 0 1 1 0
7 6 5 4 3 2 1 0
0 1 0 0 1 1 0 1
7 6 5 4 3 2 1 0
( )
ROL – Rotación a la Izquierda.
ROL
1 0 0 1 1 0 1 0
7 6 5 4 3 2 1 0
0 1 0 0 1 1 0 1
7 6 5 4 3 2 1 0
( )
ROR – Rotación a la Derecha.
ROR
0 0 1 0 0 1 1 0
7 6 5 4 3 2 1 0
0 1 0 0 1 1 0 1
7 6 5 4 3 2 1 0
( )
15
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.
1 0 1 1 0 0 1 0
0 1 2 3 4 5 6 7
Ejemplo: Data1 : Bit_Vector ( 0 to 7 );
0 0 1 0 1 0 1 0
0 1 2 3 4 5 6 7
Data2 : Bit_Vector ( 0 to 7 );
1BitOne : bit;
VecRes : Bit_Vector ( 0 to 7 );
VecRes <= ( Data1( 0 to 3 ) & Data2 (3 to 5) & BitOne );
1 0 1 1 0 1 0 1
0 1 2 3 4 5 6 7
16
Asignación de Expresiones a Señales
El operador de asignación es : <=
Señal_Destino <= Expresión
Ejemplos:
k <= „1‟;
m <= “0101”;
n <= m & k;
a <= b or c;
x <= y <= z;
Una asignación puede ser retrazada, la
cláusula “after” permite definir esos retrazos
Retrazo
4 seg
Lamp <= switch after 4s;
Cuando la respuesta de un sistema es retrazada,
¿Qué tan rápido puede la salida seguir los
cambios de la entrada?
La cláusula “after” impone un retrazo inercial, es
decir, dos cambios subsecuentes de una entrada
son ignorados si el tiempo entre ellos es más corto
que el retrazo especificado.
0 6 10
SWITCH
0 4 10LAMP
12
0 2 10
SWITCH
0 4LAMP
17
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;
0 2 10
SWITCH
0 4LAMP
6 10
18
Comparación de Retrazos
Out1 <= Input after 3s; -- Retrazo inercial (default)
Out2 <= transport Input after 3s; -- Retrazo de transporte
0 4 10
INPUT
0 3OUT1
7 10
0OUT2
10
12
3 7 13 15
19
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
Constant t_prop : time := 10nS;
Begin
. . . .
End architecture Arch1;
Block_1 : block
Constant N : integer := 123;
Begin
. . . .
End block Block1;
P1 : process( A, B)
Constant t_hold : time := 5 ns;
Begin
. . . .
End process P1;
20
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
DECLARACION
Sólo en la Entidad
( cláusula generic )
En una arquitectura o
En un paquete
DECLARACION
Es una lista:
Generic ( name : tipo := valor_op;
name : tipo := valor_op );
Una declaración por constante :
Constant name : tipo := valor;
Constant name : tipo := valor;
VISIBILIDAD
En la entidad, incluyendo los puertos y
en todas las arquitecturas asociadas
con esa Entidad
En la arquitectura (si ahí se declaro).
En cualquier Unidad de diseño que use el
paquete (si se declaró en un paquete),
esto incluye entidades y arquitecturas.