|
|
LIBRARY IEEE;
|
|
|
USE IEEE.STD_LOGIC_1164.ALL;
|
|
|
USE ieee.numeric_std.ALL;
|
|
|
|
|
|
ENTITY lpp_waveform_snapshot_controler IS
|
|
|
|
|
|
GENERIC (
|
|
|
delta_snapshot_size : INTEGER := 16;
|
|
|
delta_f2_f0_size : INTEGER := 10;
|
|
|
delta_f2_f1_size : INTEGER := 10);
|
|
|
|
|
|
PORT (
|
|
|
clk : IN STD_LOGIC;
|
|
|
rstn : IN STD_LOGIC;
|
|
|
--config
|
|
|
delta_snapshot : IN STD_LOGIC_VECTOR(delta_snapshot_size-1 DOWNTO 0);
|
|
|
delta_f2_f1 : IN STD_LOGIC_VECTOR(delta_f2_f1_size-1 DOWNTO 0);
|
|
|
delta_f2_f0 : IN STD_LOGIC_VECTOR(delta_f2_f0_size-1 DOWNTO 0);
|
|
|
|
|
|
--input
|
|
|
coarse_time_0 : IN STD_LOGIC;
|
|
|
data_f0_in_valid : IN STD_LOGIC;
|
|
|
data_f2_in_valid : IN STD_LOGIC;
|
|
|
--output
|
|
|
start_snapshot_f0 : OUT STD_LOGIC;
|
|
|
start_snapshot_f1 : OUT STD_LOGIC;
|
|
|
start_snapshot_f2 : OUT STD_LOGIC
|
|
|
);
|
|
|
|
|
|
END lpp_waveform_snapshot_controler;
|
|
|
|
|
|
ARCHITECTURE beh OF lpp_waveform_snapshot_controler IS
|
|
|
SIGNAL counter_delta_snapshot : INTEGER;
|
|
|
SIGNAL counter_delta_f0 : INTEGER;
|
|
|
|
|
|
SIGNAL coarse_time_0_r : STD_LOGIC;
|
|
|
SIGNAL start_snapshot_f2_temp : STD_LOGIC;
|
|
|
SIGNAL start_snapshot_fothers_temp : STD_LOGIC;
|
|
|
BEGIN -- beh
|
|
|
|
|
|
PROCESS (clk, rstn)
|
|
|
BEGIN
|
|
|
IF rstn = '0' THEN
|
|
|
start_snapshot_f0 <= '0';
|
|
|
start_snapshot_f1 <= '0';
|
|
|
start_snapshot_f2 <= '0';
|
|
|
counter_delta_snapshot <= 0;
|
|
|
counter_delta_f0 <= 0;
|
|
|
coarse_time_0_r <= '0';
|
|
|
start_snapshot_f2_temp <= '0';
|
|
|
start_snapshot_fothers_temp <= '0';
|
|
|
ELSIF clk'EVENT AND clk = '1' THEN
|
|
|
IF counter_delta_snapshot = UNSIGNED(delta_snapshot) THEN
|
|
|
start_snapshot_f2_temp <= '1';
|
|
|
ELSE
|
|
|
start_snapshot_f2_temp <= '0';
|
|
|
END IF;
|
|
|
-------------------------------------------------------------------------
|
|
|
IF counter_delta_snapshot = UNSIGNED(delta_snapshot) AND start_snapshot_f2_temp = '0' THEN
|
|
|
start_snapshot_f2 <= '1';
|
|
|
ELSE
|
|
|
start_snapshot_f2 <= '0';
|
|
|
END IF;
|
|
|
-------------------------------------------------------------------------
|
|
|
coarse_time_0_r <= coarse_time_0;
|
|
|
IF coarse_time_0 = NOT coarse_time_0_r THEN --AND coarse_time_0 = '1' THEN
|
|
|
IF counter_delta_snapshot = 0 THEN
|
|
|
counter_delta_snapshot <= to_integer(UNSIGNED(delta_snapshot));
|
|
|
ELSE
|
|
|
counter_delta_snapshot <= counter_delta_snapshot - 1;
|
|
|
END IF;
|
|
|
END IF;
|
|
|
|
|
|
|
|
|
-------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
IF counter_delta_f0 = UNSIGNED(delta_f2_f1) THEN
|
|
|
start_snapshot_f1 <= '1';
|
|
|
ELSE
|
|
|
start_snapshot_f1 <= '0';
|
|
|
END IF;
|
|
|
|
|
|
IF counter_delta_f0 = 1 THEN --UNSIGNED(delta_f2_f0) THEN
|
|
|
start_snapshot_f0 <= '1';
|
|
|
ELSE
|
|
|
start_snapshot_f0 <= '0';
|
|
|
END IF;
|
|
|
|
|
|
IF counter_delta_snapshot = UNSIGNED(delta_snapshot)
|
|
|
AND start_snapshot_f2_temp = '0'
|
|
|
THEN --
|
|
|
start_snapshot_fothers_temp <= '1';
|
|
|
ELSIF counter_delta_f0 > 0 THEN
|
|
|
start_snapshot_fothers_temp <= '0';
|
|
|
END IF;
|
|
|
|
|
|
|
|
|
-------------------------------------------------------------------------
|
|
|
IF (start_snapshot_fothers_temp = '1' OR (counter_delta_snapshot = UNSIGNED(delta_snapshot) AND start_snapshot_f2_temp = '0')) AND data_f2_in_valid = '1' THEN
|
|
|
--counter_delta_snapshot = UNSIGNED(delta_snapshot) AND start_snapshot_f2_temp = '0' THEN --
|
|
|
--counter_delta_snapshot = UNSIGNED(delta_snapshot) THEN
|
|
|
counter_delta_f0 <= to_integer(UNSIGNED(delta_f2_f0)); --0;
|
|
|
ELSE
|
|
|
IF (( counter_delta_f0 > 0 ) AND ( data_f0_in_valid = '1' )) THEN --<= UNSIGNED(delta_f2_f0) THEN
|
|
|
counter_delta_f0 <= counter_delta_f0 - 1;--counter_delta_f0 + 1;
|
|
|
END IF;
|
|
|
END IF;
|
|
|
-------------------------------------------------------------------------
|
|
|
END IF;
|
|
|
END PROCESS;
|
|
|
|
|
|
END beh;
|