50 use IEEE.STD_LOGIC_1164.
all;
51 use IEEE.NUMERIC_STD.
all;
54 library infrastructure_lib;
59 TAU_ALGO_VERSION : std_logic_vector(1 downto 0)
61 port (CLK200 : in std_logic;
63 IN_ParBDT : in AlgoParameters(2 downto 0);
64 IN_ParFrac : in AlgoParameters(2 downto 0);
66 IN_Min_E_threshold : in DataWord;
67 IN_Min_BDT_E_threshold : in DataWord;
68 IN_Max_cond_E_threshold : in DataWord;
70 IN_Data : in TriggerTowers(8 downto 0);
72 OUT_TOB : out TriggerObject_tau);
81 A :
in std_logic_vector(
15 downto 0);
82 B :
in std_logic_vector(
7 downto 0);
83 P :
out std_logic_vector(
23 downto 0)
87 signal TOBEnergy : DataWord;
88 signal C_IN_TOBEnergy : DataWord;
89 signal C_IN_FracTOBEnergy : DataWord;
90 signal TOBEnergyOverflow : std_logic;
91 signal C_IN_TOBEnergyOverflow : std_logic;
92 signal C_IN_FracTOBEnergyOverflow : std_logic;
93 signal C_IN_EnergyThr : DataWord;
94 signal C_IN_BDTMaxEnergyThr : DataWord;
95 signal C_IN_BDTMinEnergyThr : DataWord;
96 signal C_IN_BDTTOBEnergy : DataWord;
97 signal C_IN_BDTTOBEnergyOverflow : std_logic;
98 signal SF_IsMax : std_logic;
99 signal C_IN_IsMax : std_logic;
100 signal C_OUT_IsMax : std_logic;
101 signal Final_IsMax : std_logic := '0';
102 signal Final_TOBEnergy : DataWord := (others => '0');
103 signal Final_TOBEnergyOverflow : std_logic := '0';
104 signal C_OUT_TOBEnergy : DataWord;
105 signal C_OUT_TOBEnergyOverflow : std_logic;
106 signal BDTScore : std_logic_vector(BDT_SCORE_WIDTH - 1 downto 0);
107 signal C_IN_BDTScore : std_logic_vector(BDT_SCORE_WIDTH - 1 downto 0);
108 signal BDTThresholds : AlgoParameters(2 downto 0);
109 signal C_IN_BDTThr : AlgoParameters(2 downto 0);
110 signal Final_BDTCondition : std_logic_vector(1 downto 0) := (others => '0');
111 signal C_OUT_BDTCondition : std_logic_vector(1 downto 0);
112 signal Final_BDTScore : std_logic_vector(BDT_SCORE_WIDTH - 1 downto 0) := (others => '0');
113 signal C_OUT_BDTScore : std_logic_vector(BDT_SCORE_WIDTH - 1 downto 0);
114 signal FracEnvSumOverflow : std_logic;
115 signal C_IN_FracEnvSumOverflow : std_logic;
116 signal FracCoreSumOverflow : std_logic;
117 signal C_IN_FracCoreSumOverflow : std_logic;
118 signal FracCoreSum : DataWord;
119 signal C_IN_FracCoreSum : DataWord;
120 signal FracEnvMultOverflows : std_logic_vector(2 downto 0);
121 signal C_IN_FracEnvMultOverflows : std_logic_vector(2 downto 0);
122 signal FracEnvMult : DataWords(2 downto 0);
123 signal C_IN_FracEnvMult : DataWords(2 downto 0);
124 signal C_IN_Frac_ET_Thr : DataWord;
125 signal Final_FracCondition : std_logic_vector (1 downto 0) := (others => '0');
126 signal C_OUT_FracCondition : std_logic_vector (1 downto 0);
127 signal ParFrac : AlgoParameters(2 downto 0);
128 signal M_IN_ParFrac : AlgoParameters(2 downto 0);
129 signal output_data : DataWords(BDT_N_VARIABLES + 10 downto 0);
130 signal output_of_data : std_logic_vector(BDT_N_VARIABLES + 10 downto 0);
131 signal BDTScore_vld : std_logic;
132 signal SF_sum : DataWords(8 downto 0);
133 signal SF_of : std_logic_vector(8 downto 0);
134 signal BDTVars_val : DataWords(BDT_N_VARIABLES - 1 downto 0);
135 signal FracEnvSum : DataWord;
136 signal M_IN_FracEnvSum : DataWord;
137 signal DelayTree_out : DataWords(33 downto 0);
138 signal DelayTree_in : DataWords(28 downto 0);
141 ParFrac <= IN_ParFrac;
142 BDTThresholds <= IN_ParBDT;
144 M_IN_ParFrac(0) <= DelayTree_out(0)(7 downto 0);
145 M_IN_ParFrac(1) <= DelayTree_out(1)(7 downto 0);
146 M_IN_ParFrac(2) <= DelayTree_out(2)(7 downto 0);
147 M_IN_FracEnvSum <= DelayTree_out(3);
148 C_IN_TOBEnergy <= DelayTree_out(4);
149 C_IN_TOBEnergyOverflow <= DelayTree_out(5)(0);
150 C_IN_IsMax <= DelayTree_out(6)(0);
151 C_IN_EnergyThr <= DelayTree_out(7);
152 C_IN_BDTScore <= DelayTree_out(8)(BDT_SCORE_WIDTH-1 downto 0);
153 C_IN_BDTThr(0) <= DelayTree_out(9)(7 downto 0);
154 C_IN_BDTThr(1) <= DelayTree_out(10)(7 downto 0);
155 C_IN_BDTThr(2) <= DelayTree_out(11)(7 downto 0);
156 C_IN_BDTMaxEnergyThr <= DelayTree_out(12);
157 C_IN_BDTMinEnergyThr <= DelayTree_out(13);
158 C_IN_BDTTOBEnergy <= DelayTree_out(14);
159 C_IN_BDTTOBEnergyOverflow <= DelayTree_out(15)(0);
160 C_IN_FracTOBEnergy <= DelayTree_out(16);
161 C_IN_FracTOBEnergyOverflow <= DelayTree_out(17)(0);
162 C_IN_FracEnvSumOverflow <= DelayTree_out(18)(0);
163 C_IN_FracCoreSumOverflow <= DelayTree_out(19)(0);
164 C_IN_FracCoreSum <= DelayTree_out(20);
165 C_IN_FracEnvMult(0) <= DelayTree_out(21);
166 C_IN_FracEnvMult(1) <= DelayTree_out(22);
167 C_IN_FracEnvMult(2) <= DelayTree_out(23);
168 C_IN_FracEnvMultOverflows(0) <= DelayTree_out(24)(0);
169 C_IN_FracEnvMultOverflows(1) <= DelayTree_out(25)(0);
170 C_IN_FracEnvMultOverflows(2) <= DelayTree_out(26)(0);
171 C_IN_Frac_ET_Thr <= DelayTree_out(27);
172 Final_TOBEnergy <= DelayTree_out(28);
173 Final_TOBEnergyOverflow <= DelayTree_out(29)(0);
174 Final_IsMax <= DelayTree_out(30)(0);
175 Final_BDTScore <= DelayTree_out(31)(BDT_SCORE_WIDTH-1 downto 0);
176 Final_BDTCondition <= DelayTree_out(32)(1 downto 0);
177 Final_FracCondition <= DelayTree_out(33)(1 downto 0);
179 DelayTree_in(0)(7 downto 0) <= ParFrac(0);
180 DelayTree_in(1)(7 downto 0) <= ParFrac(1);
181 DelayTree_in(2)(7 downto 0) <= ParFrac(2);
182 DelayTree_in(3) <= FracEnvSum;
183 DelayTree_in(4) <= TOBEnergy;
184 DelayTree_in(5)(0) <= TOBEnergyOverflow;
185 DelayTree_in(6)(0) <= SF_IsMax;
186 DelayTree_in(7) <= IN_Min_E_threshold;
187 DelayTree_in(8)(BDT_SCORE_WIDTH-1 downto 0) <= BDTScore;
188 DelayTree_in(9)(7 downto 0) <= BDTThresholds(0);
189 DelayTree_in(10)(7 downto 0) <= BDTThresholds(1);
190 DelayTree_in(11)(7 downto 0) <= BDTThresholds(2);
191 DelayTree_in(12) <= IN_Max_cond_E_threshold;
192 DelayTree_in(13) <= IN_Min_BDT_E_threshold;
193 DelayTree_in(14)(0) <= FracEnvSumOverflow;
194 DelayTree_in(15)(0) <= FracCoreSumOverflow;
195 DelayTree_in(16) <= FracCoreSum;
196 DelayTree_in(17) <= FracEnvMult(0);
197 DelayTree_in(18) <= FracEnvMult(1);
198 DelayTree_in(19) <= FracEnvMult(2);
199 DelayTree_in(20)(0) <= FracEnvMultOverflows(0);
200 DelayTree_in(21)(0) <= FracEnvMultOverflows(1);
201 DelayTree_in(22)(0) <= FracEnvMultOverflows(2);
202 DelayTree_in(23) <= C_OUT_TOBEnergy;
203 DelayTree_in(24)(0) <= C_OUT_TOBEnergyOverflow;
204 DelayTree_in(25)(0) <= C_OUT_IsMax;
205 DelayTree_in(26)(BDT_SCORE_WIDTH-1 downto 0) <= C_OUT_BDTScore;
206 DelayTree_in(27)(1 downto 0) <= C_OUT_BDTCondition;
207 DelayTree_in(28)(1 downto 0) <= C_OUT_FracCondition;
210 port map(CLK200, to_SuperCellArray
(IN_Data
), output_data, output_of_data
);
212 BDTVars_val(0) <= (others => '1') when output_of_data(BDT_N_VARIABLES + 3) = '1' else output_data(BDT_N_VARIABLES + 3);
214 BDT_VARS: for i in 0 to BDT_N_VARIABLES - 2 generate
215 BDTVars_val(i+1) <= (others => '1') when output_of_data(i) = '1' else output_data(i);
218 TOWERS: for i in 0 to 8 generate
219 SF_of(i) <= output_of_data(i+BDT_N_VARIABLES - 1);
220 SF_sum(i) <= output_data(i+BDT_N_VARIABLES - 1);
223 TOBEnergy <= output_data(BDT_N_VARIABLES + 8);
224 TOBEnergyOverflow <= output_of_data(BDT_N_VARIABLES + 8);
225 FracEnvSum <= output_data(BDT_N_VARIABLES + 9);
226 FracEnvSumOverflow <= output_of_data(BDT_N_VARIABLES + 9);
227 FracCoreSum <= output_data(BDT_N_VARIABLES + 10);
228 FracCoreSumOverflow <= output_of_data(BDT_N_VARIABLES + 10);
236 IN_Surrounding
(0) => SF_sum
(0),
237 IN_Surrounding
(1) => SF_sum
(1),
238 IN_Surrounding
(2) => SF_sum
(2),
239 IN_Surrounding
(7) => SF_sum
(3),
240 IN_Surrounding
(3) => SF_sum
(5),
241 IN_Surrounding
(6) => SF_sum
(6),
242 IN_Surrounding
(5) => SF_sum
(7),
243 IN_Surrounding
(4) => SF_sum
(8),
244 IN_surrounding_of
(0) => SF_of
(0),
245 IN_surrounding_of
(1) => SF_of
(1),
246 IN_surrounding_of
(2) => SF_of
(2),
247 IN_surrounding_of
(7) => SF_of
(3),
248 IN_surrounding_of
(3) => SF_of
(5),
249 IN_surrounding_of
(6) => SF_of
(6),
250 IN_surrounding_of
(5) => SF_of
(7),
251 IN_surrounding_of
(4) => SF_of
(8),
252 OUT_IsMax => SF_IsMax
268 BDTScore, BDTScore_vld
);
271 -- See DelayTree.vhd
for a table
of latencies
for each input/output
signal
274 IN_Words => DelayTree_in,
275 OUT_Words => DelayTree_out
279 generic map (parameters =>
3)
282 IN_Word => M_IN_FracEnvSum,
283 IN_parameters => M_IN_ParFrac,
284 OUT_Overflow => FracEnvMultOverflows,
285 OUT_Words => FracEnvMult
291 IN_TOBEnergy => C_IN_TOBEnergy,
292 IN_TOBEnergyOverflow => C_IN_TOBEnergyOverflow,
293 IN_ET_Thr => C_IN_EnergyThr,
294 IN_IsSeeded => C_IN_IsMax,
295 OUT_IsMax => C_OUT_IsMax,
296 OUT_TOBEnergy => C_OUT_TOBEnergy,
297 OUT_TOBEnergyOverflow => C_OUT_TOBEnergyOverflow
303 IN_BDTScore => C_IN_BDTScore,
304 IN_BDT_Thr => C_IN_BDTThr,
305 IN_Max_BDT_E_threshold => C_IN_BDTMaxEnergyThr,
306 IN_Min_BDT_E_threshold => C_IN_BDTMinEnergyThr,
307 IN_Total_Energy => C_IN_BDTTOBEnergy,
308 IN_Total_Energy_of => C_IN_BDTTOBEnergyOverflow,
309 OUT_BDTCondition => C_OUT_BDTCondition,
310 OUT_BDTScore => C_OUT_BDTScore
316 IN_TOBEnergy => C_IN_FracTOBEnergy,
317 IN_TOBEnergyOverflow => C_IN_FracTOBEnergyOverflow,
318 IN_FracEnvSumOverflow => C_IN_FracEnvSumOverflow,
319 IN_FracCoreSumOverflow => C_IN_FracCoreSumOverflow,
320 IN_FracCoreSum => C_IN_FracCoreSum,
321 IN_FracEnvMult => C_IN_FracEnvMult,
322 IN_FracEnvMultOverflows => C_IN_FracEnvMultOverflows,
323 IN_Frac_ET_Thr => "
0000111111110000",
324 OUT_FracCondition => C_OUT_FracCondition
328 OUT_TOB.Core.Version <= TAU_ALGO_VERSION;
329 OUT_TOB.Core.Energy <= Final_TOBEnergy;
330 OUT_TOB.Core.EnergyOF <= Final_TOBEnergyOverflow;
331 OUT_TOB.Core.UpNotDown <= '0';
332 OUT_TOB.Core.Seed <= "01";
333 OUT_TOB.Core.IsMax <= Final_IsMax;
334 OUT_TOB.Core.JetOrBDT <= Final_BDTCondition;
335 OUT_TOB.Core.Frac <= Final_FracCondition;
336 OUT_TOB.Core.BDT <= Final_BDTScore;
337 OUT_TOB.Position.Eta <= (others => '0');
338 OUT_TOB.Position.Phi <= (others => '0');
Core of the electromagnetic algorithm.
Core of the electromagnetic algorithm.
in CLK std_logic
200 MHz clock
in CLK std_logic
200 MHz clock
in CLK std_logic
200 MHz clock
Seed Finder for the tau algorithm.
in IN_Central_of std_logic
Sum of TTs in CCW starting from bottom left corner.
in IN_Central DataWord
Sum of TTs in CCW starting from bottom left corner.