mikrocontroller.net

Forum: FPGA, VHDL & Co. Softcore - Binary nicht als Blockram sondern in Flash


Autor: Rupplyn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

gibt es bereits einen fertigen Softcore, dessen Binary nicht als 
Blockram eingebunden ist, sondern in einem Flash; welches auch als 
Bootrom für das FPGA dient?
Idealerweise sollte der Softcore, obwohl er aus dem Flash läuft auch auf 
selbiges zugreifen können.

Falls nein, welcher Softcore lässt sich denn dahingehend leicht 
abändern?

Ziel-FPGA ist ein Spartan 3E. Sprache VHDL.

Autor: Morin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> gibt es bereits einen fertigen Softcore, dessen Binary nicht als
> Blockram eingebunden ist, sondern in einem Flash; welches auch als
> Bootrom für das FPGA dient?
> Idealerweise sollte der Softcore, obwohl er aus dem Flash läuft auch auf
> selbiges zugreifen können.

Das ist weniger eine Anforderung an den Softcore selbst als an die 
physikalische Verschaltung zwischen Flash und FPGA. Prinzipiell ist das 
aber möglich - ich benutze zur Zeit ein Entwicklungsboard wo Flash und 
FPGA "passend" verdrahtet sind und mache genau das, was du beschrieben 
hast. Das Board benutzt zwar einen externen CPLD für den 
Programmiervorgang, allerdings aus anderen Gründen - es sollte genauso 
funzen, wenn der FPGA sich selbst programmiert.

Der CPU-Softcore selbst kann normalerweise unverändert übernommen 
werden. "Normalerweise" soll hier heißen, der Softcore benutzt 
irgendeine Art von generischem Bussystem (z.B. OPB oder Wishbone), aber 
das machen praktisch alle Softcores. Du brauchst nur einen Controller, 
um den Flash anzusprechen, aber der ist 1. meist schon irgendwo zu haben 
und 2. notfalls auch einfach zu bauen (solange du nur lesen und nicht 
schreiben willst).

> Falls nein, welcher Softcore lässt sich denn dahingehend leicht
> abändern?

Wie gesagt benutzen praktisch alle Softcores ein generisches Bussystem 
um mit der Außenwelt zu kommunizieren. Du must also i.A. keinen Softcore 
ändern, sondern nur ein "Gerät" an den Bus anhängen. Ausnahme sind nur 
die "kleinsten" Softcores, die den Programmspeicher integriert haben 
(z.B. Picoblaze ohne besondere Tricksereien).

Autor: Rupplyn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Problem ist nicht das Laden des FPGAs über das Flash; das 
funktioniert. Eher ein Verständnis-Problem meinerseits:
Der Adresscounter/Programcounter des Softcores wird ja die Adresse des 
Flash ständig inkrementieren, um step-by-step das binary auszulesen. 
Wenn nun das Programm im Softcore auf den Flash zugreift, verstellt 
dieser ja die Adresse, die durch den PC vorgegeben wurde, sodass das 
Binary nicht richtig ausgelesen wird, oder?

Da ich nun Hobby-mäßig FPGA programmiere, habe ich bisher nur den 
Picoblaze und den AX8 am Laufen gehabt. Welche gehören denn zu den 
"großen", die ich auch kostenlos / auf OpenSource-Basis bekomme?

Autor: Morin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Wenn nun das Programm im Softcore auf den Flash zugreift, verstellt
> dieser ja die Adresse, die durch den PC vorgegeben wurde, sodass das
> Binary nicht richtig ausgelesen wird, oder?

Der FPGA konfiguriert sich beim hochfahren einmal vollständig. In dem 
Moment wo der Softcore überhaupt anfängt zu arbeiten, ist der FPGA 
fertig konfiguriert und braucht den Flash nicht mehr, d.h. ab da kann 
der Softcore so tun, als hätte der Flash überhaupt nix mit der 
Konfiguration zu tun. Einzig die reine elektrische Verschaltung ist 
etwas komplizierter, z.B. muss der FPGA alle Leitungen, die mit der 
Konfiguration zu tun haben, hochohmig schalten usw.

Ansonsten brauchst du wie gesagt einen Flash-lese-controller, der den 
on-chip Bus (an dem der Softcore hängt) mit dem Flash verbindet. Dieser 
Controller ist so geschrieben, als hätte der Flash nur mit dem Programm, 
nicht mit der Konfiguration zu tun (s.o.). Dieser Controller ist in 
meinem Beispiel 100 Zeilen Verilog, also mehr oder weniger "trivial", 
muss aber natürlich passend zum on-chip Bus und zum Flash-Chip 
geschrieben sein.

> Da ich nun Hobby-mäßig FPGA programmiere, habe ich bisher nur den
> Picoblaze und den AX8 am Laufen gehabt. Welche gehören denn zu den
> "großen", die ich auch kostenlos / auf OpenSource-Basis bekomme?

Das kann ich dir leider nicht sagen, da sich alle meine Experimente um 
einen "selbstgebauten" drehen. Den könntest du zwar auch gerne 
verwenden, aber das ist alles noch experimentell.

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Rupplyn:
> Da ich nun Hobby-mäßig FPGA programmiere, habe ich bisher nur den
> Picoblaze und den AX8 am Laufen gehabt. Welche gehören denn zu den
> "großen", die ich auch kostenlos / auf OpenSource-Basis bekomme?

siehe FPGA Soft Core

Duke

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bezweifle dass das Ausfuehren direkt aus dem Boot-Flash Sinn macht; 
bei kleinen Programmen wird die Zugriffslogik mehr Ressourcen benoetigen 
als wenn man das Programm direkt in LUTs oder in einem Block-RAM 
speichern wuerde, und wenn der Prozessor so viel machen soll dass der 
Platz ein Faktor ist wird das Flash die Ausfuerung zu sehr ausbremsen.

Autor: Morin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich bezweifle dass das Ausfuehren direkt aus dem Boot-Flash Sinn macht;
> bei kleinen Programmen wird die Zugriffslogik mehr Ressourcen benoetigen
> als wenn man das Programm direkt in LUTs oder in einem Block-RAM
> speichern wuerde,

Das kann ich nicht bestätigen. Die Lese-Zugriffslogik ist ähnlich wie 
bei einem Block-RAM (Adresse rein, Daten raus); "kompliziert" ist einzig 
das lesen mehrerer Flash-Worte und Zusammensetzen zu einer Instruktion, 
falls eine Instruktion größer ist als ein Flash-Wort, da man beim Flash 
ja nicht die Datenportgröße so wie beim BRAM ändern kann. Da ist aber 
wirklich nicht viel Logik dahinter.

Schreiben ist natürlich ein anderes Thema, aber das ist beim 
Programmspeicher ja normalerweise nicht nötig.

> und wenn der Prozessor so viel machen soll dass der
> Platz ein Faktor ist wird das Flash die Ausfuerung zu sehr ausbremsen.

Das mit dem Ausbremsen stimmt, Flash-Chips sind nicht die schnellsten.

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Andreas:
>... und wenn der Prozessor so viel machen soll dass der
>Platz ein Faktor ist wird das Flash die Ausfuerung zu sehr ausbremsen.

Dafür gibt es Cache (z.B. beim lm32).

Duke

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]
  • [vhdl]VHDL-Code[/vhdl]
  • [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.