TTA-Prozessor. Teil 1

Vorwort


Die Idee, meinen eigenen einfachen Prozessor zu erstellen, wenn ich es so nennen darf, hat mich lange beschäftigt. Die Wahl der Architektur ist eine zweideutige Angelegenheit, aber da ich teilweise minimalistisch war, wollte ich etwas Einfaches implementieren, gleichzeitig leistungsstark und erweiterbar. TTA war perfekt dafür.
Teil 1.
Teil 2.
Kurz gesagt, die Idee ist, dass die Steuereinheit nur einen Datenbewegungsbefehl hat und die Berechnungen ein Nebenprodukt dieser Bewegungen sind.

Ich werde es in einem einfachen Programm zum Kompilieren und Simulieren logischer und elektrischer Schaltkreise zum Leben erwecken - Logisim hat es aufgrund seiner Einfachheit und Zugänglichkeit ausgewählt. Im Falle einer erfolgreichen Implementierung ist geplant, es in Verilog umzuschreiben .

Wenn Sie das Projekt lesen, ist es besser, es sofort zu berühren. Es befindet sich am Ende des Artikels.

Steuerblock


Die Steuereinheit ist die Hauptkomponente. Der Einfachheit halber wurde beschlossen, 16 Eingänge und 16 Ausgänge auszuwählen. Daher ist der in der Steuereinheit empfangene Befehl 8-Bit, wobei die erste Hälfte auf einen der Eingänge und die andere auf einen der Ausgänge zeigt. Damit der empfangende Block versteht, dass die Daten zu ihm gekommen sind, wird jedem Eingang des Blocks 1 Bit hinzugefügt. Es ist üblich, diese Blöcke als Funktionsblöcke aufzurufen.

Damit:



Erinnerung


Damit die Steuereinheit das Programm ausführen kann, muss es irgendwo gespeichert werden. Der Speicher ist eine Funktionseinheit, deren Ausgang mit dem Steuereinheitsbus verbunden ist.

Damit:


Der niedrigste Eingang ist ein Taktsignal, der am weitesten links stehende ist Eingangsdaten, der am weitesten rechts stehende Ausgangsdaten, sie sind ebenfalls BU-Befehle und der letzte ist derjenige, der als Flag dient und das Eintreffen von Daten meldet. Beim Empfang von Daten wird diese in den Zähler geschrieben, der den aktuellen Befehl anzeigt. Mit jedem Takt steigt der Zähler an und die Steuereinheit überträgt Daten von einer FU zu einer anderen.

Andere einfache fu


Erstellen Sie einfache FUs, die alltägliche Additions- und Subtraktionsaktionen ausführen.
Die FU-Vorlage sieht folgendermaßen aus: Am Eingang befinden sich 8-Bit-Register entsprechend der Anzahl der Eingänge. Das Schreiben in diese Register erfolgt beim Empfang der Daten. Die Ausgabe kann auch die Register enthalten, in denen die Antwort gespeichert wird, dies ist jedoch für den Addierer nicht erforderlich.

Der Addierer und Subtrahierer sieht also folgendermaßen aus:



Fertiges Gerät


Lassen Sie uns den Speicher und die Steuereinheit verbinden, und danach werden wir versuchen, eine neue Steuereinheit zu erstellen und ein Programm zu schreiben.
Die Taste fungiert als Taktsignal.

Also die Verbindung:


Verbinden Sie nun den Addierer und Subtrahierer sowie zwei Eingabekonstanten:


Alles ist bereit, ein Programm zu schreiben, es führt eine banale Abfolge von Aktionen aus: Addiere eins zum vorherigen Wert des Addierers und gehe dann mittels eines relativen Übergangs zum Anfang (dafür wurde ein Subtrahierer erstellt: 3).

Schreiben wir ein Programm.

Zu Beginn werden alle Register zurückgesetzt, sodass es keinen Sinn macht, dies zu tun. Der erste Befehl besteht darin, eine Einheit an einen der Eingänge des Addierers (In3 -> O2) zu senden, den Ausgang des Addierers an seinen zweiten Eingang (In1 -> O1) zu senden und die aktuelle Speicheradresse an den Subtrahiereingang zu senden (In0 -> O3), das die Adressänderung an einen anderen Eingang des Subtrahierers sendet, wird subtrahiert (In4 -> O4), nachdem der Subtrahierer zum Eingang des Adresszeigers gegangen ist, wodurch der Übergang abgeschlossen ist (In2 -> O0).

Das Programm sieht folgendermaßen aus:

1. In3 -> O2
2. In1 -> O1
3. In0 -> O3
4. In4 -> O4
5. In2 -> O0

Im Speicher:


Das ist alles. Dieses Programm funktioniert ordnungsgemäß. Ich plane, mehr FUs herzustellen und die Verbindung mit der Steuereinheit bequemer zu gestalten, da FUs praktisch ControlFlow-Geräte sind. Sie können auch mehrere Steuergeräte miteinander verbinden, dh ein Netzwerk solcher Geräte erstellen.

Vielen Dank für Ihre Aufmerksamkeit!

GitHub

All Articles