data_write.vhd
77 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_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; | ||||