Você está na página 1de 13

Reporte Practica 5

Integrantes

ABSTRACT

1. Acosta Tolentino Alan

In developing this project we implement theory into practice


records, taking into account the universal registration and called,
PIPO (parallel input parallel output), PISO (parallel input serial
output), SISO (serial input serial output) SIPO (serial input parallel
output).

2.-Mondragon Romn Salomon Alberto


UPIITA -IPN
Grupo 2MV5

For the implementation we use a Basys 2 for the implementation of


the satellite dish using a motor unipolar steps and their respective
power stage.
RSUM

Figura 1.-Visualizacion y logotipo de la Baasys 2

RESUMEN

En el desarrollo de este proyecto implementamos la teora de los


registros a la practica, tomando en cuenta el registro universal y los
llamados,PIPO(entrada paralela salida paralela),PISO(entrada
paralela
salida
serial),SISO(entrada
serial
salida
serial),SIPO(entrada serial salida paralela).
Para la implementacin usamos una Basys 2, para la
implementacin de la antena parablica se uso un motor a pasos
unipolar y su respectiva etapa de potencia.

Dans l'laboration de ce projet, nous appliquons la thorie dans les


dossiers de pratique, en tenant compte de l'enregistrement universel
et appels, PIPO (sortie parallle d'entre parallle), sol (sortie srie
d'entre parallle), SISO (sortie srie d'entre de srie) SIPO (sortie
parallle d'entre srie).
Pour la mise en uvre, nous utilisons un Basys 2 pour la mise en
uvre de l'antenne satellite en utilisant un moteur tapes unipolaires
et leur stade de puissance respective.
INTRODUCCION
Un registro de desplazamiento es un circuito digital secuencial (es
decir, que los valores de sus salidas dependen de sus entradas y de
los valores anteriores) consistente en una serie de biestables,
generalmente de tipo D, conectados en cascada, que basculan de
forma sincrnica con la misma seal de reloj. Segn las conexiones
entre los biestables, se tiene un desplazamiento a la izquierda o a la
derecha de la informacin almacenada. Existen registros de
desplazamiento bidireccionales, que pueden funcionar en ambos
1

sentidos. Los registros universales, adems de bidireccionales


permiten la carga en paralelo.

Figura B. Motor a paso unipolar.

Desarrollo
1.-Simular el circuito de corrimiento universal de 8 bits para cada
funcin permitida, reportar las imgenes de los diagramas de
tiempo con texto explicativo.
Figura A.Registro de corrimiento de 4 bits.

Para su realizacin se introduce el siguiente programa en VHDL el


cual nos mostrara cada una de las funciones deseadas.

Los motores a paso estn constituidos normalmente por un rotor


sobre el que van aplicados distintos imanes permanentes y por un
cierto nmero de bobinas excitadoras bobinadas en su estator.
Existen dos tipos de motores a paso, los bipolares (requieren del
cambio de direccin del flujo de corriente a travs de las bobinas en
la secuencia apropiada para realizar un movimiento) y los
unipolares (tienen 6 o 5 cables de salida, dependiendo de su
conexin interna, y sus bobinas estn unidas en un polo).

use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
entity cu is
port(
clk, reset :in std_logic;--reloj 50MHz
esd, esi : in std_logic;--entradas seriales
modir : in std_logic_vector(2 downto 0);--selector de
corrimiento
ent : in std_logic_vector(7 downto 0);--entrada paralela
sal : out std_logic_vector(7 downto 0));--salida 8 bits
end cu;

Figuras 1.1.-Simulacion de un contador Johnnson

architecture Behavioral of cu is
signal aux:std_logic_vector(7 downto 0);
begin
sal<=aux;
process(clk, reset)
begin
if reset='1' then aux<=(others => '0');
elsif clk' event and clk = '1' then
case modir is
when "001"=>--corrimiento a
la izquierda
aux(7)<=esd;--entrada
de dato a la derecha
aux(6)<=aux(7);
aux(5)<=aux(6);
aux(4)<=aux(5);
aux(3)<=aux(4);
aux(2)<=aux(3);
aux(1)<=aux(2);
aux(0)<=aux(1);

library IEEE;
3

when "010"=>--corrimiento a
la derecha
aux(7)<=aux(6);
aux(6)<=aux(5);
aux(5)<=aux(4);
aux(4)<=aux(3);
aux(3)<=aux(2);
aux(2)<=aux(1);
aux(1)<=aux(0);
aux(0)<=esi;--entra
dato izquierda
when "011"=>--rotacin a la
izquierda
aux(7)<=aux(6);
aux(6)<=aux(5);
aux(5)<=aux(4);
aux(4)<=aux(3);
aux(3)<=aux(2);
aux(2)<=aux(1);
aux(1)<=aux(0);
aux(0)<=aux(7);
when "100"=> --rotacin a la
derecha
aux(7)<=aux(0);
aux(6)<=aux(7);
aux(5)<=aux(6);
aux(4)<=aux(5);
aux(3)<=aux(4);
aux(2)<=aux(3);
aux(1)<=aux(2);
aux(0)<=aux(1);
when
"101"=>--salida
paralela
aux<=ent;
when others => null;

end case;
end if;
end process;
end Behavioral;

2.-Implementar en la FPGA , con el lenguaje que indique el


profesor un registro de corrimiento de 8 bits y probar en un
contador Johnson:

Carga en paralelo
Rotacion a la derecha reten
Carga en paralelo
Desplazamiento ala izquierda insertanto 8 unos y ceros .
Desplazamiento ala derecha insertando ocho unos y ceros
Reset

-Programacin 2
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY jhonson_anillo_counters IS PORT ( ckin : IN std_logic;
ck : INOUT std_logic;
s: IN std_logic_vector(2 DOWNTO 0);
reset: in std_logic;
hold: IN std_logic;
carga: IN std_logic;
rotd: IN std_logic;
d: IN std_logic_vector(7 DOWNTO 0);
q : INOUT std_logic_vector (7 DOWNTO 0));
END jhonson_anillo_counters;

ARCHITECTURE behavioral OF jhonson_anillo_counters IS


SIGNAL q1: std_logic_vector(7 DOWNTO 0);
SIGNAL temporal: std_logic;
SIGNAL contador: integer range 0 to 49999999 := 0;
BEGIN
--divisor frec
divisor_frecuencia: PROCESS (ckin)
BEGIN
IF rising_edge(ckin) THEN
if (contador = 49999999) THEN
temporal <= NOT(temporal);
contador <= 0;
ELSE
contador <= contador+1;
END IF;
END IF;
ck <= temporal;
END PROCESS divisor_frecuencia;
PROCESS (ck)
BEGIN
IF reset='1' THEN q<="00000000";
ELSIF hold='1' THEN q<=q;
ELSE
IF s="000" THEN --jhonson
IF ck'event and ck='1' THEN
q(0)<=NOT(q(7));
q(1)<=q(0);
q(2)<=q(1);
q(3)<=q(2);
q(4)<=q(3);
q(5)<=q(4);
q(6)<=q(5);
q(7)<=q(6);

END IF;
ELSIF s="100" THEN --carga en paralelo rotacion
IF (carga ='1') THEN --carga en paralelo
IF ck'event AND ck='1' THEN
q(0)<=d(0);
q(1)<=d(1);
q(2)<=d(2);
q(3)<=d(3);
q(4)<=d(4);
q(5)<=d(5);
q(6)<=d(6);
q(7)<=d(7);
END IF;
ELSIF (rotd ='1') THEN --rotacion derecha
IF ck'event AND ck='1' THEN
q(0)<=q(7);
q(1)<=q(0);
q(2)<=q(1);
q(3)<=q(2);
q(4)<=q(3);
q(5)<=q(4);
q(6)<=q(5);
q(7)<=q(6);
END IF;
ELSE --rotacion izquierda
IF ck'event AND ck='1' THEN
q(0)<=q(1);
q(1)<=q(2);
q(2)<=q(3);
q(3)<=q(4);
q(4)<=q(5);
q(5)<=q(6);
q(6)<=q(7);
q(7)<=q(0);

ENTITY practica9 IS PORT(

END IF;
END IF;
ELSE --anillo
IF ck'event AND ck='1' THEN
q(0)<=q(7);
q(1)<=q(0);
q(2)<=q(1);
q(3)<=q(2);
q(4)<=q(3);
q(5)<=q(4);
q(6)<=q(5);
q(7)<=q(6);
END IF;
END IF;
END IF;
END PROCESS;

END behavioral;

3.-Disear y construir con circuitos de corrimiento, un


multiplicador y un divisor por dos y por cuatro para ambas
operaciones.

-Programacin 3
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_arith.ALL;
USE ieee.std_logic_unsigned.ALL;

clk: IN std_logic;--B8
reset:IN std_logic
Ck: INOUT std_logic_vector(4 downto 0);--Div. de frec.
Pul : INOUT std_logic:='0';
D,I:IN std_logic;
x: IN std_logic_vector(3 downto 0);
ent: IN std_logic_vector(4 downto 0);
);
END practica9;
ARCHITECTURE MulDiv OF practica9 IS
SIGNAL aux: std_logic_vector(4 DOWNTO 0);
SIGNAL count : integer :=0;
BEGIN
PROCESS(clk) --DIVISOR DE FRECUENCIA
BEGIN
IF(clk'event AND clk='1') THEN
count <=count+1;
IF(count = 10000000) THEN
Pul <= NOT Pul;
count <=0;
END IF;
END IF;
END PROCESS;
Ck<=aux;
PROCESS(Pul, reset)
BEGIN
IF reset = '1' THEN aux<=(OTHERS => '0');
--RESETEAR
ELSIF Pul'event AND Pul= '1' THEN
CASE x IS
WHEN "0001" => --MULTIPLICACION FACTOR 2
aux(4)<= ent(3);
aux(3)<= ent(2);

aux(2)<= ent(1);
aux(1)<= ent(0);
aux(0)<= I;
WHEN "0010" => ----DIVICION FACTOR 2
aux(4)<= D;
aux(3)<= ent(4);
aux(2)<= ent(3);
aux(1)<= ent(2);
aux(0)<= ent(1);
WHEN "0100" => --MULTIPLICACION FACTOR 4
aux(4)<= ent(1);
aux(3)<= ent(0);
aux(2)<= ent(4);
aux(1)<= ent(3);
aux(0)<= ent(2);
WHEN "1000" => --DIVICION FACTOR 4
aux(4)<= ent(2);
aux(3)<= ent(1);
aux(2)<= ent(0);
aux(1)<= ent(4);
aux(0)<= ent(3);
WHEN OTHERS => aux<=ent;
END CASE;
END IF;
END PROCESS;
END MulDiv;

Figura 3.1.-Numero 5

Fotografias de trabajo.

Figura 3.4.-12/4
Figura 3.2.-5*2

Figura 3.3.-5/2

Figura 3.5.-12/2
8

4.-Disear y construir con circuitos de corrimiento un control para


antena parablica empleando un motor a pasos unipolar .

Figura 4.1.-Etapa de potencia de coneccion del motor a pasos unipolar


usando un ULM2803.

-Programacin 4
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY jhonson_anillo_counters IS PORT ( ckin : IN std_logic;--entrada b8
ck : INOUT std_logic;--reloj con divisor de frec. 1hz
reset: IN std_logic;--resetear programa
hold: IN std_logic;--mantener estatico
carga: IN std_logic;--determinar si corrimiento con 1 o 2 bits
rotd: IN std_logic;--cambiar sentido de giro
d: IN std_logic_vector(3 DOWNTO 0);--entradas para "carga"
q : INOUT std_logic_vector (3 DOWNTO 0));--salidas a motor
END jhonson_anillo_counters;
ARCHITECTURE behavioral OF jhonson_anillo_counters IS

SIGNAL temporal: std_logic;--seal para frec. de 1hz


SIGNAL contador: integer range 0 to 49999999 := 0;--contar para divisor frec.
BEGIN
divisor_frecuencia: PROCESS (ckin) --divisor frec
BEGIN
IF rising_edge(ckin) THEN--entra pulso b8 a 50mhz
IF (contador = 49999999) THEN
temporal <= NOT(temporal);--cuando alcanza el max, genera pulso
contador <= 0;--resetear contador
ELSE
contador <= contador+1;--sumar a contador 1
END IF;
END IF;
ck <= temporal;--asignar seal a la salida
END PROCESS divisor_frecuencia;
PROCESS (ck)
BEGIN
IF reset='1' THEN q<="0000";--poner en reset programa
ELSIF hold='1' THEN q<=q;--mantener estatico
ELSE
IF reset='0' THEN --carga en paralelo rotacion
IF (carga ='1') THEN --carga en paralelo
IF ck'event AND ck='1' THEN
q(0)<=d(0);
q(1)<=d(1);
q(2)<=d(2);
q(3)<=d(3);
END IF;
ELSIF (rotd ='1') THEN --rotacion derecha
IF ck'event AND ck='1' THEN
q(0)<=q(3);
q(1)<=q(0);
q(2)<=q(1);

q(3)<=q(2);
END IF;
ELSE --rotacion izquierda
IF ck'event AND ck='1' THEN
q(0)<=q(1);
q(1)<=q(2);
q(2)<=q(3);
q(3)<=q(0);
END IF;
END IF;
END IF;
END IF;
END PROCESS;
END behavioral;

Fotos de la antena parablica

Figura 4.2.-Etapa de potencia usando un ULM2803


10

Figura 4.3.-Implementacion de la practica en la Basys 2

Figura 4.4.-Motor a pasos con la antena instalada.


11

Conclusiones:
Conclusin Acosta T. A.
Concluyo que por medio de los circuitos logicos secuenciales se
puede llevar a acabo aplicaciones diversas, como son la
automatizacion de giro de motores, calculadoras o drivers entre
comunicacion serial y paralela. Asi mismo, se sabe que la
complejidad de cada proyecto depende del diseo y de las
caracteristicas que se quieran sustentar, aunque el diseo en FPGA
da mucha potencia al momento de hacer nuestras aplicaciones.
Conclusin Mondragon R. S. A.
En conclusin los registros de corrimiento con una iuncreible
herraminta dentro de los circuitros lgicos secuenciales que por
permite guardar datos y usarlos de forma paralela o serial,dentro de
un proyecto me resultara interesante aplicarlo por ejemplo en la
creacin de un display que muestre datos en movimiento.
Conclusin general
Se concluye que los registros de corrimiento son herramientas
verstiles dentro de los circuitos lgicos secuenciales, y que nos
permitirn trabajar datos de forma serial y paralela tanto de entrada
como de salida.

Figura 4.5.-Otra perspectiva.


12

Bibliografa
Pardo F., Boluda J. A. (2004) VHDL, lenguajes para sntesis y
modelado de circuitos (2da edicin). Mxico: Alfaomega
Software de desarrollo, varias compaas, (ISE) www.xilinx.com,
(QuartusII) www.altera.com, (Libero) www.actel.com

13

Você também pode gostar