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.
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
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
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
Du könntest ja auch eine DDR-Verbindung zwischen den beiden aufbauen. Da brauchst du die 200MHz nicht.
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
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).
ich habs mittlerweile geschafft das design in ein fpga zu quetschen, daher brauche ich die kommunikation nicht mehr aber danke für die anregungen
>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.
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 ;)
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.