You are on page 1of 33

1

MANUAL DE PRÁCTICAS

PARA LA
PROGRAMACION EN
HDL

CARRERA DE MECATRÓNICA

1
2

OBJETIVOS:

 El alumno aprenderá a programar en HDL para después enlazar dicha


programación hacia una memoria Spartan.

NOMBRE DE LA PRÁCTICA; REALIZAR LA PROGRMACION EN HDL DE LA


COMPUERTA AND Y DESPUES COMPROBABAR SU FUNCIONAMIENTO EN LA
MEMORIA SPATAN.

OBJETIVOS;

 Que el alumno realice la programación en HDL de la compuerta Not.

Desarrollo de la práctica:

1. Programación de la compuerta NOT en HDL.

library ieee;//Indica la librería//


use ieee.std_logic_1164.all;
entity compuerta_not is //Nombre del programa//
port( //Declaración de variables in, out//
M: in std_logic; // Variable de entrada//
X: out std_logic // Variable de salida//
);
end compuerta_not;//Cierre de la declaración de variables//
architecture compuerta of compuerta_not is // Arquitectura//
begin //Comienzo del programa o función de Boole//
X<= not(M);// funcion//
end compuerta;//Cierre de programa//

Comportamiento en forma gráficamente la compuerta NOT.


En la ilustración 1, se presenta la gráfica de respuesta de
la compuerta not HDL.

2
3

1. Graficas de las respuestas de la compuerta not en HDL

Programación de la compuerta NOT en la memoria Spartan.

Antes que nada el alumno deberá instalar el programa de


XILINX y Adept, una vez instalado el programador puede
empezar.

Procedimiento.

1._ El alumno ubicara el cursor en File y dara click, en ese


momento se desplegara una barra de opciones y seleccionara
NEW PROJECT.

Ilustracion 2.

Ilustración 2.

2._Instantaniamente se desplegara una ventana la cual


indicara la creacion de un nuevo archivo, tu le daras
cualquier nonbre cual sea “compuerta_not” y le daras enter.

Ilustarcion 3.

3
4

Ilustración 3.

3._Nuevamente te abrirá otra pantalla la cual tú podrás


modificar una otra vez. En esta ventana tu vas a describir el
tipo de memoria que utilizas, empaquetamiento, familia, etc.

Nosotros le daremos estas características ya que estamos


programando en una memoria Spartan XC3S11E.

Product Category: ALL

Family: Spartan3E

Device: XC3S11E

Package: TQ144

Speed: -4

Después de modificar estos parámetros le daremos Next y


Finish, el nuevo documento quedara de esta manera.

Ilustarcion 4.

4
5

Ilustración 4.

4._ Aparecerá una ventana de esta forma y buscaremos el


icono de Add source que se encuentra en la parte superior
izquierda de la pantalla.

Ilustarción 5.

Ilustración 5.

5
6

5._Este comando nos permitirá buscar el archivo de HDL que tu


hiciste, tu lo podrás encontrar en donde lo guardaste, cuando
hayas encontrado la carpeta tu abrirás una subcarpeta carpeta
con el nombre de SRC y encontraras un archivo al cual le
doble darás clic.

Ilustración 6, 7.

Ilustración 7.

Ilustración 6.

Inmediatamente te abrira muchas domumentos lo que indica que


esta adjuntando todos los archivos.

Ilustracion 8.

Ilustración 8.

6
7

5._Despues te ubicaras en Synthesize- XST y darás doble clic,


podrás visualizar un círculo azul que te indicara que esta
compilando la información, después haras lo mismo con la
opción Implement Design y configure programming File.

Si las tres opciones te marcan de color verde esto indica que


tu programa es corecto.

Ilustracion 9.

Ilustración 9.

6._Después te ubicaras en User Constraints, le daras doble


clic a Create timimg Constraints, te abrirá una pantalla a la
cual le darás yes, OK y cerraras después la pantalla.
Ilustración 10.

Ilustración 10.

7
8

7._Después le darás nuevamente doble clic a I/O Panning”


opción segunda” esperaras un momento y te abrirá otro
programa.

Ilustracion 11.

Ilustración 11.

8._En este nuevo programa podrás definir las entradas y


salidas, así mismo podrás visualizar la parte interna la
memoria Spartan.

Ilustracion 12.

Ilustración 12.

8
9

9._En esta nueva ventana nosotros podemos establecer las


entradas y salidas. Los swicht siempre van a usarse como
entradas y los led como salidas.

Ilustracion 13, 14, 15.

Ilustración 13.

Ilustración 14.

Ilustración 15.

En estas ilustraciones nosotros podemos alcanzar a percibir


que las entradas y salidas ya están definidas.

10._ Cuando tú ya señalaste las entradas y salidas ahora se


proseguirá a guarda los cambios y cerrar la ventana.

Ilustracion 16.

Ilustración 16.

9
10

11._ Después te posicionaras en las ventanas de Xilinx y


compilaras nuevamente el programa.

Ilustracion 17.

Ilustración 17.

12._ Cuando ya este completamente compilado cerraras el


programa y te iras al programa Adept, pero antes de que lo
abras conectaras tu memoria Spartan.

Ilustracion 18.

Ilustración 18.

13._Una vez conectada la Spartan abrirás el programa Adept


y buscaras tu archivo con el nombre que le asignaste.

Ilustracion 14.

10
11

Ilustración 14.

Una vez programado el programa en tu memoria Spartan podrás


visualizar la comprobación de la compuerta NOT.

Ilustración 15, 16.

Tabla de verdad

Ilustración 17.

Ilustración 15.

11
12

Ilustración 17

Ilustración 16.

11
13

2._ Programación de la compuerta AND en HDL.

Para poder programar dicha compuerta primero se elaborar la


programación en HDL y después transportarlo a Xilinx, el
procedimiento es el mismo para la programación en la memoria
Spartan.

Programación de la compuerta AND.

Library ieee;
use ieee.std_logic_1164.all;
entity compuerta_and is
port(
M: in std_logic;
Y: in std_logic;
X: out std_logic
);
end compuerta_and;
Architecture
begin
X<= M and Y;
end compuerta;

Comprobación de forma física de la compuerta AND.

Ilustración 1, 2.

TABLA DE VERDAD

Ilustración 3.

Ilustración 1. Ilustración 2.
Ilustración 3.

12
14

3._ Programación de la compuerta OR en HDL.

Para poder programar dicha compuerta primero se elaborar la


programación en HDL y después transportarlo a Xilinx, el
procedimiento es el mismo para la programación en la memoria
Spartan.

Programación de la compuerta OR.

Library ieee;
use ieee.std_logic_1164.all;
entity compuerta_or is
port(
A: in std_logic;
B: in std_logic;
C: out std_logic
);
end compuerta_or;
Architecture
begin
C<= A and B;
end compuerta;

Comprobación de forma física de la compuerta AND.

Ilustración 1, 2.

TABLA DE VERDAD

Ilustración 1. Ilustración 2.
Ilustración 4.

13
15

4._ Programación de la compuerta NAND en HDL.

Para poder programar dicha compuerta primero se elaborar la


programación en HDL y después transportarlo a Xilinx, el
procedimiento es el mismo para la programación en la memoria
Spartan.

Programación de la compuerta NAND.

Library ieee;
use ieee.std_logic_1164.all;
entity compuerta_nand is
port(
A: in std_logic;
B: in std_logic;
C: out std_logic
);
end compuerta_or;
Architecture
begin
C<= A nand B;
end compuerta;

Comprobación de forma física de la compuerta nand.

Ilustración 1, 2.

TABLA DE VERDAD ILUSTRACION 3.

Ilustración 1. Ilustración 2.
Ilustración 5.

14
16

5._ Programación de la compuerta NOR en HDL.

Para poder programar dicha compuerta primero se elaborar la


programación en HDL y después transportarlo a Xilinx, el
procedimiento es el mismo para la programación en la memoria
Spartan.

Programación de la compuerta NOR.

Library ieee;
use ieee.std_logic_1164.all;
entity compuerta_nor is
port(
A: in std_logic;
B: in std_logic;
C: out std_logic
);
end compuerta_nor;
Architecture
begin
X<= A nand B;
end compuerta;

Comprobación de forma física de la compuerta nor.

Ilustración 1, 2.

TABLA DE VERDAD ILUSTRACION 3.

Ilustración 6. Ilustración 1. Ilustración 2.

15
17

5._ Programación del siguiente mapa de karnaugh con 4 variables en HDL.

Ilustración 1.

Tomando en cuenta que 0,1,2,3,4,5 almacenan un 1.

1._Reducir mediante un mapa de Karnauhg.

AB AB AB AB
00 01 11 10
CD 1 1 1 1 0
00
CD 1 1 X X
01 A C
CD X X X X
11
CD X X X X
10
Ilustración 1.

2._ la Reducción del mapa es igual W= A C

3._Procegir hacer la programación en HDL, se puede decir que


el mismo procedimiento y programación de lo anterior solo que
aumentaran el número de entradas.

Programación del mapa de karnauhg.

Library ieee;
use ieee.std_logic_1164.all;
entity mapa_4variables is
port(
A: in std_logic;
B: in std_logic;
C: in std_logic;
D: in std_logic;
W: out std_logic
);
end mapa_4variables;
Architecture
begin
W<= A and C

end mapa_4variables;

16
18

Mapa de karnauhg ilustración 2.

AB AB AB AB
00 01 11 10
CD 1 1 1 1
00
CD 1 1 X X
01
CD X X X X
11
CD X X X X
10
Ilustración 2.

Comprobación de forma física del mapa de karnauhg.

Ilustración 1, 2.

Si la persona en este caso no sabe comprobar el resultado,


debe seguir el siguiente procedimiento.

Ejemplo 1.

Si se desea comprobar que en la posición 0 del mapa de


karnauhg hay un 1 solo de deben tener los switch A, B, C, D
en bajo es decir en 0, esto permitirá que el led de salida
prenda.

AB AB
00 01
CD 1 1
00
CD 1 1
01

Ejemplo 2. Comprobar que en la posición 2 del mapa hay un 1.


El swicht C, D Y A deben estar en cero y el swicht B en uno.

Comprobación de forma física del mapa, Ilustración 3.

Ilustración 3.

17
19

Solucionar mediante una programación en HDL los siguientes


módulos.
Módulo de 16, 10,8 ,6.
Estos ejercicios hacen referencia o semejan a la función de
una máquina de estado “máquina de mealy” la cual va avanzar
o retroceder cuando introduzcamos algún valor, que puede ser
un 0 o 1.
En este caso cuando introduzcamos un 0 se posicionara en el
mismo lugar “estado presente”, en cambio cuando es 1 va
avanzar “estado siguiente”.
Ejemplo.

Módulo 16.
library IEEE;

use IEEE.std_logic_1164.all;
entity CON4_ASC_DES is
port(
U: in std_logic;
RST: in std_logic;
CLK: in std_logic;
S: out std_logic_vector(3 downto 0)// esto nos indica el
número de variables a utilizar es decir cuatro variables 0,1,2,3//

);
end CON4_ASC_DES;
architecture simple of CON4_ASC_DES is
signal Qp,Qn: std_logic_vector(3 downto 0);//Qn,Qp indican
estados internos en el sistema//

begin
Combinacional: Process(Qp,U)//indica cuales son las variables que se
van a procesas es decir el estado próximo y la entrada que se va ingresar//

begin
Case Qp is

18
20

when"0000"=>if(U='0') then// indica estados de ubicación//

Qn<="0000";
else
Qn<="0001";
end if;
when"0001"=>if(U='0') then
Qn<="0001";

else
Qn<="0010";
end if;
when"0010"=>if(U='0') then
Qn<="0010";
else
Qn<="0011";
end if;
when"0011"=>if(U='0') then
Qn<="0011";
else
Qn<="0100";
end if;
when"0100"=>if(U='0') then
Qn<="0100";
else
Qn<="0101";
end if;
when"0101"=>if(U='0') then
Qn<="0101";

19
21

else
Qn<="0110";

end if;
when"0110"=>if(U='0') then
Qn<="0110";
else
Qn<="0111";
end if;
when"0111"=>if(U='0') then
Qn<="0111";

else
Qn<="1000";

end if;
when"1000"=>if(U='0') then
Qn<="1000";

else
Qn<="1001";

end if;
when"1001"=>if(U='0') then
Qn<="1001";
else
Qn<="1010";

end if;
when"1010"=>if(U='0') then
Qn<="1010";

else
Qn<="1100";

20
22

end if;
when"1100"=>if(U='0') then
Qn<="1100";
else
Qn<="1101";
end if;
when"1101"=>if(U='0') then
Qn<="1101";
else
Qn<="1110";
end if;
when"1110"=>if(U='0') then
Qn<="1110";
else
Qn<="1111";

end if;

when others=> if (U='0') then


Qn<="0000";
end if;
end case;
S<=Qp;
end process Combinacional;
Secuencial: process(RST,CLK)
begin
if(RST='0') then //esta condición indica que si nosotros
introducimos un 0 automáticamente se transladara al esta inicial sin importar que
tenga almacenado.

Qp<="0000";

21
23

elsif(CLK'event and CLK='0') then


Qp<=Qn;//en otro caso si no es cero que se traslade a otro
estado siguiente.

end if;
end process Secuencial;
end simple;

En la ilustración 1 se muestra el comportamiento grafico del


módulo 16 y los estados establecidos.
En este caso si introducimos un 1 avanzara en el siguiente
estado.

Ilustración 1

Palabras desconocidas.

RST: Esta palabra se le da el nombre de reset. Recordemos que


las máquinas de estado contienen reset.

CLK: Esta palabra indica señal de reloj, ya que si recordamos


en u sistema síncrono debe tener una señal de reloj o también
llamados pulsos de reloj.

Downto: es utilizado e HDL para poder definir en conjunto de


entradas múltiples en una sola entrada.

Condición CASE: Esta condición nos va permitir elegir entre


varias opciones, si no cumple la condición que yo quiero que
cumpla que haga otro cosa.

IF: Es una condición nos sirve para elegir entre dos opciones
posibles.

Nota: En este caso en la programación a la Spartan no se


podrá visualizar ya que la rapidez en la memoria es 15 KH lo

22
24

que indica que es muy rápida para poder observar el cambio de


estados.

Recuerda que si la programación en HDL es correcta también


será en la memoria Spartan.

Ejemplo 2

Módulo 8

library IEEE;

use IEEE.std_logic_1164.all;

entity CON8_ASC is

port(

U: in std_logic;

RST: in std_logic;

CLK: in std_logic;

S: out std_logic_vector( 2 downto 0)

);

end CON8_ASC;

architecture simple of CON8_ASC is

signal Qp,Qn: std_logic_vector(2 downto 0);

begin

Combinacional: Process(Qp,U)

begin

Case Qp is

when"000"=>if(U='0') then

Qn<="000";

else

Qn<="001";

23
25

end if;

when"001"=>if(U='0') then

Qn<="001";

else

Qn<="010";

end if

when"010"=>if(U='0') then

Qn<="010";

else

Qn<="011";

end if;

when"011"=>if(U='0') then

Qn<="011";

else

Qn<="100";

end if;

when"100"=>if(U='0') then

Qn<="100";

else

Qn<="101";

end if;

when"101"=>if(U='0') then

Qn<="101";

else

Qn<="110";

24
26

end if;

when"110"=>if(U='0') then

Qn<="110";

else

Qn<="111";

end if;

when others=> if (U='0') then

Qn<="000";

end if;

end case;

S<=Qp;

end process Combinacional;

Secuencial: process(RST,CLK)

begin

if(RST='0') then

Qp<="000";

elsif(CLK'event and CLK='0') then

Qp<=Qn;

end if;

end process Secuencial;

end simple;

En la ilustración 2 se muestra el comportamiento grafico del


módulo 8 y los estados establecidos.

25
26

Ilustración 2

Ejemplo 3.

Módulo 6

library IEEE;

use IEEE.std_logic_1164.all;

entity CON8_ASC is

port(

U: in std_logic;

RST: in std_logic;

CLK: in std_logic;

S: out std_logic_vector( 2 downto 0)

);

end CON8_ASC;

architecture simple of CON8_ASC is

signal Qp,Qn: std_logic_vector(2 downto 0);

begin

Combinacional: Process(Qp,U)

begin

Case Qp is

when"000"=>if(U='0') then

Qn<="000";

else

26
27

Qn<="001";

end if;

when"001"=>if(U='0') then

Qn<="001";

else

Qn<="010";

end if;

when"010"=>if(U='0') then

Qn<="010";

else

Qn<="011";

end if;

when"011"=>if(U='0') then

Qn<="011";

else

Qn<="100";

end if;

when"100"=>if(U='0') then

Qn<="100";

else

Qn< ="101";

end if;

when"101"=>if(U='0') then

Qn<="101";

else

27
28

Qn<="101";

end if;

when others=> if (U='0') then

Qn<="000";

end if;

end case;

S<=Qp;

end process Combinacional;

Secuencial:process(RST,CLK)

begin

if(RST='0') then

Qp<="000";

elsif(CLK'event and CLK='0') then

Qp<=Qn;

end if;

end process Secuencial;

end simple;

En la ilustración 3 se muestra el comportamiento grafico del


módulo 16 y los estados establecidos.

Ilustración 3

28
29

library IEEE;

use IEEE.std_logic_1164.all;

entity CON4_ASC_DES is

port(

U: in std_logic;

RST: in std_logic;

CLK: in std_logic;

S: out std_logic_vector( 3 downto 0)

);

end CON4_ASC_DES;

architecture simple of CON4_ASC_DES is

signal Qp,Qn: std_logic_vector(3 downto 0);

begin

Combinacional: Process(Qp,U)

begin

Case Qp is

when"0000"=>if(U='0') then

Qn<="0000";

else

Qn<="0001";

end if;

when"0001"=>if(U='0') then

Qn<="0001";

29
30

else

Qn<="0010";

end if;

when"0010"=>if(U='0') then

Qn<="0010";

else

Qn<="0011";

end if;

when"0011"=>if(U='0') then

Qn<="0011";

else

Qn<="0100";

end if;

when"0100"=>if(U='0') then

Qn<="0100";

else

Qn<="0101";

end if;

when"0101"=>if(U='0') then

Qn<="0101";

else

Qn<="0110";

end if;

when"0110"=>if(U='0') then

Qn<="0110";

30
31

else

Qn<="0111";

end if;

when"0111"=>if(U='0') then

Qn<="0111";

else

Qn<="1000";

end if;

when"1000"=>if(U='0') then

Qn<="1000";

else

Qn<="1001";

end if;

when others=>if(U='0') then

Qn<="1001";

end if; end

case;

Qn<="0000";

end process Combinacional;

Secuencial: process(RST,CLK)

begin

if(RST='0') then

Qp<="0000";

elsif(CLK'event and CLK='0') then

Qp<=Qn;

31
32

end if;

end process Secuencial;

end simple;

En la ilustración 4 se muestra el comportamiento grafico del


módulo 16 y los estados establecidos.

Ilustración 4

Este manual esta encaminado al aprendisaje del estudiante.

Elaboradoa por el alumno Miguel Angel San Martin Ayala e


inspeccionado por el profesor Julio Rodriguez.

32

You might also like