Introducere

Un flip-flop este un circuit logic capabil să mențină valorile ieșirilor sale independent de modificările valorilor de intrare, adică cuprinzând o stare de „memorie”. Acesta este elementul care permite trecerea de la logica combinațională la logica secvențială. Există mai multe tipuri de flip-flops: Astable, Bistabile și Monostabile. Astable: este un flip-flop care cuprinde 2 stări instabile și care comută periodic (perioada T) și spontan de la o stare la celălalt. Bistabil: având două stări stabile. În logică, aceasta se traduce în stările logice „1” sau „0”. Monostabil: Având o singură stare stabilă, cealaltă stare este temporară. Există două tipuri de flip-flop: asincrone și sincrone. Bistabilele sincrone au o intrare de ceas, ceea ce nu este cazul bistabilelor asincrone. Flip-flops asincrone – Rockerul RS – Încuietoarea D Flip-flops sincrone – Rockerul D – Comutatorul JK

Care este diferența dintre un flip-flop și o poartă logică?

Un flip-flop este un circuit logic capabil să mențină valorile ieșirilor sale independent de modificările valorilor de intrare, adică cuprinzând o stare de „memorie”. Acesta este elementul care permite trecerea de la logica combinațională la logica secvențială.
Un flip-flop este adesea compus din mai multe porți logice. Iată un exemplu cu flip-flop-ul D:

Care este diferența dintre un comutator și un zăvor?

Diferența majoră dintre un flip-flop și un latch este că flip-flop verifică intrările, dar modifică numai ieșirea la momentele definite de semnalul de ceas sau de orice alt semnal de control, în timp ce zăvorul verifică intrările continuu și răspunde imediat la modificările de intrare.

Flip-flop D

Ne vom uita acum la un flip-flop D cu resetare asincronă. Pentru aceasta vom folosi o intrare de date pentru datele pe care doriți să le comunicați.

Avem nevoie de un ceas (clk) pentru că este un flip-flop sincron. În cele din urmă, funcția de resetare pentru a trece datele de la d la q sau pentru a reseta flip-flop.

Cum funcționează flip-flop-ul D?

  • Dacă resetarea este 1, atunci ieșirea q ia valoarea 0.
  • Dacă resetarea este 0, atunci transmitem valoarea venită din d cu q la fiecare tic de ceas.
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;
Iată rezultatul în simulare:

Primul bif de ceas: Ceasul este ridicat, resetarea de asemenea, astfel încât semnalul de intrare d nu poate trece în semnalul de ieșire q.

Flip-flop JK

Flip-flop JK este un tip de flip-flop bistabil, ceea ce înseamnă că are două stări stabile distincte. Numele său, „JK”, provine de la literele asociate cu principalele sale porturi de intrare: J și K.

Când J și K au valori diferite, flip-flop-ul JK își schimbă starea conform unei secvențe bine definite. Dacă J este ridicat (1) și K este scăzut (0), flip-flop va trece în starea „SET” (1). Dacă J este scăzut (0) și K este ridicat (1), flip-flop va trece în starea „RESET” (0). Dacă J și K sunt ambele mari (1), flip-flop-ul va comuta, alternând între stări cu fiecare impuls de ceas.

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; 
	
Iată rezultatul în simulare: