diff --git a/lib/lpp/lfr_time_management/apb_lfr_time_management.vhd b/lib/lpp/lfr_time_management/apb_lfr_time_management.vhd --- a/lib/lpp/lfr_time_management/apb_lfr_time_management.vhd +++ b/lib/lpp/lfr_time_management/apb_lfr_time_management.vhd @@ -266,11 +266,11 @@ BEGIN tick => new_timecode, new_coarsetime => new_coarsetime, - coarsetime_reg => coarsetime_reg(30 DOWNTO 0), + coarsetime_reg => coarsetime_reg(31 DOWNTO 0), fine_time => fine_time_49, fine_time_new => fine_time_new_49, coarse_time => coarse_time_49, coarse_time_new => coarse_time_new_49); -END Behavioral; \ No newline at end of file +END Behavioral; diff --git a/lib/lpp/lfr_time_management/coarse_time_counter.vhd b/lib/lpp/lfr_time_management/coarse_time_counter.vhd --- a/lib/lpp/lfr_time_management/coarse_time_counter.vhd +++ b/lib/lpp/lfr_time_management/coarse_time_counter.vhd @@ -15,7 +15,7 @@ ENTITY coarse_time_counter IS tick : IN STD_LOGIC; set_TCU : IN STD_LOGIC; - set_TCU_value : IN STD_LOGIC_VECTOR(30 DOWNTO 0); + set_TCU_value : IN STD_LOGIC_VECTOR(31 DOWNTO 0); CT_add1 : IN STD_LOGIC; fsm_desync : IN STD_LOGIC; FT_max : IN STD_LOGIC; @@ -34,6 +34,9 @@ ARCHITECTURE beh OF coarse_time_counter SIGNAL coarse_time_new_counter : STD_LOGIC; SIGNAL coarse_time_31 : STD_LOGIC; SIGNAL coarse_time_31_reg : STD_LOGIC; + + SIGNAL set_synchronized : STD_LOGIC; + SIGNAL set_synchronized_value : STD_LOGIC_VECTOR(5 DOWNTO 0); --CONSTANT NB_SECOND_DESYNC : INTEGER := 4; -- TODO : 60 BEGIN -- beh @@ -48,12 +51,17 @@ BEGIN -- beh RST_VALUE => (OTHERS => '0'), MAX_VALUE => "111" & X"FFFFFFF" , set => set_TCU, - set_value => set_TCU_value, + set_value => set_TCU_value(30 DOWNTO 0), add1 => CT_add1, counter => coarse_time(30 DOWNTO 0)); add1_bit31 <= '1' WHEN fsm_desync = '1' AND FT_max = '1' ELSE '0'; + + + set_synchronized <= (tick AND (NOT coarse_time_31)) OR (coarse_time_31 AND set_TCU); + set_synchronized_value <= STD_LOGIC_VECTOR(to_unsigned(NB_SECOND_DESYNC, 6)) WHEN (set_TCU AND set_TCU_value(31)) = '1' ELSE + (OTHERS => '0'); counter_2 : general_counter GENERIC MAP ( @@ -64,8 +72,8 @@ BEGIN -- beh rstn => rstn, RST_VALUE => STD_LOGIC_VECTOR(to_unsigned(NB_SECOND_DESYNC, 6)), MAX_VALUE => STD_LOGIC_VECTOR(to_unsigned(NB_SECOND_DESYNC, 6)), - set => tick, - set_value => (OTHERS => '0'), + set => set_synchronized, + set_value => set_synchronized_value, add1 => add1_bit31, counter => nb_second_counter); diff --git a/lib/lpp/lfr_time_management/lfr_time_management.vhd b/lib/lpp/lfr_time_management/lfr_time_management.vhd --- a/lib/lpp/lfr_time_management/lfr_time_management.vhd +++ b/lib/lpp/lfr_time_management/lfr_time_management.vhd @@ -34,7 +34,7 @@ ENTITY lfr_time_management IS tick : IN STD_LOGIC; -- transition signal information new_coarsetime : IN STD_LOGIC; -- transition signal information - coarsetime_reg : IN STD_LOGIC_VECTOR(30 DOWNTO 0); + coarsetime_reg : IN STD_LOGIC_VECTOR(31 DOWNTO 0); fine_time : OUT STD_LOGIC_VECTOR(15 DOWNTO 0); fine_time_new : OUT STD_LOGIC; diff --git a/lib/lpp/lfr_time_management/lpp_lfr_time_management.vhd b/lib/lpp/lfr_time_management/lpp_lfr_time_management.vhd --- a/lib/lpp/lfr_time_management/lpp_lfr_time_management.vhd +++ b/lib/lpp/lfr_time_management/lpp_lfr_time_management.vhd @@ -57,7 +57,7 @@ PACKAGE lpp_lfr_time_management IS rstn : IN STD_LOGIC; tick : IN STD_LOGIC; new_coarsetime : IN STD_LOGIC; - coarsetime_reg : IN STD_LOGIC_VECTOR(30 DOWNTO 0); + coarsetime_reg : IN STD_LOGIC_VECTOR(31 DOWNTO 0); fine_time : OUT STD_LOGIC_VECTOR(15 DOWNTO 0); fine_time_new : OUT STD_LOGIC; coarse_time : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); @@ -72,7 +72,7 @@ PACKAGE lpp_lfr_time_management IS rstn : IN STD_LOGIC; tick : IN STD_LOGIC; set_TCU : IN STD_LOGIC; - set_TCU_value : IN STD_LOGIC_VECTOR(30 DOWNTO 0); + set_TCU_value : IN STD_LOGIC_VECTOR(31 DOWNTO 0); CT_add1 : IN STD_LOGIC; fsm_desync : IN STD_LOGIC; FT_max : IN STD_LOGIC;