Abend Ich verwende in meinem Design SDRAM Controller aus Qsys. Die SDRAM datein werden auf dem VGA Bildschirm angezeigt Der Avalon Memory Mapped Slave Interface ist direkt mit meinem FPGA design verbunden. Eigentlich soll die SAche gar nicht so kompliziert sein., aber ich bekomme mit regelmäßigen Abständen falsche Daten aus dem SDRAM, das sieht man auf dem Bildschirm sehr gut. Die daten werden nur dann geschrieben, wenn Waitrequest='0' ist, und gelesen wenn Rreadvalid and waitrequest='1' sind. Vermisse ich irgendwas? Soll ich selbst um irgendwelche CAS kümmern? Anbei das Testbild. DAs Textbild sollte aus den abwechselnde schwarze und weise Pixel bestehen, aber wie man sieht, es gibt regelmäßige Abstände, wo die Daten nicht übereinstimmen. Kann mir jemand hier bitte helfen?
Gast
#4017408
Da Du keine Sources geposted hast, kann dir keiner konkrete Hinweise auf Fehler geben. Wie sieht dein Qsys-System aus, läuft da noch ein NiosII-CPU als BusMaster? Wie greift Dein VGA-Design auf das SDRAM zu? Ich vermute mal, dass Refresh-Zyklen mit ein Problem sind. Wenn Du für VGA Daten aus dem SDRAM ausliest, dann musst du evtl. mehrere Zeilen zwischenpuffern bzw. nach Bildende einen Refreshzyklus initiieren.
hallo, die Zeilen werden "zwischengepuffert". Es gibt kein NIOSII oder so.Der SDRAM Controler interface wird direkt in VHDL design angeschlossen Anbei mein Code (ein Teil davon): AV_CS<='1'; AV_BE_N<="00"; -----------Schreibe in SDRAM------------
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
------------Lese aus SDRAM
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
Gast
#4017809
Sigi schrieb: > Ich vermute mal, dass Refresh-Zyklen mit ein Problem sind. Da sowieso zyklisch ausgelesen wird, kann man ggf. auf den Refresh verzichten. Duke
Gast
#4017915
Da hast Du es ganz schön kompliziert "falsch" gemacht ;-) Bin nur bei einer Zeile stutzig geworden, die 100% falsch ist: Böser Kommunist schrieb: > IF(AV_RDVALID='1' AND AV_WRQ='0' AND NXT='0')THEN > > NXT<='1'; > VGABUFFER<=AV_RDDATA(7 downto 0); > > END IF; Die Daten aus dem SDRAM sind nur dann gültig, wenn AV_RDVALID = '1' ist. Alles andere interessiert Dich nicht. Mit Refreshes und Co hat das überhaupt nichts zu tun (da kümmert sich QSYS darum) Ich mache das hier ungefähr so (stark zusammengeschnitten): -- aus dem Speicher lesen if (fifo_out_almost_full = '0') then read_temp <= '1'; elsif avm_r_waitrequest = '0' and (fifo_out_almost_full = '1') then read_temp <= '0'; end if; -- aus dem Speicher lesen if avm_r_waitrequest = '0' and (read_temp = '1') then read_addr <= read_addr + unsigned(addr_incr); end if; und dann: fifo_out_data <= avm_r_readdata; fifo_out_wrreq <= avm_r_readdatavalid Grüße Kest
Hallo, ich habe jetzt alles so gemacht, wie du es gesagt hast, nun sind die vertikale "Balken" weg. Es gibt jetzt diese nur auf den beiden Diagonalen Wenn ich die Testdaten direkt in den Videobuffer schreibe, dann gibt es das nicht. Nur wenn ich die Daten durch SDRAM lasse, erscheint das Problem.Das is bestimmt ein Problem mit dem Timing. Aber ich habe alles so gemacht, wie im Demo für DE1-SoC. Der CLK für SDRAM wird nach hinten verschoben, der nicht verschobener CLK wird für SDRAM controller und FPGA design verwendet. Scheiben in SDRAM
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
Lesen aus SDRAM
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
Gast
#4020867
Nur kurz:
IF(VRAM_READ<LINELENGHT)THEN----- fill buffer2
SDRAM_ADDR2<=SDRAM_ADDR2+1;
VRAM_addr<=VRAM_addr+1;
END IF;
Ob Framebuffer oder sonstiges: eine Abhängigkeit von der Zeilenlänge ist
eine ganz schlechte Idee!
Wenn Du die Daten aus dem SDRAM ließt, dann schiebe diese in ein FIFO...
mit jedem neuen Bild machst Du FIFO_CLR. Auf der anderen Seite des FIFOs
ziehst Du die Daten mit der VGA-Frequenz raus (if not empty).
Ansonsten denke ich nicht, dass das ein Timingproblem ist.
Grüße
Kest
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.



