Forum: FPGA, VHDL & Co. Altera MAX10 - kein ROM im Compact Mode?


von Der Zahn der Zeit (Gast)


Lesenswert?

Hallo zusammen,

die Frage vorab: Ist es wirklich wahr, dass es bei den MAX10-FPGAs im 
Compact Mode (also z. B. ein 10M08SC - das "C" ist wichtig) nicht 
möglich ist, ein initialisiertes RAM bzw. ein ROM zu realisieren?

Hintergrund: Ich mache nur gelegentlich FPGAs, habe bisher Cyclone II 
und III kennen gelernt, und dort war es ganz selbstverständlich, dass 
sowohl ROMs als auch als vorinitialisierte RAMs möglich waren.

Nun gibt es die MAX10, die ich für vergleichsweise genial halte: Nur 
eine Betriebsspannung (Option), kein externes Config-Device, alternativ 
mit ADC und reichlich FLASH... dazu preiswert... neue Besen kehren gut!

So habe ich ein 10M08SC vorgesehen und brauche auch hier 
selbstverständlich ROMs, auch hier mehrere. Das scheint aber gar nicht 
möglich zu sein: Der Compiler meint:

ID:16031 Current Internal Configuration mode does not support memory 
initialization or ROM. Select Internal Configuration mode with ERAM.

Das kann ich aber nicht auswählen, und nach längerer Forschung finde ich 
heraus, dass die Compact-Varianten das prinzipiell gar nicht können. Ja, 
das unerwartete Kleingedruckte...

Ich stehe ziemlich fassungslos davor.  Was ergibt ein FPGA mit viel 
Speicher für einen Sinn, wenn man den nicht initialisieren kann 
(höchstens durch einen externen Prozessor)? Wie viele Designs gibt es, 
für die kein ROM gebraucht wird? In denen Prozessoren, Signaltabellen 
und all so'n Zeug nicht möglich sind?

Ich finde das so unglaublich, dass ich einen noch Rest Hoffnung habe, 
mich gewaltig zu irren.

Ansonsten muss ich wohl ein paar Euro mehr ausgeben und EQFP144 gegen 
ein anderes tauschen - zum Glück sind sie aber Pin kompatibel. Schon mal 
Schlimmeres erlebt.

von Jim M. (turboj)


Lesenswert?

Der Zahn der Zeit schrieb:
> Was ergibt ein FPGA mit viel
> Speicher für einen Sinn, wenn man den nicht initialisieren kann
> (höchstens durch einen externen Prozessor)?

Mal ein Oszilloskop aufgemacht?

Aufbau ist normalerweise so: ADC(s)->FPGA->dicker ARM Prozessor. Da kann 
der Hauptprozessor dem FPGA auch recht simpel seine Config einblasen, 
wenn noch genug GPIOs dafür übrig sind. Dennoch braucht der FPGA viel 
schnellen Speicher.

von Der Zahn der Zeit (Gast)


Lesenswert?

Hi Jim,

das war jetzt zwar keine Antwort auf die mir wichtige Frage, aber: Es 
mag ja sein, dass in solchen Geräten alle FPGA-RAMs vom zentralen µC 
initialisiert werden, aaaaber:

Dann kann man auch gleich das ganze FPGA per µC konfigurieren (habe ich 
auch schon gemacht), so dass ein FPGA mit eingebautem Config-ROM, aber 
ohne Möglichkeit zur RAM/ROM-Initialisierung (also das MAX10 "Compact 
Mode"), dann ja wohl auch wenig sinnvoll ist.

Internes Config-ROM ist doch nur dann sinnvoll, wenn kein externer 
Prozessor die Konfiguration übernehmen kann.

Grüße

DZDZ

von user (Gast)


Lesenswert?

Also im Datenblatt steht das hier:

All memory blocks support initialization with a .mif. You can create 
.mif files in the Quartus II software and specify their use with the RAM 
IP when you instantiate a memory in your design.

hast du probiert das Memory mit einer .mif Datei zu initialisieren?

von Der Zahn der Zeit (Gast)


Angehängte Dateien:

Lesenswert?

user schrieb:
> Also im Datenblatt steht das hier:
>
> All memory blocks support initialization with a .mif. You can create
> .mif files in the Quartus II software and specify their use with the RAM
> IP when you instantiate a memory in your design.
Darauf bin ich offensichtlich auch herein gefallen, denn das gilt 
(offensichtlich) nicht für alle Varianten (= Feature Options) des MAX10. 
Anbei zwei Screenshots aus dem m10_overview.pdf:

Man sieht, es gibt die Feature Options "Compact", "Analog" und "Flash". 
10M08SC hatte ich ausgewählt.

In der Tabelle steht nicht, dass "Memory initialzation" für die Feature 
Option Compact mögich ist. Das geht nur - lt. Tabelle und nach bitterer 
praktischer Erfahrung - für "Flash" und "Analog".

Ich werde jetzt ein 10M08SA einsetzen müssen. Der ist zumindest 
Pin-kompatibel. Das wird eine blöde Löterei. Es sei denn, es gibt noch 
einen anderen Weg, ROM zu erzeugen. (Ein kleines ROM hatte ich durch 
einen Haufen VHDL-Code ersetzen können - vielleicht klappt das auch für 
andere, aber bei der großen Sinus-Tabelle ist Schluss.)

> hast du probiert das Memory mit einer .mif Datei zu initialisieren?
Na klar. Soweit ich mich erinnern kann, hatte bisher jedes meiner FPGAs 
ROMs, damit kenne ich mich gut aus. Der IP MegaWizzard weiß nicht, dass 
das nicht geht, denn er weiß nicht, welches das Ziel-Device ist. Er 
weist allerdings im Kleingedruckten darauf hin, dass man das richtige 
Configuration Scheme wählen muss. Aber dass das bei einigen Varianten 
gar nicht möglich ist, verrät er nicht. Erst beim Kompilieren kommt dann 
das böse Erwachen "ID:16031" (s. o.).

von Duke Scarring (Gast)


Lesenswert?

Falls Du einen µC (oder anderen externen nichtflüchtigen Speicher) in 
Deinem Design hast, könntest Du als Workaround die ROM-Inhalte beim 
Start nachladen.

Duke

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.