// ========== Copyright Header Begin ==========================================
// OpenSPARC T2 Processor File: niu_txc_drr_arbiter.v
// Copyright (C) 1995-2007 Sun Microsystems, Inc. All Rights Reserved
// 4150 Network Circle, Santa Clara, California 95054, U.S.A.
// * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; version 2 of the License.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
// For the avoidance of doubt, and except that if any non-GPL license
// choice is available it will apply instead, Sun elects to use only
// the General Public License version 2 (GPLv2) at this time for any
// software where a choice of GPL license versions is made
// available with the language indicating that GPLv2 or any later version
// may be used, or where a choice of which version of the GPL is applied is
// otherwise unspecified.
// Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
// CA 95054 USA or visit www.sun.com if you need additional information or
// ========== Copyright Header End ============================================
/*********************************************************************
* DRR Arbiter State Machine
* Orignal Author(s): Rahoul Puri
* Copyright (c) 2004 Sun Microsystems, Inc.
* This verilog model is the confidential and proprietary property of
* Sun Microsystems, Inc., and the possession or use of this model
* requires a written license from Sun Microsystems, Inc.
**********************************************************************/
module niu_txc_drr_arbiter (
ClrMaxBurst, // Clear max burst bit in control register
input DMA0_Reset_Scheduled;
input DMA1_Reset_Scheduled;
input DMA2_Reset_Scheduled;
input DMA3_Reset_Scheduled;
input DMA4_Reset_Scheduled;
input DMA5_Reset_Scheduled;
input DMA6_Reset_Scheduled;
input DMA7_Reset_Scheduled;
input DMA8_Reset_Scheduled;
input DMA9_Reset_Scheduled;
input DMA10_Reset_Scheduled;
input DMA11_Reset_Scheduled;
input DMA12_Reset_Scheduled;
input DMA13_Reset_Scheduled;
input DMA14_Reset_Scheduled;
input DMA15_Reset_Scheduled;
input DMA16_Reset_Scheduled;
input DMA17_Reset_Scheduled;
input DMA18_Reset_Scheduled;
input DMA19_Reset_Scheduled;
input DMA20_Reset_Scheduled;
input DMA21_Reset_Scheduled;
input DMA22_Reset_Scheduled;
input DMA23_Reset_Scheduled;
input [23:0] Port_DMA_List;
output AddCreditToContext;
output ClrDeficitForEofList;
output [23:0] ContextActiveList;
reg ClrDeficitForEofList;
reg [23:0] ContextActiveList;
// Data Fetch State Machine
output [4:0] DRR_NextDMAChannel;
reg [4:0] DRR_NextDMAChannel;
output [3:0] DRR_ArbState;
/*--------------------------------------------------------------*/
/*--------------------------------------------------------------*/
wire drrStateMachineIdle;
wire someDMALeftToService;
wire [23:0] dmaDeficited;
wire [23:0] activeListDMA;
wire [23:0] dmaNewMaxBurst;
wire [23:0] dmacacheReady;
wire [23:0] dmaResetScheduled;
wire [23:0] noDMADeficitList;
reg [23:0] dmaServicedList;
reg [23:0] currentDMAChannel;
reg [23:0] noDefictedContextActiveList;
/*--------------------------------------------------------------*/
// Parameters and Defines
/*--------------------------------------------------------------*/
parameter DRR_IDLE = 4'h0,
UPDATE_NEW_CREDIT = 4'h1,
WAIT_FOR_TRANSMIT = 4'h5,
CHECK_ACTIVE_STATE = 4'h7,
// synopsys translate_off
reg [192:1] DRR_ARB_STATE;
DRR_IDLE : DRR_ARB_STATE = "DRR_IDLE";
UPDATE_NEW_CREDIT: DRR_ARB_STATE = "UPDATE_NEW_CREDIT";
LATCH_ACTIVE_DMA : DRR_ARB_STATE = "LATCH_ACTIVE_DMA";
CHECK_DEFECITS: DRR_ARB_STATE = "CHECK_DEFECITS";
DRR_ARBITER : DRR_ARB_STATE = "DRR_ARBITER";
WAIT_FOR_TRANSMIT : DRR_ARB_STATE = "WAIT_FOR_TRANSMIT";
CHECK_DMA_STATE : DRR_ARB_STATE = "CHECK_DMA_STATE";
CHECK_ACTIVE_STATE : DRR_ARB_STATE = "CHECK_ACTIVE_STATE";
ADD_CREDITS : DRR_ARB_STATE = "ADD_CREDITS";
default : DRR_ARB_STATE = "UNKNOWN";
always@(posedge DRR_Arb_Valid ) begin
if ($test$plusargs("DRR_DEBUG")) begin
$display("DRR DEBUG %m: Selected Channel - %d Time -%t",DRR_NextDMAChannel,$time);
/*--------------------------------------------------------------*/
/*--------------------------------------------------------------*/
/*--------------------------------------------------------------*/
/*--------------------------------------------------------------*/
assign DMA0_Reset_Done = dmaResetDone[0];
assign DMA1_Reset_Done = dmaResetDone[1];
assign DMA2_Reset_Done = dmaResetDone[2];
assign DMA3_Reset_Done = dmaResetDone[3];
assign DMA4_Reset_Done = dmaResetDone[4];
assign DMA5_Reset_Done = dmaResetDone[5];
assign DMA6_Reset_Done = dmaResetDone[6];
assign DMA7_Reset_Done = dmaResetDone[7];
assign DMA8_Reset_Done = dmaResetDone[8];
assign DMA9_Reset_Done = dmaResetDone[9];
assign DMA10_Reset_Done = dmaResetDone[10];
assign DMA11_Reset_Done = dmaResetDone[11];
assign DMA12_Reset_Done = dmaResetDone[12];
assign DMA13_Reset_Done = dmaResetDone[13];
assign DMA14_Reset_Done = dmaResetDone[14];
assign DMA15_Reset_Done = dmaResetDone[15];
assign DMA16_Reset_Done = dmaResetDone[16];
assign DMA17_Reset_Done = dmaResetDone[17];
assign DMA18_Reset_Done = dmaResetDone[18];
assign DMA19_Reset_Done = dmaResetDone[19];
assign DMA20_Reset_Done = dmaResetDone[20];
assign DMA21_Reset_Done = dmaResetDone[21];
assign DMA22_Reset_Done = dmaResetDone[22];
assign DMA23_Reset_Done = dmaResetDone[23];
DMA23_EofList, DMA22_EofList, DMA21_EofList, DMA20_EofList,
DMA19_EofList, DMA18_EofList, DMA17_EofList, DMA16_EofList,
DMA15_EofList, DMA14_EofList, DMA13_EofList, DMA12_EofList,
DMA11_EofList, DMA10_EofList, DMA9_EofList, DMA8_EofList,
DMA7_EofList, DMA6_EofList, DMA5_EofList, DMA4_EofList,
DMA3_EofList, DMA2_EofList, DMA1_EofList, DMA0_EofList};
DMA23_CacheReady, DMA22_CacheReady, DMA21_CacheReady,
DMA20_CacheReady, DMA19_CacheReady, DMA18_CacheReady,
DMA17_CacheReady, DMA16_CacheReady, DMA15_CacheReady,
DMA14_CacheReady, DMA13_CacheReady, DMA12_CacheReady,
DMA11_CacheReady, DMA10_CacheReady, DMA9_CacheReady,
DMA8_CacheReady, DMA7_CacheReady, DMA6_CacheReady,
DMA5_CacheReady, DMA4_CacheReady, DMA3_CacheReady,
DMA2_CacheReady, DMA1_CacheReady, DMA0_CacheReady};
DMA23_Active, DMA22_Active, DMA21_Active,
DMA20_Active, DMA19_Active, DMA18_Active,
DMA17_Active, DMA16_Active, DMA15_Active,
DMA14_Active, DMA13_Active, DMA12_Active,
DMA11_Active, DMA10_Active, DMA9_Active,
DMA8_Active, DMA7_Active, DMA6_Active,
DMA5_Active, DMA4_Active, DMA3_Active,
DMA2_Active, DMA1_Active, DMA0_Active};
DMA23_Partial, DMA22_Partial, DMA21_Partial,
DMA20_Partial, DMA19_Partial, DMA18_Partial,
DMA17_Partial, DMA16_Partial, DMA15_Partial,
DMA14_Partial, DMA13_Partial, DMA12_Partial,
DMA11_Partial, DMA10_Partial, DMA9_Partial,
DMA8_Partial, DMA7_Partial, DMA6_Partial,
DMA5_Partial, DMA4_Partial, DMA3_Partial,
DMA2_Partial, DMA1_Partial, DMA0_Partial};
assign dmaResetScheduled = {
DMA23_Reset_Scheduled, DMA22_Reset_Scheduled,
DMA21_Reset_Scheduled, DMA20_Reset_Scheduled,
DMA19_Reset_Scheduled, DMA18_Reset_Scheduled,
DMA17_Reset_Scheduled, DMA16_Reset_Scheduled,
DMA15_Reset_Scheduled, DMA14_Reset_Scheduled,
DMA13_Reset_Scheduled, DMA12_Reset_Scheduled,
DMA11_Reset_Scheduled, DMA10_Reset_Scheduled,
DMA9_Reset_Scheduled, DMA8_Reset_Scheduled,
DMA7_Reset_Scheduled, DMA6_Reset_Scheduled,
DMA5_Reset_Scheduled, DMA4_Reset_Scheduled,
DMA3_Reset_Scheduled, DMA2_Reset_Scheduled,
DMA1_Reset_Scheduled, DMA0_Reset_Scheduled};
DMA23_Error, DMA22_Error, DMA21_Error,
DMA20_Error, DMA19_Error, DMA18_Error,
DMA17_Error, DMA16_Error, DMA15_Error,
DMA14_Error, DMA13_Error, DMA12_Error,
DMA11_Error, DMA10_Error, DMA9_Error,
DMA8_Error, DMA7_Error, DMA6_Error,
DMA5_Error, DMA4_Error, DMA3_Error,
DMA2_Error, DMA1_Error, DMA0_Error};
assign noDMADeficitList = {
DMA23_NoDeficit, DMA22_NoDeficit, DMA21_NoDeficit,
DMA20_NoDeficit, DMA19_NoDeficit, DMA18_NoDeficit,
DMA17_NoDeficit, DMA16_NoDeficit, DMA15_NoDeficit,
DMA14_NoDeficit, DMA13_NoDeficit, DMA12_NoDeficit,
DMA11_NoDeficit, DMA10_NoDeficit, DMA9_NoDeficit,
DMA8_NoDeficit, DMA7_NoDeficit, DMA6_NoDeficit,
DMA5_NoDeficit, DMA4_NoDeficit, DMA3_NoDeficit,
DMA2_NoDeficit, DMA1_NoDeficit, DMA0_NoDeficit
assign dmaNewMaxBurst = {
DMA23_NewMaxBurst, DMA22_NewMaxBurst,
DMA21_NewMaxBurst, DMA20_NewMaxBurst,
DMA19_NewMaxBurst, DMA18_NewMaxBurst,
DMA17_NewMaxBurst, DMA16_NewMaxBurst,
DMA15_NewMaxBurst, DMA14_NewMaxBurst,
DMA13_NewMaxBurst, DMA12_NewMaxBurst,
DMA11_NewMaxBurst, DMA10_NewMaxBurst,
DMA9_NewMaxBurst, DMA8_NewMaxBurst,
DMA7_NewMaxBurst, DMA6_NewMaxBurst,
DMA5_NewMaxBurst, DMA4_NewMaxBurst,
DMA3_NewMaxBurst, DMA2_NewMaxBurst,
DMA1_NewMaxBurst, DMA0_NewMaxBurst
assign activeListDMA = (dmaActive & dmacacheReady & Port_DMA_List
~dmaPartial & ~dmaResetScheduled);
assign activeDMA = |(activeListDMA);
assign dmaDeficited = (~noDMADeficitList | dmaEofList
~noDefictedContextActiveList);
assign allDMAdeficited = &(dmaDeficited);
assign dmaGoneDeficit = (|(dmaDeficited & currentDMAChannel));
assign newMaxBurst = |(dmaNewMaxBurst & Port_DMA_List);
assign someDMALeftToService = (|(ContextActiveList & dmaServicedList));
/*--------------------------------------------------------------*/
// For Debug Only, need to remove later
/*--------------------------------------------------------------*/
// synopsys translate_off
assign dma0Deficited = dmaDeficited[0];
assign dma1Deficited = dmaDeficited[1];
assign dma2Deficited = dmaDeficited[2];
assign dma3Deficited = dmaDeficited[3];
assign dma4Deficited = dmaDeficited[4];
assign dma5Deficited = dmaDeficited[5];
assign dma6Deficited = dmaDeficited[6];
assign dma7Deficited = dmaDeficited[7];
assign dma8Deficited = dmaDeficited[8];
assign dma9Deficited = dmaDeficited[9];
assign dma10Deficited = dmaDeficited[10];
assign dma11Deficited = dmaDeficited[11];
assign dma12Deficited = dmaDeficited[12];
assign dma13Deficited = dmaDeficited[13];
assign dma14Deficited = dmaDeficited[14];
assign dma15Deficited = dmaDeficited[15];
assign dma16Deficited = dmaDeficited[16];
assign dma17Deficited = dmaDeficited[17];
assign dma18Deficited = dmaDeficited[18];
assign dma19Deficited = dmaDeficited[19];
assign dma20Deficited = dmaDeficited[20];
assign dma21Deficited = dmaDeficited[21];
assign dma22Deficited = dmaDeficited[22];
assign dma23Deficited = dmaDeficited[23];
/*--------------------------------------------------------------*/
/*--------------------------------------------------------------*/
assign dmaList = (noDefictedContextActiveList & dmaServicedList);
casex(dmaList) // synopsys parallel_case
24'bxxxx_xxxx_xxxx_xxxx_xxxx_xxx1:
predictedDMA = `DMA_CHANNEL_ZERO;
24'bxxxx_xxxx_xxxx_xxxx_xxxx_xx10:
predictedDMA = `DMA_CHANNEL_ONE;
24'bxxxx_xxxx_xxxx_xxxx_xxxx_x100:
predictedDMA = `DMA_CHANNEL_TWO;
24'bxxxx_xxxx_xxxx_xxxx_xxxx_1000:
predictedDMA = `DMA_CHANNEL_THREE;
24'bxxxx_xxxx_xxxx_xxxx_xxx1_0000:
predictedDMA = `DMA_CHANNEL_FOUR;
24'bxxxx_xxxx_xxxx_xxxx_xx10_0000:
predictedDMA = `DMA_CHANNEL_FIVE;
24'bxxxx_xxxx_xxxx_xxxx_x100_0000:
predictedDMA = `DMA_CHANNEL_SIX;
24'bxxxx_xxxx_xxxx_xxxx_1000_0000:
predictedDMA = `DMA_CHANNEL_SEVEN;
24'bxxxx_xxxx_xxxx_xxx1_0000_0000:
predictedDMA = `DMA_CHANNEL_EIGHT;
24'bxxxx_xxxx_xxxx_xx10_0000_0000:
predictedDMA = `DMA_CHANNEL_NINE;
24'bxxxx_xxxx_xxxx_x100_0000_0000:
predictedDMA = `DMA_CHANNEL_TEN;
24'bxxxx_xxxx_xxxx_1000_0000_0000:
predictedDMA = `DMA_CHANNEL_ELEVEN;
24'bxxxx_xxxx_xxx1_0000_0000_0000:
predictedDMA = `DMA_CHANNEL_TWELVE;
24'bxxxx_xxxx_xx10_0000_0000_0000:
predictedDMA = `DMA_CHANNEL_THIRTEEN;
24'bxxxx_xxxx_x100_0000_0000_0000:
predictedDMA = `DMA_CHANNEL_FOURTEEN;
24'bxxxx_xxxx_1000_0000_0000_0000:
predictedDMA = `DMA_CHANNEL_FIFTEEN;
24'bxxxx_xxx1_0000_0000_0000_0000:
predictedDMA = `DMA_CHANNEL_SIXTEEN;
24'bxxxx_xx10_0000_0000_0000_0000:
predictedDMA = `DMA_CHANNEL_SEVENTEEN;
24'bxxxx_x100_0000_0000_0000_0000:
predictedDMA = `DMA_CHANNEL_EIGHTEEN;
24'bxxxx_1000_0000_0000_0000_0000:
predictedDMA = `DMA_CHANNEL_NINETEEN;
24'bxxx1_0000_0000_0000_0000_0000:
predictedDMA = `DMA_CHANNEL_TWENTY;
24'bxx10_0000_0000_0000_0000_0000:
predictedDMA = `DMA_CHANNEL_TWENTYONE;
24'bx100_0000_0000_0000_0000_0000:
predictedDMA = `DMA_CHANNEL_TWENTYTWO;
24'b1000_0000_0000_0000_0000_0000:
predictedDMA = `DMA_CHANNEL_TWENTYTHREE;
default: predictedDMA = 5'hx;
always @(DRR_NextDMAChannel
case(DRR_NextDMAChannel) // synopsys full_case parallel_case
`DMA_CHANNEL_ZERO: currentDMAChannel = 24'h000001;
`DMA_CHANNEL_ONE: currentDMAChannel = 24'h000002;
`DMA_CHANNEL_TWO: currentDMAChannel = 24'h000004;
`DMA_CHANNEL_THREE: currentDMAChannel = 24'h000008;
`DMA_CHANNEL_FOUR: currentDMAChannel = 24'h000010;
`DMA_CHANNEL_FIVE: currentDMAChannel = 24'h000020;
`DMA_CHANNEL_SIX: currentDMAChannel = 24'h000040;
`DMA_CHANNEL_SEVEN: currentDMAChannel = 24'h000080;
`DMA_CHANNEL_EIGHT: currentDMAChannel = 24'h000100;
`DMA_CHANNEL_NINE: currentDMAChannel = 24'h000200;
`DMA_CHANNEL_TEN: currentDMAChannel = 24'h000400;
`DMA_CHANNEL_ELEVEN: currentDMAChannel = 24'h000800;
`DMA_CHANNEL_TWELVE: currentDMAChannel = 24'h001000;
`DMA_CHANNEL_THIRTEEN: currentDMAChannel = 24'h002000;
`DMA_CHANNEL_FOURTEEN: currentDMAChannel = 24'h004000;
`DMA_CHANNEL_FIFTEEN: currentDMAChannel = 24'h008000;
`DMA_CHANNEL_SIXTEEN: currentDMAChannel = 24'h010000;
`DMA_CHANNEL_SEVENTEEN: currentDMAChannel = 24'h020000;
`DMA_CHANNEL_EIGHTEEN: currentDMAChannel = 24'h040000;
`DMA_CHANNEL_NINETEEN: currentDMAChannel = 24'h080000;
`DMA_CHANNEL_TWENTY: currentDMAChannel = 24'h100000;
`DMA_CHANNEL_TWENTYONE: currentDMAChannel = 24'h200000;
`DMA_CHANNEL_TWENTYTWO: currentDMAChannel = 24'h400000;
`DMA_CHANNEL_TWENTYTHREE: currentDMAChannel = 24'h800000;
default: currentDMAChannel = 24'hx;
always @(DRR_NextDMAChannel
or DMA23_EofList or DMA22_EofList or DMA21_EofList or DMA20_EofList
or DMA19_EofList or DMA18_EofList or DMA17_EofList or DMA16_EofList
or DMA15_EofList or DMA14_EofList or DMA13_EofList or DMA12_EofList
or DMA11_EofList or DMA10_EofList or DMA9_EofList or DMA8_EofList
or DMA7_EofList or DMA6_EofList or DMA5_EofList or DMA4_EofList
or DMA3_EofList or DMA2_EofList or DMA1_EofList or DMA0_EofList
case(DRR_NextDMAChannel) // synopsys full_case parallel_case
`DMA_CHANNEL_ZERO: endOfList = DMA0_EofList;
`DMA_CHANNEL_ONE: endOfList = DMA1_EofList;
`DMA_CHANNEL_TWO: endOfList = DMA2_EofList;
`DMA_CHANNEL_THREE: endOfList = DMA3_EofList;
`DMA_CHANNEL_FOUR: endOfList = DMA4_EofList;
`DMA_CHANNEL_FIVE: endOfList = DMA5_EofList;
`DMA_CHANNEL_SIX: endOfList = DMA6_EofList;
`DMA_CHANNEL_SEVEN: endOfList = DMA7_EofList;
`DMA_CHANNEL_EIGHT: endOfList = DMA8_EofList;
`DMA_CHANNEL_NINE: endOfList = DMA9_EofList;
`DMA_CHANNEL_TEN: endOfList = DMA10_EofList;
`DMA_CHANNEL_ELEVEN: endOfList = DMA11_EofList;
`DMA_CHANNEL_TWELVE: endOfList = DMA12_EofList;
`DMA_CHANNEL_THIRTEEN: endOfList = DMA13_EofList;
`DMA_CHANNEL_FOURTEEN: endOfList = DMA14_EofList;
`DMA_CHANNEL_FIFTEEN: endOfList = DMA15_EofList;
`DMA_CHANNEL_SIXTEEN: endOfList = DMA16_EofList;
`DMA_CHANNEL_SEVENTEEN: endOfList = DMA17_EofList;
`DMA_CHANNEL_EIGHTEEN: endOfList = DMA18_EofList;
`DMA_CHANNEL_NINETEEN: endOfList = DMA19_EofList;
`DMA_CHANNEL_TWENTY: endOfList = DMA20_EofList;
`DMA_CHANNEL_TWENTYONE: endOfList = DMA21_EofList;
`DMA_CHANNEL_TWENTYTWO: endOfList = DMA22_EofList;
`DMA_CHANNEL_TWENTYTHREE: endOfList = DMA23_EofList;
default: endOfList = 1'bx;
always @(DRR_NextDMAChannel
or DMA23_Error or DMA22_Error or DMA21_Error or DMA20_Error
or DMA19_Error or DMA18_Error or DMA17_Error or DMA16_Error
or DMA15_Error or DMA14_Error or DMA13_Error or DMA12_Error
or DMA11_Error or DMA10_Error or DMA9_Error or DMA8_Error
or DMA7_Error or DMA6_Error or DMA5_Error or DMA4_Error
or DMA3_Error or DMA2_Error or DMA1_Error or DMA0_Error
case(DRR_NextDMAChannel) // synopsys full_case parallel_case
`DMA_CHANNEL_ZERO: dmaHasAnError = DMA0_Error;
`DMA_CHANNEL_ONE: dmaHasAnError = DMA1_Error;
`DMA_CHANNEL_TWO: dmaHasAnError = DMA2_Error;
`DMA_CHANNEL_THREE: dmaHasAnError = DMA3_Error;
`DMA_CHANNEL_FOUR: dmaHasAnError = DMA4_Error;
`DMA_CHANNEL_FIVE: dmaHasAnError = DMA5_Error;
`DMA_CHANNEL_SIX: dmaHasAnError = DMA6_Error;
`DMA_CHANNEL_SEVEN: dmaHasAnError = DMA7_Error;
`DMA_CHANNEL_EIGHT: dmaHasAnError = DMA8_Error;
`DMA_CHANNEL_NINE: dmaHasAnError = DMA9_Error;
`DMA_CHANNEL_TEN: dmaHasAnError = DMA10_Error;
`DMA_CHANNEL_ELEVEN: dmaHasAnError = DMA11_Error;
`DMA_CHANNEL_TWELVE: dmaHasAnError = DMA12_Error;
`DMA_CHANNEL_THIRTEEN: dmaHasAnError = DMA13_Error;
`DMA_CHANNEL_FOURTEEN: dmaHasAnError = DMA14_Error;
`DMA_CHANNEL_FIFTEEN: dmaHasAnError = DMA15_Error;
`DMA_CHANNEL_SIXTEEN: dmaHasAnError = DMA16_Error;
`DMA_CHANNEL_SEVENTEEN: dmaHasAnError = DMA17_Error;
`DMA_CHANNEL_EIGHTEEN: dmaHasAnError = DMA18_Error;
`DMA_CHANNEL_NINETEEN: dmaHasAnError = DMA19_Error;
`DMA_CHANNEL_TWENTY: dmaHasAnError = DMA20_Error;
`DMA_CHANNEL_TWENTYONE: dmaHasAnError = DMA21_Error;
`DMA_CHANNEL_TWENTYTWO: dmaHasAnError = DMA22_Error;
`DMA_CHANNEL_TWENTYTHREE: dmaHasAnError = DMA23_Error;
default: dmaHasAnError = 1'bx;
/*--------------------------------------------------------------*/
/*--------------------------------------------------------------*/
if (!Reset_L) ClrMaxBurst <= #`SD 1'b0;
else ClrMaxBurst <= #`SD clrMaxBurst_n;
if (!Reset_L) DRR_Arb_Valid <= #`SD 1'b0;
else if (drr_Valid_n) DRR_Arb_Valid <= #`SD 1'b1;
else if (DRR_PacketDone) DRR_Arb_Valid <= #`SD 1'b0;
if (!Reset_L) DRR_NextDMAChannel <= #`SD 5'h0;
else if (drr_Valid_n) DRR_NextDMAChannel <= #`SD predictedDMA;
/*--------------------------------------------------------------*/
// Reset Done Logic Flops
/*--------------------------------------------------------------*/
assign drrStateMachineIdle = (DRR_ArbState == DRR_IDLE);
if (!Reset_L) dmaResetDone <= #`SD 24'h0;
else if (LatchActiveDMA) dmaResetDone <= #`SD dmaResetScheduled
else if (drrStateMachineIdle) dmaResetDone <= #`SD dmaResetScheduled
else dmaResetDone <= #`SD dmaResetDone
/*--------------------------------------------------------------*/
// ContextActiveList is a list of participating dmas that will
// get acredit update whether deficited or not
// noDeficted dma are participants of drr arbitration.
/*--------------------------------------------------------------*/
if (!Reset_L) ContextActiveList <= #`SD 24'b0;
else if (LatchActiveDMA) ContextActiveList <= #`SD activeListDMA;
if (!Reset_L) noDefictedContextActiveList <= #`SD 24'b0;
else if (LatchActiveDMA) noDefictedContextActiveList <= #`SD activeListDMA
if (!Reset_L) dmaServicedList <= #`SD 24'b0;
else if (LatchActiveDMA) dmaServicedList <= #`SD activeListDMA
dmaServicedList <= #`SD dmaServicedList
/*--------------------------------------------------------------*/
// DRR Arbiter State Vector
/*--------------------------------------------------------------*/
if (!Reset_L) DRR_ArbState <= #`SD DRR_IDLE;
else DRR_ArbState <= #`SD nextState;
/*--------------------------------------------------------------*/
// DRR Arbiter State Machine
/*--------------------------------------------------------------*/
input [3:0] currentState;
AddCreditToContext = 1'b0;
ClrDeficitForEofList = 1'b0;
always @(/*AUTOSENSE*/FlushEngine or MAC_Enabled
or DRR_PacketDone or Txc_Enabled or activeDMA
or allDMAdeficited or ContextActiveList or dmaGoneDeficit
or newMaxBurst or endOfList or dmaHasAnError
case(DRR_ArbState) // synopsys full_case parallel_case
/* 0in < case -full -parallel */
nextState = Defaults(DRR_ArbState);
nextState = UPDATE_NEW_CREDIT;
nextState = LATCH_ACTIVE_DMA;
nextState = Defaults(DRR_ArbState);
nextState = LATCH_ACTIVE_DMA;
nextState = Defaults(DRR_ArbState);
nextState = CHECK_DEFECITS;
nextState = Defaults(DRR_ArbState);
nextState = Defaults(DRR_ArbState);
nextState = WAIT_FOR_TRANSMIT;
nextState = Defaults(DRR_ArbState);
nextState = CHECK_DMA_STATE;
nextState = Defaults(DRR_ArbState);
if (dmaGoneDeficit | endOfList | dmaHasAnError)
else if (allDMAdeficited)
nextState = CHECK_ACTIVE_STATE;
nextState = Defaults(DRR_ArbState);
if (someDMALeftToService)
ClrDeficitForEofList = 1'b1;
nextState = Defaults(DRR_ArbState);
AddCreditToContext = 1'b1;
ClrDeficitForEofList = 1'b1;
nextState = UPDATE_NEW_CREDIT;