So, dann möchte ich Sie begrüßen zur heutigen Vorlesung DT.
Zunächst mal möchte ich Ihnen wünschen natürlich ein gesundes, frohes
und erfolgreiches neues Jahr 2016.
Jetzt haben wir uns zwei Wochen nicht gesehen.
Ich hoffe, Sie haben die Zeit natürlich intensiv dafür genutzt, sich
ein bisschen nach- und vorzubereiten.
Und heute geht es dann mit einem neuen Thema los.
Sie haben sich vielleicht mal angeschaut.
Wir haben jetzt noch eine Zäsur gehabt, dass wir von Schaltnetzen zu
Schaltwerken übergehen.
Ich glaube, das war auch ganz gut, dass wir die Weihnachtspause dafür
genutzt haben.
Und jetzt geht es eben weiter mit Schaltwerken.
Das heißt also mit Systemen, die eine gewisse Dynamik haben.
Das heißt also Schaltwerke.
Wir werden anfangen mit den formalen Grundlagen.
Und dann, das werden Sie gleich erst verstehen, werden wir asynchrone
Schaltwerke entwerfen.
Das heißt Schaltwerke, in denen es keine koordinierten Zeitbedingungen
gibt.
Und wir werden dann solche nehmen, übrigens als Grundlage auch für
Synchrone.
Das heißt, wir werden also Synchrone Schaltnetze irgendwann aufbauen,
die kleine asynchrone Schaltwerke beinhalten.
Und wir werden dafür sogenannte Flipflops als Zustandsspeicher
designen.
Das heißt also, aus den asynchronen Schaltwerken werden sich
sogenannte Flipflops ergeben.
Und die verwenden wir dann als Zutat für den Entwurf von Synchronen
Schaltwerken.
Das heißt also, wie gerade gesagt, Synchrone Schaltwerke enthalten
also kleine asynchrone Bauteile.
Sonst würde es nicht funktionieren.
Und danach werden wir uns spezielle Schaltwerksbausteine anschauen.
Aber heute werden wir ungefähr nur so die ersten paar Teile hier
schaffen.
Mehr ist nicht möglich.
Also, nochmal zur Wiederholung.
Schaltnetze ist ein rein kombinatorisches Verhalten.
Wir haben also kombinatorische Schaltungen.
Und die Ausgabe hängt immer nur von den Eingangsvariablen ab, die ich
gerade anlege.
Und wenn ich jetzt ein Schaltwerk anschaue, dann hängt die Ausgabe ab
von den Eingaben, die ich auch in der Vergangenheit gehabt habe.
Das werden wir gleich sehen.
Das können wir geschickter machen.
Das würde ja bedeuten, wir müssten, um so ein Schaltwerk zu designen,
müssten wir ja alle Eingangsvariablen speichern.
Das wollen wir nicht, das wäre schlecht.
Wir wollen also nicht alle Eingangsvariablen, also eigentlich von T
gleich 0, also wenn wir von T 0 definieren, müssten wir die alle
speichern.
Das wollen wir nicht.
Das können wir geschickter machen.
Und zwar, wir wollen, und den Begriff haben Sie hoffentlich schon mal
gehört, wir wollen einen sogenannten Zustand haben.
Und der Zustand, der speichert zwar auch all das, was wir vorher schon
gesehen haben, aber typischerweise in komprimierter Form.
Das werden Sie auch im weitergehenden Verlauf Ihres Studiums sehen.
Der Zustand, den kann man auch definieren für kontinuierliche Systeme,
nicht nur für diskrete Systeme.
Und dann macht der sogar vielleicht noch ein bisschen mehr Sinn.
Und jetzt müssen wir uns Folgendes überlegen.
Das Schaltwerk, was ja eben abhängt von allen vorhergesehenen
Eingaben, erzeugt jetzt eine Ausgabe in Abhängigkeit von den
augenblicklichen Eingangsvariablen und dem aktuellen Zustand, den ich
hier oben definiert habe.
Das heißt, der Zustand bestimmt die komplette zukünftige Entwicklung,
die das Schaltwerk haben wird, wenn ich ihn gegeben habe und die
Eingangsgrößen kenne, die dann noch kommen.
Ja, was kann dann passieren?
Es kann passieren, dass wenn Sie etwas an das Schaltwerk anlegen, im
konstanten Wert, dass trotzdem der Ausgang sich ändert, weil durch
diese interne Rückkopplung über den Zustand am Ausgang sich etwas
ändert.
Ja, das heißt also, und dann werden Sie wahrscheinlich etwas
verwundert, Sie haben ein Schaltwerk, Sie legen nichts
unterschiedliches an am Eingang und der Ausgang ändert sich die ganze
Zeit.
Und genau solche Schaltwerke werden wir auch kennenlernen.
Und das liegt eben an diesem internen Zustand.
Und das heißt, Schaltwerke sind eben Implementierungen von sogenannten
deterministischen endlichen Automaten und so kann man das
interpretieren.
Aber wichtig ist eben, dass wir ein Gedächtnis haben.
Das heißt, wir hängen nicht mehr nur von dem ab, was wir aktuell
anlegen, sondern auch von dem, was wir alles schon gesehen haben.
Und das fassen wir zusammen in einem internen Zustand und der wird
rekursiv über der Zeit betrachtet und der gibt eben entsprechend eine
Wirkung auf den Ausgang aus.
Ja, jetzt habe ich ja gesagt, wir fangen mit formalen Grundlagen an.
Erstmal eine etwas trockene Einführung in Automatentheorie.
Die haben Sie hoffentlich alle schon x-mal gehört.
Dann werde ich auf entsprechend spezielle Automatenformen eingehen,
nämlich auf den Mo- und die Mili-Automaten.
Verschiedene Darstellungsmöglichkeiten und die Realisierung von
Automaten.
Wir wollen sie dann ja am Ende mit Booleschen Schaltungen auch
realisieren.
Ach, das klickt jetzt etwas schnell hier.
So, Einführung in die Automatentheorie.
Wir haben so einen Sextupel.
Der Automat A, zugegebenermaßen wiederholt sich das A jetzt hier.
Das fällt mir gerade erst jetzt auf.
Okay, das A ist also der Automat und der hat also Eingabegrößen,
Ausgabegrößen, Zustandsgrößen.
Dann hat er diese Überführungsfunktion, Übergangsfunktion oder
Transitionsfunktion.
Dann die Ausgabefunktion und er hat natürlich einen Grundzustand.
Und wenn ich jetzt mit so einem Automaten arbeiten möchte, dann muss
ich im Prinzip diese Dinge definieren.
Ja, das heißt also, wir haben hier Mengen.
E, das ist die Menge der Eingangsbelegungen, die ich haben kann, die
ich sozusagen an den Automaten anlege.
Das werden wir gleich noch konkret machen.
Menge der Ausgangsbelegungen, ja, Groß A, also Menge der
Ausgangsbelegungen, klein A und Groß Z ist die Menge aller internen
Zustände.
Wie schon gerade gesagt, diese internen Zustände kommen mal dafür auf,
was ich bisher schon gesehen habe.
Und das ist eben das Interessante, dass sie dann eben Wirkungen haben
können, die sie gar nicht erwarten würden, wenn sie nur eine
Eingangsgröße anlegen.
Jetzt müssen wir gleich zwei Sachen unterscheiden, aber jetzt fangen
wir erstmal an mit der Überführungsfunktion.
Was die macht, das ist eine Rekursion.
Das heißt, die Überführungsfunktion wird sozusagen rekursiv
angewendet.
Das heißt, ich nehme den Zustand und führe den rekursiv auf sich
selbst zurück.
Das heißt also, wir haben eine Abbildung von Z kreuz E, das ist also
ein kathesisches Produkt, auf Z.
Und das Delta nimmt jetzt also diese Menge und bildet wieder auf Z ab.
Bedeutet also, abhängig von den Eingangsgrößen wird ein Feedback
durchgeführt und ich kann im Prinzip so eine zeitliche Evolution mir
anschauen, so eine zeitliche Entwicklung, wohin praktisch dieser
interne Zustand läuft.
Und bei den Moorautomaten werden wir gleich sehen, ist das auch das
Essentielle.
Dann gibt es eine Ausgabefunktion.
Und was macht die Ausgabefunktion?
Die Ausgabefunktion, und das bitte jetzt nicht nur abstrakt sehen, die
Ausgabefunktion ist wichtig, die nimmt jetzt im Prinzip den Zustand
und zeigt mir die Wirkung nach außen.
Wenn ich also jetzt einen Zustand habe, der ziemlich kompliziert ist,
kann es aber sein, dass ich nach außen auf das A nur eine relativ
simple Wirkung habe.
Also vielleicht habe ich nur zwei Zustände nach außen, obwohl ich ganz
viele Zustände innen habe.
Ja, das heißt also, die Ausgabefunktion kann ziemlich simpel sein.
Ich habe also eine komplexe interne Wirkungsfunktion, weil das ja von
so vielen vorhergehenden Eingangsvariablen abhängt.
Und die Ausgabefunktion hat aber vielleicht wirklich nur zwei
verschiedene Werte.
Das kann passieren.
Und das Omega ist jetzt eben diese Funktion, ist auf Z-Kreuz-E
definiert.
Übrigens nicht immer.
Bei Mur-Automaten, werden wir gleich sehen, fällt das Z-Kreuz-E weg.
Deswegen sind die etwas komplexer im Aufbau, aber einfacher zu
verstehen.
Und bei Mili-Automaten haben wir jetzt Z-Kreuz-E auf A.
Ja, und dann die Werte müssen natürlich in diesem A hier oben liegen.
Z-Null ist der Grundzustand, den kann ich abtrennen.
Von dem laufe ich sozusagen los und gehe dann in diese Maschine rein.
Ich hoffe, das ist klar.
Sieht erst mal abstrakt aus, wenn ich mir dieses Sechstupel da
anschaue.
Aber es ist ganz wichtig, dass ich sozusagen trenne zwischen der
Rekursion für den Zustand und der Ausgabe des Zustands in die
Wirksamkeit, in die reale Welt.
Ist das klar überhaupt?
Wird das klar oder stellen Sie am besten jetzt Fragen, wenn das nicht
klar ist.
Diese Rückführungsfunktion oder Überführungsfunktion, also da gibt es
verschiedene Namen dafür.
Transitionsfunktion ist ja bisher gerade gesagt, da gibt es ganz viele
Namen für diese Funktion.
Deren Wirkung sehen Sie nicht unmittelbar nach außen, sondern Sie
sehen die Wirkung der Ausgabefunktion nach außen, weil die
typischerweise dann eben den Zustand nach außen trägt.
Okay, also die Zustandsmenge Z, die speichert jetzt das Wissen über
Eingangsbelegung, die ich schon mal hatte.
Und die aktuelle Ausgabebelegung, das heißt am Ausgang A, wird jetzt
durch die Funktion Omega bewirkt.
Und der neue Zustand, der wird jetzt durch die Funktion Delta auf der
aktuellen Eingangsbelegung und dem alten Zustand erzeugt.
Ja, und jetzt kann man sich überlegen, bei der aktuellen
Ausgabebelegung, da könnte ich jetzt entweder den neuen Zustand nehmen
oder den alten Zustand nehmen.
Und da werden wir gleich noch eine Unterscheidung machen.
Die ist nicht so wesentlich für die Moore-Maschine, also für den Moore
-Automaten, werden wir gleich sehen, aber die ist schon etwas
wesentlicher für diese Mealy-Automaten.
Also werden wir die beiden jetzt mal anschauen.
Moore und Mealy, das sind jetzt die beiden Maschinen, die für uns
wichtig sind.
Also die einfache Maschine von allen, mit der beginnen wir.
Das heißt, wir haben hier diese beiden Funktionen, also Omega.
Omega bewirkt sozusagen, was ich von dem Zustand nach außen sehe.
Das Delta nimmt den alten Zustand, den ich hier bekomme, über so einen
Speicher und mit den Eingangsgrößen und verändert das praktisch zu
einem neuen Zustand.
Der wird gespeichert erstmal und dann zurückgegeben.
Jetzt kann ich Ihnen hier gleich schon mal erklären, den Unterschied
zwischen asynchronen Schaltwerken und synchronen Schaltwerken.
Bei asynchronen Schaltwerken wäre es so, dass ich nicht wüsste, wann
die Wirkung hier oben ankommt und ich auch nicht weiß, wie groß dieser
Speicher ist.
Ich lasse den Speicher einfach durchlaufen.
Ich weiß nicht, wie groß der ist, kann drei Nanosekunden oder fünf
Nanosekunden oder irgendwas lang sein.
Ich lege hier irgendwas an und ich weiß nicht, wie lange ich warten
muss.
Und Sie kennen unser Todzeitmodell.
Mit der Hilfe des Todzeitmodells würde ich jetzt modellieren, das
dauert jetzt eben fünf Nanosekunden, bis der Wert Z neu hier
durchschlägt.
Und dann kommt hier der neue Wert raus.
Synchron bedeutet, dass der Speicher getaktet ist.
Das heißt, der Speicher wird in einem bestimmten Takt, meinetwegen 100
Nanosekunden oder irgendwas, wird der Speicher getaktet.
Und da kommen dann die Flipflops ins Spiel.
Lasse ich diesen Wert Z neu, nur an Z durch, wenn ich einmal ein
Taktsignal anlege.
Das wären dann synchrone Schaltwerke.
Da muss ich allerdings auch aufpassen, wenn wir gleich beim Mili
besonders sehen, dass ich den Eingang auch nur immer zu den
Zeitpunkten durchlasse, weil sonst gibt es ein Chaos.
Das sehen Sie gleich selber.
Ist das soweit klar?
Der ist so schön, weil im Grunde genommen immer nur der Zustand nach
außen gegeben wird.
Das heißt, immer nur dann, wenn ich eine Zustandstransition hinter mir
hatte, dann bekomme ich einen neuen Ausgang.
Sehr einfach zu verstehen.
Jetzt gucken wir uns mal die entsprechenden Abbildungen an.
Wir haben also Delta von Z und E.
Also E ist der Eingang, Z ist der alte Zustand, gibt den neuen Zustand
und das A, die Ausgabe, hängt eben nur ab über das Omega von dem alten
Zustand.
Also sehr einfach.
Und das ist hier die Ausgabewirkung, die wir haben durch so einen
Moorautomaten.
So, jetzt kommen wir zu einem Milliautomaten.
Der ist jetzt etwas mächtiger im Prinzip.
Also das heißt, wir werden typischerweise, wenn wir ein Schaltwerk
haben in der gegebenen Funktionalität, dann kann man das mit einem
Milliautomaten typischerweise etwas effizienter umsetzen.
Da komme ich gleich nochmal drauf.
Hier ist es jetzt aber so, dass auch die Eingabebelegung in die
Berechnung des Ausgabewertes eingeht.
Das sieht man hier.
Wir haben also hier die entsprechende, ich klicke das mal auf,
Wirkung.
Das heißt, wir haben hier etwas, das nennen wir Durchgriff.
Ich schreibe das mal dran.
Wir haben also hier einen sogenannten Durchgriff.
Also das hier.
Warum nennt sich das so?
Weil im Prinzip die Eingangsgröße direkt auf die Ausgangsgröße
durchgreifen kann, ohne dass man erst über den Zustand geht.
Und dieser Durchgriff macht jetzt folgende Probleme.
Sagen Sie es mir mal.
Gucken Sie mal scharf hin und sagen mal, welche Probleme kann man sich
jetzt mal vorstellen.
Angenommen, wir fangen mal an mit einem asynchronen Netzwerk.
Das heißt, der Speicher liegt gar nicht in unserer Hand.
Wir wissen gar nicht, wie lange der verzögert.
Was passiert denn dann wohl?
Also ich habe jetzt hier im Prinzip, ich lege etwas Neues an.
Das wird hier unten durchgegeben.
Hier unten liegt der alte Wert an.
Das wird das neue.
Und jetzt speichert das hier.
Wovon hängt denn das jetzt ab, was passiert?
Sehen Sie es nicht?
Jetzt können wir hier ein ziemliches Chaos haben.
Hier oben haben wir eine Logik, irgendeinen Logikbaustein.
Der hat eine bestimmte Laufzeit.
Der ergibt das, was hier vorne jetzt neu anliegt.
Also das liegt ja noch alt an.
E liegt neu an, über den Durchgriff.
Und das A kommt jetzt nach einer bestimmten Laufzeit raus.
Sagen wir mal in der Zeit 5.
Egal welcher Einheit.
Ich lege das Eingangssignal hier unten an.
Zusammen mit dem Z.
Und die Frage ist jetzt, wie lange dauert dieser Logikbaustein?
Und welche Verzögerung habe ich dann dadurch?
Die ich ja hier explizit mache, diesen Speicher.
Den könnte ich hier oben auch explizit machen.
Und dann kann es sein, dass das Ausgangssignal sich mehrfach ändert.
Allein durch diesen Effekt.
Das heißt also, der Mili-Automat mag zwar ein paar Vorteile haben, da
kommen wir gleich darauf, in der nächsten Folie.
Aber wir sehen, das kann ganz schön Probleme machen, dass wir hier
direkt von dem E auf das A durchgreifen können.
So weit?
Klar.
Also.
Mu-Automat vs.
Mili-Automat.
Sie sind ineinander umwandelbar.
Das hatte ich ja gerade schon durchklingen lassen.
Sie können also einen Mu-Automaten exakt in einen Mili-Automaten
umrechnen und auch in die andere Richtung.
Sie sind also völlig ineinander umrechenbar.
Mili-Automat braucht typischerweise weniger Zustände als ein Mu
-Automat für die gleiche Funktionalität.
Warum eigentlich?
Können Sie sich das schon vorstellen?
Sonst frage ich Sie die Frage gleich nochmal.
Oder hat jemand schon eine Idee?
Sehen Sie das schon?
Am besten sieht man das an dem Graphen.
Wir werden noch so einen Automaten-Graphen sehen.
Vielleicht verschiebe ich das dann mal.
Aber Sie können schon mal hier sehen, das ist eben nur eine
Behauptung.
Ich glaube, ich sollte nicht zu sehr vorgreifen.
Also benötigen typischerweise weniger Zustände.
Und jetzt kommen wir zu den Änderungen des Ausgangs.
Das ist wichtig.
Bei Mu ist die Änderung nur nach einer Zustandsänderung am Ausgang
verfügbar.
Also der Zustand muss sich einmal ändern.
Dann kommt ein neuer Ausgang zustande.
Wenn ich synchron arbeite, habe ich ja gerade gesagt, wenn ich einen
Takt habe, der sozusagen diese Zeitverzögerung taktet, dann bekomme
ich diese Änderung nur zum neuen Takt.
Also der Takt muss entweder einen anderen Pegel bekommen oder ich muss
eine Flanke sehen.
Dann bekomme ich einen neuen Wert am Ausgang.
Bei Mili ist es aber so, dass sich wegen diesem Durchgriff der Ausgang
sofort ändert.
Der ist im Prinzip erstmal unabhängig von der Zustandsänderung.
Und das kann Probleme machen.
Und wenn ich synchron arbeite, dann ist es gut.
Dann kriege ich den sozusagen vor dem neuen Takt, habe schon mal die
Änderung und der neue Takt speist mir dann den Zustand ein und ich
blocke damit die entsprechenden Eingänge.
Ja, das werden wir gleich noch sehen.
Ja, und jetzt, komischerweise kam die Frage gar nicht, die hätte ich
jetzt eigentlich erwartet.
Sie können natürlich bei Mur und Mili jeweils den Ausgang auch
abhängig machen von Z neu und nicht von Z.
Ja, das ist ja klar.
Ich meine, es ist ja egal, wo ich abgreife, ob ich bei dem neuen oder
bei dem alten Wert abgreife.
Und das können Sie bei beiden machen.
Wir werden jetzt gleich mal nur auf Mili eingehen und nicht auf Mur,
weil da ist es an sich egal.
Ja, bei Mili macht es schon einen größeren Unterschied.
Also bei Mur Automaten, wenn wir jetzt mal diese Unterschiede im
Verhalten anschauen.
Bei Mur Automaten ist die Ausgabebelegung unabhängig von der
Eingabebelegung.
Das haben wir ja gerade gesagt.
Also wir haben überhaupt keinen Durchgriff.
Die Eingabebelegung wirkt nur auf die Zustandsänderung.
Das heißt, wenn der Zustand sich ändert, danach ändert sich die
Ausgabebelegung.
Das kann ich für synchrone und asynchrone Schaltwerke verwenden.
Ich habe es ja gerade schon kurz erklärt, wir machen das gleich noch
genauer.
Und das heißt, ich habe hier mein Z, meinen alten Zustand, mein E,
meinen neuen Eingang.
Und das heißt, die beiden wirken auf meinen neuen Zustand.
Und der Zustand, der alte, wirkt auf den neuen Zustand natürlich, aber
auch nur auf den Ausgang.
Und keine andere Wirkung als durch diesen Zustand haben wir auf den
Ausgang.
Und wie gesagt, das kann ich ja umdrehen.
Ich könnte jetzt hier auch von hier aus rechnen.
Ich kann den Pfeil also umhängen.
Das macht aber keinen großen Unterschied.
Bei Miliautomaten gibt es Unterschiede.
Da können wir jetzt überlegen, die Ausgabewerte, wie gerade gesagt,
können sich sofort mit der Änderung der Eingangsvariablen ändern.
Und das mag ja auch gut sein, haben wir ja gerade gesagt.
Das ist ja schön, das reagiert also schnell.
Aber wir müssen eben aufpassen, dass wir zwei Arten unterscheiden.
Entweder haben wir jetzt zunächst aus der neu anliegenden
Eingabebelegung die Ausgabebelegung gebildet und dann in den
Folgezustand gewechselt.
Das wären synchrone Schaltwerke.
Ich schreibe mal rein, wie dann die entsprechenden Formeln aussehen.
Und zwar kann man dann doch, dass wir Z neu haben.
Also das Z neu, das bestimmt sich ja jetzt aus dem alten Z.
Das wäre also das Delta von dem alten Z und dem E.
Das heißt also, was wir hier sehen, das Z neu würde von Z und E
abhängen und das A hängt jetzt von Z und E ab.
Das heißt also, der Ausgangswert A hängt jetzt von Omega von Z und E
ab.
Jetzt könnte man nämlich natürlich gleich, wie wir das im nächsten
Schritt machen, wir hätten ja auch sagen können, wir kommen direkt
hier runter.
Das wäre der nächste Schritt, was man bei asynchronen Schaltwerken
anwendet.
Also das wären synchrone Schaltwerke, damit werden wir die
realisieren.
Und jetzt kommen wir mal zu den Mili-Automaten zweiter Art.
Und hier ist es jetzt eben so, wie ich gerade gesagt habe, dass man
von dem Z neu direkt runter geht.
Und da macht man ja nichts anderes, als dass ich in den Formeln, die
erste Formel bleibt ja gleich.
Also Z neu ist einfach das Delta von dem alten Z mit der
Eingabebelegung E.
Und das A hängt jetzt ab von dem Omega.
Da würde ich jetzt einfach einsetzen, dass ich Z neu und E habe.
Ich glaube, so sieht man es hier auch, dass wir also das A abhängig
machen von Z neu und E.
Und ich kann es gerne nochmal ein bisschen annotieren in der Grafik,
wenn das unklar ist.
Aber stellen Sie mir einfach ein paar Fragen dazu, wenn es
Schwierigkeiten gibt.
Oder ist das klar, warum man das machen kann?
Im Grunde genommen, ja gut, die Frage könnte doch sein, wenn Sie sie
nicht stellen, stelle ich sie mal.
Sind denn diese Funktionen Delta und Omega die gleichen?
Nein, natürlich nicht.
Ich müsste natürlich jetzt eigentlich hinschreiben, das ist Delta
Strich und Omega Strich.
Weil wenn ich jetzt auf den neuen Zustand gehe, dann habe ich
natürlich andere Funktionen.
Habe ich jetzt mal der Einfachheit halber weggelassen.
Aber um die gleiche Funktionalität zu erreichen, müsste ich natürlich
jetzt hier ein Delta Strich und ein Omega Strich einführen.
Aber dann, vor allem weil wir nur an der Ausgabefunktionalität
interessiert sind, kann ich sozusagen ein Delta und Omega oder ein
Delta Strich und Omega Strich immer finden.
Deswegen ist mir das eigentlich egal, ob ich das in dieser Form
darstelle oder in einer anderen Form.
Ist das klar?
Weil wir kommen da noch drauf, wir wollen ja realisieren.
Scheint soweit klar zu sein, okay.
Das heißt also, das wäre ein Miliautomat zweiter Art, der eben erst Z
neu bildet und daraus dann bei der gleichen Eingabebelegung dann das A
bildet.
Aber mit dem gleichen Problem übrigens.
Das heißt, es gibt ja natürlich das Problem, je nachdem wie die Logik
arbeitet, schneller und langsamer ist, dass wir da asynchrone Effekte
haben.
Darstellungsmöglichkeiten für ein Schaltwerk.
Und da werden wir jetzt ein paar Dinge sehen und die möchten wir
typischerweise natürlich über ein Beispiel rüberbringen.
Fangen wir erstmal an mit einer formalisierten Beschreibung.
Also, wenn wir so einen Automaten entwerfen wollen, dann haben wir
zunächst mal so eine informale globale Form.
Wir haben ein Pflichtenheft, das sagt verbal, was die Schaltung
leisten soll, das ist ganz klar, Ablaufpläne und so weiter.
Technologie, ist das CMOS oder was auch immer.
Und wir brauchen einen Übergang zu einer formalisierten Beschreibung.
Und das wollen wir jetzt machen, dass wir im Prinzip eine
formalisierte Beschreibung des Schaltwerkes haben, um es wirklich
umsetzen zu können.
Und wir wollen jetzt vier Möglichkeiten für so eine formalisierte
Beschreibung uns mal anschauen.
Vielleicht sind die ersten beiden etwas, was man dann irgendwann mal
aufgibt.
Weiß ich nicht, irgendein Problem ab.
Aber das werden Sie ja gleich sehen.
Und dann werden wir zwei Beschreibungen feststellen.
Eine Tabellenform und eine Graphenform, mit denen man dann
entsprechend arbeiten kann.
Also, ein nicht triviales Beispiel.
Wir haben ein Schaltwerk, das soll eine einlaufende Impulsfolge am
Eingang X so verarbeiten, dass die Eingangsimpulse einmal an einem
Ausgang oder einem anderen Ausgang dargestellt werden.
Und da sieht man ganz eindeutig, das muss ein Schaltwerk sein, weil
Sie wissen ja sonst nicht, wenn Sie es statisch machen, wenn Sie kein
Gedächtnis haben, wüssten Sie ja nicht, habe ich den letzten da
dargestellt oder dort dargestellt.
Das heißt, Sie wollen immer hin und her springen.
Da braucht man also ein Gedächtnis.
Ist also einfach, aber trotzdem nicht trivial.
Das heißt also, die Eingangsimpulse X sollen abwechselnd, das ist der
Clou, an den beiden Ausgängen Y0 und Y1 erscheinen.
Und jetzt, wie beschreibe ich das formalisiert?
Was denken Sie, was kann man machen?
Wie fängt man denn überhaupt mal an?
Was wäre denn die erste Formalisierung?
Wie würden Sie anfangen, wenn Sie an das Problem herangehen würden?
Vielleicht malt man sich erstmal hin, was denn passiert für eine
Beispielfolge.
Jetzt wissen Sie aus der Softwareentwicklung, dass Beispieleingaben
und so nicht das sind, wo man alles davon ableiten kann.
Das ist hier genauso.
Aber trotzdem kann man ja mal hingucken und mal schauen, wie sieht das
Ganze denn aus.
Also, das wäre so ein Zeitdiagramm.
Wir gucken uns mal ein Zeitdiagramm an, und zwar ein ganz
beispielhaftes.
Das dient nur zur Veranschaulichung des Problems.
Und hoffentlich wird man dadurch nicht in die Irre geleitet.
Das kann natürlich auch passieren.
Ja, Sie veranschaulichen sich das Falsche.
Kann auch sein.
Also wie gesagt, da muss man vorsichtig sein.
Wir nehmen also jetzt eine Eingangsfolge, die ist hier unten.
Sieht jetzt also so aus.
Und der erste Puls soll bei Y0 rauskommen.
Der zweite bei Y1.
Der dritte bei Y0.
Der vierte bei Y1.
Und so weiter.
Das wollen wir erreichen.
Das ist ja eine ganz vernünftige Aufgabenstellung, das zu machen.
Geht auf keinen Fall mit einem Schaltnetz.
Da muss man ein Schaltwerk dafür haben.
Gucken wir uns das also nochmal an.
Wir können jetzt hier unterscheiden...
Also ich möchte es so machen.
Ich werde Ihnen jetzt Zeitintervalle darstellen.
Und aus den Zeitintervallen wollen wir Zustände ableiten.
Weil das ist doch jetzt gerade, glaube ich, das große Problem, dass
ich gerade von Zuständen sprach.
Und jetzt möchte ich gerne von Zeiten auf Zustände kommen.
Und vielleicht sieht man das gar nicht so unmittelbar, was das
überhaupt bedeutet.
Vor allem, wenn wir das jetzt asynchron machen wollen, bedeutet das
ja, dass das Schaltwerk, egal wie die Änderung ist, immer sofort
reagiert.
Wir haben ja erstmal noch keinen Takt.
Den lassen wir erstmal weg.
Das heißt also, ich habe vier verschiedene Zeitintervalle.
Fangen wir also mal an mit diesem ersten.
Das habe ich jetzt hier auf der Zeitachse sozusagen als Z1
dargestellt.
Und das wird gleich ein Zustand.
Aber das müssen wir erst diskutieren.
Das ist also dieses hellblaue hier jeweils.
Und was müssen wir da machen?
Schauen wir uns das mal an.
In diesem Zeitraum Z1, da müssen wir ausgeben, Y0, Y1 ist 0, 0.
Das heißt also hier oben werden die beiden, sozusagen Y0 ist das, Y1
ist das, die werden hier als 0, 0 ausgegeben.
Und X ist erstmal 0.
Und was tun wir jetzt?
Wenn das nächste X auch 0 ist, was machen wir dann?
Dann bleiben wir, und das muss der Automat eben machen.
Und das will ich jetzt mal versuchen hier rüber zu bringen.
Der Automat läuft jetzt hier in diesem Intervall unendlich schnell,
infinitimal schnell im Prinzip erstmal ab.
Klar, wir haben Zeitverzögerungen, aber wir sagen mal, wenn das jetzt
hier Millisekunden sind und der Automat läuft im Nanosekundenbereich,
dann warten wir sozusagen hier mit dem Automaten.
Der läuft jetzt hier ganz schnell hin und her.
Das heißt, wenn jetzt X gleich 0 wäre, dann muss ja der Ausgang gleich
bleiben und der Zustand gleich bleiben.
Das heißt, er muss genau da bleiben.
Er wartet also auf X gleich 1, dann müsste er hierhin springen.
Das heißt also, das nächste Zeitintervall wäre dieses.
Da springe ich dann hin und jetzt gebe ich aus für Y0 gleich 1.
Das heißt, wir legen jetzt hier den Eingang drauf.
Und jetzt warten wir hier wieder, weil jetzt hier X gleich 1 ist.
Jetzt warten wir, dass X wieder auf 0 geht.
Das heißt also, es ist ein eindeutiger Zustand, den wir hier haben,
dieses Zeitintervall.
Wir warten, dass das X wieder auf 0 geht.
Solange bleibt das Y0 auf 1.
Und jetzt kommt das dritte Zeitintervall oder gleichzeitig unser
Zustand.
Wir geben aus Y1 gleich 0, weil wir hier wieder ein 0 liegen haben.
Und jetzt warten wir auf X gleich 1.
Ich hoffe, das bringe ich richtig rüber.
Sagen Sie mir, wenn das nicht klar wird.
Der Automat rennt jetzt mit unendlicher Geschwindigkeit dadurch.
Und wenn X gleich 0 die ganze Zeit noch anliegt, dann werde ich immer
wieder das Gleiche ausgeben.
Und erst dann, wenn ich X gleich 1 anlege, dann springt der in den
nächsten Zustand und gibt was anderes aus.
Und der nächste Zustand wäre eben jetzt hier Z4, das Zeitintervall Z4.
Das wäre jetzt unser neuer Zustand.
Dann geben wir eben 0, 1 aus und warten wieder darauf, weil wir die
ganze Zeit auf 1 gepolt sind, warten wieder darauf, dass wir X gleich
0 bekommen und dann wieder zurückspringen in diesen blauen Bereich.
Und dann geht das Ganze wieder von vorne los.
Also nicht triviales, aber glaube ich ganz interessantes Netzwerk,
weil es eben im Prinzip jetzt so im Kreis läuft.
Und wir warten sozusagen, wir haben immer so Wartezustände und dann
laufen wir wieder rüber, dann warten wir wieder, dann laufen wir
wieder rüber und so.
Gibt es Fragen soweit?
Jetzt müssen wir das doch im Prinzip mal ummünzen in einen Automaten.
Wir wollen also hieraus einen Automaten machen.
Und wie machen wir das?
Wir müssen jetzt im Prinzip diese Aussagen, die ich jetzt hier verbal
gegeben habe, zum Beispiel diese hier, wenn wir in Z2 sind, dann geben
wir Y0, Y1, 1, 0 aus und sind, solange X gleich 1 ist, geben wir das
auch weiter aus und bleiben in dem Zustand Z2.
Und wenn X gleich 0 wird, dann springen wir eben in Z3.
Also machen wir das doch mal.
Wir haben eine Automatentabelle.
Die Automatentabelle sagt, wir haben im Prinzip den gleichen
Sachverhalt, ständig anders da, in senkrechter Richtung Zustände,
waagerecht die Eingangsbelegungen und wir haben so eine Matrix, die
gibt die entsprechenden Folgezustände an, wohin ich denn springe.
Und das macht eben einen Unterschied, das werden wir gleich noch
sehen, was für einen Typen von Automaten ich denn betrachte.
Das wäre zum Beispiel für den Moorautomaten.
Ich habe also hier so eine Matrix, die sagt mir jetzt hier, ich habe
ZK, das kann Z1, Z2, Z3, Z4 sein und so weiter.
Und das ist mein neuer Zustand und in Abhängigkeit davon, was ich
anlege, springe ich da oder da hin.
Und das weiß ich noch nicht.
Das ist eine generische Tabelle.
Diese Tabelle ist ganz generisch, hängt also noch nicht vom Problem
ab.
So, jetzt gucke ich mir unser Problem mal an.
Unser Problem sagt doch, wenn ich in Z1 bin und bekomme ein X gleich
0, dann bleibe ich in Z1 und gebe das auch wieder aus, was ich hatte.
Bin ich in Z1, bekomme eine 1 für X, springe ich in Z2 und muss dann 1
oder 0 ausgeben.
Und hier sehen Sie jetzt auch noch mal ganz schön, dass zwischen Moor-
und Miliautomat eigentlich überhaupt kein Unterschied besteht von der
Funktionalität.
Das geht völlig gleich.
Diese Tabelle, die ich hier aufgeschrieben habe, die können Sie jetzt
für beide Automaten verwenden, das tun wir auch jetzt.
Wichtig ist eben nur, wenn Sie sich das mal genau angucken, ich habe
hier Z1, Z1, Z2, Z2, Z3, Z3, Z4, Z4.
Hier habe ich dann Z1, 2, 2, 3, 3, 4, 4, 1, dann geht es wieder hoch.
Das heißt also, der läuft wirklich durch.
Das ist also ein ganz schöner Automat, der läuft im Prinzip immer so
durch.
Und ich gebe dann entsprechend das Richtige aus, merke mir also, was
ich im Vorgängerzustand gehabt habe und kann dann im Prinzip immer
toggeln zwischen diesen beiden Ausgaben.
Das heißt, das übersetzen wir jetzt mal.
Beim Moor-Automaten wesentlich einfacher zu verstehen, warum.
Ich kann jetzt nur die Zustände durchgehen.
Das heißt, ich gucke jetzt mal hier hin und sage mal, wenn ich in Z1
bin.
Z1 für x gleich 0, komme ich in Z1.
Z1 für x gleich 1, komme ich in Z2.
Und so weiter.
Z2 für x gleich 0, komme ich in Z3.
Sonst Z2.
Und so weiter.
Kann ich das jetzt einfach hier so durchtoggeln.
Und beim Moor-Automaten hängt jetzt die Ausgabe nur vom Zustand ab.
Jetzt kann ich die einfach eintragen, was ich haben will.
Gucke ich mir also an, bin ich in dem Zustand.
Okay, kriege ich 0, 0.
Bin ich in Z1.
Hier 0, 0.
Bin ich in Z2.
Kriege ich eben 1, 0.
Bin ich in Z3.
Kriege ich wieder 0, 0.
Bin ich in Z4.
Kriege ich 0, 1.
Und das sehen Sie hinten auch.
Das heißt, Z2, Z2.
Z3, Z3.
Z4, Z4.
Und so weiter.
Das heißt, immer die gleiche Ausgabe.
Das heißt, einfacher Automat, aber, glaube ich, ganz gute Übertragung.
So, und jetzt Mili.
Bei Mili-Automaten habe ich ja gesagt, wir geben direkt etwas aus und
dann wird der Zustand geändert.
Das heißt also, wir haben ZK, den alten Zustand, und wir wollen jetzt
zum neuen Zustand, ZK plus 1, und geben aber bei dem, deswegen in
etwas andere Notationen, kommen wir auch gleich bei den entsprechenden
Graphen dazu, geben dann aber schon bei diesem Übergang die
entsprechenden Ausgangswerte aus.
Und dann machen wir das jetzt so, wieder bei X gleich 0.
Z1 muss ja natürlich rauskommen, wenn ich springe in Z1 und gebe 0, 0
aus.
Das ist also ganz analog.
Oder ich springe in Z2 und gebe 1, 0 aus.
Und da sehen Sie, das ist anders als bei den Mur-Automaten kodiert,
aber das ist genau konsistent, was wir hier sagen, dass wir hier
entsprechend springen auf Z2 und geben 1, 0 aus.
Das gehe ich jetzt einfach mal durch.
Das heißt, Sie haben hier die etwas andere Notation.
Sie springen also in einen bestimmten Zustand mit einer entsprechenden
Ausgabe dazu.
Das wären also Mur- und Mili-Automat für dieses einfache Problem, dass
man eine Eingangsfolge, die verschiedene Pulse aufweist, dass man
jeweils den ersten Puls in die eine Ausgabe gibt und jeden zweiten
Puls in die andere Ausgabe gibt.
Ist das klar soweit?
Okay, jetzt ist die Frage, reicht uns diese Automat-Tabelle oder
können wir noch mehr machen?
Ja, wir können noch ein bisschen was mehr machen.
Wir können nämlich sagen, wir können einen Automaten-Graphen
definieren.
Und da haben wir jetzt diese Überführungs- und Ausgabefunktionen, die
werden jetzt in einem gerichteten Graphen dargestellt.
Und das Z ist die Menge aller Zustände, Z, und K ist die Menge aller
Übergänge, K, zwischen den Zuständen.
Und dann schreibe ich die Eingabebelegung einfach an die Kanten
dazwischen und kann damit so einen Graphen definieren.
Jetzt stellt sich vielleicht für Sie die Frage, warum haben Sie
eigentlich bisher das Delta und das Omega noch nicht gesehen?
Jetzt habe ich mir doch gerade Mühe gegeben, am Anfang Ihnen zu
vermitteln, was für ein Delta und was für ein Omega ich denn nehme.
Jetzt müssten Sie doch langsam das Gefühl bekommen, wo bleiben die
denn?
Warum sehen wir die eigentlich noch nicht?
Genau, ganz genau.
Und wann kommen die eigentlich erst?
Sehen Sie das?
Genau, richtig.
Aber wann kommt es für mich jetzt als Designer, wenn ich das jetzt
designen möchte?
Wann kommen für mich eigentlich, ich kann das ja alles jetzt
durchrechnen, dann würden Sie sich wundern.
Komisch, wir machen jetzt hier Schluss sozusagen, die Vorlesung würde
jetzt hier aufhören und Sie haben es nie gesehen.
Wann würden Sie es denn sehen?
Und wir sehen es heute noch.
Wann würden Sie es denn sehen?
Sehen Sie es jemand anders?
Wann kommen denn eigentlich diese Deltas und Omegas zum Tragen?
Die Kommiliton hat genau recht, wenn ich das sozusagen mit diesen
Tabellen darstelle, dann kann ich das ja so darstellen, so verkapseln,
dass ich sozusagen nur mein Wunschverhalten habe.
Und aus dem Wunschverhalten heraus muss ich jetzt die Deltas und die
Omegas ja entwerfen.
Und genau da kommt der Punkt rein.
Jetzt muss ich irgendwann entwerfen.
Ich muss also ein Schaltwerk entwerfen für das Delta und für das
Omega.
Und das wird besonders einfach für synchrone Schaltwerke und nicht so
besonders einfach für asynchrone.
Das werden wir gleich noch sehen.
Deswegen also, wenn wir das hier mal sehen, dass diese hier zwar
dargestellt werden, aber eben sehr implizit.
Okay, also wir haben diese Tabellen für den Moore-Automaten und für
den Mealy-Automaten, haben wir gerade aufgestellt.
Das ist nur eine reine Wiederholung, die hier in orange dargestellt
sind.
Jetzt kann ich den Moore-Automaten folgendermaßen darstellen, dass ich
immer sage, ich habe so einen Kreis und da drin steht immer der
Zustand und der Slash sagt, was ausgegeben wird.
Also das heißt, was für einen bestimmten Zustand.
Ich habe ja ganz vorhin gesagt, ganz am Anfang, ich kann für einen
Zustand weniger oder mehr ausgeben.
Hier ist es eben so, dass wenn ich in einem bestimmten Zustand 0 zum
Beispiel bin, dann gebe ich eben mehr Bit aus.
Das kann passieren.
Und dann habe ich diesen Übergang, der hängt also ab von dem X.
So, jetzt lassen Sie das mal auf sich wirken.
Ich bin zum Beispiel hier im Zustand Z1, da gebe ich 0,0 aus.
Das haben wir ja gesagt, der Z1 gibt 0,0 aus.
Mit einer 0 bleibe ich, also mit einer Eingabe 0, bleibe ich in dem
Zustand.
Und erst dann, wenn eine 1 kommt, also X wechselt auf 1, dann komme
ich hier hin in den Zustand 2, gebe dann 1,0 aus.
Da wollten wir das ja machen.
Und mit der 1 bleibe ich aber hier immer drin.
Meiner Meinung nach zeigt der Moore-Automat das schöner.
Aber das ist Ihre Meinung, die Sie da für sich bilden können.
Ich will Sie da nicht beeinflussen, aber ich finde, das zeigt der
Moore -Automat schöner.
Das heißt, ich gehe hier rüber und der bleibt sozusagen hier in der 1.
Dann, wenn X gleich 0 wird, gehe ich wieder hier rüber, bleibe hier
mit der 0 drin in dem Zustand Z3 und bei einer 1 gehe ich hier rüber.
Und ich habe ja gesagt, der läuft sozusagen beliebig schnell durch, so
schnell er kann.
Was die Logik hergibt, läuft er jetzt hier durch und es ist nicht
synchron.
Der läuft jetzt hier einfach asynchron durch diesen Automaten durch.
Bei Mili-Automaten ist es vielleicht ein bisschen schwieriger zu
verstehen.
Da ist das sozusagen so dargestellt.
Wir haben einen Zustand und immer dann, wenn ich für ein bestimmtes X
den Zustand wechsle, gebe ich bei dem Wechsel des Zustands ja schon,
weil ich diesen Durchgriff habe, das neue Y0, Y1 aus.
Und dann sieht man eben hier, ich gehe von Z1 mit einer 1 hier rüber,
gebe aber schon 1,0 aus, komme dann in den Zustand Z2.
In dem bleibe ich auch mit einer 1, gebe dann immer 1,0 aus und so
weiter.
Ich glaube, das sollte soweit klar sein.
Wenn Sie Fragen haben, bitte jetzt dazu.
Also wie gesagt, das ist der Unterschied jetzt ganz grundlegend
zwischen dem MUR und dem Mili-Automaten.
Ich hoffe, der Unterschied ist Ihnen klar geworden zwischen den Mili-
und dem MUR-Automaten.
Speziell an diesem Beispiel hier, an der entsprechenden Tabelle und an
dem Automaten.
Jetzt brauchen wir noch eine weitere Sache.
Jetzt müssen wir praktisch von diesen Automaten noch auf die
Realisierung übergehen.
Das heißt also, wir möchten jetzt wissen, wie kann ich denn einen
Automaten realisieren oder wie kann ich den Zustandsspeicher
realisieren?
Wir brauchen ja immer einen Speicher.
Einfachste Form des Speichers, haben wir gerade am Anfang gesehen, ist
die Rückkopplung.
Da zeige ich Ihnen gleich ein ganz schönes kleines Beispiel.
Und dann kann ich im Prinzip die verlorene Information, die bei den
Eingangsvariablen verloren wurde, die kann ich jetzt wieder am Eingang
zur Verfügung stellen.
So kann man sich das anschaulich vorstellen.
Schauen wir uns mal ein ganz einfaches Beispiel an.
Erstmal, wenn Sie da hingucken, was fällt Ihnen auf?
Zwei Sachen müssen Ihnen auffallen.
Was ist das denn?
Wenn ich das E gleich 0 setze, was ist das für ein Baustein?
Wenn es ein NOR ist und ich setze einen Eingang auf 0, was haben wir
dann?
Dann haben wir vielleicht einen Inverter.
Das heißt, das Ganze ist jetzt ein Inverter.
Warum haben wir das E dazu gemalt?
Damit Sie einfach mal sehen, wir sind jetzt bei Schaltwerken, wir
könnten da auch ein E gleich 1 stehen haben.
Okay, was fällt Ihnen noch auf, wenn Sie diese Schaltung anschauen?
Und vor allem, was passiert Chaotisches, wenn wir uns das mal
anschauen?
Nehmen wir mal davon aus, ich lege hier irgendeinen Wert an, zum
Beispiel das wäre jetzt mal eine 1 gewesen.
Ich lege die hier an, kommt hier eine 0 raus und so weiter.
Es macht vor allem keinen Sinn, es ist inkonsistent.
Wenn wir die Schaltung angucken, kriegen wir graue Haare, die macht
gar keinen Sinn.
Warum kann ich das trotzdem machen?
Also wenn Sie sich jetzt mal so einen Baustein kaufen im Geschäft und
koppeln ihn so zurück, das geht tatsächlich.
Der fängt an zu schwingen.
Warum?
Schauen wir uns erstmal an, warum das inkonsistent ist.
Wir hätten hier ein Z neu.
Und wenn ich jetzt sage, ich habe hier das Z quer.
Im Prinzip ist es ja ein Inverter, hätte ich hier ein Z quer.
Das heißt also, Z neu ist Z quer oder Z nicht.
Und Z ist gleich Z neu.
Das heißt also, wir hätten hier einen Widerspruch, weil wäre Z gleich
Z quer.
Haben wir ja gerade gesagt, das geht nicht.
Und wie helfen wir uns jetzt?
Wir haben doch kennengelernt, dass wir eine Schaltung mit
Verzögerungen aufspalten können in eine ideale Schaltung und ein
ideales Schaltnetz.
Das ist jetzt wichtig, dieses Schaltnetz.
Was hier liegt, das ist also ein Schaltnetz und die Rückkopplung gibt
ein Schaltwerk.
Und wir können das sozusagen aufspalten in ein ideales Schaltnetz plus
Verzögerungen.
Und genau das machen wir jetzt auch.
Das heißt, wir sagen jetzt einfach, wir nehmen das Todzeitmodell.
Mehr haben wir in der Vorlesung ja auch nicht gemacht.
Mit Hilfe dieses Todzeitmodells wollen wir jetzt im Prinzip diese
Schaltung mal versuchen zu erklären.
Wir haben jetzt also hier bei dem Ausgang, wenn wir hier Z anlegen,
bei E gleich 0, immer Z quer.
Dann haben wir hier eine Verzögerung.
Dann kommt hier nicht mehr das Z neu raus, sondern Z Strich neu.
Das hat gleich diesen Z.
Mit dieser Schaltung können wir jetzt schon arbeiten.
Warum?
Wir haben ja jetzt Z Strich neu von T plus Delta oder Delta T, könnte
man es auch nennen.
Haben wir jetzt Z quer von T.
Das sehen wir sofort hier über diesen Zweig.
Und das Z von T plus Delta ist gleich dem Z Strich neu von T plus
Delta.
Das heißt also, wir haben hier jetzt eine konsistente Rückkopplung.
Und nur, weil wir das Todzeitmodell verwendet haben.
Und jetzt schaut sich das natürlich erstmal ein bisschen komisch an.
Und jetzt können wir das dann mal umzeichnen.
Wir können jetzt mal sagen, oder es gibt ja Fragen erstmal dazu, warum
wir das so machen können.
Das ist einfach nur das normale Todzeitmodell von Schaltnetzen
angewendet jetzt auf Schaltwerke.
Und jetzt formuliere ich das einfach mal ein bisschen um, indem ich
das umzeichne.
Dann sieht man, dass dieses Deltaverzögerungsglied, das wir ja schon
immer kannten, von Anfang an in der Vorlesung, das entspricht jetzt
diesem sogenannten, in Anführungsstrichen, Speicher.
Also dieser Speicher ist nichts Ominöses, sondern das kann die
Verzögerung des Gatters sein.
Das heißt, ich kann durch ein rückgekuppeltes Gatter offenbar so ein
Schaltwerk bekommen.
Das Schaltwerk verhält sich jetzt vielleicht noch ein bisschen ulkig.
Was erwarten Sie denn, wie sich das verhält?
Ich glaube, Sie hatten es ja gerade schon gesagt, was macht das?
Ja genau, das oszilliert einfach hin und her.
Aber nur durch dieses Delta, sonst wäre es inkonsistent, da würde es
gar nichts machen.
Also ein ideales Schaltnetz würde sich nicht so in ein Schaltwerk
umbauen lassen.
Aber ein nicht ideales Schaltnetz lässt sich so in ein Schaltwerk
umbauen und das oszilliert jetzt immer hin und her.
Das kann man sich mal überlegen, wenn ich jetzt das Zeitverhalten mal
anschaue.
Also wenn das Z neu jetzt so hin und her springt, Z neu wäre hier.
Ich habe diese Verzögerung um das Delta.
Ja genau, dann passiert das, dass ich sozusagen immer bei dem Z hin
und her gehe und das Ganze oszilliert halt stark hin und her.
Ja gut, es steht schon da, aber Sie könnten ja trotzdem mal sagen,
nach dem, was Sie heute in der Vorlesung allein schon gehört haben,
also ohne jegliche Vorbereitung zu Hause, was glauben Sie denn, was
das Problem ist und wie man das beheben kann?
Die Schaltung verhält sich jetzt etwas wirr.
Warum?
Wir sehen zwar bei so einer einfachen Schaltung, was die tut, aber
warum ist das nicht das gewünschte Verhalten?
Die hängt doch von den Verzögerungszeiten ab, die wir in dem Gatter
haben.
Und je nachdem, welches Gatter ich nehme, Sie gehen jetzt ins Geschäft
und kaufen sich 100 Gatter.
Und bei diesen 100 Gattern werden Sie feststellen, dass 100
verschiedene Frequenzen auftauchen.
Das heißt, diese Rechteckimpulse oder wie auch immer das dann am Ende
wird, vielleicht werden die doch gar nicht mehr so rechteckig hier,
natürlich.
Das hängt davon ab, was wir im Gattersee gekauft haben.
Das wollen wir nicht.
Wir wollen also nicht so einfach asynchron zurückkoppeln.
Das heißt also, was wir gerne hätten, wir wollen ein Verhalten
erreichen, was von den Verzögerungszeiten unabhängig ist.
Und jetzt kommen wir sehr stark schon in die am Anfang beschworene
Synchronisierung.
Dass wir im Prinzip jetzt einen Speicher so aufbauen, dass das Z
seinen alten Wert so lange beibehält, wie wir es wollen.
Und nicht, wie er es ohnehin schon macht.
Das heißt, wir sagen dem Speicher, wie lang er speichern soll.
Und wenn wir ihm das nicht sagen, passiert eben irgendwas.
Und das heißt, das haben wir hier in dem Beispiel dann so.
Wir haben hier wieder diesen Inverter, der kriegt Z rein, dann kommt Z
neu raus.
Das geht in die Verzögerung rein und jetzt ist aber die Verzögerung
nicht mehr nur ein Todzeitglied, was wir bekommen aus der Analyse
eines Schaltwerks, sondern jetzt setzen wir da etwas ein, was wir
gleich noch kennenlernen werden.
Da setzen wir jetzt einen Baustein ein, der uns ganz klar sagt, wie
lang wird im Prinzip dieser Wert gehalten, bevor er dann wieder
durchgeht.
Ich denke, das ist klar, oder?
Ist es klar?
Dass ich mir einen Baustein definieren kann, der einfach so lange
hält, das werden die Flipflops sein.
Die halten den Wert so lange, wie wir es wollen.
Das heißt, Z behält seinen Wert so lange, bis T von 0 auf 1 wechselt.
Das müsste übrigens, werden wir gleich sehen, nicht ein Flankenwechsel
sein, also eine Flanke sein.
Hier wäre es ja von 0 auf 1.
Dann wird Z auf Z neu gesetzt.
Z behält diesen Wert bis zum nächsten 0-1-Wechsel, also eine Flanke
von T.
Wir werden auch gleich noch mal sehen, wir könnten das Ganze auch
pegelgesteuert machen und nicht nur flankengesteuert.
Ist aber klar, dass wir jetzt im Prinzip diese Rückführung aktiv
beeinflussen und nicht nur irgendwie zufällig laufen lassen.
Man kann das machen und wir werden sehen, und das ist ja auch
vielleicht die Gemeinheit bei dem Ganzen, das Ding an sich wird
natürlich asynchron arbeiten.
Wir werden ja nicht alles synchron machen können, weil synchron
bedeutet, wir müssen irgendwie so ein Synchronisierungsmechanismus
einbauen und das können wir nicht überall machen.
Das heißt, ganz innen drin, mikroskopisch, egal wie wir gucken, wird
immer etwas Asynchrones sein.
Und deswegen müssen wir uns auch mit asynchronen Netzwerken befassen.
So, jetzt erstmal Definition.
Was ist denn überhaupt Synchron?
Also werden alle Zustandsspeicher, und das haben Sie, glaube ich,
schon verstanden, was das bedeutet.
Zustandsspeicher könnte eben sein, die Verzögerung, die wir haben
durch das Schaltnetz an sich, oder jetzt eben so einen aktiv
gesteuerten Zustandsspeicher.
Wenn die von einem oder mehreren zentralen Synchronisationssignalen,
also solchen Takten, gesteuert werden, dann spricht man von einem
synchronen Schaltwerk, sonst eben nicht, sonst asynchron.
Und die Synchronisation, die könnte ich jetzt über so einen Takt, ich
kann jetzt pegelgesteuert, das heißt also, habe ich 0 oder 1, oder
flankengesteuert sein, das heißt also, warum wechsle ich von 0 nach 1
oder von 1 nach 0.
Und bei der Pegelsteuerung ist es jetzt so, der Speicher, also dieses
Bauelement, was wir in der Rückkopplung haben, der lässt sozusagen
durch, während einer Takthälfte ist er transparent und während der
anderen speichert er und hält sozusagen seinen Ausgang.
Und die Eingänge wirken sich nur auf den Zustand aus, wenn der Takt
zum Beispiel den Wert 1 hat, ja, und sonst wird der Zustand
gespeichert.
Na gut, da kann ich Sie jetzt schon mal fragen, was ist das Problem
dabei?
Wenn ich sage, ich habe zum Beispiel, wir haben es am Anfang
vielleicht gar nicht besprochen, aber es gibt ja verschiedene
Taktverhältnisse, ich kann ja sagen, ich habe so einen 50-50-Takt,
oder ich habe einen 70-30-Takt, da habe ich eben vielleicht nur 30%
high, 70% low.
Machen wir jetzt einen 50-50-Takt, mit dem ich jetzt hier arbeite,
muss ich gar nicht bis zum letzten Punkt gehen, der ist dummerweise
schon aufgeblendet, aber sagen Sie es mal vielleicht mit Ihren Worten,
was denn dann wohl passieren wird.
Dann habe ich vielleicht nämlich gar nicht so viel von dieser
Taktsteuerung, ja.
Und was kann doch passieren?
Dadurch, dass im Prinzip die Eingänge sich ja beliebig verändern
können, während dieser offenen... im Prinzip bin ich in einer
Takthälfte ja transparent, das heißt im Prinzip kann sich dann alles
mögliche ändern, da bin ich nicht gefeit dagegen.
Eigentlich möchte ich doch nur zu einem ganz konkreten Zeitpunkt
Änderungen zulassen, und das kann ich jetzt hier eben nicht, ja, und
da kommen wir gleich mal dazu.
Also bei der Pegelstrahlung geht das eben nicht, ja, wie Sie auch
gerade gehört haben, ja.
Und wir müssen jetzt im Prinzip mal nach was anderem schauen, dann
machen wir die erstmal zu Ende.
Pegelzustandsspeicher, die nennen wir Latches, ja.
Die einfachste Realisierung wäre jetzt ja, und das habe ich ganz am
Anfang schon mal gesagt, wir haben eine konjunktive Verknüpfung jeder
Eingangsvariablen mit dem Takt.
Das heißt, wir takten den Zustand durch, ja, und gleichzeitig haben
wir konjunktiv verknüpft die Eingänge mit diesem Takt.
Dann kann nichts passieren, dann können diese ganzen Dreckeffekte, die
wir am Anfang besprochen haben, können gar nicht passieren.
Ja, und der Nachteil jetzt dieser ganzen Pegelsteuerung ist eben, was
wir gerade gesagt haben, es kann sich alles mehrfach ändern, und das
wollen wir vermeiden.
Das wäre eine Katastrophe, ja, wir haben 50% auf, da drin bewegt sich
irgendwas, ja.
Deswegen gehen wir jetzt zur Flankensteuerung.
Also nur während der positiven oder der negativen Taktflanke, das
heißt, wir gehen von 0 nach 1, oder von 1 nach 0, dann werden die
Eingabewerte in den Speicher übernommen.
Das heißt, ich will nur nach der entsprechenden Änderung gehen.
Ja, und dann müssen die Eingänge nur über eine ganz, ganz kurze
Zeitspanne gültig sein.
Ja, klar, wir haben ja gesagt, es wird ja nicht so funktionieren, wie
wir uns das ideal vorstellen.
Diese Taktflanken sind ja nicht hundertprozentig senkrecht, sondern es
gibt irgendwie so ein Verschliffenes Verhalten.
Trotzdem ist das nicht so schlecht, ja, und die müssen nicht über eine
ganze Takthälfte dann in Ordnung bleiben, was schwer zu gewährleisten
ist.
Die Auswertezeitpunkte sind exakter definiert, und wir bekommen im
Prinzip solche Schaltsymbole, also für 0 nach 1 haben wir dies hier,
für 1 nach 0 haben wir dies hier, ja, und wir haben so einen
flankengesteuerten Takteingang jetzt hier als Schaltsymbol.
Ist der Unterschied klar, dass wir im Prinzip, also wir brauchen einen
Takt, um synchron zu werden, ist nicht klar?
Der Takt ist ein separater Eingang.
Ja, der Takt wird sozusagen separat zugeführt, und dann können wir im
Prinzip, wir haben einen Takteingang, und wir würden dann bei einem
Takt, der von 0 nach 1 geht, dann würden wir den Übergang machen.
Das ist ja im Prinzip jetzt hier nur der Takteingang, der gezeigt ist.
Wir hätten jetzt im Prinzip so einen Flipflop, das wäre der
Takteingang, und dann würden praktisch die Eingänge nur übernommen,
wenn der Takt von 0 nach 1 von 1 nach 0 geht.
Genau, ja, danke.
Ja, das wäre das.
Und damit wären wir zwar nicht perfekt, aber wir wären exakter
definiert, als wenn wir jetzt über diese Pegel an sich gehen.
Da müsste man schon sehr schnell takten an sich.
Okay, dann vergleichen wir doch mal die synchronen Schaltwerke und die
asynchronen Schaltwerke.
Ja, wir würden im Prinzip mittlere und größere, klar, das ist jetzt,
die Aussagekraft ist begrenzt, was heißt mittel, was heißt groß.
Ja, wir würden mittlere und große Schaltwerke immer eigentlich als
synchrone Schaltwerke entwerfen.
Warum?
Im Prinzip die Analysierbarkeit ist wesentlich besser.
Wir haben ja gerade gesagt, bei diesen asynchronen Verhältnissen
können wir überhaupt nicht aussagen.
Allein schon bei einem kleinen Baustein, einem inneren Baustein, tun
wir uns schwer.
Und der ist schon schwer zu entwerfen und zu analysieren.
Das heißt, wir können im Grunde genommen nur aus kleinen asynchronen
Bausteinen große synchrone Bausteine entwerfen.
Sehr viel einfacher zu analysieren, zu entwerfen.
Ja, und weil wir, wenn wir im Prinzip im Inneren dann solche Flipflops
verwenden, haben die synchronen Schaltwerke eben diese Unabhängigkeit
von den Verzögerungszeiten.
Sonst würden wir wahrscheinlich wahnsinnig, wenn wir immer von den
aktuellen Verzögerungszeiten abhängig wären.
Das wäre sehr, sehr schwer zu entwerfen.
Was müssen wir jetzt eigentlich noch machen?
Wenn wir ein synchrones Schaltwerk entwerfen, müssen wir natürlich
schon die Verzögerungszeiten beachten.
Die Verzögerungszeiten müssen nur kleiner sein.
Wir müssen also sagen, die Dauer des Taktes, die muss größer sein als
die maximale Verzögerungszeit im Schaltnetz.
Warum?
Dann hat sich alles stabilisiert.
Wenn ich also sage, es schwingt irgendwas ein, dann muss mein Takt
eben größer sein als das.
Ja, und dann ist man eben konservativ und taktet eben genau dann ein.
Beim Mili-Schaltwerk beispielsweise war das ja gerade schon sehr schön
zu sehen.
Und dann brauche ich für die Analyse und Synthese nur diese beiden
Schaltnetze Delta und Omega betrachten.
Sonst müsste ich ja noch alle Todzeiten, also Verzögerungszeiten,
betrachten.
Und hier brauche ich nur für den Entwurf die beiden Schaltnetze
betrachten.
Und dann wird im Prinzip der Entwurf eines Schaltwerks zu dem Entwurf
von zwei Schaltnetzen.
Das ist ja schon mal schön.
Und man kann sich jetzt überlegen, das werden wir noch sehen bei der
Analyse, das ist vielleicht etwas vorgegriffen.
Man kann die Schaltung jetzt an den Stellen auftrennen, an denen die
Speicherelemente sitzen.
Das werden wir noch später sehen, dient der Analyse von Schaltwerken.
Und bei asynchronen Schaltwerken, der Entwurf asynchroner Schaltwerke,
warum ist er von Bedeutung?
Das habe ich ja gerade schon mehrfach betont.
Synchrone Schaltwerke benötigen immer asynchrone Schaltwerke im
Inneren, weil es im Prinzip erstmal nur asynchrone Schaltwerke gibt.
Und aus denen müssen wir dann sozusagen die synchronen Schaltwerke
zusammenbauen.
Und das Problem ist halt, dass wir jetzt immer wieder gezwungen
werden, asynchrone Entwurfstechniken anzurenden.
Die Frage ist, warum?
Warum wird das immer schlimmer?
Und das liegt eben an den größeren Taktraten, die wir haben.
Wenn wir die Signallaufzeit mal betrachten, das sind so 30 cm pro
Nanosekunde auf einer Platine.
Da kann man sich jetzt überlegen, dass selbst wenn ich jetzt mal
synchron entwerfe, dass durch diese entsprechenden Geschwindigkeiten
das Ganze wieder asynchron wird.
Das heißt, eigentlich muss man als Designer, müssen Sie jetzt nicht,
also die Vorlesung geht nicht so weit, wir machen eine klare Trennung,
aber müssten Sie eigentlich alles asynchron entwerfen, auch diese mehr
oder weniger pseudosynchronen Bausteine, da der Takt natürlich die
Bausteine gar nicht zum gleichen Zeitpunkt erreicht.
Also das ist dann ein gewisses Problem.
Also je schneller man werden will, aber sagen wir mal so, wenn Sie
sich jetzt, wie gesagt mein Beispiel, Sie gehen in irgendeinen Shop
und kaufen Sie jetzt mal 10 so Bauteile, bauen die zusammen, takten
das mit 100 kHz, okay, dann haben wir das Problem nicht.
Also hier geht es um 10 Gigahertz oder sowas, ja, da haben wir das
Problem vielleicht schon.
Okay, jetzt wollen wir zum Entwurf asynchroner Schaltwerke kommen.
Was müssen wir machen?
Wir müssen diesen Automaten-Graphen aufstellen.
Da haben wir ja gerade schon drüber nachgedacht.
Dann die Automaten-Tafel, das wird was Neues sein.
Dann müssen wir uns überlegen, wie kodiere ich überhaupt den Zustand?
Der Zustand wird ja für mich erstmal nur, ja, sag ich mal, vielleicht
sowas sein wie von 1 bis 10, oder ich könnte sagen, der Zustand ist
Z1, Z2, Z3, irgendwas Symbolisches.
Und ich muss jetzt mal schauen, wie kodiere ich überhaupt diesen
Zustand, mit dem ich alles berücksichtige und alles darstelle, was das
Schaltwerk bisher schon gesehen hat.
Und jetzt kommen wir auf diese Deltas und Omegas zurück.
Da haben wir ja gerade schon gesehen, das sind sozusagen die Ausgabe,
das wäre das Omega, das Ausgabeschaltnetz und das Übergangsschaltnetz,
das wäre das Delta, die müssen wir jetzt erzeugen.
Also hier kommen die wieder auf uns zu und da können wir jetzt ganz
frei überlegen, nehmen wir jetzt den aktuellen Zustand, den letzten
Zustand oder irgendwas.
Das ist ja eigentlich egal, Hauptsache wir designen das richtige
Schaltnetz, damit wir die richtige Funktionalität bekommen.
Und dann die Analyse natürlich.
Und wir werden es jetzt in der Vorlesung so machen, dass wir erst was
synthetisieren, was Einfaches und dieses einfache Ding dann auch
wieder analysieren.
Da können Sie mir mal Feedback geben, ob das gut ist oder ob man dann
was Besseres macht, was Besseres oder was Komplexeres analysiert.
Aber ich denke, es ist gar nicht so schlecht, dass man erstmal sagt,
man hat eine Problemstellung, analysiert dafür ein Schaltwerk und
jetzt bekomme ich das Schaltwerk und schaue mal, was tut das denn und
wie tut es das dann.
Aber darüber kann man diskutieren, was interessanter ist, aber ich
denke, besser verständlich ist diese Vorgehensweise, die ich gerade
gestellt habe.
Okay, jetzt wollen wir ein Beispiel betrachten.
Also Vorgehensweise, Problematik, einfach an einem kleinen Beispiel.
Und zwar ein Speicher.
Und das ist jetzt schon ein Flipflop.
Und das ist ein RS-Flipflop.
Das heißt, Sie sehen jetzt also erstmals eins von diesen.
Und das habe ich ja gerade schon mehrfach betont.
Ein asynchrones Bauteil, was wir dann verwenden werden, um synchrone
Schaltwerke zu entwerfen.
Das ist aber ein asynchrones Bauteil.
So, was tut das?
Das ist ziemlich simpel.
Das sagt, wenn ich R auf 1 setze, wird der Ausgang auf 0 gesetzt.
Das sieht man auch hier in der Tabelle, ich gehe gleich darauf ein.
Wenn ich S, S heißt Set, R heißt Reset.
Wenn ich S auf Set setze, wird Q auf 1 gesetzt, R auf 1, wird Q auf 0
gesetzt.
Das sehen wir auch hier.
R und S gleich 0, wird gespeichert.
S auf 1, R ist dann im Prinzip egal.
Das werden wir gleich noch diskutieren.
Dann wird gesetzt, R gleich 1 und S gleich 0, dann wird rückgesetzt.
So, die Frage ist halt, was ist mit 1, 1?
Das schließen wir jetzt hier für das Design aus, um auch mal zu
zeigen, dass wir im Prinzip so ein System gar nicht voll
durchdefinieren müssen.
Wir verbieten einfach, dass R und S gleichzeitig 1 sein können.
Also gehen wir nochmal durch.
Eingang R setzt den Speicher zurück, also der Reset-Eingang.
Das heißt, wenn der Eingang R zu 1 wird, wird Q zu 0.
S setzt Set.
S gleich 1, Ausgang Q zu 1.
Sind beide 0, wird einfach gespeichert.
Und beide 1 wollen wir nicht betrachten.
Jetzt wollen wir im Prinzip erstmal den Automaten-Graphen aufstellen.
Was ist der Graph für den Automaten?
Wir legen Ein- und Ausgangsvariablen fest, Zustände fest.
Wie viele Zustände gibt es eigentlich?
Was glauben Sie?
Ah, steht schon da, dumm.
Aber die Folie schlecht designt.
Also, kann ich Ihnen gleich sagen, wir benötigen zwei Zustände.
Aber warum?
Lassen wir uns nicht mal überlegen.
Wir wollen im Prinzip doch für das Q zwei Zustände speichern.
Warum zwei Zustände?
Geht nicht anders.
Und wir haben hier eben jetzt Eingangsvariablen R und S,
Ausgangsvariable Q und die benötigten Zustände sind zwei.
Und wir kommen gleich noch zu der Definition von Zustandsvariablen und
Zustandswerten.
Hier sind das jetzt im Prinzip Zustandswerte.
Und die speichern eben diese beiden verschiedenen Werte für Q.
Wir müssen ja im Prinzip wissen, wo wir waren, damit wir im Prinzip
umsetzen können.
Also, das war Festlegung der Ein- und Ausgangsvariablen, Zustände und
jetzt Automatengraf.
Wie sieht der Automatengraf aus?
Also das ist der Speicher.
Und jetzt wollen wir im Prinzip über diese Notation, Wir wollen also
sagen, ZI gibt dann Q aus und über RS schalten wir um.
RS sind jetzt unsere Eingangsvariablen.
Also damit wollen wir im Prinzip in dem Grafen umherlaufen, in dem
Schaltwerk auch umherlaufen.
Das heißt, wir geben aus.
Für Z0 geben wir eine 0 aus, für Z1 geben wir eine 1 aus.
Jetzt bleiben wir drin für 0, 0.
Das heißt also, schauen Sie selber mal, ist das klar zu sehen?
Wenn ich 0 und 0 angebe, bleibe ich ja offenbar in dem Zustand 0 und
gebe 0 aus.
Bei 1, 0 ist ja R und S, also das soll immer in der Reihenfolge R und
S sein.
Wenn ich jetzt resette, bleibe ich auch in der 0.
Ist auch klar, oder?
Dann das gleiche hier, wenn ich 1 ausgebe, bei 0, 0 ändert sich
nichts.
Haben wir gesagt, bei 0, 0 wollen wir ja speichern.
Und bei 0, 1, das wäre dann ja für S gleich 1, dann würden wir Z
machen.
Das heißt, wir würden auch in die 1 kommen.
Und jetzt müssen wir sozusagen die Transition angucken.
Wann haben wir denn eine Transition?
Wir kommen doch von der 0 auf die 1, wenn wir 0, 1 anlegen.
Das heißt also, S wird 1, dann kommen wir von 0 nach 1.
Ich denke, klar, ja.
Andernfalls mit der 1, 0 kommen wir von 1 nach 0.
Wir haben hier ein Moor-Schaltwerk entworfen, was übrigens mal eine
ganz gute Hausaufgabe wäre, die zeige ich Ihnen heute nämlich nicht
mehr.
Machen Sie doch mal ein Mili-Schaltwerk draus und überlegen Sie sich
mal, wie Sie es damit umsetzen würden.
Dann setzen Sie sich zwei, drei Leute zusammen und machen das einfach
mal.
Das ist, denke ich, ziemlich simpel, so wie das jetzt simpel ist.
Aber es erscheint ja immer nur simpel, wenn einer vorne rumhampelt und
es erklärt, wenn Sie sich selber mal hinsetzen, ist es vielleicht gar
nicht so simpel.
Deswegen also mein Aufruf, machen Sie es mal.
Setzen Sie sich mal hin und entwerfen das mal mit dem Mili-Schaltwerk
und Sie werden sehen, in fünf Minuten kriegen Sie es dann auch nicht
hin.
Aber ich glaube, hier ist ziemlich klar, dass wir also diesen RS-Flip
-Flop hätten, diesen Automatengrafen und die Ausgabe Q ist natürlich
jetzt nur, weil es ein Moor-Schaltwerk ist, nur vom inneren Zustand Z
abhängig.
Und die Ausgabe, die haben wir immer in den Knoten mit eingetragen,
deswegen, weil das eben nur hier ein Moor-Schaltwerk ist.
Also nochmal zur Funktionsweise.
Gehen wir nochmal durch.
Im Zustand Z0 hat Q den Wert 0.
Dann verbleibt das Schaltwerk da, solange S den Wert 0 hat.
Weil wenn S den Wert 1 hätte, wie hier gesagt, dann wechseln wir ja,
weil S Z ist, dann wechseln wir in den Zustand Z1, geben dann, weil es
ein Moor-Schaltwerk ist, Q gleich 1 aus.
Dann verbleibt es erstmal da, solange R den Wert 0 hat.
Wird jetzt R zu 1, dann wechselt das Schaltwerk wieder in den Zustand
0.
Weil wir ein Reset gemacht haben.
Und so geht das halt immer weiter.
Das können wir also beliebig so machen.
Und gehen also zwischen den beiden gespeicherten Zuständen hin und
her.
Und dann R und S, das wird verboten sozusagen.
Und das ist im Prinzip dann am Ende frei verfügbar für
Optimierungszwecke.
Das werden wir nämlich noch machen.
Wir werden dafür die Schaltwerke entsprechend definieren.
Deswegen ist bewusst so gemacht, dass wir die jetzt erstmal
freilassen, damit Sie da sehen, dass wir da wieder diese Wildcards
bekommen, über die wir dann optimieren können.
Genau.
Ja, jetzt die Automatentafel.
Wir haben also einen Automaten-Graf und wollen daraus die
entsprechende Automatentafel definieren.
Und die heißt jetzt, ich mache das gleich mal auf, die heißt jetzt
Flussmatrix.
Bei asynchronen Schaltwerken.
Das werden wir gleich sehen, warum.
Weil wir fließen im Prinzip durch diese Automatentafeln hindurch,
anders als bei einem synchronen Schaltwerk, wo wir getaktet von einem
zum nächsten springen, laufen wir hier im Prinzip beliebig durch.
Und das werden wir auch gleich genau sehen, warum das so ist.
Also im Prinzip ist es ja wirklich so, dadurch, dass wir keinen Takt
haben, wir gehen zum Beispiel bei einer Änderung der Eingänge laufen
wir hier durch, ändert sich wieder, laufen wir hier durch und so
weiter.
Das heißt, wir laufen einfach beliebig schnell hier durch, was ich ja
gerade schon gesagt habe, dass wir also auch beliebig schnell durch so
eine Eingangsfolge hindurchlaufen können.
Und jetzt können wir uns ein paar Dinge überlegen, was eigentlich so
eine Automatentafel uns sagen kann.
Ich erkläre sie mal kurz.
Also der Graph zeigt uns ja anschaulich, wenn wir in einem bestimmten
Zustand sind, geben wir etwas Bestimmtes aus.
Und wenn wir dann bestimmte Eingangsbelegungen haben, das ist das, was
an den Kanten steht, ja, dann gehen wir sozusagen von diesem Zustand
über, zum Beispiel von Z0, gehen wir über nach Z1, wenn wir eine
bestimmte Belegung haben an den Eingängen.
Die Flussmatrix zeigt jetzt, wenn ich jetzt in dem Zustand ZI bin, und
bitte darauf achten, das ist nämlich gar nicht so einfach zu verstehen
hier, wenn ich in einem bestimmten Zustand ZI bin, zum Beispiel Z0
oder Z1, dann komme ich in einen Folgezustand ZI+, das wäre jetzt
einer von denen hier, wenn ich etwas anlege, zum Beispiel wenn ich
RS00 anlege und ich bin in Z0, komme ich nach Z0.
Stimmt.
Wenn ich in Z0 bin und lege an 1,0, dann komme ich wieder in Z0.
Stimmt auch.
Wenn ich aber in Z0 bin, lege RS01 an, dann komme ich in Z1, glaube
ich, hier rüber.
Das heißt also, stellt das Gleiche dar, nur in einer etwas, sage ich
mal, tabellenartigeren Form und danach muss ich wieder gucken, für Z0
möchte ich Q gleich 0 ausgeben, für Z1 Q gleich 1 ausgeben.
Wie gesagt, das wäre die Flussmatrix.
So, jetzt würde ich sagen, ich mache heute noch eine Sache, dann
machen wir Schluss.
Und zwar Stabilität.
Jetzt können Sie sich vorstellen, wir müssen Stabilität betrachten,
weil im Prinzip bei so einem asynchronen Netzwerk, bei einem
asynchronen Schaltwerk könnte es jetzt ja passieren, dass wir beliebig
hin und her auszählen in dem Schaltwerk.
Das haben wir ja ganz am Anfang schon diskutiert.
Wir müssen also gucken, wie bekommen wir denn so etwas stabil.
Das heißt also, in asynchronen Schaltwerken sind nur solche Zustände
stabil, in denen der aktuelle Zustand unter einer ganz bestimmten
Eingangsbelegung gleich dem Folgezustand ist.
Und dafür kriegen wir dann folgendes Stabilitätskriterium.
Also aktueller Zustand unter einer bestimmten Eingangsbelegung E, also
Z -stabil.
Also das wäre die Definition für Z-stabil, eine implizite Definition.
Z-stabil und E, wenn ich dann dieses Delta anwende, dann soll wieder Z
-stabil rauskommen.
Und die merken Sie sich bitte, diese Definition, die ist nämlich gar
nicht so einfach zu verstehen.
Wir wollen also im Prinzip sagen, wenn wir vom Zustand 3 unter Delta
wieder in 3 landen, und das immer wieder, dann ist der stabil.
Aber obwohl wir wissen, dass der vielleicht stabil ist, reicht es uns
nicht, wenn wir von 2 nach 3 gehen und dann in 3 hineinkommen, das ist
im Skript nicht ganz richtig.
Also ich glaube, das Skript ist immer noch falsch.
Aber das macht auch nichts, Sie hören ja die Vorlesung.
Das heißt, das wäre das Kriterium.
Sonst wird der Zustand als instabil bezeichnet.
Selbst wenn wir wissen, dass unter der bestimmten Eingangsbelegung ein
Zustand Z3 meinetwegen stabil wäre, und ich komme von Z2, reicht es
mir nicht, weil es müssen hier und dort jeweils die gleichen Zustände
stehen.
Das ist also eine implizite Stabilitätsdefinition.
Ist das klar?
Wie gesagt, im Skript ist es nicht richtig, da ist es etwas
verklausuliert.
Am Ende kommt das gleiche raus.
Und die stabilen Zustände, die werden wir jetzt in der Flussmatrix mit
einem Kreis kennzeichnen.
Und was ich Ihnen heute noch zeigen möchte, es gibt noch Fragen
hierzu, ist sozusagen die Anwendung davon auf das entsprechende
Beispiel, das wir hatten.
Ist das klar, dass wenn ich einen Zustand habe und wechsle jetzt durch
das Delta, dann kann der nicht stabil sein unter der entsprechenden
Eingangsbelegung?
Achso, und es bezieht sich natürlich auf die konkrete
Eingangsbelegung, das ist auch wichtig, auf das entsprechende E.
So, jetzt schauen Sie sich das mal an und sagen mir mal, welcher
Zustand ist denn stabil?
Also Zustand gegeben Eingangsbelegung, nicht absoluter Zustand, das
ist vielleicht verführerisch, da liegt man schnell im Glauben, wir
sprechen hier von absoluten Zuständen, sondern wir wollen ja Zustand
unter der Eingangsbelegung, so war ja das Kriterium.
Welche von den sechsten sind denn stabil?
Wer sieht das?
Fangen wir doch einfach mal an, wir gehen von Z0 nach Z0.
Also Z0, egal was der ausgibt, unter der Eingangsbelegung 00 kommen
wir hier wieder rein.
Ist der stabil?
Einige nicken, aber nicht alle, aber zumindest ein paar.
Aber es ist ja keine demokratische Abstimmung hier leider, sondern
nein, es ist tatsächlich so.
Warum?
Weil das Delta von Z0 unter dieser Eingangsbelegung wieder Z0 ergibt,
ist also stabil.
Das heißt, wir können also den hier mal mit einem Kreis versehen.
Okay, jetzt schaue ich mir mal an, Z0 und Eingangsbelegung 01.
Z1, ist der stabil?
Was sagen Sie?
Oh, jetzt haben wir das Problem, einige nicken, einige schütteln den
Kopf.
Tja, jetzt muss sich mal irgendjemand outen und das mal erklären.
Genau.
Also, ganz einfacher Widerspruch, ganz richtig, vielen Dank.
Sie haben hier Z0, da Z1, kann gar nicht sein.
Weil so war es ja nicht definiert.
Das heißt also, der ist nicht stabil.
Okay, dann schauen wir mal, Z0 unter 1,0 nach Z0.
Sieht doch gut aus, oder?
Z1 unter 0,0 ist glaube ich trivial, ja.
Okay, und dann Z1 unter 0,1.
Genau, jetzt muss ich selber hingucken, Z1 unter 0,1.
Naja, der ist wohl auch stabil.
Und dann ist halt die Frage, Z1 unter 1,0, das wäre ja das Duale zu
dem, was wir gerade gesehen haben.
Z1 unter 1,0 geht nach Z0.
Und da schon gleich per Definition, man kann ja über die Definition
streiten, aber unter der Stabilitätsdefinition ist der nicht stabil.
Das heißt also, der ist es nicht.
Okay, ja, ich denke, das waren die Dinge, die ich Ihnen eigentlich
heute zeigen wollte.
Wenn Sie noch Fragen haben, tun Sie es bitte jetzt.
Ansonsten vielen Dank für Ihr Interesse und dann sehen wir uns glaube
ich am nächsten Montag, das ist die nächste Vorlesung, ja.
Vielen Dank, tschüss.