Академический Документы
Профессиональный Документы
Культура Документы
El lenguaje VHDL
Es un estndar de IEEE Ampliamente usado, principalmente en Europa Gran mbito de aplicacin
Lenguaje muy amplio que se adapta bien a las necesidades del diseo de circuitos digitales desde el nivel de sistema hasta el nivel lgico Modelado y simulacin de circuitos digitales en mltiples niveles de abstraccin Sntesis lgica, RT y de alto nivel
Caractersticas generales
Jerarqua Soporte para la utilizacin de bibliotecas de diseo Diseo genrico Concurrencia Estilos de descripcin
Estructural Comportamental (Behavioral)
Entidades y arquitecturas
Entidad de mayor nivel Entidad 2 Entidad 1 Arquitectura 1 Arquitectura 2 Entidad 3
Entidades
La entidad es el bloque bsico de diseo La declaracin de entidad contiene
Declaracin de los parmetros genricos de la entidad La descripcin del interfaz
ENTITY inversor IS GENERIC (retraso: TIME := 5 NS); PORT (i1: IN BIT; o1: OUT BIT); END inversor;
Arquitecturas
La arquitectura define el comportamiento de la entidad Una entidad puede tener varias arquitecturas asociadas, que describen el comportamiento de la entidad de diferentes formas. Dentro de una arquitectura se pueden instanciar otras entidades, dando lugar a la jerarqua del diseo
ARCHITECTURE ejemplo OF inversor IS -- Declaraciones BEGIN -- Operaciones o1 <= NOT i1 AFTER retraso; END ejemplo;
Ejemplo: un semisumador
a Semisumador b
s c
10
El semisumador en VHDL
ENTITY semisumador IS PORT ( a: IN BIT; b: IN BIT; s: OUT BIT; c: OUT BIT); END semisumador;
ARCHITECTURE simple OF semisumador IS BEGIN s <= a XOR b; c <= a AND b; END simple;
11
Un sumador total
x y cin s Sumador total cout
x y cin
s Semisumador b c
cout
12
13
Asociacin de puertos
La asociacin de puertos se ha realizado por posicin
COMPONENT semisumador PORT ( a: IN BIT; b: IN BIT; s: OUT BIT; c: OUT BIT); END COMPONENT; ...... SS0: semisumador PORT MAP (x, y, s_parcial, c_parcial1);
14
COMPONENT semisumador PORT ( a: IN BIT; b: IN BIT; s: OUT BIT; c: OUT BIT); END COMPONENT; ...... SS0: semisumador PORT MAP (a => x, b => y , s => s_parcial, c =>c_parcial1);
15
Sentencias concurrentes
Se ejecutan a la vez! Se pueden poner en cualquier orden
El simulador detecta los cambios en los valores de los objetos y determina cuando tiene que actualizarlos
Sentencias concurrentes
Dos ejemplos equivalentes
ARCHITECTURE a OF circuito IS BEGIN g1 <= a OR b; s <= g1 AND c; END a; ARCHITECTURE a OF circuito IS BEGIN s <= g1 AND c; g1 <= a OR b; END a;
a b c
g1 s
18
Simulacin:
Si hay un evento en a o b -> Calcular posible nuevo valor de g1 Si hay un evento en g1 o c -> Calcular posible nuevo valor de s
19
Sentencias secuenciales
La concurrencia es difcil de manejar:
Podemos describir un diseo mediante sentencias secuenciales
Sentencias secuenciales:
Se ejecutan una detrs de otra, como en los lenguajes de software Las sentencias secuenciales van siempre dentro de procesos o de subprogramas, que determinan la sincronizacin con el resto del diseo Entre la ejecucin de una sentencia secuencial y la siguiente no transcurre el tiempo
20
Procesos
Sirve para describir el hardware mediante sentencias secuenciales Contienen
Declaraciones Sentencias secuenciales
El proceso debe de tener una lista de sensibilidad explcita o al menos una sentencia WAIT Los procesos se ejecutan cuando
ocurre un evento en alguna de las seales de su lista de sensibilidad, o se cumplen las condiciones de disparo de la sentencia WAIT en la que se par
21
El proceso se dispara cuando i1 cambia de valor Las sentencias dentro del proceso se ejecutan secuencialmente
22
La ejecucin del proceso se para en la sentencia WAIT La ejecucin se reanuda cuando i1 cambia de valor Si se llega al final del proceso, se vuelve a comenzar por el principio
23
24
Clases de objetos
Similares a las de los lenguajes de programacin convencionales Representan seales hardware cuyos valores evolucionan en el tiempo
26
Ejemplos
CONSTANT gnd : BIT := 0; CONSTANT n, m : INTEGER := 3; CONSTANT retraso : TIME := 10 NS;
27
28
30
Asignaciones a seales
Si dentro de un mismo proceso se asignan valores diferentes a una misma seal, solo se ver el ltimo valor asignado
PROCESS (a) BEGIN z <= a; z <= 1; END PROCESS;
z siempre vale 1
31
Asignaciones a seales
Si una misma seal se asigna en varias sentencias concurrentes a la vez, existir un driver por cada proceso El valor de la seal se calcula mediante una funcin de resolucin
PROCESS (a) BEGIN z <= a; END PROCESS; PROCESS (b) BEGIN z <= b; END PROCESS;
z?
Funcin de resolucin Valor actual de la seal (resuelto)
32
Seales
Necesarias para expresar la concurrencia. Es la nica manera de comunicar los procesos
Asignaciones
De variable De seal := <=
33
ndice
Tipos de datos Operadores y funciones de conversin Atributos Interpretacin de los tipos de datos en la sntesis
35
Tipos de datos
VHDL es un lenguaje que posee un conjunto amplio de tipos de datos Todos los tipos de datos llevan asociada una restriccin, que determina el rango de valores permitido Tipos
Escalares:
- Enumerado - Real - Entero - Fsico - Registro
Compuestos
- Vector/Matriz
- Fichero
36
Tipos escalares
Enumerados
Los valores son identificadores o literales de un solo carcter Pueden ser predefinidos o definidos por el usuario
37
Utilizacin
CONSTANT primera_letra: conjunto_de_letras := A; SIGNAL semaforo1: semaforo; SIGNAL estado_actual: estados; ... estado_actual <= s0; semaforo1 <= verde;
38
STD_LOGIC (definido en el estndar IEEE 1164) ('U', 'X', '0', '1', 'Z', 'W', 'L', 'H', '-')
39
40
Para usar los tipos lgicos estndar hay que aadir las siguientes lneas antes de la declaracin de entidad o arquitectura donde se utilicen:
LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY...
41
Tipo entero
Declaracin y utilizacin
CONSTANT n: INTEGER := 8; SIGNAL i, j, k: INTEGER; ... i <= 3;
42
Tipo REAL
Declaracin y utilizacin
SIGNAL d: REAL; ... d <= 3.1416; d <= 10E5; d <= 2.01E-3;
No es sintetizable
No obstante, existen bibliotecas de componentes para operaciones con nmeros reales
43
Tipos fsicos
Ejemplo de declaracin y utilizacin
TYPE peso IS RANGE 0 TO 100.000.000 UNITS gramo; kilo = 1000 gramo; tonelada = 1000 kilo; END UNITS; SIGNAL p: peso;
44
46
ARRAYS multidimensionales
Matrices multidimensionales y vectores de vectores
TYPE matriz IS ARRAY(0 TO 479, 0 TO 479) OF STD_LOGIC; SIGNAL imagen: matriz; TYPE memoria1 IS ARRAY(0 TO 1023) OF STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL ram1: memoria1; TYPE memoria2 IS ARRAY(0 TO 1023) OF INTEGER RANGE 0 TO 255; SIGNAL ram2: memoria2;
Utilizacin
imagen(0,0) <= 1; ram1(0)(0) <= 1; ram1(0) <= 00000000; imagen(0, 0 TO 7) <= 00000000; -- ERROR
47
48
Literales
Smbolos utilizados para representar valores constantes en VHDL Caracteres: siempre entre comillas simples
'0' '1' 'Z'
49
Alias y subtipos
Los alias permiten dar nombres alternativos a un objeto o a una parte de l
SIGNAL registro_de_estado: BIT_VECTOR (7 DOWNTO 0); ALIAS bit_de_acarreo: BIT IS registro_de_estado(0); ALIAS bit_z: BIT IS registro_de_estado(1);
50
Operadores predefinidos
Clase Lgicos Operadores Tipo de operando Tipo de resultado
BOOLEAN, BIT, STD_LOGIC BOOLEAN
Relacionales Aritmticos
=, /=, <, <=, >, >= +, -, *, /, **, MOD, REM, ABS &
cualquier tipo
INTEGER, REAL, INTEGER, REAL, Fsico, Fsico, STD_LOGIC_VECTOR STD_LOGIC_VECTOR ARRAY & ARRAY ARRAY & elemento ARRAY
Concatenacin
51
MOD y REM
Resto de la divisin:
MOD toma el signo del divisor REM toma el signo del dividendo 5 rem 3 = 2 5 mod 3 = 2 (5) rem 3 = 2 (5) mod 3 = 1 (5) rem (3) = 2 (5) mod (3) = 2 5 rem (3) = 2 5 mod (3) = 1
52
Los paquetes STD_LOGIC_UNSIGNED y STD_LOGIC_SIGNED definen las mismas operaciones de forma diferente, por lo que no se pueden aplicar los dos a la vez sobre una misma unidad de diseo
54
SIGNAL u1, u2: UNSIGNED(3 DOWNTO 0); SIGNAL s1, s2: SIGNED(3 DOWNTO 0); -- sin signo u1 >u2 UNSIGNED("1111") > UNSIGNED("0000") -- con signo s1 > s2 SIGNED("1111") > SIGNED("0000")
55
Funciones de conversin
Para la conversin entre tipos de datos existen algunas funciones predefinidas
CONV_INTEGER CONV_STD_LOGIC_VECTOR
56
Concatenacin y agregacin
La concatenacin permite concatenar vectores
SIGNAL s1, s2 : BIT_VECTOR ( 0 TO 3 ); SIGNAL x, z : BIT_VECTOR ( 0 TO 7 ); ... z <= s1 & s2; z <= x(0 TO 6) & '0';
La agregacin permite conjuntar elementos para crear datos de un tipo compuesto (ARRAY o RECORD)
s1 <= ( 0, 1, 0, 0 ); -- Equivalente a s1 <= 0100; s1 <= ( 2 => 1, OTHERS => 0); -- Equivalente a s1 <= 0010; s1 <= ( 0 to 2 => 1, 3 => s2(0) );
57
Atributos
Denotan valores, funciones, tipos o rangos asociados con varios elementos del lenguaje Pueden ser definidos por el usuario o predefinidos Atributos predefinidos
Atributos de arrays: permiten acceder al rango, longitud o extremos de un array Atributos de tipos: permiten acceder a elementos de un tipo Atributos de seales: permiten modelar propiedades de las seales
58
Atributos de arrays
SIGNAL d: STD_LOGIC_VECTOR(15 DOWNTO 0)
Descripcin
Ejemplo
Resultado 15 0 15 0 15 DOWNTO 0 0 TO 15 16
Lmite izquierdo dLEFT Lmite derecho Lmite superior Lmite inferior Rango Rango inverso Longitud dRIGHT dHIGH dLOW dRANGE dREVERSE_RANGE dLENGTH
59
Atributos de tipos
TYPE qit IS (0, 1, Z, X); SUBTYPE tit IS qit RANGE 0 TO Z;
Atributo BASE LEFT RIGHT HIGH LOW POS(v) VAL(p) SUCC(v) PRED(v) LEFTOF(v) RIGHTOF(v) Descripcin Base del tipo Lmite izquierdo (subtipo) Lmite derecho (subtipo) Lmite superior (subtipo) Lmite inferior (subtipo) Posicin de v (tipo base) Valor en la posicin p (t. base) Valor siguiente a v (tipo base) Valor anterior a v (tipo base) Valor a la izquierda de v (t. base) Valor a la derecha de v (t. base) Ejemplo titBASE titLEFT titRIGHT titHIGH titLOW titPOS(X) titVAL(3) titSUCC(Z) titPRED(1) titLEFTOF(1) titRIGHTOF(1) Resultado qit 0 Z Z 0 3 X X 0 0 Z
60
Atributos de seales
Atributo DELAYED(t) STABLE(t) EVENT LAST_EVENT LAST_VALUE QUIET(t) ACTIVE LAST_ACTIVE Tipo Seal Seal BOOLEAN Valor BOOLEAN Valor TIME Valor Seal BOOLEAN Valor BOOLEAN Valor TIME Descripcin Genera una seal exactamente igual, pero retrasada t Vale TRUE si la seal no ha cambiado de valor durante t Vale TRUE si la seal ha tenido un evento Tiempo transcurrido desde el ltimo evento de la seal El valor de la seal antes del ltimo evento Vale TRUE si la seal no ha recibido ninguna transaccin durante t Vale TRUE si la seal ha tenido una transaccin Tiempo transcurrido desde la ltimo transaccin en la seal Cambia de valor cada vez que la seal recibe una transaccin
61
Atributos de seales
62
Ejemplo
ATTRIBUTE tecnologia : STRING; ATTRIBUTE tecnologia OF circuito: ENTITY IS CMOS; ... ... circuitotecnologia ...
63
Enumerados:
Se sintetizan como un nmero en binario natural, asignando un cdigo binario a cada valor en orden de aparicin
64
Uso de atributos
Atributos de arrays: son tiles y sintetizables Atributos de tipos: pueden ser sintetizables, aunque no se suelen utilizar Atributos de seales: EVENT es el ms usado. Los dems no son sintetizables, salvo STABLE
65
Valores iniciales
Simulacin:
Para poder simular un diseo, todas las seales y variables deben de tener un valor inicial. El valor inicial se puede aadir en la declaracin del objeto Si no se especifica un valor inicial, el lenguaje asume un valor por defecto. En tipos enumerados es el primero por la izquierda
TYPE estado IS (S0, S1, S2, S3); SIGNAL s: estado := S3; SIGNAL s: estado; SIGNAL a: BIT; SIGNAL b: STD_LOGIC; -- Valor inicial: S3 -- Valor inicial: S0 -- Valor inicial: '0' -- Valor inicial: 'U'
66
Valores iniciales
Sntesis
Los sintetizadores no tienen en cuenta los valores iniciales La inicializacin debe de hacerse en el propio diseo (tal como ocurre en el hardware real)
SIGNAL b: STD_LOGIC; .... PROCESS (reset, ....) BEGIN IF reset = '1' THEN b <= '0'; ...
67