Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / design / sys / iop / niu / rtl / niu_txc_drr_arbiter.v
CommitLineData
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
57module 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
301input SysClk;
302input Reset_L;
303input Txc_Enabled;
304input MAC_Enabled;
305input FlushEngine;
306
307// DAM Cache Registers
308//DMA0
309input DMA0_Active;
310input DMA0_Error;
311input DMA0_EofList;
312input DMA0_CacheReady;
313input DMA0_Partial;
314input DMA0_Reset_Scheduled;
315
316output DMA0_Reset_Done;
317
318//DMA1
319input DMA1_Active;
320input DMA1_Error;
321input DMA1_EofList;
322input DMA1_CacheReady;
323input DMA1_Partial;
324input DMA1_Reset_Scheduled;
325
326output DMA1_Reset_Done;
327
328//DMA2
329input DMA2_Active;
330input DMA2_Error;
331input DMA2_EofList;
332input DMA2_CacheReady;
333input DMA2_Partial;
334input DMA2_Reset_Scheduled;
335
336output DMA2_Reset_Done;
337
338//DMA3
339input DMA3_Active;
340input DMA3_Error;
341input DMA3_EofList;
342input DMA3_CacheReady;
343input DMA3_Partial;
344input DMA3_Reset_Scheduled;
345
346output DMA3_Reset_Done;
347
348//DMA4
349input DMA4_Active;
350input DMA4_Error;
351input DMA4_EofList;
352input DMA4_CacheReady;
353input DMA4_Partial;
354input DMA4_Reset_Scheduled;
355
356output DMA4_Reset_Done;
357
358//DMA5
359input DMA5_Active;
360input DMA5_Error;
361input DMA5_EofList;
362input DMA5_CacheReady;
363input DMA5_Partial;
364input DMA5_Reset_Scheduled;
365
366output DMA5_Reset_Done;
367
368//DMA6
369input DMA6_Active;
370input DMA6_Error;
371input DMA6_EofList;
372input DMA6_CacheReady;
373input DMA6_Partial;
374input DMA6_Reset_Scheduled;
375
376output DMA6_Reset_Done;
377
378//DMA7
379input DMA7_Active;
380input DMA7_Error;
381input DMA7_EofList;
382input DMA7_CacheReady;
383input DMA7_Partial;
384input DMA7_Reset_Scheduled;
385
386output DMA7_Reset_Done;
387
388//DMA8
389input DMA8_Active;
390input DMA8_Error;
391input DMA8_EofList;
392input DMA8_CacheReady;
393input DMA8_Partial;
394input DMA8_Reset_Scheduled;
395
396output DMA8_Reset_Done;
397
398//DMA9
399input DMA9_Active;
400input DMA9_Error;
401input DMA9_EofList;
402input DMA9_CacheReady;
403input DMA9_Partial;
404input DMA9_Reset_Scheduled;
405
406output DMA9_Reset_Done;
407
408//DMA10
409input DMA10_Active;
410input DMA10_Error;
411input DMA10_EofList;
412input DMA10_CacheReady;
413input DMA10_Partial;
414input DMA10_Reset_Scheduled;
415
416output DMA10_Reset_Done;
417
418//DMA11
419input DMA11_Active;
420input DMA11_Error;
421input DMA11_EofList;
422input DMA11_CacheReady;
423input DMA11_Partial;
424input DMA11_Reset_Scheduled;
425
426output DMA11_Reset_Done;
427
428//DMA12
429input DMA12_Active;
430input DMA12_Error;
431input DMA12_EofList;
432input DMA12_CacheReady;
433input DMA12_Partial;
434input DMA12_Reset_Scheduled;
435
436output DMA12_Reset_Done;
437
438//DMA13
439input DMA13_Active;
440input DMA13_Error;
441input DMA13_EofList;
442input DMA13_CacheReady;
443input DMA13_Partial;
444input DMA13_Reset_Scheduled;
445
446output DMA13_Reset_Done;
447
448//DMA14
449input DMA14_Active;
450input DMA14_Error;
451input DMA14_EofList;
452input DMA14_CacheReady;
453input DMA14_Partial;
454input DMA14_Reset_Scheduled;
455
456output DMA14_Reset_Done;
457
458//DMA15
459input DMA15_Active;
460input DMA15_Error;
461input DMA15_EofList;
462input DMA15_CacheReady;
463input DMA15_Partial;
464input DMA15_Reset_Scheduled;
465
466output DMA15_Reset_Done;
467
468//DMA16
469input DMA16_Active;
470input DMA16_Error;
471input DMA16_EofList;
472input DMA16_CacheReady;
473input DMA16_Partial;
474input DMA16_Reset_Scheduled;
475
476output DMA16_Reset_Done;
477
478//DMA17
479input DMA17_Active;
480input DMA17_Error;
481input DMA17_EofList;
482input DMA17_CacheReady;
483input DMA17_Partial;
484input DMA17_Reset_Scheduled;
485
486output DMA17_Reset_Done;
487
488//DMA18
489input DMA18_Active;
490input DMA18_Error;
491input DMA18_EofList;
492input DMA18_CacheReady;
493input DMA18_Partial;
494input DMA18_Reset_Scheduled;
495
496output DMA18_Reset_Done;
497
498//DMA19
499input DMA19_Active;
500input DMA19_Error;
501input DMA19_EofList;
502input DMA19_CacheReady;
503input DMA19_Partial;
504input DMA19_Reset_Scheduled;
505
506output DMA19_Reset_Done;
507
508//DMA20
509input DMA20_Active;
510input DMA20_Error;
511input DMA20_EofList;
512input DMA20_CacheReady;
513input DMA20_Partial;
514input DMA20_Reset_Scheduled;
515
516output DMA20_Reset_Done;
517
518//DMA21
519input DMA21_Active;
520input DMA21_Error;
521input DMA21_EofList;
522input DMA21_CacheReady;
523input DMA21_Partial;
524input DMA21_Reset_Scheduled;
525
526output DMA21_Reset_Done;
527
528//DMA22
529input DMA22_Active;
530input DMA22_Error;
531input DMA22_EofList;
532input DMA22_CacheReady;
533input DMA22_Partial;
534input DMA22_Reset_Scheduled;
535
536output DMA22_Reset_Done;
537
538//DMA23
539input DMA23_Active;
540input DMA23_Error;
541input DMA23_EofList;
542input DMA23_CacheReady;
543input DMA23_Partial;
544input DMA23_Reset_Scheduled;
545
546output DMA23_Reset_Done;
547
548// Control Registers
549input DMA0_NewMaxBurst;
550input DMA1_NewMaxBurst;
551input DMA2_NewMaxBurst;
552input DMA3_NewMaxBurst;
553input DMA4_NewMaxBurst;
554input DMA5_NewMaxBurst;
555input DMA6_NewMaxBurst;
556input DMA7_NewMaxBurst;
557input DMA8_NewMaxBurst;
558input DMA9_NewMaxBurst;
559input DMA10_NewMaxBurst;
560input DMA11_NewMaxBurst;
561input DMA12_NewMaxBurst;
562input DMA13_NewMaxBurst;
563input DMA14_NewMaxBurst;
564input DMA15_NewMaxBurst;
565input DMA16_NewMaxBurst;
566input DMA17_NewMaxBurst;
567input DMA18_NewMaxBurst;
568input DMA19_NewMaxBurst;
569input DMA20_NewMaxBurst;
570input DMA21_NewMaxBurst;
571input DMA22_NewMaxBurst;
572input DMA23_NewMaxBurst;
573input [23:0] Port_DMA_List;
574
575output ClrMaxBurst;
576
577reg ClrMaxBurst;
578
579// DMA deficit state
580input DMA0_NoDeficit;
581input DMA1_NoDeficit;
582input DMA2_NoDeficit;
583input DMA3_NoDeficit;
584input DMA4_NoDeficit;
585input DMA5_NoDeficit;
586input DMA6_NoDeficit;
587input DMA7_NoDeficit;
588input DMA8_NoDeficit;
589input DMA9_NoDeficit;
590input DMA10_NoDeficit;
591input DMA11_NoDeficit;
592input DMA12_NoDeficit;
593input DMA13_NoDeficit;
594input DMA14_NoDeficit;
595input DMA15_NoDeficit;
596input DMA16_NoDeficit;
597input DMA17_NoDeficit;
598input DMA18_NoDeficit;
599input DMA19_NoDeficit;
600input DMA20_NoDeficit;
601input DMA21_NoDeficit;
602input DMA22_NoDeficit;
603input DMA23_NoDeficit;
604
605output AddCreditToContext;
606output ClrDeficitForEofList;
607output [23:0] ContextActiveList;
608
609reg AddCreditToContext;
610reg ClrDeficitForEofList;
611reg [23:0] ContextActiveList;
612
613// Data Fetch State Machine
614input DRR_PacketDone;
615
616output DRR_Arb_Valid;
617output [4:0] DRR_NextDMAChannel;
618
619reg DRR_Arb_Valid;
620reg [4:0] DRR_NextDMAChannel;
621
622// Debug Block
623output LatchActiveDMA;
624
625reg LatchActiveDMA;
626
627// State Machine
628output [3:0] DRR_ArbState;
629
630reg [3:0] DRR_ArbState;
631
632/*--------------------------------------------------------------*/
633// Wires & Registers
634/*--------------------------------------------------------------*/
635wire allDMAdeficited;
636wire activeDMA;
637wire newMaxBurst;
638wire dmaGoneDeficit;
639wire drrStateMachineIdle;
640wire someDMALeftToService;
641wire [23:0] dmaDeficited;
642wire [23:0] activeListDMA;
643wire [23:0] dmaList;
644wire [23:0] dmaEofList;
645wire [23:0] dmaNewMaxBurst;
646wire [23:0] dmaActive;
647wire [23:0] dmaPartial;
648wire [23:0] dmaError;
649wire [23:0] dmacacheReady;
650wire [23:0] dmaResetScheduled;
651wire [23:0] noDMADeficitList;
652
653reg clrMaxBurst_n;
654reg drr_Valid_n;
655reg updateServiced;
656reg endOfList;
657reg dmaHasAnError;
658reg [3:0] nextState;
659reg [4:0] predictedDMA;
660reg [23:0] dmaResetDone;
661reg [23:0] dmaServicedList;
662reg [23:0] currentDMAChannel;
663reg [23:0] noDefictedContextActiveList;
664
665/*--------------------------------------------------------------*/
666// Parameters and Defines
667/*--------------------------------------------------------------*/
668parameter 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
679reg [192:1] DRR_ARB_STATE;
680
681
682always @(DRR_ArbState)
683begin
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
696end
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/*--------------------------------------------------------------*/
714assign DMA0_Reset_Done = dmaResetDone[0];
715assign DMA1_Reset_Done = dmaResetDone[1];
716assign DMA2_Reset_Done = dmaResetDone[2];
717assign DMA3_Reset_Done = dmaResetDone[3];
718assign DMA4_Reset_Done = dmaResetDone[4];
719assign DMA5_Reset_Done = dmaResetDone[5];
720assign DMA6_Reset_Done = dmaResetDone[6];
721assign DMA7_Reset_Done = dmaResetDone[7];
722assign DMA8_Reset_Done = dmaResetDone[8];
723assign DMA9_Reset_Done = dmaResetDone[9];
724assign DMA10_Reset_Done = dmaResetDone[10];
725assign DMA11_Reset_Done = dmaResetDone[11];
726assign DMA12_Reset_Done = dmaResetDone[12];
727assign DMA13_Reset_Done = dmaResetDone[13];
728assign DMA14_Reset_Done = dmaResetDone[14];
729assign DMA15_Reset_Done = dmaResetDone[15];
730assign DMA16_Reset_Done = dmaResetDone[16];
731assign DMA17_Reset_Done = dmaResetDone[17];
732assign DMA18_Reset_Done = dmaResetDone[18];
733assign DMA19_Reset_Done = dmaResetDone[19];
734assign DMA20_Reset_Done = dmaResetDone[20];
735assign DMA21_Reset_Done = dmaResetDone[21];
736assign DMA22_Reset_Done = dmaResetDone[22];
737assign DMA23_Reset_Done = dmaResetDone[23];
738
739assign 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
747assign 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
757assign 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
767assign 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
777assign 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
791assign 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
801assign 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
812assign 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
828assign activeListDMA = (dmaActive & dmacacheReady & Port_DMA_List
829 &
830 ~dmaError & ~dmaEofList
831 &
832 ~dmaPartial & ~dmaResetScheduled);
833
834assign activeDMA = |(activeListDMA);
835
836assign dmaDeficited = (~noDMADeficitList | dmaEofList
837 |
838 ~noDefictedContextActiveList);
839
840assign allDMAdeficited = &(dmaDeficited);
841assign dmaGoneDeficit = (|(dmaDeficited & currentDMAChannel));
842assign newMaxBurst = |(dmaNewMaxBurst & Port_DMA_List);
843
844assign someDMALeftToService = (|(ContextActiveList & dmaServicedList));
845
846/*--------------------------------------------------------------*/
847// For Debug Only, need to remove later
848/*--------------------------------------------------------------*/
849// synopsys translate_off
850
851wire dma0Deficited;
852wire dma1Deficited;
853wire dma2Deficited;
854wire dma3Deficited;
855wire dma4Deficited;
856wire dma5Deficited;
857wire dma6Deficited;
858wire dma7Deficited;
859wire dma8Deficited;
860wire dma9Deficited;
861wire dma10Deficited;
862wire dma11Deficited;
863wire dma12Deficited;
864wire dma13Deficited;
865wire dma14Deficited;
866wire dma15Deficited;
867wire dma16Deficited;
868wire dma17Deficited;
869wire dma18Deficited;
870wire dma19Deficited;
871wire dma20Deficited;
872wire dma21Deficited;
873wire dma22Deficited;
874wire dma23Deficited;
875
876assign dma0Deficited = dmaDeficited[0];
877assign dma1Deficited = dmaDeficited[1];
878assign dma2Deficited = dmaDeficited[2];
879assign dma3Deficited = dmaDeficited[3];
880assign dma4Deficited = dmaDeficited[4];
881assign dma5Deficited = dmaDeficited[5];
882assign dma6Deficited = dmaDeficited[6];
883assign dma7Deficited = dmaDeficited[7];
884assign dma8Deficited = dmaDeficited[8];
885assign dma9Deficited = dmaDeficited[9];
886assign dma10Deficited = dmaDeficited[10];
887assign dma11Deficited = dmaDeficited[11];
888assign dma12Deficited = dmaDeficited[12];
889assign dma13Deficited = dmaDeficited[13];
890assign dma14Deficited = dmaDeficited[14];
891assign dma15Deficited = dmaDeficited[15];
892assign dma16Deficited = dmaDeficited[16];
893assign dma17Deficited = dmaDeficited[17];
894assign dma18Deficited = dmaDeficited[18];
895assign dma19Deficited = dmaDeficited[19];
896assign dma20Deficited = dmaDeficited[20];
897assign dma21Deficited = dmaDeficited[21];
898assign dma22Deficited = dmaDeficited[22];
899assign dma23Deficited = dmaDeficited[23];
900
901// synopsys translate_on
902
903/*--------------------------------------------------------------*/
904// Round Robin
905/*--------------------------------------------------------------*/
906
907assign dmaList = (noDefictedContextActiveList & dmaServicedList);
908
909always @(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
963always @(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
993always @(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
1029always @(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/*--------------------------------------------------------------*/
1068always @(posedge SysClk)
1069 if (!Reset_L) ClrMaxBurst <= #`SD 1'b0;
1070 else ClrMaxBurst <= #`SD clrMaxBurst_n;
1071
1072always @(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
1077always @(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/*--------------------------------------------------------------*/
1084assign drrStateMachineIdle = (DRR_ArbState == DRR_IDLE);
1085
1086always @(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/*--------------------------------------------------------------*/
1110always @(posedge SysClk)
1111 if (!Reset_L) ContextActiveList <= #`SD 24'b0;
1112 else if (LatchActiveDMA) ContextActiveList <= #`SD activeListDMA;
1113
1114always @(posedge SysClk)
1115 if (!Reset_L) noDefictedContextActiveList <= #`SD 24'b0;
1116 else if (LatchActiveDMA) noDefictedContextActiveList <= #`SD activeListDMA
1117 &
1118 noDMADeficitList;
1119
1120always @(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/*--------------------------------------------------------------*/
1133always @(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/*--------------------------------------------------------------*/
1140function [3:0] Defaults;
1141input [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
1151endfunction
1152
1153
1154always @(/*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
1279endmodule