Hallo,
ich arbeite gerade im Zuge meiner Diplomarbeit mit einem Spartan-3E und
dem AX8-Softcore von opencores, der ja standardmäßig nur 2kB
Programmspeicher hat. Das ist mir jetzt zu wenig. Laut Wiki
(http://www.mikrocontroller.net/articles/FPGA_Soft_Core) soll es einfach
möglich sein, den auf 8kB ROM aufzupeppeln.
Meine Frage ist, was muss genau am µC geändert werden? Ich benutze
bisher das hex2rom aus diesem Thread hier:
Beitrag "hex2rom für AX8 und Xilinx:XST"
Vielleicht hat ja jemand Erbarmen mit einem Anfänger :)
Danke und Gruß
Benjamin
Als Ergänzung vielleicht meine bisherigen Gedanken, ich hoffe, die sind
nicht ganz falsch. Genügt es, um 8kByte PROM adressieren zu können:
a) in der Datei A90S2313.VHD die Konstante "ROMAddressWidth" von 10 auf
12 zu ändern und
b) für hex2rom anstelle von "10l16x" den Paramter "12l16x" zu verwenden?
Gruß,
Benjamin
Prinzipiell sollten Deine Änderungen schon reichen. Ich guck mal, was
ich damals geändert habe.
In der C-Toolchain mußt Du auch noch einen entsprechenden Chip
auswählen.
Duke
Das wäre sehr nett, wenn Du mal nachschauen würdest. Hast Du zufällig
auch noch zusätzliche Ports hinzugefügt? Die könnte ich auch noch gut
gebrauchen...
Ich benutze WinAVR und werde dort dann mal den im Wiki erwähnten
AT90S8535 einstellen. Wobei WinAVR/avr-gcc auch dann durchkompiliert und
die hex-Datei erstellt wenn man die ROM-Größe des eingestellten Chips
(hier dann AT90S2313) überschreitet.
Guck mal ob der Anhang so verwendbar ist. Bei Bedarf kann ich Dir auch
noch den Watchdog und den EEPROM geben. (Der EEprom wird nur emuliert,
kann aber als einfache Speichererweiterung fuer Daten genutzt werden.)
Duke
Hi Duke,
bin jetzt doch noch auf ein Problem gestoßen... Sobald ich mehr als 4kB
ROM verwende, macht der µC nur noch Quatsch (zumindest bei allem, was im
ROM oberhalb der ersten 4kB liegt).
Aufgefallen ist mir das dabei, dass der UART nur funktioniert, wenn ich
unter den magischen 50% ROM-Auslastung bleibe. Darüber kommen nur noch
wirre Zeichen.
Hattest Du Deinen erweiterten Core schon mit mehr als 4kB getestet?
Meine mit hex2rom generierte ROM-Beschreibung müsste jedenfalls korrekt
sein, oder?
> Sobald ich mehr als 4kB ROM verwende...
Dein ROM hat 4k Worte (allerdings mit je 16 Bit). Bist du sicher, dass
die Probleme bei 4k Bytes auftreten und nicht bei 4k Worten?
Benjamin schrieb:> Hattest Du Deinen erweiterten Core schon mit mehr als 4kB getestet?
Ich denke ja, weil letztendlich waren mir die 8k auch noch zu wenig, so
daß ich Daten in ein virtuelles EEPROM ausgelagert habe. Ich guck aber
gern nochmal nach, um sicher zu gehen.
Kommt denn aus dem AX8 die richtige Bitbreite für den Speicher raus?
Duke
Lothar Miller schrieb:> Bist du sicher, dass> die Probleme bei 4k Bytes auftreten und nicht bei 4k Worten?
Ja, schon.... Bleibe ich unter 50% laut avr-gcc, wird das ROM mittels
hex2rom auch automatisch nur mit 2k Worten beschrieben. Komme ich über
50% enthält es 4k Worte.
So sieht die Ausgabe ja in WinAVR am Schluss aus:
Program: 4218 bytes (51.5% Full)
(.text + .data + .bootloader)
Data: 162 bytes (31.6% Full)
(.data + .bss + .noinit)
Duke Scarring schrieb:> Kommt denn aus dem AX8 die richtige Bitbreite für den Speicher raus?
Ja, habe das unverändert von Deiner VHDL-Datei übernommen:
Ich war in der Zwischenzeit nicht untätig und habe es jetzt irgendwie
hinbekommen.
Ich habe die Konstante "ROMAddressWidth" im µC auf 13 erhöht, obwohl 12
ja eigentlich ausreichen sollte, um 24096 Wörter zu adressieren.
Weiter benutze ich für hex2rom dazu passend jetzt den folgenden
Parameter, damit das ROM auch mit einer Breite von 13 Bit fürs
Adresssignal erstellt wird:
./hex2rom.exe main.hex ROM8535 13l16x > rom8535.vhd
Verstehe das nun wer will, aber so laufen jetzt auch Programme mit über
4K Speicherbedarf.
Ideen?
Viele Grüße
Benjamin
Oben meinte ich natürlich:
"Ich habe die Konstante "ROMAddressWidth" im µC auf 13 erhöht, obwohl 12
ja eigentlich ausreichen sollte, um 4096 Wörter zu adressieren."
Hier noch die komplette neue ROM-Beschreibung (Array-Elemente gekürzt):
1
-- This file was generated with hex2rom written by Daniel Wallner