mikrocontroller.net

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


Autor: D. I. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Kest (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: D. I. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian R. (supachris)
Datum:

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

Autor: D. I. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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/p...

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

Autor: Sym (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: D. I. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Segor (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: D. I. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;)

Autor: Kest (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Segor (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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").

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.