Forum: FPGA, VHDL & Co. FPGA Ladelogik


von Wolfgang M. (procrash)


Lesenswert?

Hallo,

kann mir mal jemand erklären wie ein FPGA zu seiner Konfiguration kommt?
Ich hab hier ein Board dass sich die Konfig aus nem SPI Flash holen 
müsste. Tut sie aber nicht und ich habe die Befürchtung der Grund dafür 
liegt darin dass das SPI Flash keinen Takt bekommt.

Wie läuft sowas prinzipiell ab?

von Christian R. (supachris)


Lesenswert?

Damit das klappt muss im Normalfall das FPGA dafür in den entsprechenden 
Mode gebracht werden. Bei Xilinx geschieht das über die Mode Pins. Wie 
genau steht im jeweiligen Configuration User Guide.

von Georg A. (georga)


Lesenswert?

<Glaskugel>
Modepins richtig?
</Glaskugel>

Ansonsten wende dich vertrauensvoll an das Datenblatt des FPGAs, das du 
uns hier verschweigst. Da steht sowas in aller Breite drin.

von Wolfgang M. (procrash)


Lesenswert?

FPGA ist der XCS3502E.

So wie ich das im Datenblatt sehe müssten bei dem Board die Modepins
MO auf 3.3V
M1 auf Low
und M2 auf 3.3V stehen.

Dann müsste Prog_B am FPGA PIN doch auf Low gehen damit dieser sich die 
Config aus dem SPI Flash zieht oder?

Das ist übrigens das Schematic dazu...

http://dangerousprototypes.com/wp-content/media/2010/02/cct-med.png

von Christian R. (supachris)


Lesenswert?

Wolfgang M. schrieb:
> FPGA ist der XCS3502E.

Aha, also XC3S250E :)

> So wie ich das im Datenblatt sehe müssten bei dem Board die Modepins
> MO auf 3.3V
> M1 auf Low
> und M2 auf 3.3V stehen.

Nee, Master SPI Mode hat die M(2:0) = 001

> Dann müsste Prog_B am FPGA PIN doch auf Low gehen damit dieser sich die
> Config aus dem SPI Flash zieht oder?


PROG_B ist ein Eingang. Lässt du den unbeschaltet, startet das FPGA die 
Config, wenn intern alles fertig ist. Ansonsten kannst du mit einem low 
am PROG_B ein Re-Config auslösen oder die Config verzögern, z.B. durch 
einen Reset-Generator.

Lies mal den Configuration User Guide UG332: 
www.xilinx.com/support/documentation/user_guides/ug332.pdf

von Wolfgang M. (procrash)


Lesenswert?

Danke für den Tip, ich schau mal drüber....

von Wolfgang M. (procrash)


Lesenswert?

Hab nochmal mit dem Oszi nachgemessen.

Problem am FPGA ist dass INIT_B nicht auf high geht, der FPGA also 
seinen Config nicht fertig lädt und startet.

PROG_B ist so lange high wie ich die Reset Taste gedrückt halte.

Jetzt habe ich mal ein wenig ins DB eingelesen.

DONE ist mit dem PIC verbunden und aus irgendwelchen diversen Gründen 
bleibt die Datenleitung immer auf Low. Eigentlich sollte diese doch auf 
High gehen sofern alle Daten vom FPGA geladen wurden.

Im Datenblatt steht dass so lange DONE auf Low ist der Startup Prozess 
verhindert wird.

Ich vermute mal dass es also am PIC liegt der die DONE Leitung nicht auf 
high zieht, kann dass sein?

Während des Config Prozesses scheint der FPGA sich Daten zu holen, da 
ich den CCLK Ausgang mal auf's Oszi gelegt habe und ich da nen Takt mit 
1,25MHZ sehen konnte...

FPGA ist wie folgt konfiguriert:
M0 = 1
M1 = 0
M2 = 0

VS0=1
VS1=1
VS2=1

von Josef G. (bome) Benutzerseite


Lesenswert?

Wolfgang M. schrieb:
> DONE ist mit dem PIC verbunden und aus irgendwelchen diversen Gründen
> bleibt die Datenleitung immer auf Low.

Im ISE-Projekt-Navigator gibt es bei Generate Programming File
die Einstell-Möglichkeit "drive DONE-pin high".

von Wolfgang M. (procrash)


Lesenswert?

Hm, jetzt bin ich mir unsicher ob der DONE Pin vom FPGA gesetzt wird 
sobald er die Konfig geladen hat, oder vom PIC sobald er die Konfig zum 
FPGA geschoben hat.

EIgentlich sollte es doch laut Moding PINs vom FPGA gezogen werden oder, 
und somit der DONE Pin vom FPGA gesetzt werden. Ich glaube dass der PIC 
das Ding überwacht und je nachdem die LED ACT treibt.

Wenn du sagst dass die Xilinx Umgebung die Einstellmöglichkeit bietet 
DONE auf HIGH zu treiben, heisst das dass der FPGA das selber macht, 
sobald er fertig mit dem ziehen der Konfig ist?

Woher weiss der FPGA ob er fertig ist? Stellt man die Größe des Flash in 
der Umgebung beim Synthetisieren ein?

Ah. Sehe grade in der Board Doku. Der FPGA zieht die Konfig.

von Thomas T. (knibbel)


Lesenswert?

Wolfgang M. schrieb:
> PROG_B ist so lange high wie ich die Reset Taste gedrückt halte.

Dein Satz ist nicht ganz verständlich. Mit einem Low-Signal auf der 
PROG_B-Leitung startet man den Initialisierungsprozeß. Im Normalfall ist 
PROG_B High.

Vermutung von mir, da ich die Schaltung nicht kenne:
Wenn du die Reset-Taste betätigst, sollte PROG_B auf Low gehen und die 
Konfig-Daten einlesen.


> Jetzt habe ich mal ein wenig ins DB eingelesen.
>
> DONE ist mit dem PIC verbunden und aus irgendwelchen diversen Gründen
> bleibt die Datenleitung immer auf Low. Eigentlich sollte diese doch auf
> High gehen sofern alle Daten vom FPGA geladen wurden.
>
> Im Datenblatt steht dass so lange DONE auf Low ist der Startup Prozess
> verhindert wird.
>
> Ich vermute mal dass es also am PIC liegt der die DONE Leitung nicht auf
> high zieht, kann dass sein?

Der PIC ist nicht für die DONE Leitung verantwortlich, sondern der FPGA. 
Wenn der FPGA die DONE-Leitung nicht auf High setzt, hat er z.B. kein 
gültiges Konfigurations-File geladen/gefunden.

Gruß,
Thomas

EDIT: Da war ich wohl etwas langsam beim tippen...

von Wolfgang M. (procrash)


Lesenswert?

Hm,

jetzt hab ich ne Idee. Die Software des PIC kann ich zum schreiben / 
sowie zum auslesen des SPI Flashs hernehmen. Mal sehen ob die gleichen 
Daten gelesen werden wie geschrieben. Vielleicht ist das ja die 
Ursache...

Was hab ich sonst noch an Möglichkeiten festzustellen ob's ein FPGA 
Problem ist, ob der Flash hinüber ist, oder ob ich schlicht und einfach 
die falsche Software in den Flash geladen habe?

von Weltbester FPGA-Pongo (Gast)


Lesenswert?

Wolfgang M. schrieb:
> Hm, jetzt bin ich mir unsicher ob der DONE Pin vom FPGA gesetzt wird
>
> sobald er die Konfig geladen hat, oder vom PIC sobald er die Konfig zum
>
> FPGA geschoben hat.

Leider bezeichnet Xilinx den Pin funktionslogisch falsch! In den 
Referenz-SCH wird der immer wie lo active verdrahtet, was dazu führt, 
dass die LED aus geht.

Drive Done high braucht man nur, wenn man keinen pullup hat, bzw in 
einer längeren Kette mit mehreren arbeitet.

Im Grunde sollte es so sein, dass die Leitung done auf VDD gepullt ist 
und von jedem einzelnen FPGA runtergezogen wird, das noch unkonfiguriert 
ist. Sobald die Config steht, geht der Pin auf TRistate und überlässt 
den anderen die Entscheidung.

von Wolfgang M. (procrash)


Lesenswert?

Da liegt der Hund begraben. Der FPGA sagt nicht dass er fertig wird.
Hm. Kann das jetzt ein FPGA Problem sein, oder ein Flash Problem? Gibts 
da irgendwelche Pins die man abgreifen kann um zu sehen dass der FPGA 
noch nach nem validen Konfig File sucht.

Was macht der FPGA wenn er keine gültige Konfig vorfindet? Loopt er dann 
in ner Endlosschleife und sucht gar nichts mehr? oder sucht er permanent 
weiter?

Und woran sehe ich überhaupt dass ne Konfig gültig ist?

Hab hier ein Bin File und ein MCS File vorliegen. Müssten doch beide 
funktionieren oder?

von Wolfgang M. (procrash)


Lesenswert?

Problem gelöst. Falsche Software. Habs aber erst gemerkt nachdem ich 
nochmals nen Reset am FPGA durchgeführt habe. Anscheinend hat er zwei 
Anläufe gebraucht.

von Wolfgang M. (procrash)


Lesenswert?

Jetzt würds mich aber trotzdem noch interessieren ob der FPGA 
kontinuierlich pollt oder nicht oder ob er sich "aufhängt"

Ausserdem scheinst noch ne ziemlich unzuverlässige Hardware zu sein. In 
2 von 4 Versuchen klappts, in den anderen nicht.

Deswegen kam das Board wohl auch durch die HW checks. Muss es wohl 
austauschen lassen...

von Wolfgang M. (procrash)


Lesenswert?

War tatsächlich das PCB was defekt war. Sie tauschen es aus.
Wunderbar.

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.