Commit 77bd4c90 authored by Dimitris Lampridis's avatar Dimitris Lampridis

hdl: make sure that no triggers are forwarded if there is no ongoing acquisition

parent 89f33dc3
...@@ -82,8 +82,6 @@ entity fmc_adc_100Ms_core is ...@@ -82,8 +82,6 @@ entity fmc_adc_100Ms_core is
wr_tm_time_valid_i : in std_logic; wr_tm_time_valid_i : in std_logic;
wr_enable_i : in std_logic; wr_enable_i : in std_logic;
current_time_i : in t_timetag;
-- FMC interface -- FMC interface
ext_trigger_p_i : in std_logic; -- External trigger ext_trigger_p_i : in std_logic; -- External trigger
ext_trigger_n_i : in std_logic; ext_trigger_n_i : in std_logic;
...@@ -1743,8 +1741,8 @@ begin ...@@ -1743,8 +1741,8 @@ begin
b_trigout : block b_trigout : block
subtype t_trigout_channels is std_logic_vector(4 downto 0); subtype t_trigout_channels is std_logic_vector(4 downto 0);
signal trigout_fs_triggers, trigout_triggers : t_trigout_channels; signal trigout_triggers : t_trigout_channels;
signal trigout_en : t_trigout_channels; signal trigout_en : t_trigout_channels;
signal trigout_trig : std_logic; signal trigout_trig : std_logic;
...@@ -1753,58 +1751,42 @@ begin ...@@ -1753,58 +1751,42 @@ begin
subtype t_trigout_data_channels is std_logic_vector(72 downto 68); subtype t_trigout_data_channels is std_logic_vector(72 downto 68);
subtype t_trigout_data is std_logic_vector(72 downto 0); subtype t_trigout_data is std_logic_vector(72 downto 0);
signal trigout_fifo_dout : t_trigout_data; signal trigout_fifo_dout : t_trigout_data;
signal trigout_fifo_din : t_trigout_data; signal trigout_fifo_din : t_trigout_data;
signal trigout_fifo_empty : std_logic; signal trigout_fifo_empty : std_logic;
signal trigout_fifo_full : std_logic; signal trigout_fifo_full : std_logic;
signal trigout_fifo_wr : std_logic; signal trigout_fifo_wr : std_logic;
signal trigout_fifo_not_empty : std_logic; signal trigout_fifo_not_empty : std_logic;
signal trigout_fifo_rd_rq : std_logic; signal trigout_fifo_rd_rq : std_logic;
signal trigout_fifo_rd : std_logic; signal trigout_fifo_rd : std_logic;
begin begin
cmp_alt_trigout : entity work.alt_trigout cmp_alt_trigout : entity work.alt_trigout
port map ( port map (
rst_n_i => sys_rst_n_i, rst_n_i => sys_rst_n_i,
clk_i => sys_clk_i, clk_i => sys_clk_i,
wb_i => wb_trigout_slave_i, wb_i => wb_trigout_slave_i,
wb_o => wb_trigout_slave_o, wb_o => wb_trigout_slave_o,
wr_enable_i => wr_enable_i,
wr_enable_i => wr_enable_i, wr_link_i => wr_tm_link_up_i,
wr_link_i => wr_tm_link_up_i, wr_valid_i => wr_tm_time_valid_i,
wr_valid_i => wr_tm_time_valid_i, ts_present_i => trigout_fifo_not_empty,
ts_sec_i => trigout_fifo_dout(t_trigout_data_seconds'range),
ts_present_i => trigout_fifo_not_empty, ch1_mask_i => trigout_fifo_dout(t_trigout_data_channels'RIGHT + 0),
ts_sec_i => trigout_fifo_dout(t_trigout_data_seconds'range), ch2_mask_i => trigout_fifo_dout(t_trigout_data_channels'RIGHT + 1),
ch1_mask_i => trigout_fifo_dout(t_trigout_data_channels'right + 0), ch3_mask_i => trigout_fifo_dout(t_trigout_data_channels'RIGHT + 2),
ch2_mask_i => trigout_fifo_dout(t_trigout_data_channels'right + 1), ch4_mask_i => trigout_fifo_dout(t_trigout_data_channels'RIGHT + 3),
ch3_mask_i => trigout_fifo_dout(t_trigout_data_channels'right + 2), ext_mask_i => trigout_fifo_dout(t_trigout_data_channels'RIGHT + 4),
ch4_mask_i => trigout_fifo_dout(t_trigout_data_channels'right + 3), cycles_i => trigout_fifo_dout(t_trigout_data_coarse'range),
ext_mask_i => trigout_fifo_dout(t_trigout_data_channels'right + 4), ts_cycles_rd_o => trigout_fifo_rd_rq);
cycles_i => trigout_fifo_dout(t_trigout_data_coarse'range),
ts_cycles_rd_o => trigout_fifo_rd_rq
);
trigout_fifo_rd <= trigout_fifo_rd_rq and not trigout_fifo_empty; trigout_fifo_rd <= trigout_fifo_rd_rq and not trigout_fifo_empty;
-- Triggers (from fs_clk domain). trigout_triggers(0) <= trig_storage(8);
trigout_fs_triggers <= trigout_triggers(1) <= trig_storage(9);
(0 => int_trig_d(1), trigout_triggers(2) <= trig_storage(10);
1 => int_trig_d(2), trigout_triggers(3) <= trig_storage(11);
2 => int_trig_d(3), trigout_triggers(4) <= trig_storage(0);
3 => int_trig_d(4),
4 => ext_trig_fixed_delay(ext_trig_fixed_delay'HIGH));
gen_trigout_sync : for i in trigout_triggers'range generate
cmp_trigout_sync : gc_sync_ffs
port map (
clk_i => sys_clk_i,
rst_n_i => '1',
data_i => trigout_fs_triggers(i),
synced_o => open,
npulse_o => open,
ppulse_o => trigout_triggers(i));
end generate;
trigout_en(0) <= csr_regout.trig_en_fwd_ch1_o; trigout_en(0) <= csr_regout.trig_en_fwd_ch1_o;
trigout_en(1) <= csr_regout.trig_en_fwd_ch2_o; trigout_en(1) <= csr_regout.trig_en_fwd_ch2_o;
...@@ -1814,7 +1796,7 @@ begin ...@@ -1814,7 +1796,7 @@ begin
trigout_trig <= f_reduce_or (trigout_triggers and trigout_en); trigout_trig <= f_reduce_or (trigout_triggers and trigout_en);
trigout_fifo_wr <= trigout_trig and not trigout_fifo_full; trigout_fifo_wr <= trigout_trig and not trigout_fifo_full and trig_tag_done;
cmp_trigout_fifo : generic_sync_fifo cmp_trigout_fifo : generic_sync_fifo
generic map ( generic map (
...@@ -1845,8 +1827,8 @@ begin ...@@ -1845,8 +1827,8 @@ begin
trigout_fifo_not_empty <= not trigout_fifo_empty; trigout_fifo_not_empty <= not trigout_fifo_empty;
trigout_fifo_din(t_trigout_data_seconds'range) <= current_time_i.seconds; trigout_fifo_din(t_trigout_data_seconds'range) <= trigger_tag_i.seconds;
trigout_fifo_din(t_trigout_data_coarse'range) <= current_time_i.coarse; trigout_fifo_din(t_trigout_data_coarse'range) <= trigger_tag_i.coarse;
trigout_fifo_din(t_trigout_data_channels'range) <= trigout_triggers; trigout_fifo_din(t_trigout_data_channels'range) <= trigout_triggers;
end block b_trigout; end block b_trigout;
end rtl; end rtl;
...@@ -91,8 +91,6 @@ package fmc_adc_100Ms_core_pkg is ...@@ -91,8 +91,6 @@ package fmc_adc_100Ms_core_pkg is
wr_tm_time_valid_i : in std_logic; wr_tm_time_valid_i : in std_logic;
wr_enable_i : in std_logic; wr_enable_i : in std_logic;
current_time_i : in t_timetag;
-- FMC interface -- FMC interface
ext_trigger_p_i : in std_logic; -- External trigger ext_trigger_p_i : in std_logic; -- External trigger
ext_trigger_n_i : in std_logic; ext_trigger_n_i : in std_logic;
......
...@@ -261,8 +261,6 @@ architecture rtl of fmc_adc_mezzanine is ...@@ -261,8 +261,6 @@ architecture rtl of fmc_adc_mezzanine is
signal trigger_tag : t_timetag; signal trigger_tag : t_timetag;
signal time_trigger : std_logic; signal time_trigger : std_logic;
signal current_time : t_timetag;
-- Alternative time trigger -- Alternative time trigger
signal alt_trigin_enable_in : std_logic; signal alt_trigin_enable_in : std_logic;
signal alt_trigin_enable_out : std_logic; signal alt_trigin_enable_out : std_logic;
...@@ -475,8 +473,6 @@ begin ...@@ -475,8 +473,6 @@ begin
wr_tm_time_valid_i => wr_tm_time_valid_i, wr_tm_time_valid_i => wr_tm_time_valid_i,
wr_enable_i => wr_enable_i, wr_enable_i => wr_enable_i,
current_time_i => current_time,
ext_trigger_p_i => ext_trigger_p_i, ext_trigger_p_i => ext_trigger_p_i,
ext_trigger_n_i => ext_trigger_n_i, ext_trigger_n_i => ext_trigger_n_i,
...@@ -609,8 +605,6 @@ begin ...@@ -609,8 +605,6 @@ begin
alt_trigin_tag_i => alt_trigin_tag, alt_trigin_tag_i => alt_trigin_tag,
alt_trigin_o => alt_time_trigger, alt_trigin_o => alt_time_trigger,
current_time_o => current_time,
wb_adr_i => cnx_slave_in(c_WB_SLAVE_TIMETAG).adr(6 downto 2), -- cnx_slave_in.adr is byte address wb_adr_i => cnx_slave_in(c_WB_SLAVE_TIMETAG).adr(6 downto 2), -- cnx_slave_in.adr is byte address
wb_dat_i => cnx_slave_in(c_WB_SLAVE_TIMETAG).dat, wb_dat_i => cnx_slave_in(c_WB_SLAVE_TIMETAG).dat,
wb_dat_o => cnx_slave_out(c_WB_SLAVE_TIMETAG).dat, wb_dat_o => cnx_slave_out(c_WB_SLAVE_TIMETAG).dat,
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
-- : Dimitrios Lampridis <dimitrios.lampridis@cern.ch> -- : Dimitrios Lampridis <dimitrios.lampridis@cern.ch>
-- Company : CERN (BE-CO-HT) -- Company : CERN (BE-CO-HT)
-- Created : 2011-11-18 -- Created : 2011-11-18
-- Last update: 2018-11-06 -- Last update: 2019-05-02
-- Standard : VHDL'93/02 -- Standard : VHDL'93/02
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
-- Description: Implements a UTC seconds counter and a 125MHz system clock -- Description: Implements a UTC seconds counter and a 125MHz system clock
...@@ -70,8 +70,6 @@ entity timetag_core is ...@@ -70,8 +70,6 @@ entity timetag_core is
alt_trigin_tag_i : in t_timetag; alt_trigin_tag_i : in t_timetag;
alt_trigin_o : out std_logic; alt_trigin_o : out std_logic;
current_time_o : out t_timetag;
-- Wishbone interface -- Wishbone interface
wb_adr_i : in std_logic_vector(4 downto 0); wb_adr_i : in std_logic_vector(4 downto 0);
wb_dat_i : in std_logic_vector(31 downto 0); wb_dat_i : in std_logic_vector(31 downto 0);
...@@ -222,8 +220,6 @@ begin ...@@ -222,8 +220,6 @@ begin
current_time.coarse <= wr_tm_cycles_i when wr_enabled = '1' else time_counter.coarse; current_time.coarse <= wr_tm_cycles_i when wr_enabled = '1' else time_counter.coarse;
current_time_o <= current_time;
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
-- Time trigger signal generation (stretched to two 125MHz cycles) -- Time trigger signal generation (stretched to two 125MHz cycles)
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment