data_read.vhd
84 lines
| 2.8 KiB
| text/x-vhdl
|
VhdlLexer
pellion
|
r544 | |||
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; | ||||