Commit | Line | Data |
---|---|---|
86530b38 AT |
1 | // ========== Copyright Header Begin ========================================== |
2 | // | |
3 | // OpenSPARC T2 Processor File: niu_txc_drr_arbiter.v | |
4 | // Copyright (C) 1995-2007 Sun Microsystems, Inc. All Rights Reserved | |
5 | // 4150 Network Circle, Santa Clara, California 95054, U.S.A. | |
6 | // | |
7 | // * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
8 | // | |
9 | // This program is free software; you can redistribute it and/or modify | |
10 | // it under the terms of the GNU General Public License as published by | |
11 | // the Free Software Foundation; version 2 of the License. | |
12 | // | |
13 | // This program is distributed in the hope that it will be useful, | |
14 | // but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 | // GNU General Public License for more details. | |
17 | // | |
18 | // You should have received a copy of the GNU General Public License | |
19 | // along with this program; if not, write to the Free Software | |
20 | // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
21 | // | |
22 | // For the avoidance of doubt, and except that if any non-GPL license | |
23 | // choice is available it will apply instead, Sun elects to use only | |
24 | // the General Public License version 2 (GPLv2) at this time for any | |
25 | // software where a choice of GPL license versions is made | |
26 | // available with the language indicating that GPLv2 or any later version | |
27 | // may be used, or where a choice of which version of the GPL is applied is | |
28 | // otherwise unspecified. | |
29 | // | |
30 | // Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, | |
31 | // CA 95054 USA or visit www.sun.com if you need additional information or | |
32 | // have any questions. | |
33 | // | |
34 | // ========== Copyright Header End ============================================ | |
35 | /********************************************************************* | |
36 | * | |
37 | * niu_txc_drr_arbiter.v | |
38 | * | |
39 | * DRR Arbiter State Machine | |
40 | * | |
41 | * Orignal Author(s): Rahoul Puri | |
42 | * Modifier(s): | |
43 | * Project(s): Neptune | |
44 | * | |
45 | * Copyright (c) 2004 Sun Microsystems, Inc. | |
46 | * | |
47 | * All Rights Reserved. | |
48 | * | |
49 | * This verilog model is the confidential and proprietary property of | |
50 | * Sun Microsystems, Inc., and the possession or use of this model | |
51 | * requires a written license from Sun Microsystems, Inc. | |
52 | * | |
53 | **********************************************************************/ | |
54 | ||
55 | `include "timescale.v" | |
56 | ||
57 | module niu_txc_drr_arbiter ( | |
58 | SysClk, | |
59 | Reset_L, | |
60 | Txc_Enabled, | |
61 | MAC_Enabled, | |
62 | FlushEngine, | |
63 | ||
64 | DMA0_Active, | |
65 | DMA0_Error, | |
66 | DMA0_EofList, | |
67 | DMA0_CacheReady, | |
68 | DMA0_Partial, | |
69 | DMA0_Reset_Scheduled, | |
70 | DMA0_Reset_Done, | |
71 | DMA1_Active, | |
72 | DMA1_Error, | |
73 | DMA1_EofList, | |
74 | DMA1_CacheReady, | |
75 | DMA1_Partial, | |
76 | DMA1_Reset_Scheduled, | |
77 | DMA1_Reset_Done, | |
78 | DMA2_Active, | |
79 | DMA2_Error, | |
80 | DMA2_EofList, | |
81 | DMA2_CacheReady, | |
82 | DMA2_Partial, | |
83 | DMA2_Reset_Scheduled, | |
84 | DMA2_Reset_Done, | |
85 | DMA3_Active, | |
86 | DMA3_Error, | |
87 | DMA3_EofList, | |
88 | DMA3_CacheReady, | |
89 | DMA3_Partial, | |
90 | DMA3_Reset_Scheduled, | |
91 | DMA3_Reset_Done, | |
92 | DMA4_Active, | |
93 | DMA4_Error, | |
94 | DMA4_EofList, | |
95 | DMA4_CacheReady, | |
96 | DMA4_Partial, | |
97 | DMA4_Reset_Scheduled, | |
98 | DMA4_Reset_Done, | |
99 | DMA5_Active, | |
100 | DMA5_Error, | |
101 | DMA5_EofList, | |
102 | DMA5_CacheReady, | |
103 | DMA5_Partial, | |
104 | DMA5_Reset_Scheduled, | |
105 | DMA5_Reset_Done, | |
106 | DMA6_Active, | |
107 | DMA6_Error, | |
108 | DMA6_EofList, | |
109 | DMA6_CacheReady, | |
110 | DMA6_Partial, | |
111 | DMA6_Reset_Scheduled, | |
112 | DMA6_Reset_Done, | |
113 | DMA7_Active, | |
114 | DMA7_Error, | |
115 | DMA7_EofList, | |
116 | DMA7_CacheReady, | |
117 | DMA7_Partial, | |
118 | DMA7_Reset_Scheduled, | |
119 | DMA7_Reset_Done, | |
120 | DMA8_Active, | |
121 | DMA8_Error, | |
122 | DMA8_EofList, | |
123 | DMA8_CacheReady, | |
124 | DMA8_Partial, | |
125 | DMA8_Reset_Scheduled, | |
126 | DMA8_Reset_Done, | |
127 | DMA9_Active, | |
128 | DMA9_Error, | |
129 | DMA9_EofList, | |
130 | DMA9_CacheReady, | |
131 | DMA9_Partial, | |
132 | DMA9_Reset_Scheduled, | |
133 | DMA9_Reset_Done, | |
134 | DMA10_Active, | |
135 | DMA10_Error, | |
136 | DMA10_EofList, | |
137 | DMA10_CacheReady, | |
138 | DMA10_Partial, | |
139 | DMA10_Reset_Scheduled, | |
140 | DMA10_Reset_Done, | |
141 | DMA11_Active, | |
142 | DMA11_Error, | |
143 | DMA11_EofList, | |
144 | DMA11_CacheReady, | |
145 | DMA11_Partial, | |
146 | DMA11_Reset_Scheduled, | |
147 | DMA11_Reset_Done, | |
148 | DMA12_Active, | |
149 | DMA12_Error, | |
150 | DMA12_EofList, | |
151 | DMA12_CacheReady, | |
152 | DMA12_Partial, | |
153 | DMA12_Reset_Scheduled, | |
154 | DMA12_Reset_Done, | |
155 | DMA13_Active, | |
156 | DMA13_Error, | |
157 | DMA13_EofList, | |
158 | DMA13_CacheReady, | |
159 | DMA13_Partial, | |
160 | DMA13_Reset_Scheduled, | |
161 | DMA13_Reset_Done, | |
162 | DMA14_Active, | |
163 | DMA14_Error, | |
164 | DMA14_EofList, | |
165 | DMA14_CacheReady, | |
166 | DMA14_Partial, | |
167 | DMA14_Reset_Scheduled, | |
168 | DMA14_Reset_Done, | |
169 | DMA15_Active, | |
170 | DMA15_Error, | |
171 | DMA15_EofList, | |
172 | DMA15_CacheReady, | |
173 | DMA15_Partial, | |
174 | DMA15_Reset_Scheduled, | |
175 | DMA15_Reset_Done, | |
176 | DMA16_Active, | |
177 | DMA16_Error, | |
178 | DMA16_EofList, | |
179 | DMA16_CacheReady, | |
180 | DMA16_Partial, | |
181 | DMA16_Reset_Scheduled, | |
182 | DMA16_Reset_Done, | |
183 | DMA17_Active, | |
184 | DMA17_Error, | |
185 | DMA17_EofList, | |
186 | DMA17_CacheReady, | |
187 | DMA17_Partial, | |
188 | DMA17_Reset_Scheduled, | |
189 | DMA17_Reset_Done, | |
190 | DMA18_Active, | |
191 | DMA18_Error, | |
192 | DMA18_EofList, | |
193 | DMA18_CacheReady, | |
194 | DMA18_Partial, | |
195 | DMA18_Reset_Scheduled, | |
196 | DMA18_Reset_Done, | |
197 | DMA19_Active, | |
198 | DMA19_Error, | |
199 | DMA19_EofList, | |
200 | DMA19_CacheReady, | |
201 | DMA19_Partial, | |
202 | DMA19_Reset_Scheduled, | |
203 | DMA19_Reset_Done, | |
204 | DMA20_Active, | |
205 | DMA20_Error, | |
206 | DMA20_EofList, | |
207 | DMA20_CacheReady, | |
208 | DMA20_Partial, | |
209 | DMA20_Reset_Scheduled, | |
210 | DMA20_Reset_Done, | |
211 | DMA21_Active, | |
212 | DMA21_Error, | |
213 | DMA21_EofList, | |
214 | DMA21_CacheReady, | |
215 | DMA21_Partial, | |
216 | DMA21_Reset_Scheduled, | |
217 | DMA21_Reset_Done, | |
218 | DMA22_Active, | |
219 | DMA22_Error, | |
220 | DMA22_EofList, | |
221 | DMA22_CacheReady, | |
222 | DMA22_Partial, | |
223 | DMA22_Reset_Scheduled, | |
224 | DMA22_Reset_Done, | |
225 | DMA23_Active, | |
226 | DMA23_Error, | |
227 | DMA23_EofList, | |
228 | DMA23_CacheReady, | |
229 | DMA23_Partial, | |
230 | DMA23_Reset_Scheduled, | |
231 | DMA23_Reset_Done, | |
232 | ||
233 | DMA0_NewMaxBurst, | |
234 | DMA1_NewMaxBurst, | |
235 | DMA2_NewMaxBurst, | |
236 | DMA3_NewMaxBurst, | |
237 | DMA4_NewMaxBurst, | |
238 | DMA5_NewMaxBurst, | |
239 | DMA6_NewMaxBurst, | |
240 | DMA7_NewMaxBurst, | |
241 | DMA8_NewMaxBurst, | |
242 | DMA9_NewMaxBurst, | |
243 | DMA10_NewMaxBurst, | |
244 | DMA11_NewMaxBurst, | |
245 | DMA12_NewMaxBurst, | |
246 | DMA13_NewMaxBurst, | |
247 | DMA14_NewMaxBurst, | |
248 | DMA15_NewMaxBurst, | |
249 | DMA16_NewMaxBurst, | |
250 | DMA17_NewMaxBurst, | |
251 | DMA18_NewMaxBurst, | |
252 | DMA19_NewMaxBurst, | |
253 | DMA20_NewMaxBurst, | |
254 | DMA21_NewMaxBurst, | |
255 | DMA22_NewMaxBurst, | |
256 | DMA23_NewMaxBurst, | |
257 | ||
258 | Port_DMA_List, | |
259 | ClrMaxBurst, // Clear max burst bit in control register | |
260 | ||
261 | DMA0_NoDeficit, | |
262 | DMA1_NoDeficit, | |
263 | DMA2_NoDeficit, | |
264 | DMA3_NoDeficit, | |
265 | DMA4_NoDeficit, | |
266 | DMA5_NoDeficit, | |
267 | DMA6_NoDeficit, | |
268 | DMA7_NoDeficit, | |
269 | DMA8_NoDeficit, | |
270 | DMA9_NoDeficit, | |
271 | DMA10_NoDeficit, | |
272 | DMA11_NoDeficit, | |
273 | DMA12_NoDeficit, | |
274 | DMA13_NoDeficit, | |
275 | DMA14_NoDeficit, | |
276 | DMA15_NoDeficit, | |
277 | DMA16_NoDeficit, | |
278 | DMA17_NoDeficit, | |
279 | DMA18_NoDeficit, | |
280 | DMA19_NoDeficit, | |
281 | DMA20_NoDeficit, | |
282 | DMA21_NoDeficit, | |
283 | DMA22_NoDeficit, | |
284 | DMA23_NoDeficit, | |
285 | AddCreditToContext, | |
286 | ClrDeficitForEofList, | |
287 | ContextActiveList, | |
288 | ||
289 | DRR_PacketDone, | |
290 | DRR_Arb_Valid, | |
291 | DRR_NextDMAChannel, | |
292 | ||
293 | LatchActiveDMA, | |
294 | ||
295 | DRR_ArbState | |
296 | ); | |
297 | ||
298 | `include "txc_defines.h" | |
299 | ||
300 | // Global Signals | |
301 | input SysClk; | |
302 | input Reset_L; | |
303 | input Txc_Enabled; | |
304 | input MAC_Enabled; | |
305 | input FlushEngine; | |
306 | ||
307 | // DAM Cache Registers | |
308 | //DMA0 | |
309 | input DMA0_Active; | |
310 | input DMA0_Error; | |
311 | input DMA0_EofList; | |
312 | input DMA0_CacheReady; | |
313 | input DMA0_Partial; | |
314 | input DMA0_Reset_Scheduled; | |
315 | ||
316 | output DMA0_Reset_Done; | |
317 | ||
318 | //DMA1 | |
319 | input DMA1_Active; | |
320 | input DMA1_Error; | |
321 | input DMA1_EofList; | |
322 | input DMA1_CacheReady; | |
323 | input DMA1_Partial; | |
324 | input DMA1_Reset_Scheduled; | |
325 | ||
326 | output DMA1_Reset_Done; | |
327 | ||
328 | //DMA2 | |
329 | input DMA2_Active; | |
330 | input DMA2_Error; | |
331 | input DMA2_EofList; | |
332 | input DMA2_CacheReady; | |
333 | input DMA2_Partial; | |
334 | input DMA2_Reset_Scheduled; | |
335 | ||
336 | output DMA2_Reset_Done; | |
337 | ||
338 | //DMA3 | |
339 | input DMA3_Active; | |
340 | input DMA3_Error; | |
341 | input DMA3_EofList; | |
342 | input DMA3_CacheReady; | |
343 | input DMA3_Partial; | |
344 | input DMA3_Reset_Scheduled; | |
345 | ||
346 | output DMA3_Reset_Done; | |
347 | ||
348 | //DMA4 | |
349 | input DMA4_Active; | |
350 | input DMA4_Error; | |
351 | input DMA4_EofList; | |
352 | input DMA4_CacheReady; | |
353 | input DMA4_Partial; | |
354 | input DMA4_Reset_Scheduled; | |
355 | ||
356 | output DMA4_Reset_Done; | |
357 | ||
358 | //DMA5 | |
359 | input DMA5_Active; | |
360 | input DMA5_Error; | |
361 | input DMA5_EofList; | |
362 | input DMA5_CacheReady; | |
363 | input DMA5_Partial; | |
364 | input DMA5_Reset_Scheduled; | |
365 | ||
366 | output DMA5_Reset_Done; | |
367 | ||
368 | //DMA6 | |
369 | input DMA6_Active; | |
370 | input DMA6_Error; | |
371 | input DMA6_EofList; | |
372 | input DMA6_CacheReady; | |
373 | input DMA6_Partial; | |
374 | input DMA6_Reset_Scheduled; | |
375 | ||
376 | output DMA6_Reset_Done; | |
377 | ||
378 | //DMA7 | |
379 | input DMA7_Active; | |
380 | input DMA7_Error; | |
381 | input DMA7_EofList; | |
382 | input DMA7_CacheReady; | |
383 | input DMA7_Partial; | |
384 | input DMA7_Reset_Scheduled; | |
385 | ||
386 | output DMA7_Reset_Done; | |
387 | ||
388 | //DMA8 | |
389 | input DMA8_Active; | |
390 | input DMA8_Error; | |
391 | input DMA8_EofList; | |
392 | input DMA8_CacheReady; | |
393 | input DMA8_Partial; | |
394 | input DMA8_Reset_Scheduled; | |
395 | ||
396 | output DMA8_Reset_Done; | |
397 | ||
398 | //DMA9 | |
399 | input DMA9_Active; | |
400 | input DMA9_Error; | |
401 | input DMA9_EofList; | |
402 | input DMA9_CacheReady; | |
403 | input DMA9_Partial; | |
404 | input DMA9_Reset_Scheduled; | |
405 | ||
406 | output DMA9_Reset_Done; | |
407 | ||
408 | //DMA10 | |
409 | input DMA10_Active; | |
410 | input DMA10_Error; | |
411 | input DMA10_EofList; | |
412 | input DMA10_CacheReady; | |
413 | input DMA10_Partial; | |
414 | input DMA10_Reset_Scheduled; | |
415 | ||
416 | output DMA10_Reset_Done; | |
417 | ||
418 | //DMA11 | |
419 | input DMA11_Active; | |
420 | input DMA11_Error; | |
421 | input DMA11_EofList; | |
422 | input DMA11_CacheReady; | |
423 | input DMA11_Partial; | |
424 | input DMA11_Reset_Scheduled; | |
425 | ||
426 | output DMA11_Reset_Done; | |
427 | ||
428 | //DMA12 | |
429 | input DMA12_Active; | |
430 | input DMA12_Error; | |
431 | input DMA12_EofList; | |
432 | input DMA12_CacheReady; | |
433 | input DMA12_Partial; | |
434 | input DMA12_Reset_Scheduled; | |
435 | ||
436 | output DMA12_Reset_Done; | |
437 | ||
438 | //DMA13 | |
439 | input DMA13_Active; | |
440 | input DMA13_Error; | |
441 | input DMA13_EofList; | |
442 | input DMA13_CacheReady; | |
443 | input DMA13_Partial; | |
444 | input DMA13_Reset_Scheduled; | |
445 | ||
446 | output DMA13_Reset_Done; | |
447 | ||
448 | //DMA14 | |
449 | input DMA14_Active; | |
450 | input DMA14_Error; | |
451 | input DMA14_EofList; | |
452 | input DMA14_CacheReady; | |
453 | input DMA14_Partial; | |
454 | input DMA14_Reset_Scheduled; | |
455 | ||
456 | output DMA14_Reset_Done; | |
457 | ||
458 | //DMA15 | |
459 | input DMA15_Active; | |
460 | input DMA15_Error; | |
461 | input DMA15_EofList; | |
462 | input DMA15_CacheReady; | |
463 | input DMA15_Partial; | |
464 | input DMA15_Reset_Scheduled; | |
465 | ||
466 | output DMA15_Reset_Done; | |
467 | ||
468 | //DMA16 | |
469 | input DMA16_Active; | |
470 | input DMA16_Error; | |
471 | input DMA16_EofList; | |
472 | input DMA16_CacheReady; | |
473 | input DMA16_Partial; | |
474 | input DMA16_Reset_Scheduled; | |
475 | ||
476 | output DMA16_Reset_Done; | |
477 | ||
478 | //DMA17 | |
479 | input DMA17_Active; | |
480 | input DMA17_Error; | |
481 | input DMA17_EofList; | |
482 | input DMA17_CacheReady; | |
483 | input DMA17_Partial; | |
484 | input DMA17_Reset_Scheduled; | |
485 | ||
486 | output DMA17_Reset_Done; | |
487 | ||
488 | //DMA18 | |
489 | input DMA18_Active; | |
490 | input DMA18_Error; | |
491 | input DMA18_EofList; | |
492 | input DMA18_CacheReady; | |
493 | input DMA18_Partial; | |
494 | input DMA18_Reset_Scheduled; | |
495 | ||
496 | output DMA18_Reset_Done; | |
497 | ||
498 | //DMA19 | |
499 | input DMA19_Active; | |
500 | input DMA19_Error; | |
501 | input DMA19_EofList; | |
502 | input DMA19_CacheReady; | |
503 | input DMA19_Partial; | |
504 | input DMA19_Reset_Scheduled; | |
505 | ||
506 | output DMA19_Reset_Done; | |
507 | ||
508 | //DMA20 | |
509 | input DMA20_Active; | |
510 | input DMA20_Error; | |
511 | input DMA20_EofList; | |
512 | input DMA20_CacheReady; | |
513 | input DMA20_Partial; | |
514 | input DMA20_Reset_Scheduled; | |
515 | ||
516 | output DMA20_Reset_Done; | |
517 | ||
518 | //DMA21 | |
519 | input DMA21_Active; | |
520 | input DMA21_Error; | |
521 | input DMA21_EofList; | |
522 | input DMA21_CacheReady; | |
523 | input DMA21_Partial; | |
524 | input DMA21_Reset_Scheduled; | |
525 | ||
526 | output DMA21_Reset_Done; | |
527 | ||
528 | //DMA22 | |
529 | input DMA22_Active; | |
530 | input DMA22_Error; | |
531 | input DMA22_EofList; | |
532 | input DMA22_CacheReady; | |
533 | input DMA22_Partial; | |
534 | input DMA22_Reset_Scheduled; | |
535 | ||
536 | output DMA22_Reset_Done; | |
537 | ||
538 | //DMA23 | |
539 | input DMA23_Active; | |
540 | input DMA23_Error; | |
541 | input DMA23_EofList; | |
542 | input DMA23_CacheReady; | |
543 | input DMA23_Partial; | |
544 | input DMA23_Reset_Scheduled; | |
545 | ||
546 | output DMA23_Reset_Done; | |
547 | ||
548 | // Control Registers | |
549 | input DMA0_NewMaxBurst; | |
550 | input DMA1_NewMaxBurst; | |
551 | input DMA2_NewMaxBurst; | |
552 | input DMA3_NewMaxBurst; | |
553 | input DMA4_NewMaxBurst; | |
554 | input DMA5_NewMaxBurst; | |
555 | input DMA6_NewMaxBurst; | |
556 | input DMA7_NewMaxBurst; | |
557 | input DMA8_NewMaxBurst; | |
558 | input DMA9_NewMaxBurst; | |
559 | input DMA10_NewMaxBurst; | |
560 | input DMA11_NewMaxBurst; | |
561 | input DMA12_NewMaxBurst; | |
562 | input DMA13_NewMaxBurst; | |
563 | input DMA14_NewMaxBurst; | |
564 | input DMA15_NewMaxBurst; | |
565 | input DMA16_NewMaxBurst; | |
566 | input DMA17_NewMaxBurst; | |
567 | input DMA18_NewMaxBurst; | |
568 | input DMA19_NewMaxBurst; | |
569 | input DMA20_NewMaxBurst; | |
570 | input DMA21_NewMaxBurst; | |
571 | input DMA22_NewMaxBurst; | |
572 | input DMA23_NewMaxBurst; | |
573 | input [23:0] Port_DMA_List; | |
574 | ||
575 | output ClrMaxBurst; | |
576 | ||
577 | reg ClrMaxBurst; | |
578 | ||
579 | // DMA deficit state | |
580 | input DMA0_NoDeficit; | |
581 | input DMA1_NoDeficit; | |
582 | input DMA2_NoDeficit; | |
583 | input DMA3_NoDeficit; | |
584 | input DMA4_NoDeficit; | |
585 | input DMA5_NoDeficit; | |
586 | input DMA6_NoDeficit; | |
587 | input DMA7_NoDeficit; | |
588 | input DMA8_NoDeficit; | |
589 | input DMA9_NoDeficit; | |
590 | input DMA10_NoDeficit; | |
591 | input DMA11_NoDeficit; | |
592 | input DMA12_NoDeficit; | |
593 | input DMA13_NoDeficit; | |
594 | input DMA14_NoDeficit; | |
595 | input DMA15_NoDeficit; | |
596 | input DMA16_NoDeficit; | |
597 | input DMA17_NoDeficit; | |
598 | input DMA18_NoDeficit; | |
599 | input DMA19_NoDeficit; | |
600 | input DMA20_NoDeficit; | |
601 | input DMA21_NoDeficit; | |
602 | input DMA22_NoDeficit; | |
603 | input DMA23_NoDeficit; | |
604 | ||
605 | output AddCreditToContext; | |
606 | output ClrDeficitForEofList; | |
607 | output [23:0] ContextActiveList; | |
608 | ||
609 | reg AddCreditToContext; | |
610 | reg ClrDeficitForEofList; | |
611 | reg [23:0] ContextActiveList; | |
612 | ||
613 | // Data Fetch State Machine | |
614 | input DRR_PacketDone; | |
615 | ||
616 | output DRR_Arb_Valid; | |
617 | output [4:0] DRR_NextDMAChannel; | |
618 | ||
619 | reg DRR_Arb_Valid; | |
620 | reg [4:0] DRR_NextDMAChannel; | |
621 | ||
622 | // Debug Block | |
623 | output LatchActiveDMA; | |
624 | ||
625 | reg LatchActiveDMA; | |
626 | ||
627 | // State Machine | |
628 | output [3:0] DRR_ArbState; | |
629 | ||
630 | reg [3:0] DRR_ArbState; | |
631 | ||
632 | /*--------------------------------------------------------------*/ | |
633 | // Wires & Registers | |
634 | /*--------------------------------------------------------------*/ | |
635 | wire allDMAdeficited; | |
636 | wire activeDMA; | |
637 | wire newMaxBurst; | |
638 | wire dmaGoneDeficit; | |
639 | wire drrStateMachineIdle; | |
640 | wire someDMALeftToService; | |
641 | wire [23:0] dmaDeficited; | |
642 | wire [23:0] activeListDMA; | |
643 | wire [23:0] dmaList; | |
644 | wire [23:0] dmaEofList; | |
645 | wire [23:0] dmaNewMaxBurst; | |
646 | wire [23:0] dmaActive; | |
647 | wire [23:0] dmaPartial; | |
648 | wire [23:0] dmaError; | |
649 | wire [23:0] dmacacheReady; | |
650 | wire [23:0] dmaResetScheduled; | |
651 | wire [23:0] noDMADeficitList; | |
652 | ||
653 | reg clrMaxBurst_n; | |
654 | reg drr_Valid_n; | |
655 | reg updateServiced; | |
656 | reg endOfList; | |
657 | reg dmaHasAnError; | |
658 | reg [3:0] nextState; | |
659 | reg [4:0] predictedDMA; | |
660 | reg [23:0] dmaResetDone; | |
661 | reg [23:0] dmaServicedList; | |
662 | reg [23:0] currentDMAChannel; | |
663 | reg [23:0] noDefictedContextActiveList; | |
664 | ||
665 | /*--------------------------------------------------------------*/ | |
666 | // Parameters and Defines | |
667 | /*--------------------------------------------------------------*/ | |
668 | parameter DRR_IDLE = 4'h0, | |
669 | UPDATE_NEW_CREDIT = 4'h1, | |
670 | LATCH_ACTIVE_DMA = 4'h2, | |
671 | CHECK_DEFECITS = 4'h3, | |
672 | DRR_ARBITER = 4'h4, | |
673 | WAIT_FOR_TRANSMIT = 4'h5, | |
674 | CHECK_DMA_STATE = 4'h6, | |
675 | CHECK_ACTIVE_STATE = 4'h7, | |
676 | ADD_CREDITS = 4'h8; | |
677 | ||
678 | // synopsys translate_off | |
679 | reg [192:1] DRR_ARB_STATE; | |
680 | ||
681 | ||
682 | always @(DRR_ArbState) | |
683 | begin | |
684 | case(DRR_ArbState) | |
685 | DRR_IDLE : DRR_ARB_STATE = "DRR_IDLE"; | |
686 | UPDATE_NEW_CREDIT: DRR_ARB_STATE = "UPDATE_NEW_CREDIT"; | |
687 | LATCH_ACTIVE_DMA : DRR_ARB_STATE = "LATCH_ACTIVE_DMA"; | |
688 | CHECK_DEFECITS: DRR_ARB_STATE = "CHECK_DEFECITS"; | |
689 | DRR_ARBITER : DRR_ARB_STATE = "DRR_ARBITER"; | |
690 | WAIT_FOR_TRANSMIT : DRR_ARB_STATE = "WAIT_FOR_TRANSMIT"; | |
691 | CHECK_DMA_STATE : DRR_ARB_STATE = "CHECK_DMA_STATE"; | |
692 | CHECK_ACTIVE_STATE : DRR_ARB_STATE = "CHECK_ACTIVE_STATE"; | |
693 | ADD_CREDITS : DRR_ARB_STATE = "ADD_CREDITS"; | |
694 | default : DRR_ARB_STATE = "UNKNOWN"; | |
695 | endcase | |
696 | end | |
697 | always@(posedge DRR_Arb_Valid ) begin | |
698 | if ($test$plusargs("DRR_DEBUG")) begin | |
699 | $display("DRR DEBUG %m: Selected Channel - %d Time -%t",DRR_NextDMAChannel,$time); | |
700 | end | |
701 | end | |
702 | ||
703 | ||
704 | // synopsys translate_on | |
705 | ||
706 | /*--------------------------------------------------------------*/ | |
707 | // Zero In Checks | |
708 | /*--------------------------------------------------------------*/ | |
709 | ||
710 | ||
711 | /*--------------------------------------------------------------*/ | |
712 | // Assigns | |
713 | /*--------------------------------------------------------------*/ | |
714 | assign DMA0_Reset_Done = dmaResetDone[0]; | |
715 | assign DMA1_Reset_Done = dmaResetDone[1]; | |
716 | assign DMA2_Reset_Done = dmaResetDone[2]; | |
717 | assign DMA3_Reset_Done = dmaResetDone[3]; | |
718 | assign DMA4_Reset_Done = dmaResetDone[4]; | |
719 | assign DMA5_Reset_Done = dmaResetDone[5]; | |
720 | assign DMA6_Reset_Done = dmaResetDone[6]; | |
721 | assign DMA7_Reset_Done = dmaResetDone[7]; | |
722 | assign DMA8_Reset_Done = dmaResetDone[8]; | |
723 | assign DMA9_Reset_Done = dmaResetDone[9]; | |
724 | assign DMA10_Reset_Done = dmaResetDone[10]; | |
725 | assign DMA11_Reset_Done = dmaResetDone[11]; | |
726 | assign DMA12_Reset_Done = dmaResetDone[12]; | |
727 | assign DMA13_Reset_Done = dmaResetDone[13]; | |
728 | assign DMA14_Reset_Done = dmaResetDone[14]; | |
729 | assign DMA15_Reset_Done = dmaResetDone[15]; | |
730 | assign DMA16_Reset_Done = dmaResetDone[16]; | |
731 | assign DMA17_Reset_Done = dmaResetDone[17]; | |
732 | assign DMA18_Reset_Done = dmaResetDone[18]; | |
733 | assign DMA19_Reset_Done = dmaResetDone[19]; | |
734 | assign DMA20_Reset_Done = dmaResetDone[20]; | |
735 | assign DMA21_Reset_Done = dmaResetDone[21]; | |
736 | assign DMA22_Reset_Done = dmaResetDone[22]; | |
737 | assign DMA23_Reset_Done = dmaResetDone[23]; | |
738 | ||
739 | assign dmaEofList = { | |
740 | DMA23_EofList, DMA22_EofList, DMA21_EofList, DMA20_EofList, | |
741 | DMA19_EofList, DMA18_EofList, DMA17_EofList, DMA16_EofList, | |
742 | DMA15_EofList, DMA14_EofList, DMA13_EofList, DMA12_EofList, | |
743 | DMA11_EofList, DMA10_EofList, DMA9_EofList, DMA8_EofList, | |
744 | DMA7_EofList, DMA6_EofList, DMA5_EofList, DMA4_EofList, | |
745 | DMA3_EofList, DMA2_EofList, DMA1_EofList, DMA0_EofList}; | |
746 | ||
747 | assign dmacacheReady = { | |
748 | DMA23_CacheReady, DMA22_CacheReady, DMA21_CacheReady, | |
749 | DMA20_CacheReady, DMA19_CacheReady, DMA18_CacheReady, | |
750 | DMA17_CacheReady, DMA16_CacheReady, DMA15_CacheReady, | |
751 | DMA14_CacheReady, DMA13_CacheReady, DMA12_CacheReady, | |
752 | DMA11_CacheReady, DMA10_CacheReady, DMA9_CacheReady, | |
753 | DMA8_CacheReady, DMA7_CacheReady, DMA6_CacheReady, | |
754 | DMA5_CacheReady, DMA4_CacheReady, DMA3_CacheReady, | |
755 | DMA2_CacheReady, DMA1_CacheReady, DMA0_CacheReady}; | |
756 | ||
757 | assign dmaActive = { | |
758 | DMA23_Active, DMA22_Active, DMA21_Active, | |
759 | DMA20_Active, DMA19_Active, DMA18_Active, | |
760 | DMA17_Active, DMA16_Active, DMA15_Active, | |
761 | DMA14_Active, DMA13_Active, DMA12_Active, | |
762 | DMA11_Active, DMA10_Active, DMA9_Active, | |
763 | DMA8_Active, DMA7_Active, DMA6_Active, | |
764 | DMA5_Active, DMA4_Active, DMA3_Active, | |
765 | DMA2_Active, DMA1_Active, DMA0_Active}; | |
766 | ||
767 | assign dmaPartial = { | |
768 | DMA23_Partial, DMA22_Partial, DMA21_Partial, | |
769 | DMA20_Partial, DMA19_Partial, DMA18_Partial, | |
770 | DMA17_Partial, DMA16_Partial, DMA15_Partial, | |
771 | DMA14_Partial, DMA13_Partial, DMA12_Partial, | |
772 | DMA11_Partial, DMA10_Partial, DMA9_Partial, | |
773 | DMA8_Partial, DMA7_Partial, DMA6_Partial, | |
774 | DMA5_Partial, DMA4_Partial, DMA3_Partial, | |
775 | DMA2_Partial, DMA1_Partial, DMA0_Partial}; | |
776 | ||
777 | assign dmaResetScheduled = { | |
778 | DMA23_Reset_Scheduled, DMA22_Reset_Scheduled, | |
779 | DMA21_Reset_Scheduled, DMA20_Reset_Scheduled, | |
780 | DMA19_Reset_Scheduled, DMA18_Reset_Scheduled, | |
781 | DMA17_Reset_Scheduled, DMA16_Reset_Scheduled, | |
782 | DMA15_Reset_Scheduled, DMA14_Reset_Scheduled, | |
783 | DMA13_Reset_Scheduled, DMA12_Reset_Scheduled, | |
784 | DMA11_Reset_Scheduled, DMA10_Reset_Scheduled, | |
785 | DMA9_Reset_Scheduled, DMA8_Reset_Scheduled, | |
786 | DMA7_Reset_Scheduled, DMA6_Reset_Scheduled, | |
787 | DMA5_Reset_Scheduled, DMA4_Reset_Scheduled, | |
788 | DMA3_Reset_Scheduled, DMA2_Reset_Scheduled, | |
789 | DMA1_Reset_Scheduled, DMA0_Reset_Scheduled}; | |
790 | ||
791 | assign dmaError = { | |
792 | DMA23_Error, DMA22_Error, DMA21_Error, | |
793 | DMA20_Error, DMA19_Error, DMA18_Error, | |
794 | DMA17_Error, DMA16_Error, DMA15_Error, | |
795 | DMA14_Error, DMA13_Error, DMA12_Error, | |
796 | DMA11_Error, DMA10_Error, DMA9_Error, | |
797 | DMA8_Error, DMA7_Error, DMA6_Error, | |
798 | DMA5_Error, DMA4_Error, DMA3_Error, | |
799 | DMA2_Error, DMA1_Error, DMA0_Error}; | |
800 | ||
801 | assign noDMADeficitList = { | |
802 | DMA23_NoDeficit, DMA22_NoDeficit, DMA21_NoDeficit, | |
803 | DMA20_NoDeficit, DMA19_NoDeficit, DMA18_NoDeficit, | |
804 | DMA17_NoDeficit, DMA16_NoDeficit, DMA15_NoDeficit, | |
805 | DMA14_NoDeficit, DMA13_NoDeficit, DMA12_NoDeficit, | |
806 | DMA11_NoDeficit, DMA10_NoDeficit, DMA9_NoDeficit, | |
807 | DMA8_NoDeficit, DMA7_NoDeficit, DMA6_NoDeficit, | |
808 | DMA5_NoDeficit, DMA4_NoDeficit, DMA3_NoDeficit, | |
809 | DMA2_NoDeficit, DMA1_NoDeficit, DMA0_NoDeficit | |
810 | }; | |
811 | ||
812 | assign dmaNewMaxBurst = { | |
813 | DMA23_NewMaxBurst, DMA22_NewMaxBurst, | |
814 | DMA21_NewMaxBurst, DMA20_NewMaxBurst, | |
815 | DMA19_NewMaxBurst, DMA18_NewMaxBurst, | |
816 | DMA17_NewMaxBurst, DMA16_NewMaxBurst, | |
817 | DMA15_NewMaxBurst, DMA14_NewMaxBurst, | |
818 | DMA13_NewMaxBurst, DMA12_NewMaxBurst, | |
819 | DMA11_NewMaxBurst, DMA10_NewMaxBurst, | |
820 | DMA9_NewMaxBurst, DMA8_NewMaxBurst, | |
821 | DMA7_NewMaxBurst, DMA6_NewMaxBurst, | |
822 | DMA5_NewMaxBurst, DMA4_NewMaxBurst, | |
823 | DMA3_NewMaxBurst, DMA2_NewMaxBurst, | |
824 | DMA1_NewMaxBurst, DMA0_NewMaxBurst | |
825 | }; | |
826 | ||
827 | ||
828 | assign activeListDMA = (dmaActive & dmacacheReady & Port_DMA_List | |
829 | & | |
830 | ~dmaError & ~dmaEofList | |
831 | & | |
832 | ~dmaPartial & ~dmaResetScheduled); | |
833 | ||
834 | assign activeDMA = |(activeListDMA); | |
835 | ||
836 | assign dmaDeficited = (~noDMADeficitList | dmaEofList | |
837 | | | |
838 | ~noDefictedContextActiveList); | |
839 | ||
840 | assign allDMAdeficited = &(dmaDeficited); | |
841 | assign dmaGoneDeficit = (|(dmaDeficited & currentDMAChannel)); | |
842 | assign newMaxBurst = |(dmaNewMaxBurst & Port_DMA_List); | |
843 | ||
844 | assign someDMALeftToService = (|(ContextActiveList & dmaServicedList)); | |
845 | ||
846 | /*--------------------------------------------------------------*/ | |
847 | // For Debug Only, need to remove later | |
848 | /*--------------------------------------------------------------*/ | |
849 | // synopsys translate_off | |
850 | ||
851 | wire dma0Deficited; | |
852 | wire dma1Deficited; | |
853 | wire dma2Deficited; | |
854 | wire dma3Deficited; | |
855 | wire dma4Deficited; | |
856 | wire dma5Deficited; | |
857 | wire dma6Deficited; | |
858 | wire dma7Deficited; | |
859 | wire dma8Deficited; | |
860 | wire dma9Deficited; | |
861 | wire dma10Deficited; | |
862 | wire dma11Deficited; | |
863 | wire dma12Deficited; | |
864 | wire dma13Deficited; | |
865 | wire dma14Deficited; | |
866 | wire dma15Deficited; | |
867 | wire dma16Deficited; | |
868 | wire dma17Deficited; | |
869 | wire dma18Deficited; | |
870 | wire dma19Deficited; | |
871 | wire dma20Deficited; | |
872 | wire dma21Deficited; | |
873 | wire dma22Deficited; | |
874 | wire dma23Deficited; | |
875 | ||
876 | assign dma0Deficited = dmaDeficited[0]; | |
877 | assign dma1Deficited = dmaDeficited[1]; | |
878 | assign dma2Deficited = dmaDeficited[2]; | |
879 | assign dma3Deficited = dmaDeficited[3]; | |
880 | assign dma4Deficited = dmaDeficited[4]; | |
881 | assign dma5Deficited = dmaDeficited[5]; | |
882 | assign dma6Deficited = dmaDeficited[6]; | |
883 | assign dma7Deficited = dmaDeficited[7]; | |
884 | assign dma8Deficited = dmaDeficited[8]; | |
885 | assign dma9Deficited = dmaDeficited[9]; | |
886 | assign dma10Deficited = dmaDeficited[10]; | |
887 | assign dma11Deficited = dmaDeficited[11]; | |
888 | assign dma12Deficited = dmaDeficited[12]; | |
889 | assign dma13Deficited = dmaDeficited[13]; | |
890 | assign dma14Deficited = dmaDeficited[14]; | |
891 | assign dma15Deficited = dmaDeficited[15]; | |
892 | assign dma16Deficited = dmaDeficited[16]; | |
893 | assign dma17Deficited = dmaDeficited[17]; | |
894 | assign dma18Deficited = dmaDeficited[18]; | |
895 | assign dma19Deficited = dmaDeficited[19]; | |
896 | assign dma20Deficited = dmaDeficited[20]; | |
897 | assign dma21Deficited = dmaDeficited[21]; | |
898 | assign dma22Deficited = dmaDeficited[22]; | |
899 | assign dma23Deficited = dmaDeficited[23]; | |
900 | ||
901 | // synopsys translate_on | |
902 | ||
903 | /*--------------------------------------------------------------*/ | |
904 | // Round Robin | |
905 | /*--------------------------------------------------------------*/ | |
906 | ||
907 | assign dmaList = (noDefictedContextActiveList & dmaServicedList); | |
908 | ||
909 | always @(dmaList | |
910 | ) | |
911 | casex(dmaList) // synopsys parallel_case | |
912 | 24'bxxxx_xxxx_xxxx_xxxx_xxxx_xxx1: | |
913 | predictedDMA = `DMA_CHANNEL_ZERO; | |
914 | 24'bxxxx_xxxx_xxxx_xxxx_xxxx_xx10: | |
915 | predictedDMA = `DMA_CHANNEL_ONE; | |
916 | 24'bxxxx_xxxx_xxxx_xxxx_xxxx_x100: | |
917 | predictedDMA = `DMA_CHANNEL_TWO; | |
918 | 24'bxxxx_xxxx_xxxx_xxxx_xxxx_1000: | |
919 | predictedDMA = `DMA_CHANNEL_THREE; | |
920 | 24'bxxxx_xxxx_xxxx_xxxx_xxx1_0000: | |
921 | predictedDMA = `DMA_CHANNEL_FOUR; | |
922 | 24'bxxxx_xxxx_xxxx_xxxx_xx10_0000: | |
923 | predictedDMA = `DMA_CHANNEL_FIVE; | |
924 | 24'bxxxx_xxxx_xxxx_xxxx_x100_0000: | |
925 | predictedDMA = `DMA_CHANNEL_SIX; | |
926 | 24'bxxxx_xxxx_xxxx_xxxx_1000_0000: | |
927 | predictedDMA = `DMA_CHANNEL_SEVEN; | |
928 | 24'bxxxx_xxxx_xxxx_xxx1_0000_0000: | |
929 | predictedDMA = `DMA_CHANNEL_EIGHT; | |
930 | 24'bxxxx_xxxx_xxxx_xx10_0000_0000: | |
931 | predictedDMA = `DMA_CHANNEL_NINE; | |
932 | 24'bxxxx_xxxx_xxxx_x100_0000_0000: | |
933 | predictedDMA = `DMA_CHANNEL_TEN; | |
934 | 24'bxxxx_xxxx_xxxx_1000_0000_0000: | |
935 | predictedDMA = `DMA_CHANNEL_ELEVEN; | |
936 | 24'bxxxx_xxxx_xxx1_0000_0000_0000: | |
937 | predictedDMA = `DMA_CHANNEL_TWELVE; | |
938 | 24'bxxxx_xxxx_xx10_0000_0000_0000: | |
939 | predictedDMA = `DMA_CHANNEL_THIRTEEN; | |
940 | 24'bxxxx_xxxx_x100_0000_0000_0000: | |
941 | predictedDMA = `DMA_CHANNEL_FOURTEEN; | |
942 | 24'bxxxx_xxxx_1000_0000_0000_0000: | |
943 | predictedDMA = `DMA_CHANNEL_FIFTEEN; | |
944 | 24'bxxxx_xxx1_0000_0000_0000_0000: | |
945 | predictedDMA = `DMA_CHANNEL_SIXTEEN; | |
946 | 24'bxxxx_xx10_0000_0000_0000_0000: | |
947 | predictedDMA = `DMA_CHANNEL_SEVENTEEN; | |
948 | 24'bxxxx_x100_0000_0000_0000_0000: | |
949 | predictedDMA = `DMA_CHANNEL_EIGHTEEN; | |
950 | 24'bxxxx_1000_0000_0000_0000_0000: | |
951 | predictedDMA = `DMA_CHANNEL_NINETEEN; | |
952 | 24'bxxx1_0000_0000_0000_0000_0000: | |
953 | predictedDMA = `DMA_CHANNEL_TWENTY; | |
954 | 24'bxx10_0000_0000_0000_0000_0000: | |
955 | predictedDMA = `DMA_CHANNEL_TWENTYONE; | |
956 | 24'bx100_0000_0000_0000_0000_0000: | |
957 | predictedDMA = `DMA_CHANNEL_TWENTYTWO; | |
958 | 24'b1000_0000_0000_0000_0000_0000: | |
959 | predictedDMA = `DMA_CHANNEL_TWENTYTHREE; | |
960 | default: predictedDMA = 5'hx; | |
961 | endcase | |
962 | ||
963 | always @(DRR_NextDMAChannel | |
964 | ) | |
965 | case(DRR_NextDMAChannel) // synopsys full_case parallel_case | |
966 | `DMA_CHANNEL_ZERO: currentDMAChannel = 24'h000001; | |
967 | `DMA_CHANNEL_ONE: currentDMAChannel = 24'h000002; | |
968 | `DMA_CHANNEL_TWO: currentDMAChannel = 24'h000004; | |
969 | `DMA_CHANNEL_THREE: currentDMAChannel = 24'h000008; | |
970 | `DMA_CHANNEL_FOUR: currentDMAChannel = 24'h000010; | |
971 | `DMA_CHANNEL_FIVE: currentDMAChannel = 24'h000020; | |
972 | `DMA_CHANNEL_SIX: currentDMAChannel = 24'h000040; | |
973 | `DMA_CHANNEL_SEVEN: currentDMAChannel = 24'h000080; | |
974 | `DMA_CHANNEL_EIGHT: currentDMAChannel = 24'h000100; | |
975 | `DMA_CHANNEL_NINE: currentDMAChannel = 24'h000200; | |
976 | `DMA_CHANNEL_TEN: currentDMAChannel = 24'h000400; | |
977 | `DMA_CHANNEL_ELEVEN: currentDMAChannel = 24'h000800; | |
978 | `DMA_CHANNEL_TWELVE: currentDMAChannel = 24'h001000; | |
979 | `DMA_CHANNEL_THIRTEEN: currentDMAChannel = 24'h002000; | |
980 | `DMA_CHANNEL_FOURTEEN: currentDMAChannel = 24'h004000; | |
981 | `DMA_CHANNEL_FIFTEEN: currentDMAChannel = 24'h008000; | |
982 | `DMA_CHANNEL_SIXTEEN: currentDMAChannel = 24'h010000; | |
983 | `DMA_CHANNEL_SEVENTEEN: currentDMAChannel = 24'h020000; | |
984 | `DMA_CHANNEL_EIGHTEEN: currentDMAChannel = 24'h040000; | |
985 | `DMA_CHANNEL_NINETEEN: currentDMAChannel = 24'h080000; | |
986 | `DMA_CHANNEL_TWENTY: currentDMAChannel = 24'h100000; | |
987 | `DMA_CHANNEL_TWENTYONE: currentDMAChannel = 24'h200000; | |
988 | `DMA_CHANNEL_TWENTYTWO: currentDMAChannel = 24'h400000; | |
989 | `DMA_CHANNEL_TWENTYTHREE: currentDMAChannel = 24'h800000; | |
990 | default: currentDMAChannel = 24'hx; | |
991 | endcase | |
992 | ||
993 | always @(DRR_NextDMAChannel | |
994 | or DMA23_EofList or DMA22_EofList or DMA21_EofList or DMA20_EofList | |
995 | or DMA19_EofList or DMA18_EofList or DMA17_EofList or DMA16_EofList | |
996 | or DMA15_EofList or DMA14_EofList or DMA13_EofList or DMA12_EofList | |
997 | or DMA11_EofList or DMA10_EofList or DMA9_EofList or DMA8_EofList | |
998 | or DMA7_EofList or DMA6_EofList or DMA5_EofList or DMA4_EofList | |
999 | or DMA3_EofList or DMA2_EofList or DMA1_EofList or DMA0_EofList | |
1000 | ) | |
1001 | case(DRR_NextDMAChannel) // synopsys full_case parallel_case | |
1002 | `DMA_CHANNEL_ZERO: endOfList = DMA0_EofList; | |
1003 | `DMA_CHANNEL_ONE: endOfList = DMA1_EofList; | |
1004 | `DMA_CHANNEL_TWO: endOfList = DMA2_EofList; | |
1005 | `DMA_CHANNEL_THREE: endOfList = DMA3_EofList; | |
1006 | `DMA_CHANNEL_FOUR: endOfList = DMA4_EofList; | |
1007 | `DMA_CHANNEL_FIVE: endOfList = DMA5_EofList; | |
1008 | `DMA_CHANNEL_SIX: endOfList = DMA6_EofList; | |
1009 | `DMA_CHANNEL_SEVEN: endOfList = DMA7_EofList; | |
1010 | `DMA_CHANNEL_EIGHT: endOfList = DMA8_EofList; | |
1011 | `DMA_CHANNEL_NINE: endOfList = DMA9_EofList; | |
1012 | `DMA_CHANNEL_TEN: endOfList = DMA10_EofList; | |
1013 | `DMA_CHANNEL_ELEVEN: endOfList = DMA11_EofList; | |
1014 | `DMA_CHANNEL_TWELVE: endOfList = DMA12_EofList; | |
1015 | `DMA_CHANNEL_THIRTEEN: endOfList = DMA13_EofList; | |
1016 | `DMA_CHANNEL_FOURTEEN: endOfList = DMA14_EofList; | |
1017 | `DMA_CHANNEL_FIFTEEN: endOfList = DMA15_EofList; | |
1018 | `DMA_CHANNEL_SIXTEEN: endOfList = DMA16_EofList; | |
1019 | `DMA_CHANNEL_SEVENTEEN: endOfList = DMA17_EofList; | |
1020 | `DMA_CHANNEL_EIGHTEEN: endOfList = DMA18_EofList; | |
1021 | `DMA_CHANNEL_NINETEEN: endOfList = DMA19_EofList; | |
1022 | `DMA_CHANNEL_TWENTY: endOfList = DMA20_EofList; | |
1023 | `DMA_CHANNEL_TWENTYONE: endOfList = DMA21_EofList; | |
1024 | `DMA_CHANNEL_TWENTYTWO: endOfList = DMA22_EofList; | |
1025 | `DMA_CHANNEL_TWENTYTHREE: endOfList = DMA23_EofList; | |
1026 | default: endOfList = 1'bx; | |
1027 | endcase | |
1028 | ||
1029 | always @(DRR_NextDMAChannel | |
1030 | or DMA23_Error or DMA22_Error or DMA21_Error or DMA20_Error | |
1031 | or DMA19_Error or DMA18_Error or DMA17_Error or DMA16_Error | |
1032 | or DMA15_Error or DMA14_Error or DMA13_Error or DMA12_Error | |
1033 | or DMA11_Error or DMA10_Error or DMA9_Error or DMA8_Error | |
1034 | or DMA7_Error or DMA6_Error or DMA5_Error or DMA4_Error | |
1035 | or DMA3_Error or DMA2_Error or DMA1_Error or DMA0_Error | |
1036 | ) | |
1037 | case(DRR_NextDMAChannel) // synopsys full_case parallel_case | |
1038 | `DMA_CHANNEL_ZERO: dmaHasAnError = DMA0_Error; | |
1039 | `DMA_CHANNEL_ONE: dmaHasAnError = DMA1_Error; | |
1040 | `DMA_CHANNEL_TWO: dmaHasAnError = DMA2_Error; | |
1041 | `DMA_CHANNEL_THREE: dmaHasAnError = DMA3_Error; | |
1042 | `DMA_CHANNEL_FOUR: dmaHasAnError = DMA4_Error; | |
1043 | `DMA_CHANNEL_FIVE: dmaHasAnError = DMA5_Error; | |
1044 | `DMA_CHANNEL_SIX: dmaHasAnError = DMA6_Error; | |
1045 | `DMA_CHANNEL_SEVEN: dmaHasAnError = DMA7_Error; | |
1046 | `DMA_CHANNEL_EIGHT: dmaHasAnError = DMA8_Error; | |
1047 | `DMA_CHANNEL_NINE: dmaHasAnError = DMA9_Error; | |
1048 | `DMA_CHANNEL_TEN: dmaHasAnError = DMA10_Error; | |
1049 | `DMA_CHANNEL_ELEVEN: dmaHasAnError = DMA11_Error; | |
1050 | `DMA_CHANNEL_TWELVE: dmaHasAnError = DMA12_Error; | |
1051 | `DMA_CHANNEL_THIRTEEN: dmaHasAnError = DMA13_Error; | |
1052 | `DMA_CHANNEL_FOURTEEN: dmaHasAnError = DMA14_Error; | |
1053 | `DMA_CHANNEL_FIFTEEN: dmaHasAnError = DMA15_Error; | |
1054 | `DMA_CHANNEL_SIXTEEN: dmaHasAnError = DMA16_Error; | |
1055 | `DMA_CHANNEL_SEVENTEEN: dmaHasAnError = DMA17_Error; | |
1056 | `DMA_CHANNEL_EIGHTEEN: dmaHasAnError = DMA18_Error; | |
1057 | `DMA_CHANNEL_NINETEEN: dmaHasAnError = DMA19_Error; | |
1058 | `DMA_CHANNEL_TWENTY: dmaHasAnError = DMA20_Error; | |
1059 | `DMA_CHANNEL_TWENTYONE: dmaHasAnError = DMA21_Error; | |
1060 | `DMA_CHANNEL_TWENTYTWO: dmaHasAnError = DMA22_Error; | |
1061 | `DMA_CHANNEL_TWENTYTHREE: dmaHasAnError = DMA23_Error; | |
1062 | default: dmaHasAnError = 1'bx; | |
1063 | endcase | |
1064 | ||
1065 | /*--------------------------------------------------------------*/ | |
1066 | // Instantiated Flops | |
1067 | /*--------------------------------------------------------------*/ | |
1068 | always @(posedge SysClk) | |
1069 | if (!Reset_L) ClrMaxBurst <= #`SD 1'b0; | |
1070 | else ClrMaxBurst <= #`SD clrMaxBurst_n; | |
1071 | ||
1072 | always @(posedge SysClk) | |
1073 | if (!Reset_L) DRR_Arb_Valid <= #`SD 1'b0; | |
1074 | else if (drr_Valid_n) DRR_Arb_Valid <= #`SD 1'b1; | |
1075 | else if (DRR_PacketDone) DRR_Arb_Valid <= #`SD 1'b0; | |
1076 | ||
1077 | always @(posedge SysClk) | |
1078 | if (!Reset_L) DRR_NextDMAChannel <= #`SD 5'h0; | |
1079 | else if (drr_Valid_n) DRR_NextDMAChannel <= #`SD predictedDMA; | |
1080 | ||
1081 | /*--------------------------------------------------------------*/ | |
1082 | // Reset Done Logic Flops | |
1083 | /*--------------------------------------------------------------*/ | |
1084 | assign drrStateMachineIdle = (DRR_ArbState == DRR_IDLE); | |
1085 | ||
1086 | always @(posedge SysClk) | |
1087 | if (!Reset_L) dmaResetDone <= #`SD 24'h0; | |
1088 | else if (LatchActiveDMA) dmaResetDone <= #`SD dmaResetScheduled | |
1089 | & | |
1090 | Port_DMA_List; | |
1091 | else if (drrStateMachineIdle) dmaResetDone <= #`SD dmaResetScheduled | |
1092 | & | |
1093 | Port_DMA_List; | |
1094 | else dmaResetDone <= #`SD dmaResetDone | |
1095 | & | |
1096 | Port_DMA_List | |
1097 | & | |
1098 | dmaResetScheduled | |
1099 | & | |
1100 | dmaActive; | |
1101 | ||
1102 | /*--------------------------------------------------------------*/ | |
1103 | // Instantiated Flops | |
1104 | // | |
1105 | // ContextActiveList is a list of participating dmas that will | |
1106 | // get acredit update whether deficited or not | |
1107 | // | |
1108 | // noDeficted dma are participants of drr arbitration. | |
1109 | /*--------------------------------------------------------------*/ | |
1110 | always @(posedge SysClk) | |
1111 | if (!Reset_L) ContextActiveList <= #`SD 24'b0; | |
1112 | else if (LatchActiveDMA) ContextActiveList <= #`SD activeListDMA; | |
1113 | ||
1114 | always @(posedge SysClk) | |
1115 | if (!Reset_L) noDefictedContextActiveList <= #`SD 24'b0; | |
1116 | else if (LatchActiveDMA) noDefictedContextActiveList <= #`SD activeListDMA | |
1117 | & | |
1118 | noDMADeficitList; | |
1119 | ||
1120 | always @(posedge SysClk) | |
1121 | if (!Reset_L) dmaServicedList <= #`SD 24'b0; | |
1122 | else if (LatchActiveDMA) dmaServicedList <= #`SD activeListDMA | |
1123 | & | |
1124 | noDMADeficitList; | |
1125 | else if (updateServiced) | |
1126 | dmaServicedList <= #`SD dmaServicedList | |
1127 | ^ | |
1128 | currentDMAChannel; | |
1129 | ||
1130 | /*--------------------------------------------------------------*/ | |
1131 | // DRR Arbiter State Vector | |
1132 | /*--------------------------------------------------------------*/ | |
1133 | always @(posedge SysClk) | |
1134 | if (!Reset_L) DRR_ArbState <= #`SD DRR_IDLE; | |
1135 | else DRR_ArbState <= #`SD nextState; | |
1136 | ||
1137 | /*--------------------------------------------------------------*/ | |
1138 | // DRR Arbiter State Machine | |
1139 | /*--------------------------------------------------------------*/ | |
1140 | function [3:0] Defaults; | |
1141 | input [3:0] currentState; | |
1142 | begin | |
1143 | Defaults = currentState; | |
1144 | clrMaxBurst_n = 1'b0; | |
1145 | LatchActiveDMA = 1'b0; | |
1146 | drr_Valid_n = 1'b0; | |
1147 | AddCreditToContext = 1'b0; | |
1148 | ClrDeficitForEofList = 1'b0; | |
1149 | updateServiced = 1'b0; | |
1150 | end | |
1151 | endfunction | |
1152 | ||
1153 | ||
1154 | always @(/*AUTOSENSE*/FlushEngine or MAC_Enabled | |
1155 | or DRR_PacketDone or Txc_Enabled or activeDMA | |
1156 | or someDMALeftToService | |
1157 | or allDMAdeficited or ContextActiveList or dmaGoneDeficit | |
1158 | or newMaxBurst or endOfList or dmaHasAnError | |
1159 | or DRR_ArbState) | |
1160 | ||
1161 | case(DRR_ArbState) // synopsys full_case parallel_case | |
1162 | /* 0in < case -full -parallel */ | |
1163 | DRR_IDLE: | |
1164 | begin | |
1165 | nextState = Defaults(DRR_ArbState); | |
1166 | ||
1167 | if (Txc_Enabled) | |
1168 | begin | |
1169 | if (MAC_Enabled) | |
1170 | begin | |
1171 | if (newMaxBurst) | |
1172 | begin | |
1173 | nextState = UPDATE_NEW_CREDIT; | |
1174 | clrMaxBurst_n = 1'b1; | |
1175 | end | |
1176 | else if (activeDMA) | |
1177 | nextState = LATCH_ACTIVE_DMA; | |
1178 | end | |
1179 | end | |
1180 | end | |
1181 | ||
1182 | UPDATE_NEW_CREDIT: | |
1183 | begin | |
1184 | nextState = Defaults(DRR_ArbState); | |
1185 | ||
1186 | if (activeDMA) | |
1187 | nextState = LATCH_ACTIVE_DMA; | |
1188 | else | |
1189 | nextState = DRR_IDLE; | |
1190 | ||
1191 | end | |
1192 | ||
1193 | LATCH_ACTIVE_DMA: | |
1194 | begin | |
1195 | nextState = Defaults(DRR_ArbState); | |
1196 | LatchActiveDMA = 1'b1; | |
1197 | nextState = CHECK_DEFECITS; | |
1198 | end | |
1199 | ||
1200 | CHECK_DEFECITS: | |
1201 | begin | |
1202 | nextState = Defaults(DRR_ArbState); | |
1203 | ||
1204 | if (|ContextActiveList) | |
1205 | begin | |
1206 | if (allDMAdeficited) | |
1207 | nextState = ADD_CREDITS; | |
1208 | else | |
1209 | nextState = DRR_ARBITER; | |
1210 | end | |
1211 | else | |
1212 | nextState = DRR_IDLE; | |
1213 | end | |
1214 | ||
1215 | DRR_ARBITER: | |
1216 | begin | |
1217 | nextState = Defaults(DRR_ArbState); | |
1218 | drr_Valid_n = 1'b1; | |
1219 | nextState = WAIT_FOR_TRANSMIT; | |
1220 | end | |
1221 | ||
1222 | WAIT_FOR_TRANSMIT: | |
1223 | begin | |
1224 | nextState = Defaults(DRR_ArbState); | |
1225 | ||
1226 | if (FlushEngine) | |
1227 | nextState = DRR_IDLE; | |
1228 | else if (DRR_PacketDone) | |
1229 | nextState = CHECK_DMA_STATE; | |
1230 | end | |
1231 | ||
1232 | CHECK_DMA_STATE: | |
1233 | begin | |
1234 | nextState = Defaults(DRR_ArbState); | |
1235 | ||
1236 | if (dmaGoneDeficit | endOfList | dmaHasAnError) | |
1237 | updateServiced = 1'b1; | |
1238 | ||
1239 | if (FlushEngine) | |
1240 | nextState = DRR_IDLE; | |
1241 | else if (allDMAdeficited) | |
1242 | nextState = ADD_CREDITS; | |
1243 | else | |
1244 | nextState = CHECK_ACTIVE_STATE; | |
1245 | end | |
1246 | ||
1247 | CHECK_ACTIVE_STATE: | |
1248 | begin | |
1249 | nextState = Defaults(DRR_ArbState); | |
1250 | ||
1251 | if (someDMALeftToService) | |
1252 | nextState = DRR_ARBITER; | |
1253 | else | |
1254 | begin | |
1255 | ClrDeficitForEofList = 1'b1; | |
1256 | nextState = DRR_IDLE; | |
1257 | end | |
1258 | end | |
1259 | ||
1260 | ADD_CREDITS: | |
1261 | begin | |
1262 | nextState = Defaults(DRR_ArbState); | |
1263 | AddCreditToContext = 1'b1; | |
1264 | ClrDeficitForEofList = 1'b1; | |
1265 | ||
1266 | if (FlushEngine) | |
1267 | nextState = DRR_IDLE; | |
1268 | else if (newMaxBurst) | |
1269 | begin | |
1270 | clrMaxBurst_n = 1'b1; | |
1271 | nextState = UPDATE_NEW_CREDIT; | |
1272 | end | |
1273 | else | |
1274 | nextState = DRR_IDLE; | |
1275 | end | |
1276 | ||
1277 | endcase | |
1278 | ||
1279 | endmodule |