10 use IEEE.STD_LOGIC_1164.
all;
11 use IEEE.NUMERIC_STD.
all;
14 use work.ipbus_decode_efex_sorting.
all;
20 use ipbus_lib.ipbus_reg_types.
all;
22 use ipbus_lib.ipbus.
all;
24 library infrastructure_lib;
28 generic (USE_INPUT_RAM : boolean;
29 USE_OUTPUT_RAM : boolean);
30 port (CLK : in std_logic;
34 IN_BCN : in std_logic_vector(11 downto 0);
35 IN_Sync : in std_logic;
38 ipb_clk : in std_logic;
39 ipb_rst : in std_logic;
41 ipb_out : out ipb_rbus;
44 OUT_BCN : out std_logic_vector(11 downto 0);
45 OUT_eg_Sync : out std_logic;
46 OUT_eg_Valid : out std_logic;
49 OUT_tau_Sync : out std_logic;
50 OUT_tau_Valid : out std_logic;
57 constant N_CTRL : positive := 4;
58 constant N_STAT : positive := 4;
63 signal ipb_to_slaves : ipb_wbus_array(N_SLAVES - 1 downto 0);
64 signal ipb_from_slaves : ipb_rbus_array(N_SLAVES - 1 downto 0) := (others => IPB_RBUS_NULL);
66 signal write_reg : ipb_reg_v(N_STAT - 1 downto 0) := (others => (others => '0'));
67 signal read_reg : ipb_reg_v(N_CTRL - 1 downto 0);
70 signal regControl_eg : AlgoRegister;
71 signal regStatus_eg : AlgoRegister;
73 signal regControl_tau : AlgoRegister;
74 signal regStatus_tau : AlgoRegister;
78 signal regDebug : AlgoRegisters(3 downto 0);
80 signal AlgoStart : std_logic;
84 signal SortStart_eg : std_logic;
85 signal SortWrite_eg : std_logic;
90 signal SortStart_tau : std_logic;
91 signal SortWrite_tau : std_logic;
97 signal InputRAMOut_eg, InputRAMOut_tau : AlgoOutput;
98 signal FakeInputEnable_eg, FakeInputEnable_tau : std_logic := '0';
99 signal SpyInputEnable_eg, SpyInputEnable_tau : std_logic := '0';
102 signal FakeOutputEnable_eg, FakeOutputEnable_tau : std_logic := '0';
103 signal SpyOutputEnable_eg, SpyOutputEnable_tau : std_logic := '0';
104 signal SpyBCN_eg, SpyBCN_tau : std_logic := '0';
105 signal SpyBCN_out_eg, SpyBCN_out_tau : std_logic := '0';
106 signal BCN_int : std_logic_vector(11 downto 0);
110 IPBUS_FABRIC :
entity ipbus_lib.ipbus_fabric_sel
113 SEL_WIDTH => IPBUS_SEL_WIDTH
)
115 sel => ipbus_sel_efex_sorting
(ipb_in.ipb_addr
),
119 ipb_to_slaves => ipb_to_slaves,
120 ipb_from_slaves => ipb_from_slaves
);
122 IPBUS_SORTING_REGISTERS :
entity ipbus_lib.ipbus_ctrlreg_v
129 ipbus_in => ipb_to_slaves
(N_SLV_SORTING_REGISTERS
),
130 ipbus_out => ipb_from_slaves
(N_SLV_SORTING_REGISTERS
),
143 SortingData_eg <= to_AlgoTriggerObjects(IN_eg_Data);
146 AlgoData_eg <= to_AlgoTriggerObjects(InputRAMOut_eg) when FakeInputEnable_eg = '1' else SortingData_eg;
148 EG_IN_IF: if USE_INPUT_RAM generate
153 ipb_in => ipb_to_slaves
(N_SLV_SORTING_INPUT_RAM_EG
),
154 ipb_out => ipb_from_slaves
(N_SLV_SORTING_INPUT_RAM_EG
),
156 SortingIn => IN_eg_Data,
158 SpyBCNIN => SpyBCN_eg,
161 we => SpyInputEnable_eg,
162 SortingOut => InputRAMOut_eg
);
165 ipb_from_slaves(N_SLV_SORTING_INPUT_RAM_EG) <= IPB_RBUS_NULL;
166 InputRAMOut_eg <= (others => (others => '0'));
176 IN_Control => regControl_eg,
177 OUT_Status => regStatus_eg,
178 IN_Start => AlgoStart,
179 IN_Data => AlgoData_eg,
180 OUT_Start => SortStart_eg,
181 OUT_Write => SortWrite_eg,
182 OUT_Data => SortData_eg
);
185 SortedData_eg <= to_AlgoTriggerObject(SortData_eg);
187 EG_OUT_IF: if USE_OUTPUT_RAM generate
192 ipb_in => ipb_to_slaves
(N_SLV_SORTING_OUTPUT_EG_RAM
),
193 ipb_out => ipb_from_slaves
(N_SLV_SORTING_OUTPUT_EG_RAM
),
195 SortedIn => SortedData_eg,
197 SpyBCNIN => SpyBCN_out_eg,
200 we => SpyOutputEnable_eg,
201 SortedOut => OutputRAMOut_eg
);
204 ipb_from_slaves(N_SLV_SORTING_OUTPUT_EG_RAM) <= IPB_RBUS_NULL;
205 OutputRAMOut_eg <= (others => '0');
209 OUT_eg_TOB <= OutputRAMOut_eg when FakeOutputEnable_eg = '1' else SortedData_eg;
210 OUT_eg_Sync <= SortStart_eg;
212 OUT_eg_Valid <= '1' when FakeOutputEnable_eg = '1' else SortWrite_eg;
217 SortingData_tau <= to_AlgoTriggerObjects(IN_tau_Data);
220 AlgoData_tau <= to_AlgoTriggerObjects(InputRAMOut_tau) when FakeInputEnable_tau = '1' else SortingData_tau;
222 TAU_IN_IF: if USE_INPUT_RAM generate
227 ipb_in => ipb_to_slaves
(N_SLV_SORTING_INPUT_RAM_TAU
),
228 ipb_out => ipb_from_slaves
(N_SLV_SORTING_INPUT_RAM_TAU
),
230 SortingIn => IN_tau_Data,
232 SpyBCNIN => SpyBCN_tau,
235 we => SpyInputEnable_tau,
236 SortingOut => InputRAMOut_tau
);
238 ipb_from_slaves(N_SLV_SORTING_INPUT_RAM_EG) <= IPB_RBUS_NULL;
239 InputRAMOut_tau <= (others => (others => '0'));
249 IN_Control => regControl_tau,
250 OUT_Status => regStatus_tau,
251 IN_Start => AlgoStart,
252 IN_Data => AlgoData_tau,
253 OUT_Start => SortStart_tau,
254 OUT_Write => SortWrite_tau,
255 OUT_Data => SortData_tau
);
258 SortedData_tau <= to_AlgoTriggerObject(SortData_tau);
260 TAU_OUT_IF: if USE_OUTPUT_RAM generate
265 ipb_in => ipb_to_slaves
(N_SLV_SORTING_OUTPUT_TAU_RAM
),
266 ipb_out => ipb_from_slaves
(N_SLV_SORTING_OUTPUT_TAU_RAM
),
268 SortedIn => SortedData_tau,
270 SpyBCNIN => SpyBCN_out_tau,
273 we => SpyOutputEnable_tau,
274 SortedOut => OutputRAMOut_tau
);
276 ipb_from_slaves(N_SLV_SORTING_OUTPUT_TAU_RAM) <= IPB_RBUS_NULL;
277 OutputRAMOut_tau <= (others => '0');
288 data_out => BCN_int
);
295 OUT_tau_TOB <= OutputRAMOut_tau when FakeOutputEnable_tau = '1' else SortedData_tau;
296 OUT_tau_Sync <= SortStart_tau;
298 OUT_tau_Valid <= '1' when FakeOutputEnable_tau = '1' else SortWrite_tau;
304 regControl_eg <= read_reg(00);
305 regControl_tau <= read_reg(01);
306 regDebug(0) <= read_reg(02);
307 regDebug(1) <= read_reg(03);
309 write_reg(0) <= regStatus_eg;
310 write_reg(1) <= regStatus_tau;
311 write_reg(2) <= regDebug(2);
312 write_reg(3) <= regDebug(3);
314 AlgoStart <= IN_Sync;
317 FakeInputEnable_eg <= regControl_eg(0);
318 SpyInputEnable_eg <= regControl_eg(1);
319 FakeOutputEnable_eg <= regControl_eg(2);
320 SpyOutputEnable_eg <= regControl_eg(3);
321 SpyBCN_eg <= regControl_eg(4);
322 SpyBCN_out_eg <= regControl_eg(5);
324 FakeInputEnable_tau <= regControl_tau(0);
325 SpyInputEnable_tau <= regControl_tau(1);
326 FakeOutputEnable_tau <= regControl_tau(2);
327 SpyOutputEnable_tau <= regControl_tau(3);
328 SpyBCN_tau <= regControl_tau(4);
329 SpyBCN_out_tau <= regControl_tau(5);
External data-types and functions.
( OUTPUT_TOBS- 1 downto 0) AlgoTriggerObject AlgoOutput
Algorithm OUTPUT port.
array(natural range <> ) of AlgoTriggerObject AlgoTriggerObjects
Algorithm OUTPUT port.
std_logic_vector( OUT_TOB_WIDTH- 1 downto 0) AlgoTriggerObject
Algorithm Trigger Object TOB.
Shift register for data delay.
Top of TOB sorting module with IPBus interface.
Top of TOB sorting module with IPBus interface.
Top of TOB sorting module.