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