Necesito leer un archivo .mif creado por IP Core Gen en xilinx

2

Aquí está mi código:

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL; 
use STD.TEXTIO.ALL;

entity new1 IS

    port(data : IN STD_LOGIC_VECTOR(7 DOWNTO 0)); 
end new1;

architecture Behavioral of new1 is

begin
    process 

    type my_file IS FILE OF INTEGER; 
    file data_in : my_file; 
    variable fstatus : file_open_status; 
    file_open(data_in, "c:\temp2.mif", read);

end process;

end Behavioral;

El código está dando error:

  

"identificador inesperado"

en el comando file_open .

    
pregunta gaurav gupta

1 respuesta

1

A tu proceso le faltó un begin .

    process 
        type my_file is file of integer; 
        file data_in : my_file; 
        variable fstatus : file_open_status; 
    begin
        file_open(fstatus, data_in, "c:\temp2.mif", READ_MODE);
    end process;

El identificador inesperado parece ser read , donde se esperaba READ_MODE .

No tiene que conectar la salida file_open_status para el procedimiento file_open , pero si no lo hace, ¿por qué lo declaró?

La forma del procedimiento declarado implícitamente file_open (consulte IEEE Std 1076-2008, 5.5.2 Operaciones con archivos):

    type FT is file of TM;
  

donde la marca de tipo TM denota un tipo escalar, un tipo de registro o un subtipo de matriz completamente restringido, lo siguiente   Las operaciones se declaran implícitamente inmediatamente después de la declaración del tipo de archivo:
  ...

procedure FILE_OPEN (Status: out FILE_OPEN_STATUS; 
                     file F: FT;  
                     External_Name: in STRING;
                     Open_Kind: in FILE_OPEN_KIND := READ_MODE);

Tenga en cuenta este proceso, ya que no hace nada interesante. Sin una lista de sensibilidad o una declaración de espera explícita, intentaría abrir el archivo para leerlo una y otra vez en un bucle sin fin.

La modificación del proceso permitirá al menos que se analice el código. Todavía necesita más trabajo.

Para el código que está mostrando, no se necesitan dos de las cláusulas de uso:

-- use ieee.std_logic_arith.all;
-- use ieee.std_logic_unsigned.all;
    
respondido por el user8352

Lea otras preguntas en las etiquetas