Hi Leute,
ich entwickle zurzeit ein Hardware-Design, um mehrere Kameras per
MIPI/CSI2 an einen Cyclone 10 GX anzuschließen, um in einem zweiten
Schritt die Daten auszuwerten bzw. an eine CPU komprimiert
weiterzuleiten. Der FPGA hat an sich kein MIPI-Interface,
dementsprechend wird ein Widerstands-Netzwerk an den Pins
davorgeschaltet, um die High-Speed Signale von den Low-Power Signalen zu
trennen (drei Widerstände je differentielles Paar). Der FPGA ist dann im
Stande, die High-Speed Signale als LVDS zu interpretieren, was ideal
ist, um den internen SERDES zu füttern. Die MIPI Clock (DDR, 596 MHz)
geht an eine PLL, welche den SERDES ansteuert (1188 MHz bei
verschiedenen Phasen, 148.5 MHz für paralleles Auslesen) und erkennt
automatisch, welche Phase die beste ist - soweit so gut. Nun habe ich ja
das Problem, dass die Clock nicht dauerhaft an ist, und die IO-PLL laut
Datenblatt bis zu 1ms braucht für den Lock. Die Clock vom Transmitter
(Kamera) geht aus dem Low-Power-Modus in den aktiven Modus erst dann,
wenn Daten angefordert wurden, und die Datenleitung ist nach wenigen
hundert ns aktiv (laut MIPI-Spec). Das passt nicht zu der 1ms für die
PLL lock.
Seht ihr da einen Denkfehler? Habt ihr Ideen, was ich vergessen haben
könnte? Die ersten Testplatinen sind erst in zwei Monaten geplant, bis
dahin wollte ich schonmal abgeklärt haben, ob es überhaupt gehen kann.
Viele Grüße, dommynik
Ich habe mit MIPI noch nichts gemacht und kenne den Standard nicht.
Wenn ich Dich richtig verstanden habe, braucht die PLL zu lange um
einzurasten.
Ich sehe da auf Anhieb drei Möglichkeiten:
1. eine externe PLL, die schneller einrastet (mit einem schmalbandigem
VCO)
2. die ersten Daten nach dem Wakeup verwerfen (wenn das standardkonform
ist)
3. der internen PLL einen Hilfstakt zuführen und diesen nutzen, solange
der externe Takt fehlt.
Duke
> 1. eine externe PLL, die schneller einrastet (mit einem schmalbandigem> VCO)
Damit habe ich keine Erfahrung, aber behalte ich im Hinterkopf.
> 2. die ersten Daten nach dem Wakeup verwerfen (wenn das standardkonform> ist)
Könnte unter Umständen direkt zu Problemen führen, da ich damit die
Synchronisations-Präambel verpasse, und ich das Bit/Byte-Alignment nicht
korrekt durchführe.
> 3. der internen PLL einen Hilfstakt zuführen und diesen nutzen, solange> der externe Takt fehlt.
Interessante Idee, ich würde also in einer anderen PLL die 594 MHz
erzeugen, und per Mux-Buffer die Clocks switchen. Ist bekannt, wie lange
eine generische PLL ihre Lock behält, nachdem die Referenz-Clock aus
ist? (Im Falle, dass die externe Clock noch nicht stabil ist, und ich
dann aber schon darauf switche).
Viele Grüße, dommynik
Update: Das Reference Design von Lattice (RD1146) informiert darüber,
dass viele MIPI-Bildsensoren so konfiguriert werden können, dass die
Clock nicht in den Low-Power-Modus geht, sondern durchgängig
durchtaktet. Ideal, um die PLL zu versorgen! Der Bildsensor, den wir
verwenden, kann das auch (versteckt in einem Addendum), hoffentlich ist
das Problem damit gelöst!
> 3. der internen PLL einen Hilfstakt zuführen und diesen nutzen, solange> der externe Takt fehlt.
Zusätzlich dazu habe ich überprüft, ob der FPGA dies unterstützt, und
tatsächlich hilft die PLL hier sehr stark, indem sie zwei Input Clocks
unterstützt, für jede Clock ein "clkbad"-Signal ausgibt, und einen
automatischen oder manuellen Switchover nutzen kann! Nette Geschichte ;)
dommynik schrieb:> Ist bekannt, wie lange> eine generische PLL ihre Lock behält, nachdem die Referenz-Clock aus> ist?
Mir ist nicht. Das hängt ja von der Dimensionierung des Loop-Filters und
der Art des Phasendiskriminators ab. Beim UKW-Rundfunk nimmt man ja
einen Phasendiskriminator, der keine Steuerimpulse abgibt, wenn das
Eingangssignal weg ist. Damit läuft - theoretisch - die Frequenz nicht
weg.
Im konkreten Fall hilft wahrscheinlich nur ausmessen und einen
Sicherheitsaufschlag zu addieren.
dommynik schrieb:> dass die> Clock nicht in den Low-Power-Modus geht, sondern durchgängig> durchtaktet.
Problem gelöst, oder?! :)
Duke
> Problem gelöst, oder?! :)>> Duke
Sehe ich, wenn ich das Eval-Board in meinen Händen halte, und das Design
draufspiele! ;)
> Das hängt ja von der Dimensionierung des Loop-Filters und> der Art des Phasendiskriminators ab. Beim UKW-Rundfunk nimmt man ja> einen Phasendiskriminator, der keine Steuerimpulse abgibt, wenn das> Eingangssignal weg ist. Damit läuft - theoretisch - die Frequenz nicht> weg.
PLLs sind für mich magische Konstrukte mit Kristallkugelkern und kleinen
Gnomen, die für den nötigen Schwung sorgen :P