eFEX firmware  1.7.3
ATLAS l1-calo - electron and tau feature extraction firmware for eFEX boards

Back to eFEX documentation
egInputMultiplexer.vhd
Go to the documentation of this file.
1 
11 
12 library IEEE;
13 use IEEE.STD_LOGIC_1164.all;
14 use IEEE.NUMERIC_STD.all;
15 library work;
16 use work.DataTypes.all;
17 
20  port (
21  CLK : in std_logic;
22 
23  IN_glob_Position : in AlgoRegister := (others => '0');
24 
25  IN_Seed : in std_logic_vector(1 downto 0);
26  IN_UpNotDown : in std_logic;
27  IN_Towers : in TriggerTowers(8 downto 0);
28 
29  OUT_EnergyL0 : out DataWords(1 downto 0);
30  OUT_EnergyL1 : out DataWords(5 downto 0);
31  OUT_EnergyL2 : out DataWords(5 downto 0);
32  OUT_EnergyL3 : out DataWords(1 downto 0);
33 
34  OUT_REtaCoreData : out DataWords(5 downto 0);
35  OUT_REtaEnvData : out DataWords(14 downto 0);
36 
37  OUT_WsCoreData : out DataWords(11 downto 0);
38  OUT_WsEnvData : out DataWords(14 downto 0);
39 
40  OUT_HadCoreData : out DataWords(17 downto 0);
41  OUT_HadEnvDataL1 : out DataWords(5 downto 0);
42  OUT_HadEnvDataL2 : out DataWords(5 downto 0);
43  OUT_HadEnvDataL03 : out DataWords(1 downto 0)
44  );
46 
48 architecture Behavioral of egInputMultiplexer is
49  signal Selector : std_logic_vector(2 downto 0);
50  signal ShiftTowers : TriggerTowers(8 downto 0) := (others => ZERO_TRIGGER_TOWER);
51  signal ShiftTowers2 : TriggerTowers(8 downto 0) := (others => ZERO_TRIGGER_TOWER);
52 
53 
54  signal OutEnergyL0 : DataWords(OUT_EnergyL0'range) := (others => (others => '0'));
55  signal OutEnergyL1 : DataWords(OUT_EnergyL1'range) := (others => (others => '0'));
56  signal OutEnergyL2 : DataWords(OUT_EnergyL2'range) := (others => (others => '0'));
57  signal OutEnergyL3 : DataWords(OUT_EnergyL3'range) := (others => (others => '0'));
58 
59  signal OutREtaCoreData : DataWords(OUT_REtaCoreData'range) := (others => (others => '0'));
60  signal OutREtaEnvData : DataWords(OUT_REtaEnvData'range) := (others => (others => '0'));
61 
62  signal OutWsCoreData : DataWords(OUT_WsCoreData'range) := (others => (others => '0'));
63  signal OutWsEnvData : DataWords(OUT_WsEnvData'range) := (others => (others => '0'));
64 
65  signal OutHadCoreData : DataWords(OUT_HadCoreData'range) := (others => (others => '0'));
66  signal OutHadEnvDataL1 : DataWords(OUT_HadEnvDataL1'range) := (others => (others => '0'));
67  signal OutHadEnvDataL2 : DataWords(OUT_HadEnvDataL2'range) := (others => (others => '0'));
68  signal OutHadEnvDataL03 : DataWords(OUT_HadEnvDataL03'range) := (others => (others => '0'));
69 
70  signal Edge : std_logic;
71  signal selector2 : std_logic_vector(1 downto 0);
72 
73 begin
74  Edge <= IN_glob_Position(EM_POSITION_ETA_ON_EDGE);
75 
76  Selector <= IN_UpNotDown & IN_Seed;
77  Selector2 <= IN_UpNotDown & Edge;
78 
79  process (CLK)
80  begin
81  if rising_edge(CLK) then
82  -- Pipeline (a delay of 2 is needed to mach the SeedFinder)
83  ShiftTowers2 <= IN_Towers;
84  ShiftTowers <= ShiftTowers2;
85 
86  -- Multiplexer
87 
88  -------------------------------------------------------------------------------
89  -- Energy L0
90  -------------------------------------------------------------------------------
91 
92  case Selector2 is -- UpNotDown Edge
93  -- Up
94  when "11" => --up
95  OutEnergyL0 <= (0 => ShiftTowers(4).Layer0(0), 1 => ShiftTowers(7).Layer0(0));
96 
97  when "01" =>
98  OutEnergyL0 <= (0 => ShiftTowers(4).Layer0(0), 1 => ShiftTowers(1).Layer0(0));
99 
100  when others => --down
101  OutEnergyL0 <= (0 => ShiftTowers(4).Layer0(0), 1 => (others => '0'));
102  end case;
103 
104  -------------------------------------------------------------------------------
105  -- Energy L1
106  -------------------------------------------------------------------------------
107  case Selector is
108  when "100" => --up
109  OutEnergyL1 <= (1 downto 0 => ShiftTowers(4).Layer1(1 downto 0), 2 => ShiftTowers(3).Layer1(3),
110  4 downto 3 => ShiftTowers(7).Layer1(1 downto 0), 5 => ShiftTowers(6).Layer1(3));
111  when "101" =>
112  OutEnergyL1 <= (2 downto 0 => ShiftTowers(4).Layer1(2 downto 0),
113  5 downto 3 => ShiftTowers(7).Layer1(2 downto 0));
114  when "110" =>
115  OutEnergyL1 <= (2 downto 0 => ShiftTowers(4).Layer1(3 downto 1),
116  5 downto 3 => ShiftTowers(7).Layer1(3 downto 1));
117 
118  when "111" => --111
119  OutEnergyL1 <= (1 downto 0 => ShiftTowers(4).Layer1(3 downto 2), 2 => ShiftTowers(5).Layer1(0),
120  4 downto 3 => ShiftTowers(7).Layer1(3 downto 2), 5 => ShiftTowers(8).Layer1(0));
121 
122  when "000" => --down
123  OutEnergyL1 <= (1 downto 0 => ShiftTowers(4).Layer1(1 downto 0), 2 => ShiftTowers(3).Layer1(3),
124  4 downto 3 => ShiftTowers(1).Layer1(1 downto 0), 5 => ShiftTowers(0).Layer1(3));
125  when "001" =>
126  OutEnergyL1 <= (2 downto 0 => ShiftTowers(4).Layer1(2 downto 0),
127  5 downto 3 => ShiftTowers(1).Layer1(2 downto 0));
128  when "010" =>
129  OutEnergyL1 <= (2 downto 0 => ShiftTowers(4).Layer1(3 downto 1),
130  5 downto 3 => ShiftTowers(1).Layer1(3 downto 1));
131 
132  when others => --011
133  OutEnergyL1 <= (1 downto 0 => ShiftTowers(4).Layer1(3 downto 2), 2 => ShiftTowers(5).Layer1(0),
134  4 downto 3 => ShiftTowers(1).Layer1(3 downto 2), 5 => ShiftTowers(2).Layer1(0));
135 
136  end case;
137 
138  -------------------------------------------------------------------------------
139  -- Energy L2
140  -------------------------------------------------------------------------------
141  case Selector is
142  when "100" => --up
143  OutEnergyL2 <= (1 downto 0 => ShiftTowers(4).Layer2(1 downto 0), 2 => ShiftTowers(3).Layer2(3),
144  4 downto 3 => ShiftTowers(7).Layer2(1 downto 0), 5 => ShiftTowers(6).Layer2(3));
145  when "101" =>
146  OutEnergyL2 <= (2 downto 0 => ShiftTowers(4).Layer2(2 downto 0),
147  5 downto 3 => ShiftTowers(7).Layer2(2 downto 0));
148  when "110" =>
149  OutEnergyL2 <= (2 downto 0 => ShiftTowers(4).Layer2(3 downto 1),
150  5 downto 3 => ShiftTowers(7).Layer2(3 downto 1));
151 
152  when "111" => --111
153  OutEnergyL2 <= (1 downto 0 => ShiftTowers(4).Layer2(3 downto 2), 2 => ShiftTowers(5).Layer2(0),
154  4 downto 3 => ShiftTowers(7).Layer2(3 downto 2), 5 => ShiftTowers(8).Layer2(0));
155 
156  when "000" => --down
157  OutEnergyL2 <= (1 downto 0 => ShiftTowers(4).Layer2(1 downto 0), 2 => ShiftTowers(3).Layer2(3),
158  4 downto 3 => ShiftTowers(1).Layer2(1 downto 0), 5 => ShiftTowers(0).Layer2(3));
159  when "001" =>
160  OutEnergyL2 <= (2 downto 0 => ShiftTowers(4).Layer2(2 downto 0),
161  5 downto 3 => ShiftTowers(1).Layer2(2 downto 0));
162  when "010" =>
163  OutEnergyL2 <= (2 downto 0 => ShiftTowers(4).Layer2(3 downto 1),
164  5 downto 3 => ShiftTowers(1).Layer2(3 downto 1));
165 
166  when others => --011
167  OutEnergyL2 <= (1 downto 0 => ShiftTowers(4).Layer2(3 downto 2), 2 => ShiftTowers(5).Layer2(0),
168  4 downto 3 => ShiftTowers(1).Layer2(3 downto 2), 5 => ShiftTowers(2).Layer2(0));
169  end case;
170 
171  -----------------------------------------------------------------------
172  -- Energy L3
173  -----------------------------------------------------------------------
174 
175  case IN_UpNotDown is
176  -- Up
177  when '1' => --up
178  OutEnergyL3 <= (0 => ShiftTowers(4).Layer3(0), 1 => ShiftTowers(7).Layer3(0));
179 
180  when others => --down
181  OutEnergyL3 <= (0 => ShiftTowers(4).Layer3(0), 1 => ShiftTowers(1).Layer3(0));
182 
183  end case;
184 
185 
186  -----------------------------------------------------------------------
187  -- REta Core Data
188  -----------------------------------------------------------------------
189  case Selector is
190  -- Up
191  when "100" => --up
192  OutREtaCoreData <= (0 => ShiftTowers(4).Layer2(1), 1 => ShiftTowers(4).Layer2(0), 2 => ShiftTowers(3).Layer2(3),
193  3 => ShiftTowers(7).Layer2(1), 4 => ShiftTowers(7).Layer2(0), 5 => ShiftTowers(6).Layer2(3));
194  when "101" =>
195  OutREtaCoreData <= (0 => ShiftTowers(4).Layer2(2), 1 => ShiftTowers(4).Layer2(1), 2 => ShiftTowers(4).Layer2(0),
196  3 => ShiftTowers(7).Layer2(2), 4 => ShiftTowers(7).Layer2(1), 5 => ShiftTowers(7).Layer2(0));
197  when "110" =>
198  OutREtaCoreData <= (0 => ShiftTowers(4).Layer2(3), 1 => ShiftTowers(4).Layer2(2), 2 => ShiftTowers(4).Layer2(1),
199  3 => ShiftTowers(7).Layer2(3), 4 => ShiftTowers(7).Layer2(2), 5 => ShiftTowers(7).Layer2(1));
200  when "111" =>
201  OutREtaCoreData <= (0 => ShiftTowers(5).Layer2(0), 1 => ShiftTowers(4).Layer2(3), 2 => ShiftTowers(4).Layer2(2),
202  3 => ShiftTowers(8).Layer2(0), 4 => ShiftTowers(7).Layer2(3), 5 => ShiftTowers(7).Layer2(2));
203  when "000" => --down
204  OutREtaCoreData <= (0 => ShiftTowers(4).Layer2(1), 1 => ShiftTowers(4).Layer2(0), 2 => ShiftTowers(3).Layer2(3),
205  3 => ShiftTowers(1).Layer2(1), 4 => ShiftTowers(1).Layer2(0), 5 => ShiftTowers(0).Layer2(3));
206  when "001" =>
207  OutREtaCoreData <= (0 => ShiftTowers(4).Layer2(2), 1 => ShiftTowers(4).Layer2(1), 2 => ShiftTowers(4).Layer2(0),
208  3 => ShiftTowers(1).Layer2(2), 4 => ShiftTowers(1).Layer2(1), 5 => ShiftTowers(1).Layer2(0));
209  when "010" =>
210  OutREtaCoreData <= (0 => ShiftTowers(4).Layer2(3), 1 => ShiftTowers(4).Layer2(2), 2 => ShiftTowers(4).Layer2(1),
211  3 => ShiftTowers(1).Layer2(3), 4 => ShiftTowers(1).Layer2(2), 5 => ShiftTowers(1).Layer2(1));
212  when others => -- 011
213  OutREtaCoreData <= (0 => ShiftTowers(5).Layer2(0), 1 => ShiftTowers(4).Layer2(3), 2 => ShiftTowers(4).Layer2(2),
214  3 => ShiftTowers(2).Layer2(0), 4 => ShiftTowers(1).Layer2(3), 5 => ShiftTowers(1).Layer2(2));
215  end case;
216 
217 
218  -------------------------------------------------------------------------------
219  -- REta Env Data
220  -------------------------------------------------------------------------------
221  case Selector is
222  -- Up
223  when "100" => --up
224  OutREtaEnvData <= (0 => ShiftTowers(4).Layer2(3), 1 => ShiftTowers(4).Layer2(2), 2 => ShiftTowers(3).Layer2(2), 3 => ShiftTowers(3).Layer2(1),
225  4 => ShiftTowers(7).Layer2(3), 5 => ShiftTowers(7).Layer2(2), 6 => ShiftTowers(6).Layer2(2), 7 => ShiftTowers(6).Layer2(1),
226  8 => ShiftTowers(0).Layer2(1), 9 => ShiftTowers(0).Layer2(2), 10 => ShiftTowers(0).Layer2(3),
227  14 downto 11 => ShiftTowers(1).Layer2);
228 
229  when "101" =>
230  OutREtaEnvData <= (0 => ShiftTowers(5).Layer2(0), 1 => ShiftTowers(4).Layer2(3), 2 => ShiftTowers(3).Layer2(3), 3 => ShiftTowers(3).Layer2(2),
231  4 => ShiftTowers(8).Layer2(0), 5 => ShiftTowers(7).Layer2(3), 6 => ShiftTowers(6).Layer2(3), 7 => ShiftTowers(6).Layer2(2),
232  8 => ShiftTowers(2).Layer2(0), 9 => ShiftTowers(0).Layer2(2), 10 => ShiftTowers(0).Layer2(3),
233  14 downto 11 => ShiftTowers(1).Layer2);
234  when "110" =>
235  OutREtaEnvData <= (0 => ShiftTowers(5).Layer2(1), 1 => ShiftTowers(5).Layer2(0), 2 => ShiftTowers(4).Layer2(0), 3 => ShiftTowers(3).Layer2(3),
236  4 => ShiftTowers(8).Layer2(1), 5 => ShiftTowers(8).Layer2(0), 6 => ShiftTowers(7).Layer2(0), 7 => ShiftTowers(6).Layer2(3),
237  8 => ShiftTowers(2).Layer2(0), 9 => ShiftTowers(2).Layer2(1), 10 => ShiftTowers(0).Layer2(3),
238  14 downto 11 => ShiftTowers(1).Layer2);
239  when "111" =>
240  OutREtaEnvData <= (0 => ShiftTowers(5).Layer2(2), 1 => ShiftTowers(5).Layer2(1), 2 => ShiftTowers(4).Layer2(1), 3 => ShiftTowers(4).Layer2(0),
241  4 => ShiftTowers(8).Layer2(2), 5 => ShiftTowers(8).Layer2(1), 6 => ShiftTowers(7).Layer2(1), 7 => ShiftTowers(7).Layer2(0),
242  8 => ShiftTowers(2).Layer2(0), 9 => ShiftTowers(2).Layer2(1), 10 => ShiftTowers(2).Layer2(2),
243  14 downto 11 => ShiftTowers(1).Layer2);
244 
245  when "000" => --down
246  OutREtaEnvData <= (0 => ShiftTowers(4).Layer2(3), 1 => ShiftTowers(4).Layer2(2), 2 => ShiftTowers(3).Layer2(2), 3 => ShiftTowers(3).Layer2(1),
247  4 => ShiftTowers(1).Layer2(3), 5 => ShiftTowers(1).Layer2(2), 6 => ShiftTowers(0).Layer2(2), 7 => ShiftTowers(0).Layer2(1),
248  8 => ShiftTowers(6).Layer2(1), 9 => ShiftTowers(6).Layer2(2), 10 => ShiftTowers(6).Layer2(3),
249  14 downto 11 => ShiftTowers(7).Layer2);
250  when "001" =>
251  OutREtaEnvData <= (0 => ShiftTowers(5).Layer2(0), 1 => ShiftTowers(4).Layer2(3), 2 => ShiftTowers(3).Layer2(3), 3 => ShiftTowers(3).Layer2(2),
252  4 => ShiftTowers(2).Layer2(0), 5 => ShiftTowers(1).Layer2(3), 6 => ShiftTowers(0).Layer2(3), 7 => ShiftTowers(0).Layer2(2),
253  8 => ShiftTowers(8).Layer2(0), 9 => ShiftTowers(6).Layer2(2), 10 => ShiftTowers(6).Layer2(3),
254  14 downto 11 => ShiftTowers(7).Layer2);
255 
256  when "010" =>
257  OutREtaEnvData <= (0 => ShiftTowers(5).Layer2(1), 1 => ShiftTowers(5).Layer2(0), 2 => ShiftTowers(4).Layer2(0), 3 => ShiftTowers(3).Layer2(3),
258  4 => ShiftTowers(2).Layer2(1), 5 => ShiftTowers(2).Layer2(0), 6 => ShiftTowers(1).Layer2(0), 7 => ShiftTowers(0).Layer2(3),
259  8 => ShiftTowers(8).Layer2(0), 9 => ShiftTowers(8).Layer2(1), 10 => ShiftTowers(6).Layer2(3),
260  14 downto 11 => ShiftTowers(7).Layer2);
261 
262 
263  when others => -- 011
264  OutREtaEnvData <= (0 => ShiftTowers(5).Layer2(2), 1 => ShiftTowers(5).Layer2(1), 2 => ShiftTowers(4).Layer2(1), 3 => ShiftTowers(4).Layer2(0),
265  4 => ShiftTowers(2).Layer2(2), 5 => ShiftTowers(2).Layer2(1), 6 => ShiftTowers(1).Layer2(1), 7 => ShiftTowers(1).Layer2(0),
266  8 => ShiftTowers(8).Layer2(0), 9 => ShiftTowers(8).Layer2(1), 10 => ShiftTowers(8).Layer2(2),
267  14 downto 11 => ShiftTowers(7).Layer2);
268  end case;
269 
270  -------------------------------------------------------------------------------
271  -- Ws Core Data
272  -------------------------------------------------------------------------------
273  case IN_Seed is
274  --up
275  when "00" =>
276  OutWsCoreData <= (0 => BitLeftShift(ShiftTowers(3).Layer1(2), 2), 1 => ShiftTowers(3).Layer1(3), 2 => ShiftTowers(4).Layer1(1), 3 => BitLeftShift(ShiftTowers(4).Layer1(2), 2),
277  4 => BitLeftShift(ShiftTowers(6).Layer1(2), 2), 5 => ShiftTowers(6).Layer1(3), 6 => ShiftTowers(7).Layer1(1), 7 => BitLeftShift(ShiftTowers(7).Layer1(2), 2),
278  8 => BitLeftShift(ShiftTowers(0).Layer1(2), 2), 9 => ShiftTowers(0).Layer1(3), 10 => ShiftTowers(1).Layer1(1), 11 => BitLeftShift(ShiftTowers(1).Layer1(2), 2));
279 
280  when "01" =>
281  OutWsCoreData <= (0 => BitLeftShift(ShiftTowers(3).Layer1(3), 2), 1 => ShiftTowers(4).Layer1(0), 2 => ShiftTowers(4).Layer1(2), 3 => BitLeftShift(ShiftTowers(4).Layer1(3), 2),
282  4 => BitLeftShift(ShiftTowers(6).Layer1(3), 2), 5 => ShiftTowers(7).Layer1(0), 6 => ShiftTowers(7).Layer1(2), 7 => BitLeftShift(ShiftTowers(7).Layer1(3), 2),
283  8 => BitLeftShift(ShiftTowers(0).Layer1(3), 2), 9 => ShiftTowers(1).Layer1(0), 10 => ShiftTowers(1).Layer1(2), 11 => BitLeftShift(ShiftTowers(1).Layer1(3), 2));
284  when "10" =>
285  OutWsCoreData <= (0 => BitLeftShift(ShiftTowers(4).Layer1(0), 2), 1 => ShiftTowers(4).Layer1(1), 2 => ShiftTowers(4).Layer1(3), 3 => BitLeftShift(ShiftTowers(5).Layer1(0), 2),
286  4 => BitLeftShift(ShiftTowers(7).Layer1(0), 2), 5 => ShiftTowers(7).Layer1(1), 6 => ShiftTowers(7).Layer1(3), 7 => BitLeftShift(ShiftTowers(8).Layer1(0), 2),
287  8 => BitLeftShift(ShiftTowers(1).Layer1(0), 2), 9 => ShiftTowers(1).Layer1(1), 10 => ShiftTowers(1).Layer1(3), 11 => BitLeftShift(ShiftTowers(2).Layer1(0), 2));
288  when others => -- "11"
289  OutWsCoreData <= (0 => BitLeftShift(ShiftTowers(4).Layer1(1), 2), 1 => ShiftTowers(4).Layer1(2), 2 => ShiftTowers(5).Layer1(0), 3 => BitLeftShift(ShiftTowers(5).Layer1(1), 2),
290  4 => BitLeftShift(ShiftTowers(7).Layer1(1), 2), 5 => ShiftTowers(7).Layer1(2), 6 => ShiftTowers(8).Layer1(0), 7 => BitLeftShift(ShiftTowers(8).Layer1(1), 2),
291  8 => BitLeftShift(ShiftTowers(1).Layer1(1), 2), 9 => ShiftTowers(1).Layer1(2), 10 => ShiftTowers(2).Layer1(0), 11 => BitLeftShift(ShiftTowers(2).Layer1(1), 2));
292 
293  end case;
294 
295  -------------------------------------------------------------------------------
296  -- Ws Env Data
297  -------------------------------------------------------------------------------
298  case IN_Seed is
299  when "00" =>
300  OutWsEnvData <= (0 => ShiftTowers(3).Layer1(2), 1 => ShiftTowers(3).Layer1(3), 2 => ShiftTowers(4).Layer1(0),
301  3 => ShiftTowers(4).Layer1(1), 4 => ShiftTowers(4).Layer1(2),
302  5 => ShiftTowers(6).Layer1(2), 6 => ShiftTowers(6).Layer1(3), 7 => ShiftTowers(7).Layer1(0),
303  8 => ShiftTowers(7).Layer1(1), 9 => ShiftTowers(7).Layer1(2),
304  10 => ShiftTowers(0).Layer1(2), 11 => ShiftTowers(0).Layer1(3), 12 => ShiftTowers(1).Layer1(0),
305  13 => ShiftTowers(1).Layer1(1), 14 => ShiftTowers(1).Layer1(2)
306  );
307  when "01" =>
308  OutWsEnvData <= (0 => ShiftTowers(3).Layer1(3), 1 => ShiftTowers(4).Layer1(0), 2 => ShiftTowers(4).Layer1(1),
309  3 => ShiftTowers(4).Layer1(2), 4 => ShiftTowers(4).Layer1(3),
310  5 => ShiftTowers(6).Layer1(3), 6 => ShiftTowers(7).Layer1(0), 7 => ShiftTowers(7).Layer1(1),
311  8 => ShiftTowers(7).Layer1(2), 9 => ShiftTowers(7).Layer1(3),
312  10 => ShiftTowers(0).Layer1(3), 11 => ShiftTowers(1).Layer1(0), 12 => ShiftTowers(1).Layer1(1),
313  13 => ShiftTowers(1).Layer1(2), 14 => ShiftTowers(1).Layer1(3)
314  );
315  when "10" =>
316  OutWsEnvData <= (0 => ShiftTowers(4).Layer1(0), 1 => ShiftTowers(4).Layer1(1), 2 => ShiftTowers(4).Layer1(2),
317  3 => ShiftTowers(4).Layer1(3), 4 => ShiftTowers(5).Layer1(0),
318  5 => ShiftTowers(7).Layer1(0), 6 => ShiftTowers(7).Layer1(1), 7 => ShiftTowers(7).Layer1(2),
319  8 => ShiftTowers(7).Layer1(3), 9 => ShiftTowers(8).Layer1(0),
320  10 => ShiftTowers(1).Layer1(0), 11 => ShiftTowers(1).Layer1(1), 12 => ShiftTowers(1).Layer1(2),
321  13 => ShiftTowers(1).Layer1(3), 14 => ShiftTowers(2).Layer1(0)
322  );
323  when others =>
324  OutWsEnvData <= (0 => ShiftTowers(4).Layer1(1), 1 => ShiftTowers(4).Layer1(2), 2 => ShiftTowers(4).Layer1(3),
325  3 => ShiftTowers(5).Layer1(0), 4 => ShiftTowers(5).Layer1(1),
326  5 => ShiftTowers(7).Layer1(1), 6 => ShiftTowers(7).Layer1(2), 7 => ShiftTowers(7).Layer1(3),
327  8 => ShiftTowers(8).Layer1(0), 9 => ShiftTowers(8).Layer1(1),
328  10 => ShiftTowers(1).Layer1(1), 11 => ShiftTowers(1).Layer1(2), 12 => ShiftTowers(1).Layer1(3),
329  13 => ShiftTowers(2).Layer1(0), 14 => ShiftTowers(2).Layer1(1)
330  );
331  end case;
332 
333 
334  -------------------------------------------------------------------------------
335  -- HadCore Data
336  -------------------------------------------------------------------------------
337  -- out of order to select only the cross
338  OutHadCoreData <= (16 => ShiftTowers(6).Layer3(0), 11 => ShiftTowers(7).Layer3(0), 17 => ShiftTowers(8).Layer3(0),
339  12 => ShiftTowers(3).Layer3(0), 13 => ShiftTowers(4).Layer3(0), 09 => ShiftTowers(5).Layer3(0),
340  14 => ShiftTowers(0).Layer3(0), 10 => ShiftTowers(1).Layer3(0), 15 => ShiftTowers(2).Layer3(0),
341  06 => ShiftTowers(6).Hadron(0), 07 => ShiftTowers(7).Hadron(0), 08 => ShiftTowers(8).Hadron(0),
342  03 => ShiftTowers(3).Hadron(0), 04 => ShiftTowers(4).Hadron(0), 05 => ShiftTowers(5).Hadron(0),
343  00 => ShiftTowers(0).Hadron(0), 01 => ShiftTowers(1).Hadron(0), 02 => ShiftTowers(2).Hadron(0));
344 
345  -------------------------------------------------------------------------------
346  -- HadCore Env L1
347  -------------------------------------------------------------------------------
348  case Selector is
349  when "000" =>
350  OutHadEnvDataL1 <= (3 => ShiftTowers(3).Layer1(3), 4 => ShiftTowers(4).Layer1(0), 5 => ShiftTowers(4).Layer1(1),
351  0 => ShiftTowers(0).Layer1(3), 1 => ShiftTowers(1).Layer1(0), 2 => ShiftTowers(1).Layer1(1));
352 
353  when "001" =>
354  OutHadEnvDataL1 <= (3 => ShiftTowers(4).Layer1(0), 4 => ShiftTowers(4).Layer1(1), 5 => ShiftTowers(4).Layer1(2),
355  0 => ShiftTowers(1).Layer1(0), 1 => ShiftTowers(1).Layer1(1), 2 => ShiftTowers(1).Layer1(2));
356  when "010" =>
357  OutHadEnvDataL1 <= (3 => ShiftTowers(4).Layer1(1), 4 => ShiftTowers(4).Layer1(2), 5 => ShiftTowers(4).Layer1(3),
358  0 => ShiftTowers(1).Layer1(1), 1 => ShiftTowers(1).Layer1(2), 2 => ShiftTowers(1).Layer1(3));
359 
360  when "011" =>
361  OutHadEnvDataL1 <= (3 => ShiftTowers(5).Layer1(0), 4 => ShiftTowers(4).Layer1(2), 5 => ShiftTowers(4).Layer1(3),
362  0 => ShiftTowers(2).Layer1(0), 1 => ShiftTowers(1).Layer1(2), 2 => ShiftTowers(1).Layer1(3));
363 
364  when "100" =>
365  OutHadEnvDataL1 <= (3 => ShiftTowers(6).Layer1(3), 4 => ShiftTowers(7).Layer1(0), 5 => ShiftTowers(7).Layer1(1),
366  0 => ShiftTowers(3).Layer1(3), 1 => ShiftTowers(4).Layer1(0), 2 => ShiftTowers(4).Layer1(1));
367 
368 
369  when "101" =>
370  OutHadEnvDataL1 <= (3 => ShiftTowers(7).Layer1(0), 4 => ShiftTowers(7).Layer1(1), 5 => ShiftTowers(7).Layer1(2),
371  0 => ShiftTowers(4).Layer1(0), 1 => ShiftTowers(4).Layer1(1), 2 => ShiftTowers(4).Layer1(2));
372 
373  when "110" =>
374  OutHadEnvDataL1 <= (3 => ShiftTowers(7).Layer1(1), 4 => ShiftTowers(7).Layer1(2), 5 => ShiftTowers(7).Layer1(3),
375  0 => ShiftTowers(4).Layer1(1), 1 => ShiftTowers(4).Layer1(2), 2 => ShiftTowers(4).Layer1(3));
376 
377  when others => --"111"
378  OutHadEnvDataL1 <= (3 => ShiftTowers(8).Layer1(0), 4 => ShiftTowers(7).Layer1(2), 5 => ShiftTowers(7).Layer1(3),
379  0 => ShiftTowers(5).Layer1(0), 1 => ShiftTowers(4).Layer1(2), 2 => ShiftTowers(4).Layer1(3));
380 
381  end case;
382 
383  -------------------------------------------------------------------------------
384  -- HadCore Env L2
385  -------------------------------------------------------------------------------
386  case Selector is
387  when "000" =>
388  OutHadEnvDataL2 <= (3 => ShiftTowers(3).Layer2(3), 4 => ShiftTowers(4).Layer2(0), 5 => ShiftTowers(4).Layer2(1),
389  0 => ShiftTowers(0).Layer2(3), 1 => ShiftTowers(1).Layer2(0), 2 => ShiftTowers(1).Layer2(1));
390 
391  when "001" =>
392  OutHadEnvDataL2 <= (3 => ShiftTowers(4).Layer2(0), 4 => ShiftTowers(4).Layer2(1), 5 => ShiftTowers(4).Layer2(2),
393  0 => ShiftTowers(1).Layer2(0), 1 => ShiftTowers(1).Layer2(1), 2 => ShiftTowers(1).Layer2(2));
394  when "010" =>
395  OutHadEnvDataL2 <= (3 => ShiftTowers(4).Layer2(1), 4 => ShiftTowers(4).Layer2(2), 5 => ShiftTowers(4).Layer2(3),
396  0 => ShiftTowers(1).Layer2(1), 1 => ShiftTowers(1).Layer2(2), 2 => ShiftTowers(1).Layer2(3));
397 
398  when "011" =>
399  OutHadEnvDataL2 <= (3 => ShiftTowers(5).Layer2(0), 4 => ShiftTowers(4).Layer2(2), 5 => ShiftTowers(4).Layer2(3),
400  0 => ShiftTowers(2).Layer2(0), 1 => ShiftTowers(1).Layer2(2), 2 => ShiftTowers(1).Layer2(3));
401 
402  when "100" =>
403  OutHadEnvDataL2 <= (3 => ShiftTowers(6).Layer2(3), 4 => ShiftTowers(7).Layer2(0), 5 => ShiftTowers(7).Layer2(1),
404  0 => ShiftTowers(3).Layer2(3), 1 => ShiftTowers(4).Layer2(0), 2 => ShiftTowers(4).Layer2(1));
405 
406 
407  when "101" =>
408  OutHadEnvDataL2 <= (3 => ShiftTowers(7).Layer2(0), 4 => ShiftTowers(7).Layer2(1), 5 => ShiftTowers(7).Layer2(2),
409  0 => ShiftTowers(4).Layer2(0), 1 => ShiftTowers(4).Layer2(1), 2 => ShiftTowers(4).Layer2(2));
410 
411  when "110" =>
412  OutHadEnvDataL2 <= (3 => ShiftTowers(7).Layer2(1), 4 => ShiftTowers(7).Layer2(2), 5 => ShiftTowers(7).Layer2(3),
413  0 => ShiftTowers(4).Layer2(1), 1 => ShiftTowers(4).Layer2(2), 2 => ShiftTowers(4).Layer2(3));
414 
415  when others => --"111"
416  OutHadEnvDataL2 <= (3 => ShiftTowers(8).Layer2(0), 4 => ShiftTowers(7).Layer2(2), 5 => ShiftTowers(7).Layer2(3),
417  0 => ShiftTowers(5).Layer2(0), 1 => ShiftTowers(4).Layer2(2), 2 => ShiftTowers(4).Layer2(3));
418 
419  end case;
420 
421  -----------------------------------------------------------------------
422  -- HadCore Env L0 and L3
423  -----------------------------------------------------------------------
424  case IN_UpNotDown is
425  when '0' =>
426  OutHadEnvDataL03 <= (0 => ShiftTowers(1).Layer0(0), 1 => ShiftTowers(4).Layer0(0));
427  when others =>
428  OutHadEnvDataL03 <= (0 => ShiftTowers(7).Layer0(0), 1 => ShiftTowers(4).Layer0(0));
429  end case;
430  end if;
431  end process;
432 
433  OUT_EnergyL0 <= OutEnergyL0;
434  OUT_EnergyL1 <= OutEnergyL1;
435  OUT_EnergyL2 <= OutEnergyL2;
436  OUT_EnergyL3 <= OutEnergyL3;
437 
438  OUT_REtaCoreData <= OutREtaCoreData;
439  OUT_REtaEnvData <= OutREtaEnvData;
440 
441  OUT_WsCoreData <= OutWsCoreData;
442  OUT_WsEnvData <= OutWsEnvData;
443 
444  OUT_HadCoreData <= OutHadCoreData;
445  OUT_HadEnvDataL1 <= OutHadEnvDataL1;
446  OUT_HadEnvDataL2 <= OutHadEnvDataL2;
447  OUT_HadEnvDataL03 <= OutHadEnvDataL03;
448 
449 
450  end Behavioral;
Input Data Multiplexer for eg: addresses SuperCells to the correct sum area.
Input Data Multiplexer for eg: addresses SuperCells to the correct sum area.
in CLK std_logic
200 MHz clock