\section{Automaten}

Ein Automat beschreibt ein System, welches auf seine Eingänge reagiert und ein Ausgangsignal produziert, dass vom Eingangssignal und momentanen Zustand abhängt. \medskip

Endliche Automaten, bzw. Finite state machines (FSM), können nur vorprogrammierte Lagen passieren. Schaltungen mit Rückkopplungen sind typische Beispiele für FSM. \medskip

Bei synchronen Automaten sind alle FF gleich getaktet, d.h. Zustandsänderungen sind synchron mit dem Takt. \medskip

Mit $n$-D-FF kann eine FSM $2^n$ innere Zustände speichern.


\subsection{Beschreibung von Automaten}

\subsubsection{Formelle Beschreibung von Automaten}

\begin{tabular}{l p{50mm}}
	$X_n = (x_1, \dots, x_e)$       & Eingangsalphabet      \\
	$Y_n = (y_1, \dots, y_b)$       & Ausgangsalphabet      \\
	$Z_n = (z_1, \dots, z_m)$       & Zustandsmenge         \\
	$Z_0 \in Z$                     & Anfangszustand        \\
	$f_{c1}:(X_n, Z_n) \to Z_{n+1}$ & Folgezustandsfunktion \\
	$f_{c2}:(X_n, Z_n) \to Y_n$     & Ausgangsfunktion      \\
\end{tabular}

\subsubsection{Zustandsfolgetabellen (Folgezustandstabellen)}

Listet in Form einer Wahrheitstabelle alle Kombinationen des aktuellen Zustandvektors $Z_n$ und Eingangsvektor $X_n$, aus welchen der Ausgangsvektor $Y_n$ und Folgezustandvektor $Z_{n+1}$ entsteht.

\begin{center}
	\includegraphics[width = 0.32\textwidth]{images/Automat_1.jpg}
\end{center}

Man kann die verschiedenen Vektoren abstrahieren durch Dualzahlen oder ihnen sinnvolle Namen geben, welche den Zustand/Eingang/Ausgang erklären.
\\
Um die Anzahl Zeilen und Spalten einer Zustandsfolgetabelle zu bestimmen kann man die folgenden Formeln verwenden.

\eqbox{$Z = 2 ^{eb + zb}$}

\eqbox{$S = eb + (2 \cdot zb) + ab$}

$eb$ ist die Anzahl Eingangsbits, $zb$ die Anzahl Zustandsbits und $ab$ die Anzahl Ausgangsbits.

\subsubsection{Zustandsdiagramme (Zustandsgraphen)}

Äquivalente graphische Darstellung der Folgezustandstabelle. Zustandsdiagramme bestehen aus Kanten und Knoten, siehe spätere Abbildungen bei den verschiedenen Automatentypen.


\subsection{Mealy-Automat}

Bei einem Mealy-Automat beinflussen Eingangsveränderungen das Ausgangsignal  jederzeit, d.h. das Ausgangssignal ist Störungsanfällig. Ein Mealy-Automat hat folgende Struktur:

\begin{center}
	\includegraphics[width = 0.25\textwidth]{images/Mealy_1.jpg} \medskip

	\eqbox{$Y_n = f_{C2}(X_n, Z_n) \qquad Z_{n+1} = f_{C1}(X_n, Z_n)$}
\end{center}

Erst bei einem Taktwechsel $t_n \to t_{n + 1}$ schalten die D-FF, d.h. $Z_{n + 1} \to Z_n$.

\begin{center}
	\includegraphics[width = 0.25\textwidth]{images/Mealy_2.jpg}
\end{center}

\vfill

\subsection{Moore-Automat}

Sonderfall des Mealy-Automat, wo $Y_n$ nur von getaktetem $Z_n$ abhängt. Aus diesem Grund ist er weniger Störungsanfällig.

\begin{center}
	\includegraphics[width = 0.25\textwidth]{images/Moore_1.jpg} \medskip

	\eqbox{$Y_n = f_{C2}(Z_n) \qquad Z_{n+1} = f_{C1}(X_n, Z_n)$}
\end{center}

\begin{center}
	\includegraphics[width = 0.25\textwidth]{images/Moore_2.jpg}
\end{center}

Eine \emph{komplett störungssichere Automatenfunktion} ist jedoch nur möglich, wenn die Eingangswerte $X_n$ mit gleich getakteten D-FF synchronisiert werden.


\subsection{Medwedjew-Automat}

Ausgangsvektor $Y_n$ ist identisch mit dem Zustandsvektor $Z_n$.

\begin{center}
	\includegraphics[width = 0.25\textwidth]{images/Medwedjew.jpg} \medskip

	\eqbox{$Y_n = Z_n \qquad Z_{n+1} = f_{C1}(X_n, Z_n)$}
\end{center}

\vfill

\subsection{Entwurf eines Automaten}

Die Normale Entwurfsabfolge ist, wie folgt:

\begin{enumerate}
	\item Auftrag lesen und analysieren
	\item Zustandsmenge bestimmen, daraus folgt Anzahl Zustandsvariablen und D-FF.
	\item Kodierung: Eingangs- und Ausgangsvariablen definieren
	\item Darstellung der Zustandsfolge in einem \emph{Zustandsdiagram}
	\item \emph{Zustandsfolgetabelle} aufstellen.
	\item Minimierung der Ausgangs- und Übergangsfunktionen mit \emph{KV-Diagrammen}
	\item Einfluss unbenutzter Zustände (Don't Cares) überprüfen!
	\item Schaltplan anhand der Schaltfunktion konstruieren
\end{enumerate}

Wenn das Schaltwerk eines Automaten vorgegeben ist, wird die Reihenfolge vertauscht.


\subsection{Umwandlung Mealy $\Leftrightarrow$ Moore}

Achtung: Bei der Umwandlung verändert sich das Zeitverhalten der Ausgänge.

\subsubsection{Moore $\to$ Mealy}

Die Moore zu Mealy Umwandlung ist einfach, da einfach die Ausgänge von den Knoten der Folgezustände auf die entsprechenden Kanten gewechselt werden müssen.

\subsubsection{Mealy $\to$ Moore}

Ein Mealy-Automat lässt sich immer in einen Moore-Automat mit gleicher Funktion umwandeln, dieser besitzt aber in der Regel mehr Zustände.

Eine direkte Moore Implementierung ist nur möglich, wenn jeder Zustand $Z_n$, unabhängig von $X_n$, immer das gleiche Ausgangssignal $Y_n$ produziert. Ist dies nicht der Fall, dann muss man neue Zustände definieren.


\subsection{Asynchronzähler}

Ein einfacher Asynchron Vorwärtszähler aus T-FF sieht, wie folgt, aus:

\begin{center}
	\includegraphics[width = 0.32\textwidth]{images/AsyncCounter.jpg}
\end{center}

Will man einen Rückwärtszähler realisieren, dann muss man auf die positive Flanke gesteuerte FFs verwenden ($0 \to 1$) und statt $Q_i$ die invertierten Ausgänge $\not{Q}_i$ benutzen. \medskip

Die Problematik vom Asynchronzähler ist, dass die Zustandsänderungen einen 'ripple' Effekt aufzeigen, d.h. die FF-Verzögerungszeiten kumulieren sich entlang der Schaltung. Die maximale Taktfrequenz, für welche ein Asynchronzähler 'theoretisch' noch funktioniert, ist:

\begin{center}
	\eqbox{$f_{max} = \dfrac{1}{\sum t_{pd,FFs}}$}
\end{center}


\subsection{Modulo-n Zähler}

Ein Modulo-n Zähler zählt bis zu einem bestimmten Zustand $n$ und springt dann zum vorgegebenen Anfangszustand zurück. Dafür benötigt man FFs mit Asychronen Reset und Set Eingängen, welche benutzt werden um den Rücksprung zum Anfangszustand auszuführen.

\begin{center}
	\includegraphics[width = 0.32\textwidth]{images/AsyncCounter2.jpg}
\end{center}

Der Zustand $n+1$ ist kurzzeitig für die Durchlaufzeit des AND-Gatters vorhanden an den Ausgängen, bis der Rücksprung zum Anfangszustand durchgeführt wurde.
\vfill


\subsection{Synchronzähler}

Bei einem Synchronzähler haben alle FF den gleichen Takt. Synchronzähler sind meist Medwedjew-Automanten, wo der Steuereingang benutzt wird um zwischen Vorwärts- und Rückwartszählen zu wechseln. Beispiel anhand eines Modulo-6 Zählers mit Anfangszustand '1':

\begin{center}
	\includegraphics[width = 0.32\textwidth]{images/SyncCounter.jpg}
\end{center}

Falls JK-FF verwendet werden müssen, dann muss man bei der Minimierung mit dem KV-Diagramm aufpassen, dass man die charakteristische Gleichung des JK-FF einhält.


\subsection{Vorwärts-Rückwärtszähler (Reversible Zähler)}

Ein grosser reversibler Zähler ist relativ aufwendig zu realisieren als Automat. Einfacher ist es D-FFs geschickt mit einem Addierer zu kombinieren.

\begin{center}
	\includegraphics[width = 0.2\textwidth]{images/SyncCounter2.jpg}
\end{center}

Für das Wechseln zwischen Vorwärts- und Rückwärtszählen wechselt man beim Addierer einfach zwischen Addition und Subtraktion (2er Komplement).
\vfill


\subsection{Frequenzteiler mit einem Zähler}

Gegeben ist ein Zähler mit $N$ Zuständen und einem Anfangszustand $k$. Wenn der Zustand $N$ erreicht wird, dann wird bei der nächsten Taktflanke der Anfangszustand $k$ geladen und der T-FF wechselt seinen Zustand.

\begin{center}
	\includegraphics[width = 0.32\textwidth]{images/Frequenzteiler2.jpg}
\end{center}

Mit einer solchen Schaltung kann man einen Frequenzteiler realisieren, welcher flexibler ist in seinem Teilungsverhältnis als ein simpler Frequenzteiler aus nur T-FFs. \medskip

Der Ausgang vom T-FF hat die Frequenz:

\begin{center}
	\eqbox{$f_{out} = \dfrac{f_{in}}{2 (N - k + 1)}$}
\end{center}


