Forum: FPGA, VHDL & Co. Hexfile für Raminitialisierung


von martin (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich möchte gern unter Quartus meinen Ram Inhalt initialisieren, dafür 
bietet die Software mir die möglichkeit, ein HEX File anzugeben. Nun 
habe ich leider Probleme bei der Erstellung eben dieser Datei. Mein 
bisheriges vorgehen:
-Quartus projekt erstellen, Ram mit 256 Worten a 16 Bit erstellen und 
einbinden
-ein binary erstellen, welches 512 byte enthält.
-Konvertieren dieser datei mit bin2hex (unter windows)
-dateipfad im Ram angeben und kompilieren.

Dabei kamen folgende Warnings bei raus:

Warning: Byte addressed memory initialization file "...256Words.hex" was 
read in the word-addressed format

Warning: Memory depth value (256) in design file differs from memory 
depth value (496) in Memory Initialization File -- truncated remaining 
initial content value to fit RAM

Warning: Width of data items in ...Count256Words.hex is greater than the 
memory width. Wrapping data items to subsequent addresses. Found 16 
warnings, reporting 10
  Warning: Data at line (1,2,3,4,5,6,7,8,9,10) of memory initialization 
file "...Count256Words.hex" is too wide to fit in one memory word. 
Wrapping data to subsequent addresses.


Zusammengefasst: ich habe ein hexfile, in dem Bytes Adressiert werden, 
möcht aber eines haben, in dem Words (á 2 Byte) adressiert werden, 
zumindest interpretiere ich die Warnings so.

Die fehlerhafte Initialisierung des rams äußert sich wie Folgt bei mir: 
die Adressbereiche von xxx10000-xxx11111 werden mit 0x0000 initialisiert 
bzw nicht initialisiert, davor und dahinter geht werden die Werte aus 
dem binary genommen. Wenn ich also ein binary nehme, indem ich 16 bit 
werte hochzähle, dann sollte ja unter jeder Speicheradresse die 
Speicheradresse hinterlegt sein. Beim AUslesen erhalte ich jedoch:
speicheradresse -> wert
0x0f -> 0x000f
0x10 -> 0x0000
[...]
0x1f -> 0x0000
0x20 -> 0x0010
...

Hat jemand für mich einen guten Tip, wie ich korrekte Hex files 
erstellen kann? Ich hänge mein Hexfile noch einmal mit an.
Vielen Dank,
Martin

von martin (Gast)


Lesenswert?

ich habe gerade herausgefunden, dass Quartus entsprechende Dateien 
erstellen kann, das geht mit file -> new -> other files -> Memory 
Initialization File

vielleicht hilft es ja der Nachwelt.
Viele Grüße

von Rolf (Gast)


Lesenswert?

Quartus kann sogar noch mehr! Es kann sogar HEx<->MIF wandeln. Du 
solltest Dir mal ein maximales MIF von Quartus erstellen lassen und im 
MIF Editor bearbeiten. Schalte dabei mal zwsichen den Qort / Byte 
Darstellungen um und exportiere es mal jeweils.

Dann änderst du mal von Hand mit einem HEX Editor ein paar Sachen ab - 
nutzt das Ganze für die Synthese und für s Modelsim.

Nach etwas Probieren findest Du raus, daß Modelsim bei MIFs einen 
Riesescheiss macht und Quartus auch mit den selbsterstellten MIFs nicht 
klarkommt.

Ausserdem gibt es ein Größenlimit von 16k. D.h. man kann RAMs grpßer 16 
k nicht so ohne Weiteres initialisieren. Siehe dazu meinen 
Servicerequest bei Altera!

von martin (Gast)


Lesenswert?

vielen Dank für den Hinweis. mit meinem 2K Init File klappten erste 
Tests, wobei ich mich noch nicht an Modelsim versucht habe...
Wirklich zuverlässig scheint das simulieren offensichtlich nicht zu 
funktionieren. Wie schaut es denn mti dem Raminitialisierung in Realität 
aus? Klappt das soweit oder sind da starke Abweichungen gegenüber der 
Simulation wahrzunehmen? Du sprichst von 'nem Größenlimit von 16k, 
meckert da der Compiler oder stellt man das irgendwann beim testen fest?
LG,
Martin

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.