Transport ausgelöste Architektur
Im Rechnerarchitektur, a Transport ausgelöste Architektur (Tta) ist eine Art von Prozessor Design, bei dem Programme den internen Transport direkt steuern Busse eines Prozessors. Die Berechnung erfolgt als Nebeneffekt von Datentransports: Daten in a schreiben Auslösen von Port von a funktionale Einheit löst die Funktionseinheit aus, um eine Berechnung zu starten. Dies ähnelt dem, was in a passiert systolisches Array. Aufgrund seiner modularen Struktur ist TTA eine ideale Prozessorvorlage für Anwendungsspezifische Befehlssatzprozessoren (EIN SCHLUCK) mit maßgeschneidertem DataPath, jedoch ohne die Inflexibilität und die Designkosten für feste Funktionen Hardware -Beschleuniger.
In der Regel verfügt ein von Transport ausgelöster Prozessor über mehrere Transportbusse und mehrere funktionale Einheiten, die mit den Bussen verbunden sind, was Möglichkeiten für die Möglichkeit bietet Unterrichtsniveau Parallelität. Die Parallelität wird vom Programmierer statisch definiert. In dieser Hinsicht (und offensichtlich aufgrund der großen Unterrichtswortbreite) ähnelt die TTA -Architektur dem der Sehr langes Unterrichtswort (VLIW) Architektur. Ein TTA -Anweisungswort besteht aus mehreren Slots, einem Steckplatz pro Bus, und jeder Steckplatz bestimmt den Datentransport, der im entsprechenden Bus stattfindet. Die feinkörnige Kontrolle ermöglicht einige Optimierungen, die bei einem konventionellen Prozessor nicht möglich sind. Beispielsweise kann Software Daten direkt zwischen funktionalen Einheiten übertragen, ohne Register zu verwenden.
Transportauslöser enthüllt einige mikroarchitektural Details, die normalerweise vor Programmierern versteckt sind. Dies vereinfacht die Kontrolllogik eines Prozessors erheblich, da viele Entscheidungen normalerweise bei Laufzeit sind festgelegt bei Zeit kompilieren. Dies bedeutet jedoch auch, dass ein für einen TTA -Prozessor zusammengestelltes binäres Binärer nicht ohne Neukompilation auf einer anderen läuft, wenn der Architektur zwischen den beiden nur einen kleinen Unterschied besteht. Das Problem der binären Inkompatibilität, zusätzlich zur Komplexität der Implementierung eines vollständigen Kontextschalters, macht TTAs besser geeignet für eingebettete Systeme als für Allzweck -Computing.
Von allen Ein-Instruktions-Computer Architekturen, die TTA -Architektur ist eine der wenigen, die darauf basieren, und die einzige, die darauf basiert, dass Prozessoren im Handel verkauft werden.
Vorteile im Vergleich zu VLIW -Architekturen
TTAs können als "exponierte DataPath" -VLIW -Architekturen angesehen werden. Während VLIW mit Operationen programmiert wird, spaltet TTA die Operationsausführung auf mehrere Bewegung Operationen. Das Programmiermodell auf niedriger Ebene ermöglicht mehrere Vorteile im Vergleich zum Standard -VLIW. Beispielsweise kann eine TTA -Architektur mehr Parallelität mit einfacheren Registerdateien als mit VLIW liefern. Da der Programmierer den Zeitpunkt des Operanden- und Ergebnisdatentransports steuert, ist die Komplexität (Anzahl der Eingangs- und Ausgangsports) der Komplexität Datei registrieren (RF) müssen nicht gemäß dem schlechtesten Fall-/Abschlussszenario der mehreren parallelen Anweisungen skaliert werden.
Eine wichtige einzigartige Softwareoptimierung, die durch die Transportprogrammierung ermöglicht wird, wird genannt Software umgangen. Bei der Umgehung von Software umgeht der Programmierer die Registerdatei zurück, indem sie Daten direkt auf die Operand -Ports der nächsten Funktionseinheit verschieben. Wenn diese Optimierung aggressiv angewendet wird, kann der ursprüngliche Umzug, der das Ergebnis in die Registerdatei transportiert Allzweckregister Für andere vorübergehende Variablen. Das reduzierte Druck unterscheidenZusätzlich zur Vereinfachung der erforderlichen Komplexität der HF -Hardware kann zu signifikanten führen CPU -Energieeinsparungen, ein wichtiger Vorteil, insbesondere in mobilen eingebetteten Systemen.[1] [2]
Struktur
TTA -Prozessoren sind unabhängig gebaut Funktionseinheiten und Registrieren Sie Dateien, die mit verbunden sind mit Transportbusse und Steckdosen.

Funktionseinheit
Jede Funktionseinheit implementiert eine oder mehrere Operationen, die Funktionen implementieren, die von einer einfachen Zugabe von Ganzzahlen zu einer komplexen und willkürlichen benutzerdefinierten anwendungsspezifischen Berechnung reichen. Operanden für den Betrieb werden über die Funktionseinheit übertragen Häfen.
Jede Funktionseinheit kann eine unabhängige haben Pipeline. Falls eine Funktionseinheit ist vollständig pipeline, eine neue Operation, die mehrere erfordert Taktzyklen In jedem Taktzyklus zu beenden. Auf der anderen Seite kann eine Pipeline so sein, dass sie nicht immer neue Betriebsstartanfragen annimmt, während eine alte noch immer ausgeführt wird.
Datenspeicher Der Zugriff und die Kommunikation zu außerhalb des Prozessors werden mithilfe von speziellen Funktionseinheiten behandelt. Funktionseinheiten, die Speicherzugriffsvorgänge implementieren und eine Verbindung zu einem Speichermodul herstellen, werden häufig aufgerufen Einheiten laden/speichern.
Steuergerät
Steuergerät ist ein Sonderfall von Funktionseinheiten, die die Ausführung von Programmen kontrolliert. Die Steuereinheit hat Zugriff auf den Befehlsspeicher, um die zu ausgeführten Anweisungen abzurufen. Damit die ausgeführten Programme die Ausführung (Sprung) in eine willkürliche Position im ausgeführten Programm übertragen können, liefert die Steuereinheit Steuerflussen. Eine Steuereinheit hat normalerweise eine Anweisung Pipeline, was aus Stufen zum Abrufen, Dekodieren und Ausführen von Programmanweisungen besteht.
Registrieren Sie Dateien
Registerdateien enthalten Allgemeine Register, mit der Variablen in Programmen gespeichert werden. Wie Funktionseinheiten haben auch Registerdateien Eingabe- und Ausgabeports. Die Anzahl der Lese- und Schreibports, dh die Fähigkeit, mehrere Register in einem gleichen Taktzyklus zu lesen und zu schreiben, kann in jeder Registerdatei variieren.
Transportbusse und Steckdosen
Interconnect -Architektur besteht aus Transportbusse die mithilfe von Funktionseinheitsanschlüssen angeschlossen sind Steckdosen. Aufgrund der Konnektivitätskosten ist es üblich, die Anzahl der Verbindungen zwischen Einheiten (Funktionseinheiten und Registerdateien) zu verringern. Ein TTA soll sein vollständig verbunden Falls es einen Pfad von jedem Ausgangsanschluss der Einheiten zu den Eingangsports jeder Einheit gibt.
Sockets bieten Mittel für die Programmierung von TTA-Prozessoren, indem ausgewählt werden kann, welche Bus-zu-Port-Verbindungen der Socket jederzeit aktiviert sind. Daher können Datentransporte in einem Taktzyklus programmiert werden, indem die Quell- und Ziel -Socket/Port -Verbindung für jeden Bus aktiviert werden soll.
Bedingte Ausführung
Einige TTA -Implementierungen unterstützen bedingte Ausführung.
Bedingte Ausführung wird mit Hilfe von implementiert Wachen. Jeder Datentransport kann durch eine Wache konditionalisiert werden, die mit einem Register verbunden ist (häufig 1-Bit Bedingte Register) und zu einem Bus. In Fall gequetscht, das heißt nicht an sein Ziel. Bedingungslos Datentransporte sind nicht mit einer Wache verbunden und immer ausgeführt.
Geäst
Alle Prozessoren, einschließlich TTA -Prozessoren, umfassen Steuerfluss Anweisungen, die den Programmzähler ändern, die zur Implementierung verwendet werden Unterroutinen, If-then-else, For-Loopusw. Die Assemblersprache für TTA -Prozessoren umfasst typischerweise Kontrollflussanweisungen wie bedingungslose Zweige (Sprung), bedingte relative Zweige (BNZ), Unterroutine -Aufruf (Anruf), bedingte Return (RETNZ) usw., die genauso wie die entsprechenden Aussehen aussehen Assemblersprachenanweisungen für andere Prozessoren.
Wie bei allen anderen Vorgängen auf einer TTA -Maschine werden diese Anweisungen als "Verschieben" -Beweisungen in eine spezielle Funktionseinheit implementiert.
TTA -Implementierungen, die die bedingte Ausführung unterstützen, wie z.[3][4]
TTA -Implementierungen, die nur bedingungslose Datentransporte unterstützen, wie die Maxim integriert Maxq,[5] Normalerweise haben Sie eine spezielle Funktionseinheit, die eng mit dem Programmzähler verbunden ist, der auf eine Vielzahl von Zieladressen reagiert. Jede solche Adresse hat, wenn sie als Ziel eines "Move" verwendet wird, einen anderen Einfluss auf den Programmzähler - der relative Zweig <bedingung> "Anweisung hat für jede Bedingung eine andere Zieladresse. und andere Zieladressen werden verwendet, Retnz usw.
Programmierung
In traditionelleren Prozessorarchitekturen wird ein Prozessor normalerweise durch Definieren der ausgeführten Operationen und deren Operanden programmiert. Beispielsweise könnte eine Additionsanweisung in einer RISC -Architektur wie Folgendes aussehen.
Fügen Sie R3, R1, R2 hinzu
In diesem Beispielbetrieb fügt die Werte von allgemeinen Registern R1 und R2 hinzu und speichert das Ergebnis in Register R3. Die Ausführung der Anweisung im Prozessor führt grob wahrscheinlich dazu, die Anweisung zu übersetzen, um Signale zu steuern, die die Verbindungen und Funktionseinheiten der Verbindungsnetzwerke steuern. Das Verbindungsnetzwerk wird verwendet, um die aktuellen Werte von Registern R1 und R2 auf die Funktionseinheit zu übertragen, die den ADD-Vorgang ausführen kann, der häufig als Alu bezeichnet wird wie in der arithmetisch-logischen Einheit. Schließlich wählt ein Steuersignal den Additionsvorgang in ALU aus und löst sie aus, von dem das Ergebnis auf das Register R3 zurückgeführt wird.
TTA -Programme definieren die Operationen nicht, sondern nur die Datentransporte, die zum Schreiben und Lesen der Operandenwerte erforderlich sind. Der Betrieb selbst wird ausgelöst, indem Daten an a geschrieben werden Operanden auslösen einer Operation. Somit wird ein Betrieb als Nebeneffekt des Auslöserdatentransports ausgeführt. Daher erfordert die Ausführung eines Additionsbetriebs in TTA drei Datentransportdefinitionen, auch genannt sich bewegt. Ein Schritt definiert Endpunkte für einen Datentransport in einem Transportbus. Ein Schritt kann beispielsweise angeben, dass ein Datentransport von Funktionseinheit F, Port 1, um die Datei R, Register -Index 2 zu registrieren, im Bus B1 stattfinden sollte. Falls es mehrere Busse im Zielprozessor gibt, kann jeder Bus parallel im gleichen Taktzyklus verwendet werden. Daher ist es möglich, die Parallelität des Datentransports zu nutzen, indem mehrere Datentransporte in derselben Anweisung geplant werden.
Ein Additionsbetrieb kann wie folgt in einem TTA -Prozessor ausgeführt werden:
r1 -> alu.operand1 r2 -> alu.add.trigger alu.result -> r3
Der zweite Schritt, ein Schreiben in den zweiten Operanden der Funktionseinheit namens Alu, löst den Zugangsbetrieb aus. Dies wird nach der Ausführungslatenz des 'Add' im Ausgabeport 'Ergebnis' erhältlich.
Die mit der ALU verbundenen Ports können als Akkumulator, die Schöpfung von ermöglichen Makroanweisungen das Zusammenfassung weg die zugrunde liegende TTA:
LDA R1 ; "Last Alu": Wert auf Alu Operand 1 verschieben hinzufügen R2 ; Hinzufügen: Verschieben Sie den Wert, um Trigger hinzuzufügen Sta R3 ; "Store Alu": Wert Wert vom Alu -Ergebnis bewegen
Programmierer sichtbare Betriebslatenz
Die führende Philosophie von TTAs besteht darin, die Komplexität von Hardware zu Software zu verlagern. Aus diesem Grund werden dem Programmierer mehrere zusätzliche Gefahren eingeführt. Einer von ihnen ist Verzögerung von Slots, der Programmierer sichtbare Betriebslatenz der Funktionseinheiten. Das Timing liegt bei vollständiger Verantwortung des Programmierers. Der Programmierer muss die Anweisungen so planen, dass das Ergebnis weder zu früh noch zu spät gelesen wird. Es gibt keine Hardwareerkennung, um den Prozessor zu sperren, falls ein Ergebnis zu früh gelesen wird. Betrachten Sie zum Beispiel eine Architektur, die einen Betrieb hat hinzufügen mit Latenz von 1 und Betrieb Mul mit Latenz von 3. beim Auslösen der hinzufügen Durch den Betrieb ist es möglich, das Ergebnis in der nächsten Anweisung (nächster Taktzyklus) zu lesen, jedoch im Fall von MulMan muss auf zwei Anweisungen warten, bevor das Ergebnis gelesen werden kann. Das Ergebnis ist für die 3. Anweisung nach der Auslöseranweisung bereit.
Wenn ein Ergebnis zu früh gelesen wird, wird das Ergebnis eines zuvor ausgelösten Vorgangs gelesen, oder falls kein Betrieb in der Funktionseinheit ausgelöst wurde, ist der Lesewert undefiniert. Andererseits muss das Ergebnis früh genug gelesen werden, um sicherzustellen, dass das nächste Betriebsergebnis das noch ungelesene Ergebnis im Ausgangsanschluss überschreibt.
Aufgrund der Fülle des Programmierer-sichtbaren Prozessorkontexts, der zusätzlich zum Registerdateiinhalt praktisch auch Funktionen für Funktionen für Funktionen für Funktionseinheiten und/oder Funktionseingänge und Ausgangsanschlüsse enthält, speichert der Kontext, der für externe Interrupt-Unterstützung erforderlich ist, komplex und teuer. Implementieren Sie in einem TTA -Prozessor. Daher werden Interrupts normalerweise nicht von TTA -Prozessoren unterstützt, ihre Aufgabe wird jedoch an eine externe Hardware (z. B. ein E/A -Prozessor) delegiert, oder ihre Notwendigkeit wird durch die Verwendung eines alternativen Synchronisations-/Kommunikationsmechanismus wie Umfragen vermieden.
Implementierungen
- Maxq[6][5][7] aus Maxim integriertDer einzige im Handel erhältliche Mikrocontroller, der auf Transport ausgelöster Architektur basiert, ist eine OISC oder "Ein-Instruktions-Computer". Es bietet a Single Obwohl flexible Bewegungsanweisung, die dann als verschiedene virtuelle Anweisungen fungieren kann, indem sie Werte direkt in die verschieben Programm zähler.
- Das "Move Project" hat mehrere experimentelle TTA -Mikroprozessoren entworfen und hergestellt.
- Openasip ist ein anwendungsspezifisches Openasis-Anweisungssatz, das TTA als Prozessorvorlage verwendet.
- Die Architektur der Amiga Kupfer hat alle grundlegenden Merkmale einer von Transport ausgelösten Architektur.
- Das Fähig Prozessor entwickelt von New England Digital.
- Das Drahtwelt basierend Computer.
- Dr. Dobbs Veröffentlichte ein-der, ein 32-Bit-TTA in Verilog mit einem passenden Cross-Assembler und Forth Compiler.[8][9]
- Mali (200/400) Vertex-Prozessor verwendet ein 128-Bit-Befehlswort einzelner Präzisionsschwimmpunkt-Scalar TTA.
Siehe auch
- Anwendungsspezifischer Anweisungsverfahren (EIN SCHLUCK)
- Sehr langes Unterrichtswort (VLIW)
- Explizit parallele Anweisungsrechnung (EPOS)
- DataFlow -Architektur
Verweise
- ^ V. Guzma, P. Jäskeläinen, P. Kellomäki und J. Takala, „Auswirkungen der Software, die auf die Parallelität der Unterrichtsniveau umgangen wird und Dateiverkehr registrieren“
- ^ Johan Janssen."Compiler -Strategien für den Transport ausgelösten Architekturen". 2001. p. 168.
- ^ Henkkorporaal."Transport ausgelöste Architekturen, die auf allgemeine Anwendungen untersucht wurden". p. 6.
- ^ Aliaksei V. Chapyzhenka."Sttack: Stack Transport ausgelöste Architektur".
- ^ a b "Maxq Family User's Guide". Maxim integriert. Abschnitt "1.1 Anweisungssatz".
Mit einer registrierungsbasierten, transportgesteuerten Architektur können alle Anweisungen als einfache Übertragungsvorgänge codiert werden. Alle Anweisungen reduzieren sich auf das Schreiben eines sofortigen Werts an ein Zielregister oder Speicherort oder bewegte Daten zwischen Registern und/oder Speicherorten.
- ^ Catsoulis, John (2005), Entwerfen von eingebetteter Hardware (2 ed.), O'Reilly Media, S. 327–333, ISBN 978-0-596-00755-3
- ^ "Einführung in die Maxq -Architektur". Maxim integriert. Zentraler Zugriff auf Ressourcen (NCLUDES Transfer Map Diagramm).
- ^ Dr. Dobbs Artikel mit 32-Bit-FPGA-CPU in Verilog
- ^ Website mit weiteren Details zur CPU von Dr. Dobb Archiviert 2013-02-18 AT Archive.Today