Aritmética de punto fijo

-1

Quiero dar dos datos de entrada de mi banco de pruebas desde un archivo que contiene bits (std_logic_victor (15 downto 0) a alguna operación aritmética entre el punto fijo y los archivos, pero cuando comienza, veo los siguientes mensajes en la consola:

Error a 200.000 ns: lectura de Textio :: llamada en una cadena o línea vacía a 200.000 ns: Error: LEER (STD_ULOGIC_VECTOR) Error: carácter '

PS: los datos se envían por dos FIFO

mi banco de pruebas:

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_unsigned.all;
USE ieee.numeric_std.ALL;
use IEEE.STD_LOGIC_TEXTIO.ALL;
library std;
use std.textio.all;
library work;
use WORK .fixed_pkg.all;
use work.fixed_float_types.all;




ENTITY LST1_tb_vhd IS
END LST1_tb_vhd;

ARCHITECTURE behavior OF LST1_tb_vhd IS

-- Component Declaration for the Unit Under Test (UUT)
COMPONENT LST_module
PORT(
clock_l : IN std_logic;
reset_l : IN std_logic;
read_en_l : IN std_logic;
write_en_l : IN std_logic;
outlar : IN std_logic_vector(15 downto 0);
outlar2 : IN std_logic_vector(15 downto 0); 
LST_A : OUT std_logic_vector(15 downto 0);
LST_B : OUT std_logic_vector(15 downto 0);
LST1 : OUT ufixed (14 downto -11)
);
END COMPONENT;

--Inputs
SIGNAL clock_l : std_logic := '0';
SIGNAL reset_l : std_logic := '0';
SIGNAL read_en_l : std_logic := '0';
SIGNAL write_en_l : std_logic := '0';
SIGNAL outlar : std_logic_vector(15 downto 0) := (others=>'0');
SIGNAL outlar2 : std_logic_vector(15 downto 0) := (others=>'0');

--Outputs
SIGNAL LST_A : std_logic_vector(15 downto 0);
SIGNAL LST_B : std_logic_vector(15 downto 0);
SIGNAL LST1 : ufixed (14 downto -11);
constant PERIOD : time := 40 ns;
BEGIN

-- Instantiate the Unit Under Test (UUT)^
uut: LST_module PORT MAP(
clock_l => clock_l,
reset_l => reset_l,
read_en_l => read_en_l,
write_en_l => write_en_l,
outlar => outlar,
outlar2 => outlar2,
LST_A => LST_A,
LST_B => LST_B,
LST1 => LST1
);

tb : PROCESS
BEGIN

-- PROCESS TO CONTROL THE CLOCK

clock_l <= '1';
WAIT FOR PERIOD/2;
clock_l <= '0';
WAIT FOR PERIOD/2;

END PROCESS;

-- *** Test Bench - User Defined Section ***

tb2 : PROCESS

file myfile:text open read_mode is "C:\Users\hp\Desktop\LST1.txt";
file myfile2:text open read_mode is "C:\Users\hp\Desktop\LST2.txt";

file myfile3:text open write_mode is "C:\Users\hp\Desktop\add5.txt";

variable X: std_logic_vector(15 downto 0) := (others => '0');
variable Y: std_logic_vector(15 downto 0) := (others => '0');

variable L: LINE;

BEGIN

WAIT FOR PERIOD ;

reset_l <= '0';
read_en_l <= '0';

WAIT FOR PERIOD ;

reset_l <= '1';
write_en_l <= '0';
WAIT FOR PERIOD ;
WAIT FOR PERIOD ;
WAIT FOR PERIOD ;

while not ENDFILE(myfile) loop
while not ENDFILE(myfile2) loop
READLINE(myfile, L); 
READ(L,X);
READLINE(myfile2, L); 
READ(L,Y);


write_en_l <= '1';
outlar <= X;
outlar2 <= Y;

WAIT FOR PERIOD;
write_en_l <= '0';
WAIT FOR PERIOD;
read_en_l <= '1';
LST_A <= outlar;
LST_B <= outlar2;

WAIT FOR PERIOD ;

write(L,LST1);
writeline(myfile3,L);
wait for PERIOD;
wait for PERIOD;
read_en_l <= '0';
end loop;
end loop;
file_close(myfile);
file_close(myfile2);
END PROCESS;
END behavior;

PS: los datos de los archivos son bits de 1 y 0 codificados en 16 bits

  •   

    LST1:

    0000011110101010 0000000000101010 0000001000000001 0000011110101010 0000000000101010 0000001000000001 0000011110101010 0000000000101010 0000001000000001

      

    LST2:

  

0000001010101010       0000001000001010       0000110000000001       0000000010101010       0000000000001010       0000000011000001       0000000010101010       0000000000001010       0000000000000001

También dame alguna advertencia: : HDLParsers: 3583 - Archivo "C: /Xilinx92i/vhdl/src/ieee/std_logic_unsigned.vhd" qué archivo "C: /Xilinx92i/LST_part1/FIFO.vhd" depende de que se haya modificado, pero no se ha compilado. Es posible que deba compilar "C: /Xilinx92i/vhdl/src/ieee/std_logic_unsigned.vhd". ADVERTENCIA: HDLParsers: 3583 - Archivo "C: /Xilinx92i/vhdl/src/ieee/std_logic_1164.vhd" cuyo archivo "C: /Xilinx92i/LST_part1/FIFO.vhd" depende de que se haya modificado, pero no se ha compilado. Es posible que deba compilar "C: /Xilinx92i/vhdl/src/ieee/std_logic_1164.vhd". ADVERTENCIA: HDLParsers: 3583 - Archivo "C: /Xilinx92i/vhdl/src/ieee/std_logic_1164.vhd" cuyo archivo "C: /Xilinx92i/LST_part1/LST_FIFO.vhd" depende de que se haya modificado, pero no se ha compilado. Es posible que deba compilar "C: /Xilinx92i/vhdl/src/ieee/std_logic_1164.vhd". ADVERTENCIA: HDLParsers: 3583 - Archivo "C: /Xilinx92i/vhdl/src/ieee/numeric_std.vhd" qué archivo "C: /Xilinx92i/LST_part1/LST1_Top_Module.vhd" depende de que se haya modificado, pero no se ha compilado. Es posible que deba compilar "C: /Xilinx92i/vhdl/src/ieee/numeric_std.vhd". ADVERTENCIA: HDLParsers: 3583 - Archivo "C: /Xilinx92i/vhdl/src/ieee/std_logic_1164.vhd" cuyo archivo "C: /Xilinx92i/LST_part1/LST1_Top_Module.vhd" depende de que se haya modificado, pero no se ha compilado. Es posible que deba compilar "C: /Xilinx92i/vhdl/src/ieee/std_logic_1164.vhd". ADVERTENCIA: HDLParsers: 3583 - Archivo "C: /Xilinx92i/LST_part1/xst/work/fixed_float_types.vhd" cuyo archivo "C: /Xilinx92i/LST_part1/LST1_Top_Module.vhd" depende de que se haya modificado, pero no se ha realizado. Es posible que deba compilar "C: /Xilinx92i/LST_part1/xst/work/fixed_float_types.vhd". ADVERTENCIA: HDLParsers: 3583 - Archivo "C: /Xilinx92i/LST_part1/xst/work/fixed_pkg_c.vhd" qué archivo "C: /Xilinx92i/LST_part1/LST1_Top_Module.vhd" depende de que se haya modificado, pero no se ha compilado. Es posible que necesites compilar

    

1 respuesta

0

Creo que necesitas un wait; al final de tu proceso de archivo. Está intentando leer los archivos después de que se cerraron porque el proceso comienza a ejecutarse nuevamente. Eso o algo puede estar mal con tus archivos.

Editar:

Tal vez intente lo siguiente en lugar de READ(L,X) y READ(L,Y) por ahora como se sugiere aquí :

-- Let's have a look at that line, before we read it
report "Got line from file: '" & L.all & "'";

Esto podría mostrarte lo que en tu archivo se ve como una cadena / línea vacía.

Además, parece que sus valores binarios están todos en una línea separados por espacios. Para mí, esto solo permitía leer el primer valor. Intente colocar los valores de 16 bits en líneas separadas.

No estoy seguro de esas advertencias. ¿Has modificado alguno de esos archivos de la biblioteca? Normalmente, cualquier herramienta que estés usando tendrá versiones precompiladas de esas bibliotecas.

    
respondido por el user_007

Lea otras preguntas en las etiquetas