Forum: FPGA, VHDL & Co. Lattice Mico32 : C-Code von Flash abspielen


von Flo P. (Gast)


Lesenswert?

Hallo,

Ich habe einen Lattice ECP2-50 mit integrierten Mikroprozessor Mico32.
Das verwendete Demoboard ist das Hpe mini (ECP2-50)

Da der C-Code sehr groß ist und dafür die EBR's in Zukunft nicht 
ausreichen werden (kleinerer ECP2), muss der Code von einem externen SPI 
Flash aus betrieben werden. (Einige ebrs für die read/write Variablen 
stehen zu Verfügung.)
Ich verwende das SPI Flash welches auch die Bitstream Daten des FPGAs 
enthält.

Es gibt zwar eine Anleitung für XIP (Execute in Place) jedoch 
funktioniert es nicht bzw ist es unzureichend erklärt.

Falls jemand bereits Erfahrung auf dem Gebiet hat bitte ich um Hilfe.

Besten Dank
Flo

von Klaus F. (kfalser)


Lesenswert?

Ohne jetzt den Board oder die Baustein zu kennen, aber ohne externes RAM 
wird das nicht gehen.
Du kannst zwar den Code möglicherweise im Flash unterbekommen, aber die 
Ausführung direkt vom SPI Flash erscheint mir unsinnig, dazu ist das SPI 
Interface nicht gedacht und viel langsam.
Wenn Du RAM im System hast, dann kannst Du den Code beim Starten aus dem 
Flash in das RAM umkopieren, und der Microprozessor führt das Programm 
von dort aus.

von Flo P. (Gast)


Lesenswert?

Hallo Klaus,

leider bringt mir die Variante nichts wo der C-code aus dem Flash ins 
system ram kopiere, da ich dann erst wieder die vielen EBR 
speicherblöcke des FPGA bräuchte.
Laut Lattice gibt es eine Möglichkeit den C-Code "extern" abzulaufen und 
nur die Variablen in EBRs zu speichern. Leider schlugen meine Versuche 
bis lang fehl.

Mfg

von Schrotty (Gast)


Lesenswert?

>Es gibt zwar eine Anleitung für XIP (Execute in Place) jedoch
>funktioniert es nicht bzw ist es unzureichend erklärt.

Lattice bezieht sich hier ganz offensichtlich auf einen nichtflüchtigen 
Speicher am FPGA. Aber es steht kein Wort über SPI-Flash geschrieben. 
ich bin mir 100%ig sicher, dass die Ausführung in einem parallelen Flash 
gemeint ist. Und sowas geht natürlich problemlos und ist nur ein 
bisschen langsamer, als über´s RAM.

von Flo P. (Gast)


Lesenswert?

Hallo,
Es wird erwähnt, dass der Code in ein SPI PROM geladen werden kann 
(letzte seite im PDF). Das sich dieser nichtflüchtige Speicher im FPGA 
befinden muss steht meines Erachtens nach nicht im PDF.
Das das C Programm dadurch langsamer rennt als von einem parallelen 
Flash ist mir klar.

Mfg

von Klaus F. (kfalser)


Lesenswert?

Meiner Meinung wird es die Möglichkeit geben, das Programm entweder aus 
einem externen RAM oder aus einem externen, PARALLELEM Flash 
auszuführen.

Führt man das Programm aus einem externen RAM aus, dann muß das Programm 
dort vorher natürlich reingeladen werden. Dies erledigt ein Bootloader, 
der das Programm vor der Ausführung aus einem Flash ins RAM kopiert. In 
diesem Fall kann das Flash auch ein SPI Flash sein, da die Ladezeit 
keine so große Rolle spielt, und das Flash sequentiell ausgelesen und 
ins RAM kopiert wird.

Bei einer Ausführung aus externem Flash, muss das Flash meiner Meinung 
nach zwingend ein paralleles Flash sein. Bei der Programmausführung 
müssen zufällig verteilte Adressen aus dem Flash gelesen werden, nur mit 
einem parallelel angeschlossenem Flash erreicht man Zugriffzeiten um die 
50-100ns.
Eine serielle Adressierung des Flashs wäre dabei viel langsamer und die 
Ausführung des Programms viel zu stark gebremst.
Der Zugriff auf das Flash über SPI ist einfach nicht dafür gedacht.

Aber nochmals wiederholt, das sind allgemeine Überlegungen, ich kenne 
weder das Lattice Board, noch den Prozessor.

von Schrotty (Gast)


Lesenswert?

Ich glaube auch nicht, dass das funktioniert. Selbst, wenn es so in der 
APP-Note steht. In denen steht manchmal viel Mist drin.
In der AppNote zu deinem Thema steht z.B.:
"code run from the non-volatile memory is likely to be slower than code 
run
from a non-volatile memory"

Aha! Code aus einem nichtflüchtigen Speicher läuft also langsamer als 
Code aus einem nichtflüchtigen Speicher.

Das hat jetzt nicht direkt was mit deinem Problem zu tun, sondern soll 
vielmehr zeigen, dass in solchen AppNotes auch viel Mist drin steht.

Daher vermute ich mal, dass das "SPI" auch irgendwie in die AppNote 
gerutscht ist, ohne, dass es da hingehört.

Aber ich lasse mich gern eines besseren belehren.

von Arndt B. (Firma: Helion GmbH) (bussmann)


Lesenswert?

Die Appnote hat da schon recht.

Das Micosystem ist ein Wishbonesystem. Jede der Wishbonekomponenten, die 
Speicher enthalten (und seien es SPI Flashes), werden über den Wishbone 
ausgelesen (sowohl Instructions wie auch Daten). Im Falle eines SPI 
Flashes kann es daher sehr lange dauern, bis das angeforderte Datum aus 
dem Flash am Bus anstehen, aber es funktioniert.

Damit solche XIP Dinge funktionieren, muss das Linkerskript aber auch 
die richtigen Speicherbereiche adressieren. Es gibt bei den 
Projekteinstellungen die Möglichkeit die Speicherbereiche für den Code, 
für ROM-Daten und für die RAM-Daten anzugeben. Code und ROM-Daten 
müssten dann auf das Flash verweisen, die RAM-Daten auf die EBRs und 
schon funktioniert es (wichtig: immer in Eclipse öfter mal "clean" vor 
einem "build" benutzen).

Es funktioniert auch die Variante mit dem Bootloader. Angeblich sogar 
erschreckend einfach, habe ich aber noch nicht ausprobiert.

Viele Grüße
Arndt

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.