Está en la página 1de 17

Nombre de la práctica: Lógica Combinacional con PLD.

OBJETIVO

El alumno utilizará el software Quartus II para programar una tarjeta de desarrollo PLD
FPGA con diseños de circuitos lógicos combinatorios.

MARCO TEÓRICO

Las FPGAs por lo general, consisten en muchos módulos lógicos programables


relativamente pequeños e independientes, los cuales pueden interconectarse para crear
funciones más grandes. Es común que cada módulo pueda manejar sólo hasta cuatro o cinco
variables de entrada. La mayoría de los módulos lógicos FPGA utiliza el método de tabla de
búsqueda (LUT) para crear las funciones lógicas deseadas. Una tabla de búsqueda funciona
justo igual que una tabla de verdad, en la cual la salida puede programarse para crear la
función combinacional deseada, almacenando el 0 o 1 apropiado para cada combinación de
entrada. Los recursos de enrutamiento de la señal programable dentro del chip tienden a ser
muy variados, con muchas longitudes de ruta distintas disponibles. Los retrasos de la señal
producidos por un diseño dependen del enrutamiento actual de la señal seleccionado por el
software de programación. Los módulos lógicos también contienen registros programables y
no están asociados con ninguna terminal de E/S, sino que cada terminal de E/S se conecta a
un bloque de entrada/salida programable que, a su vez, se conecta a los módulos lógicos con
las líneas de enrutamiento seleccionadas. Los bloques de E/S pueden configurarse para
proporcionar capacidad de entrada, de salida o bidireccional, y pueden utilizarse los registros
integrados para fijar los datos entrantes o salientes. En la siguiente figura se muestra una
arquitectura general de las FPGAs. Todos los bloques lógicos y los de entrada/salida pueden
programarse para implementar casi cualquier circuito lógico. Las interconexiones
programables se realizan mediante líneas que pasan a través de las filas y columnas en los
canales entre los bloques lógicos. Algunas FPGAs incluyen bloques extensos de memoria
RAM; otras no.

P17 – Pág.1
MATERIAL Y HERRAMIENTAS A UTILIZAR EQUIPO A EMPLEAR
CANTIDAD DESCRIPCIÓN CANTIDAD DESCRIPCIÓN

1 FPGA Cyclone IV Serie 1 USB Blaster


EP4CE6E22C8N ó 1 Quartus II.
Cyclone II Serie 11 PC con Windows.
EP2C5T144C8 Manual
técnico
especificaciones. de

DESARROLLO

Resuelva los siguientes problemas de diseño lógico, mediante el lenguaje VHDL.

1. Diseñe con VHDL que un FPGA Cyclone IV Serie EP4CE6E22C8N active las
salidas LED1 y LED0 respectivamente a estado alto cuando las combinaciones de

P17 – Pág.2
entrada de un numero de cuatro bits sean divisibles entre tres y cuando sean
divisibles entre dos.

a) Una vez que concluya y no existan errores, pegue aquí la captura de pantalla de
la ventana Flow Summary.

b) Pegue aquí la captura de pantalla del Simulation Waveform Editor donde se


muestre el resultado de la simulación.

c) Pegue aquí el código fuente del diseño.


-- P R OB L E M A 1

------------------------------------------------------------
-- codigo VDHL para FPGA Cyclone IV Serie EP4CE6E22C8
-- que funcionara como detector de un numero de cuatro bits,

P17 – Pág.3
-- las salidas LED1 y LED0 se activan respectivamente, --
cuando las combinaciones de entrada sean divisibles entre --
tres y cuando sean divisibles entre dos.
------------------------------------------------------------

library ieee; use


ieee.std_logic_1164.all; use
ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;

entity pr6 is
port ( NUM : in std_logic_vector (3 downto 0);
SAL : out std_logic_vector (1 downto 0)); end
pr6;

architecture TABLA of pr6 is


begin with NUM select SAL
<= "11" when "0000",
"00" when "0001",
"10" when "0010",
"01" when "0011",
"10" when "0100",
"00" when "0101",
"11" when "0110",
"00" when "0111",
"10" when "1000",
"01" when "1001",
"10" when "1010",
"00" when "1011",
"11" when "1100",
"00" when "1101",
"10" when "1110",
"01" when "1111",
"00" when others;
end TABLA;

2. Diseñe con VHDL que un FPGA Cyclone IV Serie EP4CE6E22C8N funcione


como un sumador completo de dos números de dos bits.

a) Una vez que concluya y no existan errores, pegue aquí la captura de pantalla de
la ventana Flow Summary.

P17 – Pág.4
P17 – Pág.5
b) Pegue aquí la captura de pantalla del Simulation Waveform Editor donde se
muestre el resultado de la simulación.

P17 – Pág.6
c) Pegue aquí el código fuente del diseño.
-- P R OB L E M A 2

------------------------------------------------------------
-- codigo VDHL para FPGA Cyclone IV Serie EP4CE6E22C8
-- EPCS16N memoria de configuracion no volatil
-- sumador de dos numeros A y B de dos bits
------------------------------------------------------------

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use
IEEE.STD_LOGIC_UNSIGNED.ALL;

entity p66 is

port(
A : in std_logic_vector(1 downto 0);
B : in std_logic_vector(1 downto 0);
Ci: in std_logic;

P17 – Pág.7
S : out std_logic_vector(1 downto 0);
Cout: out std_logic);

end p66 ;

architecture abstracta of p66 is signal


SUMA: std_logic_vector(2 downto 0); begin

--Expande A, a 3bits por concanetacion, y realizar --la


suma en 3 bits.

SUMA <=('0'&A) + B + Ci;


--Tambien se pudo usar SUMA <= A + ('0'&B) + Ci;
S <= SUMA(1 downto 0);
Cout <= SUMA(2);

end abstracta;

3. Diseñe con VHDL que un FPGA Cyclone IV Serie EP4CE6E22C8N funcione


como un selector de línea de 2 a 4; el estado lógico de la salida activa es el mismo
de la señal de entrada L.

a) Una vez que concluya y no existan errores, pegue aquí la captura de pantalla de
la ventana Flow Summary.

P17 – Pág.8
b) Pegue aquí la captura de pantalla del Simulation Waveform Editor donde se
muestre el resultado de la simulación.

c) Pegue aquí el código fuente del diseño.


library ieee; use
ieee.std_logic_1164.all; use
ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;

entity p63 is

port(
A: in std_logic;
B: in std_logic;
L: in std_logic;
Y0: out std_logic;
Y1: out std_logic;
Y2: out std_logic;
Y3: out std_logic );

end;

architecture Funcional of p63 is


begin process(A,B,L)

P17 – Pág.9
begin
if (B = '0' and A = '0') then
Y0 <= L;
Y1 <= not L;
Y2 <= not L;
Y3 <= not L;

elsif (B = '0' and A = '1') then


Y0 <= not L;
Y1 <= L;
Y2 <= not L;
Y3 <= not L;

elsif (B = '1' and A = '0') then Y0 <= not L;


Y1 <= not L;
Y2 <= L;
Y3 <= not L;

elsif (B = '1' and A = '1') then


Y0 <= not L;
Y1 <= not L;
Y2 <= not L;
Y3 <= L;
else

end if;
end process;

end Funcional;

4. Construya un circuito multiplexor (selector de datos) de 2 a 1 línea. Como entrada


de datos: L0 y L1. Como entradas de control: A y B. Y como salida.

a) Una vez que concluya y no existan errores, pegue aquí la captura de pantalla de
la ventana Flow Summary.

P17 – Pág.10
b) Pegue aquí la captura de pantalla del Simulation Waveform Editor donde se
muestre el resultado de la simulación.

c) Pegue aquí el código fuente del diseño.


library ieee; use
ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;

P17 – Pág.11
entity p64 is

port (
S1,S0 : in std_logic;
L3,L2,L1,L0 : in std_logic;
Y : out std_logic
);

end;

architecture Flujo_Datos of p64


is begin process
(L0,L1,L2,L3,S0,S1) is begin
if (S0 ='0' and S1 = '0') then
Y <= L0;
elsif (S0 ='1' and S1 = '0') then
Y <= L1;
elsif (S0 ='0' and S1 = '1') then
Y <= L2;
else
Y <= L3;
end if;

end process; end


Flujo_Datos;

5. Diseñe con VHDL que un FPGA Cyclone IV Serie EP4CE6E22C8N funcione


como un circuito detector de paridad impar de un numero de 3 bits, activando la
salida E a estado alto, cuando se detecte un error.

a) Una vez que concluya y no existan errores, pegue aquí la captura de pantalla de
la ventana Flow Summary.

P17 – Pág.12
b) Pegue aquí la captura de pantalla del Simulation Waveform Editor donde se
muestre el resultado de la simulación.

c) Pegue aquí el código fuente del diseño.

library ieee; use


ieee.std_logic_1164.all; use
ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;

P17 – Pág.13
entity p65 is

port (
NUM2, NUM1, NUM0: in std_logic;
BPNUM: in std_logic;
ERROR: out std_logic );

end;

architecture TABLA of p65 is


begin
ERROR<= '1' when (BPNUM='0' and NUM2='0' and NUM1='0' and
NUM0='0') else
'1' when (BPNUM='0' and NUM2='0' and NUM1='1' and NUM0='1') else
'1' when (BPNUM='0' and NUM2='1' and NUM1='0' and NUM0='1') else
'1' when (BPNUM='0' and NUM2='1' and NUM1='1' and NUM0='0') else
'1' when (BPNUM='1' and NUM2='0' and NUM1='0' and NUM0='1') else
'1' when (BPNUM='1' and NUM2='0' and NUM1='1' and NUM0='0') else
'1' when (BPNUM='1' and NUM2='1' and NUM1='0' and NUM0='0') else
'1' when (BPNUM='1' and NUM2='1' and NUM1='1' and NUM0='1') else
'0';

end TABLA;

6. Diseñe con VHDL que un FPGA Cyclone IV Serie EP4CE6E22C8N funcione


como un circuito decodificador de BCD a siete segmentos.

a) Una vez que concluya y no existan errores, pegue aquí la captura de pantalla de
la ventana Flow Summary.

P17 – Pág.14
b) Pegue aquí la captura de pantalla del Simulation Waveform Editor donde se
muestre el resultado de la simulación.

c) Pegue aquí el código fuente del diseño.

P17 – Pág.15
library ieee; use
ieee.std_logic_1164.all; use
ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;

entity p66 is
port ( DIG1: out std_logic;
BCD : in std_logic_vector (3 downto 0);
CODIGO : out std_logic_vector (7 downto 0)); end;

----------------------------------------------------------
-- codigo son 8 terminales para controlar el display, el
-- el display es de anodo comun
----------------------------------------------------------

architecture TRUTH_TABLE of p66 is


begin with BCD
select
----------- DP G F E D C B A

CODIGO <= "11000000" when "0000", -- 0


"11111001" when "0001", -- 1
"10100100" when "0010", -- 2
"10110000" when "0011", -- 3
"10011001" when "0100", -- 4
"10010010" when "0101", -- 5
"10000010" when "0110", -- 6
"11111000" when "0111", -- 7
"10000000" when "1000", -- 8
"10010000" when "1001", -- 9
"10111111" when others; -- -

DIG1 <= '0'; -- activa display

end TRUTH_TABLE;

P17 – Pág.16
P17 – Pág.17

También podría gustarte