Abend gegeben ist ein TV-Eingang,SDRAM (Single Port) und VGA Monitor TV-Eingang liefert Daten @ 27Mhz SDRAM läuft @166Mhz VGA liest Daten @ 49.5Mhz Der TV-Eingang liefert ein Bild, das in dem SDRAM gespeichert werden muss.*Gleichzeitig* muss das Bild aus dem SDRAM auf dem Bildschirm angezeigt werden. Hier im Forum wurde mir ein Dualport Interface mit FSM empfohlen. Im Moment bin ich einwenig durcheinander. Meine Realisierung sieht so aus: Ein doppelter input-buffer für TV-IN, und doppelter Output-Buffer für VGA-Out. Beides als BRAM. ------------Initialisiserung-------------- State1: Schreibe in Inputbuffer1, State2: Schreibe in Inputbuffer2 Übertrage Inputbuffer1=>SDRAM State3: Schreibe in Inputbuffer1 Übertrage Inputbuffer2=>SDRAM State4: Inputbuffer1 ist voll Schreibe in Inputbuffer2 Übertrage SDRAM=>Outputbuffer1 State5 Übertrage Inputbuffer1=>SDRAM Schreibe in Inputbuffer2 State6 Inputbuffer2 ist voll Schreibe in Inputbuffer1 Übertrage SDRAM=>Outputbuffer2 --------------------VGA Ausgabe beginnt ab hier--------------- State7 Lese Outputbuffer1 Schreibe in Inoutbuffer1 Übertrage Inputbuffer2=>SDRAM State8 Lese Outputbuffer2 Schreibe in Inputbuffer2 Übertrage Inputbuffer1=>SDRAM State9 Lese Outputbuffer2 Schreibe in Inputbuffer2 Übertrage SDRAM=>Outputbuffer1 State10 Lese Outputbuffer1 Schreibe in Inputbuffer1 Übertrage Inputbuffer2=>SDRAM State11 Lese Outputbuffer1 Schreibe in Inputbuffer1 Übertrage SDRAM=> Outputbuffer2 State12 Lese Outputbuffer2 Schreibe in Inputbuffer2 Übertrage Inputbuffer1=>SDRAM State13 GoTo State9 ------------------------------------------- Wie man sieht, SDRAM muss in der Lage sein, während ein Buffer geschrieben/gelesen wird die Daten aus einem Buffer in den anderen zu schieben. Eigentlich soll das auch gehen, weil der SDRAM Clock deutlich schneller als TV-In oder VGA ist.Nicht? Was mich auch verwirrt, der SDRAM braucht alle 64ms 8K Refresh-Zyklen. D.H in dieser Zeit sammelt sich die "Warteschlange" auf der TV-In Seite von 1301 Byte, und auf der VGA Seite 2400 Byte. Entsprechen diese Größen auch die minimale Buffergröße? D.h. ich werde so um 2x1301 und 2x2400 BRAM Benötigen? Bin ich auf dem richtigen Weg, oder mache ich es komplett falsch?=) Vielen dank für Hilfe=)
:
Bearbeitet durch User
Böser Kommunist schrieb: > Was mich auch verwirrt, der SDRAM braucht alle 64ms 8K Refresh-Zyklen. Da Du den SDRAM kontinuierlich ausliest, braucht der auch keinen Refresh mehr. Hast Du mal den Link zum Datenblatt des SDRAM? Duke
Böser Kommunist schrieb: > Was mich auch verwirrt, der SDRAM braucht alle 64ms 8K Refresh-Zyklen. Daten wiederauffrischen, die keine 64ms im RAM drin bleiben?
Böser Kommunist schrieb: > Bin ich auf dem richtigen Weg, oder mache ich es komplett falsch?=) IMHO eher zu kompliziert. - Wozu braucht Du überhaupt noch das SDRAM, wenn Du die Daten sowieso komplett im BRAM zwischenbufferst? Wieso nicht nur 2 BRAM Buffer, einer wird gefüllt, der anderer solange immer wieder ausgelesen bis der andere frisch gefüllt ist. Dann wird umgeschalten. - So wie ich Deinen FSM Ansatz verstehe, funktioniert das auch nicht richtig, weil so Operationen "Übertrage Inputbuffer1=>SDRAM" "Übertrage SDRAM=> Outputbuffer2" lange brauchen und nicht hintereinander ausgeführt werden sollten, sondern parallel. Deine FSM macht aber alles hintereinander. Wenn Du es mit SDRAM machen willst, dann schreibe oder suche einen SDRAM Controller mit 2 Ports, einer fürs Lesen, einer fürs Schreiben. Beide Ports sind dann hand-shake getrieben, d.h. sie haben kein deterministisches Timing, sondern zeigen mit einem Quittierungssignal an, dass die Schreib- oder Leseanforderung erledigt wurden. Der SDRAM Controller versteckt dann intern die Details wie - Gleichzeitiger Lese-/Schreibzugriff an beiden Ports - den Refresh des SDRAMs. Der Refresh wird übrigens nicht alle 64 ms ausgeführt, sondern gleichmäßig über die 64 ms verteilt. Da Du nun aber kein deterministisches Timing am SDRAM Controller mehr hast, Du aber die Daten weiterhin mit einer festen Taktrate hereinbekommst, braucht es zwischen TV-IN und SDRAM ein FIFO, das die Daten kurzzeitig aufnimmt, wenn der SDRAM Controller die Daten nicht sofort schlucken kann. Beim Auslesen ist es ähnlich.
morgen es geht um iS42/45S16320 http://www.issi.com/WW/pdf/42-45R-S_86400D-16320D-32160D.pdf&ved=0CBwQFjAA&usg=AFQjCNHD2YIKDr_o5YGz6oDSVtt3_N43Uw&sig2=3E-wyb2hb62JrdFsZP_bQQ Ich brauche Sdram, weil ich das ganze Bild abspeichern will. Ich verwende altera sdram controller, und kann somit nicht entscheiden, wann refresh statt findet. Wie führe ich denn Lese- und Schreibvorgänge parallel aus, wenn ich einen single port Chip habe?
:
Bearbeitet durch User
Böser Kommunist schrieb: > Ich brauche Sdram, weil ich das ganze Bild abspeichern will. Böser Kommunist schrieb: > Ein doppelter input-buffer für TV-IN, und doppelter Output-Buffer für > VGA-Out. Beides als BRAM. Wie groß sind dies Buffer dann? Nur ein Teil des Bildes? Böser Kommunist schrieb: > Wie führe ich denn Lese- und Schreibvorgänge parallel aus, wenn ich > einen single port Chip habe? Es geht nicht um den Speicherchip, den bedient der SDRAM Controller. Du oder deine Logik sprichst nur mit dem SDRAM Controller, und der kann verschieden ausschauen, und ein oder mehrere Ports haben (z.B. der MIG von Xilinx). Wenn er 1 Port hat, dann musst Du die Zugriffe regeln und eine Art Multiplexer bauen, der z.B. den Lesezugriff warten macht, bis der Schreibzugriff abgeschlossen ist. Hat der SDRAM Controller mehrere Ports, dann ist dieser Multiplexer schon intern eingebaut. In jedem Fall hast Du kein deterministisches Timing, sondern jede Lese-/oder Schreibanforderung muss solange warten bis der SDRAM Controller sie quittiert, weil ja intern im SDRAM Controller gerade schon ein Zugriff oder ein Refresh Zyklus laufen kann.
:
Bearbeitet durch User
Ja, Der Buffer soll nur ein Teil des Bildes buffern. Vllt. eine Linie (752 Pixels). Mein SDRAM Kontroller hat nur ienen Port. also muss ich es mit einem MUX machen,. So wie oben beschrieben praktisch
Ok, ich nehme an, mein oben beschriebener Plan ist richtig:)
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.