Hallo, ich habe ein Spartan6 TE0630 Board und will den DDR3 RAM nutzen um gesampelte Daten zu Puffern. Der Block-RAM ist leider zu klein für die Menge der Daten. Daher möchte ich den DD3 RAM (1GBit) auf dem Board nutzen. Ich will dabei keinen MicroBlaze verwenden. Sehe ich das richtig, dass ich dazu einen Virtual FIFO anlegen muss als Schnittstelle zu RAM? Ich stehe voll auf dem Schlauch mit der implementierung. Hat jemand zufällig ein Beispiel-Programm wo sowas implementiert ist? Wie muss ich Virtual FIFO und den RAM impelementieren? Danke Gruß Tobias
Hi hast du schon ein Speichercontroller in deinem Desing integriert (MIG Interface)? Falls nicht dann könntest du den Core Generator dafür verwenden. Gruß
Nein habe ich noch nicht. Den Core Generator hab ich ausprobiert und war etwas erschlagen von der Anzahl an Pins die der für ein RAM erstellt. Ist das korrekt, dass ich den Virtual Fifo über AXI mit dem RAM verbinden muss und dann übernimmt der Virtual FIFO die Speicherverwaltung?
Ich habe bis jetzt keine Virtual FIFOs verwendet deswegen weiss ich nicht wie die zu bedienen sind. Der Speichercontroller bietet dir ein User Interface was du dann beschreiben kannst. Oder willst du gar nicht das mittels VHDL bzw. Verilog realisieren?
Ich habe jetzt nur einen DDR2 auf dem Atlys-Board von Digilent genutzt, aber der Unterschied zu DDR3 sollte gering sein?! Der Core-Generator sollte dir einen MCB (Memory Control Block) ausspucken, der auch mit den nötigen Beispielen versehen ist wie man ihn anschließt. Sieht alles erstmal schlimmer aus als es ist. Schau dir mal die UG388 an, da ist auch alles schön erklärt. Eigentlich musst du nur noch eine kleine FSM drum rum bauen, welche die nötigen Signale (Command, R/W, etc) anlegt, den Rest übernimmt der MCB für dich. Auch ganz gut: https://joelw.id.au/FPGA/XilinxMIGTutorial
Wie der Vorgänger schon sagte: Einfach den Memory Interface Generator (MIG) IP-Core benutzen, dort dann im Wizard den entsprechenden RAM-Baustein auf deinem Board auswählen und geht. Die Verkabelung der vielen Pins mußt Du auch nicht selbst machen, im Verzeichnis ipcore_dir/mig wird auch ein Beispiel-Projekt angelegt, inkl. UCF-Datei, dass Du einfach kopieren kannst. Das Interface selber ist dann FIFO-basiert und relativ einfach zu bedienen (Datenblatt des MIG lesen, ist ganz gut beschrieben).
Ich schlage mich gerade mit dem DDR3- Controller bei Altera herum. Die "kleine" state machine, die man braucht, um seine Daten rein und raus zu kriegen und zu cachen, ist schon 8 DIN a4 Seiten lang. Ist das beim Xilinx einfacher? Hört sich so an!
Ich drucke meinen Code selten aus ;-) Mein Modul das Schreiben und lesen handlet hat eta 800 Zeilen, ist aber auch noch einiges an Peripherie drin, also vllt so 50-60% sind effektiv die Ansteuerung vom RAM Muss aber auch sagen, ich hatte mal einen MCB für ein Kintex-7 Board angefangen, da war das alles etwas aufwändiger... Oder ich habe etwas falsch eingestellt gehabt im Wizard, hab es dann aber nicht gebraucht und nicht weiter verfolgt.
Was mir beim kurzen Blick auf das Vivado aufgefallen ist: die haben jetzt einen anderen MIG drin, der keinen normalen Controller mehr aufbauen kann. Ist das nicht mehr vorgesehen bei den Xilinx FPGAs? Oder hat es mit der Strategie zu tun, alles über Busse zu machen?
Doch, das geht schon noch. Jedenfalls bei DDR2 kann man auch noch das "alte" Interface benutzen. Manchmal ist das auch bissl abhängig von der Einstellung ob VHDL oder Verilog, etwas verwirrend. Liegt sicher an der AXI Strategie oder daran dass die 7er Serie keinen Hard-Block mehr drin hat.
Hey, ich habe das Projekt ne weile pausiert. Aber ich bekomme den RAM immer noch nicht zum laufen. Habe die UserGuides von xilinx gelesen aber es läuft nicht. Ich habe mit dem ISE core generator und dem MIG (3.92) meinen RAM eingebunden wie in UG388 beschrieben. Die Simulation die auch mit erstellt wird funktioniert auch wenn es ewig dauert mit isim. 1µs zu simulieren dauert ca. 20 Minuten. Ist das bei euch auch sooo langsam? Ist das schon ein Zeichen, dass etwas schief läuft? ich habe mal das erstellte example_design importiert und calib_done Signal auf eine LED gelegt und es passiert nichts. Müsste nicht das calib_done Signal '1' werden? Hat jemand vielleicht ein kleines Beispielprojekt das funktioniert? Ich bin für eure Tipps Dankbar Gruß Tobias
Hallo Tobias, hast du dir mal von Trenz die TE6000 Referenz Designs heruntergeladen und angeschaut ? Da ist auch ein Beispiel für dem MIG Generator dabei.
Ja, hab ich mir angeschaut. aber das ist auch nichts anderes als der MIG ausgibt. oder habe ich was übersehen? ich habe das problem das Interface korrekt anzusprechen. mit den addressen, burst length, etc. kann ich so den RAM beschreiben? if(c1_p0_wr_full = '0') then c1_p0_wr_en <= '1'; c1_p0_wr_mask <= "0010"; c1_p0_wr_data <= data_in; wr_cnt <= c1_p0_wr_count; end if; if(c1_p0_cmd_empty = '1') then c1_p0_cmd_en <= '1'; c1_p0_cmd_instr <= "000"; c1_p0_cmd_bl <= "000100"; c1_p0_cmd_byte_addr <= wd_addr; ram_state <= wr_end; end if;
Auf dem 630 Board ist doch ein FX2 von Cypress drauf oder ? Dafür gibt es doch Applikationen, welche Daten ins Ram schreiben und wieder zurücklesen. Das gibts bestimmt auch bei Trenz. Sonst bei Cypress, Ztex oder ähnlichen Spartan6 Boards schauen.
Tobias B. schrieb: > 1µs zu simulieren dauert ca. 20 Minuten. Ist das bei > euch auch sooo langsam? Ist das schon ein Zeichen, dass etwas schief > läuft? Wenn du mit der freien ISE (ohne Lizenz) arbeitest, dann geht ab einer bestimmten Designkomplexität die Simulationsgeschwindigkeit massiv in die Knie (es wird auch eine entsprechende Meldung in der Konsole ausgegeben). Die Simulation ist dann de facto nicht mehr nutzbar. Tobias B. schrieb: > calib_done > Signal auf eine LED gelegt und es passiert nichts. Müsste nicht das > calib_done Signal '1' werden? doch, dass sollte irgendwann auf 1 gehen. Siehst du denn wenigstens (mit dem Oszi), dass am Speicherbus nach der Konfiguration des FPGA wenigstens zwischendurch etwas wackelt? Tobias B. schrieb: > kann ich so den RAM beschreiben? > if(c1_p0_wr_full = '0') then ..... > if(c1_p0_cmd_empty = '1') then Na ja, beim Schreiben musst du erstmal ausreichend Daten entsprechend deiner Burstlänge in den Daten-FIFO schieben ehe du das Kommando in den Kommando-FIFO absetzt. Wenn du das in einer (hier nicht von dir gezeigten) FSM so steuerst, dann ist es ok.
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.