Guten Tag, ich habe mal eine grundsätzliche Frage zum AXI4-Protokoll. Nehmen wir an, ich habe einen 128 bit breiten AXI und möchte aber nur ein 64 bit Wort an Adresse 0x8 (64 bit aligned) schreiben. Ich würde jetzt spontan sagen, dass ich dafür awaddr = 0x8 wdata = (my_64_bit_data << 64) wstrb = 0xFF00 setzen muss. Stimmt das so? Meine konkrete Frage daran ist: Die AXI Adressen sind "byte" basiert. Jedoch scheint das für mich in Verbindung mit den Write Strobes redundant. Bzw. anders gefragt: Was passiert, wenn ich Folgendes mache? awaddr = 0x0 -- <- Hier ist jetzt was anders ;) wdata = (my_64_bit_data << 64) wstrb = 0xFF00 Welchen Einfluss haben die unteren Adressbits?
Ich finde das kommt auf das AXI-System an, oder es ist vielleicht im Standard schon klar gestellt. Allgemein zählt das Thema zu "aligend/unaligned" Transfers. Normalerweise bist du schon auf 128bit aligned. Es ist die Frage, ob die Komponenten unaligned Transfers unterstützen. Normalerweise würde ich nein sagen, denn gern werden die unteren Bits abgeschnitten. z.B. 32bit (0x0,0x1,0x2,0x3) -> 0x0, wobei unaligned (0x1-0x3) auch mal einen Bus Error zurückgeben kann. Variante 1) addr 0x0, denn du willst nur in die oberen 64bit awaddr = 0x0 wdata = (my_64_bit_data << 64) wstrb = 0xFF00 Variante 2) unaligned awaddr = 0x8 wdata = my_64_bit_data wstrb = 0x00FF Variante 1 ist für mich die übliche Variante. Trotzdem empfehle ich dir das einfach auszuprobieren.
Ja, hängt von Slave ab. Bei dem AMBA-Viech, das ich zuletzt in der Mache hat, musste man ein verkürztes Alignment bei bestimmten boundaries immer auf 2 Zugriffe aufteilen, mit jeweils invertierten Strobes.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.