\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