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

Grundlegender Handshake-Mechanismus des AMBA AXI- Protokolls . In diesem Beispiel wartet die Zielentität auf ein hohes VALID-Signal, um ihr eigenes READY-Signal zu senden.

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 behaupten xVALID.
  • 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-Lesekanäle
AXI-Adress- und Datenlesekanäle.
AXI-Schreibkanäle
AXI-Schreibadresse-, Schreibdaten- und Schreibantwortkanäle.

AXI

Signale

Signale der Lese- und Schreibadresskanäle
SignalbeschreibungSchreibadressenkanalLeseadressenkanal
Adress-ID zur Identifizierung mehrerer Streams über einen einzelnen KanalAWIDTrocken
Adresse des ersten Taktes des AusbruchsAWADDRARADDR
Anzahl der Schläge innerhalb des AusbruchsAWLEN [ nb 1 ]ARLEN [ nb 1 ]
Größe jedes SchlagsAWSIZEARSIZE
Art der ExplosionAWBURSTARBURST
Sperrtyp, um atomare Operationen zu ermöglichenAWLOCK [ nb 1 ]ARLOCK [ nb 1 ]
Speichertyp, wie die Transaktion im System ablaufen muss.AWCACHEARCHIV
Schutzart: Berechtigungen , Sicherheitsstufe und Daten-/AnweisungszugriffAWPROTARPROT
Servicequalität der TransaktionAWQOS [ nb 2 ]ARQOS [ nb 2 ]
Regionskennung, um von einer einzigen physischen Schnittstelle aus auf mehrere logische Schnittstellen zuzugreifenAWREGION [ nb 2 ]ARREGION [ nb 2 ]
Benutzerdefinierte DatenAWUSER [ nb 2 ]ARUSER [ nb 2 ]
xVALIDHandschlagsignal​AWVALIDARVALID
xREADYHandschlagsignal​AWREADYBEREIT
Signale der Lese- und Schreibdatenkanäle
SignalbeschreibungDatenkanal schreibenDatenkanal lesen
Daten-ID zur Identifizierung mehrerer Datenströme über einen einzelnen KanalWID [ nb 3 ]LOSWERDEN
Daten lesen/schreibenWDATARDATA
Antwort lesen, um den Status des aktuellen RDATA-Signals anzugebenRRESP
Byte-Strobe, um anzuzeigen, welche Bytes des WDATA-Signals gültig sind.WSTRB
Letzter Takt-IdentifikatorWLASTRLAST
Benutzerdefinierte DatenWUSER [ nb 2 ]RUSER [ nb 2 ]
xVALIDHandschlagsignal​WVALIDRVALID
xREADYHandschlagsignal​WREADYBEREIT
Signale des Schreibantwortkanals
SignalbeschreibungSchreibantwortkanal
Antwort-ID schreiben, um mehrere Streams über einen einzelnen Kanal zu identifizierenGEBOT
Schreiben Sie die Antwort, um den Status des Bursts anzugeben.BRESP
Benutzerdefinierte DatenBUSER [ nb 2 ]
xVALIDHandschlagsignal​BVALID
xREADYHandschlagsignal​BROT

[ 15 ]

  1. ^ a b c d Unterschiedliches Verhalten zwischen AXI3 und AXI4
  2. ^ a b c d e f g h i Nur mit AXI4 verfügbar
  3. ^ Nur mit AXI3 verfügbar

Ausbrüche

Beispiel für FIXED-, INCR- und WRAP-Bursts

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

Beispiel einer AXI-Lesetransaktion. Der Initiator fordert vier Takte (ARLEN + 1 [ 18 ] ) mit jeweils vier Bytes ab Adresse 0x0 vom Typ INCR an. Das Ziel gibt 0x10 für Adresse 0x0, 0x11 für Adresse 0x4, 0x12 für Adresse 0x8 und 0x13 für Adresse 0xc zurück, jeweils mit dem Status OKAY. Hier werden nur die wichtigsten Signale angezeigt.

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

Beispiel einer AXI-Schreibtransaktion. Der Initiator sendet vier Takte (AWLEN + 1 [ 18 ] ) mit jeweils vier Bytes ab Adresse 0x0 vom Typ INCR. Dabei werden die Werte 0x10 für Adresse 0x0, 0x11 für Adresse 0x4, 0x12 für Adresse 0x8 und 0x13 für Adresse 0xc geschrieben. Das Zielsystem sendet als Antwort „OKAY“ für die gesamte Transaktion. Hier werden nur die wichtigsten Signale angezeigt.

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 AdresskanalDatenkanal schreibenSchreibantwortkanalAdresskanal lesenDatenkanal lesen
AWVALIDWVALIDBVALIDARVALIDRVALID
AWREADYWREADYBROTBEREITBEREIT
AWADDRWDATABRESPARADDRRDATA
AWPROTWSTRBARPROTRRESP

[ 21 ]

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.

SignalQuelleBreiteBeschreibung
ACLKUhr1ACLK ist ein globales Taktsignal. Alle Signale werden an der steigenden Flanke von ACLK abgetastet.
ARESETnZurücksetzen1ARESETn ist ein globales Reset-Signal.
TVALIDSender1TVALID signalisiert, dass der Sender eine gültige Übertragung auslöst. Eine Übertragung findet statt, wenn sowohl TVALID als auch TREADY gesetzt sind.
TREADYEmpfänger1TREADY bedeutet, dass ein Empfänger eine Überweisung annehmen kann.
TDATASenderTDATA_WIDTHTDATA 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.
TSTRBSenderTDATA_WIDTH/8TSTRB ist der Byte-Qualifizierer, der angibt, ob der Inhalt des zugehörigen Bytes von TDATA als Datenbyte oder als Positionsbyte verarbeitet wird.
TKEEPSenderTDATA_WIDTH/8TKEEP ist der Byte-Qualifizierer, der angibt, ob der Inhalt des zugehörigen Bytes von TDATA als Teil des Datenstroms verarbeitet wird.
TLASTSender1TLAST kennzeichnet die Grenze eines Pakets.
TIDSenderTID_WIDTHTID ist eine Datenstromkennung. Es wird empfohlen, dass TID_WIDTH nicht mehr als 8 beträgt.
TDESTSenderTDEST_WIDTHTDEST liefert Routinginformationen für den Datenstrom. Es wird empfohlen, dass TDEST_WIDTH nicht mehr als 8 beträgt.
TUSERSenderTUSER_WIDTHTUSER 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.
AUFWACHENSender1TWAKEUP identifiziert jegliche Aktivität, die mit der AXI-Stream-Schnittstelle verbunden ist.

Siehe auch

Referenzen

  1. ^ "AMBA | Dokumentation" . Arm Holdings.
  2. ^ 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.
  3. ^ 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 .
  4. ^ 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 .
  5. ^ „AMBA AXI4 Interface Protocol“ . www.xilinx.com . Xilinx Inc.
  6. ^ „AXI4 IP“ . www.xilinx.com . Xilinx Inc.
  7. ^ ARM Ltd. „AMBA 5“ . Arm | Die Architektur für die digitale Welt .
  8. ^ „AMBA AXI and ACE Protocol Specification“ (PDF) . Arm Ltd. 22. Februar 2013. Abgerufen am 28. November 2025 .
  9. ^ „AXI Interconnect v2.1 LogiCORE IP Product Guide“ (PDF) . Xilinx. 17. Mai 2022. Abgerufen am 28. November 2025 .
  10. ^ „AXI Thread IDs (TIDs) – SoC Basics“ (PDF) . Institut für Eingebettete Systeme, TU Graz. 2021. Abgerufen am 28. November 2025 .
  11. ^ 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 .
  12. ^ 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 .
  13. ^ 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 .
  14. ^ 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 .
  15. ^ 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 .
  16. ^ 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 .
  17. ^ 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 .
  18. ^ a b Arm Holdings. „AMBA AXI and ACE Protocol Specification“ (PDF) . developer.arm.com . S. 44. Abgerufen am 5. Juli 2019 .
  19. ^ 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 .
  20. ^ 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 .
  21. ^ 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 .