Forum: FPGA, VHDL & Co. Altera/Intel-Äquivalent von data2mem


von Duke Scarring (Gast)


Lesenswert?

Hi folks!

Bei Xilinx (ISE-Toolchain) gibt es die Möglichkeit mit data2mem den 
Blockram im fertigen Bitfile zu aktualisieren. In Vivado heißt das 
Werkzeug updatemem.

Damit kann man die Synthese drastisch abkürzen, wenn man nur den Inhalt 
des Blockrams geändert hat.

Gibt es so eine Möglichkeit auch bei Quartus?
Oder bei Lattice Diamond?
Dort habe ich es zwar noch nicht vermisst, da meine Designs dort so 
klein sind, das die Synthese recht flott ist.

Duke

von Ulf L. (ulf_l)


Lesenswert?

Hallo

Ich weis nicht genau, ob ich Dich richtig verstanden habe. Wenn Du im 
Megawizzard den RAM-Bereich erstellst kanst Du da auch schon den Inhalt 
initialisieren. Als Eingangswerte kannst Du ein hex-File oder mif-File 
angeben.

Gruß Ulf

von Eingast (Gast)


Lesenswert?


von Frank S. (schroederde)


Lesenswert?

Unter Processing. Update Memory files und dann Start assembler.

von Duke Scarring (Gast)


Lesenswert?

Ulf L. schrieb:
> Wenn Du im
> Megawizzard den RAM-Bereich erstellst kanst Du da auch schon den Inhalt
> initialisieren. Als Eingangswerte kannst Du ein hex-File oder mif-File
> angeben.
Nein, das ist nicht ganz das, was ich meine.
Die grundsätzliche Initialisiserung läuft über das VHDL-File:
1
:
2
:
3
type ram_type is array(natural range 0 to ramend-1) of std_logic_vector(31 downto 0);
4
5
shared variable ram : ram_type :=
6
(
7
     0 => x"0b0b0b0b",
8
     1 => x"82700b0b",
9
     2 => x"80f0fc0c",
10
     3 => x"3a0b0b80",
11
:
12
:

Ich möchte in der fertigen .sof-Datei die Bits ändern, die mit der 
obigen RAM-Initialisierung erzeugt werden.

Duke

von Duke Scarring (Gast)


Lesenswert?

Eingast schrieb:
> 
https://www.intel.com/content/www/us/en/programmable/support/support-resources/knowledge-base/solutions/rd12062004_8707.html

Danke!
1
quartus_cdb --update_mif <project name>
2
quartus_asm <project name>

So wie es aussieht brauche ich ein .mif oder .hex im Projekt.
Habe ich aber nicht. Ich könnte zwar eins erzeugen, aber woher will 
Quartus wissen, zu welcher RAM-Beschreibung das gehört?

Das ist zwar die richtige Richtung, aber führt nicht bis ganz zum Ziel.

Duke

von Duke Scarring (Gast)


Lesenswert?

Habe noch was im Scripting Guide [1] gefunden:

update_content_to_memory_from_file

Usage

update_content_to_memory_from_file -instance_index <instance index> 
-mem_file_path
<path> -mem_file_type <file type>

Options

-instance_index <instance index>: Index of the editable memory instance 
to modify
-mem_file_path <path>: Path to the memory file to load the memory 
content
-mem_file_type <file type>: Type of the memory file such as "mif" or 
"hex"

Description

Writes the data stored in the memory file into the specified memory 
instance starting from address 0.



Das sieht doch ganz brauchbar aus.

Duke


[1] 
https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/manual/tclscriptrefmnl.pdf

von eRFrIeD (Gast)


Lesenswert?

> Ich könnte zwar eins erzeugen, aber woher will
> Quartus wissen, zu welcher RAM-Beschreibung das gehört?

Vielleicht mal mit dem Wizard Block-RAM erzeugen und dann
gucken wo und wie das mif/hex referenziert wird?

von Eingast (Gast)


Lesenswert?

Duke Scarring schrieb:
> So wie es aussieht brauche ich ein .mif oder .hex im Projekt.
> Habe ich aber nicht.

Ich habe nochmal rumgespielt. Für meine ROMs werden automatisch .mif 
files erzeugt, für meine RAMs nicht. Ich habe leider auch keine Option 
gefunden, mit dem man Quartus zwingen kann, für alle RAMs eine dummy-mif 
Datei anzulegen.

von Duke Scarring (Gast)


Lesenswert?

@Eingast:
Ja, für meinen vorinitialisieren RAM wird auch ein .mif angelegt.

Ich habe auch den 'In-System Memory Content Editor' entdeckt.
Es würde mir vermutlich auch reichen, den Speicherinhalt im laufenden 
System zu ändern.

Nur der 'Instance Manager' findet noch keine passenden Instanzen.
Ich habe im .qsf-File zwei Parameterzuweisungen ergänzt:
https://forums.intel.com/s/question/0D50P00003yyHCiSAM/adding-insystem-memory-editor-with-the-assignment-editor

Mal sehen, ob das klappt, die Synthese läuft gerade.

Duke

von Duke Scarring (Gast)


Lesenswert?

Duke Scarring schrieb:
> Mal sehen, ob das klappt, die Synthese läuft gerade.
Leider klappt das nicht.

Für die altsyncrams die mit dem Wizard erstellt werden, geht es.
Dort wird das Generic 'lpm_hint' mit den Werten 
"ENABLE_RUNTIME_MOD=YES,INSTANCE_NAME=test" gefüllt und es gibt einen 
Topic "Debug" im Compilation Report, wo die entsprechenden Instanzen 
aufgeführt werden.

Für die auto_generated RAMs sind die beschriebenen 
'set_parameter'-Angaben leider wirkungslos. Dementsprechend fehlt der 
"Debug"-Topic und der 'In-System Memory Content Editor' findet keine 
passenden Instanzen.

Generell gibt es die Einschränkung, das an dieser Stelle kein 
Dual-Port-RAM verwendet werden kann, da der zweite Port für die 
Updateschnittstelle genutzt wird.

Duke

von Markus F. (mfro)


Lesenswert?

Hast Du dir die ALTMEM_INIT IP mal angeschaut?

Vielleicht kannst Du da ja was davon gebrauchen.

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.