Hallo zusammen, ich arbeite derzeit an einem Projekt, bei dem ich selbst beschriebene Logik in einem System-on-Chip(wahrscheinlich ein Zynq-7000) implementieren will. Dabei soll durch Software, die auf einem ARM-Prozessor läuft auf die Logik zugegriffen werden. Ich würde dafür gerne ein registerartiges Interface zur Steuerung und Konfiguration benutzen. Grundsätzlich scheinen ARMs AHB und APB Busse dies zu können. Nun meine Frage: Hat jemand von euch damit schonmal etwas gemacht? Muss ich das Busprotokoll selbst implementieren oder gibt es da vorgefertigte Komponenten? Gibt es zu AHB und APB Dokumente die genauer erklären wie man sie im eigenen Design benutzt? Ich suche bereits mehrere Tage nach einer Lösung, kann allerdings nicht wirklich etwas dazu finden. Viele Grüße und einen tollen Start in die Woche, pantagruel
Das Busprotokoll im Slave musst du selbst implementieren (außer du findest einen CORE, der dir das auf dein proprietäres IF übersetzt). Wie aufwändig das ist, hängt davon ab, was dein Slave unterstützen muss, also was dein Master erwartet (bzw. ob du deinen Master konfigurieren kannst nur bestimmte Features auf dem IF zu nutzen.) Im einfachsten Fall konfigurierst du dein AHB-IF als AHB-Lite ohne Burst-Support und mit fester Datenbreite. Dann bleiben vom AHB-IF für deinen Slave als Kontrollsignale nur noch ein enable (HSEL, HTRANS), ein write enable (HWRITE) und eine Flusskontrolle (HREADY, HREADYOUT). Wie das ganze angesteuert wird, findest du z.B. hier http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ihi0033a/index.html (oder auch ohne Registrierung über google "AHB specification").
wenn du den Zynq nutzt, dann kannst du doch Vivado nutzen. Für den simpelsten Einstieg kannst du AXI (Zynq sollte doch AXI Bus haben? egal, da gibt's was) GPIO Modul verwenden. Im weiteren Schritt könnten Register über den EPC-Controller angesteuert werden. Das schwankt alles abhängig von deinen Anforderungen. Schau einfach erstmal die Bus-IP-Cores für den Zynq an.
Beim ARM Kern des ZYNQ kommt ein AXI Bus zum FPGA Teil raus. Hier hatte ich dazu schonmal was geschrieben und ein Tutorial verlinkt: Beitrag "Re: Zynq VGA - Blockram füllen"
Okay, alles klar. Vielen Dank für eure Hilfe. Werde mich da mal reinlesen :) Habe noch nie etwas mit Vivado gemacht, dachte nur an den Zynq weil er mir für meine spätere Anwendung als geeignet erscheint. Wie würdet ihr beispielweise einen UART mit APB Interface implementieren? Wenn ich mehrere Register hab, muss ich dann ein RAM oder ähnliches nehmen und es mit einem Descriptor füllen? Ich weis einfach nicht wie man so etwas geschickt implementiert. Viele Grüße, pantagruel
pantagruel schrieb: > Wie würdet ihr beispielweise einen UART mit APB Interface > implementieren? Ich würde ein Blockdesign erstellen. Zynq reinsetzen. Zweitens, IP-Katalog öffnen und ein AXI Uart-lite (da beide AXI-Anschlüsse besitzen) auswählen und reinsetzen. Nun noch verbinden und fertig. In dieser Richtung gibt es Tutorials. pantagruel schrieb: > Wenn ich mehrere Register hab, muss ich dann ein RAM oder ähnliches > nehmen und es mit einem Descriptor füllen? Willst du Daten einfach von deinem Prozessor ablegen oder willst du Register ansteuern? Ersteres -> einfach im Blockdesign ein BRAM anhängen Letzteres -> billigste Variante ist AXI-GPIO
Moin, die Register als BRAM zu implementieren ist Overhead, mach einfach einen einfachen Register-Decoder. Gibt genügend Beispiele, z.B. im gen/-Verzeichnis des MaSoCist (Beitrag "SoC release ('MaSoCist')"), die Registermaps der einzelnen Cores kannst du dann mit dem Tool deiner Wahl (in dem Fall wohl Vivado) wrappen. Der Zynq ist halt der totale Overkill für den Anfang, aber wenn du wahnsinns Lust hast, die ARM-Cores standalone (bare metal) zu programmieren, kannst du mit u-boot experimentieren. Typischerweise lohnt sich eine Wishbone-Bus-Bridge, dann kann man auch die OpenCore-Geschichten (die leider sehr gemischter Qualität sind) anbinden. Grüsse, - Strubi
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.