Anda di halaman 1dari 21

Universidad Nacional de

Ingeniera

Laboratorio N.2de FPGA


(Electrnica Digital I)
Profesor: Ing. Carlos Ortega
Huembes.

Keller Josu Jiron Ruiz.


2013-61421
Jonathan Efran Fuentes.
Objetivo

Comprender la estructura de mdulos en el lenguaje VHDL y


la forma de conexin hacia otros mdulos mediante un
ejemplo de lgica combinacional.

Medios a utilizar
Por cada prctica y por cada puesto de laboratorio, los
materiales a utilizar es:
Cantidad
1
1
1

Descripcin
Computadora
Tarjeta de desarrollo Basys2 Digilent
Software Xilinx ISE Webpackv14.7

Introduccin
En VHDL un sistema digital est compuesto por la
interconexin de un conjunto de mdulos. Estos son unidades
lgicas donde se puede especificar la descripcin de un
circuito digital, sea sencillo o complejo, de tal manera que
puedan utilizarse para construir diseos de mayor
complejidad, creando lo que se denomina un diseo con
jerarqua. En esta prctica aprenderemos la estructura bsica
de un mdulo y la forma en cmo se conecta a otros mdulos.

Actividades previas
Tabla de verdad del mdulo ANDOR (Figura 1).
A
0
0
0
0
1
1
1
1

B
0
0
1
1
0
0
1
1

C
0
1
0
1
0
1
0
1

F
0
1
0
1
0
1
1
1

Desarrollo de la prctica
Crear un nuevo proyecto ISE
En esta prctica vamos a crear un mdulo llamado ANDOR
con tres entradas (A, B y C) y una salida (F), despus
usaremos dos veces este mismo mdulo en otro mdulo
superior llamado LOGIC.
Importante: Seguir las instrucciones del laboratorio 1
para crear un nuevo proyecto en ISE.
1. Cerrar cualquier proyecto que est abierto y crear un
proyecto nuevo llamado ANDOR. El mdulo debe tener 3
entradas (A, B, C) y una salida (F).
U1

U2

Figura 1. Diagrama de los mdulos ANDOR y LOGIC.

2. Contenido del archivo ANDOR mostrado a continuacin:


entity ANDOR is
port(
A
:
in std_logic;
B
:
in std_logic;
C
:
in std_logic;
F
:
out std_logic
);
end ANDOR;
architecture Behavioral of ANDOR is
begin
F <= (A and B) or C;
end Behavioral;

3. Realizar la simulacin adecuada para comprobar el


resultado del archivo ANDOR. Para probarlo tienen que
generar las posibles combinaciones para las 3 entradas.
4. Guardar los cambios y correr el programa. El resultado de la
Simulacin se muestra a continuacin en la figura.

Creacin de Instancias en VHDL

5. Una vez creado el mdulo ANDOR, este ser utilizado para


un archivo top que se encontrara en un nuevo proyecto, el
cual instanciar dos veces ese modulo para formar uno
mayor.
6. Realizar un nuevo proyecto llamado LOGIC. El mdulo debe
tener 5 entradas (J, K, L, M, N) y dos salidas (P, Q).

7. Agregar el cdigo ANDOR.vhd al proyecto LOGIC, es decir


quedaran dos archivos .vhd al proyecto a como se ve en la
imagen.

8. El archivo LOGIC para este proyecto servir de archivo top


dentro de la jerarqua de archivos, la funcin de este ser
instanciar (llamar) a los dems archivos. Para hacer esto,
miraremos la estructura del cdigo de LOGIC.
entity LOGIC is
Port ( J : in STD_LOGIC;
K : in STD_LOGIC;
L : in STD_LOGIC;
M : in STD_LOGIC;
N : in STD_LOGIC;
P : out STD_LOGIC;
Q : out STD_LOGIC);
end LOGIC;
architecture Behavioral of LOGIC is
begin
end Behavioral;

Ac se agregan los
componentes

Ac se instancian los
archivos que se utilizan en el
proyecto

9. Para poder instanciar el cdigo ANDORse utiliza una opcin

del ISE que generara el codigo referente a ese archivo. Se


selecciona
el
mdulo
ANDOR,
luego
en
el
desplegableDesignUtilities se ejecutara la opcin View HDL
InstantiationTemplate a como se muestra en la imagen .

10. El codigo generado se muestra a continuacin y se


deber insertar en el codigo de LOGIC en sus respectivas
reas: Componentes e Instancias.
COMPONENT ANDOR
PORT(
A : IN std_logic;
B : IN std_logic;
C : IN std_logic;
F : OUT std_logic
);
END COMPONENT;
Inst_ANDOR: ANDOR PORT MAP(
A => ,
B => ,
C => ,
F =>
);

11. El cdigo anterior se insertar en el archivo LOGIC


quedando de la siguiente manera:
entity LOGIC is
Port ( J : in STD_LOGIC;
K : in STD_LOGIC;
L : in STD_LOGIC;
M : in STD_LOGIC;
N : in STD_LOGIC;
P : out STD_LOGIC;
Q : out STD_LOGIC);
end LOGIC;
architecture Behavioral of LOGIC is
COMPONENT ANDOR
PORT(
A : IN std_logic;
B : IN std_logic;
C : IN std_logic;
F : OUT std_logic

Componente del
Archivo ANDOR

);
END COMPONENT;
signal F1 : std_logic;
begin
U1: ANDOR
A =>
B =>
C =>
F =>
);
U2: ANDOR
A =>
B =>
C =>
F =>
);

PORT MAP(
J,
K,
L,
F1
PORT MAP(
F1,
M,
N,
Q

Instancias del Archivo


ANDOR para generar el
bloque final

P <= F1;
endBehavioral;

Explicacin: Para poder generar el Bloque Final llamado


LOGIC mostrado en la Figura 1, se tuvo que mandar a llamar
el archivo ANDOR mediante un componente en el cual se
expresan las entradas y salidas de ese archivo. La parte de
Instancias es solamente la cantidad de veces que se repite el
bloque ANDOR, en este caso seria 2 veces uniendo las salidas
con sus respectivas entradas.
En el caso de que una salida sea utilizada para multiples
conexiones tanto interna como externa, es recomendable
crear una seal para que pueda manejar los estados de otra
manera.
12. Una vez finalizado el codigo, comprobaremos el
diagrama de bloque final mediante la herramienta de Xilinx.
Seleccionado el archivo top llamado LOGIC escoger la
opcin View RTL Schematic del desplegable de SynthesizeXST y darle clic a como se muestra en la figura.

13. Le aparecer una ventana para seleccionar los archivos,


escoja la opcin de archivo top para poder ejecutarlo.
Despus de cierto tiempo aparece el bloque final con todas
sus conexiones a como se aprecia en la figura.

Simulacin de un circuito digital


1. Agregar un archivo de simulacion .vhd al proyecto LOGIC
para poder simular el comportamiento del circuito.
Recuerde que es un circuito combinacional, asi que tendr

que comentar aquellas lneas de codigo que involucren


seales de tiempo (reloj)
Implementar el diseo en FPGA
14. Aadir un archivo .ucf al mdulo principal siguiendo los
pasos del laboratorio 1.
15. En el editor de texto, escribir las siguientes asignaciones:
net
net
net
net
net
net
net

"J"
"K"
"L"
"M"
"N"
"P"
"Q"

loc
loc
loc
loc
loc
loc
loc

=
=
=
=
=
=
=

"G3" ;
"B4" ;
"K3" ;
"L3" ;
"P11";
"P6" ;
"P7" ;

16. Comprobar si la sintaxis es correcta.


17. Comprobar el funcionamiento del circuito en la tarjeta de FPGA.

Actividades propuestas
Prctica
1. Realizar un proyecto que implemente un sistema combinacional
que sea capaz de sumar dos bits y presente en su salida un bit de
acarreo. Este sistema se le conoce como Semi Sumador
(HalfAdder) y tendr el siguiente comportamiento segn su tabla de
verdad.
Entradas
A
0
0
1
1

Salidas
B

0
1
0
1

Cout
0
0
0
1

S
0
1
1
0

El cdigo realizado para la tabla antes mostrada seria el siguiente:

2. Crear la simulacin adecuada para poder implementarlo despus


en la tarjeta FPGA.
Para poder crear la simulacin adecuada se selecciona primera un
new source y se crea un archivo VHDL test bench con el nombre
semisumador_tb:

ARCHITECTURE behavior OF sumador_tb IS


-- ComponentDeclarationfortheUnitUnder Test (UUT)
COMPONENT sumador
PORT(
a : IN std_logic;
b : IN std_logic;
cout : OUT std_logic;
s : OUT std_logic
);
END COMPONENT;
-- Inputs
signal
a : std_logic
:= '0';
El
siguiente
paso
es crear el programa que har que nuestra
simulacin
se cree
correctamente tomando en cuenta las posibles
signal b : std_logic
:= '0';
combinaciones que seran cuatro a como se puede apreciar en la
-Outputs
tabla antes mostrada.
signal cout : std_logic;
LIBRARY ieee;
signal s : std_logic;
USE ieee.std_logic_1164.ALL;
-- No clocksdetected in portlist. Replace<clock>belowwith
-- appropriateportname
-- Uncommentthefollowinglibrarydeclarationifusing
-- constant<clock>_period : time := 10 ns;
-- arithmeticfunctionswithSignedorUnsignedvalues
BEGIN
--USE ieee.numeric_std.ALL;
-- InstantiatetheUnitUnder Test (UUT)
ENTITY sumador_tb IS
uut: sumador PORT MAP (
END sumador_tb;
a => a,
b => b,
cout => cout,
s => s
);

stim_proc: process
begin
-- holdresetstatefor 100 ns.
waitfor 100 ns;
-- waitfor<clock>_period*10;
-- insertstimulushere
a<= '0';
b<= '1';
waitfor 100 ns;
a<= '1';
b<= '0';
waitfor 100 ns;
a<= '1';
b<= '1';
waitfor 100 ns;
a<= '0';
b<= '0';
waitfor 100 ns;
wait;
endprocess;

De esta manera se procede a chequear la sintaxis del programa y se


corre la simulacin, como resultado tendremos el siguiente grfico:

De la misma manera se procede a crear el siguiente archivo de


nombre semisumador.ucf y se le asignarn los pines de entrada y
salida de la FPGA.

3. Crear nuevo proyecto que implemente el diagrama de bloques de


un Sumador Completo (Full Adder) segn la siguiente figura:
Como ya se tiene elaborado el semisumador y ahora lo que se
desea es hacer el sumador total (TOP) solamente se agrega el
semisumador de la siguiente manera:
Se crea un nuevo archivo VHDL module el cual llevara por
nombre sumadorT.
Se le asignarn las nuevas entradas que sern p, m, n y Las
salidas s y cout.
Luego al archivo de semisumador se le selecciona donde dice
view HDL instatiationtemp para asi poder observar el cdigo y
luego agregrselo al archivo de sumadorT de la siguiente
manera:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entitysumadorTis
Port ( p : in STD_LOGIC;
m : in STD_LOGIC;
n : in STD_LOGIC;
s : out STD_LOGIC;
cout : out STD_LOGIC);
endsumadorT;
architectureBehavioral of sumadorTis
COMPONENT sumador
PORT(
a : IN std_logic;
b : IN std_logic;

cout : OUT std_logic;


s : OUT std_logic
);
END COMPONENT;
signal s1: std_logic;
signal cout1: std_logic;
signal cout2: std_logic;
begin
u1: sumador PORT MAP(
a => p,
b => s1,
cout => cout2 ,
s => s
);
u2: sumador PORT MAP(
a => m,
b => n,
cout => cout1 ,
s => s1
);
cout<= cout2 or cout1;
endBehavioral;

El siguiente paso sera chequear la sintaxis y crear el esquemtico


para as observar que el sumadorT sera el TOP y contendra a u1 y
a u2, la figura seria de la siguiente manera:

El siguiente paso sera realizar la simulacin para ver si esta


correcto el sumadorT, primero se cra un archivo .ucf a como ya lo
hemos hecho antes y luego se agregara al cdigo todas las
posibles combinaciones de las entradas que seran ocho
combinaciones:
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY sumador_tb IS
END sumador_tb;
ARCHITECTURE behavior OF sumador_tb IS
-- ComponentDeclarationfortheUnitUnder Test (UUT)
COMPONENT sumador
PORT(
a : IN std_logic;
b : IN std_logic;
cout : OUT std_logic;
s : OUT std_logic
);
END COMPONENT;
-- Inputs
signal a : std_logic := '0';
signal b : std_logic := '0';
-- Outputs
signalcout : std_logic;

signal s : std_logic;
BEGIN
-- InstantiatetheUnitUnder Test (UUT)
uut: sumador PORT MAP (
a => a,
b => b,
cout => cout,
s => s
);

-- Stimulusprocess
stim_proc: process
begin
-- holdresetstatefor 100 ns.
waitfor 100 ns;
-- insertstimulushere
a<= '0';
b<= '1';
waitfor 100 ns;
a<= '1';
b<= '0';
waitfor 100 ns;
a<= '1';
b<= '1';
waitfor 100 ns;
a<= '0';
b<= '0';
waitfor 100 ns;
wait;
endprocess;
END;

Ya realizado el cdigo se procede a chequear la sintaxis del


programa, si esta correcta se procede a la simulacin, la imagen de
la simulacin del sumadorT seria:

De esta manera se concluye con la prctica del laboratorio obteniendo


de manera satisfecha todos los resultados deseados y esperando
obtener siempre los mejores conocimientos.

Actividades de aprendizaje
Indague acerca del lenguaje VHDL. Conteste.

Cules son las partes de un cdigo VHDL? Describa brevemente


cada una de sus partes por ejemplo entidad, arquitectura,
componentes, etc.

Entidad: Define entradas y salidas.

Arquitectura: Se declara como funciona un bloque.

Componentes: La entidad del bloque anterior.

Instancias: Las veces que se manda a llamar el componente.

Procesos: Son equivalentes a una funcin, igual a las de el lenguaje


C

Anda mungkin juga menyukai