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.
Ja, ganz vergessen. Ich benutze den PPC, aber schonmal danke für die Hilfe!
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:
1 | ... |
2 | architecture IMP of user_logic is |
3 | |
4 | |
5 | component RAMB4_S8 |
6 | generic (INIT_00,INIT_01,INIT_02,INIT_03,INIT_04,INIT_05,INIT_06,INIT_07, |
7 | INIT_08,INIT_09,INIT_0a,INIT_0b,INIT_0c,INIT_0d,INIT_0e,INIT_0f: |
8 | bit_vector(255 downto 0):= |
9 | X"0000000000000000000000000000000000000000000000000000000012345678" |
10 | ); |
11 | |
12 | port (DO : out STD_LOGIC_VECTOR (7 downto 0); |
13 | ADDR : in STD_LOGIC_VECTOR (8 downto 0); |
14 | CLK : in STD_ULOGIC; |
15 | DI : in STD_LOGIC_VECTOR (7 downto 0); |
16 | EN : in STD_ULOGIC; |
17 | RST : in STD_ULOGIC; |
18 | WE : in STD_ULOGIC); |
19 | end component; |
20 | ... |
21 | |
22 | begin |
23 | RAMB4_S8_TEST : RAMB4_S8 |
24 | generic map ( |
25 | INIT_00=>X"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF" |
26 | ) |
27 | port map (DO => bramDataOut, |
28 | ADDR => bramAddr, |
29 | CLK => Bus2IP_Clk, |
30 | DI => bramDataIn, |
31 | EN => bramEN, |
32 | RST => bramRST, |
33 | WE => bramWE); |
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.
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.