Forum: FPGA, VHDL & Co. Unidirektionale Kommunikation zwischen 2 FPGA's herstellen


von D. I. (Gast)


Lesenswert?

Ich habe hier ein industrielles FPGA-Board mit zwei Stratix 3 EPSL200C3. 
Da mein Design nun nicht mehr auf ein FPGA passt bin ich gezwungen 
dieses auf die beiden FPGA's aufzuteilen.
Mein Design arbeitet durchgehend mit 100MHz und 64bit Wortbreiten. Nun 
gibt es zwischen den beiden FPGA's allerdings nur 33 physikalische 
Leitungen (32 Daten + 1 Valid) und die Kommunikation soll nur in eine 
Richtung stattfinden. Beide FPGAs werden von demselben externen 
Clockgenerator gespeist.
Ich habe mir dazu folgendes überlegt:

FPGA1-Logik -> async FIFO 100MHz-64bit / 200MHz-32bit -> async FIFO 
200MHz-32bit / 100MHz-64bit -> FPGA2-Logik

Auf FPGA1 erzeuge ich mithilfe einer PLL einen 200MHz Takt und auf FPGA2 
einen um 180° verschobenen 200MHz Takt um bei einer steigenden Flanke 
der Empfangsclock relativ genau die Mitte des Datensignals zwischen zwei 
Sendeclocks abzupassen.
Meine Frage nun: Ist die Idee prinzipiell in Ordnung? Worauf muss ich 
achten, und welche Constraints muss ich wie setzen, dass das zuverlässig 
funktioniert und nicht nur durch Zufall wenn der Mond günstig steht. 
Meine Erfahrungen haben sich bisher immer nur auf ein FPGA beschränkt.

von Kest (Gast)


Lesenswert?

Ist wohl so in Ordnung. Wenn Du die PLL verwendest, müsste der 
TimingAnalyzer die Constraints selber bestimmen können (ich hoffe, 
andere Constraints sind in einer .SDC Datei schon eingetragen). Da wirst 
Du dann sehen, ob das gut geht oder nicht (Report). Wenn Du in der Mitte 
abtastest und die Leitungen alle gleich lang sind, dann wird es auch 
zuverlässig funktionieren.

Grüße,
Kest

von D. I. (Gast)


Lesenswert?

Ja übrige Constraints sind in der SDC schon festgehalten. Ich gehe 
einfach mal davon aus dass die Leitungen relativ gleich lang sein 
werden, da die Karte schon für andere Projekte verwendet wurde.
Werde das jetzt mal ausprobieren und mir das im SignalTap angucken, ob 
das tut

von Matthias (Gast)


Lesenswert?

Darf man fragen, worum es in der Applikation prinzipiell geht? So ein 
EP3SL200 ist ja schon ein ziemlich dickes Ding, da muss ja was dahinter 
sein, wenn man schon zwei von den Dingern braucht.

lg
Matthias

von Christian R. (supachris)


Lesenswert?

Du könntest ja auch eine DDR-Verbindung zwischen den beiden aufbauen. Da 
brauchst du die 200MHz nicht.

von D. I. (Gast)


Lesenswert?

Matthias schrieb:
> Darf man fragen, worum es in der Applikation prinzipiell geht? So ein
> EP3SL200 ist ja schon ein ziemlich dickes Ding, da muss ja was dahinter
> sein, wenn man schon zwei von den Dingern braucht.
>
> lg
> Matthias

http://www-05.ibm.com/de/entwicklung/extremeblue/projekte.html#foo3

96% Logic Utilization auf einem FPGA, da gibt der Router nach ca. 3,5h 
auf, bzw TimeQuest hauts einem um die Ohren

von Sym (Gast)


Lesenswert?

Ich würde unbedingt auf differentielle Signalisierung setzen (LVDS z.B). 
Das FPGA schafft pro Adernpaar bis zu 1.6 Gbit/s.
Einfache Lösung: 8 LVDS Paare mit und 400 MHz DDR. Und über ein LVDS 
Paar die Clock. Sinnvoll wäre es noch ein 9tes LVDS Datenpaar zusätzlich 
zu verwenden um Parity zu übertragen.

Single-ended geht natürlich auch, jedoch ist dabei die Gefahr von 
Übersprechen und Störungen groß.

Dein Vorschlag in jedem FPGA eine 200 MHz clock zu erzeugen ist 
unbrauchbar, da du die Phasenlagen zwischen 2 FPGAs nicht einstellen 
kannst. Jedes FPGA wird anders einlocken und dann funktioniert es 
manchmal und manchmal nicht. Daher immer die Clock zu den Daten 
übertragen (bzw. Clock Recovery aus den Daten).

von D. I. (Gast)


Lesenswert?

ich habs mittlerweile geschafft das design in ein fpga zu quetschen, 
daher brauche ich die kommunikation nicht mehr aber danke für die 
anregungen

von Segor (Gast)


Lesenswert?

>Ist wohl so in Ordnung. Wenn Du die PLL verwendest,
Nein, ist es nicht, denn die Mitte der Signale ist nicht der stabilste 
Punkt. Optimal ist das Ende des Taktes abzüglich Jitter und Differenz 
der Clock-Verzögerung / Datenleitungsverzögerung. Diese sind 
board-abhängig.

>Du könntest ja auch eine DDR-Verbindung zwischen den beiden aufbauen.
Ja, könnte er.

>Da brauchst du die 200MHz nicht.
Ist defakto dasselbe - was timing-Probleme anbelangt.

>ich habs mittlerweile geschafft das design in ein fpga zu quetschen,
>daher brauche ich die kommunikation nicht mehr aber danke für die
>anregungenBeitrag melden | Bearbeiten | Löschen |
spätestens bei der nächsten Änderung brauchst Du sie dann doch .. :-)

Besser ist es allemal die Verbindungen zwischen zwei FPGAs in doppelter 
Wortbreite auszulegen, dann kann man mit der f runter und auch über 
lange Distanzen gehen.

von D. I. (Gast)


Lesenswert?

naja das board war nun schon so vorgegeben, da konnte man natürlich nix 
mehr ändern.
Aber wie gesagt, mit ein paar Tricks konnten wir uns gut Luft schaffen, 
so dass wir diesen Bus nicht brauchen ;)

von Kest (Gast)


Lesenswert?

Segor schrieb:
>>Ist wohl so in Ordnung. Wenn Du die PLL verwendest,
> Nein, ist es nicht, denn die Mitte der Signale ist nicht der stabilste
> Punkt. Optimal ist das Ende des Taktes abzüglich Jitter und Differenz
> der Clock-Verzögerung / Datenleitungsverzögerung. Diese sind
> board-abhängig.

Bitte? wenn er auch den Clock mitüberträgt, was hindern ihn z.B. auf die 
fallende Flanke die Daten zu übernehmen oder gleich den Clock um 180° zu 
schieben?
Ich habe nur die pragmatischste Lösung vorgeschlagen bzw. bestätigt, 
dass es gehen wird, auch wenn es 200 MHz sind.

Kest

von Segor (Gast)


Lesenswert?

Ich beziehe mich auf die Setuo-Hold-Zeiten. Es ist ein gerne gemachter 
Denkfehler, Daten "in der Mitte" absampeln zu wollen, wo sie noch nicht 
stabil sind. Die gesamte FPGA-Synthese ist darauf ausgelegt, kurz vor 
dem Takt "gerade so" fertig zu sein (alle Kombinatorischen 
eingeschwungen").

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.