architecture Behavioral of INST_CACHE is
begin
init_cache : process (INIT)
subtype word is std_logic_vector(0 to 31);
type storage_array is array (natural range 0 to 2**32 - 1) of word;
--type storage_array is array (0 to 2**32 - 1) of STD_LOGIC_VECTOR (DATA_WIDTH - 1 downto 0);
variable storage : storage_array;
variable index : natural;
type load_file_type is file of word;
file load_file : load_file_type
open read_mode is "C:\cachecontent.bin";
begin
-- load ROM contents from load_file
index := 0;
while not endfile(load_file) loop
read(load_file, storage(index));
index := index + 1;
end loop;
if rising_edge(CLK) then
InstCacheOut1 <= storage(to_integer(unsigned(InstCacheIn1)))&InstCacheIn1&'1'; -- instrukcija & PC te instrukcije & valid bit
InstCacheOut2 <= storage(to_integer(unsigned(InstCacheIn2)))&InstCacheIn2&'1'; -- instrukcija & PC te instrukcije & valid bit
end if;
end process;
end Behavioral;
Quiero simular un caché simple. Cargaré las instrucciones de un archivo en una estructura. Sin embargo me sale el error
Error (10536): Error de instrucción de bucle VHDL en InstCache.vhd (49): bucle debe terminar dentro de 10,000 iteraciones
La línea en la que se informa el error es:
while not endfile(load_file) loop
Supongo que el archivo no se abrió correctamente o quizás no tiene el carácter EOF. Primero, ¿estoy abriendo los archivos de la manera correcta? En segundo lugar, ¿qué extensiones son compatibles? En tercer lugar, tengo que agregar manualmente el carácter EOF. Cuarto: ¿algo más puede ser un problema?