spw_receiver.vhd
82 lines
| 2.1 KiB
| text/x-vhdl
|
VhdlLexer
|
r686 | 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; | ||||