2 use IEEE.STD_LOGIC_1164.
all;
3 use IEEE.NUMERIC_STD.
all;
10 type array_std_logic_vector is array (natural range <>) of std_logic_vector;
15 constant DATA_WIDTH : integer := 16;
16 constant ENERGY_WIDTH : integer := 16;
17 constant BDT_SCORE_WIDTH : integer := 11;
18 constant BDT_N_VARIABLES : integer := 11;
19 constant TOB_ENERGY_WIDTH : integer := 12;
20 constant COMPARE_BITS : integer := 16;
21 constant ENERGY_OF : std_logic_vector(ENERGY_WIDTH-1 downto 0) := (others => '1');
22 constant ENERGY_ZERO : std_logic_vector(ENERGY_WIDTH-1 downto 0) := (others => '0');
24 constant PAR_WIDTH : integer := 8;
25 constant REG_WIDTH : integer := 32;
29 constant MULTIPLIER_OUTPUT_WIDTH : integer := PAR_WIDTH+DATA_WIDTH;
31 constant MULTIPLIER_DATA_INPUT_WIDTH : integer := DATA_WIDTH;
33 constant MULTIPLIER_PAR_INPUT_WIDTH : integer := PAR_WIDTH;
36 constant PARAMETER_RAM_ADDR_WIDTH : integer := 6;
37 constant PARAMETER_RAM_DATA_WIDTH : integer := 256;
38 constant PARAMETER_RAM_CLOCK_OFFSET : integer := 2;
40 subtype DataWord is std_logic_vector(DATA_WIDTH-1 downto 0);
41 type DataWords is array(natural range <>) of DataWord;
42 subtype DataWordWithCarry is std_logic_vector(DATA_WIDTH downto 0);
43 type DataWordsWithCarry is array(natural range <>) of DataWordWithCarry;
44 constant ZERO_DATA_WORD : DataWord := (others => '0');
45 constant ZERO_DATA_WORD_WITH_CARRY : DataWordWithCarry := (others => '0');
46 constant MAX_DATA_WORD: DataWord := (others => '1');
48 type TriggerTower is record
49 Layer0 : DataWords(LAYER0-1 downto 0);
50 Layer1 : DataWords(LAYER1-1 downto 0);
51 Layer2 : DataWords(LAYER2-1 downto 0);
52 Layer3 : DataWords(LAYER3-1 downto 0);
53 Hadron : DataWords(HADRON-1 downto 0);
56 constant ZERO_TRIGGER_TOWER : TriggerTower := (Layer0 => ((others => (others => '0'))),
57 Layer1 => ((others => (others => '0'))),
58 Layer2 => ((others => (others => '0'))),
59 Layer3 => ((others => (others => '0'))),
60 Hadron => ((others => (others => '0'))));
62 type TriggerTowers is array(natural range <>) of TriggerTower;
63 type TriggerTowersArray is array(natural range <>) of TriggerTowers;
68 constant EM_POSITION_ETA_ON_EDGE : integer := 0;
69 constant EM_POSITION_ETA_ON_LEFT_EDGE : integer := 1;
70 constant EM_POSITION_POSITIVE_ETA_LEFT : integer := 2;
71 constant EM_POSITION_POSITIVE_ETA_CENTRE : integer := 3;
72 constant EM_POSITION_POSITIVE_ETA_RIGHT : integer := 4;
74 constant HADRONIC_POSITION_BIT_END : integer := 7;
79 constant RETA_WIDTH : integer := 2;
80 constant WS_WIDTH : integer := 2;
81 constant HAD_WIDTH : integer := 2;
83 constant JET_OR_BDT_WIDTH : integer := 2;
84 constant FRAC_WIDTH : integer := 2;
86 type TriggerObjectCore_eg is record
89 Energy : std_logic_vector(ENERGY_WIDTH - 1 downto 0);
91 REta : std_logic_vector(RETA_WIDTH - 1 downto 0);
92 ws : std_logic_vector(WS_WIDTH - 1 downto 0);
93 Had : std_logic_vector(HAD_WIDTH - 1 downto 0);
94 UpNotDown : std_logic;
95 Seed : std_logic_vector(1 downto 0);
96 Version : std_logic_vector(1 downto 0);
99 type TriggerObjectCore_tau is record
101 Energy : std_logic_vector(ENERGY_WIDTH - 1 downto 0);
102 EnergyOF : std_logic;
103 JetOrBDT : std_logic_vector(JET_OR_BDT_WIDTH - 1 downto 0);
104 Frac : std_logic_vector(FRAC_WIDTH - 1 downto 0);
105 UpNotDown : std_logic;
106 Seed : std_logic_vector(1 downto 0);
107 BDT : std_logic_vector(BDT_SCORE_WIDTH - 1 downto 0);
108 Version : std_logic_vector(1 downto 0);
111 type TriggerObjectPosition is record
112 Eta : std_logic_vector(2 downto 0);
113 Phi : std_logic_vector(2 downto 0);
116 type TriggerObject_eg is record
117 Core : TriggerObjectCore_eg;
118 Position : TriggerObjectPosition;
121 type TriggerObject_tau is record
122 Core : TriggerObjectCore_tau;
123 Position : TriggerObjectPosition;
126 constant ZERO_TRIGGER_OBJECT_EG : TriggerObject_eg := (
130 Energy => (others => '0'),
132 REta => (others => '0'),
133 ws => (others => '0'),
134 Had => (others => '0'),
136 Seed => (others => '0'),
137 Version => (others => '0')),
140 Eta => (others => '0'),
141 Phi => (others => '0'))
144 constant ZERO_TRIGGER_OBJECT_TAU : TriggerObject_tau := (
147 Energy => (others => '0'),
149 JetOrBDT => (others => '0'),
150 Frac => (others => '0'),
152 Seed => (others => '0'),
153 BDT => (others => '0'),
154 Version => (others => '0')),
156 Eta => (others => '0'),
157 Phi => (others => '0'))
161 type TriggerObjects_eg is array(natural range <>) of TriggerObject_eg;
162 type TriggerObjects_tau is array(natural range <>) of TriggerObject_tau;
164 subtype AlgoParameter is std_logic_vector(PAR_WIDTH-1 downto 0);
165 type AlgoParameters is array(natural range <>) of AlgoParameter;
167 subtype AlgoRegister is std_logic_vector(REG_WIDTH-1 downto 0);
168 type AlgoRegisters is array(natural range <>) of AlgoRegister;
170 subtype TriggerTowerMatrix is TriggerTowersArray(INPUT_COLUMNS-1 downto 0)(INPUT_ROWS-1 downto 0);
178 function to_AlgoTriggerObject (X : TriggerObject_eg; FPGA :
integer)
return AlgoTriggerObject;
179 function to_AlgoTriggerObject (X : TriggerObject_tau; FPGA :
integer)
return AlgoTriggerObject;
181 function to_AlgoXTriggerObject (X : TriggerObject_eg; FPGA :
integer)
return AlgoXTriggerObject;
182 function to_AlgoXTriggerObject (X : TriggerObject_tau; FPGA :
integer)
return AlgoXTriggerObject;
189 function to_TriggerObjects_eg (X :
AlgoOutput)
return TriggerObjects_eg;
190 function to_TriggerObjects_tau (X :
AlgoOutput)
return TriggerObjects_tau;
192 function to_AlgoOutput (X : TriggerObjects_eg; FPGA :
integer)
return AlgoOutput;
193 function to_AlgoOutput (X : TriggerObjects_tau; FPGA :
integer)
return AlgoOutput;
197 function to_AlgoXOutput (X : TriggerObjects_eg; FPGA :
integer)
return AlgoXOutput;
198 function to_AlgoXOutput (X : TriggerObjects_tau; FPGA :
integer)
return AlgoXOutput;
201 function is_valid_core (X : TriggerObjectCore_eg)
return std_logic;
202 function is_valid_core (X : TriggerObjectCore_tau)
return std_logic;
206 function validate_core (X : TriggerObjectCore_eg)
return TriggerObjectCore_eg;
207 function validate_core (X : TriggerObjectCore_tau)
return TriggerObjectCore_tau;
209 function invalidate_core (X : TriggerObjectCore_eg)
return TriggerObjectCore_eg;
210 function invalidate_core (X : TriggerObjectCore_tau)
return TriggerObjectCore_tau;
214 function to_TOBEnergy (X : DataWord)
return std_logic_vector;
215 function FPGA_to_processor_number (X :
integer)
return std_logic_vector;
217 function BitLeftShift(A : DataWord; B :
integer)
return DataWord;
219 function EvaluateCondition (
220 Pass_overflow :
std_logic;
221 Fail_overflow :
std_logic;
222 E_threshold : DataWord;
223 Total_Energy : DataWord;
224 Total_Energy_of :
std_logic;
225 Condition_Energy : DataWord;
226 Thresholds : DataWords(
2 downto 0);
227 Thresholds_overflows :
std_logic_vector(
2 downto 0))
228 return std_logic_vector;
230 function to_SuperCellArray (X : TriggerTowers)
return DataWords;
237 variable Y :
std_logic_vector(11 downto 0);
243 function is_valid_core
(X : TriggerObjectCore_eg
) return std_logic is
244 variable Y :
std_logic;
246 if X.LocalMax = '
1'
then
254 function is_valid_core
(X : TriggerObjectCore_tau
) return std_logic is
255 variable Y :
std_logic;
257 if X.IsMax = '
1'
then
267 variable Y :
std_logic;
269 if X
(11 downto 0) = x"000"
then
277 function validate_core
(X : TriggerObjectCore_eg
) return TriggerObjectCore_eg
is
278 variable Y : TriggerObjectCore_eg;
281 if is_valid_core
(X
) = '
0'
then
282 Y.Energy :=
(others => '
0'
);
288 function invalidate_core
(X : TriggerObjectCore_tau
) return TriggerObjectCore_tau
is
289 variable Y : TriggerObjectCore_tau;
292 Y.Energy :=
(others => '
0'
);
298 function validate_core
(X : TriggerObjectCore_tau
) return TriggerObjectCore_tau
is
299 variable Y : TriggerObjectCore_tau;
302 if is_valid_core
(X
) = '
0'
then
304 Y.Energy :=
(others => '
0'
);
309 function invalidate_core
(X : TriggerObjectCore_eg
) return TriggerObjectCore_eg
is
310 variable Y : TriggerObjectCore_eg;
313 Y.Energy :=
(others => '
0'
);
323 Y
(11 downto 0) := x"000";
331 function to_AlgoTriggerObject
(X : TriggerObject_eg; FPGA :
integer) return AlgoTriggerObject is
334 if X.Core.EnergyOF = '
1'
or X.Core.Energy
(ENERGY_WIDTH-
2) = '
1'
or X.Core.Energy
(ENERGY_WIDTH-
1) = '
1'
then
335 Y
(11 downto 0) :=
(others => '
1'
);
338 Y
(11 downto 0) :=
(TOB_ENERGY_WIDTH-
1 downto 0 => X.Core.Energy
(ENERGY_WIDTH-
3 downto 2),
others => '
0'
);
340 Y
(13 downto 12) := X.Core.Version;
342 Y
(15) := X.Core.UpNotDown;
343 Y
(17 downto 16) := X.Core.Seed;
344 Y
(19 downto 18) := X.Core.REta;
345 Y
(21 downto 20) := X.Core.ws;
346 Y
(23 downto 22) := X.Core.Had;
347 Y
(26 downto 24) := X.Position.Phi;
348 Y
(29 downto 27) := X.Position.Eta;
349 Y
(31 downto 30) := FPGA_to_processor_number
(FPGA
);
354 function to_AlgoXTriggerObject
(X : TriggerObject_eg; FPGA :
integer) return AlgoXTriggerObject is
357 Y
(11 downto 0) :=
(others => '
0'
);
358 Y
(13 downto 12) := X.Core.Version;
360 Y
(15) := X.Core.UpNotDown;
361 Y
(17 downto 16) := X.Core.Seed;
362 Y
(19 downto 18) := X.Core.REta;
363 Y
(21 downto 20) := X.Core.ws;
364 Y
(23 downto 22) := X.Core.Had;
365 Y
(26 downto 24) := X.Position.Phi;
366 Y
(29 downto 27) := X.Position.Eta;
367 Y
(31 downto 30) := FPGA_to_processor_number
(FPGA
);
368 if X.Core.EnergyOF = '
1'
then
369 Y
(47 downto 32) :=
(others => '
1'
);
371 Y
(47 downto 32) := X.Core.Energy;
373 Y
(63 downto 48) :=
(others => '
0'
);
378 variable Y : TriggerObject_eg;
380 if X
(ENERGY_WIDTH-
1 downto 0) /= ENERGY_ZERO
then
381 Y.Core.LocalMax := '
1';
383 Y.Core.LocalMax := '
0';
385 Y.Core.Energy :=
"00" & X
(11 downto 0) &
"00";
386 Y.Core.Version := X
(13 downto 12);
388 Y.Core.UpNotDown := X
(15);
389 Y.Core.Seed := X
(17 downto 16);
390 Y.Core.REta := X
(19 downto 18);
391 Y.Core.ws := X
(21 downto 20);
392 Y.Core.Had := X
(23 downto 22);
393 Y.Position.Phi := X
(26 downto 24);
394 Y.Position.Eta := X
(29 downto 27);
395 if X
(ENERGY_WIDTH-
1 downto 0) = ENERGY_OF
then
396 Y.Core.EnergyOF := '
1';
398 Y.Core.EnergyOF := '
0';
406 function to_AlgoTriggerObject
(X : TriggerObject_tau; FPGA :
integer) return AlgoTriggerObject is
409 if X.Core.EnergyOF = '
1'
or X.Core.Energy
(ENERGY_WIDTH-
2) = '
1'
or X.Core.Energy
(ENERGY_WIDTH-
1) = '
1'
then
410 Y
(11 downto 0) :=
(others => '
1'
);
413 Y
(11 downto 0) :=
(TOB_ENERGY_WIDTH-
1 downto 0 => X.Core.Energy
(ENERGY_WIDTH-
3 downto 2),
others => '
0'
);
415 Y
(13 downto 12) := X.Core.Version;
416 Y
(14) := X.Core.IsMax;
417 Y
(15) := X.Core.UpNotDown;
418 Y
(17 downto 16) := X.Core.Seed;
419 Y
(19 downto 18) := X.Core.JetOrBDT;
420 Y
(21 downto 20) := X.Core.Frac;
421 Y
(23 downto 22) :=
"00";
422 Y
(26 downto 24) := X.Position.Phi;
423 Y
(29 downto 27) := X.Position.Eta;
424 Y
(31 downto 30) := FPGA_to_processor_number
(FPGA
);
429 function to_AlgoXTriggerObject
(X : TriggerObject_tau; FPGA :
integer) return AlgoXTriggerObject is
432 Y
(BDT_SCORE_WIDTH -
1 downto 0) := X.Core.BDT;
434 Y
(13 downto 12) := X.Core.Version;
435 Y
(14) := X.Core.IsMax;
436 Y
(15) := X.Core.UpNotDown;
437 Y
(17 downto 16) := X.Core.Seed;
438 Y
(19 downto 18) := X.Core.JetOrBDT;
439 Y
(21 downto 20) := X.Core.Frac;
440 Y
(23 downto 22) :=
"00";
441 Y
(26 downto 24) := X.Position.Phi;
442 Y
(29 downto 27) := X.Position.Eta;
443 Y
(31 downto 30) := FPGA_to_processor_number
(FPGA
);
444 if X.Core.EnergyOF = '
1'
then
445 Y
(47 downto 32) :=
(others => '
1'
);
447 Y
(47 downto 32) := X.Core.Energy;
449 Y
(63 downto 48) :=
(others => '
0'
);
453 function to_TriggerObject_tau
(X :
AlgoTriggerObject) return TriggerObject_tau
is
454 variable Y : TriggerObject_tau;
456 if X
(ENERGY_WIDTH-
1 downto 0) /= ENERGY_ZERO
then
461 Y.Core.Energy :=
"00" & X
(11 downto 0) &
"00";
462 Y.Core.Version := X
(13 downto 12);
463 Y.Core.UpNotDown := X
(15);
464 Y.Core.Seed := X
(17 downto 16);
465 Y.Core.JetOrBDT := X
(19 downto 18);
466 Y.Position.Phi := X
(26 downto 24);
467 Y.Position.Eta := X
(29 downto 27);
468 if X
(ENERGY_WIDTH-
1 downto 0) = ENERGY_OF
then
469 Y.Core.EnergyOF := '
1';
471 Y.Core.EnergyOF := '
0';
479 function to_TriggerObjects_eg
(X :
AlgoOutput) return TriggerObjects_eg
is
480 variable Y : TriggerObjects_eg
(7 downto 0);
482 for i
in Y'
range loop
483 Y
(i
) := to_TriggerObject_eg
(X
(i
));
488 function to_AlgoOutput
(X : TriggerObjects_eg; FPGA :
integer) return AlgoOutput is
491 for i
in Y'
range loop
492 Y
(i
) := to_AlgoTriggerObject
(X
(i
), FPGA
);
497 function to_TriggerObjects_tau
(X :
AlgoOutput) return TriggerObjects_tau
is
498 variable Y : TriggerObjects_tau
(7 downto 0);
500 for i
in Y'
range loop
501 Y
(i
) := to_TriggerObject_tau
(X
(i
));
506 function to_AlgoOutput
(X : TriggerObjects_tau; FPGA :
integer) return AlgoOutput is
509 for i
in Y'
range loop
510 Y
(i
) := to_AlgoTriggerObject
(X
(i
), FPGA
);
519 for i
in Y'
range loop
525 function to_AlgoXOutput
(X : TriggerObjects_eg; FPGA :
integer) return AlgoXOutput is
528 for i
in Y'
range loop
529 Y
(i
) := to_AlgoXTriggerObject
(X
(i
), FPGA
);
535 function to_AlgoXOutput
(X : TriggerObjects_tau; FPGA :
integer) return AlgoXOutput is
538 for i
in Y'
range loop
539 Y
(i
) := to_AlgoXTriggerObject
(X
(i
), FPGA
);
544 function to_TOBEnergy
(X : DataWord
) return std_logic_vector is
545 variable Y :
std_logic_vector(ENERGY_WIDTH -
1 downto 0);
547 if (ENERGY_WIDTH -
1) /= DataWord'
high then
548 if unsigned(X
(X'
high downto ENERGY_WIDTH
)) /=
0 then
549 Y :=
(others => '
1'
);
551 Y := X
(ENERGY_WIDTH-
1 downto 0);
560 function FPGA_to_processor_number
(X :
integer) return std_logic_vector is
561 variable Y :
std_logic_vector(1 downto 0);
580 function BitLeftShift (
585 variable Y : DataWord;
586 variable AllOne : DataWord :=
(others => '
1'
);
588 Y :=
(Y'
high downto B => A
(A'
high - B
downto 0),
others => '
0'
);
590 if unsigned(A
(A'
high downto A'
high -B+
1)) =
0 then
595 end function BitLeftShift;
597 function EvaluateCondition (
598 Pass_overflow :
std_logic;
599 Fail_overflow :
std_logic;
600 E_threshold : DataWord;
601 Total_Energy : DataWord;
602 Total_Energy_of :
std_logic;
603 Condition_Energy : DataWord;
604 Thresholds : DataWords(
2 downto 0);
605 Thresholds_overflows :
std_logic_vector(
2 downto 0))
606 return std_logic_vector is
607 variable Condition :
std_logic_vector(1 downto 0);
608 begin -- function EvaluateCondition
610 if Pass_overflow = '
0'
and Total_Energy_of = '
0'
and Total_Energy < E_threshold
then
612 if Fail_overflow = '
0'
then
614 if (Condition_Energy < Thresholds
(0) or Thresholds_overflows
(0) = '
1'
) then
616 elsif (Condition_Energy < Thresholds
(1) or Thresholds_overflows
(1) = '
1'
) then
618 elsif (Condition_Energy < Thresholds
(2) or Thresholds_overflows
(2) = '
1'
) then
634 end function EvaluateCondition;
637 function to_SuperCellArray (X : TriggerTowers)
return DataWords
is
638 variable Y : DataWords
(98 downto 0);
640 Y
(0) := X
(0).Layer0
(0);
641 Y
(1) := X
(1).Layer0
(0);
642 Y
(2) := X
(2).Layer0
(0);
643 Y
(3) := X
(3).Layer0
(0);
644 Y
(4) := X
(4).Layer0
(0);
645 Y
(5) := X
(5).Layer0
(0);
646 Y
(6) := X
(6).Layer0
(0);
647 Y
(7) := X
(7).Layer0
(0);
648 Y
(8) := X
(8).Layer0
(0);
649 Y
(9) := X
(0).Layer1
(0);
650 Y
(10) := X
(0).Layer1
(1);
651 Y
(11) := X
(0).Layer1
(2);
652 Y
(12) := X
(0).Layer1
(3);
653 Y
(13) := X
(1).Layer1
(0);
654 Y
(14) := X
(1).Layer1
(1);
655 Y
(15) := X
(1).Layer1
(2);
656 Y
(16) := X
(1).Layer1
(3);
657 Y
(17) := X
(2).Layer1
(0);
658 Y
(18) := X
(2).Layer1
(1);
659 Y
(19) := X
(2).Layer1
(2);
660 Y
(20) := X
(2).Layer1
(3);
661 Y
(21) := X
(3).Layer1
(0);
662 Y
(22) := X
(3).Layer1
(1);
663 Y
(23) := X
(3).Layer1
(2);
664 Y
(24) := X
(3).Layer1
(3);
665 Y
(25) := X
(4).Layer1
(0);
666 Y
(26) := X
(4).Layer1
(1);
667 Y
(27) := X
(4).Layer1
(2);
668 Y
(28) := X
(4).Layer1
(3);
669 Y
(29) := X
(5).Layer1
(0);
670 Y
(30) := X
(5).Layer1
(1);
671 Y
(31) := X
(5).Layer1
(2);
672 Y
(32) := X
(5).Layer1
(3);
673 Y
(33) := X
(6).Layer1
(0);
674 Y
(34) := X
(6).Layer1
(1);
675 Y
(35) := X
(6).Layer1
(2);
676 Y
(36) := X
(6).Layer1
(3);
677 Y
(37) := X
(7).Layer1
(0);
678 Y
(38) := X
(7).Layer1
(1);
679 Y
(39) := X
(7).Layer1
(2);
680 Y
(40) := X
(7).Layer1
(3);
681 Y
(41) := X
(8).Layer1
(0);
682 Y
(42) := X
(8).Layer1
(1);
683 Y
(43) := X
(8).Layer1
(2);
684 Y
(44) := X
(8).Layer1
(3);
685 Y
(45) := X
(0).Layer2
(0);
686 Y
(46) := X
(0).Layer2
(1);
687 Y
(47) := X
(0).Layer2
(2);
688 Y
(48) := X
(0).Layer2
(3);
689 Y
(49) := X
(1).Layer2
(0);
690 Y
(50) := X
(1).Layer2
(1);
691 Y
(51) := X
(1).Layer2
(2);
692 Y
(52) := X
(1).Layer2
(3);
693 Y
(53) := X
(2).Layer2
(0);
694 Y
(54) := X
(2).Layer2
(1);
695 Y
(55) := X
(2).Layer2
(2);
696 Y
(56) := X
(2).Layer2
(3);
697 Y
(57) := X
(3).Layer2
(0);
698 Y
(58) := X
(3).Layer2
(1);
699 Y
(59) := X
(3).Layer2
(2);
700 Y
(60) := X
(3).Layer2
(3);
701 Y
(61) := X
(4).Layer2
(0);
702 Y
(62) := X
(4).Layer2
(1);
703 Y
(63) := X
(4).Layer2
(2);
704 Y
(64) := X
(4).Layer2
(3);
705 Y
(65) := X
(5).Layer2
(0);
706 Y
(66) := X
(5).Layer2
(1);
707 Y
(67) := X
(5).Layer2
(2);
708 Y
(68) := X
(5).Layer2
(3);
709 Y
(69) := X
(6).Layer2
(0);
710 Y
(70) := X
(6).Layer2
(1);
711 Y
(71) := X
(6).Layer2
(2);
712 Y
(72) := X
(6).Layer2
(3);
713 Y
(73) := X
(7).Layer2
(0);
714 Y
(74) := X
(7).Layer2
(1);
715 Y
(75) := X
(7).Layer2
(2);
716 Y
(76) := X
(7).Layer2
(3);
717 Y
(77) := X
(8).Layer2
(0);
718 Y
(78) := X
(8).Layer2
(1);
719 Y
(79) := X
(8).Layer2
(2);
720 Y
(80) := X
(8).Layer2
(3);
721 Y
(81) := X
(0).Layer3
(0);
722 Y
(82) := X
(1).Layer3
(0);
723 Y
(83) := X
(2).Layer3
(0);
724 Y
(84) := X
(3).Layer3
(0);
725 Y
(85) := X
(4).Layer3
(0);
726 Y
(86) := X
(5).Layer3
(0);
727 Y
(87) := X
(6).Layer3
(0);
728 Y
(88) := X
(7).Layer3
(0);
729 Y
(89) := X
(8).Layer3
(0);
730 Y
(90) := X
(0).Hadron
(0);
731 Y
(91) := X
(1).Hadron
(0);
732 Y
(92) := X
(2).Hadron
(0);
733 Y
(93) := X
(3).Hadron
(0);
734 Y
(94) := X
(4).Hadron
(0);
735 Y
(95) := X
(5).Hadron
(0);
736 Y
(96) := X
(6).Hadron
(0);
737 Y
(97) := X
(7).Hadron
(0);
738 Y
(98) := X
(8).Hadron
(0);
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.
std_logic_vector( OUT_XTOB_WIDTH- 1 downto 0) AlgoXTriggerObject
Algorithm Extended Trigger Object XTOB.
( OUTPUT_TOBS- 1 downto 0) AlgoXTriggerObject AlgoXOutput
Algorithm XOUTPUT port.
integer := 5 HADRONIC_POSITION_BIT_START
000 Centre, 001 Near -eta, 010 Near +eta, 011 Far -eta, 100 Far +eta