mikrocontroller.net

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


Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ulf L. (ulf_l)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Eingast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Frank S. (schroederde)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Unter Processing. Update Memory files und dann Start assembler.

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
:
:
type ram_type is array(natural range 0 to ramend-1) of std_logic_vector(31 downto 0);

shared variable ram : ram_type :=
(
     0 => x"0b0b0b0b",
     1 => x"82700b0b",
     2 => x"80f0fc0c",
     3 => x"3a0b0b80",
:
:

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

Duke

Autor: Duke Scarring (Gast)
Datum:

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

Danke!
quartus_cdb --update_mif <project name>
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

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: eRFrIeD (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Eingast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Markus F. (mfro)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast Du dir die ALTMEM_INIT IP mal angeschaut?

Vielleicht kannst Du da ja was davon gebrauchen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.