Sunteți pe pagina 1din 87

VHDL

M. C. Felipe Santiago Espinosa

Instituto de Electrónica y Mecatrónica

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.

 Antes de VHDL, los métodos de diseño se basaban en ecuaciones


booleanas y esquemáticos.

 Con ecuaciones Booleanas requiere de la escritura de una ecuación por


cada flip-flop.

 Es impráctico para circuitos con cientos de flip-flops.

 Teóricamente cualquier sistema puede representarse con ecuaciones


booleanas, pero tratar con miles de ellas no es factible.

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.

 Con la posibilidad de agregar nuevos módulos, se pueden manejar diseños


jerárquicos acomodando más componentes con menos esfuerzo.

 Es preferida por muchos diseñadores porque las representaciones gráficas


muestran las relaciones entre diferentes bloques del diseño.

 Fue considerado como un método óptimo para el diseño de sistemas


digitales.

F. Santiago E. 5
Desventajas de los métodos tradicionales

 El diseño de un sistema comienza con una descripción del comportamiento


esperado. Con los métodos tradicionales, el resultado final no muestra los
fundamentos sobre los cuales fue creado.

 La verificación y modificaciones futuras llegan ser muy complicadas cuando


un diseño sólo contiene información de sus interconexiones o se basa en un
número grande de ecuaciones.

 Tratar con cientos de ecuaciones es difícil, pero factible; sin embargo, si se


trata de miles de ecuaciones llega a ser imposible.

 Los sistemas actualmente contienen millones de compuertas (y sus


densidades continúan creciendo), por lo que los métodos tradicionales ya no
son suficientes.

F. Santiago E. 6
Lenguajes para la descripción de Hardware

 Los lenguajes para la descripción de Hardware eliminan la mayoría de las


desventajas.

 Su aplicación es directa en diferentes dispositivos programables:


 PLD‟s de diferentes complejidades, desde los simples PALs hasta los complejos
CPLD‟s.
 FPGA‟s : Arreglos de Compuertas Programables en Campo.

 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

Registros, multiplexores, ALU’s REGISTROS Tablas de transición de estados,


Tablas de verdad

Compuertas, Flip-Flops COMPUERTAS Ecuaciones booleanas

Transistores, R, L, C CIRCUITOS Ecuaciones diferenciales

Objetos Geométricos SILICIO Leyes de la física

Se han sombreado los niveles que pueden ser descritos en VHDL.

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.

 VHDL es un lenguaje estandarizado (IEEE 1076-1993) utilizado para el diseño


de sistemas digitales.

 El lenguaje VHDL fue desarrollado por el DoD de USA, con el propósito de


contar con un estándar para documentación, modelado y simulación de
dispositivos electrónicos.

 Los simuladores de VHDL surgen en los 90‟s.

 VHDL no fue creado para síntesis, esta propiedad se le agregó al buscar


formas que ayuden a automatizar los procesos de diseño.

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

 La interfaz de un sistema en VHDL es descrita por su Entidad (Entity).

 Así como no es posible tener un sistema sin Interfaz; en VHDL tampoco es


posible tener un sistema sin una Entidad.

 La Entidad de un sistema es Primordial para VHDL.

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.

 El cuerpo de un sistema es conocido en VHDL como su Arquitectura


(Architecture).

 La funcionalidad puede ser muy simple, como el encendido/apagado de un


interruptor, o muy complicada, como el piloto automático de un avión.

 Sin embargo, sin importar la sofisticación de un sistema, éste puede ser


considerado como una composición de Interfaz y Cuerpo (Entidad y
Arquitectura, en VHDL).

F. Santiago E. 14
Paquetes
 A algunos sistemas se les pueden incorporar nuevas características por medio
de elementos de soporte.

CUERPO
PAQUETE
INTERFAZ

 Un paquete ( Package ) incorpora nuevas definiciones o características a varios


sistemas. Pueden re-utilizarse, por ello no se consideran como parte del cuerpo
del sistema.

 En conclusión, se tienen 3 unidades independientes de diseño: La interfaz, el


cuerpo y los paquetes.

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.

Entity Disco_duro is Entity Camara is


.... ....
End Entity Disco_duro; End Entity Camara;

Disco_duro Cámara

F. Santiago E. 16
Contenido de la Entidad
 La entidad puede contener dos elementos:

 Parámetros que serán conocidos por todo el sistema, por ejemplo: El


ancho de un bus, la frecuencia máxima de operación, etc.

 Conexiones a través de las cuales se transferirá la información hacia el


exterior o interior del sistema.
Entity Registro is

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

End Entity Registro;

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 :

 Los Parámetros son datos “genéricos” y son conocidos automáticamente


por el cuerpo del sistema.
 Las Conexiones forman los “puertos” de entrada/salida.

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

1. ¿ Cuáles líneas son parte de la Interfaz de A ?


2. ¿ Qué líneas están en la interfaz de C y no están en la de A ?
3. ¿ Cómo sería la entidad de D ? (notar que no hay parámetros)

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.

 VHDL le da mayor importancia a la Entidad, de modo que las Arquitecturas se


asocian con una Entidad y no viceversa.

Entity TVSet is
ENTIDAD
.....

End Entity TVSet;

Architecture TV2000 of TVSet is

.....

End architecture TV2000;


ARQUITECTURA

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.

¿QUÉ HACE? ¿CÓMO ESTÁ COMPUESTA?


Funcionalidad Estructura

 Muchas herramientas de Síntesis trabajan con ambas descripciones.

 La descripción estructural es más adecuada para síntesis.

 En sistemas jerárquicos, de acuerdo con el nivel de cada módulo, se emplea


una u otra descripción (Metodología TOP-DOWN).

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;

esperados. Architecture TV2000 of TVSet is


....
U1, U5 -> U2
En otras palabras, describe la U2 -> U4
estructura interna del sistema. U1 -> U3
U3 -> U5
....
Es para módulos con mayor End architecture TV2000;
jerarquía.

F. Santiago E. 23
Comparación de los tipos de Arquitectura

¿QUÉ HACE? ¿CÓMO ESTÁ COMPUESTA?


Decripción Funcional Descripción Estructural

La descripción estructural es mucho más fácil de sintetizar que la descripción


funcional por que se refiere a componentes físicos concretos.

Sin embargo es más difícil de desarrollar porque requiere de mayor


experiencia del diseñador, para hacer diseños más eficientes.

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.

Ejemplo: Si se requiere de un procesador SIXTIUM, éste puede ser de diferentes fabricantes.

Entity Sixtium is
.....
End Entity Sixtium;

Architecture IMTEL of Sixtium is


.....
End IMTEL;

Architecture LYRIX of Sixtium is


.....
End LYRIX;

Architecture AMC of Sixtium is


.....
End AMC;

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.

Con library se indica la biblioteca que será empleada.

Con use se especifica que paquete o unidad de la biblioteca se requiere.

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;

STD_LOGIC_1164: Contiene extensiones al estandar de VHDL, definidas en el Estandar 1164 de la


IEEE, algunas declaraciones importantes son: Variables y vectores lógicos, extensión de operadores y
algunas funciones. Para usarlo, las declaraciones son:

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

Library New ConceptLib; -- Biblioteca a Usar


Use NewConceptLib.Arithm.Logarithm; -- Paquete a Usar

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

 Aunque hay muchas formas de establecer la comunicación, siempre tienen


algo en común: Las señales.

 Las máquinas también se comunican, por ejemplo, un sensor de


temperatura puede informar a un circuito que este parámetro alcanzó cierto
nivel, para que el circuito encienda el aire acondicionado.

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

 Físicamente, una señal eléctrica es un flujo de electrones que está sujeto a


complicadas leyes físicas, que determinan el tiempo de respuesta de un
sistema.

 Sin embargo, en VHDL estas leyes son ignoradas porque las herramientas
de síntesis automáticamente realizarán el trazado físico del circuito.

 El diseñador sólo se ocupa de la funcionalidad y el rendimiento del circuito.

 Los diseños electrónicos se basan en componentes y líneas de señales que


comunican estos componentes. Las líneas de señales pueden ser
conexiones de un solo alambre o múltiples alambres (bus o vector).

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:

X bit_vector( 0 to 7) X bit_vector( 7 downto 0)


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

MSB LSB MSB LSB

F. Santiago E. 32
Señales Externas vs. Internas
a b c d e f g h i j

Externas: Son Señales que conectan


al sistema con el exterior. En otras
palabras, forman la interfaz (entidad)
x y IntBus del sistema.
D
A
T Internas: Son Señal que no están
A visibles desde el exterior, están
completamente empotradas en el
sistema y son parte de su arquitectura
interna.
Result Z ExtBus

Externas: Data, a, b, c, d , e, f, g, h, i, j, Result, Z y ExtBus (Entidad)


Internas: IntBus, X e Y (Arquitectura)

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

La sintaxis para la declaración de un puerto es: nombre : modo tipo;

Sistema_Ejemplo Entity Sistema_Ejemplo is

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;

Z : Puede ser leído en una arquitectura, pero no escrito.


Q : Puede ser generado (o escrito), pero no leído.
R : Puede ser leído o escrito.

F. Santiago E. 34
Señales Internas

Las señales internas se manejan dentro de la arquitectura, para distinguirlas de otros


objetos de VHDL se utiliza la palabra reservada signal.

Sistema_Ejemplo
Architecture Unica of Sistema_Ejemplo is
R
Signal x, y: bit;
z 0-7

x y . . . . .
Q
4-0 End Architecture;

La palabra reservada signal no es necesaria en la entidad dentro de la clausula


port, ya que por definición un puerto es una señal.

Las señales internas no requieren modo.

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:

1. No puede ocupar más una línea.


2. Debe iniciar con una letra. Ejemplos:
3. Solo puede incluir letras, números y guiones bajos. Couter_4Bits,
Mux_4_to_1,
4. Los guiones bajos solo pueden ser intermedios.
etc.
5. No se permiten espacios.
6. No se distingue entre mayúsculas y minúsculas.
7. No se pueden usar palabras reservadas.

-- Unidad Diseñada : 8086 (Entidad y Arquitectura)


Los comentarios en VHDL inician con -- Nombre del archivo : P8086.vhd
dos guiones y terminan al final de la -- Propósito
--
: Modelo de un microprocesador 8086
para un módulo empotrado de un
línea, ayudan a una adecuada -- “sistema en un chip”
documentación. -- Limitaciones
-- Errores
: Se supone una frec. de 33 MHz
: Ninguno conocido
-- Biblitecas : Numeric_STD, ALDEC.
-- Autor :- - - - - -
-- Simulador : ActiveVHDL
-- Notas : Modelo sintetizado con las herramien-
-- tas de ALDEC.

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

Cout ALU Cin

Result Equal Zero

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

End Entity ALU;

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:

1.- Para definir el tamaño de un objeto en VHDL


....
generic ( AnchoBus : Integer := 8 );
port ( DataBus : InOut bit_Vector ( AnchoBus – 1 downto 0 ) );
....
2.- Para determinar el número de Iteraciones en un lazo
....
generic ( NumIt : Integer := 3 );
....
for k in 1 to NumIt loop
....
end loop;
....

F. Santiago E. 41
Parámetros Genéricos
3.- Para definir intervalos de tiempos
....
generic ( Delay : Time := 5 s );
....
y <= x after Delay;
....

En todos los casos la declaración de parámetros genéricos debe incluir:


- Nombre del parámetro seguido de dos puntos
- Tipo del parámetro
- El valor del parámetro precedido de := (opcional)
- Comentarios de descripción del parámetro (opcional)
Los parámetros se declaran en una lista entre paréntesis, separados por ;
y precedidos por la palabra reservada generic.

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

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

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

Nota: La representación de los números reales es compleja, de manera que no se puede


sintetizar directamente.

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

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


signal Edo_Act, Edo_Ant: EstadosFSM;
DECODE

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.

Type time is range –2147483647 to 2147483647


units
fs; -- Primarias
ps = 1000 fs; -- Secundarias
ns = 1000 ps;
us = 1000 ns;
ms = 1000 us; Nota: El tipo físico time sólo es utilizado
sec = 1000 ms; para simulación, no puede ser sintetizado.
min = 60 sec;
hor = 60 min;
end units;

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 :

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

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

Único elemento (comilla simple): Dos o mas elementos (comilla doble):


DataBus( 7 ) = „0‟; DataBus = “01001101”;
DataBus( 3 ) = „1‟; DataBus( 5 downto 3) = “001”;

Los vectores de bits se puede escribir en binario, octal, decimal y hexadecimal.

“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

Signal Memory : memory1k4;


1019
1020

Es una especie de Vector de Vectores. 1021


1022
1023

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 :

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 e
Instr2.CiclosEx = 1; integer.

Instr3.mnemonico = “mul reg1 reg2”;


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

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.

Outputs <- transformaciones( inputs )

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


operadores con un apropiado número de operandos.

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

F. Santiago E. 54
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)

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

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: 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

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

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

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

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

Lamp <= switch after 4s;


LAMP
0 4

F. Santiago E. 59
RETRASO DE TRANSPORTE

El “retraso 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 retrasos se les conoce como retrasos 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

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:

• Palabra reservada Constant


• Nombre de la constante (es un Identificador)
• Dos puntos
• Indicación del tipo de constante
• Valor de la constante después de :=
• Punto y coma al terminar la línea

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;

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

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 name1 : tipo := valor1;
name : tipo := valor_op ); Constant name2 : tipo := valor2;

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.

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.

La especificación del comportamiento consiste en una lista de operaciones que han de


ejecutarse para obtener el resultado esperado.
Comportamiento de la Máquina:
If hay_moneda then Botones <= habilitados
If Botones = habilitados then
If pres_kiwi then salida <= jugo_kiwi
Else if pres_frutas then salida <= jugo_frutas
KIWI FRUTAS LIMON
Else salida <= jugo_limon
If Bebida_Entregada then
Botones := deshabilitados

El funcionamiento del distribuidor de bebidas depende de una secuencia de operaciones.


Esto es común en muchos sistemas.

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 inserción de una moneda dará inicio a las


actividades de la máquina, que se “suspenderán”
después de que la máquina proporcione el jugo
KIWI FRUTAS LIMON
deseado.

Las actividades se “reanudarán” cuando ocurra la


inserción de otra moneda.

Esta suspensión temporal en VHDL se puede realizar con la sentencia wait.

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

Wait puede usarse para:


- Detener incondicionalmente la ejecución temporal de un proceso.
- Listar las condiciones necesarias para que el proceso se reanude.

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.

Ejemplos: Wait until CLK = „1‟;


Wait until CE and (not RESET);
Wait until IntData > 16;

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

Ejemplos: Wait on CLK;


Wait on Enable, Data;

4.- Wait complejo : Contiene una combinación de más de uno de los 3 tipos mencionados
anteriormente.

Ejemplos: Wait on Data until CLK = „1‟;


Wait until CLK = „1‟ for 10 ns;

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

Process ( signal1, signal2, signal3 )


Begin
signal1 <= expresion 1 ;
signal2 <= expresion 2;
signal3 <= expresion 3;
End process;

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:

1. Las señales no pueden declararse dentro de procesos.


2. Cualquier asignación de una señal tomará efecto cuando el proceso se suspende.
Mientras esto no ocurra, todas las señales mantendrán sus previos valores.
3. Sólo la última asignación de una señal dentro de un proceso es efectivo. No tiene
sentido asignar mas de un valor a una señal en un proceso dado.

Ejemplo: Process ( signal1, signal2, signal3 )


Signal1 = 0 -> 1
Begin
Proposición 1; Signal2 = 0
Proposición 2;
signal3 <= signal1 + 3; Signal3 = 5
End process;

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.

Ejemplo: Process ( C, D ) A=1


Begin B=1
C=1
A <= 2;
D=1
B <= A + C; E=1
A <= D + 1;
E <= A*2;
Si D cambia a 2 ¿Qué pasa?
End process;

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.

La asignación de un nuevo valor a una señal


Toman sus nuevos valores inmediatamente.
solo tiene efecto cuando el proceso es
Todos son efectivos, de modo que en un
suspendido. Por lo que sólo la última asignación
proceso puede haber múltiples asignaciones a
es válida. Las auto-asignaciones como:
una variable. Las auto-asignaciones como:
Sig1 <= Sig1 + 1
Var1 := Var1 + 1
Sólo son posibles con señales internas o del
Son válidas y muy usadas en ciclos repetitivos.
tipo inout, si son externas.

Es posible retrasar la asignación de una señal


No es posible retrasar la asignación de una
(con la cláusula after ), hay dos tipos de
variable.
retrasos: El retraso inercial y el de transporte.

F. Santiago E. 76
Control de Flujo
Para el control de flujo VHDL tiene las siguientes proposiciones :

- Condicionales : If . . . . Then . . . . .

- Condicionales con alternativas: If . . . . Then . . . . . Else . . .


If . . . . Then . . . . . Elsif . . . Then . . . . . Else . . .

- De elección múltiple: Case . . . . Is


when . . . .

-Ciclos repetitivos: While . . . . Loop . . . . ( Repetitivo por condición )


for . . . . Loop . . . . ( Repetitivo por contador )

Con estas estructuras de control, el flujo de la ejecución de las instrucciones ya no sólo es


secuencial.

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.

En el proceso mostrado en el anterior ejemplo, si se quisieran contar los 1‟s menos


significativos, antes de que aparezca el primer cero, el proceso cambia a :

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.

Nota: Acondicionar para implementar en la tarjeta Nexys 2.

F. Santiago E. 87

S-ar putea să vă placă și