Skip to content
Snippets Groups Projects
Commit bddfbfa0 authored by David Gabriel Monk's avatar David Gabriel Monk
Browse files

Added localx histogram

parent 23e9d36e
No related branches found
No related tags found
1 merge request!34Add functionality for multiple module types in a single image
Pipeline #6175320 failed
......@@ -10,14 +10,18 @@
<node id="header_user_bits" address="0x1"/>
</node>
<node id="csr" address="0x30" description="MProcessor control and status" fwinfo="endpoint;width=3">
<node id="csr" address="0x30" description="MProcessor control and status" fwinfo="endpoint;width=4">
<node id="header_start_select" address="0x0" mask="0x7"/>
<node id="occupancy_windowL" address="0x1"/>
<node id="occupancy_windowH" address="0x2" mask="0x000f"/>
<node id="lff" address="0x4" mask="0x0001"/>
<node id="super_id" address="0x5"/>
<node id="occupancy_max_value" address="0x6"/>
<node id="localx_windowL" address="0x3"/>
<node id="localx_windowH" address="0x4" mask="0x000f"/>
<node id="lff" address="0x8" mask="0x0001"/>
<node id="super_id" address="0x9"/>
<node id="occupancy_max_value" address="0xa"/>
<node id="localx_max_value" address="0xb"/>
</node>
<node id="occupancy_mem" address="0x400" size="0x100" mode="incremental" fwinfo="endpoint;width=8"/>
<node id="tracking_localx_mem" address="0x1000" size="0x1000" mode="incremental" fwinfo="endpoint;width=12"/>
</node>
......@@ -24,6 +24,7 @@ entity LinkAggregatorIPBus is
links_out : out ldata(7 downto 0) := (others => LWORD_NULL);
uncompressed_stubs : out ldata(N_LINKS * 8 - 1 downto 0) := (others => LWORD_NULL);
readout_reset : out std_logic := '0';
tracking_stubs : out ldata(5 downto 0) := (others => LWORD_NULL);
--- IPBus Ports ---
ipb_clk : in std_logic;
ipb_rst : in std_logic;
......@@ -222,7 +223,8 @@ begin
-- status_bits => link_aggregator_status_registers(3)(15 downto 0),
non_empty_counts => mprocessor_monitoring_registers,
bx_valid_count_out => bx_valid_count,
debug_tracking_event_count => tracking_event_count
debug_tracking_event_count => tracking_event_count,
debug_tracking_stubs_out => tracking_stubs
);
rate_monitoring_registers(0) <= bx_valid_count(0);
......
......@@ -50,8 +50,8 @@ architecture Behavorial of MProcessor is
signal aggregated_stubs : ldata(7 downto 0) := (others => LWORD_NULL);
signal link_aggregator_input : ldata(N_LINKS - 1 downto 0) := (others => LWORD_NULL);
signal status_registers : ipb_reg_v(3 - 1 downto 0) := (others => (others => '0'));
signal control_registers : ipb_reg_v(3 - 1 downto 0) := (others => (others => '0'));
signal status_registers : ipb_reg_v(4 - 1 downto 0) := (others => (others => '0'));
signal control_registers : ipb_reg_v(5 - 1 downto 0) := (others => (others => '0'));
signal super_id : std_logic_vector(31 downto 0) := (others => '0');
......@@ -62,7 +62,11 @@ architecture Behavorial of MProcessor is
signal occupancy_histogram_reset : std_logic := '0';
signal debug_packet_size : lword := LWORD_NULL;
signal tracking_stubs : ldata(5 downto 0) := (others => LWORD_NULL);
signal localx_trigger_window_lower : std_logic_vector(31 downto 0) := (others => '0');
signal localx_trigger_window_upper : std_logic_vector(3 downto 0) := (others => '0');
signal localx_trigger_window : std_logic_vector(36 - 1 downto 0) := X"0ffffffff";
signal localx_max_value : std_logic_vector(32 - 1 downto 0) := (others => '0');
begin
......@@ -90,8 +94,8 @@ begin
MProcessorControlInstance: entity work.ipbus_ctrlreg_v
--==============================--
generic map(
N_CTRL => 3,
N_STAT => 3
N_CTRL => 5,
N_STAT => 4
)
port map(
clk => ipb_clk,
......@@ -111,17 +115,18 @@ begin
)
port map (
--- Input Ports ---
clk_p => clk_p,
packet_start => packet_start,
links_in => link_aggregator_input,
clk_p => clk_p,
packet_start => packet_start,
links_in => link_aggregator_input,
--- Output Ports ---
links_out => aggregated_stubs,
readout_reset => readout_reset,
links_out => aggregated_stubs,
readout_reset => readout_reset,
tracking_stubs => tracking_stubs,
--- IPBus Ports ---
ipb_clk => ipb_clk,
ipb_rst => ipb_rst,
ipb_in => ipb_to_slaves(N_SLV_LINK_AGGREGATOR),
ipb_out => ipb_from_slaves(N_SLV_LINK_AGGREGATOR)
ipb_clk => ipb_clk,
ipb_rst => ipb_rst,
ipb_in => ipb_to_slaves(N_SLV_LINK_AGGREGATOR),
ipb_out => ipb_from_slaves(N_SLV_LINK_AGGREGATOR)
);
--==============================--
......@@ -160,6 +165,24 @@ begin
-- stubs_in => aggregated_stubs(0)
-- );
--==============================--
TrackFinderInstance : entity work.TrackFinder
--==============================--
port map (
-- Input Ports --
clk_p => clk_p,
stubs_in => tracking_stubs,
header_start => packet_start,
localx_trigger_window => localx_trigger_window,
--- Output Ports ---
localx_max_value => localx_max_value,
--- IPBus Ports ---
clk => ipb_clk,
rst => ipb_rst,
ipb_in => ipb_to_slaves(N_SLV_TRACKING_LOCALX_MEM),
ipb_out => ipb_from_slaves(N_SLV_TRACKING_LOCALX_MEM)
);
link_aggregator_input(N_LINKS - 1 downto 0) <= links_in;
status_registers(0)(0) <= gbe_backpressure;
......@@ -204,8 +227,12 @@ begin
occupancy_trigger_window_lower <= control_registers(1);
occupancy_trigger_window_upper <= control_registers(2)(3 downto 0);
occupancy_trigger_window <= occupancy_trigger_window_upper & occupancy_trigger_window_lower;
localx_trigger_window_lower <= control_registers(3);
localx_trigger_window_upper <= control_registers(4)(3 downto 0);
localx_trigger_window <= localx_trigger_window_upper & localx_trigger_window_lower;
status_registers(2)(32 - 1 downto 0) <= occupancy_max_value;
status_registers(3)(32 - 1 downto 0) <= localx_max_value;
end Behavorial;
......@@ -31,7 +31,14 @@ entity TrackFinder is
port (
clk_p : in STD_LOGIC;
stubs_in : in ldata(5 downto 0) := (others => LWORD_NULL);
header_start : in std_logic
header_start : in std_logic;
localx_trigger_window : std_logic_vector(36 - 1 downto 0) := X"0ffffffff";
localx_max_value : std_logic_vector(32 - 1 downto 0) := (others => '0')
--- IPBus Ports ---
ipb_clk : in std_logic;
ipb_rst : in std_logic;
ipb_in : in ipb_wbus;
ipb_out : out ipb_rbus;
);
end TrackFinder;
......@@ -41,6 +48,9 @@ architecture Behavioral of TrackFinder is
signal valid_event_array : std_logic_vector(5 downto 0);
signal valid_event : std_logic := '0';
signal histogram_input : lword := LWORD_NULL;
signal localx_histogram_reset : std_logic := '0';
begin
genValidEventArray: for i in 0 to 5 generate
......@@ -59,7 +69,49 @@ begin
end if;
end loop;
end if;
valid_event <= and_reduce(valid_event_array) and headder_start;
if valid_event then
histogram_input.valid <= '1';
histogram_input.data(11 downto 0) <= std_logic_vector(to_unsigned(stub_array(0).localx, 12));
else
histogram_input <= LWORD_NULL;
end if;
end if;
end process pMain;
--==============================--
LocalXHistogramInstance : entity work.IPBusHistogram
--==============================--
generic map (
input_width => 12,
bin_width => 32,
data_offset => 0
)
port map (
--- Input Ports ---
clk_p => clk_p,
data_in => histogram_input,
histogram_reset => localx_histogram_reset,
--- Output Ports ---
max_bin_value => localx_max_value,
--- IPBus Ports ---
clk => ipb_clk,
rst => ipb_rst,
ipb_in => ipb_in,
ipb_out => ipb_out
);
--==============================--
LocalXHistogramResetter : entity work.HistogramResetter
--==============================--
port map (
--- Input Ports ---
clk_p => clk_p,
trigger_window => localx_trigger_window,
--- Output Ports ---
histogram_reset => localx_histogram_reset
);
end Behavioral;
......@@ -13,7 +13,7 @@
<node id="link_monitor" address="0x10000" module="file://LinkMonitorInterface.xml"/>
<node id="mprocessor" address="0x40000" description="MProcessor control and status" module="file://mprocessor.xml" fwinfo="endpoint;width=12"/>
<node id="mprocessor" address="0x40000" description="MProcessor control and status" module="file://mprocessor.xml" fwinfo="endpoint;width=13"/>
<node id="mproc_ctrl" address="0x4fff0" description="MProcessor channel control" fwinfo="endpoint;width=1">
<node id="control" address="0x0">
<node id="chan_sel" mask="0x7f"/>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment