##// END OF EJS Templates
Activated F2 and F3 IIR Filters for LFR_FILTERS tests....
Activated F2 and F3 IIR Filters for LFR_FILTERS tests. Improved Makefiles for LFR_FILTERS tests.

File last commit:

r617:7ac14cef3eb0 simu_with_Leon3
r654:d239e3167642 default
Show More
lfr_time_management.vhd
160 lines | 5.2 KiB | text/x-vhdl | VhdlLexer
----------------------------------------------------------------------------------
-- Company:
-- Engineer:
--
-- Create Date: 11:14:05 07/02/2012
-- Design Name:
-- Module Name: lfr_time_management - Behavioral
-- Project Name:
-- Target Devices:
-- Tool versions:
-- Description:
--
-- Dependencies:
--
-- Revision:
-- Revision 0.01 - File Created
-- Additional Comments:
--
----------------------------------------------------------------------------------
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;
LIBRARY lpp;
USE lpp.lpp_lfr_management.ALL;
ENTITY lfr_time_management IS
GENERIC (
NB_SECOND_DESYNC : INTEGER := 60);
PORT (
clk : IN STD_LOGIC;
rstn : IN STD_LOGIC;
tick : IN STD_LOGIC; -- transition signal information
new_coarsetime : IN STD_LOGIC; -- transition signal information
coarsetime_reg : IN STD_LOGIC_VECTOR(30 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);
coarse_time_new : OUT STD_LOGIC
);
END lfr_time_management;
ARCHITECTURE Behavioral OF lfr_time_management IS
SIGNAL FT_max : STD_LOGIC;
SIGNAL FT_half : STD_LOGIC;
SIGNAL FT_wait : STD_LOGIC;
TYPE state_fsm_time_management IS (DESYNC, TRANSITION, SYNC);
SIGNAL state : state_fsm_time_management;
SIGNAL fsm_desync : STD_LOGIC;
SIGNAL fsm_transition : STD_LOGIC;
SIGNAL set_TCU : STD_LOGIC;
SIGNAL CT_add1 : STD_LOGIC;
SIGNAL new_coarsetime_reg : STD_LOGIC;
BEGIN
-----------------------------------------------------------------------------
--
-----------------------------------------------------------------------------
PROCESS (clk, rstn)
BEGIN -- PROCESS
IF rstn = '0' THEN -- asynchronous reset (active low)
new_coarsetime_reg <= '0';
ELSIF clk'event AND clk = '1' THEN -- rising clock edge
IF new_coarsetime = '1' THEN
new_coarsetime_reg <= '1';
ELSIF tick = '1' THEN
new_coarsetime_reg <= '0';
END IF;
END IF;
END PROCESS;
-----------------------------------------------------------------------------
-- FINE_TIME
-----------------------------------------------------------------------------
fine_time_counter_1: fine_time_counter
GENERIC MAP (
WAITING_TIME => X"0040")
PORT MAP (
clk => clk,
rstn => rstn,
tick => tick,
fsm_transition => fsm_transition, -- todo
FT_max => FT_max,
FT_half => FT_half,
FT_wait => FT_wait,
fine_time => fine_time,
fine_time_new => fine_time_new);
-----------------------------------------------------------------------------
-- COARSE_TIME
-----------------------------------------------------------------------------
coarse_time_counter_1: coarse_time_counter
GENERIC MAP(
NB_SECOND_DESYNC => NB_SECOND_DESYNC )
PORT MAP (
clk => clk,
rstn => rstn,
tick => tick,
set_TCU => set_TCU, -- todo
new_TCU => new_coarsetime_reg,
set_TCU_value => coarsetime_reg, -- todo
CT_add1 => CT_add1, -- todo
fsm_desync => fsm_desync, -- todo
FT_max => FT_max,
coarse_time => coarse_time,
coarse_time_new => coarse_time_new);
-----------------------------------------------------------------------------
-- FSM
-----------------------------------------------------------------------------
fsm_desync <= '1' WHEN state = DESYNC ELSE '0';
fsm_transition <= '1' WHEN state = TRANSITION ELSE '0';
PROCESS (clk, rstn)
BEGIN -- PROCESS
IF rstn = '0' THEN -- asynchronous reset (active low)
state <= DESYNC;
set_TCU <= '0';
ELSIF clk'event AND clk = '1' THEN -- rising clock edge
set_TCU <= '0';
CASE state IS
WHEN DESYNC =>
IF tick = '1' THEN
state <= SYNC;
set_TCU <= new_coarsetime_reg;
END IF;
WHEN TRANSITION =>
IF tick = '1' THEN
state <= SYNC;
set_TCU <= new_coarsetime_reg;
ELSIF FT_wait = '1' THEN
state <= DESYNC;
END IF;
WHEN SYNC =>
IF tick = '1' THEN
set_TCU <= new_coarsetime_reg;
ELSIF FT_max = '1' THEN
state <= TRANSITION;
END IF;
WHEN OTHERS => NULL;
END CASE;
END IF;
END PROCESS;
CT_add1 <= '1' WHEN state = SYNC AND tick = '1' AND new_coarsetime_reg = '0' ELSE
'1' WHEN state = DESYNC AND tick = '1' AND new_coarsetime_reg = '0' AND FT_half = '1' ELSE
'1' WHEN state = DESYNC AND tick = '0' AND FT_max = '1' ELSE
'1' WHEN state = TRANSITION AND tick = '1' AND new_coarsetime_reg = '0' ELSE
'1' WHEN state = TRANSITION AND tick = '0' AND FT_wait = '1' ELSE
'0';
END Behavioral;