Sequenzielle Logik besteht aus:
Die Ausgangssignale solcher Logik hängen von den aktuellen Eingangangssignalen E (Eingangszuständen) und zusätzlich von Signalen (Zuständen) aus der Vergangenheit ab.
Der Zustandsspeicher eines asynchronen Systems kann mit selbst steuernden Latches, der eines synchronen Systems mit taktgesteuerten FLIP-FLOPs implementiert werden.
Der Entwurf synchroner Schaltungen ist deutlich einfacher als bei asynchronen. Bei synchronen Systemen übernehmen die Speicherelemente nur zu bestimmten Zeitpunkten oder Intervallen die Daten.
Ein Algorithmus ist eine Sequenz von Berechnungsschritten
Sequenzielle Datenverarbeitung wird in synchronen Systemen mit einer globalen Zeitreferenz - dem Takt (Clock) - gesteuert.
Der längste kombinatorische Pfad (die Verzögerung) zwischen zwei Registern bestimmt kürzeste Taktzykluszeit (1/Taktfrequenz)
Synchrone RT Systeme bestehen aus einer Folge von Registerebenen verbunden durch kombinatorische Logikblöcke
Die Speicherelemente lassen sich in zwei Gruppen unterteilen:
Algorithm 1.
Mit Taktflankensteuerung werden FLIP-FLOPs synchron, d.h. nur zu bestimmten diskreten Zeitpunkten gesteuert.
Für die Taktflankensteuerung werden Impulsglieder (Hochpass-Filter) benötigt, die nur bei einer auftretenden Änderung des Taktsignals 0 → 1 oder 1 → 0 einen kurzen Impuls erzeugen.
Algorithm 2.
Wichtige sequenzielle Systeme:
Daten werden taktgesteuert in einem N-Bit breiten Register jeweils um eine Stelle nach links oder rechts verschoben. Anwendung: Seriell-Parallel-Konverter.
Mit taktflankengesteuerten FLIP-FLOPs aufgebaute Zähler.
Dienen der Implementierung komplexer sequenzieller Systeme mit einer endlichen Zustandsmenge.
Man unterscheidet:
Example 1.
entity syn3count is
port ( clk: in bit;
q: out bit_vector(2 downto 0);
end syn3count;
architecture main of syn3count is
signal q_int: bit_vector(2 downto 0);
begin
process (clk)
begin
if clk'event and clk=1 then
q_int <= q_int + ”001”;
end if;
end process;
q <= q_int;
end main;
Example 2.
entity asyn3count is
port ( clk: in bit;
q: out bit_vector(2 downto 0);
end asyn3count;
architecture main of syn3count is
signal q_int: bit_vector(2 downto 0);
begin
process (clk)
begin
if clk'event and clk=0 then q_int(0) <= not q_int(0); end if;
if q_int(0)'event and q_int(0)=0 then q_int(1) <= not q_int(1); end if;
if q_int(1)'event and q_int(1)=0 then q_int(2) <= not q_int(2); end if;
end process;
q <= q_int;
end main;