Einleitung
Beobachtung
Was passiert in dieser Schaltung?
| \(x\) | \(y\) | \(x \lor \overline{y}\) |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
Was passiert in dieser Schaltung?
| \(x\) | \(y\) | \(x \lor \overline{y}\) |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
Was passiert in dieser Schaltung?
| \(x\) | \(y\) | \(x \lor \overline{y}\) |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
Was passiert in dieser Schaltung? Offensichtlich stabil.
| \(x\) | \(y\) | \(x \lor \overline{y}\) |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
Was passiert in dieser Schaltung?
| \(x\) | \(y\) | \(x \lor \overline{y}\) |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
Was passiert in dieser Schaltung?
| \(x\) | \(y\) | \(x \lor \overline{y}\) |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
Was passiert in dieser Schaltung?
| \(x\) | \(y\) | \(x \lor \overline{y}\) |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
Was passiert in dieser Schaltung?
| \(x\) | \(y\) | \(x \lor \overline{y}\) |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
Was passiert in dieser Schaltung?
| \(x\) | \(y\) | \(x \lor \overline{y}\) |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
Was passiert in dieser Schaltung?
| \(x\) | \(y\) | \(x \lor \overline{y}\) |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
Was passiert in dieser Schaltung?
| \(x\) | \(y\) | \(x \lor \overline{y}\) |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
Beobachtung: Und immer weiter so …
Natürlich: In der Realität viel schneller
Darum heißt die Schaltung Flimmerschaltung
Unkontrolliertes Flimmern ist sehr unschön.
Also Kreise konsequent verbieten?
Wozu können Kreise gut sein?
Bistabile Kippstufe (engl. Latch)
| \(x\) | \(y\) | \(\overline{xy}\) |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
| \(R_t\) | \(S_t\) | \(P_{t+\Delta}\) | \(Q_{t+\Delta}\) | \(P_{t+2\Delta}\) | \(Q_{t+2\Delta}\) |
|---|---|---|---|---|---|
| 0 | 0 | ||||
| 0 | 1 | ||||
| 1 | 0 | ||||
| 1 | 1 |
\(\Delta\): Zeit, in der beide Gatter genau einmal schalten
| \(x\) | \(y\) | \(\overline{xy}\) |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
| \(R_t\) | \(S_t\) | \(P_{t+\Delta}\) | \(Q_{t+\Delta}\) | \(P_{t+2\Delta}\) | \(Q_{t+2\Delta}\) |
|---|---|---|---|---|---|
| 0 | 0 | ||||
| 0 | 1 | ||||
| 1 | 0 | ||||
| 1 | 1 |
\(\Delta\): Zeit, in der beide Gatter genau einmal schalten
| \(x\) | \(y\) | \(\overline{xy}\) |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
| \(R_t\) | \(S_t\) | \(P_{t+\Delta}\) | \(Q_{t+\Delta}\) | \(P_{t+2\Delta}\) | \(Q_{t+2\Delta}\) |
|---|---|---|---|---|---|
| 0 | 0 | 1 | 1 | ||
| 0 | 1 | ||||
| 1 | 0 | ||||
| 1 | 1 |
\(\Delta\): Zeit, in der beide Gatter genau einmal schalten
| \(x\) | \(y\) | \(\overline{xy}\) |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
| \(R_t\) | \(S_t\) | \(P_{t+\Delta}\) | \(Q_{t+\Delta}\) | \(P_{t+2\Delta}\) | \(Q_{t+2\Delta}\) |
|---|---|---|---|---|---|
| 0 | 0 | 1 | 1 | 1 | 1 |
| 0 | 1 | ||||
| 1 | 0 | ||||
| 1 | 1 |
\(\Delta\): Zeit, in der beide Gatter genau einmal schalten
| \(x\) | \(y\) | \(\overline{xy}\) |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
| \(R_t\) | \(S_t\) | \(P_{t+\Delta}\) | \(Q_{t+\Delta}\) | \(P_{t+2\Delta}\) | \(Q_{t+2\Delta}\) |
|---|---|---|---|---|---|
| 0 | 0 | 1 | 1 | 1 | 1 |
| 0 | 1 | ||||
| 1 | 0 | ||||
| 1 | 1 |
\(\Delta\): Zeit, in der beide Gatter genau einmal schalten
| \(x\) | \(y\) | \(\overline{xy}\) |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
| \(R_t\) | \(S_t\) | \(P_{t+\Delta}\) | \(Q_{t+\Delta}\) | \(P_{t+2\Delta}\) | \(Q_{t+2\Delta}\) |
|---|---|---|---|---|---|
| 0 | 0 | 1 | 1 | 1 | 1 |
| 0 | 1 | ||||
| 1 | 0 | ||||
| 1 | 1 |
\(\Delta\): Zeit, in der beide Gatter genau einmal schalten
| \(x\) | \(y\) | \(\overline{xy}\) |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
| \(R_t\) | \(S_t\) | \(P_{t+\Delta}\) | \(Q_{t+\Delta}\) | \(P_{t+2\Delta}\) | \(Q_{t+2\Delta}\) |
|---|---|---|---|---|---|
| 0 | 0 | 1 | 1 | 1 | 1 |
| 0 | 1 | ||||
| 1 | 0 | ||||
| 1 | 1 |
\(\Delta\): Zeit, in der beide Gatter genau einmal schalten
| \(x\) | \(y\) | \(\overline{xy}\) |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
| \(R_t\) | \(S_t\) | \(P_{t+\Delta}\) | \(Q_{t+\Delta}\) | \(P_{t+2\Delta}\) | \(Q_{t+2\Delta}\) |
|---|---|---|---|---|---|
| 0 | 0 | 1 | 1 | 1 | 1 |
| 0 | 1 | 1 | 0 | ||
| 1 | 0 | ||||
| 1 | 1 |
\(\Delta\): Zeit, in der beide Gatter genau einmal schalten
| \(x\) | \(y\) | \(\overline{xy}\) |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
| \(R_t\) | \(S_t\) | \(P_{t+\Delta}\) | \(Q_{t+\Delta}\) | \(P_{t+2\Delta}\) | \(Q_{t+2\Delta}\) |
|---|---|---|---|---|---|
| 0 | 0 | 1 | 1 | 1 | 1 |
| 0 | 1 | 1 | 0 | 1 | 0 |
| 1 | 0 | ||||
| 1 | 1 |
\(\Delta\): Zeit, in der beide Gatter genau einmal schalten
| \(x\) | \(y\) | \(\overline{xy}\) |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
| \(R_t\) | \(S_t\) | \(P_{t+\Delta}\) | \(Q_{t+\Delta}\) | \(P_{t+2\Delta}\) | \(Q_{t+2\Delta}\) |
|---|---|---|---|---|---|
| 0 | 0 | 1 | 1 | 1 | 1 |
| 0 | 1 | 1 | 0 | 1 | 0 |
| 1 | 0 | ||||
| 1 | 1 |
\(\Delta\): Zeit, in der beide Gatter genau einmal schalten
| \(x\) | \(y\) | \(\overline{xy}\) |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
| \(R_t\) | \(S_t\) | \(P_{t+\Delta}\) | \(Q_{t+\Delta}\) | \(P_{t+2\Delta}\) | \(Q_{t+2\Delta}\) |
|---|---|---|---|---|---|
| 0 | 0 | 1 | 1 | 1 | 1 |
| 0 | 1 | 1 | 0 | 1 | 0 |
| 1 | 0 | ||||
| 1 | 1 |
\(\Delta\): Zeit, in der beide Gatter genau einmal schalten
| \(x\) | \(y\) | \(\overline{xy}\) |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
| \(R_t\) | \(S_t\) | \(P_{t+\Delta}\) | \(Q_{t+\Delta}\) | \(P_{t+2\Delta}\) | \(Q_{t+2\Delta}\) |
|---|---|---|---|---|---|
| 0 | 0 | 1 | 1 | 1 | 1 |
| 0 | 1 | 1 | 0 | 1 | 0 |
| 1 | 0 | \(\overline{Q_t}\) | 1 | ||
| 1 | 1 |
\(\Delta\): Zeit, in der beide Gatter genau einmal schalten
| \(x\) | \(y\) | \(\overline{xy}\) |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
| \(R_t\) | \(S_t\) | \(P_{t+\Delta}\) | \(Q_{t+\Delta}\) | \(P_{t+2\Delta}\) | \(Q_{t+2\Delta}\) |
|---|---|---|---|---|---|
| 0 | 0 | 1 | 1 | 1 | 1 |
| 0 | 1 | 1 | 0 | 1 | 0 |
| 1 | 0 | \(\overline{Q_t}\) | 1 | 0 | 1 |
| 1 | 1 |
\(\Delta\): Zeit, in der beide Gatter genau einmal schalten
| \(x\) | \(y\) | \(\overline{xy}\) |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
| \(R_t\) | \(S_t\) | \(P_{t+\Delta}\) | \(Q_{t+\Delta}\) | \(P_{t+2\Delta}\) | \(Q_{t+2\Delta}\) |
|---|---|---|---|---|---|
| 0 | 0 | 1 | 1 | 1 | 1 |
| 0 | 1 | 1 | 0 | 1 | 0 |
| 1 | 0 | \(\overline{Q_t}\) | 1 | 0 | 1 |
| 1 | 1 |
\(\Delta\): Zeit, in der beide Gatter genau einmal schalten
| \(x\) | \(y\) | \(\overline{xy}\) |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
| \(R_t\) | \(S_t\) | \(P_{t+\Delta}\) | \(Q_{t+\Delta}\) | \(P_{t+2\Delta}\) | \(Q_{t+2\Delta}\) |
|---|---|---|---|---|---|
| 0 | 0 | 1 | 1 | 1 | 1 |
| 0 | 1 | 1 | 0 | 1 | 0 |
| 1 | 0 | \(\overline{Q_t}\) | 1 | 0 | 1 |
| 1 | 1 |
\(\Delta\): Zeit, in der beide Gatter genau einmal schalten
| \(x\) | \(y\) | \(\overline{xy}\) |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
| \(R_t\) | \(S_t\) | \(P_{t+\Delta}\) | \(Q_{t+\Delta}\) | \(P_{t+2\Delta}\) | \(Q_{t+2\Delta}\) |
|---|---|---|---|---|---|
| 0 | 0 | 1 | 1 | 1 | 1 |
| 0 | 1 | 1 | 0 | 1 | 0 |
| 1 | 0 | \(\overline{Q_t}\) | 1 | 0 | 1 |
| 1 | 1 | \(\overline{Q_t}\) | \(Q_t\) |
\(\Delta\): Zeit, in der beide Gatter genau einmal schalten
| \(x\) | \(y\) | \(\overline{xy}\) |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
| \(R_t\) | \(S_t\) | \(P_{t+\Delta}\) | \(Q_{t+\Delta}\) | \(P_{t+2\Delta}\) | \(Q_{t+2\Delta}\) |
|---|---|---|---|---|---|
| 0 | 0 | 1 | 1 | 1 | 1 |
| 0 | 1 | 1 | 0 | 1 | 0 |
| 1 | 0 | \(\overline{Q_t}\) | 1 | 0 | 1 |
| 1 | 1 | \(\overline{Q_t}\) | \(Q_t\) | \(\overline{Q_t}\) | \(Q_t\) |
\(\Delta\): Zeit, in der beide Gatter genau einmal schalten
| \(x\) | \(y\) | \(\overline{xy}\) |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
| \(R_t\) | \(S_t\) | \(P_{t+\Delta}\) | \(Q_{t+\Delta}\) | \(P_{t+2\Delta}\) | \(Q_{t+2\Delta}\) |
|---|---|---|---|---|---|
| 0 | 0 | 1 | 1 | 1 | 1 |
| 0 | 1 | 1 | \(\overline{P_t}\) | 1 | 0 |
| 1 | 0 | 0 | 1 | 0 | 1 |
| 1 | 1 | \(P_t\) | \(\overline{P_t}\) | \(P_t\) | \(\overline{P_t}\) |
\(\Delta\): Zeit, in der beide Gatter genau einmal schalten
Anmerkung: Heißt auch Latch
Positiv: Kippt, flimmert nicht
Negativ: Verhalten hängt von Schaltzeiten der beiden Gatter ab
Genauer beobachtet: Verhalten hängt manchmal von Schaltzeiten der beiden Gatter ab
1. Fall: oberes NAND-Gatter schneller
| \(R_t\) | \(S_t\) | \(P_{t+\Delta}\) | \(Q_{t+\Delta}\) | \(P_{t+2\Delta}\) | \(Q_{t+2\Delta}\) |
|---|---|---|---|---|---|
| 0 | 0 | 1 | 1 | 1 | 1 |
| 0 | 1 | 1 | 0 | 1 | 0 |
| 1 | 0 | \(\overline{Q_t}\) | 1 | 0 | 1 |
| 1 | 1 | \(\overline{Q_t}\) | \(Q_t\) | \(\overline{Q_t}\) | \(Q_t\) |
\[P_{t+2\Delta} = \overline{RQ_{t+\Delta}}\]
\[ \begin{aligned} &= \overline{R} \lor \overline{Q_{t+\Delta}} = \overline{R} \lor \overline{\overline{SP_{t+\Delta}}} = \overline{R} \lor SP_{t+\Delta}\\ &= \overline{R} \lor S\overline{RQ_t} = \overline{R} \lor S(\overline{R} \lor \overline{Q_t}) = \overline{R} \lor S\overline{R} \lor S\overline{Q_t}\\ &= \overline{R} \lor S\overline{Q_t} \end{aligned} \]
2. Fall: unteres NAND-Gatter schneller
| \(R_t\) | \(S_t\) | \(P_{t+\Delta}\) | \(Q_{t+\Delta}\) | \(P_{t+2\Delta}\) | \(Q_{t+2\Delta}\) |
|---|---|---|---|---|---|
| 0 | 0 | 1 | 1 | 1 | 1 |
| 0 | 1 | 1 | \(\overline{P_t}\) | 1 | 0 |
| 1 | 0 | 0 | 1 | 0 | 1 |
| 1 | 1 | \(P_t\) | \(\overline{P_t}\) | \(P_t\) | \(\overline{P_t}\) |
\[P_{t+2\Delta} = \overline{RQ_{t+2\Delta}}\]
\[ \begin{aligned} &= \overline{R} \lor \overline{Q_{t+2\Delta}} = \overline{R} \lor \overline{\overline{SP_{t+\Delta}}} = \overline{R} \lor SP_{t+\Delta}\\ &= \overline{R} \lor S\overline{RQ_{t+\Delta}} = \overline{R} \lor S(\overline{R} \lor \overline{Q_{t+\Delta}}) = \overline{R} \lor S\overline{R} \lor S\overline{Q_{t+\Delta}}\\ &= \overline{R} \lor S\overline{Q_{t+\Delta}} = \overline{R} \lor S\overline{\overline{SP_t}} = \overline{R} \lor SSP_t = \overline{R} \lor SP_t \end{aligned} \]
1. Fall: Oberes NAND-Gatter schneller
\[P_{t+2\Delta} = \overline{R} \lor S\overline{Q_t}\]
2. Fall: Unteres NAND-Gatter schneller
\[P_{t+2\Delta} = \overline{R} \lor SP_t\]
Beobachtung: Wenn \(P_t = \overline{Q_t}\), ist das Verhalten an \(P_t\) stabil, also von den Schaltzeiten der Gatter unabhängig.
Was ist mit dem anderen Ausgang?
1. Fall: oberes NAND-Gatter schneller
| \(R_t\) | \(S_t\) | \(P_{t+\Delta}\) | \(Q_{t+\Delta}\) | \(P_{t+2\Delta}\) | \(Q_{t+2\Delta}\) |
|---|---|---|---|---|---|
| 0 | 0 | 1 | 1 | 1 | 1 |
| 0 | 1 | 1 | 0 | 1 | 0 |
| 1 | 0 | \(\overline{Q_t}\) | 1 | 0 | 1 |
| 1 | 1 | \(\overline{Q_t}\) | \(Q_t\) | \(\overline{Q_t}\) | \(Q_t\) |
\[ \begin{aligned} Q_{t+2\Delta} &= \overline{SP_{t+2\Delta}} = \overline{S} \lor \overline{P_{t+2\Delta}} = \overline{S} \lor \overline{\overline{RQ_{t+\Delta}}} = \overline{S} \lor RQ_{t+\Delta}\\ &= \overline{S} \lor R\overline{SP_{t+\Delta}} = \overline{S} \lor R(\overline{S} \lor \overline{P_{t+\Delta}}) = \overline{S} \lor R\overline{S} \lor R\overline{P_{t+\Delta}}\\ &= \overline{S} \lor R\overline{P_{t+\Delta}} = \overline{S} \lor R\overline{RQ_t} = \overline{S} \lor RRQ_t = \overline{S} \lor RQ_t \end{aligned} \]
2. Fall: unteres NAND-Gatter schneller
| \(R_t\) | \(S_t\) | \(P_{t+\Delta}\) | \(Q_{t+\Delta}\) | \(P_{t+2\Delta}\) | \(Q_{t+2\Delta}\) |
|---|---|---|---|---|---|
| 0 | 0 | 1 | 1 | 1 | 1 |
| 0 | 1 | 1 | \(\overline{P_t}\) | 1 | 0 |
| 1 | 0 | 0 | 1 | 0 | 1 |
| 1 | 1 | \(P_t\) | \(\overline{P_t}\) | \(P_t\) | \(\overline{P_t}\) |
\[ \begin{aligned} Q_{t+2\Delta} &= \overline{SP_{t+\Delta}} = \overline{S} \lor \overline{P_{t+\Delta}} = \overline{S} \lor \overline{\overline{RQ_{t+\Delta}}} = \overline{S} \lor RQ_{t+\Delta}\\ &= \overline{S} \lor R\overline{SP_t} = \overline{S} \lor R(\overline{S} \lor \overline{P_t}) = \overline{S} \lor R\overline{S} \lor R\overline{P_t}\\ &= \overline{S} \lor R\overline{P_t} \end{aligned} \]
1. Fall: Oberes NAND-Gatter schneller
\[P_{t+2\Delta} = \overline{R} \lor S\overline{Q_t} \qquad Q_{t+2\Delta} = S \lor RQ_t\]
2. Fall: Unteres NAND-Gatter schneller
\[P_{t+2\Delta} = \overline{R} \lor SP_t \qquad Q_{t+2\Delta} = S \lor R\overline{P_t}\]
Also: Wenn \(Q_t = \overline{P_t}\), so ist das Verhalten stabil, von den Schaltzeiten der Gatter unabhängig.
Also: Forderung \(P_t \ne Q_t\)
| oberes Gatter schneller | unteres Gatter schneller | ||||
|---|---|---|---|---|---|
| \(R_t\) | \(S_t\) | \(P_{t+2\Delta}\) | \(Q_{t+2\Delta}\) | \(P_{t+2\Delta}\) | \(Q_{t+2\Delta}\) |
| 0 | 0 | 1 | 1 | 1 | 1 |
| 0 | 1 | 1 | 0 | 1 | 0 |
| 1 | 0 | 0 | 1 | 0 | 1 |
| 1 | 1 | \(\overline{Q_t}\) | \(Q_t\) | \(P_t\) | \(\overline{P_t}\) |
| oberes Gatter schneller | unteres Gatter schneller | ||||
|---|---|---|---|---|---|
| \(R_t\) | \(S_t\) | \(P_{t+2\Delta}\) | \(Q_{t+2\Delta}\) | \(P_{t+2\Delta}\) | \(Q_{t+2\Delta}\) |
| 0 | 0 | 1 | 1 | 1 | 1 |
| 0 | 1 | 1 | 0 | 1 | 0 |
| 1 | 0 | 0 | 1 | 0 | 1 |
| 1 | 1 | \(\overline{Q_t}\) | \(Q_t\) | \(P_t\) | \(\overline{P_t}\) |
Beobachtung: Wir müssen nur \(R = S = 0\) ausschließen, damit die Forderung \(P_t \ne Q_t\) gilt.
| oberes Gatter schneller | unteres Gatter schneller | ||||
|---|---|---|---|---|---|
| \(R_t\) | \(S_t\) | \(P_{t+2\Delta}\) | \(Q_{t+2\Delta}\) | \(P_{t+2\Delta}\) | \(Q_{t+2\Delta}\) |
| 0 | 0 | 1 | 1 | 1 | 1 |
| 0 | 1 | 1 | 0 | 1 | 0 |
| 1 | 0 | 0 | 1 | 0 | 1 |
| 1 | 1 | \(\overline{Q_t}\) | \(Q_t\) | \(P_t\) | \(\overline{P_t}\) |
Beobachtung: Wir müssen nur \(R = S = 0\) ausschließen.
| \(R_t\) | \(S_t\) | \(P_{t+2\Delta}\) | \(Q_{t+2\Delta}\) |
|---|---|---|---|
| 0 | 1 | 1 | 0 |
| 1 | 0 | 0 | 1 |
| 1 | 1 | \(P_t\) | \(\overline{P_t}\) |
Fazit: Bi-stabile NAND-Kippstufe realisiert 1-Bit-Speicher!
Bi-stabile NAND-Kippstufe realisiert 1-Bit-Speicher.
Beobachtung
Wunsch: Strukturierter Entwurf
Automaten
Wunsch: Formales Modell eines Automaten
Was ist überhaupt ein Automat?
Beispiele
Gegenbeispiele
Grobbeschreibung
Jetzt: Exakte, formale Beschreibung
Ein Mealy-Automat \(M = (Q, q_0, \Sigma, \Delta, \delta, \lambda)\) ist definiert durch:
In einem Takt mit aktuellem Zustand \(q\) und Eingabesymbol \(w\)
| aktueller Zustand \(q \in Q\) | Eingabe \(w \in \Sigma\) | Folgezustand \(\delta(q, w)\) | Ausgabe \(\lambda(q, w)\) |
|---|---|---|---|
| \(q_0\) | 0 | \(q_1\) | \(a\) |
| \(q_0\) | 1 | \(q_2\) | \(c\) |
| \(q_1\) | 0 | \(q_0\) | \(c\) |
| \(q_1\) | 1 | \(q_2\) | \(b\) |
| \(q_2\) | 0 | \(q_1\) | \(a\) |
| \(q_2\) | 1 | \(q_0\) | \(b\) |
\(Q = \{q_0, q_1, q_2\}\)
\(\Sigma = \{0, 1\}\)
\(\Delta = \{a, b, c\}\)
Eingabe: \(0\;\;1\;\;0\;\;0\)
Ausgabe:
\(Q = \{q_0, q_1, q_2\}\)
\(\Sigma = \{0, 1\}\)
\(\Delta = \{a, b, c\}\)
Eingabe: \(0\;\;1\;\;0\;\;0\)
Ausgabe:
\(Q = \{q_0, q_1, q_2\}\)
\(\Sigma = \{0, 1\}\)
\(\Delta = \{a, b, c\}\)
Eingabe: \(\underline{\mathbf{0}}\;\;1\;\;0\;\;0\)
Ausgabe:
\(Q = \{q_0, q_1, q_2\}\)
\(\Sigma = \{0, 1\}\)
\(\Delta = \{a, b, c\}\)
Eingabe: \(\underline{\mathbf{0}}\;\;1\;\;0\;\;0\)
Ausgabe:
\(Q = \{q_0, q_1, q_2\}\)
\(\Sigma = \{0, 1\}\)
\(\Delta = \{a, b, c\}\)
Eingabe: \(0\;\;\underline{\mathbf{1}}\;\;0\;\;0\)
Ausgabe: a
\(Q = \{q_0, q_1, q_2\}\)
\(\Sigma = \{0, 1\}\)
\(\Delta = \{a, b, c\}\)
Eingabe: \(0\;\;\underline{\mathbf{1}}\;\;0\;\;0\)
Ausgabe: a b
\(Q = \{q_0, q_1, q_2\}\)
\(\Sigma = \{0, 1\}\)
\(\Delta = \{a, b, c\}\)
Eingabe: \(0\;\;1\;\;\underline{\mathbf{0}}\;\;0\)
Ausgabe: a b
\(Q = \{q_0, q_1, q_2\}\)
\(\Sigma = \{0, 1\}\)
\(\Delta = \{a, b, c\}\)
Eingabe: \(0\;\;1\;\;\underline{\mathbf{0}}\;\;0\)
Ausgabe: a b a
\(Q = \{q_0, q_1, q_2\}\)
\(\Sigma = \{0, 1\}\)
\(\Delta = \{a, b, c\}\)
Eingabe: \(0\;\;1\;\;0\;\;\underline{\mathbf{0}}\)
Ausgabe: a b a
\(Q = \{q_0, q_1, q_2\}\)
\(\Sigma = \{0, 1\}\)
\(\Delta = \{a, b, c\}\)
Eingabe: \(0\;\;1\;\;0\;\;\underline{\mathbf{0}}\)
Ausgabe: a b a
\(Q = \{q_0, q_1, q_2\}\)
\(\Sigma = \{0, 1\}\)
\(\Delta = \{a, b, c\}\)
Eingabe: \(0\;\;1\;\;0\;\;\underline{\mathbf{0}}\)
Ausgabe: a b a c
Definition: Zwei Mealy-Automaten heißen äquivalent, wenn sie für jede Eingabe \(w \in \Sigma^*\) die gleiche Ausgabe \(a \in \Delta^*\) erzeugen.
Beobachtung
Hier: Noch ein anderes (ähnliches!) Automaten-Modell
Ein Moore-Automat \(M = (Q, q_0, \Sigma, \Delta, \delta, \lambda)\) ist definiert durch:
In einem Takt mit aktuellem Zustand \(q\) und Eingabesymbol \(w\)
Beobachtung: Zu jedem Moore-Automaten gibt es einen äquivalenten Mealy-Automaten.
Denn: Zu Moore-Automat \(A = (Q, q_0, \Sigma, \Delta, \delta, \lambda)\)
Offensichtlich äquivalent
Beobachtung: Zu jedem Mealy-Automaten gibt es einen äquivalenten Moore-Automaten.
Denn: Zu Mealy-Automat \(A = (Q, q_0, \Sigma, \Delta, \delta, \lambda)\)
Äquivalent
Aufgabe: Einfache „Datenglättung“: Filtere isolierte Bits aus Datenstrom aus.
Es gilt: \(\Sigma := \{0, 1\}, \Delta := \{0, 1\}\)
Mealy-Automat
mit \(Q := \{0, 1, ?\}, q_0 := 0\)
Mealy-Automat
Moore-Automat
Synchrone Schaltwerke
Erinnerung: bi-stabile NAND-Kippstufe
| \(R_t\) | \(S_t\) | \(P_{t+2\Delta}\) | \(Q_{t+2\Delta}\) |
|---|---|---|---|
| 0 | 1 | 1 | 0 |
| 1 | 0 | 0 | 1 |
| 1 | 1 | \(P_t\) | \(\overline{P_t}\) |
\(Q = \{0, 1\}, q_0 = 0\)
\(\Sigma = \{01, 10, 11\}\)
\(\Delta = \{0, 1\}\)
\(R\): Reset, \(S\): Set
Nicht getaktet
| \(R_t\) | \(S_t\) | \(P_{t+2\Delta}\) | \(Q_{t+2\Delta}\) |
|---|---|---|---|
| 0 | 1 | 1 | 0 |
| 1 | 0 | 0 | 1 |
| 1 | 1 | \(P_t\) | \(\overline{P_t}\) |
Getaktet
\(Q = \{0, 1\}, q_0 = 0\)
\(\Sigma = \{01, 10, 11\}\)
\(\Delta = \{0, 1\}\)
\(R\): Reset, \(S\): Set
Ab jetzt: Getaktete Schaltwerke
Also: Führe Taktsignal \(T\) ein
Verschiedene technische Möglichkeiten
Digital-logische Ebene: Technisches Detail ignorieren
| \(R\) | \(S\) | \(Q\) |
|---|---|---|
| 0 | 0 | \(Q\) |
| 0 | 1 | 1 |
| 1 | 0 | 0 |
| 1 | 1 | nicht erlaubt |
Zustandstabelle NAND-Kippstufe
| \(R_t\) | \(S_t\) | \(P_{t+2\Delta}\) | \(Q_{t+2\Delta}\) |
|---|---|---|---|
| 0 | 0 | nicht erlaubt | nicht erlaubt |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 0 | 1 |
| 1 | 1 | \(\overline{Q_t}\) | \(Q_t\) |
Wertetabelle NAND
| \(x\) | \(y\) | \(\overline{xy}\) |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
\(R\): Reset, \(S\): Set
| \(D\) | \(Q\) |
|---|---|
| 0 | 0 |
| 1 | 1 |
Sinnlos?
Verzögerung um 1 Takt
Name: Delay
| \(R\) | \(S\) | \(Q\) |
|---|---|---|
| 0 | 0 | \(Q\) |
| 0 | 1 | 1 |
| 1 | 0 | 0 |
| 1 | 1 | nicht erlaubt |
| \(J\) | \(K\) | \(R\) | \(S\) | \(Q\) |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | \(Q\) |
| 0 | 1 | \(Q\) | 0 | 0 |
| 1 | 0 | 0 | \(\overline{Q}\) | 1 |
| 1 | 1 | \(Q\) | \(\overline{Q}\) | \(\overline{Q}\) |
| \(R\) | \(S\) | \(Q\) |
|---|---|---|
| 0 | 0 | \(Q\) |
| 0 | 1 | 1 |
| 1 | 0 | 0 |
| 1 | 1 | nicht erlaubt |
Positiv: Alle Eingaben erlaubt, sinnvolle Funktionalität, vielseitig
\(J\): Jump, \(K\): Kill
| \(T\) | \(Q\) |
|---|---|
| 0 | \(Q\) |
| 1 | \(\overline{Q}\) |
Name: Toggle
| \(J\) | \(K\) | \(Q\) |
|---|---|---|
| 0 | 0 | \(Q\) |
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 1 | 1 | \(\overline{Q}\) |
Wir haben: Also hier 4 verschiedene Flip-Flop-Typen
Wozu brauchen wir eigentlich Flip-Flops?
Klar: Realisierung von Speicher
Was müssen wir für den Einsatz als Speicher wissen?
Klar: Gezielte Änderung von Speicherinhalten
Also: Zustandstabellen eigentlich nicht interessant
Besser: Ansteuertabellen
Etwas präziser
Zustandstabelle
Eingabe \(\Rightarrow\) Zustand
Ansteuertabelle
Ist-Zustand, Soll-Zustand \(\Rightarrow\) Eingabe
Anmerkung: Ansteuertabellen können „don’t care“ enthalten
Zustandstabelle
| \(D\) | \(Q\) |
|---|---|
| 0 | 0 |
| 1 | 1 |
Ansteuertabelle
| \(Q_{\text{alt}}\) | \(Q_{\text{neu}}\) | \(D\) |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
Beobachtung: Ansteuerung \(D\) vom alten Zustand unabhängig
Zustandstabelle
| \(T\) | \(Q\) |
|---|---|
| 0 | \(Q\) |
| 1 | \(\overline{Q}\) |
Ansteuertabelle
| \(Q_{\text{alt}}\) | \(Q_{\text{neu}}\) | \(T\) |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
Beobachtung: Kenntnis des „alten“ Zustands erforderlich
Zustandstabelle
| \(R\) | \(S\) | \(Q\) |
|---|---|---|
| 0 | 0 | \(Q\) |
| 0 | 1 | 1 |
| 1 | 0 | 0 |
| 1 | 1 | nicht erlaubt |
Ansteuertabelle
| \(Q_{\text{alt}}\) | \(Q_{\text{neu}}\) | \(R\) | \(S\) |
|---|---|---|---|
| 0 | 0 | \(*\) | 0 |
| 0 | 1 | 0 | 1 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | \(*\) |
Beobachtung: Wenn Zustand nicht wechselt, gibt es Freiheit in der Ansteuerung
Zustandstabelle
| \(J\) | \(K\) | \(Q\) |
|---|---|---|
| 0 | 0 | \(Q\) |
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 1 | 1 | \(\overline{Q}\) |
Ansteuertabelle
| \(Q_{\text{alt}}\) | \(Q_{\text{neu}}\) | \(J\) | \(K\) |
|---|---|---|---|
| 0 | 0 | 0 | \(*\) |
| 0 | 1 | 1 | \(*\) |
| 1 | 0 | \(*\) | 1 |
| 1 | 1 | \(*\) | 0 |
Beobachtung: Immer Freiheit in der Ansteuerung
Wir haben: Für RS-Flip-Flops und JK-Flip-Flops nur partiell definierte Ansteuerfunktionen
Ist das ungünstig?
Nein!
Ein allgemeines, formales Schaltwerkmodell
Beobachtung: Führt Gelerntes über Schaltnetze, Flip-Flops und Automaten sinnvoll zusammen
Etwas detaillierter
Wunsch: Strukturierter Schaltwerk-Entwurf
Was können wir überhaupt als Schaltwerk realisieren?
Klar: Alles, was als Automat beschrieben werden kann
Zum Beispiel
Anmerkung: Heuristiken und Erfahrung sind wichtig
Serienaddierwerke
zur Einführung: ein „praktisches“ Beispiel
hilfreich: besonders gut verstandenes Problem
Aufgabe: Addition von zwei Betragszahlen
Erinnerung: wir haben
| Verfahren | Größe | Tiefe |
|---|---|---|
| Schul-Methode | \(\approx 5n\) | \(\approx 2n\) |
| Carry-Look-Ahead | \(\approx n^2\) | \(\approx 2\log_2 n\) |
jetzt: klein und flach mit einem Schaltwerk
aber extrem langsam
Schritt 0: Verstehen der Aufgabe
Wunsch:
Offensichtlich: geht nur von rechts nach links
Was muss man sich merken?
Schritt 1: Spezifikation des Verhaltens
Entscheidung: Beschreibung durch Mealy-Automat
Schritt 2: Wahl der Codierung: Eingaben, Zuständen, Ausgaben
Beobachtung: im Allgemeinen (fast) jede Freiheit
hier: kanonische Codierung naheliegend
Codierung von \(Q\)
| \(q \in Q\) | Codierung |
|---|---|
| 0 | 0 |
| 1 | 1 |
Codierung von \(\Sigma\)
| \(w \in \Sigma\) | Codierung |
|---|---|
| 00 | 00 |
| 01 | 01 |
| 10 | 10 |
| 11 | 11 |
Codierung von \(\Delta\)
| \(w \in \Delta\) | Codierung |
|---|---|
| 0 | 0 |
| 1 | 1 |
Schritt 3: Wertetabelle Eingaben, Zustand, neuer Zustand, Ausgaben
naheliegend: Eingaben heißen \(x\), \(y\); alter Zustand heißt \(c_{\text{alt}}\); neuer Zustand heißt \(c_{\text{neu}}\); Ausgabe heißt \(s\)
| \(c_{\text{alt}}\) | \(x\) | \(y\) | \(c_{\text{neu}}\) | \(s\) |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 | 1 |
| 0 | 1 | 0 | 0 | 1 |
| 0 | 1 | 1 | 1 | 0 |
| 1 | 0 | 0 | 0 | 1 |
| 1 | 0 | 1 | 1 | 0 |
| 1 | 1 | 0 | 1 | 0 |
| 1 | 1 | 1 | 1 | 1 |
Schritt 4: Wahl der Flip-Flop-Typen
Entscheidung: JK-Flip-Flops
Anmerkung
Schritt 5: Ergänzung der Wertetabelle um Flip-Flop-Ansteuerung
| \(c_{\text{alt}}\) | \(x\) | \(y\) | \(c_{\text{neu}}\) | \(s\) | \(J\) | \(K\) |
|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 | \(\ast\) |
| 0 | 0 | 1 | 0 | 1 | 0 | \(\ast\) |
| 0 | 1 | 0 | 0 | 1 | 0 | \(\ast\) |
| 0 | 1 | 1 | 1 | 0 | 1 | \(\ast\) |
| 1 | 0 | 0 | 0 | 1 | \(\ast\) | 1 |
| 1 | 0 | 1 | 1 | 0 | \(\ast\) | 0 |
| 1 | 1 | 0 | 1 | 0 | \(\ast\) | 0 |
| 1 | 1 | 1 | 1 | 1 | \(\ast\) | 0 |
Ansteuertabelle JK-Flip-Flop
| \(Q_{\text{alt}}\) | \(Q_{\text{neu}}\) | \(J\) | \(K\) |
|---|---|---|---|
| 0 | 0 | 0 | \(\ast\) |
| 0 | 1 | 1 | \(\ast\) |
| 1 | 0 | \(\ast\) | 1 |
| 1 | 1 | \(\ast\) | 0 |
Schritt 6: Entwurf passender boolescher Funktionen
| \(c_{\text{alt}}\) | \(x\) | \(y\) | \(c_{\text{neu}}\) | \(s\) | \(J\) | \(K\) |
|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 | \(\ast\) |
| 0 | 0 | 1 | 0 | 1 | 0 | \(\ast\) |
| 0 | 1 | 0 | 0 | 1 | 0 | \(\ast\) |
| 0 | 1 | 1 | 1 | 0 | 1 | \(\ast\) |
| 1 | 0 | 0 | 0 | 1 | \(\ast\) | 1 |
| 1 | 0 | 1 | 1 | 0 | \(\ast\) | 0 |
| 1 | 1 | 0 | 1 | 0 | \(\ast\) | 0 |
| 1 | 1 | 1 | 1 | 1 | \(\ast\) | 0 |
Schritt 6: Entwurf passender boolescher Funktionen
| \(c_{\text{alt}}\) | \(x\) | \(y\) | \(c_{\text{neu}}\) | \(s\) | \(J\) | \(K\) |
|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 | \(\ast\) |
| 0 | 0 | 1 | 0 | 1 | 0 | \(\ast\) |
| 0 | 1 | 0 | 0 | 1 | 0 | \(\ast\) |
| 0 | 1 | 1 | 1 | 0 | 1 | \(\ast\) |
| 1 | 0 | 0 | 0 | 1 | \(\boldsymbol{\ast}\) | 1 |
| 1 | 0 | 1 | 1 | 0 | \(\boldsymbol{\ast}\) | 0 |
| 1 | 1 | 0 | 1 | 0 | \(\boldsymbol{\ast}\) | 0 |
| 1 | 1 | 1 | 1 | 1 | \(\boldsymbol{\ast}\) | 0 |
Schritt 6: Entwurf passender boolescher Funktionen
| \(c_{\text{alt}}\) | \(x\) | \(y\) | \(c_{\text{neu}}\) | \(s\) | \(J\) | \(K\) |
|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 | \(\ast\) |
| 0 | 0 | 1 | 0 | 1 | 0 | \(\ast\) |
| 0 | 1 | 0 | 0 | 1 | 0 | \(\ast\) |
| 0 | 1 | 1 | 1 | 0 | 1 | \(\ast\) |
| 1 | 0 | 0 | 0 | 1 | \(\boldsymbol{\ast}\) | 1 |
| 1 | 0 | 1 | 1 | 0 | \(\boldsymbol{\ast}\) | 0 |
| 1 | 1 | 0 | 1 | 0 | \(\boldsymbol{\ast}\) | 0 |
| 1 | 1 | 1 | 1 | 1 | \(\boldsymbol{\ast}\) | 0 |
Schritt 6: Entwurf passender boolescher Funktionen
| \(c_{\text{alt}}\) | \(x\) | \(y\) | \(c_{\text{neu}}\) | \(s\) | \(J\) | \(K\) |
|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 | \(\ast\) |
| 0 | 0 | 1 | 0 | 1 | 0 | \(\ast\) |
| 0 | 1 | 0 | 0 | 1 | 0 | \(\ast\) |
| 0 | 1 | 1 | 1 | 0 | 1 | \(\ast\) |
| 1 | 0 | 0 | 0 | 1 | \(\boldsymbol{\ast}\) | 1 |
| 1 | 0 | 1 | 1 | 0 | \(\boldsymbol{\ast}\) | 0 |
| 1 | 1 | 0 | 1 | 0 | \(\boldsymbol{\ast}\) | 0 |
| 1 | 1 | 1 | 1 | 1 | \(\boldsymbol{\ast}\) | 0 |
Schritt 6: Entwurf passender boolescher Funktionen
| \(c_{\text{alt}}\) | \(x\) | \(y\) | \(c_{\text{neu}}\) | \(s\) | \(J\) | \(K\) |
|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 | \(\ast\) |
| 0 | 0 | 1 | 0 | 1 | 0 | \(\ast\) |
| 0 | 1 | 0 | 0 | 1 | 0 | \(\ast\) |
| 0 | 1 | 1 | 1 | 0 | 1 | \(\ast\) |
| 1 | 0 | 0 | 0 | 1 | \(\boldsymbol{\ast}\) | 1 |
| 1 | 0 | 1 | 1 | 0 | \(\boldsymbol{\ast}\) | 0 |
| 1 | 1 | 0 | 1 | 0 | \(\boldsymbol{\ast}\) | 0 |
| 1 | 1 | 1 | 1 | 1 | \(\boldsymbol{\ast}\) | 0 |
Schritt 6: Entwurf passender boolescher Funktionen
| \(c_{\text{alt}}\) | \(x\) | \(y\) | \(c_{\text{neu}}\) | \(s\) | \(J\) | \(K\) |
|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 | \(\ast\) |
| 0 | 0 | 1 | 0 | 1 | 0 | \(\ast\) |
| 0 | 1 | 0 | 0 | 1 | 0 | \(\ast\) |
| 0 | 1 | 1 | 1 | 0 | 1 | \(\ast\) |
| 1 | 0 | 0 | 0 | 1 | \(\boldsymbol{\ast}\) | 1 |
| 1 | 0 | 1 | 1 | 0 | \(\boldsymbol{\ast}\) | 0 |
| 1 | 1 | 0 | 1 | 0 | \(\boldsymbol{\ast}\) | 0 |
| 1 | 1 | 1 | 1 | 1 | \(\boldsymbol{\ast}\) | 0 |
\(J(c_{\text{alt}}, x, y) = x\,y\)
Schritt 6: Entwurf passender boolescher Funktionen
| \(c_{\text{alt}}\) | \(x\) | \(y\) | \(c_{\text{neu}}\) | \(s\) | \(J\) | \(K\) |
|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 | \(\boldsymbol{\ast}\) |
| 0 | 0 | 1 | 0 | 1 | 0 | \(\boldsymbol{\ast}\) |
| 0 | 1 | 0 | 0 | 1 | 0 | \(\boldsymbol{\ast}\) |
| 0 | 1 | 1 | 1 | 0 | 1 | \(\boldsymbol{\ast}\) |
| 1 | 0 | 0 | 0 | 1 | \(\ast\) | 1 |
| 1 | 0 | 1 | 1 | 0 | \(\ast\) | 0 |
| 1 | 1 | 0 | 1 | 0 | \(\ast\) | 0 |
| 1 | 1 | 1 | 1 | 1 | \(\ast\) | 0 |
\(J(c_{\text{alt}}, x, y) = x\,y\)
Schritt 6: Entwurf passender boolescher Funktionen
| \(c_{\text{alt}}\) | \(x\) | \(y\) | \(c_{\text{neu}}\) | \(s\) | \(J\) | \(K\) |
|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 | \(\boldsymbol{\ast}\) |
| 0 | 0 | 1 | 0 | 1 | 0 | \(\boldsymbol{\ast}\) |
| 0 | 1 | 0 | 0 | 1 | 0 | \(\boldsymbol{\ast}\) |
| 0 | 1 | 1 | 1 | 0 | 1 | \(\boldsymbol{\ast}\) |
| 1 | 0 | 0 | 0 | 1 | \(\ast\) | 1 |
| 1 | 0 | 1 | 1 | 0 | \(\ast\) | 0 |
| 1 | 1 | 0 | 1 | 0 | \(\ast\) | 0 |
| 1 | 1 | 1 | 1 | 1 | \(\ast\) | 0 |
\(J(c_{\text{alt}}, x, y) = x\,y\)
Schritt 6: Entwurf passender boolescher Funktionen
| \(c_{\text{alt}}\) | \(x\) | \(y\) | \(c_{\text{neu}}\) | \(s\) | \(J\) | \(K\) |
|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 | \(\boldsymbol{\ast}\) |
| 0 | 0 | 1 | 0 | 1 | 0 | \(\boldsymbol{\ast}\) |
| 0 | 1 | 0 | 0 | 1 | 0 | \(\boldsymbol{\ast}\) |
| 0 | 1 | 1 | 1 | 0 | 1 | \(\boldsymbol{\ast}\) |
| 1 | 0 | 0 | 0 | 1 | \(\ast\) | 1 |
| 1 | 0 | 1 | 1 | 0 | \(\ast\) | 0 |
| 1 | 1 | 0 | 1 | 0 | \(\ast\) | 0 |
| 1 | 1 | 1 | 1 | 1 | \(\ast\) | 0 |
\(J(c_{\text{alt}}, x, y) = x\,y\)
\(K(c_{\text{alt}}, x, y) = \overline{x}\,\overline{y}\)
Schritt 6: Entwurf passender boolescher Funktionen
| \(c_{\text{alt}}\) | \(x\) | \(y\) | \(c_{\text{neu}}\) | \(s\) | \(J\) | \(K\) |
|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 | \(\ast\) |
| 0 | 0 | 1 | 0 | 1 | 0 | \(\ast\) |
| 0 | 1 | 0 | 0 | 1 | 0 | \(\ast\) |
| 0 | 1 | 1 | 1 | 0 | 1 | \(\ast\) |
| 1 | 0 | 0 | 0 | 1 | \(\ast\) | 1 |
| 1 | 0 | 1 | 1 | 0 | \(\ast\) | 0 |
| 1 | 1 | 0 | 1 | 0 | \(\ast\) | 0 |
| 1 | 1 | 1 | 1 | 1 | \(\ast\) | 0 |
\(J(c_{\text{alt}}, x, y) = x\,y\)
\(K(c_{\text{alt}}, x, y) = \overline{x}\,\overline{y}\)
Schritt 6: Entwurf passender boolescher Funktionen
| \(c_{\text{alt}}\) | \(x\) | \(y\) | \(c_{\text{neu}}\) | \(s\) | \(J\) | \(K\) |
|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 | \(\ast\) |
| 0 | 0 | 1 | 0 | 1 | 0 | \(\ast\) |
| 0 | 1 | 0 | 0 | 1 | 0 | \(\ast\) |
| 0 | 1 | 1 | 1 | 0 | 1 | \(\ast\) |
| 1 | 0 | 0 | 0 | 1 | \(\ast\) | 1 |
| 1 | 0 | 1 | 1 | 0 | \(\ast\) | 0 |
| 1 | 1 | 0 | 1 | 0 | \(\ast\) | 0 |
| 1 | 1 | 1 | 1 | 1 | \(\ast\) | 0 |
\(J(c_{\text{alt}}, x, y) = x\,y\)
\(K(c_{\text{alt}}, x, y) = \overline{x}\,\overline{y}\)
Schritt 6: Entwurf passender boolescher Funktionen
| \(c_{\text{alt}}\) | \(x\) | \(y\) | \(c_{\text{neu}}\) | \(s\) | \(J\) | \(K\) |
|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 | \(\ast\) |
| 0 | 0 | 1 | 0 | 1 | 0 | \(\ast\) |
| 0 | 1 | 0 | 0 | 1 | 0 | \(\ast\) |
| 0 | 1 | 1 | 1 | 0 | 1 | \(\ast\) |
| 1 | 0 | 0 | 0 | 1 | \(\ast\) | 1 |
| 1 | 0 | 1 | 1 | 0 | \(\ast\) | 0 |
| 1 | 1 | 0 | 1 | 0 | \(\ast\) | 0 |
| 1 | 1 | 1 | 1 | 1 | \(\ast\) | 0 |
\(J(c_{\text{alt}}, x, y) = x\,y\)
\(K(c_{\text{alt}}, x, y) = \overline{x}\,\overline{y}\)
\[ \begin{aligned} s(c_{\text{alt}}, x, y) = {} & \overline{c_{\text{alt}}}\,\overline{x}\,y \vee \overline{c_{\text{alt}}}\,x\,\overline{y}\\ & \vee c_{\text{alt}}\,\overline{x}\,\overline{y} \vee c_{\text{alt}}\,x\,y \end{aligned} \]
Schritt 6: Entwurf passender boolescher Funktionen
| \(c_{\text{alt}}\) | \(x\) | \(y\) | \(c_{\text{neu}}\) | \(s\) | \(J\) | \(K\) |
|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 | \(\ast\) |
| 0 | 0 | 1 | 0 | 1 | 0 | \(\ast\) |
| 0 | 1 | 0 | 0 | 1 | 0 | \(\ast\) |
| 0 | 1 | 1 | 1 | 0 | 1 | \(\ast\) |
| 1 | 0 | 0 | 0 | 1 | \(\ast\) | 1 |
| 1 | 0 | 1 | 1 | 0 | \(\ast\) | 0 |
| 1 | 1 | 0 | 1 | 0 | \(\ast\) | 0 |
| 1 | 1 | 1 | 1 | 1 | \(\ast\) | 0 |
\(J(c_{\text{alt}}, x, y) = x\,y\)
\(K(c_{\text{alt}}, x, y) = \overline{x}\,\overline{y}\)
\(s(c_{\text{alt}}, x, y) = c_{\text{alt}} \oplus x \oplus y\)
Schritt 7: Entwurf passender Schaltnetze
\(J(c_{\text{alt}}, x, y) = x\,y\)
\(K(c_{\text{alt}}, x, y) = \overline{x}\,\overline{y}\)
\(s(c_{\text{alt}}, x, y) = c_{\text{alt}} \oplus x \oplus y\)
Schritt 8: Entwurf des vollständigen Schaltwerks
Schritt 8: Entwurf des vollständigen Schaltwerks
| \(J\) | \(K\) | \(Q\) |
|---|---|---|
| 0 | 0 | \(Q\) |
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 1 | 1 | \(\overline{Q}\) |
Schritt 8: Entwurf des vollständigen Schaltwerks
| \(J\) | \(K\) | \(Q\) |
|---|---|---|
| 0 | 0 | \(Q\) |
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 1 | 1 | \(\overline{Q}\) |
Schritt 8: Entwurf des vollständigen Schaltwerks
| \(J\) | \(K\) | \(Q\) |
|---|---|---|
| 0 | 0 | \(Q\) |
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 1 | 1 | \(\overline{Q}\) |
Schritt 8: Entwurf des vollständigen Schaltwerks
| \(J\) | \(K\) | \(Q\) |
|---|---|---|
| 0 | 0 | \(Q\) |
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 1 | 1 | \(\overline{Q}\) |
Schritt 8: Entwurf des vollständigen Schaltwerks
| \(J\) | \(K\) | \(Q\) |
|---|---|---|
| 0 | 0 | \(Q\) |
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 1 | 1 | \(\overline{Q}\) |
Schritt 8: Entwurf des vollständigen Schaltwerks
| \(J\) | \(K\) | \(Q\) |
|---|---|---|
| 0 | 0 | \(Q\) |
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 1 | 1 | \(\overline{Q}\) |
Schritt 8: Entwurf des vollständigen Schaltwerks
| \(J\) | \(K\) | \(Q\) |
|---|---|---|
| 0 | 0 | \(Q\) |
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 1 | 1 | \(\overline{Q}\) |
Schritt 8: Entwurf des vollständigen Schaltwerks
| \(J\) | \(K\) | \(Q\) |
|---|---|---|
| 0 | 0 | \(Q\) |
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 1 | 1 | \(\overline{Q}\) |
Schritt 8: Entwurf des vollständigen Schaltwerks
| \(J\) | \(K\) | \(Q\) |
|---|---|---|
| 0 | 0 | \(Q\) |
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 1 | 1 | \(\overline{Q}\) |
Schritt 8: Entwurf des vollständigen Schaltwerks
| \(J\) | \(K\) | \(Q\) |
|---|---|---|
| 0 | 0 | \(Q\) |
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 1 | 1 | \(\overline{Q}\) |
Schritt 8: Entwurf des vollständigen Schaltwerks
| \(J\) | \(K\) | \(Q\) |
|---|---|---|
| 0 | 0 | \(Q\) |
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 1 | 1 | \(\overline{Q}\) |
Schritt 8: Entwurf des vollständigen Schaltwerks
| \(J\) | \(K\) | \(Q\) |
|---|---|---|
| 0 | 0 | \(Q\) |
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 1 | 1 | \(\overline{Q}\) |
Schritt 8: Entwurf des vollständigen Schaltwerks
| \(J\) | \(K\) | \(Q\) |
|---|---|---|
| 0 | 0 | \(Q\) |
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 1 | 1 | \(\overline{Q}\) |
Schritt 8: Entwurf des vollständigen Schaltwerks
| \(J\) | \(K\) | \(Q\) |
|---|---|---|
| 0 | 0 | \(Q\) |
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 1 | 1 | \(\overline{Q}\) |
Schritt 8: Entwurf des vollständigen Schaltwerks
| \(J\) | \(K\) | \(Q\) |
|---|---|---|
| 0 | 0 | \(Q\) |
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 1 | 1 | \(\overline{Q}\) |
Schritt 8: Entwurf des vollständigen Schaltwerks
| \(J\) | \(K\) | \(Q\) |
|---|---|---|
| 0 | 0 | \(Q\) |
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 1 | 1 | \(\overline{Q}\) |
Schritt 8: Entwurf des vollständigen Schaltwerks
| \(J\) | \(K\) | \(Q\) |
|---|---|---|
| 0 | 0 | \(Q\) |
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 1 | 1 | \(\overline{Q}\) |
Schritt 8: Entwurf des vollständigen Schaltwerks
| \(J\) | \(K\) | \(Q\) |
|---|---|---|
| 0 | 0 | \(Q\) |
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 1 | 1 | \(\overline{Q}\) |
Schritt 8: Entwurf des vollständigen Schaltwerks
| \(J\) | \(K\) | \(Q\) |
|---|---|---|
| 0 | 0 | \(Q\) |
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 1 | 1 | \(\overline{Q}\) |
Schritt 8: Entwurf des vollständigen Schaltwerks
| \(J\) | \(K\) | \(Q\) |
|---|---|---|
| 0 | 0 | \(Q\) |
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 1 | 1 | \(\overline{Q}\) |
Schritt 8: Entwurf des vollständigen Schaltwerks
Beobachtung: Eingabe (0,0) im letzten Takt wichtig
Initialisierung? Eingabe (0,0)
Initialisierung: Eingabe (0,0)
Ziel: Löschen des Übertrags \(Q_{neu}\)
| \(c_{\text{alt}}\) | \(x\) | \(y\) | \(c_{\text{neu}}\) | \(s\) | \(J\) | \(K\) |
|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 | \(*\) |
| 0 | 0 | 1 | 0 | 1 | 0 | \(*\) |
| 0 | 1 | 0 | 0 | 1 | 0 | \(*\) |
| 0 | 1 | 1 | 1 | 0 | 1 | \(*\) |
| 1 | 0 | 0 | 0 | 1 | \(*\) | 1 |
| 1 | 0 | 1 | 1 | 0 | \(*\) | 0 |
| 1 | 1 | 0 | 1 | 0 | \(*\) | 0 |
| 1 | 1 | 1 | 1 | 1 | \(*\) | 0 |
| \(Q_{\text{alt}}\) | \(Q_{\text{neu}}\) | \(J\) | \(K\) |
|---|---|---|---|
| 0 | 0 | 0 | \(*\) |
| 0 | 1 | 1 | \(*\) |
| 1 | 0 | \(*\) | 1 |
| 1 | 1 | \(*\) | 0 |
Fazit
Warum ist das Schaltwerk so langsam?
bereits bekannt: wegen der Überträge
Müssen Überträge so lange dauern?
bekannt: im Allgemeinen nicht (siehe Addierer)
aber: Bei bit-weiser Eingabe schon!
Wir wissen schon: Überträge werden nur manchmal lange weitergereicht.
Kann man ein Schaltwerk bauen, das nur manchmal langsam ist?
Problem: unsere Automaten können das zunächst nicht
Beobachtung: bei Mealy- und Moore-Automat bestimmt Länge der Eingabe die Anzahl der Rechentakte
darum Modifikation des Automatenmodells
darum Modifikation des Automatenmodells
neu: Erlaube leere Eingabe \(\varepsilon\) und signalisiere Ende der Rechnung durch Rechenende-Zeichen
Beobachtung: Das ist fundamental neu für uns. Rechenzeit kann von der Eingabe abhängen (nicht nur von der Eingabelänge).
Wie wollen wir vorgehen?
Beobachtung: Eingaben müssen sofort ganz zur Verfügung stehen, sonst kann man nicht schneller sein
also: Eingabealphabet \(\Sigma=\{0,1\}^{2n}\)
Eingabe: \(x_{n-1}x_{n-2}\cdots x_1x_0y_{n-1}y_{n-2}\cdots y_1y_0 \in \{0,1\}^{2n}\)
interpretieren als: \(\begin{array}{ccccc} & x_{n-1} & x_{n-2} & \cdots & x_0\\ + & y_{n-1} & y_{n-2} & \cdots & y_0\\ \hline \end{array}\)
bekannte Idee zur Lösung: Ersetze \(x\) und \(y\) durch \(x'\) und \(y'\) mit \(x+y=x'+y'\) so lange, bis \(y'=0\) gilt.
Erinnerung: Wir kennen das schon vom Halbaddierer…
mit \(x+y=2c+s=(c0)_2+s\)
Klar: Das funktioniert auch für alle \(n\) Stellen parallel.
\(\begin{array}{rcl} x_3'\,x_2'\,x_1'\,x_0' & = & s_3\,s_2\,s_1\,s_0\\ \text{Ü}\;y_3'\,y_2'\,y_1'\,y_0' & = & c_3\,c_2\,c_1\,c_0\,0 \end{array}\)
Fortschritt? in \(y\) hinten „neue“ 0, also nach \(\le n\) Takten \(y = 0\)
Was ist mit dem Ü?
klar: potenziell kann in jedem Takt vorne ein Überlauf entstehen
Also bis zu n Überläufe speichern?
zum Glück: nein
Wir wissen: höchstens 1 Überlauf insgesamt
Wann ist die Rechnung fertig?
klar: Rechnung fertig, \(y = 0\)
Also: „done“ \(d=\overline{y_0\lor y_1\lor\dots\lor y_{n-1}}=\neg\bigvee_{i=0}^{n-1}y_i\)
jetzt: unsere Ideen zusammensetzen
Das von Neumann-Addierwerk nach John von Neumann (1903–1957)
Ideen
Hoffnung: Addierwerk ist oft schnell
Schematische Darstellung von Neumann-Addierwerk für \(n = 3\)
Die \(x_i\) und \(y_i\) und Ü (in der Abbildung mit \(o\) bezeichnet) sind Speicher, die mit Flip-Flops realisiert werden
Frage: Welche Eingaben dauern lange?
1. Versuch: viele Überträge exemplarisch für \(n = 6\): 111111 + 111111
| Ü | \(x_5\) | \(x_4\) | \(x_3\) | \(x_2\) | \(x_1\) | \(x_0\) | |
|---|---|---|---|---|---|---|---|
| 0 | 1 | 1 | 1 | 1 | 1 | 1 | |
| 1 | 1 | 1 | 1 | 1 | 1 | ||
| \(y_5\) | \(y_4\) | \(y_3\) | \(y_2\) | \(y_1\) | \(y_0\) |
| Ü | \(x_5\) | \(x_4\) | \(x_3\) | \(x_2\) | \(x_1\) | \(x_0\) | |
|---|---|---|---|---|---|---|---|
| \(\Longrightarrow\) | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1 | 1 | 1 | 1 | 1 | 0 | ||
| \(y_5\) | \(y_4\) | \(y_3\) | \(y_2\) | \(y_1\) | \(y_0\) |
| Ü | \(x_5\) | \(x_4\) | \(x_3\) | \(x_2\) | \(x_1\) | \(x_0\) | |
|---|---|---|---|---|---|---|---|
| \(\Longrightarrow\) | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
| 0 | 0 | 0 | 0 | 0 | 0 | ||
| \(y_5\) | \(y_4\) | \(y_3\) | \(y_2\) | \(y_1\) | \(y_0\) |
Beobachtung: nach nur zwei Takten fertig \(\rightarrow\) schnell
Erinnerung: bzgl. Übertrag schwierig: 0 + 1, 1 + 0
Frage: Welche Eingaben dauern lange?
2. Versuch: 0+1, 1+0 exemplarisch für \(n = 6\): 000000 + 111111
| Ü | \(x_5\) | \(x_4\) | \(x_3\) | \(x_2\) | \(x_1\) | \(x_0\) | |
|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
| 1 | 1 | 1 | 1 | 1 | 1 | ||
| \(y_5\) | \(y_4\) | \(y_3\) | \(y_2\) | \(y_1\) | \(y_0\) |
| Ü | \(x_5\) | \(x_4\) | \(x_3\) | \(x_2\) | \(x_1\) | \(x_0\) | |
|---|---|---|---|---|---|---|---|
| \(\Longrightarrow\) | 0 | 1 | 1 | 1 | 1 | 1 | 1 |
| 0 | 0 | 0 | 0 | 0 | 0 | ||
| \(y_5\) | \(y_4\) | \(y_3\) | \(y_2\) | \(y_1\) | \(y_0\) |
Beobachtung: nach nur einem Takt fertig \(\rightarrow\) sehr schnell
Offensichtlich: 111111 + 000000 wäre sofort fertig
Vermutung: Überträge mit langen Wegen dauern lange
Frage: Was ist die “worst case” Eingabe?
“worst case” Eingabe für das von Neumann Addierwerk
| Ü | \(x_5\) | \(x_4\) | \(x_3\) | \(x_2\) | \(x_1\) | \(x_0\) | |
|---|---|---|---|---|---|---|---|
| 0 | 1 | 1 | 1 | 1 | 1 | 1 | |
| 0 | 0 | 0 | 0 | 0 | 1 | ||
| \(y_5\) | \(y_4\) | \(y_3\) | \(y_2\) | \(y_1\) | \(y_0\) |
| Ü | \(x_5\) | \(x_4\) | \(x_3\) | \(x_2\) | \(x_1\) | \(x_0\) | |
|---|---|---|---|---|---|---|---|
| \(\Longrightarrow\) | 0 | 1 | 1 | 1 | 1 | 1 | 0 |
| 0 | 0 | 0 | 0 | 1 | 0 | ||
| \(y_5\) | \(y_4\) | \(y_3\) | \(y_2\) | \(y_1\) | \(y_0\) |
| Ü | \(x_5\) | \(x_4\) | \(x_3\) | \(x_2\) | \(x_1\) | \(x_0\) | |
|---|---|---|---|---|---|---|---|
| \(\Longrightarrow\) | 0 | 1 | 1 | 1 | 1 | 0 | 0 |
| 0 | 0 | 0 | 1 | 0 | 0 | ||
| \(y_5\) | \(y_4\) | \(y_3\) | \(y_2\) | \(y_1\) | \(y_0\) |
| Ü | \(x_5\) | \(x_4\) | \(x_3\) | \(x_2\) | \(x_1\) | \(x_0\) | |
|---|---|---|---|---|---|---|---|
| \(\Longrightarrow\) | 0 | 1 | 1 | 1 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 | 0 | 0 | ||
| \(y_5\) | \(y_4\) | \(y_3\) | \(y_2\) | \(y_1\) | \(y_0\) |
| Ü | \(x_5\) | \(x_4\) | \(x_3\) | \(x_2\) | \(x_1\) | \(x_0\) | |
|---|---|---|---|---|---|---|---|
| \(\Longrightarrow\) | 0 | 1 | 1 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 0 | 0 | 0 | ||
| \(y_5\) | \(y_4\) | \(y_3\) | \(y_2\) | \(y_1\) | \(y_0\) |
| Ü | \(x_5\) | \(x_4\) | \(x_3\) | \(x_2\) | \(x_1\) | \(x_0\) | |
|---|---|---|---|---|---|---|---|
| \(\Longrightarrow\) | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
| 1 | 0 | 0 | 0 | 0 | 0 | ||
| \(y_5\) | \(y_4\) | \(y_3\) | \(y_2\) | \(y_1\) | \(y_0\) |
| Ü | \(x_5\) | \(x_4\) | \(x_3\) | \(x_2\) | \(x_1\) | \(x_0\) | |
|---|---|---|---|---|---|---|---|
| \(\Longrightarrow\) | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 0 | 0 | 0 | 0 | ||
| \(y_5\) | \(y_4\) | \(y_3\) | \(y_2\) | \(y_1\) | \(y_0\) |
extrem langsam
Beobachtung: \(111\cdots111 + 000\cdots000 \Longrightarrow 0\) Takte: extrem schnell
Beobachtung: \(111\cdots111 + 000\cdots001 \Longrightarrow n\) Takte: extrem langsam
Ist das von Neumann-Addierwerk schnell oder langsam?
Was ist typisch?
Average-Case-Rechenzeit durchschnittliche Rechenzeit
Problem: Welche Verteilung ist angemessen?
Gleichverteilung bedeutet
Start: Typische Eingabe der Länge \(2n\) bei Gleichverteilung:
Verarbeitung: nach 1 Takt …
Fazit: Erwarten Rechenende nach \(\log_2(n)\) Takten
Ziel: Beschreibung eines Moore-Automaten zum von Neumann-Addierwerk zur Addition von zwei n-Bit-Zahlen
Erweiterung des Automatenmodells um \(\varepsilon\)-Eingaben im folgenden Sinn
Schematische Darstellung von Neumann-Addierwerk für \(n = 3\)