Der MIF-Dateiinhalt ändert sich automatisch, nachdem ROM mit der Datei initialisiert wurde

Ich arbeite an Single-Cycle-Risc-Prozessor. Ich benutze altera LPM Wizard ROM 1 Port für Befehlsspeicher. Das ROM wird von der MIF-Datei initialisiert. Der Inhalt der Datei ist unten angegeben

WIDTH=16;
DEPTH=256;

ADDRESS_RADIX=HEX;
DATA_RADIX=HEX;

CONTENT BEGIN
-- default value
[00..FF] : 00;

-- instructions

00  : 2401;  -- ADI R1, R0, x01
01  : 2802;  -- ADI R2, R0, x02
02  : 2C03;  -- ADI R3, R0, x03
03  : 3011;  -- ADI R4, R0, x11
04  : 1648;  -- ADD R5, R4, R4
05  : 1AC8;  -- ADD R6, R5, R4
06  : C0C1;  -- ST  R1, R4
07  : C151;  -- ST  R2, R5
08  : C1E1;  -- ST  R3, R6
09  : 80FF;  -- BZ  R0, -1

END;

Nachdem ich den Initialisierungsprozess abgeschlossen habe, ändert sich automatisch der Inhalt der MIF-Datei

-- Clearbox generated Memory Initialization File (.mif)

WIDTH=16;
DEPTH=256;

ADDRESS_RADIX=HEX;
DATA_RADIX=HEX;

CONTENT BEGIN
000  :   FFF0;
001  :   FFF1;
002  :   FFF2;
003  :   FFF3;
004  :   FFF4;
005  :   FFF5; 
     -------------
    -------------
    0fd  :   FFFD;
0fe  :   FFFE;
0ff  :   FFFF;
END;

Ich habe keine Ahnung, was passiert, also bitte helfen. Ich lerne gerade VHDL-Programmierung

0
nl ja ru

1 Antworten

Dies ist kein VHDL-Problem! Aber IMO, VHDL gibt Ihnen eine bessere Antwort. Ersetzen Sie dieses "LPM Wizard ROM" durch ein einfaches VHDL-Konstantenfeld, das (in VHDL) mit den gewünschten Werten initialisiert wird.

package InstMem is

type Instruction is std_logic_vector(15 downto 0);
type ProgMem_Array is array 0 to 255 of Instruction;

constant Progmem : Progmem_Array := (
   00  =>  16#2401#,  -- ADI R1, R0, x01
   01  =>  16#2802#,  -- ADI R2, R0, x02
   02  =>  16#2C03#,  -- ADI R3, R0, x03
   others => (others => 0) );

end package InstMem;

Das Übernehmen Ihres Assemblers oder eines Python-Skripts zum Schreiben dieses VHDL-Pakets ist trivial ...

0
hinzugefügt
Meine Hausaufgabe ist, Risc-Prozessor zu entwerfen, indem ich LPM Wizard ROM 1 Port als Anweisungsspeicher verwende, damit ich das ändern kann. Ich habe andere Dinge erledigt, aber hier blieb ich stecken.
hinzugefügt der Autor kajay, Quelle
Ich habe in Quartus II 12.0 getestet und es funktioniert gut. In Quartus II 8.1 funktionierte es nicht.
hinzugefügt der Autor kajay, Quelle