Hallo zusammen!
Ich habe bzgl der BRAMs ein kleines Verständnisproblem. Ich habe eine
Komponenten per EDK, die am PLB-Bus hängt, erzeugt und möchte jetzt von
dort Daten in ein BRAM schreiben.
Meine Fragen:
1. sind die BRAMs auch über das Bussystem angeschlossen? Sitzen die also
auch irgendwo am PLB-Bus gibt es eine direkte Verbindung zu meiner
Komponente?
Hintergrund: der Bus soll möglichst wenig belastet werden.
2. wie kann ich BRAMs aus dem EDK instanziieren?
Also beim MicroBlaze werden die Block Rams nicht an den PLB oder OPB,
sondern an den LMB (Local Memory Bus) angeschlossen. Dadurch wird der
OPB nicht belastet, und außerdem ist die höchstmöglcihe
zugriffsgeschwindigkeit auf den speicher gewährt. Um das zu
instantiieren muss man einen LMB Speichercontroller ins System einfügen,
bzw mehrere.
Ich glaub aber neben LMB gibts auch ne Komponente um BlockRam über OPB
anzusteueren.
Wies beim PowerPC ist wieß ich leider nicht. Wenns über OPB geht, sollte
es natürlich auch beim PowerPC gehen, ist aber langsam.
Die BlockRAMs müssen natürlich nicht über den Prozessor-Bus an deine
Komponente angeschlossen sein.
BlockRAM ist ein Speicher-Element des FPGAs und kann mittels VHDL direkt
instantiiert werden.
Das EDK verwendet BlockRAM um bestimmte Speicher/Caches des Prozessors
zu bauen, aber die nicht verwendeten BRAMs stehen frei zur Verfügung.
Wenn deine Komponente eigenes BRAM benötigt um für sich Daten abzulegen,
dann brauchst Du nur BRAM Elemente instantiieren, und die Schnittstelle
(Adressen und Daten) musst Du selber schreiben.
Klaus
Sorry... hatte erst jetzt deine Antwort gelesen Klaus. Trotzdem danke
für die Antwort.
Für alle die es interessiert, hier ein Beispiel, mit dem ich erfolgreich
getestet habe:
Diese "Templates" nennen sich primitive und es gibt in den
entsprechenden Datenblättern der FPGAs Kapitel über die unterstützten
RAM/ROM-Strukturen.
Ich bin mir nur noch nicht ganz sicher was das mit den Initialisierungen
auf sich hat (INIT_00,...).
>Ich bin mir nur noch nicht ganz sicher was das mit den Initialisierungen>auf sich hat (INIT_00,...).
Das sind die Werte, die beim Programmieren des FPGA in die BRAMs geladen
werden.
Danke Jan!
Soweit ist mir das auch klar, aber was sollen die Werte bei component
und dann nochmal die bei der eigentlichen Instanziierung?
Bei mir sind immer die Werte der Instanziierung in dem BRAM.
Die Werte bei der component kannst du prinzipiell weglassen - Alle
generics müssen genauso wie die Ports in der Component angegeben sein
und können hier schon mit default-Werten belegt werden. Die eigentliche
Wert- bzw. Signalzuweisung findet dann bei der Instanziierung statt.
Würdest du zwei BRAMs mit den selben Daten haben wollen, bräuchtest du
diese Daten beispielsweise nur in der component angeben und lässt sie
bei der Instanziierung dann weg, das spart Schreibarbeit.