Está en la página 1de 77

Instituto Tecnológico de Culiacán

Departamento de Ingeniería Eléctrica-Electrónica

Curso: Programación en VHDL

Instructores:
M.C. Heraclio Heredia Ureta
Dr. Modesto G. Medina Melendrez

Agosto de 2011
1
CONTENIDO:
1. Instalación de software MAXPLUS II.
2. Estado actual de la lógica programable.
3. VHDL: su organización y arquitectura.
4. Diseño lógico combinacional mediante VHDL.
5. Diseño lógico secuencial con VHDL.
6. Integración de entidades en VHDL.
7. Programación de PLDs

2
1. Instalación de software MAXPLUS II.

3
Pasos para instalar el software MAX+PLUS II Student Edition Version 10.2 de
Altera siga los siguientes pasos:

1. Presione la tecla bandera de Windows  junto con la tecla R.

2. Aparecerá la ventana de ejecutar, ahí escribes cmd y luego presionas aceptar.

3. Posteriormente, aparecerá la ventana de comandos de ms-dos, ahí presionas dir/


p y enter.

4. Luego copias el número de serie del volumen del disco duro que aparecerá en la
parte superior derecha de la ventana de comandos de ms-dos, estos son 8
caracteres hexadecimales como por ejemplo BE1B-8965.

5. Este número de serie del volumen del disco duro lo necesitas para que te envíen
la licencia del software MAX+PLUS II de Altera que lo tienes que solicitar de la
página:
http://www.altera.com/support/licensing/lic-university.html

6. Seleccione la Versión 10.2 del Software MAX+PLUS II Edición Estudiantil y


presione continuar.
4
Pasos para instalar el software MAX+PLUS II Student Edition Version 10.2 de
Altera siga los siguientes pasos (continuación):

7. Luego aparecerá una ventana donde se solicite el número de serie del volumen
del disco duro, ingrésalo y presiona continuar.

8. Luego tienes que llenar algunos datos personales como son: Nombre, Apellido,
Dirección, Ciudad, Estado, País, Código postal, Teléfono, y Correo Electrónico. Una
vez llenado los datos presiona continuar.

9. Luego llena un formulario con las respuestas que tú consideres correctas y


presiona finalizar.

10. A tu correo te llegará un archivo con el nombre license.dat, Lo descargas y lo


guardas en el disco duro.

11. Luego instalas el software MAX+PLUS II de Altera ejecutando el archivo


start.htm del libro Sistemas Digitales Principios y Aplicaciones versión 10 de Ronald
J. Tocci, que les pase en una memoria.

5
Pasos para instalar el software MAX+PLUS II Student Edition Version 10.2 de
Altera siga los siguientes pasos (continuación):

12. Una vez abierta la página web, Presiona el botón Max+Plus II y luego instala la
opción MAXplus_student102.

13. Se empezará a instalar el Max+Plus II 10.2. Una vez que lo instales el software,
ejecútalo para que le des la ruta donde se encuentra el serial de la licencia.

14. Se recomienda que este archivo license.dat que te envían por correo lo guardes en
el mismo directorio donde se encuentra el Max+Plus II.

15. Para darle la ruta de la licencia sigue estos pasos:


a. Abre el Max+Plus II.
b. Seleccione options de la barra de menus y luego license setup...
c. Luego le das la ruta donde guardaste el archivo license.dat con la tecla
browse..., y luego la tecla ok.

16. Con este último paso finalizaste la instalación del Max+Plus II.

6
2. Estado actual de la lógica programable.

7
2.1. Dispositivos lógicos programables (PLD).

La integración de sistemas se ha ido superando con las


nuevas tecnologías de fabricación.

Se han podido obtener componentes de mayor complejidad. El


diseño ASIC (Circuitos Integrados de Aplicación Específica)
domina la tendencia en aplicaciones a nivel microelectrónica,
pero solo es conveniente con altos volúmenes de producción.

El desarrollo de sistemas complejos requiere bastante tiempo


de desarrollo.

Una forma más rápida y directa es utilizar lógica programable.


La lógica programable independiza el proceso de diseño del
proceso de fabricación. 8
 Existe una gran variedad de dispositivos lógicos programables
(PLDs).
PROM Programmable Read-Only Memory.
PLA Programmable Logic Array.
PAL Programmable Array Logic.
GAL Generic Logic Array.
CPLD Complex PLD.
FPGA Field Programmable Gate Array.

Los FPGAs y los CPLDs presentan las mismas ventajas que los
ASIC pero con un menor costo.

El diseño se basa en bibliotecas y mecanismos de mapeo de


funciones.
La implementación requiere una fase de programación,
generalmente rápida.
9
2.2. Dispositivos lógicos programables de alto nivel de
integración.
Se crearon para integrar con mayor rapidez una mayor cantidad
de dispositivos en un circuito (SOC-System on Chip). Permiten
cambios en el diseño digital.
Un CPLD consiste de un arreglo de múltiples PLDs agrupados como
bloques en un chip.

La unidad PI (interconexión programable) se encarga de


interconectar los bloques lógicos y los bloques de
entrada/salida. 10
El FPGA se basa en arreglos de compuertas. Esta formado por
arreglos de bloques lógicos configurables (CLBs), que se
comunican entre sí y con las terminales de entrada/salida.

Los CLB están ordenados en arreglos de matrices


programables. La comunicación se lleva a cabo por alambrados
llamados canales de comunicación.

11
 Un CLB es funcionalmente completo, ya que puede
Implementar cualquier función booleana representada en
forma de suma de productos.
El diseño lógico dentro de un CLB se implementa con bloques
generadores de funciones o LUTs (Look Up Table). La diferencia
entre FPGAs y CPLDs radica en el número de flip-flops
contenidos.

Características CPLD FPGA


Arquitectura -Similar a un PLD. -Similar a los arreglos de
compuertas.
-Más combinacional -Más registros + RAM.
Densidad -Baja a media -Media alta.
Aplicaciones -Contadores rápidos. -Aplicaciones de
-Máquinas de estado. Arquitecturas de computadora
-Lógica Combinacional. -DSP.
-Diseños con registros.

12
2.3. Campos de aplicación de la lógica programable.

 Los PLD sencillos se utilizan como remplazo de circuitos LSI y


MSI.
 Los CPLD y FPGA se aplican en áreas como:
telecomunicaciones, computación, redes, medicina,
procesamiento digital de señales, multiprocesamiento de
datos, microondas, telefonía celular, filtros digitales
programables, entre otros.
Los CPLD se utilizan especialmente a nivel industrial. Los FPGA
son recomendables en aplicaciones secuenciales complejas.

13
2.4. La lógica programable y los lenguajes de
descripción en hardware (HDL).

En los 50s aparecieron los HDL como una opción para el desarrollo de
sistemas complejos.

 En los 60s se desarrollaron:


 IDL de IBM, TI-HDL de Texas Instruments, ZEUS de General
Electric, entre otros, orientados al área industrial; éstos no
estaban disponibles;
 AHPL, DDL, CDL, ISPS, entre otros, orientados al área
académica; éstos carecían de soporte y mantenimiento adecuado.

 En los 80s surgieron VHDL, Verilog, ABEL 5.0, AHDL, entre otros.

14
2.5. Historia del Desarrollo de la programación en VHDL

 El departamento de defensa de Estados Unidos creó el


lenguaje VHDL, como parte del programa “Very High Speed
Integrated Circuits” (VHSIC).
 En 1985 surgió la versión 7.2 definida entre el gobierno,
industrias y universidades.
En 1987 la IEEE publicó el estándar IEEEstd 1076-1987. En 1988,
VHDL fue reconocido como un estándar ANSI (American
National Standards Institute).
En 1993 se adoptó el estándar adicional VHDL IEEE1164. Hoy en
día VHDL se considera como el lenguaje estándar para la
descripción, modelado y síntesis de circuitos digitales y
sistemas complejos.

15
2.5. Historia del Desarrollo de la programación en VHDL
Departamento de la
Defensa de los E.U.A.
Desarrollo de Lenguajes para
Descripción de Hardware
Programa: Very High Speed
Integrated Circuits (VHSIC)
1970’s
IDL/IBM, HDL/TI, ZEUS/GE
Desarrollo en Área 1983 ➩ VHDL Desarrollo:
Industrial IBM, Texas Instruments e
AHPL, DDL, CDL, ISPS Intermetrics
Desarrollo en Área
Académica
1987 ➩ VHDL’87
1980’s
Estándar IEEE -1076
AHDL, ABEL, CUPL
VHDL y Verilog

1993 ➩ VHDL’93
Estándar IEEE -1164
16
2.6. Ventajas de utilizar VHDL
Ventajas del VHDL

Notación Estandarizada

Disponibilidad al Público

Independencia del Sistema de Desarrollo

Independencia de la Metodología de Diseño (PLD’s, ASIC’s, FPGA’s)

Independencia de la Tecnología y Proceso de Fabricación (CMOS, Bipolar, BiCMOS)

Reutilización de Código

Capacidad descriptiva del comportamiento del sistema en distintos niveles de abstracción:


Algorítmico, RTL (Register Transfer Logic) o concurrente, estructural (Lógico), Netlist.

Facilitar la Verificación/Prueba y puesta a punto del sistema a diseñar.

Adición de la extensión analógica (IEEE1076.1) que permite la especificación, simulación y


síntesis de sistemas digitales, analógicos y mixtos
17
2.7. Compañías de soporte en hardware y software.

18
3. VHDL: su organización y arquitectura

19
3.1. Unidades básicas de diseño.

La estructura general de un programa está formada por


módulos o unidades. Existen cinco tipos:
 Declaración de entidad (entity declaration );
 Arquitectura (architecture );
 Configuración (configuration );
 Declaración del paquete (package declaration );
 Cuerpo del paquete (package body ).

La entidad, el paquete y la configuración son unidades de


diseño primarias.
La arquitectura y el cuerpo del paquete son unidades de
diseño secundarias.
La entidad y arquitectura son indispensables en la estructura
de un programa. 20
3.2. Entidad.

Una entidad (entity ) es el bloque elemental de diseño en VHDL.

Las entidades son los elementos electrónicos que forman un


sistema digital.

Descripción a Símbolo funcional Diagrama a bloques


Nivel de compuertas de la entidad representativo de la entidad.

21
Puertos de entrada-salida

Un puerto es cada señal de entrada y/o salida en una entidad.

La declaración de los puertos debe tener un nombre, un modo y


un tipo.

El modo permite definir la dirección que tomará la información y


el tipo define qué clase de información se transmitirá por el
puerto.

22
Entidad –
Descripción de un Puerto
¿Cómo se describe a un Puerto?

Nombre Modo Tipo de Dato


Conjuntos de Valores que se les ha asignado un
Identificador in = Entrada nombre (p.ej. bit, boolean, bit_vector, etc), de tal forma
que un objeto (p.ej. una Señal) de un determinado Tipo
(p.ej. el tipo bit_vector) pueda tomar cualquier valor
out = Salida dentro del conjunto de valores que define al Tipo
especificado.

inout bit (pkg.standard) Valores de ‘0’ o ‘1’


Lógico
•Puerto de Entrada (Lectura) y Salida (Escritura)
•El valor leído (Entrada) es aquél que llega al boolean (pkg.standard) Define valores de
cierto o falso de
puerto, y no el valor que se le asigna (Salida), en
acuerdo con una
caso de existir.
expresión
buffer bit_vector Conjunto de bits
•Similar al Puerto de Salida (Escritura), pero que representa a
(pkg.standard)
además puede ser leído. un grupo de
•El valor leído (Entrada) es el mismo valor asignado señales de ent. o
(Salida) al puerto. sal.
integer (pkg.standard) Números enteros

Paquete (pkg.) en el cual es definido el tipo.


Ver: “Uso de Librerías y Paquetes” std_logic Valores ‘U’, ‘X’,
(pkg.std_logic_1164) ‘0’, ‘1’, ‘Z’, ‘W’, ‘L’,
‘H’, ‘-’

std_logic_vector Arreglos de
(pkg.std_logic_1164) std_logic

Más tipos
Se irán introduciendo conforme avance el
curso
23
3.3. Declaración de entidades.

Consiste en la descripción de las entradas y las salidas de un


circuito de diseño identificado como entity.
Ejemplo 1:

(-- ) indica que el texto a la derecha es un comentario.


( ; ) se utiliza al finalizar una declaración.
( : ) se utiliza al asignar nombres a las entradas y salidas.

24
Identificadores son nombres o etiquetas utilizados para referir
variables, constantes, señales, procesos, etc.
Pueden contener números, letras del alfabeto y guiones bajos que
separen caracteres y no tienen restricción por longitud.

Especificación para la escritura de identificadores

25
Entidad - Ejemplo: Sumador Completo
Ejemplo-1: Sumador
Cin
Entidad Cout
Puertos de Entrada A Puertos de Salida
Sumador SUMA
B

(entity) Inicia declaración de la entidad

(--) Indica Comentario Identificador de la entidad Nombres de los puertos

Línea Sumador-completo de dos datos con longitudes de 1-bit


N°. (Declaración de Entidad)
1 --Declaración de la entidad de un circuito sumador Modo de Operación
2 entity sumador is
Tipo de Dato
3 port (A, B, Cin: in bit;
4 SUMA, Cout: out bit);
5 end sumador;

(;) Finaliza declaración o subdeclaración


(end) Finaliza declaración de la entidad 26
Entidad - Ejemplo: Detector A
Ejemplo-2 a3
b3
a2
b2 F
a1
b1
a0
b0

Línea Detector – Uso de dos datos con longitudes de 4-bit


N°. (Declaración de Entidad)
1 --Declaracion de la entidad
2 entity circuito is
3 port (a3, b3, a2, b2, a1, b1, a0, b0: in bit;

4 F: out bit);
5 end circuito; 27
3.4. Diseño de entidades utilizando vectores.
Ejemplo-3
Cin
vector_A = [A3, A2, A1, A0] Entidad
Sumador
vector_B = [B3, B2, B1, B0] Cout
Para ordenar en forma
ascendente utilizar to en lugar
vector_SUMA = [S3, S2, S1, S0] de downto (p.ej. 0 to 3)

Sumador-completo de dos datos con longitudes de 4-bit


(Declaración de Entidad – Uso de Vectores)
entity sumador is
port (A, B: in bit_vector (3 downto 0);
Cin: in bit;
Cout: out bit;
SUMA: out bit_vector (3 downto 0));
end sumador;

28
Entidad - Ejemplo: Detector A (Uso de Vectores)

Ejemplo-4 a3
b3
a2
b2 F
a1
b1
a0
b0

Línea N Detector – Uso de dos datos con longitudes de 4-bit


°. (Declaración de Entidad – Uso de Vectores)
1 --Declaracion de la entidad
2 entity circuito is
3 port (a, b: in bit_vector (3 downto 0);

4 F: out bit);
5 end circuito; 29
3.5. Declaración de entidades mediante librerías y
paquetes.

Se encuentran definidas dos librerías llamadas ieee y work.

En la librería ieee se encuentra el paquete std_logic_1164.

En la librería work se encuentran numeric_std, std_arithm y


gatespkg.

La librería work es donde se almacenan los programas que se


van generando.
Un paquete es una unidad de diseño que contiene sistemas
preestablecidos con comportamientos optimizados.

30
Las librerías se llaman como: library ieee;

La librería work no requiere declaración.

El paquete std_logic_1164 en la librería ieee contiene todos los


tipos de datos que suelen emplearse en VHDL
(std_logic_vector, std_logic, entre otros).

Para obtener la información de un paquete se tiene que


accesar como:
use nombre_libreria.nombre_paquete.all;
Por ejemplo:
use ieee.std_logic_1164.all;

31
Entidad - Uso de Librerías y Paquetes
Paquetes predefinidos comúnmente utilizados
Standard
standard •Contiene tipos básicos: bit, bit_vector, integer
•Paquete incluido por omisión.
IEEE
std_logic_1164 •Define los tipos: std_logic, std_ulogic, std_logic_vector, std_ulogic_vector
•Define funciones de conversión basadas sobre estos tipos.
numeric_bit •Define tipos de vectores signados y no-signados basados en el tipo bit y
todos los operadores aritméticos sobre estos tipos.
•Define funciones extendidas y de conversión para dichos tipos.
numeric_std Define tipos de vectores signados y no-signados basados en el tipo
std_logic. Paquete equivalente al Paquete std_logic_arith
Synopsys
std_logic_arith •Define tipos de vectores signados y no-signados, y todos los operadores
aritméticos sobre estos tipos.
•Define funciones extendidas y de conversión para dichos tipos.
std_logic_unsigned •Define operadores aritméticos sobre el tipo std_ulogic_vector y los
considera como operadores no-signados.
std_logic_signed •Define operadores aritméticos sobre el tipo std_logic_vector y los
considera como operadores signados.
std_logic_misc •Define tipos, subtipos, constantes y funciones complementarios para el
paquete std_logic_1164. 32
Entidad - Ejemplo: Multiplicador

Ejemplo-5
X0 Z0
X1 Circuito Z1
Y0 Multiplicador Z2
Y1 Z3

Multiplicador de dos datos con longitudes de 2-bit


(Declaración de Entidad – Uso de Biblioteca y
Paquete)
library ieee;
use ieee.std_logic_1164.all;
entity multiplica is
port (X0, X1, Y0, Y1: in std_logic;

Z3, Z2, Z1, Z0: out std_logic);

end multiplica;
33
3.6. Arquitecturas.

Una arquitectura se define como la estructura que describe el


funcionamiento de una entidad.

Los estilos de programación que pueden utilizarse en VHDL son:

 Estilo funcional

 Estilo por flujo de datos

 Estilo estructural

34
Arquitectura - ¿Qué es?
arquitectura (architecture)
Unidad de Diseño Secundaria que describe el comportamiento interno de una
entidad.

¿Cómo? - A través de la programación de varios procedimientos que


permitan que la entidad (entity) cumpla con las condiciones de operación o
comportamiento deseadas.

Estilo de descripción o
Niveles de Descripción utilizados Modelización

Nivel Algoritmo Funcional

Nivel de Transferencia entre Registros (RTL)


Flujo de Datos
Nivel Lógico

Nivel Compuerta Estructural

Nivel Transistor (Topología / Layout) 35


Estilo de Modelización - Funcional
Funcional - En este caso, se
Línea Arquitectura - Comparador de Igualdad de
describen las relaciones entre
Nº dos Datos de Long. = 2Bits
las entradas y salidas, sin
importar la estructura o 1 --Ejemplo de una descripción abstracta
implementación física del 2 (funcional)
sistema o circuito. 3 library ieee;
4 use ieee.std_logic_1164.all;
Ejemplo-6 5 entity comp is
6 port (a,b: in bit_vector (1 downto 0);
7 c: out bit);
a end comp;
c 8
b Comparador architecture funcional of comp is
9
10 begin
11 compara: process (a,b)
Uso de if-then-else 12 begin
(construcción secuencial) 13 if a = b then
14 c <= ‘1’;
si a = b entonces c = 1 15 else
16 c <= ‘0’;
si a ≠ b entonces c = 0
17 end if;
18 end process compara;
36
end funcional;
Estilo de Modelización - Funcional

Ejemplo-7
Línea Arquitectura - Compuerta OR de dos
Nº entradas
1 --Ejemplo de una descripción abstracta
a (funcional)
f1 2
library ieee;
b 3
use ieee.std_logic_1164.all;
4
entity com_or is
5
a b f1 port (a,b: in std_logic;
6
f1: out std_logic);
0 0 0 7 end com_or;
0 1 1 8 architecture funcional of com_or is
1 0 1 9 begin
1 1 1 10 process (a,b) begin
11 if (a = ‘0’ and b=‘0’) then
12 f1 <= ‘0’;
13 else
14 f1 <= ‘1’;
15 end if;
16 end process;
17 end funcional;
37
Estilo de Modelización – Flujo de Datos
Flujo de Datos - En este caso, se describe la forma en la que los datos se pueden
transferir entre los diferentes módulos operativos que constituyen la entidad (sistema o
circuito)

 La construcción when-else

Línea Arquitectura - Comparador de Igualdad de dos


Nº Datos de Long. = 2Bits
Ejemplo-8 1 --Ejemplo de una arquitectura usando when-else
2 library ieee;
Comparador 3 use ieee.std_logic_1164.all;
(Ejemplo-6) 4 entity comp is
5 port (a,b: in bit_vector (1 downto 0);
6 c: out bit);
7 end comp;
8 architecture f_datos of comp is
9 begin
10 c <= ‘1’ when (a = b) else ‘0’;
11 end f_datos;
12
38
Estilo de Modelización – Flujo de Datos
 Uso de ecuaciones booleanas

Ejemplo-9
Comparador
(Ejemplo-6) Línea Arquitectura - Comparador de Igualdad de dos
Nº Datos de Long. = 2Bits

1 --Ejemplo de una arquitectura usando ecs. booleanas


a
c 2 library ieee;
b Comparador
3 use ieee.std_logic_1164.all;
4 entity comp is
5 port (a,b: in bit_vector (1 downto 0);
6 c: out bit);
a0
b0 7 end comp;
c
8 architecture booleana of comp is
a1
b1 9 begin
10 c <= (a(1) xnor b(1)) and (a(0) xnor b(0));
11 end booleana;
12
39
Estilo de Modelización – Estructural

Estructural - En este caso, el comportamiento de un sistema o circuito es descrito mediante


modelos lógicos establecidos de los componentes que conforman al sistema o circuito, como
son: Compuertas, Sumadores, Contadores, etc.

Modelos lógicos pueden ser:

Diseñados por el Usuario Predefinidos por el Fabricante

Almacenados en Paquetes
contenidos en las bibliotecas de
la Herramienta de Desarrollo

40
Estilo de Modelización – Estructural

Ejemplo-10
Comparador Línea Arquitectura - Comparador de Igualdad de dos
(Ejemplo-6) Nº Datos de Long. = 2Bits
1 library ieee;
2 use ieee.std_logic_1164.all;
3 use work.compuertas.all;
4 entity comp is
5 port (a,b: in bit_vector (0 to 1);
a0 6 c: out bit);
b0 U0 x0
c 7 end comp;
U2
a1 U1 x1
8 architecture estructural of comp is
b1 9 signal x: bit_vector (0 to 1);
10 begin
11 U0: xnor2 port map (a(0), b(0), x(0));
12 U1: xnor2 port map (a(1), b(1), x(1));
13 U2: and2 port map (x(0), x(1), c);
14 end estructural;

41
3.7. Datos, operadores y palabras reservadas en VHDL
Lista de palabras reservadas en VHDL

42
Mayor
Precedencia de operadores
** ABS NOT
* / MOD REM
+ (signo) - (signo)

+ - &
= /= < <= > <=

AND OR NAND NOR XOR XNOR

Menor

La precedencia de operadores se encuentran ordenados de mayor (arriba) a


menor (abajo), los operadores que se encuentran en la misma fila tienen la
misma precedencia y serán evaluados siguiendo el orden de izquierda a derecha.

43
Un objeto de datos en VHDL es un elemento que toma un valor de algún tipo de dato
determinado, según sea el tipo de dato, el objeto poseerá un conjunto de propiedades.
En VHDL los objetos de datos son generalmente una de las tres clases siguientes:

Constantes Variables
Una constante es un elemento que puede tomar un Las variables pueden ser modificadas cuando sea
único valor de un tipo dato, las constantes pueden necesario, pueden ser declaradas solamente dentro
ser declaradas dentro de entidades, arquitecturas, de los procesos y subprogramas.
procesos y paquetes.

CONSTANT identidicador : tipo := valor; VARIABLE identidicador : tipo [:= valor];


Ejemplo Ejemplo
CONSTANT byte: integer := 8; VARIABLE aux1, aux2: bit;

Señales SIGNAL identidicador : tipo [:= valor];


Las señales si pueden almacenar o pasar valores lógicos, Ejemplo
por lo tanto, representan elementos de memoria o
SIGNAL A, B : bit := ‘0’;
conexiones y si pueden ser sintetizadas. Son declaradas
en las arquitecturas antes del BEGIN. SIGNAL dato: bit_vector (7 downto 0);
44
4. Diseño lógico combinacional mediante VHDL.

42
4.1. Programación de estructuras básicas mediante
declaraciones concurrentes

Una declaración concurrente se encuentra fuera de un proceso.

Suelen usarse en las descripciones de flujo de datos y estructural.

En una declaración concurrente no importa el orden en que se


escriban las señales.

Existen tres tipos de declaraciones concurrentes:


 Declaración condicional asignada a una señal (when-else ).

 Declaración concurrente asignada a señales (gates ).

 Selección de una señal (with-select-when ).


43
Declaración condicional asignadas a una señal (when-else).
Escriba la descripción VHDL de un sistema que se encuentra definido por la tabla de
verdad siguiente:

Ejemplo:
--EJEMPLO COMBINACIONAL BÁSICO
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY prueba IS PORT
( a,b,c : IN STD_LOGIC;
F : OUT STD_LOGIC );
END prueba;

ARCHITECTURE ejemplo of prueba IS


BEGIN
F<= '1' WHEN ( a='0' AND b='0' AND c='0' )ELSE
'1' WHEN ( a='0' AND b='1' AND c='1' )ELSE
'1' WHEN ( a='1' AND b='1' AND c='0' )ELSE
'1' WHEN ( a='1' AND b='1' AND c='1' )ELSE
'0';
END ejemplo;
44
Ejemplo sencillo donde se utilizan las declaraciones when-else:

--EJEMPLO when-else
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;

ENTITY Ejemplo_when_else IS
PORT( a, b : IN STD_LOGIC;
F : OUT STD_LOGIC );
END Ejemplo_when_else;

ARCHITECTURE ejemplo of Ejemplo_when_else IS


BEGIN
F<= '1' WHEN ( a='1' AND b='1' ) ELSE
'0';
END ejemplo;
48
Ejercicio.
Una función F depende de cuatro variables D, C, B, A, que representan un número
binario, donde A es la variable menos significativa. La función F adopta el valor de
cero si el número formado por las cuatro variables es inferior a 10 y superior o igual a
5. En caso contrario la función F es uno.
Realice el programa correspondiente en VHDL utilizando estructuras del tipo when-
else.

45
Solución al problema anterior utilizando estructuras del tipo when- else.

--EJEMPLO COMBINACIONAL BÁSICO


LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY tabla_4_entradas IS PORT
( entradas : IN STD_LOGIC_VECTOR(3 downto 0);
F : OUT STD_LOGIC );
END tabla_4_entradas;

ARCHITECTURE tabla of tabla_4_entradas IS


BEGIN
F<= '0' WHEN ( entradas="0101" )ELSE
'0' WHEN ( entradas="0110" )ELSE
'0' WHEN ( entradas="0111" )ELSE
'0' WHEN ( entradas="1000" )ELSE
'0' WHEN ( entradas="1001" )ELSE
'1';
END tabla;

50
Declaraciones concurrentes asignadas a señales (gates)

Ejemplo:

46
Selección de una señal (with-select-when)
ENTITY fig_4_51 IS
Ejemplo: PORT (
a, b : IN BIT; --DECLARA LOS BITS DE
--ENTRADA INDIVIDUALES
c : OUT BIT); --DECLARA LA SALIDA
END fig_4_51;

ARCHITECTURE verdad OF fig_4_51 IS


SIGNAL bits_ent : BIT_VECTOR(1 DOWNTO 0);
BEGIN
bits_ent <= a & b; --CONCATENA LOS BITS DE
--ENTRADA EN UN VECTOR
WITH bits_ent SELECT
c <= '1' WHEN "00“,--TABLA DE VERDAD
'0' WHEN "01",
'1' WHEN "10",
'0' WHEN "11";
END verdad;

48
Otro ejemplo de la selección de una señal (with-select-when):

ENTITY tabla IS
PORT( a: IN BIT_VECTOR(2 DOMNTO 0);
c: OUT BIT_VECTOR(1 DOMNTO 0) );
END tabla;

ARCHITECTURE tabla1 OF tabla IS


BEGIN
WITH a SELECT
c<= "00" WHEN "000",
"10" WHEN "001",
"00" WHEN "010",
"01" WHEN "011",
"11" WHEN "100",
"00" WHEN "101",
"01" WHEN "110",
"00" WHEN "111";
END tabla1; 53
Otro ejemplo de la selección de una señal (with-select-when):
--TABLA DE VERDAD EN VHDL SISTEMAS DIGITALES 10A ED DEL TOCCI PAG 183

ENTITY fig_4_51 IS
PORT (
a, b, c : IN BIT; --DECLARA LOS BITS DE ENTRADA INDIVIDUALES
y : OUT BIT); --DECLARA LA SALIDA
END fig_4_51;

ARCHITECTURE verdad OF fig_4_51 IS


SIGNAL bits_ent : BIT_VECTOR(2 DOWNTO 0);
BEGIN
bits_ent <= a & b & c; --CONCATENA LOS BITS DE ENTRADA EN UN
--VECTOR
WITH bits_ent SELECT
y <='0' WHEN "000", --TABLA DE VERDAD
'0' WHEN "001",
'0' WHEN "010",
'1' WHEN "011",
'0' WHEN "100",
'1' WHEN "101",
'1' WHEN "110",
'1' WHEN "111";
END verdad;
54
Ejercicio
Diseñe un circuito comparador para comparar las magnitudes de dos números de 2
bits (A0 A1 y B0 B1). El circuito tendrá tres señales de salida GT, LT y EQ. GT será
1 para indicar que el valor de A es mayor que el valor de B. LT será 1 para indicar
que el valor de A es menor que el valor de B. EQ será 1 si el valor de A y el valor de
B son iguales. Utilice instrucciones del tipo with-select-when

49
Solución al problema anterior utilizando estructuras del tipo with-select-when.
--COMPARADOR DE 2 BITS CON WITH-SELECT-WHEN
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
ENTITY comparador_2bit IS
PORT ( a, b: IN BIT_VECTOR(1 DOWNTO 0); --DEFINE LAS ENTRADAS DEL BLOQUE
gt, lt, eq : OUT BIT); --DEFINE LA SALIDA DEL BLOQUE
END comparador_2bit;

ARCHITECTURE ckt OF comparador_2bit IS

SIGNAL input: BIT_VECTOR(3 DOWNTO 0); --NOMBRA UNA SEÑAL INTERMEDIA


SIGNAL output : BIT_VECTOR(2 DOWNTO 0); --NOMBRA UNA SEÑAL INTERMEDIA
BEGIN
input <= a & b;
WITH input SELECT
output <= "001“ WHEN "0000",
"010“ WHEN "0001",
"010“ WHEN "0010",
"010" WHEN "0011",
"100" WHEN "0100",
"001" WHEN "0101",
"010" WHEN "0110",
"010" WHEN "0111",
"100" WHEN "1000",
"100" WHEN "1001",
"001" WHEN "1010",
"001" WHEN "1011",
"100" WHEN "1100",
"100" WHEN "1101",
"100" WHEN "1110",
"001" WHEN "1111";
gt<=output(2);
lt<=output(1);
eq<=output(0);
56
END ckt;
4.2. Programación de estructuras básicas mediante
declaraciones secuenciales
Una declaración secuencial debe ejecutarse en el orden en que
aparece y forma parte de un proceso (process ).
Se utilizan las declaraciones if-then-else con la estructura elsif ,
if la condición 1 se cumple then
realiza la operación 1;
elsif la condición 2 se cumple then
realiza la operación 2;
else
realiza la operación 3;
end if;

o declaraciones case-when
case A is
when “ valor1deA” => salida <=“ valor1salida”;
when “ valor2deA” => salida <=“valor2salida”;
when others => salida <=“valor3salida”; end
case;
50
Buffer tri-estado

Ejemplo:

51
Comparador
Ejemplo:
Diseñe mediante declaraciones secuenciales un comparador de dos números A y B, cada número formado
por dos bits (A1 A0) y (B1 B0), la salida del comparador también es de dos bits y está representada por
la variable Z (Z1 Z0) de tal forma que si:

52
Ejemplo:
Diseñe un circuito decodificador de BCD a
7 segmentos utilizando declaraciones
secuenciales con case-when . La
entrada A esta formada por 4 bits (A3, A2,
A1, A0) y la salida “d” por siete bits (a, b, c,
d, e, f, g) activos en bajo.

54
5. Diseño lógico secuencial con VHDL.

56
5.1. Diseño Lógico Secuencial

Un sistema secuencial se forma con un arreglo lógico combinacional y


elementos de memoria.

La salida no solo depende de los valores de entrada presentes, sino


también de la historia del sistema.

Hay dos tipos de sistemas secuenciales:


 Síncronos: se sincronizan al pulso de reloj del sistema
 Asíncronos: dependen del orden y momento en el cual se aplican sus
señales de entrada.

En el diseño secuencial con VHDL las declaraciones if-then- else son las
más utilizadas.

57
5.2. Flip-Flops
Los Flip-Flops son los elementos de memoria utilizados en los sistemas
secuenciales síncronos.
Un Flip-Flop mantiene o almacena un bit de manera indefinida hasta que un
pulso o una señal cambie de estado. Algunos de los Flip-Flops más
comunes son: SR, JK, D y T.

58
El atributo ‘event(evento) se utiliza para describir un hecho u ocurrencia
de una señal en particular.

Los atributos sirven para definir características que pueden asociarse


con cualquier tipo de datos, objeto o entidades.

La condición if ( clk’event ) es cierta solo cuando ocurre un cambio de


valor en clk.

La declaración if-then que depende de ‘event no maneja la condición


else , debido a que el compilador mantiene el valor de Q hasta que no
exista un cambio de valor en la señal clk.

59
Ejemplo:
Describa en VHDL el Flip-Flop D. --EJEMPLO DE FLIP_FLOP D
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;

ENTITY FLIP_FLOP_D IS PORT


( d,clk : IN STD_LOGIC;
q : OUT STD_LOGIC);
END FLIP_FLOP_D;
ARCHITECTURE ejemplo of FLIP_FLOP_D IS
BEGIN
PROCESS (clk) BEGIN
IF (clk'EVENT AND clk='1') then
q<=d;

end if;
END PROCESS;
END ejemplo;

60
Ejercicio: Escriba y simule el código VHDL de un Flip-Flop SR (el programa se realiza utilizando
instrucciones condicionales y el tipo de dato no importa, ‘-’).
--EJEMPLO DE UN FLIP FLOP SR CON EVENTOS
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY FLIP_FLOP_SR IS PORT
( s, r, clk : IN STD_LOGIC;
q, qn : INOUT STD_LOGIC);--SE TIENE QUE DECLARAR LA SEÑAL
--Q COMO INOUT DEBIDO A QUE SE UTILIZA COMO ENTRADA Y SALIDA
END FLIP_FLOP_SR;
ARCHITECTURE ejemplo of FLIP_FLOP_SR IS
BEGIN
PROCESS (clk, s, r) BEGIN
IF (clk'EVENT AND clk='1') then
IF (s='0'AND r='1')THEN
q<='0'; qn<='1';
ELSIF (s='1'AND r='0')THEN
q<='1‘; qn<='0';
ELSIF (s='0'AND r='0')THEN
q<=q; qn<=qn;
ELSE
q<='-'; qn<='-';
END IF;
END IF;
END PROCESS; 61
END ejemplo;
5.3. Registros
El diseño de registros es muy parecido al diseño de Flip-Flops.
Se utilizan vectores de bits en lugar de un solo bit.
Ejemplo:
Escriba un programa de un
registro de 4 bits.

Las variables sensitivas


del proceso son CLK y CLR.
62
5.4. Contadores
La forma usual para describir contadores en VHDL es mediante operaciones
de incremento, decremento o ambas.
Cuando se requiere retroalimentación de una señal (Q<=Q+1), ya sea
dentro o fuera de la entidad, se utiliza el modo inout .
Ejemplo:
Elabore un programa que describa el
funcionamiento de un contador de 4
bits. Realice en el diseño una señal
de control (Up/Down) que determine el
sentido del conteo: ascendente o
descendente

63
Ejercicio: Describa en VHDL un contador síncrono con reset asíncrono y carga en paralelo (load).
Y simule su funcionamiento.
--EJEMPLO DE UN CONTADOR CON EVENTOS
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
--USE WORK.STD_ARITH.ALL;
USE IEEE.STD_LOGIC_unsigned.ALL;
ENTITY contador IS PORT
( p: IN STD_LOGIC_VECTOR(3 DOWNTO 0);
clk, load, enp, reset: IN STD_LOGIC;
q: INOUT STD_LOGIC_VECTOR(3 DOWNTO 0) );--SE TIENE QUE
--DECLARAR LA SEÑAL Q COMO INOUT DEBIDO A QUE SE UTILIZA
--COMO ENTRADA Y SALIDA
END contador;
ARCHITECTURE ejemplo of contador IS
BEGIN
PROCESS (clk, reset, load, enp) BEGIN
IF(reset='1') THEN
q<="0000";
ELSIF (clk'EVENT AND clk='1') then
IF (load='0' and enp='0')THEN
q<=p;
ELSIF (load='0' and enp='1')THEN
q<=p;
ELSIF(load='1' and enp='0')THEN
q<=q;
ELSIF(load='1' and enp='1')THEN
q<=q+1;
END IF;
END IF; 64
END PROCESS;
END ejemplo;
4.5. Diseño de sistemas secuenciales síncronos
Los sistemas secuenciales se pueden implementar utilizando dos modelos:

 La estructura de Mealy, donde las señales de salida dependen tanto del


estado en que se encuentra el sistema, como de la entrada que se aplica en
determinado momento.
 La estructura de Moore, donde la señal de salida sólo depende del estado en
que se encuentra.

Un sistema secuencia se desarrolla a través de una serie de pasos


generalizados:
 enunciado del problema,
 diagrama de estados,
 tabla de estados,
 asignación de estados,
 ecuaciones de entrada a los elementos de memoria y
 diagrama electrónico del circuito.

65
El diseño de una máquina secuencial con VHDL se realiza a partir del
diagrama de estados, ya que solo se requieren conocer las
transiciones entre los estados y las condiciones que controlan el proceso.

La transición de un estado a otro se especifica como:

En VHDL se utiliza estructuras case-when para especificar cada estado.

Las transiciones se especifican con estructuras if-then-else .

66
En VHDL los estados se definen dentro de un tipo de dato enumerado mediante la
declaración type .
type estados is (d0, d1, d2, d3);
signal edo_presente, edo_futuro : estados;

Dentro del proceso se describe la transición del edo_presente al edo_futuro.

La declaración del proceso queda como:

proceso1: process (edo_presente, ent) begin


case edo_presente is
when d0 => sal<= ‘valsal’;
if ent=‘valent’ then
edo_futuro <= d*;
else
edo_futuro <= d*;
end if;

67
Ejemplo: Describa en VHDL
el siguiente diagrama de estados.

68
Ejercicio:
Describa en VHDL el siguiente diagrama de estados.

69
Solución al problema anterior utilizando estructuras case-when.
--EJEMPLO DE UN CONTADOR CON EVENTOS WHEN d2 =>
LIBRARY IEEE; IF x= '1' THEN
USE IEEE.STD_LOGIC_1164.ALL; edo_futuro<=d3;
USE IEEE.STD_LOGIC_unsigned.ALL; z<='1';
ENTITY MAQUINA_DE_ESTADOS IS PORT else
( clk, x : IN STD_LOGIC; edo_futuro<=d4;
z : OUT STD_LOGIC ); z<='0';
END MAQUINA_DE_ESTADOS; END IF;
ARCHITECTURE ejemplo of WHEN d3 => z<='0';
MAQUINA_DE_ESTADOS IS IF x= '1' THEN
TYPE estados is (d0, d1 ,d2, d3, d4); edo_futuro<=d3;
SIGNAL edo_presente, edo_futuro: ESTADOS; else
BEGIN edo_futuro<=d3;
PROCESO1: PROCESS (edo_presente, x) BEGIN END IF;
CASE edo_presente is WHEN d4 => z<='0';
WHEN d0 => z<='0'; IF x= '1' THEN
IF x= '1' THEN edo_futuro<=d1;
edo_futuro<=d1; else
else edo_futuro<=d4;
edo_futuro<=d4; END IF;
END IF; END CASE;
WHEN d1 => z<='0'; END PROCESS PROCESO1;
IF x= '1' THEN
edo_futuro<=d2; PROCESO2: PROCESS (CLK) BEGIN
else IF(CLK'EVENT AND CLK='1')THEN
edo_futuro<=d4; edo_presente<= edo_futuro;
END IF; end if;
END PROCESS PROCESO2; 75
END ejemplo;
Contador Mod10 utilizando estructuras case-when.
-- CONTADOR MOD 10
ENTITY MOD_10 IS
PORT( clock :IN BIT; CONTEO_MAX, q0, q1, q2, q3: OUT BIT);
END MOD_10;
ARCHITECTURE a OF MOD_10 IS
BEGIN
PROCESS (clock)
VARIABLE count: BIT_VECTOR(3 DOWNTO 0); -- define a numeric VARIABLE
VARIABLE x1: BIT;
BEGIN
IF (clock = '1' AND clock'event) THEN -- rising edge?
CASE count IS
WHEN "0000"=> count:="0001"; x1:='0';
WHEN "0001"=> count:="0010"; x1:='0';
WHEN "0010"=> count:="0011"; x1:='0';
WHEN "0011"=> count:="0100"; x1:='0';
WHEN "0100"=> count:="0101"; x1:='0';
WHEN "0101"=> count:="0110"; x1:='0';
WHEN "0110"=> count:="0111"; x1:='0';
WHEN "0111"=> count:="1000"; x1:='0';
WHEN "1000"=> count:="1001"; x1:='0';
WHEN OTHERS=> count:="0000"; x1:='1';
END CASE;
END IF;
CONTEO_MAX<=x1;
q0 <= count(0);-- transfer register contents to outputs
q1 <= count(1);
q2 <= count(2);
q3 <= count(3);
END PROCESS; 76
END a;
Ejercicio: Contador Mod 5 utilizando variables de tipo integer .

ENTITY MAQUINA_MEALLY IS
PORT( clock, x :IN BIT;
q :OUT INTEGER RANGE 0 TO 4 );
END MAQUINA_MEALLY;
ARCHITECTURE a OF MAQUINA_MEALLY IS
BEGIN
PROCESS (clock, x)
VARIABLE count: INTEGER RANGE 0 TO 4; -- define a numeric VARIABLE
BEGIN
IF (clock = '1' AND clock'event) THEN -- rising edge?
IF (x='1')THEN
IF count > 0 THEN -- less than max?
count := count - 1; -- increment value
ELSE -- must be at max or bigger
count := 4; -- reset to zero
END IF;
ELSE
IF count < 4 THEN -- less than max?
count := count + 1; -- increment value
ELSE -- must be at max or bigger
count := 0;
END IF;
END IF;
END IF;
q <= count; -- transfer register contents to outputs
END PROCESS;
END a;
77

También podría gustarte