Forum: FPGA, VHDL & Co. Erweiterung Programmspeicher EDK MicroBlaze


von User (Gast)


Lesenswert?

Guten Tag.

Ich habe eine Architektur in EDK erstellt. (MicroBlaze + Peripherie). 
Das geschriebene Programm übersteigt die eingangs von mir zugewiesende 
Größe des Programmspeichers.

(1) Wie kann ich den internen Programmspeicher nachträglich erweitern?

Ich habe schon in andere Beiträge geschaut. Finde jedoch keine Lösung 
für EDK 14.7.

Für eine Antwort wäre ich dankbar.

von Philip K. (philip_k)


Lesenswert?

Du hast normalerweise in Deine mhs-Datei zwei Instanzen vom Typ 
lmb_bram_if_cntlr. Wenn Du hier bei beiden(!) den Attribut Parameter 
C_HIGHADDR vergrößerst (EDK schließen!), sollte EDK die entsprechende 
BRAM-Instanz automatisch anpassen.

von User (Gast)


Angehängte Dateien:

Lesenswert?

Danke. Meinst du die oberen beiden?

von Philip K. (philip_k)


Lesenswert?

Nein, die unteren beiden (*_bram_ctrl).

von User (Gast)


Lesenswert?

Danke. Als höchste Adresse steht bei mir dort: 0x0001ffff.
Da die Basisadresse 0x00 lautet,habe ich eine Speichergröße von

8 Bit * 131071 = 1048,568 kB korrekt?

Welches ist meine max. Speichergröße, die ich einstellen darf? Ich 
dachte, dass es 64 kb sind?! Eigentlich habe ich ja eine 32 Bit 
Aritektur, korrekt?

von Philip K. (philip_k)


Lesenswert?

User schrieb:
> Danke. Als höchste Adresse steht bei mir dort: 0x0001ffff.
> Da die Basisadresse 0x00 lautet,habe ich eine Speichergröße von
>
> 8 Bit * 131071 = 1048,568 kB korrekt?

Nicht ganz. Erstens sind es 131072 und zweitens ist das schon ein 
Byte-Wert.

> Welches ist meine max. Speichergröße, die ich einstellen darf? Ich
> dachte, dass es 64 kb sind?! Eigentlich habe ich ja eine 32 Bit
> Aritektur, korrekt?

Und wie kommst Du bei 32 Bit auf 64K? Theoretisch wären 4G möglich, 
tatsächlich ist der Speicher begrenzt durch die BRAMs Deines FPGA und 
die Tatsache, dass die Größe eine Zweierpotenz sein muss (D.h. wenn Dein 
FPGA z.B. 96 KByte BRAM hat, kannst Du trotzdem nur 64 verwenden).

von User (Gast)


Angehängte Dateien:

Lesenswert?

Bzw wie kann ich einen externen Programmspeicher hinzufügen? Welcher IP 
Core?

von User (Gast)


Lesenswert?

So ganz habe ich das wohl nicht verstanden. Tatsache ist, dass mein 
Programm zu groß ist und deswegen nicht SDK einen Error ausgibt:

`microblaze_0_i_bram_ctrl_microblaze_0_d_bram_ctrl'
c:/xilinx/14.7/ise_ds/edk/gnu/microblaze/nt/bin/../lib/gcc/microblaze-xi 
linx-elf/4.6.4/../../../../microblaze-xilinx-elf/bin/ld.exe:  region 
`microblaze_0_i_bram_ctrl_microblaze_0_d_bram_ctrl' overflowed by 4144 
bytes

Ich arbeite auf der Umgebung ML605. Speicher ist also hardwaremäßig 
vorhanden.

Ich habe leider nicht das Wissen, wie und welchen ich dafür erweitern 
muss in EDK. Habe ich nach deiner Aussage demnach noch die Möglichkeit 
die Adresse zu erhöhen ? (Welches ist die obere Schranke)? In Zukunft 
wird das Programm noch weiter wachsen.

Ich kam auf die 64 kb als obere Schranke durch folgenden Link:

http://www.xilinx.com/tools/microblaze.htm

Dort steht: Cache size configurable:  2kB - 64kB (Block RAM based).

von Fpgakuechle K. (Gast)


Lesenswert?

User schrieb:
> Ich kam auf die 64 kb als obere Schranke durch folgenden Link:
>
> http://www.xilinx.com/tools/microblaze.htm
>
> Dort steht: Cache size configurable:  2kB - 64kB (Block RAM based).

Cache ist nicht identisch mit Programmspeicher.

MfG,

von Philip K. (philip_k)


Lesenswert?

User schrieb:
> Ich arbeite auf der Umgebung ML605. Speicher ist also hardwaremäßig
> vorhanden.
Was hast Du denn da drauf? DDR2? Könnte man sicher auch als 
Programmspeicher verwenden, hab ich aber noch nie gemacht...und stell 
ich mir auch nicht ganz trivial vor. Aber vielleicht macht es das EDK da 
auch leichter als ich vermute.

>  Habe ich nach deiner Aussage demnach noch die Möglichkeit
> die Adresse zu erhöhen ? (Welches ist die obere Schranke)?
Wie gesagt theoretisch 4G, praktisch vorhandener Speicher. Wieviel BRAM 
hat Dein FPGA?

> In Zukunft wird das Programm noch weiter wachsen.
Und an der Programmgröße kannst Du ganz sicher nicht schrauben?

von Freddy (Gast)


Lesenswert?

User schrieb:
> Bzw wie kann ich einen externen Programmspeicher hinzufügen? Welcher IP
> Core?


Im EDK musst du den Multi-Port Memory Controller(DDR/DDR2/SDRAM) Core 
hinzufügen.

Im SDK bei deinem Projekt findest du unter den .c und .h Dateien ein 
Linker Script, sowas wie - lass mich lügen - lscript.ld?!
Da kannst dann den Heap und Stack erweitern und auf den DDR-Baustein 
auslagern.

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