Forum: FPGA, VHDL & Co. Spartan3E bootet weder aus SPI Flash noch aus Platform Flash


von Andreas N. (poolspieler)


Lesenswert?

Hallo,
ich habe mir ein Custom Board für einen XC3S500E-FG320 aufgebaut.
Im Prinzip funktioniert es schon ganz gut - aber leider nur, wenn ich es 
über JTAG Flashe.
Ich bringe weder das Platform Flash (XCF04S) noch das SPI Flash (M25P80) 
zum laufen. Das Board ist stark an das Design des Spartan3E Starter Kits 
angelehnt.
Die MODE-Pins sind korrekt belegt:
000 für XCF04S
100 für SPI
für HSWAP habe ich sowohl einen Pullup, als auch einen Pulldown 
ausprobiert - keine Änderung (Pulldown bzw. offen steht im 
Referenzdesign...)
VS0-VS2-Pins sind auf 111 über Pullups gelegt
Bei beiden Bausteinen kann ich während des Power-ups an den Clock- und 
Datenpins Signale erkennen. Dauern um die 5ms - dann ist Ruhe. Die 
DONE-LED bleibt aus :-(
Wenn ich nach dem Powerup kurz auf die PROG-Taste drücke, dann kommt ein 
kontinuierlicher Rechteck auf dem Clock-Signal - bis ich das Board 
stromlos mache...

Programmieren kann ich beide Bausteine über IMPACT und das USB-II Cable. 
Ich kann die Bausteine auch auslesen (READBACK) und erhalte sinnvolle 
Daten.
Jetzt bin ich am Ende - und hoffe, dass mir hier jemand helfen kann!!!

Beste Grüße,
Andreas

von hp-freund (Gast)


Lesenswert?

Vielleicht hilft das:

http://www.edaboard.com/ftopic266981.html

vorletzter Beitrag.

von Andreas N. (poolspieler)


Lesenswert?

Hallo hp-freund,
vielen Dank für Deine Antwort.
Den Link kannte ich leider schon. Bei Meinem Design liegt der CS-Pin des 
XCF04S über einen Jumper auf GND. Mit einem Oszi habe ich mir auch schon 
die Signale angeschaut. Wie gesagt, die Pegel sehen eigentlich gut aus. 
Keine Störungen auf den Signalen zu erkennen.
Ich habe heute mal in die Richtung "falsche Konfiguration" gesucht:
Stichwort CCLK --> habe auch im bitgen.ut auf CCLK umgestellt - ohne 
Erfolg. Was aber auch zu Erwarten war, weil das ja IMPACT autmatisch 
macht (machen sollte...).

FRAGE:
Kann es evtl. am Powerup liegen?
In welcher Reihenfolge müssen die Spannungen CORE, AUX und IO kommen?
--> habe schon diverse Datenblätter gewälzt - aber keine richtige 
Antwort gefunden. Anscheinend gibt es wohl Probleme, wenn +3,3V am 
Schluss kommt...???

Ich hoffe, mir kann jemand helfen :-(((

Gruß,
Andreas

von Andreas N. (poolspieler)


Lesenswert?

Hallo nochmal,
ich bin langsam (mal wieder) am verzweifeln :-(
Ich habe nun nochmal mit dem XCF04S herumprobiert (auch wenn ich 
eigentlich langfristig mit dem SPI-Flash arbeiten muss...)
Auf der D0-Leitung sehe ich, dass sowohl nach dem PowerUp, als auch nach 
der Betätigung des PROGB-Buttons für ca. 4 Sekunden daten kommen. Die 
Daten scheinen auch mit dem, was ich hineinprogrammiert habe 
übereinzustimmen - habe mir mal die MCS-Datei angesehen. Sie ist etwa 
halb voll - und es kommen auch 50% Daten, dann nur noch 0xFF...
Seltsamerweise kommt CCLK ewig mit 1,25 MHz - auch nach dem die Daten zu 
Ende sind...
DONE wir natürlich nicht HIGH :-((

--> Kann mir irgendjemand weiter helfen? Ist der Fehler in der Hardware, 
oder in der Software zu suchen? Ich habe mir schon ein Starterkit 
bestellt - nur um dieses Problem einzukreisen (werde es aber erst 
nächste Woche erhalten...)

Beste Grüße,

Andreas

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> DONE wir natürlich nicht HIGH :-((
Schon mal in den Optionen von "Generate Programming File" (Rechtsklick) 
mit dem Häckchen bei "Drive DONE pin high" herumprobiert?

von Iulius (Gast)


Lesenswert?

>> habe mir mal die MCS-Datei angesehen. Sie ist etwa
halb voll - und es kommen auch 50% Daten, dann nur noch 0xFF...


ich würde mal sagen du hast eine zu kleine Flash Größe ausgewählt und 
flasht nur die Hälfte des Bitfiles.

Regel Nummer 1 : wenn du du mit Impact das MCS nicht genau so auslesen 
kannst wie du es reingeschrieben hast, dann kann es gar nicht 
funktionieren.

Einzige Ausnahme : wenn der Flash größer ist als das Bitfile kommt 
danach noch Müll, den kann man ignorieren.

Aber wenn du etwa 1mb nur korrekt ausliest und danach nur FFs kommen und 
die original mcs 2mb groß ist, dann ist auf jeden Fall etwas falsch 
gelaufen.


Habe mich selbst ne ganze Zeit mit dem MCS rumgeschlagen, deswegen gilt 
bei mir immer : MCS auslesen und mit DIV-Tool mit der alten Vergleichen. 
Sollte ein Unterschied vor dem End of file (Befehl "01" im original mcs) 
auftreten, dann ist der Flash vorgang definitiv gescheitert und ein 
konfigurieren aus dem Flash ist nicht möglich.

von Andreas N. (poolspieler)


Lesenswert?

Hallo,
danke nochmal für Eure Antworten!

@Lothar: Diese Option habe ich auch schon ausprobiert - hat keine 
Veränderung gebracht.

@Iulius:
Die Flashgröße ist schon OK. Das sind 4M Platz. Benötigt wird etwas über 
2M. Der Flash ist zu 53% beschrieben. Ich bin mir sehr sicher, dass im 
Flash die selben Daten stehen, wie in der MCS-Datei. Habe sowohl ein 
Verify (gab keinen Fehler!) über JTAG gemacht, als auch die Daten über 
Readback ausgelesen und verglichen:
1
:10543000040000000400000004000000040000005C
2
:10544000040000000400000004000000040000004C
3
:105450000C000180000000A00C000580000000008E
4
:105460000C0000800000FAEA0C000180000000B08F
5
:10547000040000000400000004000000040000001C <-- bis hier hin alles das selbe
6
--> ab jetzt kommen die 0xFF
7
:10548000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C
8
:10549000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C
9
:1054A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C
10
:1054B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC
11
:1054C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC
12
:1054D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC
13
14
--> Und das abschliessende EndOfFile (Du meintest wahrscheinlich Befehl 0x00 - oder?)
15
:00000001FF
16
--> Man könnte natürlich darüber nachdenken, ob das EOF VOR den ganzen 0xFFs kommen müßte...???
--> Und genau das sehe ich auch auf dem Oszilloskop.
1,84 Sekunden sich ändernder Datenstrom
1,56 Sekunden sich nicht ändernder Datenstrom (0xFF)

Ich habe irgendwie den bösen Eindruck, dass mein FPGA defekt ist. Ich 
werde mal eine weitere Leiterplatte bestücken und ausprobieren. Ich 
kanns mir zwar nicht vorstellen, aber das ist jetzt die einizige 
Möglichkeit, die es noch auszuschließen gilt...

Für weitere Vorschläge bin ich aber trotzdem dankbar!

Beste Grüße,

Andreas

von Andreas N. (poolspieler)


Lesenswert?

Hallo,
das war es wohl auch nicht :-(
Die neue Leiterplatte geht auch nicht. OK, jetzt könnte man noch über 
einen FPGA-Serienfehler nachdenken - das halte ich aber dann schon sehr 
weit hergeholt...

Hat noch jemand Ideen?
Kann jemand evtl. ein bei Ihm funktionierendes bit- UND mcs-File posten?
--> Es geht natürlich um keine Funktion, sondern nur darum das FPGA zu 
flashen...

Beste Grüße,

Andreas

p.s.:
@Iulius: Du hattest natürlich Recht mit dem INTEL-Befehl 0x01... ;-)

von Iulius (Gast)


Lesenswert?

Naja, sowas hatte ich auch schon.

Teilweise waren mehrere Zeilen mit FFs gefüllt (flash hat nichts 
geschrieben), teilweise waren nur ein paar Bits nicht geschrieben, aber 
weil beim Auslesen eine Checksumme oder CRC gebildet wird bricht das 
FPGA ab.

Das geht soweit das es sich trotz nur 1 bit Fehler irgentwo im 
ausgelesenen MCS nicht vollständig konfiguriert und somit nicht 
"startet"


Deswegen lese ich zur Verifikation grundsätzlich das komplette MSC 
wieder aus und checke es bis zum "01" (automatisiert mittlerweile 
versteht sich)

Das verify von ISE hab ich noch nie probiert, kann bei gelegenheit mal 
testen ob das anspringt wenn ein Fehler vorliegt.


Wie auch immer, ich bleibe dabei : stimmt es bis zum 01 nicht, dann 
kannst du auf dem Board ewig suchen und messen, es kann nicht 
funktionieren.

von Andreas N. (poolspieler)


Angehängte Dateien:

Lesenswert?

Hallo Iulius,
ich habe mal die MCS-Files angehängt.
Ich denke, dass der DIFF in Ordnung ist - oder?

Gruß,

Andreas

von Andreas N. (poolspieler)


Lesenswert?

Nach fast 4 Tagen Suche (entspricht ca. 45 Stunden!!!) habe ich den 
Fehler gefunden:
Es muss sowohl die Clock, als auch die Datenleitung mit jeweils 2 100Ohm 
Widerständen gegen 3,3V und GND terminiert werden. zusätzlich noch den 
Reihenwiderstand - und schon geht es. Unterm Strich hattest Du Recht 
Iulius! Wahrscheinlich hat das eine oder andere Bit am Anfang oder am 
Ende der Datenübertragung nicht gestimmt - folgich falsches CRC und kein 
"start"

Ich trinke jetzt erstmal ein Siegesbier!!! ;-)

Beste Grüße und danke für Eure Hilfe!

Andreas

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Es muss sowohl die Clock, als auch die Datenleitung mit jeweils 2 100Ohm
> Widerständen gegen 3,3V und GND terminiert werden.
Das sieht mir aber nach Problemen beim Layout aus...  :-/
Das hättest du aber am Oszi sehen können/müssen (Über- und 
Unterschwinger). Meine konfigurieren alle ohne irgendwelche 
Terminierung.

von Andreas N. (poolspieler)


Lesenswert?

Hallo Lothar,
ich habe mal einen Spartan3 aufgebaut. Der ist damals auch ohne 
Terminierung gelaufen. Da war aber auch nur ein Flash dran.
Hier sind ja zwei dran (M25P80 und XCF04S). Die CCLK-Leitung ist ca. 6cm 
lang - ging leider nicht anders... Es mag sein, dass man auch ohne diese 
Terminierung auskommen kann, wenn die Leitungen kürzer geführt werden.
Xilinx schreibt im Dokument ug332.pdf folgendes:
1
The best signal integrity is ensured by following these basic PCB guidelines:
2
• Route the CCLK signal as a 50 Ω controlled-impedance transmission line.
3
• Route the CCLK signal without any branching. Do not use a “star” topology.
4
• Keep stubs, if required, shorter than 12.5 mm (0.5 inches).
5
• Terminate the end of the CCLK transmission line.
Im Schaltplan des Spartan3E-Starterkits findet man diese Terminierung 
auch (ist aber sehr gut versteckt...)

Die Über-/Unterschwinger habe ich schon gesehen. Da sie aber kleiner 
100mV waren (ich kann es leider nicht mehr nachmessen...) habe ich denen 
erstmal keine große Bedeutung zugeordnet. Weil ja (meiner Meinung nach) 
keine High/Lowpegel davon betroffen waren.

Beste Grüße,
Andreas

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Terminate the end of the CCLK transmission line
Da klingelt was, da muss ich mal nochmal nachsehen...

Three minutes later...
Richtig, am S3 habe ich auch die Terminierung.
Das Design ohne Abschlusswiderstände war noch beim Spartan 2   :-o


Da fällt mir noch was auf:
> gegen 3,3V und GND
Kann dein FPGA noch 3.3V am Programmierinterface ab?
Aus dem DS099:
1
A 3.3V-tolerant configuration interface simply requires add-
2
ing a few external resistors as described in detail in 
3
"The 3.3V Configuration of Spartan-3 FPGAs" (XAPP453).

von Andreas N. (poolspieler)


Lesenswert?

Hallo,
nur nebenbei:
Ich habe gerade mal die configuration rate auf 25MHz gestellt - 
funktioniert immernoch bestens --> werde ich aber im Zielprojekt 
natürlich nicht verwenden (Weichei...).

Wegen 3,3V:
Um JTAG mit 3,3V nutzen zu können, braucht man Serienwiderstände (siehe 
Datenblatt).
Meine Flashbausteine laufen auch mit 3,3V --> Bank2 wird ebenfalls mit 
3,3V gespeist. Ich habe mich hier strikt an Datenblätter und vor allem 
die Vorlage des Starterkits gehalten. Hoffe ich ;-)

Gruß,

Andreas

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.