Altera/Intel-Äquivalent von data2mem

Gast #5691363
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
Gast #5691431
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
Gast #5691437
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
Gast #5691449
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
Gast #5691728
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
Gast #5695898
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren