\section{Latches und Flipflops}

Sequentielle Schaltungen welche Rückkopplungen enthalten.


\subsection{Zustandgesteurte Latches}

\emph{Zustandsgesteuert}: Das Verhalten eines Latches hängt nicht nur von den aktuellen Eingangsvariablen ab, sondern auch von den intern gespeicherten Zuständen.


\subsubsection{SR-Latch}

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

	\eqbox{$Q_{n+1} = S \lor (Q_n \land \not{R}) \quad \text{Bedingung: } R \land S = 0$}
\end{center}

\begin{tabular}{c c|c l}
	S   & R   & $Q_{n + 1}$ &            \\ \cline{1-3}
	$0$ & $0$ & $Q_n$       & speichern  \\
	$0$ & $1$ & $0$         & reset      \\
	$1$ & $0$ & $1$         & set        \\
	$1$ & $1$ & -           & unzulässig \\
\end{tabular}


\subsubsection{$\overline{SR}$-Latch}

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

\begin{tabular}{c c|c l}
	$\not{S}$ & $\not{R}$ & $Q_{n + 1}$ &            \\ \cline{1-3}
	$0$       & $0$       & -           & unzulässig \\
	$0$       & $1$       & $1$         & set        \\
	$1$       & $0$       & $0$         & reset      \\
	$1$       & $1$       & $Q_n$       & speichern  \\
\end{tabular}


\subsection{Taktzustandgesteuerte Latches}

\emph{Taktzustandgesteuert}: Änderungen am Eingang werden nur wahrgenommen, wenn das Taktsignal $T = 1$ ist. \medskip

Taktzustandgesteuerte Latches sind gegenüber Störimpulsen empfindlich, da bei $T=1$ jede Änderung am Eingang übernommen wird.


\subsubsection{SRT-Latch}

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

\begin{tabular}{c c c c c l}
	T   &               & $\text{S}_{\text{int}}$ & $\text{R}_{\text{int}}$ &               &                   \\ \cline{1-4}
	$0$ & $\rightarrow$ & $0$                     & $0$                     & $\rightarrow$ & Datenspeicherung  \\
	$1$ & $\rightarrow$ & S                       & R                       & $\rightarrow$ & Normales SR-Latch \\
\end{tabular}

\vfill
\subsubsection{D-Latch}

\begin{center}
	\includegraphics[width = 0.2\textwidth]{images/D-Latch.jpg} \medskip

	\eqbox{$Q_{n+1} = (Q_n \land \not{T}) \lor (D \land T)$}
\end{center}

\begin{tabular}{c c c l}
	T   & $Q_{n + 1}$ &               &                           \\ \cline{1-2}
	$0$ & $Q_n$       & $\rightarrow$ & alter Ausgang gespeichert \\
	$1$ & D           & $\rightarrow$ & Input übernommen          \\
\end{tabular}

\subsubsection{JK-Latch}

\begin{center}
	\begin{circuitikz}[european]
		\ctikzset{tripoles/european not symbol=circle}
		\tikzset{flipflop srlatch/.style={flipflop,
					flipflop def={t1=S, t3=R, t6=Q, t4=$\bar{\text{Q}}$, n4=1}
				}}
		\path[draw] node[flipflop srlatch](srlatch){}
		(srlatch.pin 1)--++(left:5mm)
		node[nand port, number inputs=3](nand1){}
		(nand1.out)
		(srlatch.pin 3)--++(left:5mm)
		node[nand port, number inputs=3](nand2){}
		(nand2.out);
		\path[draw] (nand1.in 2) --++(left:10mm) node[point, label=180:J] {};
		\path[draw] (nand2.in 2) --++(left:10mm) node[point, label=180:K] {};
		\path[draw] (nand2.in 1) --++(up:6mm)--++(left:10mm) node[point, label=180:T] {};
		\path[draw] (nand1.in 3) --++(down:6mm);
		\path[draw] (srlatch.pin 4) --++(right:10mm);
		\path[draw] (srlatch.pin 4) --++(right:6mm) --++(up:23mm) --++(left:53mm) --++(down:3.2mm) --++(right:2mm);
		\path[draw] (srlatch.pin 6) --++(right:10mm);
		\path[draw] (srlatch.pin 6) --++(right:3mm) --++(down:23mm) --++(left:50mm) --++(up:3.2mm) --++(right:2mm);
	\end{circuitikz}
\end{center}

\begin{center}
	\begin{circuitikz}[european]
		\ctikzset{tripoles/european not symbol=circle}
		\tikzset{flipflop jklatch/.style={flipflop,
					flipflop def={t1=J, t2=T, t3=K, t6=Q, t4=$\bar{\text{Q}}$, n4=1}
				}}
		\path[draw] node[flipflop jklatch](jklatch){};
	\end{circuitikz}
\end{center}

\begin{tabular}{c c c|c l}
	T   & J   & K   & $Q_{n + 1}$ &           \\ \cline{1-4}
	$0$ & $X$ & $X$ & $Q_n$       & speichern \\
	$1$ & $0$ & $0$ & $Q_n$       & speichern \\
	$1$ & $0$ & $1$ & $0$         & reset     \\
	$1$ & $1$ & $0$ & $1$         & set       \\
	$1$ & $1$ & $1$ & $\bar{Q_n}$ & kippen    \\
\end{tabular}

\subsection{Flipflops}

\emph{Taktflankensteuerung}: Serieschaltung von zwei mit gegenphasigem Takt gesteuerten Latches(Master-Slave Aufbau).

\begin{center}
	\begin{minipage}{0.45\linewidth}
		\begin{center}
			\begin{tikzpicture}
				\draw[thick] (-0.75, 0) -- (0,0)
				(0,0.4) -- (0,-0.4)
				(0,0.25) -- (0.5,0) -- (0,-0.25);
				\node[] at (1, 0) {CLK};
			\end{tikzpicture}
		\end{center}
		Input beim Übergang von $0 \to 1$ von CLK wirksam.
		\begin{center}
			\begin{tikzpicture}
				\draw (0,0) -- (0.5, 0) -- (0.5, 0.3) -- (1, 0.3) -- (1, 0) -- (1.5, 0) -- (1.5, 0.3) -- (2, 0.3) -- (2, 0) -- (2.5, 0);
				\draw[very thick, red] (0.5, 0) -- (0.5, 0.3) (1.5, 0) -- (1.5, 0.3);
				\node[text width = 30mm] at (1.25, -0.5) {\small Positive/steigende Taktflanke};
			\end{tikzpicture}
		\end{center}
	\end{minipage}
	\hfill
	\begin{minipage}{0.45\linewidth}
		\begin{center}
			\begin{tikzpicture}
				\draw[thick] (-0.75, 0) -- (0,0)
				(0,0.4) -- (0,-0.4)
				(0,0.25) -- (0.5,0) -- (0,-0.25);
				\draw[thick, fill = white] (-0.1,0) circle [radius = 0.75mm];
				\node[] at (1, 0) {CLK};
			\end{tikzpicture}
		\end{center}
		Input beim Übergang von $1 \to 0$ von CLK wirksam.
		\begin{center}
			\begin{tikzpicture}
				\draw (0,0) -- (0.5, 0) -- (0.5, 0.3) -- (1, 0.3) -- (1, 0) -- (1.5, 0) -- (1.5, 0.3) -- (2, 0.3) -- (2, 0) -- (2.5, 0);
				\draw[very thick, blue] (1, 0.3) -- (1, 0) (2, 0.3) -- (2, 0);
				\node[text width = 30mm] at (1.25, -0.5) {\small Negative/fallende Taktflanke};
			\end{tikzpicture}
		\end{center}
	\end{minipage}
\end{center}

Vorteil: Sehr robust gegenüber Störimpulsen

\subsubsection{D-Flipflop}

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

	\eqbox{$Q_{n+1} = D_n \quad \text{Wenn CLK }0 \to 1$}
\end{center}


\subsubsection{SR-Flipflop}

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

	\eqbox{$Q_{n+1} = [S \lor (Q_1 \land \not{R})]_n \quad \text{Reqs: } R \land S = 0, \text{CLK }0 \to 1$}
\end{center}


\subsubsection{JK-Flipflop}

Beim JK-Flipflop gibt es keinen unzulässigen Zustand mehr, dieser wurde durch eine Toggle Funktionalität ersetzt.

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

	\eqbox{$Q_{n + 1} = \left(J \land \overline{Q_n}\right) \lor \left(\overline{K} \land Q_n\right) \quad \text{Wenn CLK }0 \to 1$}
\end{center}

\begin{tabular}{c c | c c l}
	J   & K   & $Q_{n + 1}$ & $\not{Q}_{n + 1}$ &           \\
	\cline{1-4}
	$0$ & $0$ & $Q_{n}$     & $\not{Q}_{n}$     & speichern \\
	$0$ & $1$ & $0$         & $1$               & reset     \\
	$1$ & $0$ & $1$         & $0$               & set       \\
	$1$ & $1$ & $\not{Q}_n$ & $Q_n$             & toggle    \\
\end{tabular} \medskip

Es gibt natürlich auch (takt)zustandsgesteuerte JK-Latches!

\vfill

\subsubsection{Toggle-Flipflop}

Schaltung welche bei jeder aktiven Taktflanke kippt.

\begin{center}
	\includegraphics[width = 0.25\textwidth]{images/T-FF.jpg}

	\eqbox{$Q_{n + 1} = \overline{Q_n} \quad \text{Wenn CLK } 0 \to 1$}
\end{center}

Folgende Schaltung kippt nur bei Taktflanken wenn T=1:

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

\subsection{Asynchroner Set/Reset Input}

Können gespeicherte Zustände asynchron zu CLK überschreiben, d.h. jederzeit auch ohne ein Taktflankensignal.

\begin{center}
	\includegraphics[width = 0.075\textwidth]{images/Asynchron.JPG}
\end{center}

\pagebreak
\subsection{D-Flipflop in CMOS-Technik}

In den meisten Anwendungen werden D-Flipflops verwendet, da sie mit CMOS Technik effizient realisierbar sind.

\subsubsection{Transmission Gates (TG)}

TGs bestehen aus 2 Transistoren, einem NMOS und einem PMOS.

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

Pro D-Latch sind 2 TG und 2 Inverter notwendig.

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

Insgesamt sind also 8NMOS und 8PMOS notwendig.

\begin{center}
	\includegraphics[width = 0.32\textwidth]{images/d_ff_cmos_2.jpeg}
\end{center}
\vfill


\subsubsection{D-Flipflop $\Rightarrow$ JK-Flipflop}

Ein JK-FF kann \emph{nur} mit einem D-FF realisiert werden, wenn:

\begin{center}
	\eqbox{$D_n = (J_n \land \not{Q}_n) \lor (\not{K}_n \land Q_n)$}
\end{center}


\subsection{Verzögerungszeiten}

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

\begin{flushleft}
	\begin{tabular}{r p{50mm}}
		Setup-Zeit ($t_s$)          & Solange muss Signal an FF \underline{vor} aktiver Taktflanke stabil anliegen.  \\
		Hold-Zeit ($t_h$)           & Solange muss Signal an FF \underline{nach} aktiver Taktflanke stabil anliegen. \\
		Verzögerungszeit ($t_{pd}$) & Durchlaufzeit
	\end{tabular}
\end{flushleft}

Bei Verletzung der Zusatzbedingungen $t_s, t_h$ kann der Zustand des FF unbestimmt oder metastabil werden.


\subsubsection{Maximale Taktfrequenz bei seriellen FFs}

In einem Schaltnetz mit mindestens zwei Flipflops in Serie (kann auch der gleiche FF sein), ist die maximale Taktfrequenz des Clocks begrenzt.

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

	\eqbox{$T_{\text{min}} \geq t_{pd,ff1} + t_{pd,ks} + t_{s,ff2}  \qquad  f_{max} = \frac{1}{T_{min}}$}

	wobei $t_{pd,ks}$ Verzögerungszeit kombinatorische Schaltung
\end{center}

Bei komplizierten kombinatorischen Schaltungen begrenzt der Pfad mit der \emph{längsten} Zeitverzögerung die Taktfrequenz.
\vfill


\subsection{Master-Slave Flipflops (Zwischenspeicher FFs)}

\begin{center}
	\begin{tabular}{r p{235pt}}
		- & Übernehmen Eingangssignal mit der steigenden (bzw. fallenden) Taktflanke.             \\
		- & Geben das Ausgangssignal mit der nächsten fallenden (bzw. steigenden) Taktflanke aus. \\
	\end{tabular}
\end{center}

JK-Master-Slave FF (mit SR-,D-,T-FF auch möglich):

\begin{center}
	\includegraphics[width = 0.25\textwidth]{images/JK-MS-FF.JPG}

	\includegraphics[width = 0.3\textwidth]{images/JK-MS-FF2.JPG}
\end{center}


\subsection{Frequenzteiler und Zähler}

T-FF können gut verwendet werden, um die Periode T eines periodischen Signals zu verlängern. Mit $n$-T-FFs kann die Frequenz durch den Faktor $2^n$ geteilt werden.

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

Eine andere wichtige Anwendung von FFs ist als digitale Dualzähler. Dafür müssen T-FFs mit Rückflankensteuerung ($1 \to 0$) verwendet werden. Mit $n$-T-FFs kann man von 0 bis $2^{n-1}$ zählen.

\begin{center}
	\includegraphics[width = 0.32\textwidth]{images/Zahler.JPG}
\end{center}
\vfill

\pagebreak

