20
1 V. Elementos de la Arquitectura

V. Elementos de la Arquitectura - mixteco.utm.mxmixteco.utm.mx/~merg/AC/vhdl/5_Elementos_de_la_Arquitectura.pdf · Nota: No pueden usarse para definir los tamaños de vectores en

  • Upload
    buikhue

  • View
    218

  • Download
    0

Embed Size (px)

Citation preview

1

V. Elementos de la Arquitectura

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.