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
[Jordi Cortadella et al., 2002]
Die Speicherelemente lassen sich in zwei Gruppen unterteilen:
Algorithm 1. (VHDL Modell eine RS Latches)
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. (VHDL Modell eine D-FLIP-FLOPs)
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. (VHDL-Beschreibung des obigen Synchronzählers)
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. (VHDL-Beschreibung eines Asynchronzählers: Nicht implementierbar in FPGAs!)
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;