Der Bereich von digitalen Systemen reicht von steuerungs- bis zu datenintensiven Systemen.
Systeme mit Steuerungsschwerpunkt sind rein reaktive Systeme die auf äußere Ereignisse reagieren.
Systeme mit Datenschwerpunkt benötigen Datenverarbeitung mit hohen Datendurchsatz, wie. z.B. im Bereich der digitalen Signal- und Bildverarbeitung.
Der Kontrollfluss ist sequenziell aufgebaut, d.h. in mehrere zeitlich getrennte Einzelschritte zerlegt.
Wie in vorherigen Kapiteln gezeigt wurde, kann ein sequenzielles System in einen Kontroll- und Datenfluss aufgeteilt werden, mit Steuerungs- und Datenpfadeinheiten.
Datenpfade werden mit endlichen Zustandsautomaten gesteuert (FSM: Finite State Machine).
Steuerungseinheit ⇔ FSM
Datenpfadeinheiten können zyklisch wechselnde Datensätze, d.h. Datenströme, bearbeiten.
Der Zustandsautomat muss die einzelnen Operationen im Datenpfad steuern und koordinieren:
Datenpfade bestehen aus einer Vielzahl von regulären Strukturen (einfach zu optimieren),
Kontrolleinheiten (FSM) bestehen i.A. aus irregulären Strukturen (“zufällig” strukturierte Logik - schwierig/aufwendig zu optimieren).
Ein Zustandsautomat ist ein allgemeines sequenzielles System, dessen Reaktionen und Ausgangswerte außer vom aktuellen Zustand auch von den Eingangsgrößen abhängen. Man unterscheidet im wesentlichen zwei verschiedene Typen von Automaten:
Bei diesem Automaten hängen die Ausgangssignale nur vom aktuellen Zustand ab, welcher von Eingangssignalen aus der Vergangenheit und vorherigen Zuständen bestimmt wurde.
Bei diesem Automaten hängen die Ausgangssignale zusätzlich von den Eingangssignalen ab.
Es soll eine Bitfolge auf vorgegebene Muster untersucht werden.
Problem-Definition
VHDL-Implementierung
Partitionierung:
Zustandskodierung: abstrakt
type states is (Z0,Z1,Z2,Z3);
signal state,state_next: states;
Zustandsspeicher Z
state_trans: process(clk,reset,state_next)
begin
if clk event and clk= 1 then
if reset= 1 then
state <= Z0;
else
state <= state_next;
end if;
end if;
end process state_trans;
Ausgangslogik
pi: process (state)
begin
case state is
when Z3 => A <= 1 ;
when others => A <= 0 ;
end case;
end process pi;
Schaltnetzwerk
sigma: process(state,E)
begin
case state is
when Z0 =>
if E=”01” then state_next <= Z1
else state_next <= Z0; end if;
when Z1 =>
if E=”11” then state_next <= Z2
elsif E=”01” then state_next
else state_next <= Z0; end if;
when Z2 =>
if E=”10” then state_next <= Z3
elsif E=”01” then state_next
else state_next <= Z0; end if;
when Z3 =>
if E=”01” then state_next <= Z1
else state_next <= Z0;
end if;
end case;
end process sigma;