|
|
|
|
|
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_read_with_timer IS
|
|
|
GENERIC (
|
|
|
input_file_name : STRING := "input_data_2.txt";
|
|
|
NB_CHAR_PER_DATA : INTEGER := 4;
|
|
|
NB_CYCLE_TIMER : INTEGER := 1024
|
|
|
);
|
|
|
PORT (
|
|
|
clk : IN STD_LOGIC;
|
|
|
rstn : IN STD_LOGIC;
|
|
|
|
|
|
end_of_file : OUT STD_LOGIC;
|
|
|
|
|
|
data_out_val : OUT STD_LOGIC;
|
|
|
data_out : OUT STD_LOGIC_VECTOR(NB_CHAR_PER_DATA * 4 - 1 DOWNTO 0)
|
|
|
);
|
|
|
END;
|
|
|
|
|
|
ARCHITECTURE beh OF data_read_with_timer IS
|
|
|
|
|
|
COMPONENT data_read
|
|
|
GENERIC (
|
|
|
input_file_name : STRING;
|
|
|
NB_CHAR_PER_DATA : INTEGER);
|
|
|
PORT (
|
|
|
clk : IN STD_LOGIC;
|
|
|
read_new_data : IN STD_LOGIC;
|
|
|
end_of_file : OUT STD_LOGIC;
|
|
|
data_out_val : OUT STD_LOGIC;
|
|
|
data_out : OUT STD_LOGIC_VECTOR(NB_CHAR_PER_DATA * 4 - 1 DOWNTO 0));
|
|
|
END COMPONENT;
|
|
|
|
|
|
SIGNAL nb_cycle_counter : INTEGER;
|
|
|
SIGNAL read_new_data : STD_LOGIC;
|
|
|
|
|
|
BEGIN -- beh
|
|
|
|
|
|
PROCESS (clk, rstn)
|
|
|
BEGIN -- PROCESS
|
|
|
IF rstn = '0' THEN -- asynchronous reset (active low)
|
|
|
nb_cycle_counter <= 0;
|
|
|
read_new_data <= '0';
|
|
|
ELSIF clk'event AND clk = '1' THEN -- rising clock edge
|
|
|
IF nb_cycle_counter < NB_CYCLE_TIMER-1 THEN
|
|
|
nb_cycle_counter <= nb_cycle_counter + 1;
|
|
|
read_new_data <= '0';
|
|
|
ELSE
|
|
|
nb_cycle_counter <= 0;
|
|
|
read_new_data <= '1';
|
|
|
END IF;
|
|
|
END IF;
|
|
|
END PROCESS;
|
|
|
|
|
|
|
|
|
data_read_1: data_read
|
|
|
GENERIC MAP (
|
|
|
input_file_name => input_file_name,
|
|
|
NB_CHAR_PER_DATA => NB_CHAR_PER_DATA)
|
|
|
PORT MAP (
|
|
|
clk => clk,
|
|
|
read_new_data => read_new_data,
|
|
|
end_of_file => end_of_file,
|
|
|
data_out_val => data_out_val,
|
|
|
data_out => data_out);
|
|
|
|
|
|
END beh;
|
|
|
|