Forum: FPGA, VHDL & Co. DE2 115 als ringspeicher nutzen


von fritze (Gast)


Lesenswert?

Hallo,

ich möchte in einen DRAM als Ringspeicher nutzen um einen AD-Wandler. Da 
es sich um mein erstes richtiges Vorhaben handelt bin ich immer noch 
sehr zaghaft was die Umsetzung angeht.
Mich würde interessieren ob jemand schon Erfahrung hat und mir sagen 
kann, ob das was ich plane so einfach geht.
Kurz zum Hintergrund ich verfüge über ein DE2-115 mit Highspeed 
AD/DA-Karte.
Kurz zum Konzept:
Ich habe 2 PLL’s welche mir die Taktfrequenz 65 MHz (zum auslesen des 
AD-Wandlers) und 100 MHz (für den RAM) zur Verfügung stellen.
Der AD-Wandler wird durch eine StateMachine angesprochen und schaufelt 
die Daten abwechselnd in 2 verschiedene M9K – sind ja dualported 
(jeweils 77 x 16 Bit – kommt daher, dass ich die beiden Kanäle in 88x14 
Bit quetsche).
Sobald ein Block voll ist (also die 77x16Bit drin sind), gibt es ein 
Signal an den DRAM-Controller, der die Daten per burst write dem DRAM 
hinzufügt (quasi ein FIFO). Auch hier wird eine StateMachine genutzt, 
die die Adressen mit 100 MHz in den RAM überführt – dafür braucht er ja 
nach meinem Dafürhalten gerade mal 10 ns x (77+3)Takte) = 1 us. Der 
AD-Wandler sammelt aus Channel A mit 65 MHz und aus Channel B mit 6,5 
MHz Daten ein, braucht also zum Sammeln der Daten 1,2308 us (Gemessen an 
80 Samples aus Channel A x 65 MHz).
Im DRAM habe ich also zwischen den beiden WRITES zwischen den beiden 
FIFOs im Grunde 0,2308 us Luft.

Fragen:
1. Wenn jemand mein Anliegen verstanden hat – ist das so durchführbar?
2. Für den WRITEBURST muss ich ja eine ROW (8192) angeben und die 
Startadresse COL (max. 1024) angeben -> was passiert beim WRITEBURST 
wenn er bei der 1024er Speicherzelle angekommen ist, geht er in die 
nächste Zeile oder fängt er direkt vorne wieder an die 1. Spalte zu 
überschreiben oder bricht er sogar ganz ab?
3. Benötige ich PRECHARGE und was genau macht der Befehl? Das Ganze ist 
ja kein SRAM?
4. Der DRAMclock bekommt in Quartus einen 3 ns Delay verpasst. Angeblich 
ein Umstand, der durch die PLL entsteht und kompensiert werden muss. 
Weiß da jemand was genaueres?

Schöne Grüße

fritze

von PittyJ (Gast)


Lesenswert?

Das DRam ist nicht so einfach. Ich habe mit damit auch einen 
abgebrochen, bis es lief. Die Einhaltung der State-Machine aus dem 
DRam-Datenblatt war sehr wichtig.

Auf dem DE-115 ist auch SRAM. Nicht so viel, aber wesentlich leichter 
anzusprechen. Wäre das eine Alternative?
Wieviel Daten werden denn insgesamt gespeichert?

Was passiert eigentlich, wenn die Daten im Speicher sind? Werden sie 
jemals wieder gelesen? Das müßte im DRam auch entsprechend implementiert 
werden.

Könnte man die Samples nicht gleich über die GBit-Ethernetschnittstelle 
versenden? Dann könnte ein PC diese sofort auf Platte speichern und die 
Daten wären 'sicher' zur weiteren Bearbeitung.

von fritze (Gast)


Lesenswert?

Hallo,

danke für die Antwort.

Ein PC ist leider keine Option. Die Daten sollen den gesamten Speicher, 
also die 128 MB beinhalten. Damit soll es möglich sein etwa 0.7s Daten 
zu erfassen. Es wird noch eine kleine Triggerlogik zwischen AD Wandler 
und M9K gebaut, welche die Daten in der Pipeline anschaut und mit einem 
Wert vergleicht. Sobald dieser Vergleich erfolgreich ist, wird ein 
Counter gestartet und nachdem dieser angesprochen ist, wird der 
Speichervorgang beendet und der gesamte RAM wird der Reihe nach in eine 
SDcard übertragen. Hiernach wird eine Totzeit beliebiger Länge in Kauf 
genommen. Im Anschluss startet das Konstrukt wieder bei 0.

Schöne Grüße

fritze

PS: kannst du was zu dem Delay des DRAMspeichertaktes sagen? Im 
DRAM-Datasheet taucht das Thema nicht auf und ich gehe davon aus, dass 
es en Quartusproblem zu sein scheint, bei der Erzeugung der PLL.

von PittyJ (Gast)


Lesenswert?

Ich habe nichts besonderes mit dem DRAM-Clock gemacht. Ganz normal 
angesteuert wie in dem Datenblatt beschrieben.
Allerdings habe ich alles nur mit dem 'normalen' 50MHz Takt betrieben. 
Keine PLLs und keine anderen generierten Cores.
Vielleicht ging es ja zufällig gut bei mir, weil ich nur die 50 MHz 
hatte.

von Dimi (Gast)


Lesenswert?

Ich habe schon mal einen SDRAM-Controller selber geschrieben.

Zu 2. weiss ich nicht genau, habe Burst-Modus so relisiert, dass am Ende 
nichs mehr gelesen wird. Im Datenblatt steht eventuell was drin.
Zu 3. Precharge muss auf jeden fall ausgefüht werden, wenn ROW 
gewechselt wird. Damit wird die aktuelle Zeile "geschlossen" so zusagen.
Zu 4. SDRAM Clock Delay habe ich auch gemacht. Ich habe irgendwo auf 
meinem Server einen sehr schönen Dokument dazu. Wenn ich Zeit habe, lade 
ich es hier hoch. Delay braucht man dafür, dass die Daten sicher von 
SDRAM gelesen/geschrieben werden. Zum Zeitpunkt, wo die Daten von SDRAM 
"gelatcht" werden, müssen diese an SDRAM Pins schon vorhanden sein:

CLK                __----____----____----____----
DATA               __< D0   >< D1   >< D2   >
DELAYED SDRAM CLK  ____----____----____----____--

MfG aus Westerwald

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
Noch kein Account? Hier anmelden.