www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Microblaze Ram Problem - Ilmb Dlmb


Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi zusammen

ich hab ein kleines Problem.

Wenn ich ein C programm in meinen microblaze brenne indem irgendwo
unsigned short  myarray[2048];

steht laeuft es fehlerfrei.

Aendere ich das auf
unsigend short myarray[4096]

laeuft es nicht mehr. Allerdings spuckt der compiler keinerlei 
Fehlermeldung aus und tut so als waere alles in Ordnung.

Ich kann das gleiche Problem hervorrufen wenn ich mein Main Programm 
aufblase also irgendwie mehr code reinpacke - dann laeuft es auch mit 
2048 nicht mehr.

Ich vermute das meine Daten meine Instructions ueberlagern und somit 
das Programm von den Daten ueberschrieben wird und nix mehr geht.
Waere auch logisch weil die 2 sich einen BRAM block teilen. (hab den uB 
mit dem Wizard generiert).

Wenn ich nun einen 2. BRAM block einfuege und ilmb und dlmb je einen 
eigenen zuweise geht nicht mal mehr die 2048 Variante die vorher lief.

Was mich auch wundert - laut EDK ist der BRAM block 2kB gross. Wenn sich 
die beiden den BRAM bei ersterem Teilen duerfte ja nicht mal die 2048 
variante laufen da die ja alleine schon 4 kB des RAMs frisst.

Irgendwer eine idee wo es da klemmt? Kann es sein das die Daten im ilmb 
abgelegt werden aus Versehen? Muss ich die speziell deklarieren wenn ich 
die im dlmb haben will oder tut es das mit "unsigend short"?

Fuer Hilfe Dankbar

 Tobi

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alle Variablen sind im Data Memmory alles Programm im Instruction 
Memmory.. da muß man nix spezieles machen.
Wenn sich allerdings beide Bereiche überlagern gibt es Probleme.
Was sagt den der Compiler zur Speicherauslastung? Gff hast du auch ein 
Stackproblem. Du könntest auch das Blockram mal größer machen maximal 
größe ist glaub ich 64kb im EDK

Autor: tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

ich habs gefunden. Ich hab 16kb fuer dlmb und ilmb angesetzt allerdings 
brauchen die beiden knapp 17 zusammen. Wenn ich nun runteroptimiere 
passt es wieder. Seltsamerweise meckert der compiler da nicht.

Es ist bisschen doof das das ding 24kb (Spartan 3 XC3S200) hat aber man 
nur 8 bzw 16 auswaehlen kann.

Wenn ich versuche ilmb und dlmb an verschiedene Rams anzuschliessen 
knallt es spaeter weil die startadressen dann zu weit von 0x00 wegliegen 
aber der addressgenerator sich auch nicht davon abbringen laesst das zo 
zu machen.

Autor: Göran Bilski (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Entschuldigung aber mein deutsch ist schrecklich.
Sie können zwei bram block genutzen, 16kb uns 8kb.
LMB bus kannt viele "LMB bram controller" gehabt.

Gruß,
Göran Bilski

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.