source: PROJECT_CORE_MPI/SWITCH_GEN/TRUNK/SCHEDULER5_5.VHD

Last change on this file was 22, checked in by rolagamo, 12 years ago
File size: 17.3 KB
Line 
1---------------------------------------------------------------------------------
2-- Company:
3-- Engineer: KIEGAING EMMANUEL GEL EN 5
4--
5-- Create Date:    03:56:34 05/06/2011
6-- Design Name:
7-- Module Name:    Sheduler - Behavioral
8-- Project Name:
9-- Target Devices:
10-- Tool versions:
11-- Description: Module de l'ordonnanceur du switch crossbar
12-- l'algorithme utilisée est le DPA (diagonal propagation arbiter)
13--
14-- Dependencies:
15--
16-- Revision:
17-- Revision 0.01 - File Created
18-- Additional Comments:
19--
20----------------------------------------------------------------------------------
21library IEEE;
22use IEEE.STD_LOGIC_1164.ALL;
23use IEEE.STD_LOGIC_ARITH.ALL;
24use IEEE.STD_LOGIC_UNSIGNED.ALL;
25--use Work.Sheduler_package.all;
26
27---- Uncomment the following library declaration if instantiating
28---- any Xilinx primitives in this code.
29--library UNISIM;
30--use UNISIM.VComponents.all;
31entity Scheduler5_5 is
32    Port ( Request : in  STD_LOGIC_VECTOR (25 downto 1);
33                   Fifo_full : in STD_LOGIC_VECTOR (5 downto 1);
34           clk : in  STD_LOGIC;
35           reset : in  STD_LOGIC;
36            priority_rotation : in  STD_LOGIC_VECTOR (5 downto 1);
37           port_grant : out  STD_LOGIC_VECTOR (25 downto 1));
38end Scheduler5_5;
39
40architecture Behavioral of Scheduler5_5 is
41--Declaration du types
42--tableau de signaux de connexion des cellules arbitres
43TYPE C_Bar_Signal_Array IS ARRAY(9 downto 1) of STD_LOGIC_VECTOR(5 downto 1);
44-- declaration du composant cellule d'arbitrage
45Component Arbiter
46  PORT (P, Fifo_full,Request, West,North : in  STD_LOGIC;
47        Grant,East,South : out  STD_LOGIC );
48End Component;--Signaux de connexion des cellues
49SIGNAL south_2_north :  C_Bar_Signal_Array; -- connexion south north
50SIGNAL east_2_west   :  C_Bar_Signal_Array; -- connexion east west
51SIGNAL Signal_mask      : C_Bar_Signal_Array;-- connexion des masques de priorité
52SIGNAL Signal_grant     : C_Bar_Signal_Array;-- connexion des signaux de validation
53SIGNAL Signal_priority  : STD_LOGIC_VECTOR (9 DOWNTO 1);--signal pour la connection des vecteur de priorité
54SIGNAL High         : std_logic;--niveau pour les cellules des extremités nord et ouest
55 signal grant_latch : std_logic_vector(25 downto 1);
56 signal priority_rotation_en : std_logic;
57 signal Grant ,req_grant:  std_logic_vector(25 downto 1);
58 begin
59
60--validation de la rotation de priorité lorsque aucun port n'emet
61  req_grant<=(request and grant_latch);
62 priority_rotation_en <= '1' when   unsigned(req_grant) = 0 or unsigned(priority_rotation) = 31 else    '0';
63--latch servant qui memorise le signal grant pendant a transmission
64grant_latch_process : process(clk)
65 begin
66  if rising_edge(clk) then
67   if reset = '1' then
68                grant_latch <= (others => '0');
69         elsif priority_rotation_en = '1' then
70           grant_latch <= Grant;
71   end if;
72   end if;
73 end process;
74 port_grant <= grant_latch;
75 Grant(1)  <= Signal_grant(1)(1) or Signal_grant(6)(1); --  Grant(1,1)
76Grant(2)  <= Signal_grant(2)(2) or Signal_grant(7)(2); --  Grant(1,2)
77Grant(3)  <= Signal_grant(3)(3) or Signal_grant(8)(3); --  Grant(1,3)
78Grant(4)  <= Signal_grant(4)(4) or Signal_grant(9)(4); --  Grant(1,4)
79Grant(5)  <= Signal_grant(5)(5) ;                      --  Grant(1,5)
80Grant(6)  <= Signal_grant(2)(1) or Signal_grant(7)(1); --  Grant(2,1)
81Grant(7)  <= Signal_grant(3)(2) or Signal_grant(8)(2); --  Grant(2,2)
82Grant(8)  <= Signal_grant(4)(3) or Signal_grant(9)(3); --  Grant(2,3)
83Grant(9)  <= Signal_grant(5)(4) ;                      --  Grant(2,4)
84Grant(10)  <= Signal_grant(1)(5) or Signal_grant(6)(5); --  Grant(2,5)
85Grant(11)  <= Signal_grant(3)(1) or Signal_grant(8)(1); --  Grant(3,1)
86Grant(12)  <= Signal_grant(4)(2) or Signal_grant(9)(2); --  Grant(3,2)
87Grant(13)  <= Signal_grant(5)(3) ;                      --  Grant(3,3)
88Grant(14)  <= Signal_grant(1)(4) or Signal_grant(6)(4); --  Grant(3,4)
89Grant(15)  <= Signal_grant(2)(5) or Signal_grant(7)(5); --  Grant(3,5)
90Grant(16)  <= Signal_grant(4)(1) or Signal_grant(9)(1); --  Grant(4,1)
91Grant(17)  <= Signal_grant(5)(2) ;                      --  Grant(4,2)
92Grant(18)  <= Signal_grant(1)(3) or Signal_grant(6)(3); --  Grant(4,3)
93Grant(19)  <= Signal_grant(2)(4) or Signal_grant(7)(4); --  Grant(4,4)
94Grant(20)  <= Signal_grant(3)(5) or Signal_grant(8)(5); --  Grant(4,5)
95Grant(21)  <= Signal_grant(5)(1) ;                      --  Grant(5,1)
96Grant(22)  <= Signal_grant(1)(2) or Signal_grant(6)(2); --  Grant(5,2)
97Grant(23)  <= Signal_grant(2)(3) or Signal_grant(7)(3); --  Grant(5,3)
98Grant(24)  <= Signal_grant(3)(4) or Signal_grant(8)(4); --  Grant(5,4)
99Grant(25)  <= Signal_grant(4)(5) or Signal_grant(9)(5); --  Grant(5,5)
100High <= '1';
101
102----instantiations des cellules arbitres et interconnection
103
104-------------------------- Diagonale n° 1
105
106
107Arbiter_1_1 : Arbiter
108
109PORT MAP (Request => Request(1), North => High, West => High, P => Signal_priority(9), Fifo_full => Fifo_full(1), 
110South => south_2_north(1)(1), East => east_2_west(1)(1) , Grant => Signal_grant(1)(1));
111
112Arbiter_1_2 : Arbiter
113
114PORT MAP (Request => Request(22), North => High, West => High, P => Signal_priority(9), Fifo_full => Fifo_full(2), 
115South => south_2_north(1)(2), East => east_2_west(1)(2) , Grant => Signal_grant(1)(2));
116
117Arbiter_1_3 : Arbiter
118
119PORT MAP (Request => Request(18), North => High, West => High, P => Signal_priority(9), Fifo_full => Fifo_full(3), 
120South => south_2_north(1)(3), East => east_2_west(1)(3) , Grant => Signal_grant(1)(3));
121
122Arbiter_1_4 : Arbiter
123
124PORT MAP (Request => Request(14), North => High, West => High, P => Signal_priority(9), Fifo_full => Fifo_full(4), 
125South => south_2_north(1)(4), East => east_2_west(1)(4) , Grant => Signal_grant(1)(4));
126
127Arbiter_1_5 : Arbiter
128
129PORT MAP (Request => Request(10), North => High, West => High, P => Signal_priority(9), Fifo_full => Fifo_full(5), 
130South => south_2_north(1)(5), East => east_2_west(1)(5) , Grant => Signal_grant(1)(5));
131
132-------------------------- Diagonale n° 2
133
134
135Arbiter_2_1 : Arbiter
136
137PORT MAP (Request => Request(6), North => south_2_north(1)(1), West => east_2_west(1)(5), P => Signal_priority(8), Fifo_full => Fifo_full(1), 
138South => south_2_north(2)(1), East => east_2_west(2)(1) , Grant => Signal_grant(2)(1));
139
140Arbiter_2_2 : Arbiter
141
142PORT MAP (Request => Request(2), North => south_2_north(1)(2), West => east_2_west(1)(1), P => Signal_priority(8), Fifo_full => Fifo_full(2), 
143South => south_2_north(2)(2), East => east_2_west(2)(2) , Grant => Signal_grant(2)(2));
144
145Arbiter_2_3 : Arbiter
146
147PORT MAP (Request => Request(23), North => south_2_north(1)(3), West => east_2_west(1)(2), P => Signal_priority(8), Fifo_full => Fifo_full(3), 
148South => south_2_north(2)(3), East => east_2_west(2)(3) , Grant => Signal_grant(2)(3));
149
150Arbiter_2_4 : Arbiter
151
152PORT MAP (Request => Request(19), North => south_2_north(1)(4), West => east_2_west(1)(3), P => Signal_priority(8), Fifo_full => Fifo_full(4), 
153South => south_2_north(2)(4), East => east_2_west(2)(4) , Grant => Signal_grant(2)(4));
154
155Arbiter_2_5 : Arbiter
156
157PORT MAP (Request => Request(15), North => south_2_north(1)(5), West => east_2_west(1)(4), P => Signal_priority(8), Fifo_full => Fifo_full(5), 
158South => south_2_north(2)(5), East => east_2_west(2)(5) , Grant => Signal_grant(2)(5));
159
160-------------------------- Diagonale n° 3
161
162
163Arbiter_3_1 : Arbiter
164
165PORT MAP (Request => Request(11), North => south_2_north(2)(1), West => east_2_west(2)(5), P => Signal_priority(7), Fifo_full => Fifo_full(1), 
166South => south_2_north(3)(1), East => east_2_west(3)(1) , Grant => Signal_grant(3)(1));
167
168Arbiter_3_2 : Arbiter
169
170PORT MAP (Request => Request(7), North => south_2_north(2)(2), West => east_2_west(2)(1), P => Signal_priority(7), Fifo_full => Fifo_full(2), 
171South => south_2_north(3)(2), East => east_2_west(3)(2) , Grant => Signal_grant(3)(2));
172
173Arbiter_3_3 : Arbiter
174
175PORT MAP (Request => Request(3), North => south_2_north(2)(3), West => east_2_west(2)(2), P => Signal_priority(7), Fifo_full => Fifo_full(3), 
176South => south_2_north(3)(3), East => east_2_west(3)(3) , Grant => Signal_grant(3)(3));
177
178Arbiter_3_4 : Arbiter
179
180PORT MAP (Request => Request(24), North => south_2_north(2)(4), West => east_2_west(2)(3), P => Signal_priority(7), Fifo_full => Fifo_full(4), 
181South => south_2_north(3)(4), East => east_2_west(3)(4) , Grant => Signal_grant(3)(4));
182
183Arbiter_3_5 : Arbiter
184
185PORT MAP (Request => Request(20), North => south_2_north(2)(5), West => east_2_west(2)(4), P => Signal_priority(7), Fifo_full => Fifo_full(5), 
186South => south_2_north(3)(5), East => east_2_west(3)(5) , Grant => Signal_grant(3)(5));
187
188-------------------------- Diagonale n° 4
189
190
191Arbiter_4_1 : Arbiter
192
193PORT MAP (Request => Request(16), North => south_2_north(3)(1), West => east_2_west(3)(5), P => Signal_priority(6), Fifo_full => Fifo_full(1), 
194South => south_2_north(4)(1), East => east_2_west(4)(1) , Grant => Signal_grant(4)(1));
195
196Arbiter_4_2 : Arbiter
197
198PORT MAP (Request => Request(12), North => south_2_north(3)(2), West => east_2_west(3)(1), P => Signal_priority(6), Fifo_full => Fifo_full(2), 
199South => south_2_north(4)(2), East => east_2_west(4)(2) , Grant => Signal_grant(4)(2));
200
201Arbiter_4_3 : Arbiter
202
203PORT MAP (Request => Request(8), North => south_2_north(3)(3), West => east_2_west(3)(2), P => Signal_priority(6), Fifo_full => Fifo_full(3), 
204South => south_2_north(4)(3), East => east_2_west(4)(3) , Grant => Signal_grant(4)(3));
205
206Arbiter_4_4 : Arbiter
207
208PORT MAP (Request => Request(4), North => south_2_north(3)(4), West => east_2_west(3)(3), P => Signal_priority(6), Fifo_full => Fifo_full(4), 
209South => south_2_north(4)(4), East => east_2_west(4)(4) , Grant => Signal_grant(4)(4));
210
211Arbiter_4_5 : Arbiter
212
213PORT MAP (Request => Request(25), North => south_2_north(3)(5), West => east_2_west(3)(4), P => Signal_priority(6), Fifo_full => Fifo_full(5), 
214South => south_2_north(4)(5), East => east_2_west(4)(5) , Grant => Signal_grant(4)(5));
215
216-------------------------- Diagonale n° 5
217
218
219Arbiter_5_1 : Arbiter
220
221PORT MAP (Request => Request(21), North => south_2_north(4)(1), West => east_2_west(4)(5), P => Signal_priority(5), Fifo_full => Fifo_full(1), 
222South => south_2_north(5)(1), East => east_2_west(5)(1) , Grant => Signal_grant(5)(1));
223
224Arbiter_5_2 : Arbiter
225
226PORT MAP (Request => Request(17), North => south_2_north(4)(2), West => east_2_west(4)(1), P => Signal_priority(5), Fifo_full => Fifo_full(2), 
227South => south_2_north(5)(2), East => east_2_west(5)(2) , Grant => Signal_grant(5)(2));
228
229Arbiter_5_3 : Arbiter
230
231PORT MAP (Request => Request(13), North => south_2_north(4)(3), West => east_2_west(4)(2), P => Signal_priority(5), Fifo_full => Fifo_full(3), 
232South => south_2_north(5)(3), East => east_2_west(5)(3) , Grant => Signal_grant(5)(3));
233
234Arbiter_5_4 : Arbiter
235
236PORT MAP (Request => Request(9), North => south_2_north(4)(4), West => east_2_west(4)(3), P => Signal_priority(5), Fifo_full => Fifo_full(4), 
237South => south_2_north(5)(4), East => east_2_west(5)(4) , Grant => Signal_grant(5)(4));
238
239Arbiter_5_5 : Arbiter
240
241PORT MAP (Request => Request(5), North => south_2_north(4)(5), West => east_2_west(4)(4), P => Signal_priority(5), Fifo_full => Fifo_full(5), 
242South => south_2_north(5)(5), East => east_2_west(5)(5) , Grant => Signal_grant(5)(5));
243
244-------------------------- Diagonale n° 6
245
246
247Arbiter_6_1 : Arbiter
248
249PORT MAP (Request => Request(1), North => south_2_north(5)(1), West => east_2_west(5)(5), P => Signal_priority(4), Fifo_full => Fifo_full(1), 
250South => south_2_north(6)(1), East => east_2_west(6)(1) , Grant => Signal_grant(6)(1));
251
252Arbiter_6_2 : Arbiter
253
254PORT MAP (Request => Request(22), North => south_2_north(5)(2), West => east_2_west(5)(1), P => Signal_priority(4), Fifo_full => Fifo_full(2), 
255South => south_2_north(6)(2), East => east_2_west(6)(2) , Grant => Signal_grant(6)(2));
256
257Arbiter_6_3 : Arbiter
258
259PORT MAP (Request => Request(18), North => south_2_north(5)(3), West => east_2_west(5)(2), P => Signal_priority(4), Fifo_full => Fifo_full(3), 
260South => south_2_north(6)(3), East => east_2_west(6)(3) , Grant => Signal_grant(6)(3));
261
262Arbiter_6_4 : Arbiter
263
264PORT MAP (Request => Request(14), North => south_2_north(5)(4), West => east_2_west(5)(3), P => Signal_priority(4), Fifo_full => Fifo_full(4), 
265South => south_2_north(6)(4), East => east_2_west(6)(4) , Grant => Signal_grant(6)(4));
266
267Arbiter_6_5 : Arbiter
268
269PORT MAP (Request => Request(10), North => south_2_north(5)(5), West => east_2_west(5)(4), P => Signal_priority(4), Fifo_full => Fifo_full(5), 
270South => south_2_north(6)(5), East => east_2_west(6)(5) , Grant => Signal_grant(6)(5));
271
272-------------------------- Diagonale n° 7
273
274
275Arbiter_7_1 : Arbiter
276
277PORT MAP (Request => Request(6), North => south_2_north(6)(1), West => east_2_west(6)(5), P => Signal_priority(3), Fifo_full => Fifo_full(1), 
278South => south_2_north(7)(1), East => east_2_west(7)(1) , Grant => Signal_grant(7)(1));
279
280Arbiter_7_2 : Arbiter
281
282PORT MAP (Request => Request(2), North => south_2_north(6)(2), West => east_2_west(6)(1), P => Signal_priority(3), Fifo_full => Fifo_full(2), 
283South => south_2_north(7)(2), East => east_2_west(7)(2) , Grant => Signal_grant(7)(2));
284
285Arbiter_7_3 : Arbiter
286
287PORT MAP (Request => Request(23), North => south_2_north(6)(3), West => east_2_west(6)(2), P => Signal_priority(3), Fifo_full => Fifo_full(3), 
288South => south_2_north(7)(3), East => east_2_west(7)(3) , Grant => Signal_grant(7)(3));
289
290Arbiter_7_4 : Arbiter
291
292PORT MAP (Request => Request(19), North => south_2_north(6)(4), West => east_2_west(6)(3), P => Signal_priority(3), Fifo_full => Fifo_full(4), 
293South => south_2_north(7)(4), East => east_2_west(7)(4) , Grant => Signal_grant(7)(4));
294
295Arbiter_7_5 : Arbiter
296
297PORT MAP (Request => Request(15), North => south_2_north(6)(5), West => east_2_west(6)(4), P => Signal_priority(3), Fifo_full => Fifo_full(5), 
298South => south_2_north(7)(5), East => east_2_west(7)(5) , Grant => Signal_grant(7)(5));
299
300-------------------------- Diagonale n° 8
301
302
303Arbiter_8_1 : Arbiter
304
305PORT MAP (Request => Request(11), North => south_2_north(7)(1), West => east_2_west(7)(5), P => Signal_priority(2), Fifo_full => Fifo_full(1), 
306South => south_2_north(8)(1), East => east_2_west(8)(1) , Grant => Signal_grant(8)(1));
307
308Arbiter_8_2 : Arbiter
309
310PORT MAP (Request => Request(7), North => south_2_north(7)(2), West => east_2_west(7)(1), P => Signal_priority(2), Fifo_full => Fifo_full(2), 
311South => south_2_north(8)(2), East => east_2_west(8)(2) , Grant => Signal_grant(8)(2));
312
313Arbiter_8_3 : Arbiter
314
315PORT MAP (Request => Request(3), North => south_2_north(7)(3), West => east_2_west(7)(2), P => Signal_priority(2), Fifo_full => Fifo_full(3), 
316South => south_2_north(8)(3), East => east_2_west(8)(3) , Grant => Signal_grant(8)(3));
317
318Arbiter_8_4 : Arbiter
319
320PORT MAP (Request => Request(24), North => south_2_north(7)(4), West => east_2_west(7)(3), P => Signal_priority(2), Fifo_full => Fifo_full(4), 
321South => south_2_north(8)(4), East => east_2_west(8)(4) , Grant => Signal_grant(8)(4));
322
323Arbiter_8_5 : Arbiter
324
325PORT MAP (Request => Request(20), North => south_2_north(7)(5), West => east_2_west(7)(4), P => Signal_priority(2), Fifo_full => Fifo_full(5), 
326South => south_2_north(8)(5), East => east_2_west(8)(5) , Grant => Signal_grant(8)(5));
327
328-------------------------- Diagonale n° 9
329
330
331Arbiter_9_1 : Arbiter
332
333PORT MAP (Request => Request(16), North => south_2_north(8)(1), West => east_2_west(8)(5), P => Signal_priority(1), Fifo_full => Fifo_full(1), 
334South => south_2_north(9)(1), East => east_2_west(9)(1) , Grant => Signal_grant(9)(1));
335
336Arbiter_9_2 : Arbiter
337
338PORT MAP (Request => Request(12), North => south_2_north(8)(2), West => east_2_west(8)(1), P => Signal_priority(1), Fifo_full => Fifo_full(2), 
339South => south_2_north(9)(2), East => east_2_west(9)(2) , Grant => Signal_grant(9)(2));
340
341Arbiter_9_3 : Arbiter
342
343PORT MAP (Request => Request(8), North => south_2_north(8)(3), West => east_2_west(8)(2), P => Signal_priority(1), Fifo_full => Fifo_full(3), 
344South => south_2_north(9)(3), East => east_2_west(9)(3) , Grant => Signal_grant(9)(3));
345
346Arbiter_9_4 : Arbiter
347
348PORT MAP (Request => Request(4), North => south_2_north(8)(4), West => east_2_west(8)(3), P => Signal_priority(1), Fifo_full => Fifo_full(4), 
349South => south_2_north(9)(4), East => east_2_west(9)(4) , Grant => Signal_grant(9)(4));
350
351Arbiter_9_5 : Arbiter
352
353PORT MAP (Request => Request(25), North => south_2_north(8)(5), West => east_2_west(8)(4), P => Signal_priority(1), Fifo_full => Fifo_full(5), 
354South => south_2_north(9)(5), East => east_2_west(9)(5) , Grant => Signal_grant(9)(5));
355
356
357--processus permettant de roter la priorité des diagonales à chaque front d'horloge
358 -- rotation round robin
359         round_robin : process(clk)
360        begin
361                if rising_edge(clk) then
362                 if reset ='1' then
363                    Signal_priority <= "111110000";
364                  elsif priority_rotation_en = '1' then
365                    case Signal_priority is
366                       when "111110000" => Signal_priority <= "011111000";
367                       when "011111000" => Signal_priority <= "001111100";
368                       when "001111100" => Signal_priority <= "000111110";
369                       when "000111110" => Signal_priority <= "000011111";
370                       when "000011111" => Signal_priority <= "111110000";
371                       when others    => Signal_priority <= "111110000";
372                  end case;
373                 end if;
374             end if;
375         end process;
376
377end Behavioral;
378
Note: See TracBrowser for help on using the repository browser.