Forum: Projekte & Code AVR SoC - Wishbone-kompatibel - FPGA


von Mario M. (Gast)


Angehängte Dateien:

Lesenswert?

Hallihallo zusammen,

ich hab mal ein kleines SoC (System-on-a-Chip) auf die Beine geworfen. 
Die Basis ist ein AtMega103 softcore von opencores.org. (8-Bit AVR)

Dem habe ich ein Wishbone-interface verpasst, sodass man damit jegliche 
wishbone-basierte Peripherie steuern kann.

Das Projekt implementiert eine relativ einfache Ausbaustufe des SoC, es 
ist als Grundbaustein gedacht, falls man mal auf die Schnelle einen 
pflegeleichten und eventuell schon vertrauten (AVR) softcore in seinem 
FPGA-Design braucht. Damit entfällt jegliches "Gebastel" z.B. mit 
Picoblazes etc. etc.

Als Beispiel wird im Projekt im Anhang ein UART-Core angesteuert und die 
LEDs und Schiebeschalter meines "Xilinx Spartan-3E Starer Kits" werden 
ebenfalls verwendet.

Dank des Wishbone-Interfaces 
(http://en.wikipedia.org/wiki/Wishbone_%28computer_bus%29) kann weitere 
Peripherie rasch und ohne Probleme angestöpselt werden. Es werden sowohl 
der IO- als auch der RAM-Bus des AVR als Wishbone-Bus hinausgeführt.

Die firmware für den AVR wird wie jede normale firmware eines AtMega103 
entwickelt, z.B. mit WinAVR.
Mittels eines speziellen tools von Xilinx (data2mem, das jeder 
ISE-Installation beiliegt) muss nicht jedes Mal, wenn man die firmware 
updaten will, der ganze core neu implementiert werden. Das tool kann 
nämlich direkt einen vorhanden Bitstream mit einem entsprechenden 
.elf-file zu einem neuen Bitstream modifizieren, welcher dann die BRAMs 
des Programmspeichers korrekt lädt beim Initialisieren des FPGA. Man 
muss also nur den Bitstream mit dem Tool neu erzeugen und schwupps ist 
die neue firmware im FPGA. Dauert keine 5 Sekunden.

Weitere Infos gibts in der Doku im .zip des Projekts Anhang.

Ich bin jetzt auch nicht der VHDL-Profi, falls also jemand 
Verbesserungsvorschläge hat, bin ich gerne offen dafür!

Herzlichen Gruss und viel Spass damit!
Mario

von Simon K. (simon) Benutzerseite


Lesenswert?

"Gebastel" mit MicroBlaze? Ich hab zwar noch nie was mit FPGAs gemacht, 
aber ist MicroBlaze nicht dieser Xilinx eigene Prozessor? Warum 
Gebastel?
Und woher kommt eigentlich die Intellectual-Property von dem AVR von 
opencores.org? Hat die möglicherweise einer nachgebastelt? ;-)
In dem Falle wäre Letzteres mehr Gebastel als Ersteres :-)

von Mario M. (Gast)


Angehängte Dateien:

Lesenswert?

Hab noch ein Update, die GPO- und GPI-Module waren ein bisschen crap....

Im Anhang die verbesserte Version, nun wird auch das LCD des 
Starter-Kits noch unterstützt und von der firmware angesteuert.

Lg
Mario

von Michael (Gast)


Lesenswert?

Genial! Tolle Arbeit.

Ach, hätte ich jetzt doch Zeit, mich mal damit zu beschäftigen :-(

Na ja, vielleicht später mal :-)

Vielen Dank.

von Mario M. (Gast)


Lesenswert?

Hier noch ein paar Hinweise, z.B. für die Portierung auf andere/ältere 
FPGAs:

DCM: Das Design braucht 2 Clocks: Beide à 30MHz (oder weniger), und 
beide  180° phasenverschoben zueinander. Im Spartan-3E bewerkstelligt 
das ein einzelner DCM problemlos.

Speicher: Die 20 BRAMs des Spartan-3E auf dem Xilinx-Starter-Kit werden 
momentan voll ausgenützt. Den Speicherbedarf des AVR kann man aber 
verkleinern:

Am einfachsten ist es, wenn man dem AVR etwas SRAM abschneidet. Dazu 
muss man lediglich die BRAMs neu konfigurieren und anordnen. Man muss 
einfach irgendwie auf 8 Bit Busbreite kommen.
Hier steht für den Spartan-3E wie's geht mit der BRAM-Benennung und 
Konfigurierung:
http://www.xilinx.com/support/documentation/application_notes/xapp463.pdf

Nachteil: Man braucht meist eher SRAM als Programmspeicher...

Beim Programmspeicher wirds etwas kniffliger, hier muss man nämlich 
aufpassen, dass man die Initialisierungskonstanten korrekt benennt und 
dass diese Benennung mit dem Inhalt im prog_mem.bmm - file konsistent 
ist.
Man muss also beide files anpassen - das VHDL-File mit dem 
Programmspeicher und das .bmm-File, damit die Initialisierungskonstanten 
identisch sind.
Das .bmm-File wird vom data2mem tool benötigt, damit dieses weiss, wie 
der Speicher aufgebaut ist und welche Daten wie und wo hingehören.
Aber ansonsten kann man den Programmspeicher gleich zusammenschnipseln 
wie das SRAM, hier muss man einfach irgendwie auf 16-bit Busbreite 
kommen.

Herzlichen Gruss
Mario

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
Noch kein Account? Hier anmelden.