|
|
LIBRARY ieee;
|
|
|
USE ieee.std_logic_1164.ALL;
|
|
|
USE ieee.numeric_std.ALL;
|
|
|
|
|
|
LIBRARY std;
|
|
|
USE std.textio.ALL;
|
|
|
|
|
|
ENTITY spw_receiver IS
|
|
|
GENERIC(
|
|
|
FNAME : STRING := "output.txt"
|
|
|
);
|
|
|
PORT(
|
|
|
end_of_simu : IN STD_LOGIC;
|
|
|
timestamp : IN integer;
|
|
|
|
|
|
clk : IN STD_LOGIC;
|
|
|
|
|
|
rxread : out STD_LOGIC;
|
|
|
rxflag : in STD_LOGIC;
|
|
|
rxdata : in STD_LOGIC_VECTOR(7 DOWNTO 0);
|
|
|
rxvalid : in STD_LOGIC;
|
|
|
rxhalff : out STD_LOGIC
|
|
|
);
|
|
|
END spw_receiver;
|
|
|
|
|
|
ARCHITECTURE beh OF spw_receiver IS
|
|
|
|
|
|
FILE output_file : TEXT OPEN write_mode IS FNAME;
|
|
|
|
|
|
SIGNAL message_ongoing : STD_LOGIC := '0';
|
|
|
SIGNAL message_timestamp : INTEGER;
|
|
|
|
|
|
BEGIN
|
|
|
-----------------------------------------------------------------------------
|
|
|
-- Data orginization in the output file :
|
|
|
-----------------------------------------------------------------------------
|
|
|
-- Exemple of output.txt file :
|
|
|
-- Data_1
|
|
|
-- Data_2
|
|
|
-- ...
|
|
|
-- Data_N
|
|
|
-- TIME= TimeStamp_when_Data_1_was_received
|
|
|
-- Data_N+1
|
|
|
-- Data_N+2
|
|
|
-- ...
|
|
|
-- Data_M
|
|
|
-- TIME= TimeStamp_when_Data_N+1_was_received
|
|
|
-- Data_M+1
|
|
|
-- Data_M+2
|
|
|
-- ...
|
|
|
-- Data_K
|
|
|
-- TIME= TimeStamp_when_Data_M+1_was_received
|
|
|
-----------------------------------------------------------------------------
|
|
|
-- TimeStamp : integer. Waiting time (in ns) before to send the following message
|
|
|
-- Data : integer(0 to 255). A part of the message.
|
|
|
-----------------------------------------------------------------------------
|
|
|
|
|
|
PROCESS(clk,end_of_simu)
|
|
|
VARIABLE line_var : LINE;
|
|
|
BEGIN
|
|
|
IF end_of_simu = '1' THEN
|
|
|
file_close(output_file);
|
|
|
rxread <= '0';
|
|
|
ELSIF clk'EVENT AND clk = '1' THEN
|
|
|
rxread <= '1';
|
|
|
IF rxvalid = '1' THEN
|
|
|
IF rxflag = '1' THEN
|
|
|
write(line_var, "TIME= " & INTEGER'IMAGE(message_timestamp));
|
|
|
message_ongoing <= '0';
|
|
|
ELSE
|
|
|
IF message_ongoing = '0' THEN
|
|
|
message_ongoing <= '1';
|
|
|
message_timestamp <= TimeStamp;
|
|
|
END IF;
|
|
|
write(line_var, INTEGER'IMAGE(to_integer(UNSIGNED(rxdata))));
|
|
|
END IF;
|
|
|
writeline(output_file, line_var);
|
|
|
END IF;
|
|
|
END IF;
|
|
|
END PROCESS;
|
|
|
|
|
|
END beh;
|
|
|
|