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 #5691527
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?
Gast #5691675
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.
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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.