|
|
|
|
|
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_write IS
|
|
|
GENERIC (
|
|
|
OUTPUT_FILE_NAME : STRING := "output_data_2.txt";
|
|
|
NB_CHAR_PER_DATA : INTEGER := 4
|
|
|
);
|
|
|
PORT (
|
|
|
clk : IN STD_LOGIC;
|
|
|
data_in_val : IN STD_LOGIC;
|
|
|
data : IN STD_LOGIC_VECTOR(NB_CHAR_PER_DATA * 4 - 1 DOWNTO 0);
|
|
|
close_file : IN STD_LOGIC
|
|
|
);
|
|
|
END;
|
|
|
|
|
|
ARCHITECTURE beh OF data_write IS
|
|
|
|
|
|
|
|
|
BEGIN -- beh
|
|
|
|
|
|
PROCESS
|
|
|
FILE file_pointer : TEXT;
|
|
|
VARIABLE line_read : LINE;
|
|
|
VARIABLE line_content : STRING(1 TO 4);
|
|
|
VARIABLE line_write : LINE;
|
|
|
VARIABLE line_content_write : STRING(1 TO NB_CHAR_PER_DATA);
|
|
|
VARIABLE line_content_write_inv : STRING(1 TO NB_CHAR_PER_DATA);
|
|
|
VARIABLE char_read : CHARACTER;
|
|
|
VARIABLE data_read : STD_LOGIC_VECTOR(15 DOWNTO 0);
|
|
|
VARIABLE signal_part : STD_LOGIC_VECTOR(3 DOWNTO 0);
|
|
|
|
|
|
BEGIN -- PROCESS
|
|
|
|
|
|
WAIT UNTIL clk = '1';
|
|
|
|
|
|
file_open(file_pointer , OUTPUT_FILE_NAME , WRITE_MODE);
|
|
|
WHILE close_file = '0' LOOP
|
|
|
IF data_in_val = '1' THEN
|
|
|
FOR i IN 1 TO NB_CHAR_PER_DATA LOOP
|
|
|
signal_part := data(i*4-1 DOWNTO (i-1)*4);
|
|
|
CASE signal_part IS
|
|
|
WHEN "0000" => line_content_write(NB_CHAR_PER_DATA+1-i) := '0';
|
|
|
WHEN "0001" => line_content_write(NB_CHAR_PER_DATA+1-i) := '1';
|
|
|
WHEN "0010" => line_content_write(NB_CHAR_PER_DATA+1-i) := '2';
|
|
|
WHEN "0011" => line_content_write(NB_CHAR_PER_DATA+1-i) := '3';
|
|
|
WHEN "0100" => line_content_write(NB_CHAR_PER_DATA+1-i) := '4';
|
|
|
WHEN "0101" => line_content_write(NB_CHAR_PER_DATA+1-i) := '5';
|
|
|
WHEN "0110" => line_content_write(NB_CHAR_PER_DATA+1-i) := '6';
|
|
|
WHEN "0111" => line_content_write(NB_CHAR_PER_DATA+1-i) := '7';
|
|
|
WHEN "1000" => line_content_write(NB_CHAR_PER_DATA+1-i) := '8';
|
|
|
WHEN "1001" => line_content_write(NB_CHAR_PER_DATA+1-i) := '9';
|
|
|
WHEN "1010" => line_content_write(NB_CHAR_PER_DATA+1-i) := 'a';
|
|
|
WHEN "1011" => line_content_write(NB_CHAR_PER_DATA+1-i) := 'b';
|
|
|
WHEN "1100" => line_content_write(NB_CHAR_PER_DATA+1-i) := 'c';
|
|
|
WHEN "1101" => line_content_write(NB_CHAR_PER_DATA+1-i) := 'd';
|
|
|
WHEN "1110" => line_content_write(NB_CHAR_PER_DATA+1-i) := 'e';
|
|
|
WHEN "1111" => line_content_write(NB_CHAR_PER_DATA+1-i) := 'f';
|
|
|
WHEN OTHERS => NULL;
|
|
|
END CASE;
|
|
|
END LOOP; -- i
|
|
|
write(line_write,line_content_write);
|
|
|
writeline(file_pointer,line_write);
|
|
|
END IF;
|
|
|
WAIT UNTIL clk = '1';
|
|
|
END LOOP;
|
|
|
file_close(file_pointer);
|
|
|
WAIT;
|
|
|
END PROCESS;
|
|
|
|
|
|
END beh;
|
|
|
|