Você está na página 1de 13

INSTITUTO POLITÉCNICO NACIONAL

UNIDAD PROFESIONAL INTERDISCIPLINARIA EN


INGENIERIA Y TECNOLOGIAS AVANZADAS
U.P.I.I.T.A.
Ingeniería Mecatrónica

Fecha de entrega: CDMX, Miércoles 15 de Junio de 2022

2MV6

Práctica 6
Flip-Flops

Integrantes:
Montoya Gonzalez Bryan
Navarro Urrutia Mauricio Naim
Velázquez Domínguez Jose Luis
Salazar Tavares Alan Efren

Unidad de Aprendizaje
Circuitos Lógicos
Profesor: Trejo Salazar David Benjamin
Introducción:
Un flip-flop, también conocido en español como dispositivo biestable, es un
circuito de tipo multivibrador y secuencial que puede adquirir dos estados de
manera indefinida, a menos que se perturba de alguna manera dicho circuito. Es
un dispositivo ampliamente usado en el almacenaje de datos e información en
artículos digitales y electrónicos.
Clasificación de los flip flop
Los flip-flop se clasifican según las entradas que poseen, pudiendo ser:
● Síncronos: Poseen entradas de control, pero además tienen incluido un
sistema de reloj o algún tipo de mecanismo o dispositivo para rotar los
estados o temporizarlo.
● Asíncronos: Este tipo de biestable solo posee entradas de control.
Tipos de flip flop

En el mercado, los tipos más conocidos de biestables son los siguientes:

● Flip-Flop R-S: El biestable R-S adquiere su nombre por sus entradas


Reset y Set, para resetear y setear la información ingresada o almacenada
en el dispositivo, respectivamente.
● Flip- Flop T: En este tipo de flip-flop el cambio de estado de produce
mediante un pulso, el cual se constituye como un ciclo de cero a uno de
manera completa. Este modelo de biestable puede utilizarse como un
complemento de reloj para el modelo R-S.
● Flip-Flop J-K: Este dispositivo es una combinación de los dos anteriores,
pero se diferencia del RS en su comportamiento al activarse ambas
entradas a la vez: Este biestable hace que su salida tenga el estado
contrario al que poseía antes de abrirse las dos entradas
simultáneamente.

Para qué sirven los flip flop


Los biestables se utilizan para el almacenamiento de pequeñas cantidades de
datos, llegando a poder almacenar un bit. Es por este motivo que se usan en
cantidad para contener los datos a través de un código binario de todo tipo de
dispositivos digitales y electrónicos, tales como contadores, máquinas de estado
finitas, relojería, memorias de computadoras y calculadoras, por mencionar
algunos.

Para qué sirven las entradas Clear y Preset


Estas entradas sirven para controlar el momento en que inicia su
funcionamiento y el valor de inicio de esta secuencia de arranque. En inglés estas
se conocen como Clear y Preset; la entrada Clear hace arrancar en cero el
flip-flop, sin considerar otras entradas o el reloj del dispositivo.

Códigos:

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

entity P6 is
PORT( S,R,clk: in std_logic;
Q, QBAR, QD, QJK, QBJK, QT, Salida: out std_logic);
end P6;

Architecture behavioral of P6 is
signal SalidaAux : std_logic;
signal tmpT: std_logic;
signal Cuenta : integer range 0 to 24999999:= 0;
begin
PROCESS(clk)
variable tmpRS,tmpD,tmpJK: std_logic;
begin

if rising_edge(clk) then
if Cuenta = 24999999 then

Cuenta<=0;
SalidaAux<= not SalidaAux;

if SalidaAux = '1' then

else
if(S='0' and R='0')then
tmpRS:=tmpRS;
elsif(S='1' and R='1')then
tmpRS:='Z';
elsif(S='0' and R='1')then
tmpRS:='0';
else
tmpRS:='1';
end if;

Q <= tmpRS;
QBAR <= not tmpRS;
QD <= S;

if(S='0' and R='0')then


tmpJK:=tmpJK;
elsif(S='1' and R='1')then
tmpJK:= not tmpJK;
elsif(S='0' and R='1')then
tmpJK:='0';
else
tmpJK:='1';
end if;

QJK <=tmpJK;
QBJK <=not tmpJK;

if S='0' then
tmpT <= tmpT;
elsif S='1' then
tmpT <= not (tmpT);
end if;

QT <= tmpT;

end if;
else
Cuenta <= Cuenta+1;

end if;
end if;

end PROCESS;

Salida<=SalidaAux;
end behavioral;

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

entity P6 is
PORT( S,R,clk: in std_logic;
SalidaDisplay: out std_logic_vector(6 downto 0);
Salida, Salida2, Act1, Act2: out std_logic);
end P6;

Architecture behavioral of P6 is
signal SalidaAux : std_logic;
signal SalidaAux2 : std_logic;
signal Act11 : std_logic;
signal Act22 : std_logic;
signal tmpT: std_logic;
signal Cuenta : integer range 0 to 24999999:= 0;
signal Cuenta4 : integer range 0 to 14999999:= 0;
signal Cuenta2 : integer range 0 to 10:= 0;
signal Cuenta3 : integer range 0 to 10:= 0;
Signal Cuenta5 : integer range 0 to 10:= 0;
begin
PROCESS(clk)
begin

if rising_edge(clk) then
if Cuenta = 6999999 then

Cuenta<=0;
SalidaAux<= not SalidaAux;

if SalidaAux = '1' then


Cuenta2 <= Cuenta2+1;
end if;

if cuenta2 = 10 then
cuenta3 <= cuenta3+1;
Cuenta2 <=0;

if cuenta3 = 10 then cuenta3 <=0; end if;


end if;

if cuenta2 = 3 and cuenta3 = 6 then


cuenta2 <=0;
cuenta3 <=0;
end if;

else
Cuenta <= Cuenta+1;

end if;

if Cuenta4 = 199999 then


Cuenta4 <= 0;
SalidaAux2<= not SalidaAux2;

if SalidaAux2 = '1' then


act11 <= not act11;
act22 <= act11;

if act11 = '1' then


cuenta5 <= cuenta2;
else
cuenta5 <= cuenta3;
end if;

case Cuenta5 is
when 0 =>
SalidaDisplay <= "0111111";
when 1 =>
SalidaDisplay <= "0000110";
when 2 =>
SalidaDisplay <= "1011011";
when 3 =>
SalidaDisplay <= "1001111";
when 4 =>
SalidaDisplay <= "1100110";
when 5 =>
SalidaDisplay <= "1101101";
when 6 =>
SalidaDisplay <= "1111101";
when 7 =>
SalidaDisplay <= "0000111";
when 8 =>
SalidaDisplay <= "1111111";
when 9 =>
SalidaDisplay <= "1101111";
when 10 =>
SalidaDisplay <= "0111111";

end case;
end if;
else
Cuenta4 <= Cuenta4+1;
end if;
end if;

end PROCESS;

Salida<=SalidaAux;
Salida2<=SalidaAux2;
act1<=act11;
act2<=act22;
end behavioral;
6.3
library ieee;
use ieee.std_logic_1164.all;

entity P5 is
port (
Reloj : in std_logic;
Reset : in std_logic;
Velocidad : in std_logic;
Salida : inout std_logic;
Semaforo1 : out std_logic_vector(2 downto 0);
Semaforo2 : out std_logic_vector(2 downto 0)
);
end P5;

architecture P55 of P5 is

signal SalidaAux : std_logic;


signal Cuenta : integer range 0 to 24999999:= 0;
signal Aux : integer range 0 to 16:= 0;

begin
Divisor : process(Reloj, Reset, Velocidad) is
variable i : integer := 1;
variable a : integer := 1;
begin

if Velocidad='0' then
a := 1;
else
a := 2;
end if;

if rising_edge(Reloj) then
if Cuenta = 24999999 then

Cuenta<=0;
SalidaAux<= not SalidaAux;
i :=1;
if SalidaAux = '1' then
Aux<=Aux+1;
if Aux = 16/a then
Aux <= 1;
end if;

else
if Aux <=6/a then
Semaforo1 <= "001";
Semaforo2 <= "100";
elsif Aux >= 6/a and Aux <= 8/a then
Semaforo1 <= "010";
elsif Aux >= 8/a and Aux <= 14/a then
Semaforo1 <= "100";
Semaforo2 <= "001";
elsif Aux > 14/a
then
Semaforo2 <= "010";

else
Semaforo1 <= "000";

end if;
end if;
else
Cuenta <= Cuenta+1;

end if;
end if;
end process;

Salida<=SalidaAux;

end P55;

Conclusiones:
Montoya González Bryan:
Con la realización de esta práctica aprendimos más sobre el uso de los flip flop
hasta poder armar un circuito contador ascendente y descendente
basándonos en lo aprendido en los temas anteriores. La realización de esta
práctica fue de gran ayuda ya que con esto podemos combinar los demás temas
aprendidos cómo son los programas utilizados anteriormente realizando
pequeños cambios o implementaciones y el 555 en una sola práctica.

Navarro Urrutia Mauricio Naim:


El objetivo de la práctica se logró cumplir debido a que se comprendió la
diferencia y función de cada uno de los flip flops comprendidos dentro de la
unidad, por otro lado, el ejercicio 2 fue un reto para el equipo debido a que se
tenía que habilitar y deshabilitar constantemente el 2do display para realizar el
contador de decenas para utilizar las mismas 7 salidas, se resolvió utilizando
otro reloj de pulsos para realizar esta función de contar decenas. Implementar y
combinar la práctica 5 con esta facilitó su realización y reafirmó la sintaxis
completa para realizar relojes de pulsos e implementarlos en esta práctica.

Salazar Tavares Alan Efren:


En esta práctica se nos facilitó un poco más ya que venía en conjunto con la
práctica 5, solo tuvimos que hacerla con base a lo que ya habíamos aprendido
tanto en la teoría como en la práctica pasada, usando el clock interno para los
contadores (en el ejercicio del semáforo) y lograr nuevamente los pulsos de salida
adecuados.

Velázquez Domínguez José Luis:


Esta práctica la considero como seguimiento de la práctica 5 ya que se vuelve a
utilizar el reloj interno de la placa y un divisor de frecuencia para la realizacion
de los contadores y darle tiempos a las 3 fases del semáforo, tambien pusimos en
práctica toda la teoría que se vio acerca de los flip flops y lo que identifica uno de
los otros, llegamos al objetivo esperado y considerando los multiples errores que
tuvimos de la práctica anterior, en esta fue más fácil la realizacion de los
programas.

Você também pode gostar