LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE ieee.numeric_std.ALL; LIBRARY std; USE std.textio.ALL; ENTITY spw_sender IS GENERIC( FNAME : STRING := "input.txt" ); PORT( end_of_simu : OUT STD_LOGIC; start_of_simu : IN STD_LOGIC; clk : IN STD_LOGIC; txwrite : OUT STD_LOGIC; txflag : OUT STD_LOGIC; txdata : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); txrdy : IN STD_LOGIC; txhalff : IN STD_LOGIC ); END spw_sender; ARCHITECTURE beh OF spw_sender IS FILE input_file : TEXT OPEN read_mode IS FNAME; BEGIN ----------------------------------------------------------------------------- -- Data orginization in the input file : ----------------------------------------------------------------------------- -- Exemple of input.txt file : -- Time1 N1 -- Data_1 -- Data_2 -- ... -- Data_N1 -- Time2 N2 -- Data_1 -- Data_2 -- ... -- Data_N2 -- ... -- TimeK NK -- Data_1 -- Data_2 -- ... -- Data_NK ----------------------------------------------------------------------------- -- Time : integer. Waiting time (in ns) before to send the following message -- N : integer. Length (in Byte) of the following message. -- Data : integer(0 to 255). A part of the message. ----------------------------------------------------------------------------- PROCESS IS VARIABLE line_var : LINE; VARIABLE waiting_time : INTEGER; VARIABLE length_of_message : INTEGER; VARIABLE value : INTEGER; BEGIN -- PROCESS txwrite <= '0'; txflag <= '0'; WAIT UNTIL clk = '1'; IF start_of_simu = '1' THEN IF endfile(input_file) THEN end_of_simu <= '1'; ELSE end_of_simu <= '0'; readline(input_file, line_var); read(line_var, waiting_time); read(line_var, length_of_message); WAIT FOR waiting_time * 1 ns; FOR char_number IN 0 TO length_of_message-1 LOOP WAIT UNTIL clk = '1' AND txrdy = '1'; readline(input_file, line_var); read(line_var, value); txwrite <= '1'; txflag <= '0'; txdata <= STD_LOGIC_VECTOR(to_unsigned(value, txdata'LENGTH)); END LOOP; -- char_number WAIT UNTIL clk = '1' AND txrdy = '1'; txwrite <= '1'; txflag <= '1'; txdata <= (OTHERS => '0'); WAIT UNTIL clk = '1'; txwrite <= '0'; txflag <= '0'; END IF; END IF; END PROCESS; END beh;