(:requiretuid:)
Dieses Kapitel beginnt mit der Vorstellung von Latches und Flip-Flops, danach beschäftigen wir uns mit dem Entwurf synchroner Logik, Endlichen Zustandsautomaten, dem Zeitverhalten sequentieller Logik und schließlich wird Parallelität erklärt.
Ausgänge sequentieller Logik hängen ab von:
Sequentielle Schaltungen speichern einen internen Zustand.
Sequentielle Schaltungen können Folgen von Ereignissen bearbeiten. Sie haben ein "Gedächtnis", das in der Regel nur eine Kurzzeitgedächtnis ist.
Sie benutzen Rückkopplungen von Logikausgängen zu Logikeingängen um Informationen zu speichern. Durch das Vorhandensein von Rückkopplungen sind sie keine kombinatorischen Schaltung mehr!
Bei Zustandselementen beeinflusst der Zustand einer Schaltung das zukünftige Verhalten
Speicherelemente speichern den Zustand. Solche Speicherelemente sind zum Beispiel:
Diese werden auch manchmal Zustandselemente genannt.
Bistabile Grundschaltungen sind ein fundamentaler Baustein für andere Speicherelemente.
Diese haben:
Es gibt zwei Möglichkeiten, welcher der beiden Ausgänge WAHR sein kann:
In beiden Fällen ist die Grundschaltung konsistent und stabil.
Eine bistabile Schaltung speichert 1 Zustandsbit in den Zustandsvariablen oder
Bisher gibt es keine Eingänge, um diesen Zustand zu beeinflussen. Dazu erweitern wir die Schaltung im Folgenden.
Die hier zu betrachtenden Fälle sind:
Dies ist ein ungültiger Zustand, da
SR steht für Setzen/Rücksetzen(engl. set/reset). Das heißt, man kann die Werte setzen bzw. rücksetzen. Der ein Bit Zustand wird in der Variablen Q gespeichert.
Das Festlegen des gespeicherten Wertes geschieht über die Eingänge S und R.
Dabei gibt es einen illegalen Zustand, der zu vermeiden ist. Es darf niemals gelten: S = R = 1.
D Latches haben zwei Eingänge: CLK und D. Dabei steuert:
Die Funktionalität eines D Latches ist:
Der illegale Fall kann hier nicht mehr auftreten.
Ein D Flip-Flop hat zwei Eingänge: CLK und D. Das Flip-Flop liest den aktuellen Wert von D bei einer steigenden Flanke von CLK. Wenn CLK von 0 nach 1 steigt, so wird D weitergegeben an Q. Ansonsten behält Q seinen vorherigen Wert. Das heißt, dass Q sich nur ändert, wenn CLK eine steigende Flanke hat. Man sagt auch, dass ein Flip-Flop flankengesteuert (edge-triggered) ist.
Ein D Flip-Flop besteht aus zwei Latches, die in Serie geschaltet sind (L1 und L2). Diese werden gesteuert durch komplementäre Taktsignale.
Bei steigender Flanke von CLK (also einem Wechsel von 0 -> 1) wird D an Q weitergegeben.
Das Diagramm zeigt das Zeitverhalten der beiden Schaltelemente. Es wird deutlich, dass ein D Latch einen Wechsel von D übernimmt, solange CLK = 1 ist. Im Gegensatz dazu übernimmt das D Flip-Flop nur bei einer steigenden Taktflanke von CLK den Wert von D.
Flip-Flops mit Taktfreigabesignal haben drei Eingänge: CLK, D und EN. Der Freigabeeingang (EN, enable) steuert, wann neue Daten (D) gespeichert werden.
Zurücksetzbare Flip-Flops haben drei Eingänge: CLK, D und Reset.
Dabei gibt es zwei Arten von Resets:
Setzbare Flip-Flops haben die Eingänge CLK, D und Set
Bei sequentieller Logik hängt der Ausgang von dem aktuellen und dem vorherigen Werten ab. Außerdem hat sequentielle Logik ein "Gedächtnis". Sequentielle Schaltungen sind alle nicht-kombinatorischen Schaltungen.
Diese merkwürdige Schaltung hat keine Eingänge und 3 Ausgänge (die Knoten X, Y und Z). Diese instabile Schaltung oszilliert . Dabei hängt die Periode von der Inverterverzögerung ab. Diese variiert mit dem Herstellungsprozess, der Temperatur usw. Diese Schaltung hat einen Zyklus: Der Ausgang ist rückgekoppelt auf den Eingang.
Bei synchroner sequentieller Logik wird die Rückkopplung durch Einfügen von Registern aufgebrochen. Diese Register halten den Zustand der Schaltung. Dabei ändert sich der Zustand nur zur Taktflanke . Die Schaltung wird also mit der Taktflanke synchronisiert.
Regeln für den Aufbau von synchronen sequentiellen Schaltungen:
Zwei weit verbreitete synchrone sequentielle Schaltungen sind:
FSM bestehen aus:
Der nächste Zustand hängt vom aktuellen Zustand und den Eingangswerten ab.
Die Ausgangswerte werden üblicherweise auf eine von zwei Arten bestimmt:
Wir betrachten hier das Beispiel einer Ampelsteuerung. Die Ampelsteuerung hat zwei Induktionsschleifen: . Diese sind TRUE wenn Autos detektiert werden. Außerdem steuert sie zwei Ampeln:
Dieser endliche Automat hat 4 Eingänge: CLK, Reset, und zwei Ausgänge:
Bei einem Moore FSM werden die Ausgangswerte den Zuständen zugeordnet. Die Zustände werden als Kreise dargestellt und die Übergänge als Pfeile.
Die Zustandübergangstabelle kann man relativ leicht ablesen:
Wir betrachten als aktuellen Zustand, den Zustand S0. Dieser hat als Eingang nur und ist unabhängig von . kann dabei die Werte 0 und 1 annehmen. Jenachdem ist der nächste Zustand ein anderer. Wenn so ist der nächste Zustand S1. Ansonsten bleibt er S0. So betrachtet man jeden Zustand und kann damit die letzte Spalte ausfüllen.
Hier kodieren wir die Zustände binär. Damit kann man dann die boole'sche Funktion bestimmen, die diesen Automaten beschreibt.
Die Zustandskodierung kann binär erfolgen. Zum Beispiel für vier Zustände: 00, 01, 10, 11.
Es ist auch möglich einen 1-aus-N Code (One-hot encoding) zu verwenden. Dieser funktioniert folgendermaßen:
Wir betrachten die Unterschiede an Hand einer Erkennung der Bitfolge 1101 auf einem Lochstreifen.
Das Aufteilen komplexer FSMs in einfachere interagierende FSMs wird auch manchmal Dekomposition genannt. Ein Beispiel ist eine um einen Modus für Festumzüge erweiterte Ampelsteuerung. Dabei bekommt der FSM zwei weitere Eingänge: F und R. Und es gilt:
Hier eine Schritt für Schritt Anleitung, wie man endliche Automaten entwirft:
Für beide Automatentypen gilt dann:
Bei sequentiellen Schaltungen übernimmt das Flip-Flop die Daten von D zur steigenden Taktflanke. Dabei darf D sich nicht ändern, wenn es übernommen (sampled) wird. Man sagt auch, D muss stabil sein. Ähnlich wie bei einer Fotographie darf keine Bewegung zum Auslösezeitpunkt stattfinden, sonst das Ergebnis unscharf wird. D darf sich also nicht zur Taktflanke ändern, da dies zu Metastabilität führen kann.
Um es genauer auszudrücken: D darf sich nicht in einem gewissen Zeitfenster um die Taktflanke herum ändern.
Die Laufzeitverzögerung (propagation delay) ist das Zeitintervall nach der Taktflanke, nach dem Q garantiert stabil ist. Q ändert sich danach also nicht mehr.
Die Kontaminationsverzögerung (contamination delay) ist das Zeitintervall nach der Taktflanke, nach dem Q beginnen könnte, sich zu ändern
Die Eingänge in einer synchronen Schaltung müssen in der ganzen Abtastzeit stabil sein. Genauer gesagt, sie müssen stabil sein, mindestens
Die Verzögerung zwischen Registern hat einen Maximal- und Minimalwert. Dabei ist sie abhängig von der Verzögerung der kombinatorischen Schaltelemente.
Das Einhalten der Setup-Zeit hängt von der Maximal-Verzögerung von Register R1 durch kombinatorische Logik ab. Dabei muss der Eingang zu dem Register mindestens ab vor der Taktflanke stabil sein.
Das Einhalten der Hold-Zeit hängt von der minimalen Verzögerung von Register R1 durch die kombinatorische Logik ab. Dabei muss der Eingang an Register R2 mindestens bis nach der Taktflanke stabil sein.
Der Takt kommt nicht bei allen Registern zur gleichen Zeit an. Das liegt an unterschiedlichen Verdrahtungswegen auf dem Chip oder Logik in den Taktsignalen (gated clock, vermeiden!). Dabei ist die Verschiebung (oder Versatz, skew) die Differenz der Ankunftszeit zwischen zwei Registern.
Überprüfe dabei, ob auch bei maximalem Versatz die dynamische Entwurfsdisziplin noch eingehalten wird.
In diesem Beispiel ist CLK2 früher altiv als CLK 1.
In diesem anderen Fall gilt: CLK2 könnte später als CLK1 aktiviert werden.
Asynchrone Eingänge können die dynamische Disziplin verletzen. Ein Beispiel dafür sind Benutzereingaben.
Jedes bistabile Element hat zwei stabile Zustände und einen metastabilen dazwischen. Ein Flip-Flop-Ausgang hat zwei stabile Zustände (0 und 1) und einen metastabilen Zustand. Falls das Flip-Flop den metastabilen Zustand annimmt, kann es dort für unbetimmte Zeit verbleiben.
Ein Flip-Flop hat intern Rückkopplungen. Falls Q zwischen 1 und 0 liegt:
Wenn der Flip-Flop EIngang D zu einem zufälligen Zeitpunkt innerhalb der Abtastzeit wechselt, wird der Ausgang Q nach einer zufälligen Zeit tres zu 0 oder 1 aufgelöst (resolved).
Für die Wahrscheinlichkeit, dass der Ausgang Q nach einer Wartezeit t noch metastabil ist, gilt:
: Zeit um Ausgang sicher nach 1 oder 0 aufzulösenIntuitiv interpretieren wir diese Formel folgendermaßen:
Grob gesagt heißt das: Wenn man nur lange genug wartet, wird der Ausgang sicher zu 0 oder 1 aufgelöst.
Asynchrone Eingänge (D) lassen sich praktisch nicht ganz vermeiden:
Ziel eines Synchronisierers ist es daher die Wahrscheinlichkeit für einen metastabilen Zustand zu reduzieren und mit hoher Wahrscheinlichkeit gültige Werte an Q zu liefern. Dennoch kann Metastabilität aber nie völlig ausgeschlossen werden.
Der interne Aufbau eines Synchronisierers besteht aus einer Reihenschaltung von Flip-Flops.
Wir nehmen nun an, dass der Eingang während derAbtastzeit von Flip-Flop F1 wechselt.
Die Synchronisation gelingt, wenn Signal D2 innerhalb von (Tc - tsetup) zu 0 oder 1 aufgelöst wird.
Für die Wahrscheinlichkeit des Scheiterns der Synchronisation gilt für jede Änderung des Eingangs D:
Daraus können wir nun eine Formel für die Mittlere Betriebsdauer zwischen Ausfällen (mean time between failures, MTBF) herleiten.
Bei einer Änderung des Eingangssignals einmal pro Sekunde ist die Ausfallwahrscheinlichkeit des Synchronisierers pro Sekunde P(Scheitern). Bei einer Änderung des Eingangssignals N-mal pro Sekunde gilt für die Ausfallwahrscheinlichkeit des Synchronisierers pro Sekunde:
Im Durchschnitt scheitert die Synchronisation also alle 1/[P(Scheitern)/s] Sekunden. Dies bezeichnen wir als Mittlere Betriebsdauer zwischen Ausfällen (MTBF).
Annahmen:
Rechnung:
Wir unterscheiden zwei Arten von Parallelität:
Definitionen:
Man verwendet Parallelität, um den Durchsatz zu erhöhen.
Um das Konzept der Parallelität zu verdeutlichen, wollen wir sie hier am Beispiel "Plätzchen backen" anwenden.
Wir beginnen naiv und backen Plätzchen zuerst seriell. Wir nehmen an, dass genügend Teig da ist. Zum bestücken eines Blechs mit Teig benötigen wir 5 Minuten. Die Backzeit beträgt 15 Minuten. Wir bereiten ein Blech nach dem anderen vor und backen es. Somit ergibt sich:
Die Latenz beschreibt also die Zeit, die ein Blech braucht, um den "Produktionsprozess" vollständig zu durchwandern.
Der Durchsatz gibt an wie viele Plätzchen wir in einer gewissen Zeit produzieren können.
Wir elaborieren nun unseren Produktionsprozess und wenden das Konzept der räumlichen Parallelität an.
Wir nehmen an, dass wir, anstatt alleine zu backen, nun zwei Bäcker(Ben & Alyssa) haben, beide mit eigenem Ofen.
Die Latenz bleibt unverändert, aber unser Durchsatz verbessert sich deutlich.
Eine weitere Möglichkeit zur Steigerung der Plätzchenproduktion ist die zeitliche Parallelität. Die Teilaufgabe "Blech bestücken" können wir für das nächste Blech durchführen, während das vorherige im Ofen ist.
Die Latenz bleibt wieder gleich und unser Durchsatz ist:
Zeitliche und räumliche Parallelität können auch miteinander kombiniert werden. Wenn wir zwei Öfen haben und das nächste Blech bestücken, während das alte gebacken wird, können wir sogar auf einen Durchsatz von 8 Blechen/h kommen.
Kehren wir nun zurück zu elektronischen Schaltungen. Auch hier können wir das Konzept der zeitlichen Parallelität anwenden. Wir nennen dies Pipelining. Betrachen wir zunächst eine Schaltung ohne Pipelining.
Durch Pipelining können wir nun den Durchsatz dieser Schaltung erhöhen. Wir teilen, durch das Einfügen von Registern, die kombinatorische Logik in zwei Teile. Somit erhalten wir eine Schaltung mit zweistufiger Pipeline.
Nun müssen wir nicht mehr warten bis ein Datum die ganze kombinatorische Logik durchwandert hat, sondern können bereits, wenn es in Element 4 angekommen ist, die Elemente der Stufe 1 für das nächte Datum verwenden. Der Durchsatz steigt deutlich. Die Latenz hat sich aber auch etwas erhöht. Wir fügen eine weitere Stufe ein und erhalten eine dreistufige Pipeline.
Das Einfügen von Pipelinestufen hat Auswirkungen auf Durchsatz und Latenz. Mehr Pipelinestufen bedeutet:
Pipelining lohnt sich nur, wenn viele Datensätze bearbeitet werden müssen.
Pipelining lässt sich jedoch nicht immer anwenden. Oftmals führen Abhängigkeiten der Teilaufgaben zu Problemen. In unserem Keksbeispiel wollen wir vielleicht erstmal schauen wie ein Blech geworden ist, bevor wir das nächste bestücken.