LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE IEEE.MATH_REAL.ALL; USE ieee.numeric_std.ALL; LIBRARY std; use std.textio.all; ENTITY data_read IS GENERIC ( input_file_name : STRING := "input_data_2.txt"; NB_CHAR_PER_DATA : INTEGER := 4 ); PORT ( clk : IN STD_LOGIC; read_new_data : IN STD_LOGIC; end_of_file : OUT STD_LOGIC; data_out_val : OUT STD_LOGIC; data_out : OUT STD_LOGIC_VECTOR(NB_CHAR_PER_DATA * 4 - 1 DOWNTO 0) ); END; ARCHITECTURE beh OF data_read IS BEGIN -- beh PROCESS FILE file_pointer : TEXT; VARIABLE line_read : LINE; VARIABLE line_content : STRING(1 TO NB_CHAR_PER_DATA); VARIABLE char_read : CHARACTER; VARIABLE data_read : STD_LOGIC_VECTOR(NB_CHAR_PER_DATA * 4 - 1 DOWNTO 0); VARIABLE signal_part : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN -- PROCESS end_of_file <= '0'; data_out_val <= '0'; data_out <= (OTHERS => '0'); WAIT UNTIL clk = '1'; file_open(file_pointer,input_file_name,READ_MODE); WHILE NOT endfile(file_pointer) LOOP readline(file_pointer, line_read); read(line_read,line_content); FOR i IN 1 TO NB_CHAR_PER_DATA LOOP char_read := line_content(NB_CHAR_PER_DATA+1-i); CASE char_read IS WHEN '0' => data_read(4*i-1 DOWNTO 4*(i-1)) := "0000"; WHEN '1' => data_read(4*i-1 DOWNTO 4*(i-1)) := "0001"; WHEN '2' => data_read(4*i-1 DOWNTO 4*(i-1)) := "0010"; WHEN '3' => data_read(4*i-1 DOWNTO 4*(i-1)) := "0011"; WHEN '4' => data_read(4*i-1 DOWNTO 4*(i-1)) := "0100"; WHEN '5' => data_read(4*i-1 DOWNTO 4*(i-1)) := "0101"; WHEN '6' => data_read(4*i-1 DOWNTO 4*(i-1)) := "0110"; WHEN '7' => data_read(4*i-1 DOWNTO 4*(i-1)) := "0111"; WHEN '8' => data_read(4*i-1 DOWNTO 4*(i-1)) := "1000"; WHEN '9' => data_read(4*i-1 DOWNTO 4*(i-1)) := "1001"; WHEN 'a' => data_read(4*i-1 DOWNTO 4*(i-1)) := "1010"; WHEN 'b' => data_read(4*i-1 DOWNTO 4*(i-1)) := "1011"; WHEN 'c' => data_read(4*i-1 DOWNTO 4*(i-1)) := "1100"; WHEN 'd' => data_read(4*i-1 DOWNTO 4*(i-1)) := "1101"; WHEN 'e' => data_read(4*i-1 DOWNTO 4*(i-1)) := "1110"; WHEN 'f' => data_read(4*i-1 DOWNTO 4*(i-1)) := "1111"; WHEN OTHERS => NULL; END CASE; END LOOP; WAIT UNTIL read_new_data = '1'; WAIT UNTIL clk = '1'; data_out <= data_read; data_out_val <= '1'; WAIT UNTIL clk = '1'; data_out_val <= '0'; END LOOP; file_close(file_pointer); end_of_file <= '1'; data_out_val <= '0'; WAIT; END PROCESS; END beh;