Ein Automat besteht aus einem Steuerwerk und einem Operationswerk. Was beim Computer ein Rechenwerk ist.
Ein Automat besteht aus verschiedenen Zuständen. Generell. Diese können wir uns so vorstellen
0 1 2 3 4 5 6 7 8
Diese Zustände sind zeitlich gesehen.
t0, t1, t2
t0: 0 t1: 1 t2: 2 t3: 3 ...
der Zustand ändert sich mit dem Takt
Zustände werden binär codiert
0: 000 1: 001 2: 010 3: 011 ...
Damit können sie in Flip Flops gespeichert werden
Ein Flip Flop kann dynamisch die information 0 oder 1 speichern.
Damit liegen im Steuerwerk, drei Flip Flops nebeneinander
000 001 010
Mit jedem Takt kommt der nächste Zustand. Über ein Schaltnetz, werden die Bits des alten Zustands abgefragt und als neue Werte den Flip Flops zu geführt. Flip Flops sind so, dass sie die Werte nur beim neuen Takt übernehmen.
Jetzt ist eine immer gleiche Zustandsreihenfolge langweilig
Über ein Mikroprogrammsteuerwerk, das letzte grosse gezeichnete Ding, legen wir fest, welcher Zustand als nächstes kommt
Was wie eine triviale Zeichnung aussieht, mit Kreuzen, ist in der Realität schnell realisiert. Nämlich mit Dioden. Jedes Kreuz eine Diode. Das verhindert, dass das Signal zurückläuft und die anderen Drähte Aktiviert, bis alle aktiviert wären.
Das schräge Ding ist ein Dekoder.
Das muss man verstanden haben, ausser Multiplexern und Demultiplexern und ALU's und Addierer gibt es streng genommen nur Dekodierer und Codierer
Allerdings sind Dekodierer nicht das Gegenteil von Codierern. Sie sind nicht das Dekodieren des Codierers.
Dekodierer sind eine spezielle Form von Codierer
Was ist ein Codierer. Ein Codierer ist ein Schaltnetz, das ein Zeichen eines Zeichenvorrats in ein Zeichen eines anderen Zeichenvorrats umwandelt
Heisst das: Binärcode nach Chinesisch
Nein, binär nach binär
Mathematisch ist folgendes eine Abbildung
Und ein Codierer macht zum Beispiel
00010 -> 1011 00101 -> 0001 ...
Egal, wie. Ein Dekodierer ist speziell, weil er für jedes angelegte Zeichen, meist binäre Zahlendarstellung genau ein Bit am Ausgang aktviert, alle anderen sind 0:
0001 -> Ausgang 1 0010 -> Ausgang 2 ...
Deswegen hat ein Dekodierer wenig Eingänge und viele Ausgänge
Nun sind die Ausgänge
0, 1, 2, 3, 4, 5, 6, 7, ...
was jeweils eine Leitung ist, aber ein Zustand
0, 1, 2, 3, 4, 5, 6, 7, ...
Mit den entsprechenden Rückführungen über Busse, wird daraus über die Dioden wieder eine Binärzahl, ergibt den nächsten Zustand und der wird in Flip Flops gespeichert, Register
Gut. Da es allerdings seltsam ist, dass einfach auf Zustand 0, 1 folgt auf 1 2 und so weiter. Machen wir eine Entscheidung. Das ist keine Abfrage. Eine Bedingung.
Über ein Bit entscheiden wir, ob wir den oder den anderen Zustand haben
(0,1), (0, 4) (1,2), (1,2) (2,2), (2, 8) ...
Das geht über ein Multiplexer. der Multiplexer entscheidet ob das Eingabe Bit vom Operationswerk 0 oder 1 ist. Das heisst, ob der Zustand folgt oder der
Doch, was ist das Eingabebit
Es kann viele Geben. Sie kommen aus dem Operationswerk. Das ist ein Schaltnetz, aber mit Registern.
Die Frage? Was passiert da? Na ja ein Operationswerk ist ein Schaltnetz mit Registern. Diese sind a, b, c, d. Oder so
Gut: Wenn ich ein Register a habe und ein Register b - dann kann sie addieren. Gut, dann mache ich zwischen den Registern einen Addierer. Gut, ich habe viele Zustände im Steuerwerk. Diese entscheiden, pro Zustand, was im Operationswerk passiert
Gut: Ich kann in Zustand 1 und in Zustand 3 Addieren. Ein Mal a und b und ein Mal a und c. Pro Zustand, in dem addiert wird, mache ich im Operationswerk einen addierer. Gut. Ich kann noch anderes. Vergleichen. Gut, wenn ich vergleichen kann, wird es lustig. Jetzt habe ich ein Bit als Ausgang
Und um dieses Bit geht es. Dieses Bit von Vergleichern geht ins Steuerwerk und entscheidet, welcher Zustand als nächstes
Aber, was kann man noch alles im Operationswerk? Addieren, Subtrahieren, Vergleichen, mit UND verknüpfen, Shiften, ...
eben alles was man kann. Durch die Bits der Vergleicher wird im Steuerwerk entschieden, pro Zustand, entweder der festgelegte Zustand oder der.
Aber: Was ist mit den Registern. Die Registern dienen nicht nur als Ausgangsvariable, sondern als Eingangsvariable. Es gibt allerdings viele Operationen. Alle gehen in die Registern und teilweise gehen viele Operationen in ein einziges Register
Die Operationen sind die, wie nachher in unserem Computer, eben Addieren, Shiften uns so weiter. Steht so etwas in unserem Computerprogramm, ist es in Wirklichkeit eine Schaltung in der Hardware, die da addiert. Unserer Addierer wird bemüht.
Deswegen ist es auch kein Unterschied, ob es Hardware oder Software ist
&& ist sowohl ein Und geschrieben im Programm, als auch eine physische Schaltung, doch die wird, wie in VHDL in Worten beschrieben.
Gut, aber ich habe im Operationswerk pro Operation ein eigenes UND, wenn ich das so implementiere, bleibt mir freigestellt
Aber, was ist ein wenn ein Register viele Eingaben hat. an jedem Register ist vorne ein Multiplexer. Und der Entscheidet was rein kommt und was nicht und ob überhaupt. ein Multiplexer hat 5 Eingaben, wenn in 5 Zuständen unterschiedliche ins Register kommen. Dieser Multiplexer hat Steuerleitungen. Sie kommen aus dem Steuerwerk und entscheiden, welche Eingabe und ob rein kommt. Sie werden Zustand für Zustand über das Steuerwerk, das ja ein Automat ist gesteuert
Gut, denkt man sich. Man hat vier Register und 10 Addierer. Dann kam man auf die Idee des Computers. Erst hier.
Wenn ich 10 Addierer habe, würde mir einer genügen. Denn Additionen unterscheiden sich nicht. Aber wie kann ich entscheiden, was addiert wird? Dasselbe wie bei den Registern. Über Multiplexer.
Beim Computer werden die Register zu einem Block zusammen gefasst, dem Registersatz. Statt Multiplexern, anstatt darüber zu reden, gibt es jetzt etwas wie eine Addresse. Oft heissen die Register aber immer noch
ax, bx, cx, dx
Gut. Es reicht aber eine ALU, also ein Addierwerk. Die Operation daran wird ausgewählt und vom Registersatz welche rein gehen.
Nur ist das eine wiederholende Sache.
Angenommen in einer Kasse -
Addieren wir
5 Euro 10 Euro 12,50 Euro 2,20 Euro
Gut, dann ist in
AX: 5 Euro BX: 10 Euro
Dann addieren wir AX + BX und schieben es nach AX
AX = AX + BX AX = 5 Euro + 10 Euro Jetzt tun wir 12,50 Euro in BX
und so weiter
Deswegen: Im Computer wiederholen sich die Operationen immer wieder. Die Register werden gelesen und geschrieben
Allerdings: Und jetzt kommt ihr Programm!
sie träumen vom Programm. Ich sagte Programm des Mikroprogrammsteuerwerks. Sie sagten Programm und meinten Assembler Programm. Sie sagten Arbeitsspeicher
Ja und da hat das eine mit dem anderen nichts zu tun. Sie sagten, IF Abfrage, ich Bedingung. Sehen sie, mir sind beide Welten bekannt, aber das ist was anderes
Was sie unter IF verstehen, ist etwas anderes, als die Bedingung. sie kennen die Flags im Intel Prozessor
CF, SF, OF, PF, AF, ...
Gut, das sind die Bedingungen in der Hardware.
Aber ihr IF ist etwas ganz anderes
Würde ich meinen Automaten bauen, dann könnte ich 100e Zustände implementieren. Das Ding würde gross und es würde keine Abweichung erlauben.
Es gibt im Computer zwei Zustände, ohne Pipelining
Der Rest ist was anderes. Die Befehle von ihnen haben mit Zuständen nichts zu tun
Doch der Unterschied besteht darin, dass sie hintereinander im RAM liegen. Anstatt jedoch zu definieren, was der Folgezustand ist, entscheide ich über die Befehle, was ich will
Das hat mit dem anderen nichts zu tun. Das wäre wie ein Automat bei dem ich mit extrem vielen Steuerworten entscheiden könnte, extrem viele Folgezustände zu haben
Die Befehle liegen hintereinander. Das hat mit Mikroprogramm nichts zu tun
Sie liegen im RAM. Das ist ein Assemblerprogramm. Bzw. Binär
Und: Die IF's bzw. jne jge jnge bzw. beq, bnez, bltz, was die Assembler Sprungbefehle bedingt sind, die bedeuten nur im RAM zu springen.</t>