Forum: FPGA, VHDL & Co. Xilinx Zynq: Camera Link Framegrabber


von Jana B. (brokie)


Lesenswert?

Hallo zusammen,

ich bin FPGA- und VHDL-"Frischling" und arbeite an einem ersten etwas 
größeren Projekt. Vielleicht kann mir jemand bei der einen oder anderen 
Frage helfen bzw Denkanstöße geben?

Die Hardware:
- Trenz TE0720 GigaZee, also ein Xilinx Zynq-7000 (XC7Z020)
- Carrier Board: Trenz TE0701
- Kamera: JAI CV-M4+CL
Ich arbeite mit Vivado 2015.4

Es gibt bereits einen IP-Core von Xilinx, der im Grunde genau das tut, 
was ich brauche: den SelectIO Interface Wizard mit dem Interface 
Template "Camera Link Receiver". Meine ersten Versuche waren intuitiv 
(und falsch): Ab mit dem Wizard ins Block Design, Kamera an den 
Mini-CamLink-Stecker des Boards, differentielle Ports im Block Design 
erstellt und in den Constraints entsprechend zugewiesen und dann bietet 
einem der Block ja differentielle Eingänge für einen Clock und für die 
Datenkanäle.

Das konnte nicht funktionieren, wie ich inzwischen weiß, weil das 
Herzstück des CamLink-Receiver-Blocks ein ISERDES ist, der als 
Eingangsclock einen sieben mal schnelleren Clock benötigt als von der 
Kamera übertragen (In einem Takt kommen ja 7 Bit seriell an, 
Datenwortbeginn in der Mitte der High-Phase, Duty Cycle 4:3. Der 
Deserializer braucht aber einen Takt pro Bit).
Also verwende ich einen weiteren Block, den Clocking Wizard (im Grunde 
ein MMCM), der den differentiellen Eingangsclock für den IO-Wizard 
multipliziert. Mir ist klar, dass ich damit das Signal puffere und sich 
ggf der Beginn eines Datenworts verschiebt.
Nun zu meinen Fragen:

1. Die Auswirkungen des vermutlich phasenverschobenen Clocks müssten mit 
der Bitslip-Funktion auszugleichen sein, oder? Ich habe zwar verstanden, 
auf welchem Prinzip diese Funktion basiert, aber mir ist nicht klar, was 
der "bitslip"-Eingang des IO-Wizards bewirkt - ist das eine Konstante, 
die beschreibt, um wieviel Bit ein Datenwort verschoben ist? Oder ein 
Takt zum Abgleichen...?

2. Ich überprüfe die Signale mit einem Oszi. Ich sehe, dass die Clocks 
in Phase und der eine tatsächlich 7mal schneller als der andere ist - so 
weit, so gut - aber es finden sich nur 7 statt 10 erwarteter 
Datensignale (die sichtbar auf unterschiedliche Lichtverhältnisse 
reagieren) und data valid, frame sync und line sync fehlen komplett. 
Ideen, woran das liegen könnte? (jedenfalls ist es ohne diese Signale 
kein Wunder, wenn nichts funktioniert...)

Ich danke euch fürs "Zuhören" und freue mich auf eure Unterstützung!

Jana

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Das ganze hört sich durchaus so an, als würdest Du den schnellen Takt 
herunterteilen und als neuen Takt verwenden. Das ganze sieht zwar auf 
dem Oszilloskop schön phasensynchron aus, bereitet aber im FPGA 
erhebliche Probleme, da der durch die Frequenzteilung oder 
-vervielfachung erzeugte Phasenversatz doch zu einer separaten 
Clock-Domain führt. Folglich müsstest Du entweder beim Wechsel zwischen 
den Domains neu einsychronisieren (hmmm...) oder (besser!) durchgängig 
der ursprünglichen hohen Takt verwenden und mit niederfrequenten 
Clock-Enables arbeiten.

: Bearbeitet durch User
von Jana B. (brokie)


Lesenswert?

Hallo Andreas, danke für deine Antwort!

Andreas S. schrieb:
> Das ganze hört sich durchaus so an, als würdest Du den schnellen Takt
> herunterteilen und als neuen Takt verwenden.

Nein, anders herum - die Kamera liefert einen langsamen Takt, den ich 
mit 7 multipliziere.

> Folglich müsstest Du entweder beim Wechsel zwischen
> den Domains neu einsychronisieren (hmmm...) oder (besser!) durchgängig
> der ursprünglichen hohen Takt verwenden und mit niederfrequenten
> Clock-Enables arbeiten.

Das klingt gut, um den Takt herunterzuteilen, aber zum Beschleunigen...?

von Klakx (Gast)


Lesenswert?

Jana B. schrieb:
> Das klingt gut, um den Takt herunterzuteilen, aber zum Beschleunigen...?

Da dein "schneller" Takt der Pixeltakt von 40,49 MHz ist (wenn das das 
richtige Datenblatt gerade ist), müsste dein Clock ja bei etwa 5,78 
MHz.. liegen.

Schnapp dir den Clock oder irgendeinen und erzeug z.B. 40,49 x4 -> 
161,96MHz. Damit hast du einen viel größeren Takt zum Abtasten.

von Videoprozessierer (Gast)


Lesenswert?

Ich habe Cameralink sowohl auf dem Spartan6 als auch dem Virtex6 
realisiert. Der XI-Core alleine wird Dir da nicht viel weiterhelfen, 
weil das Eigentliche in eben der Steuerung der SERDES, deren Beschaltung 
und dem Eintrainieren der Eingänge aud die lanes besteht, was der Core 
nicht leistet - nach wie vor im Übirgen nicht, darf ich sagen (wir 
hatten den damals auch probiert, kam mit 13.2 raus, meine ich). Dazu 
braucht es einiges an constraints, also elektrische Themen. Wäre als 
Core für den Artix 7 rechtefrei verfügbar. Kann 560/640MHz auf bis zu 4 
lanes und cables mit combined transmission, also 10,8Gbit. Preis VHS. 
Allerdings braucht es da noch ein paar Infos besonders zu dem Timing 
eines eventuellen Buffers / CL-Receivers.

Zu Deinen Überlegungen: Sieh Dir erst nochmal an, mit welchen Takten CL 
überhaupt kommt, welchen Jitter Du Dir erlauben kannst / tolerieren 
musst und wie das Einsynchen auf den Mastertakt bei CL überhaupt gedacht 
ist, d.h. wie die Bits kommen und wann ein slip kommen darf /muss und 
wann nicht. In Deinen Darstellungen erkenne ich so einige 
Missverständnisse. Die 40,49 sind schon mal definitiv nicht richtig und 
auch die 4/3 Thematik verdient einige Beachtung.

von Jana B. (brokie)


Lesenswert?

Klakx schrieb:
> Da dein "schneller" Takt der Pixeltakt von 40,49 MHz ist (wenn das das
> richtige Datenblatt gerade ist), müsste dein Clock ja bei etwa 5,78
> MHz.. liegen.

Nein, die 40 MHz ist der langsame Takt, der von der Kamera generiert 
wird.

Klakx schrieb:
> Schnapp dir den Clock oder irgendeinen und erzeug

Du meinst, ich sollte mit der Frequenz höher gehen als die 
Geschwindigkeit, mit der die Bit eintreffen, und damit jedes Bit 
mehrfach abtasten? Dann hilft mir aber vermutlich der ISERDES nichts 
mehr, und ich muss selbst was schreiben, oder seh ich das falsch? ... 
oder nachher doppelte Datenworte aussortieren...

Videoprozessierer schrieb:
> Der XI-Core alleine wird Dir da nicht viel weiterhelfen,
> weil das Eigentliche in eben der Steuerung der SERDES, deren Beschaltung
> und dem Eintrainieren der Eingänge aud die lanes besteht, was der Core
> nicht leistet

Die Befürchtung hab ich inzwischen auch - aber ist es dann nicht absurd, 
dass es nicht etwa nur den Block gibt, sondern explizit eine 
vorgefertigte Camlink-Konfiguration?

Videoprozessierer schrieb:
> Preis VHS.

Ich wills ja selbst lernen ;)

Videoprozessierer schrieb:
> Timing
> eines eventuellen Buffers / CL-Receivers

Ou, gutes Stichwort! Diesbezüglich sollte ich mich dringend schlau 
machen.

Videoprozessierer schrieb:
> In Deinen Darstellungen erkenne ich so einige
> Missverständnisse.

Oje. Ich dachte, da hätte ich schon ein bisschen was ausfiltern können. 
Danke, dann werde ich nochmal alles von vorn aufrollen und versuchen, 
meine Fehler zu finden. Hast du ein Beispiel für besagte 
Missverständnisse?

von Strubi (Gast)


Lesenswert?

Moin,

in der Annahme, dass das ein Lernprojekt bzgl. CL ist und zu keinem 
Produkt führen soll, würde ich mir mal zum Thema "Clock Recovery" etwas 
Literatur reinziehen. Es gibt auch eine Menge Appnotes zu "7:1 lvds 
video" und den beliebten Gearboxen. Auf den Spartanern ist das zwar 
alles etwas mühsamer zu handhaben, sollte aber bei 40 MHz noch locker 
ohne Handoptimierung gehen, also wird's auf dem Zynq ähnlich sein (kann 
ich aber nicht wirklich mitreden, auch was die dortigen Coregens angeht 
nicht).
D.h. eigentlich solltest du nur das Problem lösen müssen, einen sauberen 
Clock rauszubekommen (PLL) und mit minimalem Phasen-Jitter die 
Channel-Bits abzutasten. Da sollte dich die XAPP1064 eigentlich 
weiterbringen. Die bitslip-Geschichte brauchst du bei CL nicht, das ist 
eher bei HDMI relevant (wo ein Anfang eines Datenworts per Patternmarke 
detektiert werden muss).
Wichtig ist natürlich auch, dass die HW richtig verkabelt ist 
(Edge-Clocks), aber davon gehe ich jetzt mal aus.
Abgesehen davon ist die Aufgabe für FPGA-Rookies noch recht knackig. 
Viel Glück...

- Strubi

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.