Forum: FPGA, VHDL & Co. Differentielle Leitung zu Single Ended Leitung umwandeln


von User (Gast)


Lesenswert?

Hallo,

habe grad hier mal ein Design wo mehrere differentielle Leitungen für 
eine Kameraschnittstelle erzugt werden müssen.

Möchte nun diese am Oszilloskop auf Phase kontrollieren. Nun kann ich 
die positive oder negative Leitung des LVDS einzeln vergleichen.

Nun will ich aber positiv und negativ auswegewertet vergleichen mit 
einem phasensynchronen Takt. Dazu entweder messtechnisch über zwei 
Tastköpfe mittels Mathe funktion oder ich hab mir gedacht an einem FPGA 
Entwicklungsboard lese ich die LVDS Pins ein und erzeuge daraus Single 
Ended Outputs die ich am Oszilloskop vergleichen kann.
1
DIFF_1_TO_SE_1: IBUFGDS PORT MAP (O => SE_1, I => DIFF_1(0), IB => DIFF_1(1));
2
DIFF_2_TO_SE_2: IBUFGDS PORT MAP (O => SE_2, I => DIFF_2(0), IB => DIFF_2(1));

NET "DIFF_1[*]" IOSTANDARD = LVDS_25;
NET "DIFF_1[*]" DIFF_TERM = "TRUE";
NET "SE_1" IOSTANDARD = LVCMOS25;
NET "DIFF_2[*]" IOSTANDARD = LVDS_25;
NET "DIFF_2[*]" DIFF_TERM = "TRUE";
NET "SE_2" IOSTANDARD = LVCMOS25;

Nur leider ist der Hub beim SE_1 und SE2 sehr klein, kleiner als die 
LVDS Pins.

Meine Frequenzen bewegen sich im Bereich 40-100MHz vorerst.

Dass ich bei dieser Anwendung ein PAD to PAD delay habe ist mir klar, 
daher habe ich darauf geachtet, dass alle die gleiche Verzögerung 
geroutet bekommen.

Ist mein Ansatz evtl. nicht korrekt? Oder unvollständig?

Oder muss ich unbedingt eine PLL oder so benutzen um einen stabilen 
Output zu bekommen?

von Schlumpf (Gast)


Lesenswert?

Passt die Versorgung der IO Bank am FPGA auch zu LVCMOS25 ?

von User (Gast)


Lesenswert?

Ja soweit wurden alle Banks der Pins mit 2.5V versorgt

von Schlumpf (Gast)


Lesenswert?

Und der Hub an den SE-Pins ist dann kleiner als 300mV?

Kannst du mal ein Oszibild posten?

LVDS Signale + zugehöriges SE Signal
Alle gegen GND gemessen

von Schlumpf (Gast)


Lesenswert?

Und poste mal bitte die Warnings..

Kann es sein, dass du das Constraint DIFF_TERM gar nicht auf ein Signal 
anwenden darfst, sondern nur auf die Instanz des IOBuffers?

von User (Gast)


Angehängte Dateien:

Lesenswert?

Hier mal ein Oszi Bild (siehe Bild 1)

Gelb ist das SE_1 Signal
Die anderen beide jeweils P/N des LVDS.

Die Pins die ich gewählt habe liegen alle auf einer Bank direkt 
nebeneinander. Nehme ich das SE_1 Signal weiter weg auf der gleichen 
Bank bekomme ich ein besseres Signal mit mehr Hub (siehe Bild 2, warum 
auch immer sind bei der Messung die diff. Signale verzehrt, ohne den SE 
sehen sie gut aus).

Der Sinn warum ich versucht habe die Pins nebeneinander zu setzen, dass 
ich so wenig wie möglich routing delay habe von PAD to PAD. Da ich min. 
4 Diff to SE umwandlungen haben werde will ich die PAD to PAD Delays 
alle gleich (!) routen lassen.

Den DIFF_TERM sehe ich im Pinout Report. Habe versucht ihn im IBUFGDS 
Primitive im generic map zu deklarieren, spuckte aber errors aus.

Warnings sind an sich auch keine da.

von Schlumpf (Gast)


Lesenswert?

Hmm, also mit AC Kopplung siehst du natürlich nur den AC Anteil des 
Signals.
Auch wenn das jetzt sicher nicht das Problem ist, aber vielleicht kannst 
nochmal ein Bild machen, wo du das SE-Signal DC-gekoppelt misst.


Ganz abgesehen davon finde ich deine Idee, die Phasenlage der LVDS 
Signale über diese Methode zu kontrollieren etwas ungeschickt.
Du willst ja ne Aussage über die Qualität des eigentlichen Signals.
Und dazu leitest du es durch ein FPGA, der irgendwelche Skews macht.

Warum machst du die Messung nicht zweistufig.

Erster Schritt:
Augendiagramm jedes LVDS Kanals ermitteln.
Wenn da die Augen gut sind, dann kannst du davon ausgehen, dass die 
Phase zwischen LVDS+ und LVDS- Null ist.

Wenn das bei allen Kanälen zutrifft, dann vergleichst du im nächsten 
Schritt nur noch die LVDS+ Leitungen untereinander.

Aber natürlich: Das Verhalten hier ist merkwürdig und es wäre schon 
interessant, was da nicht stimmt.

von Schlumpf (Gast)


Lesenswert?

Ähhh....
Bild1: Kopplung Kanal 1: AC
Bild2: Kopplung Kanal 1: DC

von Schlumpf (Gast)


Lesenswert?

Ich tippe mal auf Messfehler:

1. Die Masse JEDES Tastkopfes sauber anklemmen
2. Kopplung Kanal 1 auf DC stellen.

dann nochmal messen.

von User (Gast)


Angehängte Dateien:

Lesenswert?

AC oder DC hat am Signal nichts geändert, halt nur dass es auf den 
Nullpunkt verschoben ist.

Habe leider leider leider meinen Fehler entdeckt! Das gelbe Signal in 
Bild 1 ist ein hochohmiger pin, hab mich beim messen versehentlich 
falsch gesteckt. In Bild 2 war ich halt am richtigen pin.

Zur Methode, warscheinlich nicht die beste, aber da ich vermeiden will 
eine differential probe zu benutzen und keine sauberen (!) Messungen mit 
schnelleren LVDS Signalen habe, habe ich mir diesen weg überlegt.

Das ist das PAD to PAD Report meiner Diff to SE pins.

All values displayed in nanoseconds (ns)
DIFF_1<0>      |SE_1           |    5.612|
DIFF_1<1>      |SE_1           |    5.612|
DIFF_2<0>      |SE_2           |    5.606|
DIFF_2<1>      |SE_2           |    5.606|
DIFF_3<0>      |SE_3           |    5.598|
DIFF_3<1>      |SE_3           |    5.598|
DIFF_4<0>      |SE_4           |    5.616|
DIFF_4<1>      |SE_4           |    5.616|

Vom report ausgehend habe ich ~20ps Unterschied untereinander, das ist 
akzeptabel für die Messung. Mein schnellstes Signal wird ca. 350MHz sein 
(später).

Im angehängten Bild sieht man nun das saubere SE Signal. die 
Phasenverschiebung passt auch zum Report.

von Tip (Gast)


Lesenswert?

Wie sind die FPGA-Eingänge beschaltet?
Terminierung?

von User (Gast)


Lesenswert?

nur der DIFF_TERM im Contraints, keine Terminierung außen.

von Schlumpf (Gast)


Lesenswert?

User schrieb:
> Habe leider leider leider meinen Fehler entdeckt

Wieso leider? Ist doch gut, wenn man den Fehler gefunden hat..

User schrieb:
> aber da ich vermeiden will
> eine differential probe zu benutzen

Du kannst auch zwei Single Ended Probes nehmen und die Differenz im Oszi 
ausrechnen lassen.

User schrieb:
> Vom report ausgehend habe ich ~20ps Unterschied untereinander, das ist
> akzeptabel für die Messung.

Das ist in der Tat nicht viel.
Wenn dir die Methode so taugt, dann kann man das natürlich so machen.

von User (Gast)


Lesenswert?

Schlumpf schrieb:
> User schrieb:
>> aber da ich vermeiden will
>> eine differential probe zu benutzen
>
> Du kannst auch zwei Single Ended Probes nehmen und die Differenz im Oszi
> ausrechnen lassen.

genau, die Methode hatte ich ja oben auch erwähnt. Bin dann auf 2 
Messungen beschränkt.

User schrieb:
> Dazu entweder messtechnisch über zwei
> Tastköpfe mittels Mathe funktion oder

Weiterhin ist der Vorteil einer Diff to SE Umwandlung, dass ich es in 
einem Logic Analyzer leichter triggern kann.

Ich danke dir sehr, dass du dir Zeit genommen hast.

von Schlumpf (Gast)


Lesenswert?

User schrieb:
> genau, die Methode hatte ich ja oben auch erwähnt. Bin dann auf 2
> Messungen beschränkt.

Ich meinte es eher so, dass du erst prüfst, ob deine 4 Kanäle in sich 
gut sind.
Das heißt für jeden Kanal machst du getrennt eine Messung mit 2 Probes.

Wenn du die Integrität jedes Kanal in sich festgestellt hast, dann 
kannst von jedem Kanal nur den LVDS+ betrachten und hast somit 4 Kanäle.

User schrieb:
> Weiterhin ist der Vorteil einer Diff to SE Umwandlung, dass ich es in
> einem Logic Analyzer leichter triggern kann.

Das ist natürlich ein gutes Argument.

User schrieb:
> Ich danke dir sehr, dass du dir Zeit genommen hast.

Keine Ursache :-)

von Duke Scarring (Gast)


Lesenswert?

Die differentiellen Signale nimmt ja nicht umsonst.
Schau Dir mal an, welche Frequenzen der FPGA mit Single-Ended ausgeben 
kann und wie weit er mit differentiellen Signalen kommt.
Schon beim Spannungshub ist da ein Faktor von ~10 drin (3 V vs. 2x150 
mV).

User schrieb:
> Mein schnellstes Signal wird ca. 350MHz sein
> (später).
Wie hoch ist die Abtastrate von deinem Oszilloskop? Wie genau soll die 
Messung des Phasenversatzes werden?

Duke

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.