Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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:
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
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.
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.
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).
Los FPGAs y los CPLDs presentan las mismas ventajas que los
ASIC pero con un menor costo.
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.
12
2.3. Campos de aplicación de la lógica programable.
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 80s surgieron VHDL, Verilog, ABEL 5.0, AHDL, entre otros.
14
2.5. Historia del Desarrollo de la programación en VHDL
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
Reutilización de Código
18
3. VHDL: su organización y arquitectura
19
3.1. Unidades básicas de diseño.
21
Puertos de entrada-salida
22
Entidad –
Descripción de un Puerto
¿Cómo se describe a un Puerto?
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.
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.
25
Entidad - Ejemplo: Sumador Completo
Ejemplo-1: Sumador
Cin
Entidad Cout
Puertos de Entrada A Puertos de Salida
Sumador SUMA
B
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)
28
Entidad - Ejemplo: Detector A (Uso de Vectores)
Ejemplo-4 a3
b3
a2
b2 F
a1
b1
a0
b0
4 F: out bit);
5 end circuito; 29
3.5. Declaración de entidades mediante librerías y
paquetes.
30
Las librerías se llaman como: library ieee;
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
end multiplica;
33
3.6. Arquitecturas.
Estilo funcional
Estilo estructural
34
Arquitectura - ¿Qué es?
arquitectura (architecture)
Unidad de Diseño Secundaria que describe el comportamiento interno de una
entidad.
Estilo de descripción o
Niveles de Descripción utilizados Modelización
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
Ejemplo-9
Comparador
(Ejemplo-6) Línea Arquitectura - Comparador de Igualdad de dos
Nº Datos de Long. = 2Bits
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)
+ - &
= /= < <= > <=
Menor
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.
42
4.1. Programación de estructuras básicas mediante
declaraciones concurrentes
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;
--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;
45
Solución al problema anterior utilizando estructuras del tipo when- else.
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;
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;
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;
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;
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
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.
59
Ejemplo:
Describa en VHDL el Flip-Flop D. --EJEMPLO DE FLIP_FLOP D
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
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.
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:
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.
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;
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