Forum: FPGA, VHDL & Co. Nios2 Flash Programmer EPCS


von Björn B. (elmo)


Lesenswert?

Hallo,

ich versuche jetzt schon seit längerem, meine FPGA Konfiguration + Nios2 
Software im EPCS Configuration Flash unterzubringen. Dazu will ich den 
Flash Programmer der Nios2 EDS nutzen.
Im SOPC Builder habe ich den EPCS Controller hinzugefügt. Wie muss nun 
eigentlich der Reset Vector werden?

Kann ich den Reset Vector auf mein bisheriges SRAM zeigen lassen, oder 
muss er zwangsläufig aufs EPCS zeigen? Beides habe ich ohne Erfolg 
ausprobiert.

Die FPGA-Config konnte ich wohl mithilfe des Nios programmieren. Leider 
wird das Programm, das sich ebenfalls im EPCS befinden sollte, nicht 
gestartet.

Gruß
Björn

von Kest (Gast)


Lesenswert?

Reset vector soll auf EPCS zeigen.

Dann kannst Du mit:
sof2flash --input=foo.sof --output=foo.flash --epcs
elf2flash --input=nios_fw.elf --output=nios_fw.flash --epcs 
--after=foo.flash

die *.flash Dateien erstellen.

Diese kannst Du dann mit
$SOPC_KIT_NIOS2/bin/nios2-flash-programmer "foo.flash" --base=0x9000000 
--epcs --accept-bad-sysid --device=1 --instance=0 '--cable=USB-Blaster 
on localhost [USB-0]' --program

und dann mit

$SOPC_KIT_NIOS2/bin/nios2-flash-programmer "nios_fw.flash" 
--base=0x9000000 --epcs --accept-bad-sysid --device=1 --instance=0 
'--cable=USB-Blaster on localhost [USB-0]' --program

programmieren.

Im FPGA soll zu diesem Zeitpunkt ein FPGA Design mit EPCS-Base Addresse 
0x900000 laufen (oder eben andere, aber gleiche). Über JTAG geht es halt 
am schnellsten.

Oder, Du erstellst eine pof Datei mit FPGA-Konfiguration und NIOS 
Firmware und flashst sie über active serial rein.

Hoffe, ich konnte Dir etwas helfen

Kest

von Björn B. (elmo)


Angehängte Dateien:

Lesenswert?

Hallo,

erstmal vielen Dank für die ausführliche Beschreibung. Das Erstellen der 
.flash Dateien und programmieren hat damit funktioniert. Die FPGA 
Konfiguration klappt damit auch. Leider startet mein Nios aber immer 
noch nicht.
Der Reset Vector zeigt nun ins EPCS. Was mich wundert: im Linker Script 
zeigen sämtliche Sections noch ins SRAM (siehe Anhang). Lege ich nun 
.text dort mit uns EPCS, passt es nicht mehr mit rein, da mein EPCS 
angeblich nur 2k Speicher hat?
Wo liegt mein Verständnisfehler? ;-)

Gruß
Björn

von Kest (Gast)


Lesenswert?

Ich mache es folgendermaßen: reset-Vector wird auf EPCS gesetzt (im QSYS 
bei NIOS Reset Vector). Die Firmware läuft dann aber aus dem DDR2 
Speicher. Nach dem Booten sorgt also ein Teil im EPCS Controller dafür, 
dass alles in den DDR2 Speicher umkopiert wird (bei Dir also ins SRAM).

Deine Sections sehen erstmal richtig aus. Ich habe allerdings noch einen 
kleinen "Trick" gemacht: ich habe noch zusätzlich einen ONCHIP_RAM für 
"exceptions". Ob es daran liegt, weiß ich leider nicht.

Sorry, dass ich da jetzt nicht weiterhelfen kann

Kest

von Björn B. (elmo)


Lesenswert?

Ich werde noch ein wenig rumprobieren und suchen. Irgendwie muss es ja 
zum laufen zu bringen sein. Habe auch etwas von einem "Boot-Copier" 
gelesen, der eben das Nios Programm, vor der Ausführung, vom EPCS in 
einen anderen Speicher kopieren soll.
Trotzdem danke für Deine Hilfe. Sobald es läuft, poste ich nochmal, 
woran es lag.

Gruß
Björn

von Kest (Gast)


Lesenswert?

Ach noch was, welche Quartus Version hast Du? Ich hoffe doch 12 und 
aufwärts?
Das mit dem Bootcopier habe ich auch früher gemacht (mit Quartus 8/9). 
Aber mittlerweile muss man das nicht mehr machen (solange man nur ein 
FPGA-Konfigurationsfile und eine NIOS-Konfiguration hat)

Kest

von Björn B. (elmo)


Lesenswert?

12.0 sp2 Web Edition unter Linux. Ok, das erklärt vermutlich, warum mich 
das Tool nie explizit nach dem File für den Copier gefragt hat :-)

von Dustin F. (nudeleisen)


Lesenswert?

Kest schrieb:

> die *.flash Dateien erstellen.
>
> Diese kannst Du dann mit
> $SOPC_KIT_NIOS2/bin/nios2-flash-programmer "foo.flash" --base=0x9000000
> --epcs --accept-bad-sysid --device=1 --instance=0 '--cable=USB-Blaster
> on localhost [USB-0]' --program
>
> und dann mit
>
> $SOPC_KIT_NIOS2/bin/nios2-flash-programmer "nios_fw.flash"
> --base=0x9000000 --epcs --accept-bad-sysid --device=1 --instance=0
> '--cable=USB-Blaster on localhost [USB-0]' --program
>
> programmieren.

Wenn man da die selbe Base-Adresse angibt, würde dann nicht nachdem ich 
das sof-File drauf geflashed werden anschließend durch die niosII 
Firmware das sof-File überschrieben werden?

lg Dustin

von Dustin F. (nudeleisen)


Lesenswert?

Dustin F. schrieb:

>
> Wenn man da die selbe Base-Adresse angibt, würde dann nicht nachdem ich
> das sof-File drauf geflashed werden anschließend durch die niosII
> Firmware das sof-File überschrieben werden?

ahja.. wer lesen kann ist klar im Vorteil:

Kest schrieb:
> elf2flash --input=nios_fw.elf --output=nios_fw.flash --epcs
> --after=foo.flash

--after übersehen.

Danke! Funktioniert Super!!!

lg Dustin

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.