Forum: FPGA, VHDL & Co. Deserializer im FPGA


von Sebastian (Gast)


Lesenswert?

Hallo Leute,

ich möchte einen Camera Sensor an den Virtex 5 anschließen. Die Kamera 
besitzt 4 Daten-Lanes, 1 Sync-Lane und 1 Pixel_Clock Leitung

Der Pixel Clock besitzt eine Frquenz von 72MHz. Die Daten werden per 
LVDS übertragen.

Bei den Daten werden 12Bit serial mit einer Frequenz von 288MHz 
übertragen. Für die Datenübertragung wird das DDR-Verfahren verwendet. 
Demnach werden über 1-LVDS Lane 576MBit übertragen.

Ich möchte die Daten mit Hilfe von Deserializern in einen parallelen 
Datenstrom umwanden. Da 1 Pixel 12Bit besitzt benötige ich 2 
Deserializern für 1 Datenstream.

So weit so gut. Ich bin mir jedoch unsicher mit der Clockfrequenz am 
Deserializer. Wenn der Clock eine Frequenz von 72MHz besitzt und die 
Daten mit 288MHz übertragen werden dann noch das DDR verfahren verwendet 
wird, dann müste ich am Deserializer eine Frequenz von 288MHz mal 2 = 
576MHz anlegen. Demnach muss ich den Pixelclock mit Hilfe eines DCMs auf 
576MHz (72MHz * 8) boosten. Oder reicht es das ich einen 288MHz Clock 
mit 0° und einen 288MHz Clock mit 180° erzeugen und diese an den 
Deserializer anschließe?

von Sebastian (Gast)


Lesenswert?

Da gibt es so viele CLK Anschlüsse an dem ISERDES. Es gibt den CLK, 
CLKB, CLKDIV und den OCLK. Wenn einer sich mit dem ISERDES auskennt 
bitte schreibt wozu die ganezn CLK Eingänge gut sind und vor allem 
welche ich davon anschließen muss.

Momentan ist das Konzept das die Daten in einen Block RAM geschriebe 
werden sollen und zwar nur dann wenn es sich um gültige Pixel Daten 
sind. Deshalb muss ich noch eine State-Machine erzeugen.

von Sebastian (Gast)


Lesenswert?

OCLK fällt schon mal weg da ich nicht den Memory Mode benutze.

Benötige ich überhaupt den CLKB Port wenn ich den ISERDES im DDR Mode 
betreibe?

Es gibt zwei Möglichkeiten den CLK und CLKB bei foldenen Input 
Bedingungen anzuschließen (Daten kommen mit 288MHz rein durch DDR wird 
daraus 576MBit)

1. Möglichkeit:
   -CLK Port 288MHz
   -CLKB Port 288MHz 180° Phasenversetzt

2. Möglichkeit
   -CLK Port 576MHz
   -CLKB wird nicht angeschlossen

Bei der 1. Möglichkeit würde ich den Clock Input (72MHz) auf ein BUFG 
geben. Diesen dann an ein DCM anschließen. Aus dden 72MHz 288MHz 
generieren (72MHz * 4 = 288MHz). Den Ausgang vom DCM auf einen BUFG 
geben und diesen dann an den CLK Port vom ISERDES anschließen. Außerdem 
erzeugt der DCM auch einen 288MHz 180° Phasenversetzen Clock. Diesen 
würde ich dann an den CLKB Port vom ISERDES anschließen. Alles 
Datenleitungen zum ISERDES werden über IODELAYS eingestellt. Dies ist 
vielleich auch nicht notwendig, da die Leitungen alle auf unter 78ps 
genau geroutet sind. Da die kleinste Zeitauflösung 78ps ist kann man 
sich das auch sparren.

von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Lesenswert?

Sebastian schrieb:
> Wenn einer sich mit dem ISERDES auskennt
> bitte schreibt wozu die ganezn CLK Eingänge gut sind und vor allem
> welche ich davon anschließen muss.

Was spricht denn gegen die Infos im entsprechenden Userguide?

https://www.xilinx.com/support/documentation/user_guides/ug190.pdf

Ab Seite 353.

von tja (Gast)


Lesenswert?

Sorry wenn ich das sage:
1) rtfm: SelectIO - da wird alles genau beschrieben
2) Wizzard verwenden!!! Was du geschrieben hast habe ich nicht das 
Gefühl das du das auf diesem Niveau selber machen kannst. Der Wizzard 
nimmt dir die komplette Arbeit ab!
3) Simulation: Versuch erstmal alles zu simulieren, funktioniert 
überraschend gut ;-)
4) schau dir auch mal das Cascading Feature an, da kannst evtl. 12 Bit 
direkt machen, ansonsten musst du dir noch eine Gearbox 
zusammenschustern

von Sebastian (Gast)


Lesenswert?

Da die ISERDES nur 10Bit unterstützen, konfiguriere ich die Kamera auf 
10Bit um. Dann sollte das passen

@Tobias B.

Dank für den Hinweis das Xilinx auch ein PDF, indem beschrieben wird wie 
der ISERDES funktioniert. Jedoch steht hier nicht eindeutig drin was mit 
dem CLKB gemacht werden soll und ob der nur im DDR Mode angeschlossen 
werden muss.

Die 2. Sache ist der CE1 und CE2 hier werde ich auch nicht aus der 
Beschreibung schlau.

@tja

Gerfühle können täuschen ich habe schon ganz andere Dinge auf dem FPGA 
folbracht :-)

von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Angehängte Dateien:

Lesenswert?

Sebastian schrieb:
> @Tobias B.
>
> Dank für den Hinweis das Xilinx auch ein PDF, indem beschrieben wird wie
> der ISERDES funktioniert. Jedoch steht hier nicht eindeutig drin was mit
> dem CLKB gemacht werden soll und ob der nur im DDR Mode angeschlossen
> werden muss.

Hmmm, und was genau versteht man da nicht (siehe Anhang)? Du sollst CLKB 
an die negierte CLK anschliessen. Und das "Always" im Satz macht es dann 
doch ganz eindeutig.

Aber immerhin hast du jetzt mal eine konkrete Frage gestellt. Darauf 
aufbauend macht es deutlich mehr Spass zu helfen.

Sebastian schrieb:
> Die 2. Sache ist der CE1 und CE2 hier werde ich auch nicht aus der
> Beschreibung schlau.

Und hier gibt es sogar einen ganzen Paragraphen zum Thema, einfach mal 
das UG190 richtig lesen und simulieren. Simulieren bildet. ;-)

von Sebastian (Gast)


Lesenswert?

Ok dann werde ich den negierten Clock an CLKB anschließen.

Kannst Du meine 2. Frage auch beantworten? Ja den Paragraphen kenne ich 
jedoch verstehe ich ihn nicht. Wieso denn bitte schön 2 CE.

von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Lesenswert?

Sebastian schrieb:
> Kannst Du meine 2. Frage auch beantworten? Ja den Paragraphen kenne ich
> jedoch verstehe ich ihn nicht. Wieso denn bitte schön 2 CE.

Was gibt es da nicht zu verstehen? Steht doch klipp und klar dabei.
1
When NUM_CE = 1, the CE2 input is not used, and the CE1 input is an active High clock
2
enable connected directly to the input registers in the ISERDES_NODELAY. When
3
NUM_CE = 2, the CE1 and CE2 inputs are both used, with CE1 enabling the
4
ISERDES_NODELAY for 1⁄2 of a CLKDIV cycle, and CE2 enabling the
5
ISERDES_NODELAY for the other 1⁄2. The internal clock enable signal ICE shown in
6
Figure 8-4 is derived from the CE1 and CE2 inputs. ICE drives the clock enable inputs of

Gegen Faulheit hilft Bares, also Geld in die Hand nehmen und nenn Kurs 
bei PLC2 oder Doulos buchen. Wenn Englisch das Problem ist vielleicht 
mal mit Deepl.com probieren.

: Bearbeitet durch User
von Sebastian (Gast)


Lesenswert?

@Tobias

Du bist so ein Held einfach den Text aus dem Datenblatt zu kopieren und 
anschließend die Leute zu beleidigen. Solche Leute benötigt das Forum 
hier. Aber die Frae kontest Du trotzdem nicht beantworten. Es ist 
einfach nicht logisch was dort steht und die Erklärung ist alles andere 
als gut gelungen. Da hilft auch keine Übersetzungmaschine. Lass es 
einfach bleiben Deine schlechte Laune an andere auszulassen. Entweder 
schreibst Du was anderen hilft oder lass es einfach bleiben. Denn wenn 
andere auch das Problem haben müssen Sie sich nicht durch so einen Mist 
lesen

von -gb- (Gast)


Lesenswert?

Was ist denn die 2. Frage. Ein ich werde daraus nicht schlau ist keine 
Frage.
Ja, das hat 2 CEs, aber man muss nicht beide verwenden, einer genügt.
Wenn man nur einen CE verwendet dann ist das das CE für den ganzen 
IOSERDES. Wenn man zwei CEs verwendet dann gelten die für die beiden um 
π verschobenen Clocks getrennt. Also der eine ist dann der CE für die 
eine Hälfte der Zeit und der andere für die andere Hälfte der Zeit.

von Sebastian (Gast)


Lesenswert?

Danke für die Antwort jedoch ist das nicht gerade logisch. Denn beide CE 
sollen sich ja auf den CLKDV beziehen. Logisch wäre es wenn der eine CE1 
für den CLK und CLKB pin ist und der CE2 für den CLKDIV. Somit kann man 
beide Clocknetze unabhängig voneinander aktivieren. Aber auch das macht 
keinen Sinn denn der ISERDES ist nur zu gebrauchen wenn alle Clock 
Netzwerke aktiviert sind, daher weder ich nur CE1 bei der Umsetzung 
benutzen.

von Klakx (Gast)


Lesenswert?

eigentlich finde ich, dass Tobias dir schon sehr viel geholfen hat.

Es steht wirklich einiges gut beschrieben im Userguide.

Hilfreich ist auch immer der Übertragungsstandard, ich tippe auf "Camera 
Link".

Ich empfehle wirklich zu wizard+simulieren. Damit erkennt man auch 
schnell wie sich die CE pins verhalten. Danach versteht man auch die 
Beschreibung besser.

von Klakx (Gast)


Lesenswert?

xapp1064 könnte auch noch ein paar Hilfestellungen geben.

von Sebastian (Gast)


Lesenswert?

Die Camera benutzt leider ein anderes Format als Camera Link. Beim 
Camera Link werde die Data auch nicht im DDR-Verfahren übertragen.

Die Camera hat 4 Datenstreams und einen Sycn Stream (hier gibts es 
Kommandos wie Start_Frame, StopFrame, Start_Line, EndLine, DarkPixel, 
Data_Pixel usw)

Zusätzlich gibt es einen LVDS Lock Stream mit 72MHz. Die Daten kommen 
mit 288MHz rein (DDR = 576MBit/s)


Ein DCM kommt hier leider nicht in Frage, da die Input Freuquenz zu 
niedrig ist und die Output Frequenz zu hoch. Die PLLs auf dem Virtex 5 
habe ich bisher noch nicht genutzt. Hier bin ich mir unsicher ob ich das 
Feedback (Ausgang mit Eingang verbinden muss und ob ich einen BUFG 
dazwischen schalten muss)



Ich finde solche Beleidungen wie "Gegen Faulheit hilft Bares, also Geld 
in die Hand nehmen und nenn Kurs bei PLC2 oder Doulos buchen. Wenn 
Englisch das Problem ist vielleicht mal mit Deepl.com probieren" schon 
wieder sehr persönlich."

von Sebastian (Gast)


Lesenswert?

Den Clock Wizard kannte ich auch noch nicht. Danke für den Hinweis. Ich 
habe den immer selber konfiguriert.

von tja (Gast)


Lesenswert?

Sebastian schrieb:
> @tja
>
> Gerfühle können täuschen ich habe schon ganz andere Dinge auf dem FPGA
> folbracht :-)

Sebastian schrieb:
> Den Clock Wizard kannte ich auch noch nicht. Danke für den Hinweis. Ich
> habe den immer selber konfiguriert.

Selten so gelacht ...
Hast jetzt schon eine Simulation am Laufen?

von Sebastian (Gast)


Lesenswert?

Habe schon vor 8 Jahren ein 800MHz ADC Board gebaut was die Daten über 
extended Camera Link übertragen hat. Parallel habe ich noch ein Kamera 
Bild mit 100FPS übertragen. Beim Camera Link Standard habe ich damals 
auf die externen Serializer zurückgegriffen.

Habe ein Testdesign implementiert. Simulation kommt Diesntag. Hatte 
heute einfach zu viel parallel laufen. Zumindestens zeigt er keine 
Fehler bei der Implementierung an das stimmt mich schon mal positiv fürs 
Wochende.

von Sebastian (Gast)


Angehängte Dateien:

Lesenswert?

Die Bitslip-Funktion reagiert in der Simulation nicht. Ich habe einen 
Screenshot von der Simulation begefügt. Egal ob ich den BITSLIP-Pin 
dauerhaft auf '1' setzte oder Pulse sende, der Ausgang des ISERDES 
bleibt unverändert.

Da ich 10Bit DDR benötige habe ich bei beiden ISERDES Module (Master und 
Slave) den BITSLIP-Mode aktiviert. Zudem laufen beide ISERDES-Module in 
Networking Mode. Die beiden SHIT_OUT Ports vom Master habe ich auch mit 
den SHIFT_IN Ports vom Slave verbunden.

von Sebastian (Gast)


Lesenswert?

Ich benutze noch den Virtex 5 mit ISE 14.7

von Sebastian (Gast)


Lesenswert?

Den Wizard gibt es in der ISE Version 14.7 noch nicht.

von Sebastian (Gast)


Lesenswert?

Ich habe etwas aus dem Jahre 2009 gefunden.

Der ISERDES muss bei der SIMULATION einmal zurückgesetzt werden. Hierfür 
den Reset Pin benutzen. Falls man dies nicht macht soll es Probleme mit 
der BITSLIP-Funktion geben.

von Gustl B. (-gb-)


Lesenswert?

Das ist iirc auch beim XADC oder dem FIFO von Xilinx der Fall. Auf 
Hardware funktioniert das auch ohne Reset, aber in der Simulation muss 
man den machen. Steht aber auch in der Fehlermeldung drinnen.

: Bearbeitet durch User
von Sebastian (Gast)


Lesenswert?

Das war schon wieder zu Haare raufen :-)

von Sebastian (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe noch 1 Fehler in der Simulation den ich mir nicht erkären kann. 
Der Ausgang Q2 vom Master Deserializer funktioniert bei der Simualtion 
leider nicht.

Ich verwendet dieses Muster als Trainingspattern "0000000001" In der 
Simulation sieht man das Muster  2 CLKDV Takte anliegt. Dies kann aber 
nicht sein. Ich habe schon versucht das Bitslip Signal durchgehen auf 
'1' zu setzen oder mit Pulsen es erzeugt keinen Unterschied.

von Sebastian (Gast)


Lesenswert?

Das komische dabei ist wenn der Bitslipt Pin den Zustand '0' besitzt, 
dann ist gerade in der Simulation der Ausgang Q2 gesetzt. Sofern ich 
aber den Bitslip aktiviere. Bekomme ich nie wieder den Zustand das Q2 
'1' ist.

Daher ist auch in der Simulation zu sehen das der eine Zustand (dout = 
8) doppelt so lang ist wie die Anderen.

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.