Introdução

Um flip-flop é um circuito lógico capaz de manter os valores de suas saídas independentemente de alterações nos valores de entrada, ou seja, compreendendo um estado de “memória”. Este é o elemento que permite a transição da lógica combinacional para a lógica sequencial.

Existem vários tipos de flip-flops: Astáveis, Biestáveis ​​e Monoestáveis.

Astável: É um flip-flop que compreende 2 estados instáveis ​​e que muda periodicamente (período T) e espontaneamente de um estado
para o outro.

Biestável: Ter dois estados estáveis. Em lógica, isso se traduz nos estados lógicos “1” ou “0”.

Monoestável: Possui apenas um estado estável, sendo o outro estado temporário.

Existem dois tipos de flip-flops: assíncronos e síncronos. Os flip-flops síncronos têm uma entrada de relógio, o que não é o caso dos flip-flops assíncronos.

Flip-flops assíncronos
– O roqueiro RS
– A Trava D
Flip-flops síncronos
– O roqueiro D
– O interruptor JK

Qual é a diferença entre um flip-flop e uma porta lógica?

Um flip-flop é um circuito lógico capaz de manter os valores de suas saídas independentemente de alterações nos valores de entrada, ou seja, compreendendo um estado de “memória”. Este é o elemento que permite a transição da lógica combinacional para a lógica sequencial.
Um flip-flop geralmente é composto de várias portas lógicas. Aqui está um exemplo com o flip-flop D:

Qual é a diferença entre uma alavanca e uma trava?

A principal diferença entre um flip-flop e um latch é que o flip-flop verifica as entradas, mas só altera a saída em momentos definidos pelo sinal de clock ou qualquer outro sinal de controle, enquanto o latch verifica as entradas continuamente e responde imediatamente às alterações nas entradas.

Flip-flop D

Agora veremos um flip-flop D com reinicialização assíncrona. Para isso, usaremos uma entrada de dados para os dados que você deseja comunicar. Precisamos de um relógio (clk) porque ele é um flip-flop síncrono. Finalmente, a função de reset para passar os dados de d para q ou para resetar o flip-flop.

Como funciona o flip-flop D?

  • Se o reset for 1, a saída q assume o valor 0.
  • Se a redefinição for 0, então transmitimos o valor vindo de d com q a cada tique do relógio.
LIBRARY ieee;
USE ieee.std_logic_1164.all;

ENTITY bascule_D IS
PORT (d, clk, rst: IN STD_LOGIC;
q: OUT STD_LOGIC);
END bascule_D;

ARCHITECTURE comportement OF bascule_D IS
BEGIN
PROCESS (clk, rst)
BEGIN
IF (rst='1') THEN
q <= '0';
ELSIF (clk'EVENT AND clk='1') THEN
q <= d;
END IF;
END PROCESS;
END comportement;
Aqui está o resultado da simulação:
1º tique do relógio: O relógio está alto, o reset também, então o sinal de entrada d não pode passar para o sinal de saída q.

Flip-flop JK

O flip-flop JK é um tipo de flip-flop biestável, o que significa que ele tem dois estados estáveis ​​distintos. Seu nome, “JK”, vem das letras associadas aos seus principais portos de entrada: J e K.

Quando J e K têm valores diferentes, o flip-flop JK muda de estado de acordo com uma sequência bem definida. Se J for alto (1) e K for baixo (0), o flip-flop assumirá o estado “SET” (1). Se J for baixo (0) e K for alto (1), o flip-flop assumirá o estado “RESET” (0). Se J e K forem ambos altos (1), o flip-flop alternará entre os estados com cada pulso de clock.

library ieee;
use ieee.std_logic_1164.all;

entity Bascule is
	port(J,K,Clk,Set, Reset : in std_logic;
	Q, Q_bar : out std_logic);
end Bascule;

architecture bascule_JK of Bascule is 
	signal SIG : std_logic;
	signal JK : std_logic_vector (1 downto 0);
begin
	JK(1) <= J;
	JK(0) <= K;
	process(Clk, Set, Reset)
	begin
	if (Reset = '0'and Set = '0') then
	   SIG <= '0';
	elsif (Reset = '0' and Set = '1') then
	   Sig <= '0';
   elsif (Reset ='1' and Set ='0') then
	Sig <='1'; 
	elsif (Reset = '1' and Set ='1') then
	if (Clk'event and Clk ='0') then 
		case JK is 
			when "00" => SIG <= SIG;
			when "01" => SIG <= '0';
			when "10" => SIG <= '1';
			when "11" => SIG <= not SIG; 
			when others => SIG <= '-';
		end case; 
		else 
			SIG <= SIG;
		end if; 
	end if; 
	end process; 
	Q <= SIG; 
	Q_bar <= not SIG; 
end bascule_JK; 
	
Aqui está o resultado da simulação: