www.mikrocontroller.net

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


Autor: Mario M. (mariom)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Autor: Mario M. (mariom)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mario M. (mariom)
Datum:

Bewertung
0 lesenswert
nicht 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/applic...

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.