Hi, Ich will mit einem FPGA und einem SDRAM eine saubere VGA Ausgabe (800x600) realisieren. Zur Zeit funktioniert es folgendermaßen: 1:Ein Video wird von TV-Eingang gelesen und in den SDRAM geschrieben. 2:Sobald ein Bild vollständig im SDRAM vorliegt, wird es auf dem VGA Bildschirm ausgegeben. 3:GoTo 1 Das Problem ist, ich kann nicht gleichzeitig von SDRAM lesen und schreiben:( D.h. der Bildschirm bleibt während Vorgang 1 schwarz=>ich sehe ein blinkendes Bild. Gibt es ein Trick, wie ich sowas umgehen kann?
Böser Kommunist schrieb: > Hi, > > Ich will mit einem FPGA und einem SDRAM eine saubere VGA Ausgabe > (800x600) realisieren. > > Zur Zeit funktioniert es folgendermaßen: > > 1:Ein Video wird von TV-Eingang gelesen und in den SDRAM geschrieben. > 2:Sobald ein Bild vollständig im SDRAM vorliegt, wird es auf dem VGA > Bildschirm ausgegeben. > 3:GoTo 1 > > Das Problem ist, ich kann nicht gleichzeitig von SDRAM lesen und > schreiben:( > D.h. der Bildschirm bleibt während Vorgang 1 schwarz=>ich sehe ein > blinkendes Bild. > > Gibt es ein Trick, wie ich sowas umgehen kann? Du schreibst in einen zweiten SDRAM und schaltest die um. Double buffering Zweite Möglichkeit: Wärend des Vorgang 1 wegschauen. ;)
Ich habe leider nur einen SDRAM chip auf dem Board :) (DE1-SoC)
Böser Kommunist schrieb: > Gibt es ein Trick, wie ich sowas umgehen kann? Vorrausgesetzt die Bandbreite des SDRAMs reicht: Dualport Interface mit ArbiterFSM und Multiplexer implementieren.
Danke, ich muss mal googlen was ArbiterFSM heißt Hier sind einiger angaben zum System SDRAM geht bis 200MHz VGA Ausgabe mit 49MHz Tv-Eingabe mit 27 MHz
@ Böser Kommunist (Firma: UdSSR) (chromosoma) >Danke, ich muss mal googlen was ArbiterFSM heißt Nichts weiter als ein etwas intelligenterer Multiplexer, der den Zugriff von zwei Logikmodulen auf einen SDRAM regelt. >SDRAM geht bis 200MHz >VGA Ausgabe mit 49MHz >Tv-Eingabe mit 27 MHz Ja und? Das Grundprinzip ist immer das gleiche. Multiplexen, und das mit einer sinnvollen Blockgröße bzw. Frequenz. D.h. man speichert nicht ein komplettes Bild ohne Unterbrechung sondern bestenfalls eine Zeile. Währenddessen werden die Videodaten aus einem kleinen Zwischenpuffer (BRAM) ausgegeben bzw. dort reingeschrieben. Somit ist immer im schnellen Wechsel jedes Modul mal dran, das auf den SDRAM zugreifen will. So wie L1/L2 cache bei einer großen CPU. Wenn man nicht eine komplette Zeile speichern kann/will, muss man halt Teile einer Zeile speichern. Letztendlich darf man aber nicht so weit runter gehen, dass der SDRAM nicht mehr effektiv im Burstmodus arbeitet, denn dann geht die Bandbreite in den Keller. Die Burstlänge sollte man möglichst gut ausnutzen (2/4/8 Byte oder ganze Page). Bei einfachem SRAM kann man auf Byte/Wortebene multiplexen, ohne nennenswerte Leistungseinbrüche zu erzeugen.
Hm, D.h. ich brauche an den beiden Seiten ein Double Buffer je 2xBlockgröße. Ich werde es versuchen
Böser Kommunist schrieb: > 1:Ein Video wird von TV-Eingang gelesen und in den SDRAM geschrieben. > 2:Sobald ein Bild vollständig im SDRAM vorliegt, wird es auf dem VGA > Bildschirm ausgegeben. > 3:GoTo 1 Also erstens: du meinst nicht wirklich ein "Video" vom TV, sondern RGB-Daten, ja? (Video wäre z.B. AVI, MP4 und Konsorten) Zweitens: du hast 2 völlig unterschiedliche Zugriffsraten zwischen Schreibvorgang vom TV zum RAM und Lesevorgang vom RAM zum VGA-Monitor. Dabei muß dein Lesevorgang gleichmäßig sein, damit dein VGA-Monitor sein erforderliches Signalverhalten bekommt. Der Schreibvorgang hingegen kann ungleichmäßig sein. Also mußt du für jeden Lesezyklus eine Zweiteilung vornehmen: In der einen Hälfte des Zyklus liest du den RAM aus und verfrachtest das Gelesene in eine Breitseite Latches, von wo aus es für den VGA-Moni zur Verfügung steht. In der zweiten Hälfte des Zyklus kannst du (falls anstehend) einen Schreibvorgang in dein RAM vornehmen. Dazu mußt du natürlich die Daten vom TV zuvor ebenfalls in einer Breitseite Latches zwischenspeichern und dir den Zustand "zwischengespeichert" merken, bis du die Daten im RAM untergebrcacht hast. Klaro? W.S.
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.