Hallo. Ich besitze ein DE1-SOC FPGA Board, und will damit ein analoges CCD-Kamera auslesen und das Bild auf dem VGA Display zeigen. DE1-SoC hat ADV7180 video decoder, und damit will ich die CCD Kamera auslesen. Ich habe so was noch nie gemacht, und bin ein wenig verwirrt was die Clock an verschiedenen Komponenten angeht. Der decoder selbst liefert die Daten mit 27MHz. Diesen Takt will ich auch in den FPGA Benutzen. Zuerst gehen die Daten in 4-Byte Buffer, dort werden stop/start Signale erkannt und auch dort geschieht die Konvertierung zwischen YCrCb =>RGB Die RGB Daten werden im 2 Kbyte Buffer abgespeichert. Diese 2Kbyte kommen dadurch zustande, dass der SDRAM alle 85ms 8K Takten für "refreshing" braucht. Der SDRAM selbst wird mit 166 MHz getaktet. D.h. Der 2K Buffer wird mit 27Mhz gefüllt, und mit 166 MHz geleert. Je nach dem ob Read/Write Prozess abläuft will ich zwischen den Takten für den Buffer umschalten (27 oder 166 Mhz), so sollte keine Clock-Konflikte entstehen. Sobald das Bild vollständig im SDRAM gespeichert ist, gehen die Daten in den "Double Buffer" für VGA. Dieser besteht aus (2x) 3x752 Byte. jeweils für eine Zeile. Anbei noch das Blockdiagramm. Ich will einfach den Rat holen, ob ich alles richtig geplant habe, nicht dass ich am Ende irgendwelche Jitter und Asynchonyzation Probleme kriege. Vielen dank für Feedback:) PS Darf ich ganz einfach in VHDL zwischen den Takten umschalten, (zB . mit with/select ), oder gibt es dafür ein spezielles Modul in Qsys?
:
Bearbeitet durch User
Böser Kommunist schrieb: > Darf ich ganz einfach in VHDL zwischen den Takten umschalten, (zB . mit > with/select ), oder gibt es dafür ein spezielles Modul in Qsys? Du darfst, aber es kann auch echt schiefgehen. Besser man verwendet die Clock-Muxe des Herstellers. Der Vorteil ist, das der Ausgang direkt auf ein globales Netz/Taktnetz geht. Bei Xilinx heißen die Clock-Multiplexer BUFGMUX und bei Lattice DCMA. Wobei erstere auch glichtfrei umschalten können, wenn ich das richtig verstanden habe. Schau mal in den Library-Guide von Altera, da solltest Du fündig werden. Duke
Dein Blockschaltbild sieht schon mal richtig aus. Damit Du nicht zwischen den Takten "hin und her" schalten musst, mach einfach je ein FIFO rein. Du brauchst 3 Komponenten: Input, Framebuffer, Output. Input -> FIFO -> Framebuffer -> FIFO -> Output Input läuft mit 27 MHz und schreibt die Daten immer in den Framebuffer, der intern z.B. mit 100 Mhz läuft. Output liest immer Daten aus dem Framebuffer und läuft mit 50 MHz (?) Welche Auflösung soll das sein? Wahrscheinlich wirst Du tripple-buffer brauchen, falls Eingang und Ausgang asynchron laufen. Kest
Was du noch vergessen hast: Du brauchst für die Initialisierung des AD7180 noch einen I2C-Controller, um z.B. die Beispielscripts für die Register aus dem Datasheet zu verwenden.
Hi, danke für die Antworten. So wie ich es verstanden habe, ist die I2C-Kommunikation nicht nötig, da die Default Einstellungen auch gut sind. Mal sehen.
Ich habe nicht dein DE1, sondern das NEEK. Wenn ich ohne I2C-Init. auf den AD7180 zugreifen will, dann bekomme ich kein Bild. Alternativ zu I2C-Init kann man auch ein Video-Demo laden und dann das eigene Design laufen lassen. Die Initialisierung des Demos wird dann einfach übernommen.
Hab nochmal kurz ins Datasheet geschaut: Mit den Default-Registerwerten kannst du recht haben. Aber: Du musst nach PowerUp ein Reset durchführen (mind. 5ms), entweder per Reset-Leitung oder per Register-Zugriff, d.h. per I2C.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.