Forum: FPGA, VHDL & Co. LVDS auf zwei Eingänge?


von P. K. (pek)


Lesenswert?

Hallo zusammen

Ich habe zwei LVDS-Signal-Paare (clk, davlid) welche ich redundant auf 
jeweils zwei FPGA-Eingangspaare schalten möchte um je eine Anzahl 
Datensignale zu verarbeiten. LVDS-Maximalspeed ist 750 MHz.

Ist so ein Konstrukt (LVDS zu zwei Senken) grundsätzlich böse, oder kann 
man da was machen? Falls letzteres: Was wäre beim Layout zu beachten 
(vielleicht gibt's irgendwo Guidelines für solche Fälle)?

Merci für Ideen!

von Christian R. (supachris)


Lesenswert?

Die saubere Lösung wäre ein LVDS 1:2 Buffer. Wozu soll das denn gut 
sein? Du kannst doch auch das Signal intern nach dem LVDS Eingangsbuffer 
verteilen. Und 750MHz? Das ist sportlich, welches FPGA schafft das 
extern?

von steve (Gast)


Lesenswert?


von P. K. (pek)


Lesenswert?

Christian R. schrieb:
> Du kannst doch auch das Signal intern nach dem LVDS Eingangsbuffer
> verteilen.

Ich will damit LVDS-Serdes betreiben. Das eine der Signale ist der zu 
verwendende Clock. Den kann ich nicht einfach so intern weiterverteilen.

von Lattice User (Gast)


Lesenswert?

P. K. schrieb:
> Christian R. schrieb:
>> Du kannst doch auch das Signal intern nach dem LVDS Eingangsbuffer
>> verteilen.
>
> Ich will damit LVDS-Serdes betreiben. Das eine der Signale ist der zu
> verwendende Clock. Den kann ich nicht einfach so intern weiterverteilen.

Und warum kannst du nicht nach dem Serdes weiterverteilen?

LVDS ist für Punkt zu Punkt Verbindungen gedacht, und je höher die 
Geschwindigkiet ist, desto kritischer ist das. Ohne einen Fanout Buffer 
wird das schwierig, die AN von Intersil (sehe Posting von steve) macht 
das zwar passiv, aber da kommt an den Eingängen nur noch der halbe Pegel 
an.

Die 750 MHz kommen mir auch sehr hoch vor, meinst du 750 MBits/s? 
Ersteres braucht einen FPGA der Oberklasse, letzteres ist auch mit 
Low-End FPGA's ala MachXO2 möglich.

von Christian R. (supachris)


Lesenswert?

P. K. schrieb:
> Ich will damit LVDS-Serdes betreiben. Das eine der Signale ist der zu
> verwendende Clock.

Meint du diese Xilinx Lösung, wo zwei ISERDES (Master/Slave) an einem 
Pin hängen? Das geht doch ohne externe Verteilung...
Schreib mal genau, was du vorhast, ich hab einige Erfahrung mit den 
Xilinx SERDES (Spartan 6 und Artix 7), nicht dass du völlig auf dem 
Holzweg bist...

von P. K. (pek)


Lesenswert?

Lattice User schrieb:
> meinst du 750 MBits/s?

Ja genau, sorry für die ungenaue Beschriebung (der Clock selbst läuft 
mit maximal 375 MHz). FPGA ist (jetzt noch) ein Arria V.

Der Clock soll auf rx_in des altlvds_rx_component, das heisst es muss 
alles in derselben Peripherieclockdomain passieren, wenn ich mit einem 
Clock auskommen soll.

Das Ganze auf zwei verschiedene Peripherieclockdomains zu verteilen (mit 
je einem clk, dvalid Input) wäre die bequemste Lösung gewesen, aber nach 
obenstehenden Antworten macht das aus Board-Layout-Sicht wohl wenig 
Sinn...

von Erwin (Gast)


Lesenswert?

Was spricht dagegen die parallelen Ausgabedaten des ALTLVDS_RX einfach 
in zwei Module zu führen? Dies ist doch wesentlich nahestehender als die 
externe Verzweigung um dann zwei ALTLVDS_RX zu brauchen? Sobald du die 
Daten einmal im FPGA hast ist das Verteilen und weiterverarbeiten doch 
ein Leichtes!

Ich kann mir dennoch gut vorstellen dass dies bei so wenig 
Datenleitungen und der moderaten Taktfrequenz von 350 MHz noch 
funktionieren mag. Einfach auf zwei nebeneinanderliegende Pin-Paare 
routen und den Abschlusswiderstand extern zwischen die Pins - bei einer 
DDR3 Baumstrutkur funktioniert das ja auch. Du kannst dir ja die 
Situation mal ins Hyperlynx ziehen und simulieren. Beachte aber, dass 
der ArriaV Limitierungen in den dedizierten LVDS-Taktnetzen hat.

von P. K. (pek)


Lesenswert?

Erwin schrieb:
> Beachte aber, dass
> der ArriaV Limitierungen in den dedizierten LVDS-Taktnetzen hat.

Und schon hat sich Münchhausen an seinem eigenen Zopf zum Sumpf 
herausgezogen. Diese Limitierungen standen ja am Anfang dieser Frage:

P. K. schrieb:
> Der Clock soll auf rx_in des altlvds_rx_component, das heisst es muss
> alles in derselben Peripherieclockdomain passieren, wenn ich mit einem
> Clock auskommen soll.

Weil ich aber nur auf gengenüberliegenden Banks gesamthaft genügend 
LVDS-RX-Paare hatte, hätte ich den LVDS_RX_CLK auf beiden Seiten als 
Eingang haben müssen. Ein kleiner Handstand in der Bank-Aufteilung 
scheint das Problem nun zu erledigen, sodass ich genügend LVDS-RX-Paare 
auf einer Seite habe (beim Arria 10 wird alles besser, hoffentlich).

von Erwin (Gast)


Lesenswert?

Was ist eigentlich deine Motivation zwei Dateneingänge für identische 
Daten zu nutzen?

von P. K. (pek)


Lesenswert?

Erwin schrieb:
> Was ist eigentlich deine Motivation zwei Dateneingänge für identische
> Daten zu nutzen?

Lies den Thread nochmals aufmerksam durch, vielleicht kommst Du darauf.

Falls nicht: Ich beabsichtigte nie, identische Dateneingänge zu nutzen, 
sondern Clock und DataValid doppelt zu haben, um eine grosse Anzahl dazu 
synchroner LVDS-Daten-Paare aufzuteilen und auf zwei getrennten, weit 
entfernten Banks/Serdes bearbeiten zu können.

von Christian R. (supachris)


Lesenswert?

Haben die da etwa den selben Stuss gebaut wie am Spartan 6? Der ist an 
genau der Stelle auch extremst beschränkt. Nur eine halbe Bank kann mit 
dem schnellen Takt die Serdes bedienen....krank. Zum Glück gabs dann den 
Artix.

von P. K. (pek)


Lesenswert?

Christian R. schrieb:
> Haben die da etwa den selben Stuss gebaut wie am Spartan 6?

Naja, optimal ist es nicht. Es gibt halt sehr viele "entweder - oder" 
Bedingungen.
Mein Design war ursprünglich mal dazu ausgelegt ein Daten-I/F ohne 
grosse Anstrengung der zukünftigen Datenquelle anpassen zu können (wie 
aktuell von massiv parallel auf eine nicht ganz so grosse Anzahl 
LVDS-Paare) ohne den Rest des Boards neu layouten zu müssen.
Da muss ich jetzt betreffend "minimal-invasive Änderung" Abstriche 
machen und einige Banks generell neu ordnen.

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.