##// END OF EJS Templates
LFR-EQM 2.1.83...
LFR-EQM 2.1.83 > ad_conv_RH1401_withFilter version idem EM

File last commit:

r544:7527baf4377d JC
r601:1b6a99d2ea09 (LFR-EQM) 2-1-83 simu_with_Leon3
Show More
data_read.vhd
84 lines | 2.8 KiB | text/x-vhdl | VhdlLexer
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;