Einführung

Ein Flipflop ist eine Logikschaltung, die in der Lage ist, die Werte ihrer Ausgänge unabhängig von Änderungen der Eingangswerte beizubehalten, d. h. einen „Gedächtnis“-Zustand zu besitzen. Dies ist das Element, das den Übergang von der kombinatorischen Logik zur sequentiellen Logik ermöglicht. Es gibt verschiedene Arten von Flip-Flops: astabil, bistabil und monostabil. Astabil: Es handelt sich um ein Flip-Flop mit zwei instabilen Zuständen, das periodisch (Periode T) und spontan von einem Zustand zum anderen. Bistabil: Zwei stabile Zustände habend. In der Logik entspricht dies den logischen Zuständen „1“ oder „0“. Monostabil: Es gibt nur einen stabilen Zustand, der andere Zustand ist vorübergehend. Es gibt zwei Arten von Flip-Flops: asynchrone und synchrone. Synchrone Flipflops verfügen über einen Takteingang, was bei asynchronen Flipflops nicht der Fall ist. Asynchrone Flip-Flops – Die RS-Schwinge – Der D-Riegel Synchrone Flip-Flops – Die Wippe D – Der JK-Schalter

Was ist der Unterschied zwischen einem Flip-Flop und einem Logikgatter?

Ein Flipflop ist eine Logikschaltung, die in der Lage ist, die Werte ihrer Ausgänge unabhängig von Änderungen der Eingangswerte beizubehalten, d. h. einen „Gedächtnis“-Zustand zu besitzen. Dies ist das Element, das den Übergang von der kombinatorischen Logik zur sequentiellen Logik ermöglicht.
Ein Flipflop besteht oft aus mehreren Logikgattern. Hier ein Beispiel mit dem D-Flipflop:

Was ist der Unterschied zwischen einem Knebel und einem Riegel?

Der Hauptunterschied zwischen einem Flipflop und einem Latch besteht darin, dass das Flipflop die Eingänge prüft, den Ausgang jedoch nur zu den durch das Taktsignal oder ein anderes Steuersignal festgelegten Zeitpunkten ändert, während das Latch die Eingänge kontinuierlich prüft und sofort auf Eingangsänderungen reagiert.

Rocker D

Wir werden uns nun ein D-Flipflop mit asynchronem Reset ansehen. Hierzu nutzen wir eine Dateneingabe für die von Ihnen mitzuteilenden Daten. Wir benötigen einen Taktgeber (clk), da es sich um ein synchrones Flipflop handelt. Schließlich die Reset-Funktion, um die Daten von d nach q weiterzuleiten oder das Flip-Flop zurückzusetzen.

Wie funktioniert das D-Flipflop?

  • Wenn der Reset 1 ist, nimmt der Ausgang q den Wert 0 an.
  • Wenn der Reset 0 ist, dann übertragen wir den von d kommenden Wert mit q bei jedem Takttick.
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;
Hier ist das Ergebnis der Simulation:
1. Takt-Tick: Der Takt ist hoch, der Reset auch, daher kann das Eingangssignal d nicht in das Ausgangssignal q übergehen.

JK Flip-flop

Das JK-Flipflop ist eine Art bistabiles Flipflop, d. h. es verfügt über zwei unterschiedliche stabile Zustände. Sein Name „JK“ leitet sich von den Buchstaben seiner wichtigsten Einreisehäfen ab: J und K. Wenn J und K unterschiedliche Werte haben, ändert das JK-Flipflop seinen Zustand gemäß einer genau definierten Sequenz. Wenn J hoch (1) und K niedrig (0) ist, nimmt das Flip-Flop den Zustand „SET“ (1) ein. Wenn J niedrig (0) und K hoch (1) ist, nimmt das Flip-Flop den Zustand „RESET“ (0) ein. Wenn J und K beide hoch (1) sind, kippt das Flip-Flop und wechselt mit jedem Taktimpuls zwischen den Zuständen.
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; 
	
Hier ist das Ergebnis der Simulation: