Hallo, ich bin neu hier im Forum und habe hier bisher immer gute Hilfestellungen entdeckt. Als ziemlicher VHDL-Anfänger beschäftige ich mich gerade mit dem BRAM auf einem Spartan 3AN. Vielleicht ist die Frage auch trivial, aber bisher habe ich noch nichts dazu gefunden: Ist es möglich mehrere BRAM-Blöcke unterschiedlich zu initialisieren? Soll heißen, ich möchte einen BRAM-Block als ROM nutzen, einen als Single Port RAM und einen als "Simple Dual-Port RAM". Funktioniert sowas innerhalb einer Entity oder muss ich mich auf einen Typ festlegen und Kompromisse bzgl. Speicherausnutzung etc. hinnehmen? Ich hoffe meine Frage ist klar genug beschrieben... Danke schonmal für eure Hilfe! MfG Mario
Mario schrieb: > Ist es möglich mehrere BRAM-Blöcke unterschiedlich zu initialisieren? Ja. > Soll heißen, ich möchte einen BRAM-Block als ROM nutzen, einen als > Single Port RAM und einen als "Simple Dual-Port RAM". Ja. > Funktioniert sowas innerhalb einer Entity Ja. > oder muss ich mich auf einen > Typ festlegen und Kompromisse bzgl. Speicherausnutzung etc. hinnehmen? Nein. Vorrausgesetzt Du hast genügend BRAMs. Ich finde allerdings, daß die direkte Instanziierung von BRAMs sehr kryptisch zu lesen ist. Ich würde einen Blick in den XST User Guide werfen. Da finden sich synthetisierbare Beschreibungen drin, die auch einigermaßen lesbar sind (leider mit std_logic_arith). Duke
Mario schrieb: > Ist es möglich mehrere BRAM-Blöcke unterschiedlich zu initialisieren? > Soll heißen, ich möchte einen BRAM-Block als ROM nutzen, einen als > Single Port RAM und einen als "Simple Dual-Port RAM". > Funktioniert sowas innerhalb einer Entity oder muss ich mich auf einen > Typ festlegen und Kompromisse bzgl. Speicherausnutzung etc. hinnehmen? Schau dir mal dieses Projekt an: http://www.mikrocontroller.net/articles/Retrocomputing_auf_FPGA Da hat es auch quelltext zu BRAM als ROM : http://www.mikrocontroller.net/svnbrowser/redz0mb1e/src/vhdl/ROM.vhd?view=markup BRAM als vor (initalisierte) RAM: http://www.mikrocontroller.net/svnbrowser/redz0mb1e/src/vhdl/RAM.vhd?revision=129&view=markup BRAM als dualPort (Video-) RAM: http://www.mikrocontroller.net/svnbrowser/redz0mb1e/src/vhdl/video_ram.vhd?revision=75&view=markup Alles mit XST für den Spartan3 übersetzbar. MfG
Duke Scarring schrieb: > Ich würde > einen Blick in den XST User Guide werfen. Da finden sich > synthetisierbare Beschreibungen drin, die auch einigermaßen lesbar sind > (leider mit std_logic_arith). Die klappen natürlich genauso gut mit der numeric_std, die Adresse möchte das Array ja eh als Integer haben.
Guten Morgen @all! Zunächst einmal Vielen Dank für die schnellen & kompetenten Antworten!!! @Duke Scarring > Vorrausgesetzt Du hast genügend BRAMs. Ich finde allerdings, daß die > direkte Instanziierung von BRAMs sehr kryptisch zu lesen ist. Da der Spartan 3AN 20 zur Verfügung hatte, wollte ich neben einem "Font-ROM" die anderen Daten, die bei meinem Projekt anfallen eben in unterschiedliche BRAMs packen. Das hätte eben den Vorteil, dass ich die Daten so hineinschreiben kann, wie sie anfallen - also ein 16Bit-Wort in den BRAM mit den spezifischen Einstellungen. Dagegen sollen eben Daten die nur gelesen (und nur 1x instanziiert/initialisiert werden) werden oder mit anderen Wortbreiten in ihrem jeweiligen Speicher Platz finden... @Hinweiser Vielen Dank auch für deine Links zu dem Projekt - so ähnlich sieht es bei mir auch aus, zumindest was die gedachte Struktur betrifft. :-) Dann kann ich mein Projekt also so aufziehen, wie ich es mir gedacht habe. Jeden Speicher als eigene Entity mit eigenen Einstellungen (RAM, ROM...) und dann als Component einbinden in mein TopLevel. MfG Mario
Mario schrieb: > Dann kann ich mein Projekt also so aufziehen, wie ich es mir gedacht > habe. Jeden Speicher als eigene Entity mit eigenen Einstellungen (RAM, > ROM...) und dann als Component einbinden in mein TopLevel. Ja. Und wenn du den XST User Guide durchliest, dann findest du sogar raus, wie du diese RAMS komplett generisch beschreiben kannst. Du musst also gar keine Komponenten instatiieren, das macht der Synthesizer für dich: http://www.lothar-miller.de/s9y/archives/20-RAM.html#extended Und auch die Initialisierung geht direkt im Quelltext: http://www.lothar-miller.de/s9y/archives/37-DDFS-mit-BROM.html Und dort im Anhang LCD_CTRL.vhd als initialisiertes DPRAM: Beitrag "Re: EA DOG-M initialisieren"
Auch sehr empfehlenswert zu lesen. http://www.fbeit.htwk-leipzig.de/~reinhold/files/xilinx/Docs/RAMs%20in%20XST-VHDL.pdf Ein ROM ist ein RAM, dass beim initialisierte Werte hat.
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.