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?
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.
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.
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
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 :-)
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. ;-)
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.
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.
@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
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.
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.
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.
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."
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?
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.
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.
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.
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.
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.
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.