The Advanced eXtensible Interface (AXI) is an on-chip communication bus protocol and is part of the Advanced Microcontroller Bus Architecture specification (AMBA).[1][2] AXI is royalty-free and its specification is freely available from ARM.
AMBA AXI specifies many optional signals, which can be included depending on the specific requirements of the design,[3] making AXI a versatile bus for numerous applications.
While the communication over an AXI bus is between a single initiator and a single target, the specification includes detailed descriptions and signals to include N:M interconnects, able to extend the bus to topologies with multiple initiators and targets.[4]
AXI3 was introduced in 2003 with the AMBA3 specification. In 2010, a new revision of AMBA, AMBA4, defined the AXI4, AXI4-Lite and AXI4-Stream protocols. AMBA AXI4, AXI4-Lite and AXI4-Stream have been adopted by Xilinx and many of its partners as a main communication bus in their products.[5][6] AMBA5 with AXI5 was released in 2022, adding atomicity, data protection, and cache operations. A new ACE (AXI Coherency Extension) is specified.[7]
Thread IDs
Thread-IDs ermöglichen es einem einzelnen Initiator-Port, mehrere Threads zu unterstützen. Jeder Thread hat dabei der Reihe nach Zugriff auf den AXI-Adressraum. Allerdings können die von einem Initiator-Port initiierten Thread-IDs in beliebiger Reihenfolge abgeschlossen werden. Wird beispielsweise eine Thread-ID durch ein langsames Peripheriegerät blockiert, kann eine andere Thread-ID unabhängig von der Reihenfolge der ersten Thread-ID fortfahren. Ein weiteres Beispiel: Einem Thread auf der CPU kann für einen bestimmten Speicherzugriff auf einen Initiator-Port eine Thread-ID zugewiesen werden, z. B. „Adresse lesen1, Adresse schreiben1, Adresse lesen1“. Diese Sequenz wird der Reihe nach abgeschlossen, da jede Transaktion dieselbe Thread-ID des Initiator-Ports verwendet. Einem anderen Thread auf der CPU kann eine andere Thread-ID des Initiator-Ports zugewiesen sein. Dessen Speicherzugriff erfolgt ebenfalls der Reihe nach, kann sich aber mit den Transaktionen der ersten Thread-ID vermischen. [ 8 ]
Thread-IDs an einem Initiator-Port sind nicht global definiert. Daher fügt ein AXI-Switch mit mehreren Initiator-Ports intern dem Thread-ID den Index des Initiator-Ports hinzu und übermittelt diese verkettete Thread-ID an das Zielgerät. Bei der Rückkehr der Transaktion zum ursprünglichen Initiator-Port wird dieses Thread-ID-Präfix verwendet, um den Initiator-Port zu lokalisieren, und das Präfix wird abgeschnitten. Aus diesem Grund ist die Thread-ID des Zielports länger als die des Initiator-Ports. [ 9 ]
Der AXI-Lite-Bus ist ein AXI-Bus, der nur einen einzigen Thread pro Initiator unterstützt. Dieser Bus wird typischerweise für Endpunkte verwendet, die jeweils nur mit einem einzigen Initiatorgerät kommunizieren müssen, beispielsweise mit einem einfachen Peripheriegerät wie einer UART . Im Gegensatz dazu kann eine CPU Transaktionen zu mehreren Peripheriegeräten und Adressräumen gleichzeitig initiieren und unterstützt mehrere Thread-IDs an ihren AXI-Initiator- und AXI-Zielports. Daher unterstützt eine CPU typischerweise einen AXI-Bus mit vollständiger Spezifikation. Ein typisches Beispiel für einen Front-Side-AXI-Switch besteht aus einem AXI-Initiator mit vollständiger Spezifikation, der mit einem CPU-Initiator verbunden ist, und mehreren AXI-Lite-Zielen, die von verschiedenen Peripheriegeräten an den AXI-Switch angeschlossen sind. [ 10 ]
(Darüber hinaus ist der AXI-Lite-Bus darauf beschränkt, Transaktionslängen von nur einem Datenwort pro Transaktion zu unterstützen.)
Handschlag

AXI definiert einen grundlegenden Handshake-Mechanismus , bestehend aus einem Signal xVALIDund xREADYeinem Signal. [ 11 ] Das xVALIDSignal wird von der Quelle gesendet, um der Zielentität mitzuteilen, dass die Nutzdaten auf dem Kanal gültig sind und ab diesem TaktzyklusxREADY gelesen werden können. Analog dazu sendet die empfangende Entität das Signal, um ihre Bereitschaft zum Datenempfang zu signalisieren.
Wenn sowohl das xVALIDals auch das xREADYSignal im selben Taktzyklus auf hohem Pegel liegen , gilt die Datenübertragung als abgeschlossen. Die Quelle kann nun entweder neue Daten senden, indem sie das Signal weiterhin auf hohem Pegel hält xVALID, oder die Übertragung beenden, indem sie das Signal deaktiviert xVALID. Eine einzelne Datenübertragung, also ein Taktzyklus, in dem sowohl xVALIDals auch xREADYauf hohem Pegel liegen, wird als „Beat“ bezeichnet.
Für die Steuerung dieser Signale werden zwei Hauptregeln definiert:
- Eine Quelle darf nicht auf ein Hoch warten,
xREADYum sich zu behauptenxVALID. - Sobald
xVALIDeine Aussage getroffen wurde, muss die Quelle diese Aussage aufrechterhalten, bis ein Handshake stattfindet.
Dank dieses Handshake- Mechanismus können sowohl Quelle als auch Ziel den Datenfluss steuern und die Geschwindigkeit bei Bedarf drosseln.
Kanäle
In der AXI-Spezifikation werden fünf Kanäle beschrieben: [ 12 ]
- Leseadressenkanal (AR)
- Datenkanal lesen (R)
- Schreibadresskanal (AW)
- Schreibdatenkanal (W)
- Schreibantwortkanal (B)
Abgesehen von einigen grundlegenden Ordnungsregeln [ 13 ] ist jeder Kanal unabhängig von den anderen und verfügt über ein eigenes Paar xVALID/xREADYHandshake- Signale. [ 14 ]
AXI
Signale
| Signalbeschreibung | Schreibadressenkanal | Leseadressenkanal |
|---|---|---|
| Adress-ID zur Identifizierung mehrerer Streams über einen einzelnen Kanal | AWID | Trocken |
| Adresse des ersten Taktes des Ausbruchs | AWADDR | ARADDR |
| Anzahl der Schläge innerhalb des Ausbruchs | AWLEN [ nb 1 ] | ARLEN [ nb 1 ] |
| Größe jedes Schlags | AWSIZE | ARSIZE |
| Art der Explosion | AWBURST | ARBURST |
| Sperrtyp, um atomare Operationen zu ermöglichen | AWLOCK [ nb 1 ] | ARLOCK [ nb 1 ] |
| Speichertyp, wie die Transaktion im System ablaufen muss. | AWCACHE | ARCHIV |
| Schutzart: Berechtigungen , Sicherheitsstufe und Daten-/Anweisungszugriff | AWPROT | ARPROT |
| Servicequalität der Transaktion | AWQOS [ nb 2 ] | ARQOS [ nb 2 ] |
| Regionskennung, um von einer einzigen physischen Schnittstelle aus auf mehrere logische Schnittstellen zuzugreifen | AWREGION [ nb 2 ] | ARREGION [ nb 2 ] |
| Benutzerdefinierte Daten | AWUSER [ nb 2 ] | ARUSER [ nb 2 ] |
xVALIDHandschlagsignal | AWVALID | ARVALID |
xREADYHandschlagsignal | AWREADY | BEREIT |
| Signalbeschreibung | Datenkanal schreiben | Datenkanal lesen |
|---|---|---|
| Daten-ID zur Identifizierung mehrerer Datenströme über einen einzelnen Kanal | WID [ nb 3 ] | LOSWERDEN |
| Daten lesen/schreiben | WDATA | RDATA |
| Antwort lesen, um den Status des aktuellen RDATA-Signals anzugeben | RRESP | |
| Byte-Strobe, um anzuzeigen, welche Bytes des WDATA-Signals gültig sind. | WSTRB | |
| Letzter Takt-Identifikator | WLAST | RLAST |
| Benutzerdefinierte Daten | WUSER [ nb 2 ] | RUSER [ nb 2 ] |
xVALIDHandschlagsignal | WVALID | RVALID |
xREADYHandschlagsignal | WREADY | BEREIT |
| Signalbeschreibung | Schreibantwortkanal |
|---|---|
| Antwort-ID schreiben, um mehrere Streams über einen einzelnen Kanal zu identifizieren | GEBOT |
| Schreiben Sie die Antwort, um den Status des Bursts anzugeben. | BRESP |
| Benutzerdefinierte Daten | BUSER [ nb 2 ] |
xVALIDHandschlagsignal | BVALID |
xREADYHandschlagsignal | BROT |
Ausbrüche

AXI ist ein Burst-basiertes Protokoll [ 16 ] , was bedeutet, dass für eine einzelne Anfrage mehrere Datenübertragungen (oder Takte) erfolgen können. Dies macht es nützlich, wenn große Datenmengen von oder zu einem bestimmten Adressmuster übertragen werden müssen. In AXI können Bursts drei Typen aufweisen, die durch die Signale ARBURST (für Lesevorgänge) oder AWBURST (für Schreibvorgänge) ausgewählt werden: [ 17 ]
- FESTGELEGT
- INCR
- WICKELN
Bei FIXED-Bursts hat jeder Takt innerhalb der Übertragung dieselbe Adresse. Dies ist nützlich für wiederholte Zugriffe auf dieselbe Speicheradresse, beispielsweise beim Lesen oder Schreiben eines FIFO-Speichers .
Bei INCR-Bursts hingegen hat jeder Takt eine Adresse, die der Adresse des vorherigen Takts plus der Übertragungsgröße entspricht. Dieser Burst-Typ wird häufig zum Lesen oder Schreiben sequenzieller Speicherbereiche verwendet.
WRAP-Bursts ähneln INCR-Bursts, da jede Übertragung eine Adresse hat, die der vorherigen Adresse plus der Übertragungsgröße entspricht. Bei WRAP-Bursts wird die Adresse des aktuellen Takts jedoch auf die „Überlaufgrenze“ zurückgesetzt, wenn sie die „Höhere Adressgrenze“ erreicht.
mit
Transaktionen
Liest

Um eine Lesetransaktion zu starten, muss der Initiator im Leseadresskanal Folgendes angeben:
- die Startadresse auf ARADDR
- der Burst-Typ, entweder FIXED, INCR oder WRAP, auf ARBURST (falls vorhanden)
- die Impulslänge auf ARLEN (falls vorhanden).
Zusätzlich werden, sofern vorhanden, weitere Hilfssignale verwendet, um spezifischere Übertragungen zu definieren.
Nach dem üblichen ARVALID/ARREADY-Handshake muss das Ziel über den Lesedatenkanal Folgendes bereitstellen:
- die Daten, die der/den angegebenen Adresse(n) auf RDATA entsprechen
- der Status jedes Taktes auf RRESP
plus alle weiteren optionalen Signale. Jeder Antwortschlag des Ziels erfolgt mittels eines RVALID/RREADY-Handshakes, und bei der letzten Übertragung muss das Ziel RLAST senden, um mitzuteilen, dass ohne eine neue Leseanforderung keine weiteren Antwortschläge folgen.
Schreibt

Um einen Schreibvorgang zu starten, muss der Initiator sowohl die Adressinformationen als auch die Dateninformationen bereitstellen.
Die Adressinformationen werden über den Schreibadresskanal bereitgestellt, ähnlich wie bei einem Lesevorgang:
- Die Startadresse muss auf AWADDR angegeben werden.
- der Burst-Typ, entweder FIXED, INCR oder WRAP, auf AWBURST (falls vorhanden)
- die Impulslänge auf AWLEN (falls vorhanden)
und, falls vorhanden, alle optionalen Signale.
Ein Initiator muss außerdem die Daten, die sich auf die angegebene(n) Adresse(n) beziehen, auf dem Schreibdatenkanal bereitstellen:
- die Daten auf WDATA
- die "Strobe"-Bits auf WSTRB (falls vorhanden), die die einzelnen WDATA-Bytes bedingt als "gültig" oder "ungültig" markieren
Wie beim Lesepfad muss auch beim letzten Datenwort WLAST vom Initiator gesetzt werden.
Nach Abschluss beider Transaktionen muss das Zielsystem dem Initiator den Status des Schreibvorgangs über den Write-Response-Kanal zurücksenden, indem es das Ergebnis über das BRESP-Signal zurückgibt.
Teilmengen
AXI-Lite
AXI4-Lite ist eine Teilmenge des AXI4-Protokolls und bietet eine registerähnliche Struktur mit reduziertem Funktionsumfang und geringerer Komplexität. [ 19 ] Zu den wichtigsten Unterschieden gehören:
- Alle Ausbrüche bestehen nur aus einem einzigen Schlag.
- Bei allen Datenzugriffen wird die volle Datenbusbreite genutzt, die entweder 32 oder 64 Bit betragen kann.
AXI4-Lite entfernt einen Teil der AXI4-Signale, folgt aber hinsichtlich der verbleibenden Signale der AXI4-Spezifikation. Da es sich um eine Teilmenge von AXI4 handelt, sind AXI4-Lite-Transaktionen vollständig mit AXI4-Geräten kompatibel und ermöglichen so die Interoperabilität zwischen AXI4-Lite-Initiatoren und AXI4-Zielen ohne zusätzliche Konvertierungslogik. [ 20 ]
Signale
| Schreibe den Adresskanal | Datenkanal schreiben | Schreibantwortkanal | Adresskanal lesen | Datenkanal lesen |
|---|---|---|---|---|
| AWVALID | WVALID | BVALID | ARVALID | RVALID |
| AWREADY | WREADY | BROT | BEREIT | BEREIT |
| AWADDR | WDATA | BRESP | ARADDR | RDATA |
| AWPROT | WSTRB | ARPROT | RRESP |
AXI-Stream
AXI4-Stream ist ein vereinfachtes, ressourcenschonendes Busprotokoll, das speziell für Hochgeschwindigkeits-Streaming-Datenanwendungen entwickelt wurde. Es unterstützt ausschließlich unidirektionalen Datenfluss und benötigt weder Adressierung noch komplexe Handshake-Verfahren. Ein AXI-Stream ähnelt einem AXI-Schreibdatenkanal, weist jedoch einige wichtige Unterschiede in der Datenanordnung auf:
- Keine Datenstöße, stattdessen werden die Daten in Pakete, Frames und Datenströme verpackt.
- Es gibt keine Begrenzung für die Datenlänge, die Daten können kontinuierlich sein.
- Die Datenbreite kann eine beliebige ganzzahlige Anzahl von Bytes sein.
Das AXI5-Stream-Protokoll führt Wecksignale und Signalschutz mittels Parität ein.
Ein einzelner AXI-Stream-Transmitter kann mehrere Datenströme ansteuern, die verschachtelt werden können, eine Neuanordnung ist jedoch nicht zulässig.
| Signal | Quelle | Breite | Beschreibung |
|---|---|---|---|
| ACLK | Uhr | 1 | ACLK ist ein globales Taktsignal. Alle Signale werden an der steigenden Flanke von ACLK abgetastet. |
| ARESETn | Zurücksetzen | 1 | ARESETn ist ein globales Reset-Signal. |
| TVALID | Sender | 1 | TVALID signalisiert, dass der Sender eine gültige Übertragung auslöst. Eine Übertragung findet statt, wenn sowohl TVALID als auch TREADY gesetzt sind. |
| TREADY | Empfänger | 1 | TREADY bedeutet, dass ein Empfänger eine Überweisung annehmen kann. |
| TDATA | Sender | TDATA_WIDTH | TDATA ist die primäre Nutzlast, die die über die Schnittstelle übertragenen Daten bereitstellt. TDATA_WIDTH muss eine ganze Zahl in Bytes sein und sollte idealerweise 8, 16, 32, 64, 128, 256, 512 oder 1024 Bit betragen. |
| TSTRB | Sender | TDATA_WIDTH/8 | TSTRB ist der Byte-Qualifizierer, der angibt, ob der Inhalt des zugehörigen Bytes von TDATA als Datenbyte oder als Positionsbyte verarbeitet wird. |
| TKEEP | Sender | TDATA_WIDTH/8 | TKEEP ist der Byte-Qualifizierer, der angibt, ob der Inhalt des zugehörigen Bytes von TDATA als Teil des Datenstroms verarbeitet wird. |
| TLAST | Sender | 1 | TLAST kennzeichnet die Grenze eines Pakets. |
| TID | Sender | TID_WIDTH | TID ist eine Datenstromkennung. Es wird empfohlen, dass TID_WIDTH nicht mehr als 8 beträgt. |
| TDEST | Sender | TDEST_WIDTH | TDEST liefert Routinginformationen für den Datenstrom. Es wird empfohlen, dass TDEST_WIDTH nicht mehr als 8 beträgt. |
| TUSER | Sender | TUSER_WIDTH | TUSER ist eine benutzerdefinierte Seitenbandinformation, die zusammen mit dem Datenstrom übertragen werden kann. Es wird empfohlen, TUSER_WIDTH als ein ganzzahliges Vielfaches von TDATA_WIDTH/8 zu wählen. |
| AUFWACHEN | Sender | 1 | TWAKEUP identifiziert jegliche Aktivität, die mit der AXI-Stream-Schnittstelle verbunden ist. |
Siehe auch
Referenzen
- ^ "AMBA | Dokumentation" . Arm Holdings.
- ^ Toole, Christina (24. Oktober 2016). „Einführung in das AXI-Protokoll: Die AXI-Schnittstelle verstehen“ . arm.com . Arm Limited . Abgerufen am 11. September 2023.
Das von vielen SoC-Designern heute verwendete Protokoll ist AXI (Advanced eXtensible Interface) und Bestandteil der Arm Advanced Microcontroller Bus Architecture (AMBA)-Spezifikation. Es ist besonders in den Zynq-Bausteinen von Xilinx weit verbreitet und bildet die Schnittstelle zwischen dem Prozessorsystem und den programmierbaren Logikabschnitten des Chips.
- ^ Arm Holdings. „AMBA AXI and ACE Protocol Specification“ (PDF) . developer.arm.com . S. 109–118 . Archiviert vom Original (PDF) am 5. Juli 2019. Abgerufen am 5. Juli 2019 .
- ^ Arm Holdings. „AMBA AXI and ACE Protocol Specification“ (PDF) . developer.arm.com . S. 23–24 . Archiviert vom Original (PDF) am 5. Juli 2019. Abgerufen am 5. Juli 2019 .
- ^ „AMBA AXI4 Interface Protocol“ . www.xilinx.com . Xilinx Inc.
- ^ „AXI4 IP“ . www.xilinx.com . Xilinx Inc.
- ^ ARM Ltd. „AMBA 5“ . Arm | Die Architektur für die digitale Welt .
- ^ „AMBA AXI and ACE Protocol Specification“ (PDF) . Arm Ltd. 22. Februar 2013. Abgerufen am 28. November 2025 .
- ^ „AXI Interconnect v2.1 LogiCORE IP Product Guide“ (PDF) . Xilinx. 17. Mai 2022. Abgerufen am 28. November 2025 .
- ^ „AXI Thread IDs (TIDs) – SoC Basics“ (PDF) . Institut für Eingebettete Systeme, TU Graz. 2021. Abgerufen am 28. November 2025 .
- ^ Arm Holdings. „AMBA AXI and ACE Protocol Specification“ (PDF) . developer.arm.com . S. 37–38 . Archiviert vom Original (PDF) am 5. Juli 2019. Abgerufen am 5. Juli 2019 .
- ^ Arm Holdings. „AMBA AXI and ACE Protocol Specification“ (PDF) . developer.arm.com . S. 22–23 . Archiviert vom Original (PDF) am 5. Juli 2019. Abgerufen am 5. Juli 2019 .
- ^ Arm Holdings. „AMBA AXI and ACE Protocol Specification“ (PDF) . developer.arm.com . S. 40. Archiviert vom Original (PDF) am 5. Juli 2019. Abgerufen am 5. Juli 2019 .
- ^ Arm Holdings. „AMBA AXI and ACE Protocol Specification“ (PDF) . developer.arm.com . S. 38. Archiviert vom Original (PDF) am 5. Juli 2019. Abgerufen am 5. Juli 2019 .
- ^ Arm Holdings. „AMBA AXI and ACE Protocol Specification“ (PDF) . developer.arm.com . S. 28–34 . Archiviert vom Original (PDF) am 5. Juli 2019. Abgerufen am 5. Juli 2019 .
- ^ Arm Holdings. „AMBA AXI and ACE Protocol Specification“ (PDF) . developer.arm.com . S. 22. Archiviert vom Original (PDF) am 5. Juli 2019. Abgerufen am 5. Juli 2019 .
- ^ Arm Holdings. „AMBA AXI and ACE Protocol Specification“ (PDF) . developer.arm.com . S. 45–47 . Archiviert vom Original (PDF) am 5. Juli 2019. Abgerufen am 5. Juli 2019 .
- ^ a b Arm Holdings. „AMBA AXI and ACE Protocol Specification“ (PDF) . developer.arm.com . S. 44. Abgerufen am 5. Juli 2019 .
- ^ Arm Holdings. „AMBA AXI and ACE Protocol Specification“ (PDF) . developer.arm.com . S. 121–128 . Archiviert vom Original (PDF) am 5. Juli 2019. Abgerufen am 5. Juli 2019 .
- ^ Arm Holdings. „AMBA AXI and ACE Protocol Specification“ (PDF) . developer.arm.com . S. 124. Archiviert vom Original (PDF) am 5. Juli 2019. Abgerufen am 5. Juli 2019 .
- ^ Arm Holdings. „AMBA AXI and ACE Protocol Specification“ (PDF) . developer.arm.com . S. 122. Archiviert vom Original (PDF) am 5. Juli 2019. Abgerufen am 5. Juli 2019 .
