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?
Gast
#3888412
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
Gast
#3889178
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
Gast
#3889239
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.
Gast
#3891275
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.
Gast
#3891302
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.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.
