VHDL - init std_logic_vector-array aus der HEX-Datei
Habe ich einfach "RAM" implementiert:
type memory_array is array(31 downto 0) of std_logic_vector(7 downto 0);
signal ram : memory_array;
Möchte ich init Inhalt es ist, aus der HEX-Datei. Ich Frage mich nach dem Lesen der Datei wie:
ram_init: process
file file_ptr : text;
variable line_text : string(1 to 14);
variable line_num : line;
variable lines_read : integer := 0;
variable char : character;
variable tmp_hexnum : string(1 to 2);
begin
file_open(file_ptr,"../RAM.HEX",READ_MODE);
while (not endfile(file_ptr)) loop
readline (file_ptr,line_num);
READ (line_num,line_text);
if (lines_read < 32) then
tmp_hexnum := line_text(10 to 11);
-- ram(lines_read) <= tmp_hexnum;
lines_read := lines_read + 1;
wait for 10 ns;
end if;
end loop;
file_close(file_ptr);
wait;
end process;
Das problem ist (wenn der oben gezeigte code würde arbeiten, die ich gar nicht wissen), wie konvertiert man die tmp_hexnum string std_logic_vector.
Bitte haben Sie Geduld mit mir, VHDL-Anfänger.
- Welche hardware-Plattform Sie verwenden möchten? Wenn es um die Speicher-Initialisierung, die zugrunde liegende hardware ist mindestens genauso wichtig wie der VHDL-code.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der erste Fehler ist die Verwendung eines Prozess : wenn Sie versuchen, Sie zu synthetisieren, das design, der Prozess wird nicht alles tun, bis das design ist eingebaut und läuft; das ist viel zu spät, um eine Datei Lesen!
Stattdessen wickeln Sie den init-code in eine Funktion aus, und initialisieren Sie den Speicher
Dies funktioniert in der simulation, und viele Synthese-Werkzeugen ableiten, dass ein RAM und initialisieren Sie es richtig. Deklarieren Sie eine Konstante, anstatt ein signal, so würde es zu einem ROM anstatt einem RAM.
Sowieso die Funktion sieht ein bisschen aus wie
verlassen Sie mit dem ursprünglichen problem :
schreiben der to_slv Funktion. Es sollte eine standard-Bibliothek von diesen, aber für einige Grund es gibt nicht die eine allgemein akzeptierte ein. So, hier ist ein Anfang...
Konvertieren einer Zeichenfolge variabler Länge auf std_logic_vector mit der Länge von 4 *
Länge eines string, kann man mit der Funktion unter:
Ihre (beiden) Antworten haben mir sehr geholfen. Aber es scheint nicht zu arbeiten.
Wenn ich tmp_hexnum z.B. "0A", ist es OK, aber beim Lesen der Datei nicht füllen den RAM.
Können Sie überprüfen Sie bitte die Datei für mich, auch?