Documente Academic
Documente Profesional
Documente Cultură
Abril - 2017
Aspectos a revisar
1. Introducción al diseño con VHDL.
2. Unidades de diseño en VHDL.
3. Señales.
4. Especificación de la Interfaz.
5. Elementos de la Arquitectura.
6. Especificación del Comportamiento.
7. Múltiples procesos en una arquitectura.
8. Jerarquías de diseño en VHDL.
F. Santiago E. 2
I. Introducción al diseño con VHDL.
F. Santiago E. 3
Antes de VHDL
VHDL es un lenguaje para la descripción de Hardware. Surge como una
necesidad debido a que los métodos clásicos llegan a ser ineficientes en
diseños complejos.
F. Santiago E. 4
Antes de VHDL . . .
El uso de esquemáticos amplía la capacidad de los métodos basados en
ecuaciones, al aceptar bloques con funciones básicas (multiplexores,
sumadores, memorias, etc.), además de compuertas y flip-flops.
F. Santiago E. 5
Desventajas de los métodos tradicionales
F. Santiago E. 6
Lenguajes para la descripción de Hardware
Actualmente hay diferentes lenguajes HDL, los más populares son: CUPL,
VHDL, Verilog y ABEL.
F. Santiago E. 7
Descripción
Informal
Ecuaciones
ANTES DE VHDL
Booleanas
CON VHDL
Especificación en
VHDL
Esquemático
Sintésis del
Circuito
F. Santiago E. 8
Niveles de Descripción de Sistemas
ESTRUCTURA COMPORTAMIENTO
Sensores, elementos analógicos Especificación del rendimiento
o mecánicos SISTEMA
mProcesadores, memorias, CHIPS Algoritmos, micro-operaciones
dispositivos I/O Respuesta I/O
F. Santiago E. 9
¿ Qué es VHDL ?
Es un acrónimo: “V” se toma por Very High Speed Integrated Circuit ( Circuito
Integrado de muy alta velocidad), y HDL significa Lenguaje para la
Descripción de Hardware.
F. Santiago E. 10
II. Unidades de Diseño en VHDL
F. Santiago E. 11
Representaciones en VHDL
Cualquier sistema debe poder comunicarse con su ambiente....
INTERFAZ CUERPO
I/0 Sistema
F. Santiago E. 12
La Interfaz
Un sistema sin interfaz es INÚTIL.
INTERFAZ CUERPO
F. Santiago E. 13
El Cuerpo
La funcionalidad del sistema se completa con el procesamiento de los datos de
entrada, para la generación de resultados. Esta tarea se realiza en el cuerpo del
sistema.
F. Santiago E. 14
Paquetes
A algunos sistemas se les pueden incorporar nuevas características por medio
de elementos de soporte.
CUERPO
PAQUETE
INTERFAZ
F. Santiago E. 15
Unidad Principal de Diseño: La Entidad
El diseño de un sistema inicia con el análisis de la relación que éste tendrá con
su ambiente, es decir, inicia con la descripción de la Entidad.
En VHDL no es posible especificar un sistema si no se ha declarado su
Entidad.
Todo lo que se especifique en una entidad es visible para las Arquitecturas
asociadas con esa entidad.
El nombre del sistema corresponde con el nombre de la Entidad.
Disco_duro Cámara
F. Santiago E. 16
Contenido de la Entidad
La entidad puede contener dos elementos:
Ancho_Bus = 8
D0 D1 D2 D3 D4 D5 D6 D7 Parámetros
Fmax = 50 MHz
CLK
D : entrada ocho_bits
Q : salida ocho_bits Conexiones
Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7
CLK : entrada un_bit
F. Santiago E. 17
Parámetros y Conexiones
Los dos elementos de una interfaz (parámetros y conexiones) se declaran por
separado en cada entidad :
Entity Registro is
generic (
Ancho_Bus = 8
D0 D1 D2 D3 D4 D5 D6 D7 Fmax = 50 MHz
);
CLK port (
D : entrada ocho_bits
Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q : salida ocho_bits
CLK : entrada un_bit
);
End Entity Registro;
F. Santiago E. 18
Comprensión de la Interfaz
El Sistema A contiene 3 subsistemas: B, C y D. Y 8 líneas de conexión: TL1 a TL8:
A
TL1 TL7
B TL4
TL2
TL5 TL8
C TL6 D
TL3
F. Santiago E. 19
La arquitectura
El cuerpo de un sistema siempre está ligado a su interfaz, similarmente en
VHDL cada Arquitectura debe estar ligada con una Entidad.
Entity TVSet is
ENTIDAD
.....
.....
F. Santiago E. 20
Tipos de Arquitectura
Cada sistema puede describirse en términos de su funcionalidad
(comportamiento) o estructura (construcción), y en cada caso se requiere
diferente información.
F. Santiago E. 21
Descripción Funcional
Entity TVSet is
Debe especificar lo que el port (
sistema va a hacer como una ON : entrada un_bit
VOL_UP, VOL_DOWN : entrada un_bit
respuesta a los diferentes CHAN_UP, CHAN_DOWN : entrada un_bit
eventos que vayan ocurriendo. ....
)
End Entity TVSet;
En general, es una descripción
de la generación de las salidas, Architecture TV2000 of TVSet is
....
como una respuesta a los if ON then enciende al sistema
cambios en las entradas. if not - ON then apaga al sistema
....
if VOL_UP then volumen = volumen + 1
Es una descripción algorítmica. if VOL_DOWN then volumen = volumen - 1
....
if CHAN_UP then canal = canal + 1
if CHAN_DOWN then canal = canal -1 1
....
End architecture TV2000;
F. Santiago E. 22
Descripción Estructural
U1 U2 U4
U3 U5
No especifica la funcionalidad
del sistema, en lugar de ello
especifica los componentes Entity TVSet is
que lo integran y la forma en port (
....
que se deben conectar para )
alcanzar los resultados End Entity TVSet;
F. Santiago E. 23
Comparación de los tipos de Arquitectura
F. Santiago E. 24
Una Entidad: ¿Cuántas Arquitecturas?
Dado que diferentes tipos de arquitecturas pueden realizar la misma función, la
interfaz de un sistema (una entidad) puede especificarse para diversas
arquitecturas.
Entity Sixtium is
.....
End Entity Sixtium;
F. Santiago E. 25
El Concepto de “Paquete”
Los Paquetes incorporan conceptos (tipos de datos, operaciones, etc. ) que no son
estándares.
Se declaran por adelantado, antes de la Entidad, para ello se incluyen las clausulas:
Library y Use.
F. Santiago E. 26
Paquetes Predefinidos :
Los tres paquetes más populares definidos por la IEEE son :
STANDARD : Contiene todas las declaraciones y definiciones básicas del lenguaje y está incluido en
todas las especificaciones de VHDL por default.
TEXTIO: Contiene las declaraciones de operaciones básicas de texto. Para usarlo, antes de la entidad
debe declararse:
library std;
use std.TextIO.all;
library IEEE;
use IEEE.std_logic_1164.all;
Nota: Aparte de los paquetes estándares, cada desarrollador de Software incluye sus propios paquetes.
F. Santiago E. 27
Resumen . . . .
-- Las tres unidades de Diseño en VHDL :
-- Paquetes
-- Entidad
Entity SomeSyst is -- La interfaz: Incluye parámetros
. . . . -- genéricos y puertos
End Entity SomeSyst;
-- Arquitectura
Architecture FirstArch of SomeSyst is -- El cuerpo del sistema:
. . . . -- Puede ser descrito de manera
-- Estructural o Funcional
. . . .
Logarithm -- Concepto no estándar en Uso
. . . .
End Architecture FirstArch;
F. Santiago E. 28
III. Señales.
F. Santiago E. 29
Introducción a las Señales . . .
Un fenómeno importante en el mundo es el proceso de comunicación, el cual
involucra transmitir información de un remitente a un destinatario.
F. Santiago E. 30
Introducción a las Señales . . .
Las señales se pueden clasificar entre aquellas que llevan información
dentro de un dispositivo y aquellas que comunican dispositivos (clasificación
básica en VHDL).
Sin embargo, en VHDL estas leyes son ignoradas porque las herramientas
de síntesis automáticamente realizarán el trazado físico del circuito.
F. Santiago E. 31
Alambres y Buses
Alambre : Señal de una sóla línea que
a b c d e f g h i j puede tener un valor binario en un
tiempo dado. VHDL adopta el nombre
de “bit” para estas señales.
x y IntBus
Data Bus o Vector: Señal de múltiples
líneas, transmite información como una
combinación de valores binarios. Su
ExtBus
Z nombre en VHDL es “bit_vector”.
Result
En los buses es importante definir el rango y cual será el bit más significativo
(MSB). El MSB siempre se indica primero:
F. Santiago E. 32
Señales Externas vs. Internas
a b c d e f g h i j
F. Santiago E. 33
Señales Externas
Las señales externas se declaran en los puertos de la entidad, la declaración debe
incluir su nombre, tipo y modo. El modo se refiere a la dirección del flujo de datos y
puede ser: entrada (in), salida (out) y bidireccional (inout).
R Port (
z 0-7 Z : in bit;
Q : out bit_vector( 4 downto 0 );
x y R : inout bit_vector( 0 to 7 )
Q );
4-0
End Entity Sistema_Ejemplo;
F. Santiago E. 34
Señales Internas
Sistema_Ejemplo
Architecture Unica of Sistema_Ejemplo is
R
Signal x, y: bit;
z 0-7
x y . . . . .
Q
4-0 End Architecture;
F. Santiago E. 35
Visibilidad de una Señal
Que tan visible es una señal, depende del lugar en donde se declaró:
• Una señal declarada en un paquete es visible en todas las unidades de diseño que
usan este paquete.
Package MyPack is
signal A
. . . .
• Una señal declarada como un puerto de una entidad es visible en todas las
arquitecturas asignadas a esa entidad.
Entity En1 is
port ( B _ _ _ _ )
. . . .
• Una señal declarada en la parte declarativa de una arquitectura es visible solo
dentro de esa arquitectura.
Architecture Arch1 of En1 is
signal C
. . . .
•Una señal declarada en un bloque localizado dentro de una arquitectura es visible
sólo dentro de ese bloque.
Nota: En todos los casos se cumplen con jerarquías, si algo se declara en un nivel jerárquico, será visible
en todas las construcciones de menor nivel jerárquico.
F. Santiago E. 36
IV. Elementos de la Interfaz
F. Santiago E. 37
Nombre y comentarios
El nombre de la Entidad es un identificador, y como tal tiene las siguientes reglas:
F. Santiago E. 38
Cláusula END
Entity Example is
Es el último elemento de una Entidad, opcionalmente generic ( . . . );
es seguido de la palabra reservada Entity y/o el port ( . . . );
nombre de la entidad. end entity Example;
Puertos
Los puertos son definidos en VHDL como: “Canales para comunicación dinámica
entre un bloque (una entidad) y su ambiente”. La declaración de un puerto contiene
los siguientes elementos:
1. Nombre del puerto seguido de dos puntos
2. El modo del puerto
3. El tipo del puerto
4. El valor inicial precedido por := (opcional, válido para simulación)
5. Un comentario que describa al puerto (opcional)
Los puertos se declaran en una lista entre paréntesis, separados por ; y precedidos por la
palabra reservada port.
F. Santiago E. 39
Ejemplo: Una ALU de 4 bits
In1 In2 OpSel
Entity ALU is
Port (
In1 : in bit_vector (3 downto 0); -- Primer Operando
In2 : in bit_vector (3 downto 0); -- Segundo Operando
OpSel : in bit_vector (0 to 2); -- Selector de Operación
Cin : in bit; -- Acarreo de entrada
Result : out bit_vector (3 downto 0); -- Resultado
Cout : out bit; -- Acarreo de salida
Equal : out bit; -- Bandera de igual
Zero : out bit -- Bandera de cero
);
F. Santiago E. 40
Parámetros Genéricos
Los parámetros genéricos son definidos en VHDL como: “Canales de información
estática para ser comunicada a un bloque desde su mismo ambiente, en otras
palabras, son valores constantes para diferentes parámetros”.
Ejemplos de Uso:
F. Santiago E. 41
Parámetros Genéricos
3.- Para definir intervalos de tiempos
....
generic ( Delay : Time := 5 s );
....
y <= x after Delay;
....
F. Santiago E. 42
V. Elementos de VHDL
F. Santiago E. 43
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 Arreglo
o Hexadecimales
de direcciones
de
Decodificador
bits
1k x 8
Los tipos bit y
bit_vector no se
Control ajustan, el tipo
Tiempo de aplicable es Time
Acceso (que es un tipo físico)
10 nS
F. Santiago E. 44
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‟, „}‟
F. Santiago E. 45
Entero :
Declarado como:
type INTEGER is range –2147483648 to 2147483647;
Descripción:
Un entero requiere de 32 bits, sin embargo, la mayoría de aplicaciones utilizan
enteros con rangos menores. Con la siguiente declaración:
subtype ENTERO_CORTO is integer range 0 to 7;
Se declara un subtipo de entero que ocupa sólo 3 bits, luego pueden declararse
señales o variables:
signal A: ENTERO_CORTO;
variable X: ENTERO_CORTO;
Si solo se va a usar una señal, la definición e instanciación pueden hacerse en una
solo expresión, por ejemplo:
signal ENT_CORTO2: INTEGER range 0 to 31;
Ejemplos: 12, 0, 2147483646, -100, 16
F. Santiago E. 46
Real :
Declarado como:
type REAL is range 1.0 E`-308 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.
Ejemplos: 0.0, 1.000001, -1.0 e5
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‟
F. Santiago E. 47
Enumeraciones: Tipos definidos por el usuario.
Están disponibles para que el diseñador pueda contar con información personalizada,
para un mayor entendimiento.
Una aplicación clásica de los Tipos Definidos por el Usuario se presenta en una
Máquina de Estados Finitos (FSM), para representar un diseño secuencial, a cada
estado se le asigna un nombre.
IDLE
EXECUTE FETCH
Durante la síntesis, los estados se codifican con bits que serán manejados con flip-
flops.
F. Santiago E. 48
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.
F. Santiago E. 49
Tipos Complejos
Arreglos:
Son tipos complejos con una estructura regular que contiene elementos del mismo tipo. El
número de elementos está especificado en el rango del arreglo.
El rango puede ser ilimitado: range < > (aunque no es lo más conveniente).
Hay dos arreglos pre-definidos en VHDL :
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.
F. Santiago E. 50
Arreglos . . .
Ejemplo: Signal DataBus : bit_vector ( 7 downto 0 );
7 6 5 4 3 2 1 0
0 1 0 0 1 1 0 1
MSB LSB
“01111” binario
O “17” octal
X “F” hexadecimal
F. Santiago E. 51
Arreglos . . .
Puesto que los arreglos sólo tienen una dimensión, también son conocidos como
vectores. El usuario puede declarar arreglos con dimensiones mayores, aunque tres o
mas son poco tratables.
Memoria de 1 K x 4
Un ejemplo típico es una memoria:
0
1
Type memory1k4 is Array ( 0 to 1023 ) of
2
Bit_Vector ( 3 downto 0 );
3
F. Santiago E. 52
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 :
F. Santiago E. 53
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.
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).
F. Santiago E. 54
Operadores Numéricos:
OPERADOR SIMBOLO EJEMPLOS DE USO
Resta - BusWidth – 1
F. Santiago E. 55
Operadores Relacionales : Operadores de Desplazamientos :
( Aplicables a Bit_Vector o Arreglos Booleanos )
OPERADOR SIMBOLO
SLL – Desplazamiento lógico a la Izquierda.
Igual a =
7 6 5 4 3 2 1 0
No igual a /=
SLL ( 0 1 0 0 1 1 0 1 )
Menor que <
0
Menor o igual que <=
7 6 5 4 3 2 1 0
Mayor que > 1 0 0 1 1 0 1 0
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: 0 0 1 0 0 1 1 0
True o False
A <= B SLL 1;
F. Santiago E. 56
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
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
F. Santiago E. 57
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 );
F. Santiago E. 58
Asignación de Expresiones a Señales
El operador de asignación es : <= RETRASO INERCIAL
Señal_Destino <= Expresión
Ejemplos: La cláusula “after” impone un retraso inercial, es
decir, dos cambios subsecuentes de una entrada
k <= „1‟;
son ignorados si el tiempo entre ellos es más corto
m <= “0101”; que el retraso especificado.
n <= m & k;
a <= b or c;
x <= y <= z;
SWITCH
Una asignación puede ser retrasada, la 0 6 10
cláusula “after” permite definir esos retrasos
LAMP
0 4 10 12
Retrazo
4 seg
SWITCH
0 2 10
F. Santiago E. 59
RETRASO DE TRANSPORTE
Este tipo de retrasos se les conoce como retrasos de transporte y en VHDL se modelan
con la palabra reservada “transport”.
Retrazo
4 seg
SWITCH
0 2 10
LAMP
0 4 6 10
F. Santiago E. 60
Comparación de Retrasos
Out1 <= Input after 3s; -- Retraso inercial (default)
Out2 <= transport Input after 3s; -- Retraso de transporte
INPUT
0 4 10 12
OUT1
0 3 7 10
OUT2
0 3 7 10 13 15
Nota: Los retrasos son útiles para modelado y simulación, pero no se pueden sintetizar.
F. Santiago E. 61
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:
F. Santiago E. 62
Las constantes pueden utilizarse para :
• Especificar el tamaño de Objetos complejos (arreglos o buses)
• Controlar ciclos repetitivos
• Definir parámetros de tiempo como : retrasos, tiempos de conmutación, etc.
Nota: No pueden usarse para definir los tamaños de vectores en los puertos , por que los puertos son
declarados en las entidades y las constantes se definen en las arquitecturas (solo se puede hacer si la
constante está en un paquete usado por la entidad).
F. Santiago E. 63
VI. Especificación del Comportamiento
F. Santiago E. 64
Introducción
El objetivo de un sistema electrónico es transformar datos de entradas en resultados
como salidas, esta clase de actividad es conocida como Comportamiento o
Funcionalidad del sistema.
F. Santiago E. 65
Procesos
Un proceso es una manera formal de hacer una lista de operaciones secuenciales.
Tiene un formato muy estructurado y representa el comportamiento de una sección de
un diseño.
Reglas para escribir un proceso:
Un proceso se especifica con la palabra reservada Process. Opcionalmente se le
puede asignar un nombre, éste debe ir antes de process seguido de dos puntos.
El fin del proceso se indica con end process y luego puede repetirse el nombre del
proceso.
El cuerpo del proceso está formado por una lista de proposiciones que debe iniciar con
la palabra reservada begin, la lista termina con el fin del proceso.
La declaración de variables o constantes se debe hacer antes de la palabra begin.
Plantilla : nom_op : process
declaración de variables o constantes
begin
proposiciones secuenciales
end process nom_op;
F. Santiago E. 66
Procesos . . .
EJEMPLO :
Puesto que VHDL es para representar sistemas, la
terminación de un proceso se debe analizar a
SEL
detalle. Un sistema no realiza sus funciones sólo
una vez y termina; más bien, debe repetir sus
A
Y actividades en un ciclo infinito.
B
Por eso, un proceso asegura que terminada la
ejecución de la última proposición,
inmediatamente iniciará nuevamente con la
MUX2_TO1 : process primera.
Constant High : Bit := „1‟;
Como resultado Un proceso Nunca Termina.
begin
Y <= A; SomeProcess : Process
if SEL = High then Begin
Y <= B; Some Statement1;
Some Statement2;
end if;
Some Statement3;
End process MUX2TO1; Some Statement4;
End process SomeProcess
F. Santiago E. 67
Necesidad de Suspender y Reanudar un Proceso
Los dispositivos electrónicos operan en un ciclo infinito; después de su activación
ejecutan una lista de tareas para después regresar a esperar una condición de
repetición.
En otras palabras, los dispositivos suspenden su operación cuando completan sus
tareas y las reanudan cuando se dan nuevamente las condiciones.
La sentencia wait sirve para suspender un proceso una vez que ha completado su
tarea y reanudarlo cuando se da la condición que finaliza la espera.
F. Santiago E. 68
Sentencia Wait
Si un proceso contiene una sentencia Wait, ejecutará todas sus proposiciones hasta que
el wait sea encontrado, ahí esperará hasta que se cumplan las condiciones establecidas
en el wait.
Tipos de Wait :
1.- Wait for cierto_tiempo : Suspende el proceso por una cantidad específica de tiempo,
el tiempo se puede expresar explícitamente:
Wait for 10 ns;
O bien como una expresión:
Wait for CLK_Periodo / 2;
F. Santiago E. 69
Sentencia Wait
2.- Wait until condición : El proceso se suspende hasta que una condición llega a ser
verdadera, debido a algún cambio en las señales involucradas.
3.- Wait on lista de sensibilidad : El proceso se suspende hasta que ocurre un evento en
cualquiera de las señales que integran la lista de sensibilidad
4.- Wait complejo : Contiene una combinación de más de uno de los 3 tipos mencionados
anteriormente.
F. Santiago E. 70
La sentencia wait puede ubicarse en cualquier parte del proceso, en realidad depende del
comportamiento deseado.
Process Process
Begin Begin
wait on sigA; proposiciones 1;
proposiciones 1; proposiciones 2;
proposiciones 2; proposiciones 3;
proposiciones 3; wait on sigB;
End process; End process;
El wait sobre la lista de sensibilidad es probablemente la forma más frecuente de reanudar
procesos en VHDL, es por eso que el lenguaje permite colocar la lista de sensibilidad entre
paréntesis, justo después de la palabra process. Su funcionamiento es similar a un wait on
lista al final del proceso.
Process
Begin Process ( señales )
proposiciones 1; Begin
proposiciones 2; proposiciones 1;
proposiciones 3; proposiciones 2;
wait on señales; proposiciones 3;
End process; End process;
F. Santiago E. 71
Un proceso puede tener múltiples wait‟s, pero si tiene una lista de sensibilidad, no es
necesario que tenga un wait explícito para suspender su ejecución.
Cuando la ejecución de un proceso inicia, ésta se realiza una vez, posteriormente el proceso
es suspendido hasta que alguna señal en su lista de sensibilidad cambia de valor.
Aunque sólo una de las señales de la lista cambie, con ello todas las proposiciones del
proceso se ejecutan en forma secuencial, no solo aquellas que involucran a la señal que
cambió.
F. Santiago E. 72
Señales en Procesos
El propósito de una implementación en VHDL es describir la reacción de las salidas ante las
entradas. Tanto entradas como salidas son señales, de modo que tal reacción básicamente
esta dada por asignaciones de señales.
Las señales y sus asignaciones se manejan en procesos, sin embargo, su uso está
gobernado por 3 restricciones:
F. Santiago E. 73
Las restricciones en el uso de señales impactan en sus aplicaciones prácticas. Dado que
sólo pueden almacenar el valor de su última asignación, no pueden usarse para
almacenamientos intermedios o de datos temporales (dentro de un proceso).
Otro inconveniente es el siguiente, como los nuevos valores se asignan sólo al suspender el
proceso, el análisis llega a ser complicado.
Es necesario contar con otro tipo de objetos que permitan almacenar datos temporales.
Estos objetos son las variables, cuya única diferencia con las señales es que se pueden
utilizar donde una señal no es aplicable.
F. Santiago E. 74
Ejemplo: Process ( C, D ) A=1
variable Av, Bv, Ev : integer := 0; B=1
C=1
Begin
D=1
Av := 2; E=1
BV := Av + C; Av = 0
Av := D + 1; Bv = 0
Ev := Av*2; Ev = 0
A <= Av;
B <= Bv;
Si D cambia a 2 ¿Qué pasa?
E <= Ev;
End process;
Una señal tiene 3 propiedades asociadas: Tipo, valor y tiempo. Con una relación cerrada
entre valor y tiempo, ya que cada señal tiene una trayectoria de valores a través del tiempo.
Una variable sólo tiene 2 propiedades: tipo y valor, por lo que solo se puede conocer su
valor actual.
Si las señales y variables son del mismo tipo, indistintamente puede haber asignaciones
ente ellas.
F. Santiago E. 75
SEÑALES VARIABLES
Se declaran como puertos en las entidades o en Como tienen carácter local, solo pueden
las partes declarativas de las arquitecturas, pero declararse en procesos o subprogramas. No
no en los procesos. fuera de ellos.
F. Santiago E. 76
Control de Flujo
Para el control de flujo VHDL tiene las siguientes proposiciones :
- Condicionales : If . . . . Then . . . . .
F. Santiago E. 77
ExProc : Process ( Lista_de_sensibilidad ) if Cond1
Begin then else
if Cond1 then
. . . . . . . while Cond3 loop . . .
case Cond2 is
when val1 => . . . . case Cond2 is
when val2 => . . . .
when others => val1 val2 others
for l in 1 to 4 loop . . . . . . . . for l in 1 to 4 loop . . . .
. . . .
end loop;
end case; . . . .
else
while Cond3 loop end case;
. . . .
end loop;
. . . .
end if; end if;
. . . .
. . . .
End process End process
F. Santiago E. 78
Ejemplo: Estructura if - then
-- Descripción de la Entidad
Entity Flip_flop_D is
port (
FLIP FLOP TIPO D D : in Bit;
CLK : in Bit;
Q : out Bit
D Q );
End Flip_flop_D;
-- Descripción de la Arquitectura
Architecture unica of Flip_flop_D is
CLK Begin
process ( CLK )
begin
if CLK = „1‟ then
Q <= D;
end if;
end process;
End unica;
F. Santiago E. 79
-- Descripción de la Entidad
Entity FFD_SR is
if – then port (
(anidados) D , CLK, RST : in Bit;
Q : out Bit
FLIP FLOP TIPO D );
CON RESET SÍNCRONO End FFD_SR;
-- Descripción de la Arquitectura
D Q Architecture unica of FFD_SR is
Begin
process ( CLK )
begin
if CLK = „1‟ then
CLK if RST = „1‟ then
Q <= „0‟;
RST else
Q <= D;
end if;
end if;
end process;
End unica;
F. Santiago E. 80
if – then – elsif
-- Descripción de la Entidad
Entity FFD_AR is
FLIP FLOP TIPO D port (
CON RESET ASÍNCRONO D, RST, CLK : in Bit;
Q : out Bit
);
D Q End FFD_AR;
-- Descripción de la Arquitectura
Architecture unica of FFD_AR is
Begin
CLK process ( RST, CLK )
begin
RST if RST = „1‟ then
Q <= „0‟;
elsif CLK = „1‟ and CLK‟event then
Q <= D;
end if;
end process;
End unica;
F. Santiago E. 81
Ejemplo: Estructura de múltiples decisiones
-- Descripción de la Entidad
Entity Gate_Prog is
port (
COMPUERTA PROGRAMABLE
Dato1, Dato2 : in Bit;
Modo : in Bit_Vector ( 2 downto 0 );
Dato1 Salida : out Bit
Salida );
End Gate_Prog;
Dato2
Modo -- Descripción de la Arquitectura
Architecture Gate_Prog of Gate_Prog is
Begin
process ( Modo, Dato1, Dato2 )
Modo Salida begin
000 Dato1 AND Dato2 case Modo is
when “000” => Salida <= Dato1 and Dato2;
001 Dato1 OR Dato2 when “001” => Salida <= Dato1 or Dato2;
010 Not ( Dato1 AND Dato2) when “010” => Salida <= Dato1 nand Dato2;
when “011” => Salida <= Dato1 nor Dato2;
011 Not ( Dato1 OR Dato2) when “100” => Salida <= not Dato1;
100 Not ( Dato1 ) when “101” => Salida <= not Dato2;
when others => Salida <= „0‟;
101 Not ( Dato 2 )
end case;
110 o 111 0 end process;
End Gate_Prog;
F. Santiago E. 82
Ejemplo: Ciclo repetitivo por Condición
-- Descripción de la Entidad
Entity Conta_Pulsos is
port (
CLK : in STD_LOGIC;
Level : in STD_LOGIC;
Q : out STD_LOGIC_VECTOR ( 3 downto 0 )
);
Un contador de Pulsos cuya salida (en End Conta_Pulsos;
binario) indique cuantos pulsos ocurrieron
mientras una señal (Level) estuvo en alto. -- Descripción de la Arquitectura
Architecture Conta_Pulsos of Conta_Pulsos is
Begin
process
Contador de Pulsos Variable cuenta : STD_LOGIC_VECTOR (3 downto 0) := “0000”;
begin
Q <= cuenta;
CLK Q(0) 0 wait until level = „1‟;
Q(1) 1 cuenta := “0000”;
Q(2) 0 while level = „1‟ loop
Level
Q(3) 0 wait until clk = „1‟;
if level = „1‟ then cuenta := cuenta + 1; end if;
wait until clk = „0‟;
end loop;
end process;
End Conta_Pulsos;
F. Santiago E. 83
Ejemplo: Ciclo repetitivo por Contador
-- Descripción de la Entidad
library IEEE;
use IEEE.std_logic_1164.all;
Circuito que invierte un vector (Bit por Bit)
entity inv_vec is
generic ( ancho_bus : integer := 8 );
port (
Ent Sal ent: in STD_LOGIC_VECTOR (ancho_bus - 1 downto 0);
7-0 7-0 sal: out STD_LOGIC_VECTOR (ancho_bus - 1 downto 0)
);
end inv_vec;
-- Descripción de la Arquitectura
Architecture inv_vec of inv_vec is
7 6 5 4 3 2 1 0 begin
Ent : 0 1 0 0 1 1 0 1 process ( ent )
variable cont : integer;
begin
for cont in 0 to ancho_bus - 1 loop
7 6 5 4 3 2 1 0 sal( cont ) <= ent (ancho_bus - cont - 1);
end loop;
Sal : 0 1 0 0 1 1 0 1 end process;
end inv_vec;
F. Santiago E. 84
Ruptura de ciclos
Los ciclos while y for ejecutarán sus proposiciones siempre que sus condiciones de
evaluación sean verdaderas. Sin embargo, en ocasiones es deseable una salida obligada
del ciclo o bien saltarse una iteración e ir a la siguiente.
Por ejemplo, en un contador de bits con valor „1‟ en un vector, si el bit a evaluar contiene
cero, inmediatamente se puede pasar a la iteración siguiente, esto se hace con la cláusula
next :
process ( DataBus )
variable NumOfOnes : integer := 0;
begin
for Cont in 0 to 7 loop
next when DataBus( Cont ) = „0‟;
NumOfOnes := NumOfOnes + 1;
end loop;
Ones <= NumOfOnes;
end process;
F. Santiago E. 85
Cuando se quiere terminar con el ciclo, la cláusula a usar es exit.
process ( DataBus )
variable NumOfOnes : integer := 0;
begin
for Cont in 0 to 7 loop
exit when DataBus( Cont ) = „0‟;
NumOfOnes := NumOfOnes + 1;
end loop;
Ones <= NumOfOnes;
end process;
F. Santiago E. 86
Ejercicios
Multiplexor de 1 bit, de 4 canales a 1
Comparador de 4 bits
Registro de 8 bits con carga paralela, con habilitación
externa y reset asíncrono.
Sumador completo de 4 bits
Decodificador de binario a 7 segmentos.
F. Santiago E. 87