Forum: FPGA, VHDL & Co. LatticeMico32 Tutorial mit LatticeECP3 Versa Development Kit


von Rene L. (renel)


Lesenswert?

Hallo zusammen,

bin leider ein Neuling was Softcore µCs auf FPGAs angeht. Deshalb habe 
ich mich dazu entschieden, das LatticeMico32 Tutorial für Diamond 3.1 zu 
absolvieren. Verwende dafür wie auch im Tutorial das LatticeECP3 Versa 
Board mit dem ECP3 LFE3-35EA FPGA.

Bin soweit recht gut zurecht gekommen. Konnte erfolgreich den ersten 
Bitstream per JTAG 1532 Mode als Fast Programm direkt auf den FPGA laden 
und per Debugging Oberfläche der LatticeMico32 C/C++ SPE Software den C 
Code laufen lassen.

Nun komme ich aber zu dem Punkt in dem der C-Code und der FPGA-Bitstream 
zum Deployment auf den SPI Flash auf dem Versa Board vorbereitet wird. 
Nach durchführen dieser Schritte, dem Zusammenführen von C-Code und 
FPGA-Bitstream zu einem SPI Flash Image und dem Aufspielen dieses Image 
auf dem SPI Flash scheint es jedoch, also könnte sich der FPGA nicht 
vollständig initialisieren zu können und daher kann er auch nicht den 
C-Code zum laufen bringen.

Ich habe sämtliche Schritte exakt durchgefüht und das nicht nur einmal. 
Ich habe bereits auch nochmal das gesamte Tutorial durchgeführt, in der 
Vermutung, ich hätte bereits zu Beginn einen Fehler gemacht. Ich habe 
auch den gleichen Bitstream und C-Code auf einem eigens entwickeltem 
Board auf den SPI Flash aufgespielt und da scheint sich zumindest der 
FPGA initialiesieren zu könnten, jedoch fängt der C-Code nicht an zu 
laufen, bzw. der Bootlaoder schafft es nicht den C-Code in den 
Flüchtigen Speicher zu laden. Bin mir da nicht sicher, wo der Fehler 
genau liegt.

Habe bereits auch den Software Developers User Guide zur Hilfe 
herangezogen mit dem Kapitel SPI Flash Deployement, das konnte mir 
leider aber auch nicht weiterhelfen.

Bin mittlerweile am Ende meiner Ideen was ich noch unternehmen könnte, 
bzw. wo der Fehler liegt. Habe nun gehofft, dass hier vielleicht einer 
Erfahrung mit dem SPI Flash Deployment hat, oder noch besser jemand 
bereits das Tutorial erfolgreich durchgeführt hat und dabei vielleicht 
auch auf diesem Fehler gestoßen ist und eine Lösung dafür hat.

von Duke Scarring (Gast)


Lesenswert?

Rene Lusseni schrieb:
> Bin mir da nicht sicher, wo der Fehler
> genau liegt.
Dann muß man das Problem teilen und sicherstellen, daß die Teile 
funktionieren:

1. Kannst Du den SPI-Flash ohne Softcore auslesen und prüfen, ob das 
richtige drinsteht?
2. Steht im SPI-Flash nur der Programmcode, oder auch die 
FPGA-Konfiguration?
3. Wo steht der Bootloader? Kannst Du im Bootloader Testcode 
unterbringen?
4. Hast Du Zugriff auf Reveal? Kannst Du damit prüfen ob vom Bootloader 
die richtigen Daten aus dem Flash gelesen werden?
5. Welche Art RAM hast Du? SDRAM oder internen Block-RAM (EBR)?
6. Falls SDRAM im Spiel ist: Funtioniert der richtig?

Das wären die Punkte, die ich erstmal prüfen würde.

Duke

von Lattice User (Gast)


Lesenswert?

Passt das erzeugte Image zum Bootmode des FPGAs  (SPI, bzw SPIm)?

von Rene L. (renel)


Lesenswert?

Erstmal danke für die raschen Antworten.

Duke Scarring schrieb:

> 1. Kannst Du den SPI-Flash ohne Softcore auslesen und prüfen, ob das
> richtige drinsteht?
Habe nach dem aufspielen auf den SPI Flash eine Read and Save Operation 
ausgeführt und dann das SPIFlash Image mit der ausgelesenen Datei 
verglichen. Es ergab keine Unterschiede

> 2. Steht im SPI-Flash nur der Programmcode, oder auch die
> FPGA-Konfiguration?
Beides. Die FPGA-Konfiguration wird mit dem Programmcode in ein SPIFlash 
Image gemerged und dann aufgespielt

> 3. Wo steht der Bootloader? Kannst Du im Bootloader Testcode
> unterbringen?
Der Bootloader wird soweit ich das aus dem Tutorial herauslesen + kann 
von dem LatticeMico System beinhaltetem Tool namens "Software 
Deployement Tool" automatisch hinzugefügt. Laut dem Tutorial wird der 
Bootloader direkt an die EBA gesetzt, damit wenn der FPGA initialisiert 
ist, als erstes den Bootloader startet und dieser dann den Programmcode 
ins EBR und Data_IM lädt.

> 4. Hast Du Zugriff auf Reveal? Kannst Du damit prüfen ob vom Bootloader
> die richtigen Daten aus dem Flash gelesen werden?
Der Reveal wird nicht funktionieren, da sich ja nicht einmal der FPGA 
richtig initialisiert.

> 5. Welche Art RAM hast Du? SDRAM oder internen Block-RAM (EBR)?
EBR


Lattice User schrieb:
> Passt das erzeugte Image zum Bootmode des FPGAs  (SPI, bzw SPIm)?
Der FPGA holt automatisch nach Power-On etc. seine Konfiguration aus dem 
SPIFlash

Gruß Rene

: Bearbeitet durch User
von Lattice User (Gast)


Lesenswert?

Rene Lusseni schrieb:
>
> Lattice User schrieb:
>> Passt das erzeugte Image zum Bootmode des FPGAs  (SPI, bzw SPIm)?
> Der FPGA holt automatisch nach Power-On etc. seine Konfiguration aus dem
> SPIFlash
>

Der FPGA kennt genau dafür 2 Modi: SPI und SPIm, wird über ConfigPins 
eingestellt. Wenn du ein Flash Image für SPI erstellst und der FPGA auf 
SPIm konfiguriert ist, funktioniert es nicht. Andersherum auch nicht.

von Rene L. (renel)


Lesenswert?

Lattice User schrieb:
> Der FPGA kennt genau dafür 2 Modi: SPI und SPIm, wird über ConfigPins
> eingestellt. Wenn du ein Flash Image für SPI erstellst und der FPGA auf
> SPIm konfiguriert ist, funktioniert es nicht. Andersherum auch nicht.

Also die ConfigPins (CFG[2:0]) sind auf dem Versa DevBoard alle fest mit 
GND verdrahtet. Also alle auf 0 und somit der SPI Mode.
Wie kann ich denn erkennen oder herausfinden für welchen der beiden Modi 
das Image erstellt wurde?

: Bearbeitet durch User
von Lattice User (Gast)


Lesenswert?

In welchem Format liegt das Image vor?
Als .bit oder als PROM File?

von Rene L. (renel)


Lesenswert?

Lattice User schrieb:
> In welchem Format liegt das Image vor?
> Als .bit oder als PROM File?

.mcs File

: Bearbeitet durch User
von Lattice User (Gast)


Lesenswert?

Rene Lusseni schrieb:

>
> .mcs File

Ok, das ist im Prinzip Intel Hex Format, mache dich damit vertraut (z.B. 
Wikipedia)

Kontrolliere ob das FPGA Bitpattern ab Addresse 0x000000 im .mcs File 
steht.

von Rene L. (renel)


Lesenswert?

Lattice User schrieb:
> Kontrolliere ob das FPGA Bitpattern ab Addresse 0x000000 im .mcs File
> steht.

So weit ich das beurteilen kann, passt alles. die Startcodes sind da, 
die Daten beginnen bei Adresse 0x000..., Datenlängen stimmen mit mit 
Byte Count überein, stichprobenartig passen auch die Prüfsummen und der 
"End of File" Command zum Schluss ist auch da.

von Duke Scarring (Gast)


Lesenswert?

Rene Lusseni schrieb:
> So weit ich das beurteilen kann, passt alles.
Funktioniert es denn ein anderes Design aus dem Flash zu laden? 
Vielleicht eines, welches nicht gleich einen Softcore enthält?

Duke

von Lattice User (Gast)


Lesenswert?

Rene Lusseni schrieb:
> Lattice User schrieb:
>> Kontrolliere ob das FPGA Bitpattern ab Addresse 0x000000 im .mcs File
>> steht.
>
> So weit ich das beurteilen kann, passt alles. die Startcodes sind da,
> die Daten beginnen bei Adresse 0x000..., Datenlängen stimmen mit mit
> Byte Count überein, stichprobenartig passen auch die Prüfsummen und der
> "End of File" Command zum Schluss ist auch da.

Poste mal die ersten 20 Zeilen,  als Anhang oder in code Tags.

von Rene L. (renel)


Lesenswert?

Duke Scarring schrieb:
> Funktioniert es denn ein anderes Design aus dem Flash zu laden?
> Vielleicht eines, welches nicht gleich einen Softcore enthält?

Andere Images funktionier. Die vermutung das am Flash was nicht passt 
hatte ich nämlich auch schon ;-)

von Lattice User (Gast)


Lesenswert?

Rene Lusseni schrieb:

>
> Andere Images funktionier. Die vermutung das am Flash was nicht passt
> hatte ich nämlich auch schon ;-)

Die anderen Images sind auch .mcs oder etwa .bit Files?

Der Diamond Programmer muss für beides unterschiedlich eingestellt 
werden, denkbar wäre ist, dass du veresehntlich einfach die .mcs als 
Text in den Flash schreibst, und der FPGA interpretiert natürlich kein 
Intel Hex.

von Rene L. (renel)


Lesenswert?

> Die anderen Images sind auch .mcs oder etwa .bit Files?
>
> Der Diamond Programmer muss für beides unterschiedlich eingestellt
> werden, denkbar wäre ist, dass du veresehntlich einfach die .mcs als
> Text in den Flash schreibst, und der FPGA interpretiert natürlich kein
> Intel Hex.


Ich kann ohne Probleme die anderen Images entweder als .mcs oder als 
.bit aufspielen. Funktioniert beides

von Duke Scarring (Gast)


Lesenswert?

Rene Lusseni schrieb:
> Funktioniert beides
Gut. Dann der nächste Schritt. Kannst Du ein LED-Blinky und Dein 
Prozessorsystem in ein Design packen?
Damit könntest Du sicherstellen, das Dein Prozessor(+Blinky) Design 
richtig geladen wird.

Duke

von Rene L. (renel)


Lesenswert?

Lattice User schrieb:
> Poste mal die ersten 20 Zeilen,  als Anhang oder in code Tags.
1
:10000000FF0032862E2E96C6A604CAA6B696C6F65F
2
:100010007626AEC62EF64E04C2F64E0EF64E862E4E
3
:1000200096F6760442962ECE2E4EA686B6006AA688
4
:100030004ECE96F6765C0404040404040404042200
5
:100040009686B6F67626046AA64ECE96F67604CC4A
6
:10005000748C740C749C6C0042962ECE2E4EA68628
7
:10006000B604CA2E862EAECE5C0462967686360420
8
:100070006AA64ECE96F676048C74CC9C0022A6CE50
9
:1000800096E676047686B6A65C040E36862E66F66E
10
:100090004EB64CFA0E36862E66F64EB64C7476C6C2
11
:1000A0002600824EC616962EA6C62EAE4EA65C041E
12
:1000B000A60EACC60C0C000A864E2E5C043262A260
13
:1000C000CCB4CCACA282B41C620A42E2822C1C2CBE
14
:1000D0000022862EA65C042AAEA604B2869E040CDC
15
:1000E0006C048C2C5CAC9C5C2C4C044C0C8C2C005C
16
:1000F0004AF6EECE5C044C0C6CEC00C2F636CE5CDC
17
:1001000004CC2C8C4C0042962ECE5C04EC0CAC4CF7
18
:100110006C0C2C004AA686264686C6D65C040404CF
19
:100120000404F2666600CAA6C6AE4E962E9E5C0415
20
:1001300004040404F266660042962ECE2E4EA68675

von Rene L. (renel)


Lesenswert?

Habe das Problem gefunden!!!!!!!!

Es war ein Clock Problem.
Im Tutorial wird der SPI Flash mit dem FPGA Pin B22 (MCLK) verbunden. 
Dies ist auch so auf der Hardware. Soweit also in Ordnung. Jedoch wird 
per SYSCONFIG vom FPGA die Frequenz beim StartUp auf 21MHz und im 
laufenden Betrieb auf 26MHz gesetzt. Die maximale Frequenz die jedoch 
der der SPIFlash auf dem VersaBoard im DataRead verträgt ist 20MHz. Kann 
ja also nicht funktionieren.

Auf jeden Fall noch ein großes Dankeschön an euch beide für eure Hilfe 
und Unterstützung.

Gruß Rene

von Duke Scarring (Gast)


Lesenswert?

Rene Lusseni schrieb:
> Habe das Problem gefunden!
Super. Und Danke auch für die Rückmeldung. Da braucht der Nächste 
vielleicht etwas weniger Zeit für die Fehlersuche.

Duke

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.