lpp_waveform_snapshot_controler.vhd
113 lines
| 4.0 KiB
| text/x-vhdl
|
VhdlLexer
pellion
|
r183 | 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; | |||
paul
|
r184 | IF coarse_time_0 = NOT coarse_time_0_r THEN --AND coarse_time_0 = '1' THEN | |
pellion
|
r183 | 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; |