Forum: FPGA, VHDL & Co. Kamera über Camera Link an Virtex-5 FPGA anschliessen


von Trebron (Gast)


Lesenswert?

Hallo zusammen,

ich möchte eine Kamera über eine Camera Link-Schnittstelle an einen FPGA 
(wahrscheinlich Virtex-5 SXT- oder FXT-Reihe) anschliessen.
Dafür würde ich spontan die LVDS-Ports des FPGAs nehmen?
Da ich mich mit Camera Link jedoch nicht auskenne, weiß ich nicht wie 
kompliziert die Umsetzung des Protokolls in VHDL ist. Gibt es da bereits 
fertige IP-Cores?
Man findet zu dem Thema im Internet leider sehr wenig. Deshalb hoffe 
ich, dass sich hier jemand damit auskennt.
Vielen Dank schonmal.

Gruß,
Trebron

von Vanilla (Gast)


Lesenswert?

Hallo Trebron,

das Camera-Link Protokoll ist trivial,
Die Spec laesst sich fuer eine Hand voll Dollar kaufen, es finden sich 
aber bereits sehr viel Informationen auf den Webseiten von National und 
Cypress. Inoformationen ueber das Protokoll auf Bitebene lassen sich 
"auf der anderen" Ecke unter anderem Namen FPD, Panellink etc. finden.

Das anspruchsvollere ist das Timing. Hier kann man schon mal ein paar 
Tage bis Woche(n) verschmeissen.
Es gibt IP Anbieter, Quellen habe ich jetzt keine da, Google ist hier 
aber dein Freund.

Je nach Anwendung ist es aber sinnvoll, die Cameralink Schnittstelle 
nicht direkt am FPGA abzubilden, einige Meter Kabel wie in der Spec 
festgelegt, bieten lange Gelegenheit den FPGA von aussen zu toasten.

wenn dann ein Buffer Platz findet, so sollte wenn die Anzahl der IOs 
nicht das entscheidende ist, einen Serializer/Deserializer von National 
u. Co. einsetzen. Die kosten nicht (so viel) und man macht sich das 
Leben bedeutend leichter.

Gruss

von Trebron (Gast)


Lesenswert?

Hallo Vanilla,

danke für die schnelle Antwort.
Das mit FPD und Panellink ist ein guter Tipp. Werd gleich mal danach 
googeln.
Mit Serializer/Deserializer meinst du wahrscheinlich so etwas wie den 
DS90CR287 von National?

Gruß,
Trebron

von BöserFisch (Gast)


Lesenswert?

Hier findet man auch was:

http://photonfocus.com/upload/application_notes/AN021_e_V1_0_CameraLink.pdf

Gibt auch sonst sehr viele nützliche Dokumentation auf deren Seite.

von Johann (Gast)


Lesenswert?

Wenn man die Chips vom National benutzt dann hat man nur noch eine 
Frequenz von 85MHz. Das Timing ist dann für einen Virtex 5 total 
lächerlich. Ich habe für die Camera Link Umsetzung 3 Tage benötigt. 
(Allerdings ohne die RS232 Implementierung)

Allerdings habe ich Daten vom ADC über Camera Link an den PC gesendet. 
Ich hatte damals den Full Speed verwendet da benötigt man 3 ICs von 
National. und insgesamt so ca. 25x3 IO-Ports am FPGA. Dafür kommen dann 
aber auch 680MByte pro Sekunde über die Leitung.

Beim Camera Link gibt es kein CRC32 oder ähnliches wenn Daten beschädigt 
werden sind diese halt dauerhaft defekt und es gibt keine Möglichkeit 
dies zu merken (nur so als Hinweis).

von Mr Hale (Gast)


Lesenswert?

> Wenn man die Chips vom National benutzt dann hat man nur noch
> eine Frequenz von 85MHz.

Was aber dem Datentakt entspricht. Der serielle Takt ist höher. Bei 
einer Implementierung im FPGA kommt man da an die 600 MHz, was nicht 
mehr so einfach zu realisieren ist. Du brauchst eine Kompensation der 
IO-Laufzeiten und eine Art Taktsychronisation.

Habe das vor 2 Jahren mal gemacht.

von Strubi (Gast)


Lesenswert?

Moin,

würde auch in dem Fall eher die Transceiver/Deserializer benutzen, in 
der CameraLink spec sind einige mögliche Typen aufgelistet. Schon einmal 
bei laufenden Betrieb Kabel ein/ausstecken könnte das FPGA braten 
(manche Kabel haben auch nicht das beste Grounding, sind auch schon mal 
eben ~100V Potential zwischen den verschiedenen GNDs gesehen worden).
Apropos, es gibt auch Leute, die CRC32 checksummen in der letzten 
Bildzeile übertragen, frei nach dem Motto "you can pimp (almost) every 
braindead standard" :-)

von Johann (Gast)


Lesenswert?

Ich würde auch auf jedenfall die Camera Link ICs verwenden die sind 
wirklich nicht sehr teuer benötigen aber schon Platz auf einer Platine 
da man 3 Stück für Full Speed benötigt.

Meine Platine besitzt 8 Lagen was die Fertigung wieder etwas teurer 
macht aber daruch ging es sehr schnell und benötigte nur kurze 
Entwicklungzeit.

von Trebron (Gast)


Lesenswert?

Hallo,

ich glaube mittlerweile auch, dass ich Serializer/Deserializer einsetzen 
werde. Erspart einem ne Menge Ärger, wenn ich allein daran denke 600MHz 
intern im FPGA verarbeiten zu müssen...
Der Platz ist in diesem Entwicklungsstadium noch kein Problem. Es geht 
erst mal nur um einen Funktionsnachweis. Am liebsten wäre mir deshalb 
sogar ein fertiges Board zu kaufen oder ein vorhandenes Board (ML506 von 
Xilinx) aufzurüsten.

von Christian R. (supachris)


Lesenswert?

Trebron schrieb:
> wenn ich allein daran denke 600MHz
> intern im FPGA verarbeiten zu müssen...

Müsstest du ja nicht. Dafür gibts die RocketIOs, oder GTP/GTX 
Transceiver wie sie sich jetzt nennen. Die machen das alles für dich. 
Aber auch die sind nicht ganz trivial zu handhaben, da gibts hunderte 
Parameter. Das Argument mit dem Stecken unter Strom ist da auch was 
wert, so ein Virtex 5 mit GTP Transceivern kostet ja nicht gerade wenig.

von Andreas B. (Firma: www.collion.de) (bergy) Benutzerseite


Lesenswert?

Christian R. schrieb:
>> wenn ich allein daran denke 600MHz
>> intern im FPGA verarbeiten zu müssen...
>
> Müsstest du ja nicht. Dafür gibts die RocketIOs, oder GTP/GTX
> Transceiver wie sie sich jetzt nennen. Die machen das alles für dich.
> Aber auch die sind nicht ganz trivial zu handhaben, da gibts hunderte
> Parameter. Das Argument mit dem Stecken unter Strom ist da auch was
> wert, so ein Virtex 5 mit GTP Transceivern kostet ja nicht gerade wenig.

Wenns nicht umbedingt 85MHz Pixeltakt sein müssen, dann kann mit den 
Desrialisern der Virtex5 und Spartan6 IOs schon etwas angefangen werden. 
Die Rocket IOs sind für den zweck eher weniger geeignet...

von Ralf Kimme (Gast)


Lesenswert?

Ich werde auch einen ähnlichen interlink machen müssen, allerdings nicht 
nach dem Cameralink-Protokoll, sondern einem internen Standard.

Ich brauche 10 Bits, die jeweils 8fach seriell kommen, als parallele 
Welt. Bislang habe ich nur mit Altera zu tun.

Wieso sollen die Rocket IOs dafür nicht geeignet sein? Wegen des 
Programmieraufwandes oder aus technischen Gründen? - Was wäre denn sonst 
noch bei Xilinx vorhanden?

von Andreas B. (Firma: www.collion.de) (bergy) Benutzerseite


Lesenswert?

Ralf Kimme schrieb:

> Wieso sollen die Rocket IOs dafür nicht geeignet sein? Wegen des
> Programmieraufwandes oder aus technischen Gründen? - Was wäre denn sonst
> noch bei Xilinx vorhanden?

Ja der Programmieraufwand das Einsamplen des hier genannten LVDS 
Standards wäre sehr hoch.

Du hast im Protokoll keine Synchroniserung der einzelnen Lanes 
zueinander. Genau dass musst Du aber wenn Du mehrere GTX-Tiles nutzt.
Der Eingangstakt von "nur" 85MHz taugt aber nicht fuer die Rocket-IOs, 
den musst Du vorab durch eine normale PLL schicken.

Jetzt wirds leicht spekulativ, müsste erst die Datenblätter nochmals 
wälzen:
Da in den Daten nunmehr kein fuer die RocketIOs mehr verwertbarer Clock 
mehr enthalten ist, muessen die (Virtex5) RocketIOs im Oversampling Mode 
betrieben werden.
Fuer den Parallelbetrieb mehrerer RocketIOs ist dann des Abschaltewn von 
FlexibleBuffer und Co notwendig. Jetzt kommen dann Probleme des internen 
Phaseallignement (na gut ist ja fast DC Betrieb und damit beherschbar) 
und der relativ stiefmuetterlich dokumentierten Betrieb im Oversampling 
erst einmal zu implementieren.
Die Rocket-IOs sind einfach fuer anderes gemacht...

Wenn einer eine Idee hat wie obiges mit den RocketIOs angenehmer zu 
lösen ist, bitte korregieren...

Mit den "normalen" IOs vom Virtex5 lassen sich wiederum bis zu Zitat:"Up 
to 1.25 Gb/s LVDS (on all differential I/O pairs)" einsamplen und 
deserialiseren.
dazu kann man mit den Dingern auch Skews korregieren. Das ganze ist auch 
nicht trivial und nix fuer Anfaenger, aber sicherlich einem Abenteuer 
mit der RocketIOs ohne Not vorzuziehen.
P.S. Die Spartan6 haben ähnliche Fähigkeiten in den IOs, insgesammt 
etwas gemächlicher, aber in Richtung 70MHz-Cameralink kann man damit 
schon zielen und hätte dann eine einigermassen preisguenstige Loesung...

von Christian R. (supachris)


Lesenswert?

Naja, die 85Mhz wären ja nach dem Deserializer für die parallelen Daten, 
auf der CameraLink Seite ist es ja seriell und damit ein viel höherer 
Takt, das sollte mit den schon GTP gehen. Allerdings weiß ich nicht, wie 
da die Komma und K-Chars aussehen, falls überhaupt vorhanden. Ich kenn 
das Protokoll auch nicht, weiß auf Anhieb nicht wie die 
Synchrosnisierung aussieht. Mit den ISERDES ist das immer so eine Sache, 
die können ja maximal 4 Bit deserialisieren, oder waren es 7? Dann 
könnte es ja gehen, der o.g. Chip überträgt die 18 Bit auf 4 Leitungen. 
Dann könnte es mit den GTP wirklich eng werden, sind ja "nur" 595MBit/s.

von Andreas B. (Firma: www.collion.de) (bergy) Benutzerseite


Lesenswert?

Christian R. schrieb:

> Allerdings weiß ich nicht, wie
> da die Komma und K-Chars aussehen, falls überhaupt vorhanden. Ich kenn
> das Protokoll auch nicht, weiß auf Anhieb nicht wie die
> Synchrosnisierung aussieht.

Beim Cameralink gibt es keine 8b10b Codiering. Es gibt keine 
K-Character. Das Allignement innerhalb des Protokolls ist fest auf den 
mitlaufenden Clock welcher 1/7 der Bautrate entspricht verbunden.

 Mit den ISERDES ist das immer so eine Sache,
> die können ja maximal 4 Bit deserialisieren, oder waren es 7? Dann
> könnte es ja gehen, der o.g. Chip überträgt die 18 Bit auf 4 Leitungen.
> Dann könnte es mit den GTP wirklich eng werden, sind ja "nur" 595MBit/s.

Die ISERDES Zellen des Virtex5 koennen von Hause aus 6Bit 
deserialisieren, ABER es kann einem Slave ISERDES auf 1/10 erweitert 
werden...

Wenn man wirklich mit den GTPs arbeiten will dann kommt man nicht umhin, 
das ganze zu "oversampeln" und dann hinterher wieder 
auseinanderzunehmen. Wie gesagt das Cameralink  LVDS Geraffel kennt nix 
von dem was die Rocket-IOs ausmachen. Keine 8b10b (oder 64/68 oder wie 
auch immer geartete Bitkodierung mit DC Balancing).

von Christian R. (supachris)


Lesenswert?

Achso, na dann gehts mit den GTP kaum. Die ISERDES sind allerdings auch 
nicht ganz ohne. Ich wollte sowas mal für einen seriall ausgebenden High 
Speed ADC machen. Aber die 14 Bit hab ich da nirgends unter bekommen und 
zu langsam war die Geschichte auch noch (Spartan 6).

von Ralf Kimme (Gast)


Lesenswert?

>Mit den ISERDES ist das immer so eine Sache,
Habe mal nachgesehen: Laut CoreGen können die 10 Bit. (???)

von Christian R. (supachris)


Lesenswert?

Richtig. Das ist je nach Typ bissl unterschiedlich. Ich hatte da jetzt 
den S6 im Hinterkopf, der kann mit Kaskadierung nur 8 Bit maximal. Dann 
muss der Eingang aber differenziell sein.

von Ralf Kimme (Gast)


Lesenswert?

Kaskadierung? Kann man das auch weiter treiben?

von Andreas B. (Firma: www.collion.de) (bergy) Benutzerseite


Lesenswert?

Ralf Kimme schrieb:
> Kaskadierung? Kann man das auch weiter treiben?

Das sind keine freie Resourcen sondern fest den IO-Zellen zu geordnet.
Von daher ist eine Kaskadierung nicht möglich.

von Mr. Hale (Gast)


Lesenswert?

Na was denn jetzt: Kaskdierung ja oder nein?

Welche maximale Deserialisation bekommt man denn damit hin?

von Christian R. (supachris)


Lesenswert?

Wieso nicht mal einfach im User Guide nachschauen? Da stehts eindeutig 
drin. Ich hab bzgl. der Kaskadierung oben vom Spartan 6 gesprochen.

von Mr. Hale (Gast)


Lesenswert?

Der User Guide ist ein wenig unklar, finde ich. Einerseits wird davon 
gesprochen, dass man für mehr, als 6 Bits eine Kaskadierung braucht, um 
auf genügend Bits zu kommen und auch der Coregen das angeblich nicht 
kann, andererseits liefert der CoreGen eine Implementierung für bis zu 
10 Bits.

Ich habe das damals mit dem CoreGen gemacht, allerdings nur eben 6 Bits 
x n

von Christian R. (supachris)


Lesenswert?

Aus Interesse hab ich jetzt mal für den Spartan 6 so ein Design 
simuliert. Ausgangspunkt ist die serielle LVDS Ausgabe des neuen 
LTM9010-14 ADC Modul von LT. Mithilfer der XAPP1064 versteht man besser, 
wie die ISERDES funktionieren. Und tatsächlich lässt sich das bei LVDS 
so verschalten, dass die 2 Lanes mit je 400 MHz und DDR mit dem S6 mit 
minimalem Ressourcen-Verbrauch einlesbar sind. Da braucht man nicht mal 
eine PLL, geht mit den BUFIO2 Dingern und Master/Slave ISERDES. Das 
Frame Signal erzeugt das BitSlip Signal, um die Datenströme an der 
Wortgrenze auszurichten. Sehr interessant die ganze Geschichte....

von Johann (Gast)


Lesenswert?

Ich kann nur dazu raten blos keine GTP/GTX zu verwendet. Man benötigt 
für den vollen Camera Link Standard 15 Leitungen mit je 595MHz(85MHz x 
7). Demnach benötigt man auch 15 GTP/GTX. Dieser FPGA kostet dann so 
extrem viel das es kaum bezahlen kann. Die 3 IC kosten demnach 20€ oder 
weniger benötigen halt nur ein wenig Platz man kann ohne Propleme einen 
30€ teuren Spartan 6 nehmen. So kostet der Virtex 5 bereits mit den 
ganzen GTP/GTX bereit mehr als 1000€.

von Christian R. (supachris)


Lesenswert?

Ja, das war eine Fehl-Annahme von mir mit den GTP/GTX. Mit den ISERDES 
scheint das ja ziemlich gut zu gehen, die sind offenbar genau für sowas 
gemacht.

von Oli (Gast)


Lesenswert?

>BitSlip Signal
Muss das vor oder zum Wortwechsel aktiv sein?

von Christian R. (supachris)


Lesenswert?

In der Appnote wird das immer mal für einen (langsamen) Takt aktiv, 
solange das empfangene Wort nicht der Referenz entspricht. Dann ist da 
ein Zähler, der eine Pause macht und dann wieder nachguckt. In der 
Simulation dauert es ein paar solcher Zyklen, bis der sich auf das Frame 
Signal synchronisiert hat. Das ist recht einfach. Am Anfang hat mich nur 
die verdrehte Bit-Reihenfolge etwas genarrt.

von Matthias (Gast)


Lesenswert?

Christian R. schrieb:
> Am Anfang hat mich nur
> die verdrehte Bit-Reihenfolge etwas genarrt.

Ja das ist nervig! Ich sass hier auch etwa eine Woche bis mir das 
BitSlip signal auffiel und ich endlich meinen stream synchronisieren 
konnte...

von Andi (chefdesigner)


Lesenswert?

Man kann auch händisch auf den Takt synchronisieren, wenn man die Lage 
des Signals kennt. Beim Cameralink liegt der Bitwechsel je nach 
Protokoll anders. Daher sollte man sowas einstellbar halten.

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.