// ========== Copyright Header Begin ==========================================
// OpenSPARC T2 Processor File: niu_txc_reAligner.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 ============================================
/*********************************************************************
* Anchor and ReAligner 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_reAligner (
Txc_Enabled, // Txc Enable
DMC_TXC_Resp_Data_Status,
DMC_TXC_Resp_Data_Length,
DMC_TXC_Resp_ByteEnables,
input [1:0] PortIndentifier;
// ReOrder PIO Control Registers
input WrUnInitializedTID;
input WrReOrderStateLogic;
input WrReOrderStateControl;
input WrReOrderStateData0;
input WrReOrderStateData1;
input WrReOrderStateData2;
input WrReOrderStateData3;
output [3:0] GatherRequestCount;
output [11:0] PacketRequestCount;
output [15:0] ReOrdersStuffed;
output [31:0] DuplicateTid;
output [31:0] UnInitializedTID;
output [31:0] TimedoutTids;
output [31:0] ReOrderStateLogic;
output [31:0] ReOrderStateControl;
output [31:0] ReOrderStateData0;
output [31:0] ReOrderStateData1;
output [31:0] ReOrderStateData2;
output [31:0] ReOrderStateData3;
reg [3:0] GatherRequestCount;
reg [11:0] PacketRequestCount;
reg [15:0] ReOrdersStuffed;
reg [31:0] UnInitializedTID;
reg [31:0] ReOrderStateData0;
reg [31:0] ReOrderStateData1;
reg [31:0] ReOrderStateData2;
reg [31:0] ReOrderStateData3;
input [3:0] MaxReorderNumber;
output [13:0] UpdateDMALength;
output [23:0] UpdateDMANumber;
reg [23:0] UpdateDMANumber;
// Re-Order Fifo Interface
input [31:0] ReOrderEccControl;
output ReOrderCorruptECCSingle;
output ReOrderCorruptECCDouble;
output ReOrderFifoReadStrobe;
output ReOrderFifoAlmostEmpty;
output [9:0] ReOrderWritePtr;
output [9:0] ReOrderReadPtr;
output [135:0] ReOrderEngineDataOut;
reg [9:0] ReOrderWritePtr;
input [5:0] Anchor_TransID;
input [12:0] Anchor_Length;
input [63:0] Anchor_Address;
// Tx DMA Response Interface
input DMC_TXC_Resp_Complete;
input DMC_TXC_Trans_Complete;
input DMC_TXC_Resp_Data_Valid;
input DMC_TXC_Resp_Client;
input [1:0] DMC_TXC_Resp_Port_Num;
input [3:0] DMC_TXC_Resp_Cmd_Status;
input [3:0] DMC_TXC_Resp_Data_Status;
input [4:0] DMC_TXC_Resp_DMA_Num;
input [5:0] DMC_TXC_Resp_TransID;
input [7:0] DMC_TXC_Resp_Cmd;
input [13:0] DMC_TXC_Resp_Data_Length;
input [15:0] DMC_TXC_Resp_ByteEnables;
input [63:0] DMC_TXC_Resp_Address;
input [127:0] DMC_TXC_Resp_Data;
output TXC_DMC_Resp_Accept;
// Packet Data Error Interface
// Transaction Timeout -> TDMC Interface
output [23:0] DMA_Nack_Pkt_Rd;
output [43:0] Nack_Pkt_Rd_Addr;
reg [23:0] DMA_Nack_Pkt_Rd;
reg [43:0] Nack_Pkt_Rd_Addr;
output DMA10_Inc_Pkt_Cnt;
output DMA11_Inc_Pkt_Cnt;
output DMA12_Inc_Pkt_Cnt;
output DMA13_Inc_Pkt_Cnt;
output DMA14_Inc_Pkt_Cnt;
output DMA15_Inc_Pkt_Cnt;
output DMA16_Inc_Pkt_Cnt;
output DMA17_Inc_Pkt_Cnt;
output DMA18_Inc_Pkt_Cnt;
output DMA19_Inc_Pkt_Cnt;
output DMA20_Inc_Pkt_Cnt;
output DMA21_Inc_Pkt_Cnt;
output DMA22_Inc_Pkt_Cnt;
output DMA23_Inc_Pkt_Cnt;
// State machine registers
output [3:0] Anchor_State;
output [3:0] ReOrder_State;
output [3:0] Pointer_State;
/*--------------------------------------------------------------*/
/*--------------------------------------------------------------*/
parameter REORDER_SIZE = 16,
/*--------------------------------------------------------------*/
/*--------------------------------------------------------------*/
wire resp_Trans_Complete;
wire extractedOddNumberPkt;
wire atHeadOfFifoMarkBit;
wire atHeadOfFifoGatherLast;
wire extractedGatherLast;
wire collisionTidsUpdate;
wire loadReOrderWatermark;
wire clrFailedStatePosEdge;
wire reOrderStateRdDonePosEdge;
wire reOrderStateWrDonePosEdge;
wire enableFailedStateLoad;
wire respAddrPageHandleMatch;
wire respAddrLessThanEq2UpperBound;
wire respAddrGreaterThanEq2LowerBound;
wire [3:0] highestReOrderUsed;
wire [3:0] numberOfReOrderEntries;
wire [3:0] reOrderStatePioAddr;
wire [3:0] reOrderStateFailAddr;
wire [4:0] numberOfBytes;
wire [4:0] extractedDMANumber;
wire [4:0] atHeadOfFifoDMANumber;
wire [9:0] endingReOrderWritePtr;
wire [9:0] extractedNextWrPtr;
wire [9:0] extractedEndingWrPtr;
wire [9:0] atHeadOfFifoEndingWrPtr;
wire [9:0] newReOrderWritePtr;
wire [9:0] reOrderWritePtrPlusOne;
wire [10:0] readPtrPlusOne;
wire [10:0] pointerDifference;
wire [10:0] normalized_Anchor_Length;
wire [10:0] offsetForReOrderWritePtr;
wire [12:0] extractedReqLength;
wire [13:0] totalAlignedNumberofBytes;
wire [15:0] resp_ByteEnables;
wire [15:0] reAlignerSpaceAvailable;
wire [16:0] reOrderPktStuffed;
wire [63:0] extractedReqAddress;
wire [44:0] upperBoundAddress;
wire [127:0] alignedRespData;
reg updateShadowReOrderWrPtr;
reg enableSpaceAvailWatermark;
reg enableReOrderWatermark;
reg reOrderStateRdDoneD1;
reg reOrderStateWrDoneD1;
reg [3:0] dmc_Resp_Cmd_Status;
reg [3:0] nextAnchorState;
reg [3:0] nextReOrderState;
reg [3:0] nextPointerState;
reg [9:0] highestSpaceUsed;
reg [9:0] nextReOrderWritePtr;
reg [9:0] shadowReOrderWritePtr;
reg [9:0] extractedNextWrPtrD1;
reg [9:0] offsetForReOrderWritePtrD1;
reg [10:0] spaceAvailable;
reg [12:0] extractedReqLengthD1;
reg [13:0] resp_Data_Length;
reg [23:0] responseDmaNumber;
reg [23:0] responseDmaNumberD1;
reg [43:0] addressUpperBound;
reg [31:0] alignedRespDataUpper1;
reg [31:0] alignedRespDataUpper0;
reg [31:0] alignedRespDataLower1;
reg [31:0] alignedRespDataLower0;
reg [63:0] extractedReqAddressD1;
wire pioStateOddNumberPkt;
wire [4:0] pioStateDMANumber;
wire [9:0] pioStateEndingWrPtr;
wire [9:0] pioStateNextWrPtr;
wire [12:0] pioStateAnchorLength;
wire [63:0] pioStateAnchorAddr;
wire [REORDER_PTR-1:0] reOrderIndex;
reg transIDEntryValid[0:63];
reg [REORDER_PTR-1:0] highestROUsed;
reg [REORDER_PTR-1:0] reOrderStRdAddr;
reg [REORDER_PTR-1:0] rOStatePioAddr;
reg [REORDER_PTR-1:0] rOStateFailAddr;
reg [REORDER_PTR-1:0] transIDTable[0:31];
reg [REORDER_PTR-1:0] reOrderStateRdPtr;
reg [REORDER_PTR-1:0] reOrderStateWrPtr;
reg [REORDER_PTR-1:0] reOrderEntries;
reg [REORDER_SIZE-1:0] buffDone;
reg reOrderOddNumberPkt[0:REORDER_SIZE-1];
reg reOrderDMAMarkBit[0:REORDER_SIZE-1];
reg reOrderGatherLast[0:REORDER_SIZE-1];
reg reOrderSopBit[0:REORDER_SIZE-1];
reg [4:0] reOrderDMANumber[0:REORDER_SIZE-1];
reg [9:0] reOrderEndingWrPtr[0:REORDER_SIZE-1];
reg [9:0] reOrderNextWrPtr[0:REORDER_SIZE-1];
reg [12:0] reOrderAnchorLength[0:REORDER_SIZE-1];
reg [63:0] reOrderAnchorAddr[0:REORDER_SIZE-1];
/*--------------------------------------------------------------*/
// Parameters and Defines
/*--------------------------------------------------------------*/
parameter ANCHOR_IDLE = 4'h0,
CHECK_ANCHOR_SIZE = 4'h1,
parameter RE_ORDER_IDLE = 4'h0,
REORDER_STATE_LOAD = 4'h1,
WAIT_FOR_RESP_COMP = 4'h2,
TRANSACTION_TIMEOUT = 4'h3,
parameter POINTER_IDLE = 4'h0,
WAIT_FOR_POINTER_DONE = 4'h1,
POINTER_RD_UPDATE = 4'h6;
// synopsys translate_off
ANCHOR_IDLE: ANCHOR_REQ = "ANCHOR_IDLE";
CHECK_ANCHOR_SIZE: ANCHOR_REQ = "CHECK_ANCHOR_SIZE";
ANCHOR_ACCEPT: ANCHOR_REQ = "ANCHOR_ACCEPT";
ANCHOR_REJECT: ANCHOR_REQ = "ANCHOR_REJECT";
ANCHOR_WAIT: ANCHOR_REQ = "ANCHOR_WAIT";
default: ANCHOR_REQ = "UNKNOWN";
RE_ORDER_IDLE: RE_ORDER = "RE_ORDER_IDLE";
REORDER_STATE_LOAD: RE_ORDER = "REORDER_STATE_LOAD";
WAIT_FOR_RESP_COMP: RE_ORDER = "WAIT_FOR_RESP_COMP";
TRANSACTION_TIMEOUT: RE_ORDER = "TRANSACTION_TIMEOUT";
NULL_TRANSACTION: RE_ORDER = "NULL_TRANSACTION";
FLUSH_PIPELINE: RE_ORDER = "FLUSH_PIPELINE";
RE_ORDER_FATAL: RE_ORDER = "RE_ORDER_FATAL";
default: RE_ORDER = "UNKNOWN";
POINTER_IDLE: POINTER_ST = "POINTER_IDLE";
WAIT_FOR_POINTER_DONE: POINTER_ST = "WAIT_FOR_POINTER_DONE";
POINTER_RD_UPDATE: POINTER_ST = "POINTER_RD_UPDATE";
default: POINTER_ST = "UNKNOWN";
wire [4:0] dummyDMANumber;
wire [9:0] dummyEndingWrPtr;
wire [9:0] dummyNextWrPtr;
wire [12:0] dummyAnchorLength;
wire [63:0] dummyAnchorAddr;
assign dummySopBit = reOrderSopBit[rOStatePioAddr];
assign dummyOddNumberPkts = reOrderOddNumberPkt[rOStatePioAddr];
assign dummyDMAMarkBit = reOrderDMAMarkBit[rOStatePioAddr];
assign dummyGatherLast = reOrderGatherLast[rOStatePioAddr];
assign dummyDMANumber = reOrderDMANumber[rOStatePioAddr];
assign dummyEndingWrPtr = reOrderEndingWrPtr[rOStatePioAddr];
assign dummyNextWrPtr = reOrderNextWrPtr[rOStatePioAddr];
assign dummyAnchorLength = reOrderAnchorLength[rOStatePioAddr];
assign dummyAnchorAddr = reOrderAnchorAddr[rOStatePioAddr];
always @(resp_ByteEnables or resp_Data)
casex(resp_ByteEnables) // Synopsys full_case parallel_case
`SHIFT_FIFTEEN_BYTES: SHIFT_VALUE = "SHIFT_FIFTEEN_BYTES";
`SHIFT_FOURTEEN_BYTES: SHIFT_VALUE = "SHIFT_FOURTEEN_BYTES";
`SHIFT_THIRTEEN_BYTES: SHIFT_VALUE = "SHIFT_THIRTEEN_BYTES";
`SHIFT_TWELVE_BYTES: SHIFT_VALUE = "SHIFT_TWELVE_BYTES";
`SHIFT_ELEVEN_BYTES: SHIFT_VALUE = "SHIFT_ELEVEN_BYTES";
`SHIFT_TEN_BYTES: SHIFT_VALUE = "SHIFT_TEN_BYTES";
`SHIFT_NINE_BYTES: SHIFT_VALUE = "SHIFT_NINE_BYTES";
`SHIFT_EIGHT_BYTES: SHIFT_VALUE = "SHIFT_EIGHT_BYTES";
`SHIFT_SEVEN_BYTES: SHIFT_VALUE = "SHIFT_SEVEN_BYTES";
`SHIFT_SIX_BYTES: SHIFT_VALUE = "SHIFT_SIX_BYTES";
`SHIFT_FIVE_BYTES: SHIFT_VALUE = "SHIFT_FIVE_BYTES";
`SHIFT_FOUR_BYTES: SHIFT_VALUE = "SHIFT_FOUR_BYTES";
`SHIFT_THREE_BYTES: SHIFT_VALUE = "SHIFT_THREE_BYTES";
`SHIFT_TWO_BYTES: SHIFT_VALUE = "SHIFT_TWO_BYTES";
`SHIFT_ONE_BYTE: SHIFT_VALUE = "SHIFT_ONE_BYTE";
`SHIFT_ZERO_BYTE: SHIFT_VALUE = "SHIFT_ZERO_BYTE";
default: SHIFT_VALUE = "NONE";
/*--------------------------------------------------------------*/
/*--------------------------------------------------------------*/
/*--------------------------------------------------------------*/
/*--------------------------------------------------------------*/
/*--------------------------------------------------------------*/
// ReOrderEccControl Bit defines
// First Line of Packet [0]
// Second Line of Packet [1]
// Last Line of Packet [2]
// Dsable Double Bit Error [31] - This is used by Mac Xfer
/*--------------------------------------------------------------*/
assign corruptFirstLine = ReOrderEccControl[0];
assign corruptSecondLine = ReOrderEccControl[1];
assign corruptLastLine = ReOrderEccControl[2];
assign onePacketOnly = ReOrderEccControl[8];
assign alternatePackets = ReOrderEccControl[9];
assign allPackets = ReOrderEccControl[10];
assign corruptSingleErr = ReOrderEccControl[16];
assign corruptDoubleErr = ReOrderEccControl[17];
assign eccCoruptionValid = (allPackets
(alternatePackets & ~extractedOddNumberPkt)
(onePacketOnly & ~onePacketOneShot)
assign corruptECC = ((corruptFirstLine
(corruptSecondLine & atSecondLineOfPkt)
assign ReOrderCorruptECCSingle = corruptSingleErr & eccCoruptionValid
resp_Data_Valid & corruptECC;
assign ReOrderCorruptECCDouble = corruptDoubleErr & eccCoruptionValid
resp_Data_Valid & corruptECC;
if (!Reset_L) onePacketOneShot <= #`SD 1'b0;
else if (onePacketOnly) onePacketOneShot <= #`SD (onePacketOneShot
else onePacketOneShot <= #`SD 1'b0;
/*--------------------------------------------------------------*/
/*--------------------------------------------------------------*/
sopDoneFlag <= #`SD 1'b0;
else if (resp_Resp_Complete | resp_Trans_Complete)
sopDoneFlag <= #`SD 1'b0;
else if ((extractedReqAddress == resp_Address) & resp_Data_Valid)
sopDoneFlag <= #`SD 1'b1;
atSecondLineOfPkt <= #`SD 1'b0;
else if (startOfPacket & resp_Data_Valid)
atSecondLineOfPkt <= #`SD 1'b1;
else if (ReOrderFifoWrite)
// else if (corruptECC | responseComplete | transactionComplete)
atSecondLineOfPkt <= #`SD 1'b0;
assign startOfPacket = ((extractedReqAddress == resp_Address)
assign atLastLineOfPacket = (reOrderWritePtrPlusOne == extractedEndingWrPtr);
assign endOfPacket = extractedGatherLast
(resp_Trans_Complete | resp_Resp_Complete);
assign ReOrderFifoWrite = (resp_Data_Valid | setTidTimeOut);
assign numberOfBytes = ({4'h0, resp_ByteEnables[15]}
+ {4'h0, resp_ByteEnables[14]}
+ {4'h0, resp_ByteEnables[13]}
+ {4'h0, resp_ByteEnables[12]}
+ {4'h0, resp_ByteEnables[11]}
+ {4'h0, resp_ByteEnables[10]}
+ {4'h0, resp_ByteEnables[9]}
+ {4'h0, resp_ByteEnables[8]}
+ {4'h0, resp_ByteEnables[7]}
+ {4'h0, resp_ByteEnables[6]}
+ {4'h0, resp_ByteEnables[5]}
+ {4'h0, resp_ByteEnables[4]}
+ {4'h0, resp_ByteEnables[3]}
+ {4'h0, resp_ByteEnables[2]}
+ {4'h0, resp_ByteEnables[1]}
+ {4'h0, resp_ByteEnables[0]}
assign alignedRespData = {alignedRespDataUpper1,
always @(resp_ByteEnables or resp_Data)
casex(resp_ByteEnables) // Synopsys full_case
`SHIFT_ZERO_BYTE: alignedRespDataUpper1 = resp_Data[127:96];
`SHIFT_ONE_BYTE: alignedRespDataUpper1 = {8'h0, resp_Data[127:104]};
`SHIFT_TWO_BYTES: alignedRespDataUpper1 = {16'h0, resp_Data[127:112]};
`SHIFT_THREE_BYTES: alignedRespDataUpper1 = {24'h0, resp_Data[127:120]};
default: alignedRespDataUpper1 = 32'h0;
always @(resp_ByteEnables or resp_Data)
casex(resp_ByteEnables) // Synopsys full_case
`SHIFT_ZERO_BYTE: alignedRespDataUpper0 = resp_Data[95:64];
`SHIFT_ONE_BYTE: alignedRespDataUpper0 = {resp_Data[103:72]};
`SHIFT_TWO_BYTES: alignedRespDataUpper0 = {resp_Data[111:80]};
`SHIFT_THREE_BYTES: alignedRespDataUpper0 = {resp_Data[119:88]};
`SHIFT_FOUR_BYTES: alignedRespDataUpper0 = {resp_Data[127:96]};
`SHIFT_FIVE_BYTES: alignedRespDataUpper0 = {8'h0, resp_Data[127:104]};
`SHIFT_SIX_BYTES: alignedRespDataUpper0 = {16'h0, resp_Data[127:112]};
`SHIFT_SEVEN_BYTES: alignedRespDataUpper0 = {24'h0, resp_Data[127:120]};
default: alignedRespDataUpper0 = 32'h0;
always @(resp_ByteEnables or resp_Data)
casex(resp_ByteEnables) // Synopsys full_case
`SHIFT_ZERO_BYTE: alignedRespDataLower1 = resp_Data[63:32];
`SHIFT_ONE_BYTE: alignedRespDataLower1 = {resp_Data[71:40]};
`SHIFT_TWO_BYTES: alignedRespDataLower1 = {resp_Data[79:48]};
`SHIFT_THREE_BYTES: alignedRespDataLower1 = {resp_Data[87:56]};
`SHIFT_FOUR_BYTES: alignedRespDataLower1 = {resp_Data[95:64]};
`SHIFT_FIVE_BYTES: alignedRespDataLower1 = {resp_Data[103:72]};
`SHIFT_SIX_BYTES: alignedRespDataLower1 = {resp_Data[111:80]};
`SHIFT_SEVEN_BYTES: alignedRespDataLower1 = {resp_Data[119:88]};
`SHIFT_EIGHT_BYTES: alignedRespDataLower1 = {resp_Data[127:96]};
`SHIFT_NINE_BYTES: alignedRespDataLower1 = {8'h0, resp_Data[127:104]};
`SHIFT_TEN_BYTES: alignedRespDataLower1 = {16'h0, resp_Data[127:112]};
`SHIFT_ELEVEN_BYTES: alignedRespDataLower1 = {24'h0, resp_Data[127:120]};
`SHIFT_TWELVE_BYTES: alignedRespDataLower1 = 32'h0;
default: alignedRespDataLower1 = 32'h0;
always @(resp_ByteEnables or resp_Data)
casex(resp_ByteEnables) // Synopsys full_case
`SHIFT_ZERO_BYTE: alignedRespDataLower0 = resp_Data[31:0];
`SHIFT_ONE_BYTE: alignedRespDataLower0 = resp_Data[39:8];
`SHIFT_TWO_BYTES: alignedRespDataLower0 = resp_Data[47:16];
`SHIFT_THREE_BYTES: alignedRespDataLower0 = resp_Data[55:24];
`SHIFT_FOUR_BYTES: alignedRespDataLower0 = resp_Data[63:32];
`SHIFT_FIVE_BYTES: alignedRespDataLower0 = resp_Data[71:40];
`SHIFT_SIX_BYTES: alignedRespDataLower0 = resp_Data[79:48];
`SHIFT_SEVEN_BYTES: alignedRespDataLower0 = resp_Data[87:56];
`SHIFT_EIGHT_BYTES: alignedRespDataLower0 = resp_Data[95:64];
`SHIFT_NINE_BYTES: alignedRespDataLower0 = resp_Data[103:72];
`SHIFT_TEN_BYTES: alignedRespDataLower0 = resp_Data[111:80];
`SHIFT_ELEVEN_BYTES: alignedRespDataLower0 = resp_Data[119:88];
`SHIFT_TWELVE_BYTES: alignedRespDataLower0 = resp_Data[127:96];
`SHIFT_THIRTEEN_BYTES: alignedRespDataLower0 = {8'h0, resp_Data[127:104]};
`SHIFT_FOURTEEN_BYTES: alignedRespDataLower0 = {16'h0, resp_Data[127:112]};
`SHIFT_FIFTEEN_BYTES: alignedRespDataLower0 = {24'h0, resp_Data[127:120]};
default: alignedRespDataLower0 = 32'h0;
assign abortThisPacket = (resp_Data_Error | transactionTimeout);
assign ReOrderEngineDataOut = {abortThisPacket, //135
alignedRespData}; //127:0
/*--------------------------------------------------------------*/
/*--------------------------------------------------------------*/
assign transactionTimeout = ((dmc_Resp_Cmd == `RESPONSE_NO_DATA)
(dmc_Resp_Cmd_Status == `RESPONSE_TIMEOUT)
assign validTransaction = ((dmc_Resp_Cmd == `RESPONSE_WITH_DATA)
(dmc_Resp_Cmd_Status == `RESPONSE_GOOD)
assign nullTransaction = (
((dmc_Resp_Cmd == `RESPONSE_NO_DATA)
(dmc_Resp_Cmd_Status == `RESPONSE_GOOD)
((dmc_Resp_Cmd == `RESPONSE_WITH_DATA)
(dmc_Resp_Cmd_Status == `RESPONSE_TIMEOUT)
/*--------------------------------------------------------------*/
/*--------------------------------------------------------------*/
portFifoSelect <= #`SD 1'b0;
portFifoSelect <= #`SD (DMC_TXC_Resp_Port_Num == PortIndentifier);
else if (responseComplete | transactionComplete)
portFifoSelect <= #`SD 1'b0;
dmc_Resp_Cmd <= #`SD 8'h0;
dmc_Resp_Cmd <= #`SD DMC_TXC_Resp_Cmd;
else if (responseComplete | transactionComplete)
dmc_Resp_Cmd <= #`SD 8'h0;
dmc_Resp_Cmd_Status <= #`SD 4'h0;
dmc_Resp_Cmd_Status <= #`SD DMC_TXC_Resp_Cmd_Status;
else if (responseComplete | transactionComplete)
dmc_Resp_Cmd_Status <= #`SD 4'h0;
resp_Data_Length <= #`SD 14'h0;
resp_Data_Length <= #`SD DMC_TXC_Resp_Data_Length;
else if (responseComplete | transactionComplete)
resp_Data_Length <= #`SD 14'h0;
if (!Reset_L) resp_TransID <= #`SD 6'b0;
else if (ldPortInfo && (DMC_TXC_Resp_Port_Num == PortIndentifier))
resp_TransID <= #`SD DMC_TXC_Resp_TransID;
if (!Reset_L) responseComplete <= #`SD 1'b0;
else responseComplete <= #`SD DMC_TXC_Resp_Complete;
if (!Reset_L) transactionComplete <= #`SD 1'b0;
else transactionComplete <= #`SD DMC_TXC_Trans_Complete;
assign resp_Trans_Complete = portFifoSelect ? transactionComplete : 1'b0;
assign resp_Resp_Complete = portFifoSelect ? responseComplete : 1'b0;
assign resp_Data_Valid = portFifoSelect ? DMC_TXC_Resp_Data_Valid : 1'b0;
assign resp_ByteEnables = portFifoSelect ? DMC_TXC_Resp_ByteEnables : 16'h0;
assign resp_Data_Error = portFifoSelect ? |DMC_TXC_Resp_Data_Status : 1'b0;
assign resp_Data = portFifoSelect ? DMC_TXC_Resp_Data : 128'h0;
always @(extractedDMANumber)
case(extractedDMANumber) // Synopsys full_case parallel_case
`DMA_CHANNEL_ZERO: responseDmaNumber = 24'h000001;
`DMA_CHANNEL_ONE: responseDmaNumber = 24'h000002;
`DMA_CHANNEL_TWO: responseDmaNumber = 24'h000004;
`DMA_CHANNEL_THREE: responseDmaNumber = 24'h000008;
`DMA_CHANNEL_FOUR: responseDmaNumber = 24'h000010;
`DMA_CHANNEL_FIVE: responseDmaNumber = 24'h000020;
`DMA_CHANNEL_SIX: responseDmaNumber = 24'h000040;
`DMA_CHANNEL_SEVEN: responseDmaNumber = 24'h000080;
`DMA_CHANNEL_EIGHT: responseDmaNumber = 24'h000100;
`DMA_CHANNEL_NINE: responseDmaNumber = 24'h000200;
`DMA_CHANNEL_TEN: responseDmaNumber = 24'h000400;
`DMA_CHANNEL_ELEVEN: responseDmaNumber = 24'h000800;
`DMA_CHANNEL_TWELVE: responseDmaNumber = 24'h001000;
`DMA_CHANNEL_THIRTEEN: responseDmaNumber = 24'h002000;
`DMA_CHANNEL_FOURTEEN: responseDmaNumber = 24'h004000;
`DMA_CHANNEL_FIFTEEN: responseDmaNumber = 24'h008000;
`DMA_CHANNEL_SIXTEEN: responseDmaNumber = 24'h010000;
`DMA_CHANNEL_SEVENTEEN: responseDmaNumber = 24'h020000;
`DMA_CHANNEL_EIGHTEEN: responseDmaNumber = 24'h040000;
`DMA_CHANNEL_NINETEEN: responseDmaNumber = 24'h080000;
`DMA_CHANNEL_TWENTY: responseDmaNumber = 24'h100000;
`DMA_CHANNEL_TWENTYONE: responseDmaNumber = 24'h200000;
`DMA_CHANNEL_TWENTYTWO: responseDmaNumber = 24'h400000;
`DMA_CHANNEL_TWENTYTHREE: responseDmaNumber = 24'h800000;
default: responseDmaNumber = 24'h0;
always @ (posedge SysClk)
if (!Reset_L) UpdateDMA <= 1'b0;
else UpdateDMA <= #`SD ldExtractedState & portFifoSelect;
assign UpdateDMALength = resp_Data_Length;
always @ (posedge SysClk)
if (!Reset_L) UpdateDMANumber <= 24'h0;
else if (ldExtractedState) UpdateDMANumber <= #`SD responseDmaNumber;
always @ (posedge SysClk)
if (!Reset_L) ldTimeoutStateD1 <= 1'b0;
else ldTimeoutStateD1 <= #`SD ldTimeoutState;
always @ (posedge SysClk)
if (!Reset_L) responseDmaNumberD1 <= 24'h0;
else responseDmaNumberD1 <= #`SD responseDmaNumber;
always @ (posedge SysClk)
else if (ldPortInfo && (DMC_TXC_Resp_Port_Num == PortIndentifier))
resp_DMA_Num <= #`SD DMC_TXC_Resp_DMA_Num;
resp_Address <= #`SD DMC_TXC_Resp_Address;
always @ (posedge SysClk)
if (!Reset_L) nack_Pkt_RdD1 <= 1'b0;
else nack_Pkt_RdD1 <= #`SD Nack_Pkt_Rd;
always @ (posedge SysClk)
if (!Reset_L) Nack_Pkt_Rd <= 1'b0;
else if (ldTimeoutStateD1) Nack_Pkt_Rd <= #`SD 1'b1;
else Nack_Pkt_Rd <= #`SD 1'b0;
always @ (posedge SysClk)
DMA_Nack_Pkt_Rd <= 24'h0;
Nack_Pkt_Rd_Addr <= 44'h0;
else if (ldTimeoutStateD1)
DMA_Nack_Pkt_Rd <= #`SD responseDmaNumberD1;
Nack_Pkt_Rd_Addr <= #`SD resp_Address[43:0];
DMA_Nack_Pkt_Rd <= #`SD 24'h0;
Nack_Pkt_Rd_Addr <= #`SD 44'h0;
/*--------------------------------------------------------------*/
/*--------------------------------------------------------------*/
assign reOrderPktStuffed = ({1'b0, ReOrdersStuffed} + 17'h1);
always @ (posedge SysClk)
if (!Reset_L) ReOrdersStuffed <= 16'b0;
else if (collisionStuffed) ReOrdersStuffed <= #`SD 16'h1;
else if (ClearStatistics) ReOrdersStuffed <= #`SD 16'h0;
else if (WrPacketStuffed) ReOrdersStuffed <= #`SD PioDataIn[31:16];
else if (incReOrderStuffed) ReOrdersStuffed <= #`SD reOrderPktStuffed[15:0];
assign collisionStuffed = ClearStatistics & incReOrderStuffed;
assign incReOrderStuffed = updateTDMC && atHeadOfFifoGatherLast;
/*--------------------------------------------------------------*/
/*--------------------------------------------------------------*/
assign collisionRequested = ClearStatistics & Anchor_Done;
always @ (posedge SysClk)
GatherRequestCount <= 4'b0;
else if (collisionRequested & ~Anchor_GatherLast)
GatherRequestCount <= #`SD 4'h1;
else if (WrPacketRequested)
GatherRequestCount <= #`SD PioDataIn[31:28];
else if (Anchor_Done & Anchor_GatherLast)
GatherRequestCount <= #`SD 4'h0;
else if (Anchor_Done & ~Anchor_GatherLast)
GatherRequestCount <= #`SD GatherRequestCount + 4'h1;
always @ (posedge SysClk)
PacketRequestCount <= 12'b0;
else if (collisionRequested & Anchor_GatherLast)
PacketRequestCount <= #`SD 12'h1;
else if (ClearStatistics)
PacketRequestCount <= #`SD 12'h0;
else if (WrPacketRequested)
PacketRequestCount <= #`SD PioDataIn[27:16];
else if (Anchor_Done & Anchor_GatherLast)
PacketRequestCount <= #`SD PacketRequestCount + 12'h1;
/*--------------------------------------------------------------*/
/*--------------------------------------------------------------*/
always @ (posedge SysClk)
for (i = 0; i < 32; i=i+1)
transIDEntryValid[i] <= 1'b0;
transIDEntryValid[Anchor_TransID[4:0]] <= #`SD 1'b1;
always @ (posedge SysClk)
for (i = 0; i < 32; i=i+1)
transIDTable[i] <= {REORDER_PTR{1'b0}};
transIDTable[Anchor_TransID[4:0]] <= #`SD reOrderStateWrPtr;
assign tIDValid = transIDEntryValid[resp_TransID[4:0]];
assign reOrderIndex = transIDTable[resp_TransID[4:0]];
/*--------------------------------------------------------------*/
/*--------------------------------------------------------------*/
assign reOrderCollision = Anchor_LoadTID & reOrderEntriesRd;
assign reOrderStateEmpty = (reOrderEntries == {REORDER_PTR{1'b0}});
assign reOrderStateFull = (reOrderEntries == MaxReorderNumber[REORDER_PTR-1:0]);
always @ (posedge SysClk)
if (!Reset_L) reOrderEntries <= {REORDER_PTR{1'b0}};
else if (reOrderCollision) reOrderEntries <= reOrderEntries;
else if (Anchor_LoadTID) reOrderEntries <= reOrderEntries
{{(REORDER_PTR-1){1'b0}}, 1'b1};
else if (decReOrderEntries) reOrderEntries <= reOrderEntries
{{(REORDER_PTR-1){1'b0}}, 1'b1};
assign setBuffDone = (resp_Trans_Complete & tIDValid);
assign clrBuffDone = decReOrderEntries;
assign collisionBuffDone = setBuffDone & clrBuffDone;
assign bufferDone = buffDone[reOrderStateRdPtr];
always @ (posedge SysClk)
buffDone <= {REORDER_SIZE{1'b0}};
else if (collisionBuffDone)
buffDone <= #`SD buffDone
({{(REORDER_SIZE-1){1'b0}},1'b1} << reOrderIndex)
({{(REORDER_SIZE-1){1'b0}},1'b1} << reOrderStateRdPtr)
buffDone <= #`SD buffDone
({{(REORDER_SIZE-1){1'b0}},1'b1} << reOrderIndex);
buffDone <= #`SD buffDone
({{(REORDER_SIZE-1){1'b0}},1'b1} << reOrderStateRdPtr);
always @ (posedge SysClk)
for (i = 0; i < REORDER_SIZE; i=i+1)
reOrderSopBit[i] <= 1'b0;
reOrderOddNumberPkt[i] <= 1'b0;
reOrderDMAMarkBit[i] <= 1'b0;
reOrderGatherLast[i] <= 1'b0;
reOrderDMANumber[i] <= 5'h0;
reOrderEndingWrPtr[i] <= 10'h0;
reOrderNextWrPtr[i] <= 10'h0;
reOrderAnchorLength[i] <= 13'h0;
reOrderAnchorAddr[i] <= 64'h0;
else if (reOrderStateWrDonePosEdge)
reOrderSopBit[rOStatePioAddr] <= #`SD ReOrderStateData0[25];
reOrderOddNumberPkt[rOStatePioAddr] <= #`SD ReOrderStateData0[24];
reOrderDMAMarkBit[rOStatePioAddr] <= #`SD ReOrderStateData0[22];
reOrderGatherLast[rOStatePioAddr] <= #`SD ReOrderStateData0[20];
reOrderDMANumber[rOStatePioAddr] <= #`SD ReOrderStateData0[15:11];
reOrderEndingWrPtr[rOStatePioAddr] <= #`SD ReOrderStateData0[9:0];
reOrderNextWrPtr[rOStatePioAddr] <= #`SD ReOrderStateData1[25:16];
reOrderAnchorLength[rOStatePioAddr] <= #`SD ReOrderStateData1[12:0];
reOrderAnchorAddr[rOStatePioAddr] <= #`SD {ReOrderStateData2,
reOrderSopBit[reOrderStateWrPtr] <= #`SD Anchor_SopBit;
reOrderOddNumberPkt[reOrderStateWrPtr] <= #`SD oddNumberPkt;
reOrderDMAMarkBit[reOrderStateWrPtr] <= #`SD Anchor_MarkBit;
reOrderGatherLast[reOrderStateWrPtr] <= #`SD Anchor_GatherLast;
reOrderDMANumber[reOrderStateWrPtr] <= #`SD Anchor_DMA;
reOrderEndingWrPtr[reOrderStateWrPtr] <= #`SD endingReOrderWritePtr;
reOrderNextWrPtr[reOrderStateWrPtr] <= #`SD nextReOrderWritePtr;
reOrderAnchorLength[reOrderStateWrPtr] <= #`SD Anchor_Length;
reOrderAnchorAddr[reOrderStateWrPtr] <= #`SD Anchor_Address;
always @ (posedge SysClk)
if (!Reset_L) oddNumberPkt <= 1'b0;
else if (anchorDone) oddNumberPkt <= #`SD ~oddNumberPkt;
always @ (posedge SysClk)
if (!Reset_L) reOrderStateRdPtr <= {REORDER_PTR{1'b0}};
else if (reOrderEntriesRd) reOrderStateRdPtr <= #`SD reOrderStateRdPtr
{{(REORDER_PTR-1){1'b0}}, 1'b1};
always @ (posedge SysClk)
if (!Reset_L) reOrderStateWrPtr <= {REORDER_PTR{1'b0}};
else if (Anchor_LoadTID) reOrderStateWrPtr <= #`SD reOrderStateWrPtr
{{(REORDER_PTR-1){1'b0}}, 1'b1};
/*--------------------------------------------------------------*/
/*--------------------------------------------------------------*/
assign ReOrderFifoReadStrobe = ReOrderFifoRead;
assign ReOrderReadPtr = readPtr;
assign residualBytes = |(totalAlignedNumberofBytes[3:0]);
assign totalAlignedNumberofBytes = ({1'b0, Anchor_Length}
{10'h0, Anchor_Address[3:0]}
assign normalized_Anchor_Length = ({1'b0,totalAlignedNumberofBytes[13:4]}
assign reAlignerSpaceAvailable = {1'b0, spaceAvailable[10:0],4'h0};
/*--------------------------------------------------------------*/
/*--------------------------------------------------------------*/
assign ReOrderFifoEmpty = !Reset_L ? 1'b0
: (readPtr == shadowReOrderWritePtr);
assign readPtrPlusOne = ({1'b0, readPtr} + 11'h1);
assign ReOrderFifoAlmostEmpty = !Reset_L ? 1'b0
: (readPtrPlusOne[9:0]) == shadowReOrderWritePtr;
always @ (posedge SysClk)
else if (ReOrderFifoRead && !ReOrderFifoEmpty)
readPtr <= #`SD readPtr + 10'd1;
/*--------------------------------------------------------------*/
/*--------------------------------------------------------------*/
always @ (posedge SysClk)
else if (shadowReOrderWritePtr > readPtr)
if ((shadowReOrderWritePtr - readPtr) > 10'd1022)
reOrderFifoFull <= #`SD 1'b1;
reOrderFifoFull <= #`SD 1'b0;
else if (shadowReOrderWritePtr < readPtr)
if ((readPtr - shadowReOrderWritePtr) <= 10'd2)
reOrderFifoFull <= #`SD 1'b1;
reOrderFifoFull <= #`SD 1'b0;
else if (readPtr == shadowReOrderWritePtr)
reOrderFifoFull <= #`SD 1'b0;
assign pointerDifference = {1'b0, nextReOrderWritePtr} - {1'b0, readPtr};
always @ (posedge SysClk)
spaceAvailable <= #`SD {(`FIFO_SIZE_1024_MINUS_1
{1'b0, pointerDifference[9:0]}
{10'h0, ReOrderFifoRead})
assign endingReOrderWritePtr = nextReOrderWritePtr
normalized_Anchor_Length[9:0];
always @ (posedge SysClk)
nextReOrderWritePtr <= 10'h0;
nextReOrderWritePtr <= #`SD nextReOrderWritePtr
normalized_Anchor_Length[9:0];
assign offsetForReOrderWritePtr = portFifoSelect ?
{1'b0, resp_Address[13:4]}
{1'b0, extractedReqAddress[13:4]}
always @ (posedge SysClk)
if (!Reset_L) extractedNextWrPtrD1 <= 10'h0;
else if (ldExtractedState) extractedNextWrPtrD1 <= #`SD extractedNextWrPtr;
always @ (posedge SysClk)
offsetForReOrderWritePtrD1 <= 10'h0;
else if (ldExtractedState)
offsetForReOrderWritePtrD1 <= #`SD offsetForReOrderWritePtr[9:0];
assign newReOrderWritePtr = extractedNextWrPtrD1
offsetForReOrderWritePtrD1;
assign reOrderWritePtrPlusOne = ReOrderWritePtr + 10'd1;
assign incReOrderWritePtr = ReOrderFifoWrite && !reOrderFifoFull;
always @ (posedge SysClk)
if (!Reset_L) ldExtractedStateD1 <= 1'b0;
else ldExtractedStateD1 <= #`SD ldExtractedState;
always @ (posedge SysClk)
if (!Reset_L) ReOrderWritePtr <= 10'h0;
else if (ldExtractedStateD1) ReOrderWritePtr <= #`SD newReOrderWritePtr;
else if (incReOrderWritePtr) ReOrderWritePtr <= #`SD reOrderWritePtrPlusOne;
always @ (posedge SysClk)
shadowReOrderWritePtr <= 10'h0;
else if (updateShadowReOrderWrPtr)
shadowReOrderWritePtr <= #`SD atHeadOfFifoEndingWrPtr;
/*--------------------------------------------------------------*/
// Extracted State from ReOrder Logic
/*--------------------------------------------------------------*/
assign atHeadOfFifoMarkBit = reOrderDMAMarkBit[reOrderStateRdPtr];
assign atHeadOfFifoGatherLast = reOrderGatherLast[reOrderStateRdPtr];
assign atHeadOfFifoDMANumber = reOrderDMANumber[reOrderStateRdPtr];
assign atHeadOfFifoEndingWrPtr = reOrderEndingWrPtr[reOrderStateRdPtr];
assign extractedEndingWrPtr = reOrderEndingWrPtr[reOrderIndex];
assign extractedSopBit = reOrderSopBit[reOrderIndex];
assign extractedGatherLast = reOrderGatherLast[reOrderIndex];
assign extractedOddNumberPkt = reOrderOddNumberPkt[reOrderIndex];
assign extractedDMANumber = reOrderDMANumber[reOrderIndex];
assign extractedNextWrPtr = reOrderNextWrPtr[reOrderIndex];
assign extractedReqLength = reOrderAnchorLength[reOrderIndex];
assign extractedReqAddress = reOrderAnchorAddr[reOrderIndex];
assign respDmaNumFail = (extractedDMANumber != resp_DMA_Num);
assign respLengthFail = (resp_Data_Length > {1'b0, extractedReqLength});
assign upperBoundAddress = ({1'b0, extractedReqAddressD1[43:0]}
{32'h0, extractedReqLengthD1});
always @ (posedge SysClk)
if (!Reset_L) extractedReqLengthD1 <= 13'h0;
else extractedReqLengthD1 <= #`SD extractedReqLength;
always @ (posedge SysClk)
if (!Reset_L) extractedReqAddressD1 <= 64'h0;
else extractedReqAddressD1 <= #`SD extractedReqAddress;
always @ (posedge SysClk)
if (!Reset_L) addressUpperBound <= 44'h0;
else addressUpperBound <= #`SD upperBoundAddress[43:0];
assign respAddrPageHandleMatch = (resp_Address[63:44]
extractedReqAddressD1[63:44]);
assign respAddrLessThanEq2UpperBound = (addressUpperBound[43:0]
assign respAddrGreaterThanEq2LowerBound = (addressUpperBound[43:0]
assign respAddressPass = (respAddrPageHandleMatch
respAddrLessThanEq2UpperBound
respAddrGreaterThanEq2LowerBound
assign respAddrFail = (ldExtractedStateD1
/*--------------------------------------------------------------*/
// Re-Order State PIO Accessable
/*--------------------------------------------------------------*/
assign collisionTidsUpdate = Anchor_LoadTID & setBuffDone;
case(Anchor_TransID[4:0]) // Synopsys full_case parallel_case
`TID_ZERO: loadTID = 32'h00000001;
`TID_ONE: loadTID = 32'h00000002;
`TID_TWO: loadTID = 32'h00000004;
`TID_THREE: loadTID = 32'h00000008;
`TID_FOUR: loadTID = 32'h00000010;
`TID_FIVE: loadTID = 32'h00000020;
`TID_SIX: loadTID = 32'h00000040;
`TID_SEVEN: loadTID = 32'h00000080;
`TID_EIGHT: loadTID = 32'h00000100;
`TID_NINE: loadTID = 32'h00000200;
`TID_TEN: loadTID = 32'h00000400;
`TID_ELEVEN: loadTID = 32'h00000800;
`TID_TWELVE: loadTID = 32'h00001000;
`TID_THIRTEEN: loadTID = 32'h00002000;
`TID_FOURTEEN: loadTID = 32'h00004000;
`TID_FIFTEEN: loadTID = 32'h00008000;
`TID_SIXTEEN: loadTID = 32'h00010000;
`TID_SEVENTEEN: loadTID = 32'h00020000;
`TID_EIGHTEEN: loadTID = 32'h00040000;
`TID_NINETEEN: loadTID = 32'h00080000;
`TID_TWENTY: loadTID = 32'h00100000;
`TID_TWENTYONE: loadTID = 32'h00200000;
`TID_TWENTYTWO: loadTID = 32'h00400000;
`TID_TWENTYTHREE: loadTID = 32'h00800000;
`TID_TWENTYFOUR: loadTID = 32'h01000000;
`TID_TWENTYFIVE: loadTID = 32'h02000000;
`TID_TWENTYSIX: loadTID = 32'h04000000;
`TID_TWENTYSEVEN: loadTID = 32'h08000000;
`TID_TWENTYEIGHT: loadTID = 32'h10000000;
`TID_TWENTYNINE: loadTID = 32'h20000000;
`TID_THIRTY: loadTID = 32'h40000000;
`TID_THIRTYONE: loadTID = 32'h80000000;
case(resp_TransID[4:0]) // Synopsys full_case parallel_case
`TID_ZERO: clearTID = 32'h00000001;
`TID_ONE: clearTID = 32'h00000002;
`TID_TWO: clearTID = 32'h00000004;
`TID_THREE: clearTID = 32'h00000008;
`TID_FOUR: clearTID = 32'h00000010;
`TID_FIVE: clearTID = 32'h00000020;
`TID_SIX: clearTID = 32'h00000040;
`TID_SEVEN: clearTID = 32'h00000080;
`TID_EIGHT: clearTID = 32'h00000100;
`TID_NINE: clearTID = 32'h00000200;
`TID_TEN: clearTID = 32'h00000400;
`TID_ELEVEN: clearTID = 32'h00000800;
`TID_TWELVE: clearTID = 32'h00001000;
`TID_THIRTEEN: clearTID = 32'h00002000;
`TID_FOURTEEN: clearTID = 32'h00004000;
`TID_FIFTEEN: clearTID = 32'h00008000;
`TID_SIXTEEN: clearTID = 32'h00010000;
`TID_SEVENTEEN: clearTID = 32'h00020000;
`TID_EIGHTEEN: clearTID = 32'h00040000;
`TID_NINETEEN: clearTID = 32'h00080000;
`TID_TWENTY: clearTID = 32'h00100000;
`TID_TWENTYONE: clearTID = 32'h00200000;
`TID_TWENTYTWO: clearTID = 32'h00400000;
`TID_TWENTYTHREE: clearTID = 32'h00800000;
`TID_TWENTYFOUR: clearTID = 32'h01000000;
`TID_TWENTYFIVE: clearTID = 32'h02000000;
`TID_TWENTYSIX: clearTID = 32'h04000000;
`TID_TWENTYSEVEN: clearTID = 32'h08000000;
`TID_TWENTYEIGHT: clearTID = 32'h10000000;
`TID_TWENTYNINE: clearTID = 32'h20000000;
`TID_THIRTY: clearTID = 32'h40000000;
`TID_THIRTYONE: clearTID = 32'h80000000;
always @ (posedge SysClk)
if (!Reset_L) TidsInUse <= 32'h0;
else if (WrTidsInUse) TidsInUse <= #`SD PioDataIn;
else if (collisionTidsUpdate) TidsInUse <= #`SD ((TidsInUse & ~(clearTID))
else if (Anchor_LoadTID) TidsInUse <= #`SD TidsInUse | loadTID;
else if (setBuffDone) TidsInUse <= #`SD TidsInUse & ~(clearTID);
assign collisionDupTids = ClearStatistics & Anchor_LoadTID;
assign collisionUnInit = ClearStatistics & setBuffDone;
assign collisionTimeout = ClearStatistics & setTidTimeOut;
assign setTidTimeOut = resp_Trans_Complete & transactionTimeout;
always @ (posedge SysClk)
if (!Reset_L) DuplicateTid <= 32'h0;
else if (collisionDupTids) DuplicateTid <= #`SD (TidsInUse & loadTID);
else if (ClearStatistics) DuplicateTid <= #`SD 32'h0;
else if (WrDuplicateTid) DuplicateTid <= #`SD PioDataIn;
else if (Anchor_LoadTID) DuplicateTid <= #`SD (DuplicateTid
always @ (posedge SysClk)
if (!Reset_L) UnInitializedTID <= 32'h0;
else if (collisionUnInit) UnInitializedTID <= #`SD (~TidsInUse & clearTID);
else if (ClearStatistics) UnInitializedTID <= #`SD 32'h0;
else if (WrUnInitializedTID) UnInitializedTID <= #`SD PioDataIn;
else if (setBuffDone) UnInitializedTID <= #`SD (UnInitializedTID
always @ (posedge SysClk)
if (!Reset_L) TimedoutTids <= 32'h0;
else if (collisionTimeout) TimedoutTids <= #`SD (TidsInUse & clearTID);
else if (ClearStatistics) TimedoutTids <= #`SD 32'h0;
else if (WrTimedoutTids) TimedoutTids <= #`SD PioDataIn;
else if (setTidTimeOut) TimedoutTids <= #`SD (TimedoutTids
/*--------------------------------------------------------------*/
// Re-Order State Logic PIO Accessable
/*--------------------------------------------------------------*/
assign numberOfReOrderEntries = EnableGMACMode
? {1'b0,reOrderEntries[2:0]}
assign ReOrderStateLogic = {enableSpaceAvailWatermark, //31 1
highestSpaceUsed, //30:21 10
spaceAvailable[9:0], //20:11 10
enableReOrderWatermark, //8 1
highestReOrderUsed, //7:4 4
numberOfReOrderEntries}; //3:0 4
always @ (posedge SysClk)
if (!Reset_L) enableSpaceAvailWatermark <= 1'b0;
else if (WrReOrderStateLogic) enableSpaceAvailWatermark <= #`SD PioDataIn[31];
assign loadSpaceWatermark = (enableSpaceAvailWatermark
(highestSpaceUsed < pointerDifference[9:0])
always @ (posedge SysClk)
highestSpaceUsed <= 10'h0;
else if (loadSpaceWatermark)
if (pointerDifference[9:0] > highestSpaceUsed)
highestSpaceUsed <= #`SD pointerDifference[9:0];
else highestSpaceUsed <= #`SD pointerDifference[9:0];
always @ (posedge SysClk)
if (!Reset_L) enableReOrderWatermark <= 1'b0;
else if (WrReOrderStateLogic) enableReOrderWatermark <= #`SD PioDataIn[8];
assign loadReOrderWatermark = (enableReOrderWatermark
(highestROUsed < reOrderEntries)
assign highestReOrderUsed = EnableGMACMode ? {1'b0, highestROUsed}
always @ (posedge SysClk)
highestROUsed <= {REORDER_PTR{1'b0}};
else if (loadReOrderWatermark)
if (reOrderEntries > highestROUsed)
highestROUsed <= #`SD reOrderEntries;
else highestROUsed <= #`SD reOrderEntries;
/*--------------------------------------------------------------*/
// Re-Order State Control PIO Accessable
/*--------------------------------------------------------------*/
assign ReOrderStateControl = {clrFailedState, //31 RW
reOrderStateFailAddr, //27:24 RO
captureAddressFail, //18 RW
captureLengthFail, //16 RW
reOrderStateRdDone, //7 RO
reOrderStateWrDone, //6 RO
reOrderStateWrite, //4 RW
reOrderStatePioAddr}; //3:0 RW
assign reOrderStatePioAddr = EnableGMACMode ? {1'b0, rOStatePioAddr}
assign reOrderStateFailAddr = EnableGMACMode ? {1'b0, rOStateFailAddr}
always @ (posedge SysClk)
captureAddressFail <= 1'b0;
captureLengthFail <= 1'b0;
reOrderStateRead <= 1'b0;
reOrderStateWrite <= 1'b0;
rOStatePioAddr <= {REORDER_PTR{1'b0}};
else if (WrReOrderStateControl)
clrFailedState <= #`SD PioDataIn[31];
captureAddressFail <= #`SD PioDataIn[18];
captureDMAFail <= #`SD PioDataIn[17];
captureLengthFail <= #`SD PioDataIn[16];
reOrderStateRead <= #`SD PioDataIn[5];
reOrderStateWrite <= #`SD PioDataIn[4];
rOStatePioAddr <= #`SD PioDataIn[2:0];
rOStatePioAddr <= #`SD PioDataIn[3:0];
if (reOrderStateRdDone) reOrderStateRead <= #`SD 1'b0;
if (reOrderStateWrDone) reOrderStateWrite <= #`SD 1'b0;
always @ (posedge SysClk)
if (!Reset_L) clrFailedStateD1 <= 1'b0;
else clrFailedStateD1 <= #`SD clrFailedState;
assign clrFailedStatePosEdge = clrFailedState & ~clrFailedStateD1;
always @ (posedge SysClk)
if (!Reset_L) reOrderStateRdDone <= 1'b0;
else if (clrFailedStatePosEdge) reOrderStateRdDone <= #`SD 1'b0;
else if (reOrderStateRead) reOrderStateRdDone <= #`SD 1'b1;
always @ (posedge SysClk)
if (!Reset_L) reOrderStateRdDoneD1 <= 1'b0;
else reOrderStateRdDoneD1 <= #`SD reOrderStateRdDone;
assign reOrderStateRdDonePosEdge = reOrderStateRdDone & ~reOrderStateRdDoneD1;
always @ (posedge SysClk)
if (!Reset_L) reOrderStateWrDone <= 1'b0;
else if (WrReOrderStateControl) reOrderStateWrDone <= #`SD 1'b0;
else if (reOrderStateWrite) reOrderStateWrDone <= #`SD 1'b1;
always @ (posedge SysClk)
if (!Reset_L) reOrderStateWrDoneD1 <= 1'b0;
else reOrderStateWrDoneD1 <= #`SD reOrderStateWrDone;
assign reOrderStateWrDonePosEdge = reOrderStateWrDone & ~reOrderStateWrDoneD1;
always @ (posedge SysClk)
if (!Reset_L) failedStateLoaded <= 1'b0;
else if (WrReOrderStateControl) failedStateLoaded <= #`SD 1'b0;
else if (loadFailedState) failedStateLoaded <= #`SD 1'b1;
assign enableFailedStateLoad = (!failedStateLoaded & portFifoSelect);
always @ (posedge SysClk)
if (!Reset_L) loadAddrFailed <= 1'b0;
else if (enableFailedStateLoad) loadAddrFailed <= #`SD (respAddrFail
else loadAddrFailed <= #`SD 1'b0;
always @ (posedge SysClk)
if (!Reset_L) loadDMAFailed <= 1'b0;
else if (enableFailedStateLoad) loadDMAFailed <= #`SD (respDmaNumFail
else loadDMAFailed <= #`SD 1'b0;
always @ (posedge SysClk)
if (!Reset_L) loadLengthFailed <= 1'b0;
else if (enableFailedStateLoad) loadLengthFailed <= #`SD (respLengthFail
else loadLengthFailed <= #`SD 1'b0;
assign loadFailedState = (loadAddrFailed | loadDMAFailed | loadLengthFailed);
always @ (posedge SysClk)
if (!Reset_L) addressFailed <= 1'b0;
else if (clrFailedStatePosEdge) addressFailed <= #`SD 1'b0;
else if (loadAddrFailed) addressFailed <= #`SD 1'b1;
always @ (posedge SysClk)
if (!Reset_L) dMAFailed <= 1'b0;
else if (clrFailedStatePosEdge) dMAFailed <= #`SD 1'b0;
else if (loadDMAFailed) dMAFailed <= #`SD 1'b1;
always @ (posedge SysClk)
if (!Reset_L) lengthFailed <= 1'b0;
else if (clrFailedStatePosEdge) lengthFailed <= #`SD 1'b0;
else if (loadLengthFailed) lengthFailed <= #`SD 1'b1;
always @ (posedge SysClk)
if (!Reset_L) rOStateFailAddr <= {REORDER_PTR{1'b0}};
else if (clrFailedStatePosEdge) rOStateFailAddr <= #`SD 4'h0;
else if (loadFailedState) rOStateFailAddr <= #`SD reOrderIndex;
always @ (posedge SysClk)
if (!Reset_L) reOrderStRdAddr <= {REORDER_PTR{1'b0}};
else if (reOrderStateRead) reOrderStRdAddr <= #`SD rOStatePioAddr;
else reOrderStRdAddr <= #`SD reOrderIndex;
assign pioStateSopBit = reOrderSopBit[reOrderStRdAddr]; // 1'b0
assign pioStateOddNumberPkt = reOrderOddNumberPkt[reOrderStRdAddr];// 1'b0
assign pioStateDMAMarkBit = reOrderDMAMarkBit[reOrderStRdAddr]; // 1'b0
assign pioStateGatherLast = reOrderGatherLast[reOrderStRdAddr]; // 1'b0
assign pioStateDMANumber = reOrderDMANumber[reOrderStRdAddr]; // 5'h0
assign pioStateEndingWrPtr = reOrderEndingWrPtr[reOrderStRdAddr]; // 10'h0
assign pioStateNextWrPtr = reOrderNextWrPtr[reOrderStRdAddr]; // 10'h0
assign pioStateAnchorLength = reOrderAnchorLength[reOrderStRdAddr];// 13'h0
assign pioStateAnchorAddr = reOrderAnchorAddr[reOrderStRdAddr]; // 64'h0
always @ (posedge SysClk)
if (!Reset_L) ReOrderStateData0 <= 32'h0;
else if (WrReOrderStateData0) ReOrderStateData0 <= #`SD PioDataIn;
else if (loadFailedState | reOrderStateRdDonePosEdge)
ReOrderStateData0 <= #`SD {6'b0, // - 31:26
pioStateSopBit, // 1'b0 - 25
pioStateOddNumberPkt, // 1'b0 - 24
pioStateDMAMarkBit, // 1'b0 - 22
pioStateGatherLast, // 1'b0 - 20
pioStateDMANumber, // 5'h0 - 15:11
pioStateEndingWrPtr // 10'h0 - 9:0
always @ (posedge SysClk)
if (!Reset_L) ReOrderStateData1 <= 32'h0;
else if (WrReOrderStateData1) ReOrderStateData1 <= #`SD PioDataIn;
else if (loadFailedState | reOrderStateRdDonePosEdge)
ReOrderStateData1 <= #`SD {6'b0, // - 31:26
pioStateNextWrPtr, // 10'h0 - 25:16
pioStateAnchorLength // 13'h0 - 12:0
always @ (posedge SysClk)
if (!Reset_L) ReOrderStateData2 <= 32'h0;
else if (WrReOrderStateData2) ReOrderStateData2 <= #`SD PioDataIn;
else if (loadFailedState | reOrderStateRdDonePosEdge)
ReOrderStateData2 <= #`SD pioStateAnchorAddr[63:32];
always @ (posedge SysClk)
if (!Reset_L) ReOrderStateData3 <= 32'h0;
else if (WrReOrderStateData3) ReOrderStateData3 <= #`SD PioDataIn;
else if (loadFailedState | reOrderStateRdDonePosEdge)
ReOrderStateData3 <= #`SD pioStateAnchorAddr[31:0];
/*--------------------------------------------------------------*/
// TXC -> TDMC Interface Signals
/*--------------------------------------------------------------*/
always @(atHeadOfFifoDMANumber)
case(atHeadOfFifoDMANumber) // Synopsys full_case parallel_case
`DMA_CHANNEL_ZERO: dmaNumber = 24'h000001;
`DMA_CHANNEL_ONE: dmaNumber = 24'h000002;
`DMA_CHANNEL_TWO: dmaNumber = 24'h000004;
`DMA_CHANNEL_THREE: dmaNumber = 24'h000008;
`DMA_CHANNEL_FOUR: dmaNumber = 24'h000010;
`DMA_CHANNEL_FIVE: dmaNumber = 24'h000020;
`DMA_CHANNEL_SIX: dmaNumber = 24'h000040;
`DMA_CHANNEL_SEVEN: dmaNumber = 24'h000080;
`DMA_CHANNEL_EIGHT: dmaNumber = 24'h000100;
`DMA_CHANNEL_NINE: dmaNumber = 24'h000200;
`DMA_CHANNEL_TEN: dmaNumber = 24'h000400;
`DMA_CHANNEL_ELEVEN: dmaNumber = 24'h000800;
`DMA_CHANNEL_TWELVE: dmaNumber = 24'h001000;
`DMA_CHANNEL_THIRTEEN: dmaNumber = 24'h002000;
`DMA_CHANNEL_FOURTEEN: dmaNumber = 24'h004000;
`DMA_CHANNEL_FIFTEEN: dmaNumber = 24'h008000;
`DMA_CHANNEL_SIXTEEN: dmaNumber = 24'h010000;
`DMA_CHANNEL_SEVENTEEN: dmaNumber = 24'h020000;
`DMA_CHANNEL_EIGHTEEN: dmaNumber = 24'h040000;
`DMA_CHANNEL_NINETEEN: dmaNumber = 24'h080000;
`DMA_CHANNEL_TWENTY: dmaNumber = 24'h100000;
`DMA_CHANNEL_TWENTYONE: dmaNumber = 24'h200000;
`DMA_CHANNEL_TWENTYTWO: dmaNumber = 24'h400000;
`DMA_CHANNEL_TWENTYTHREE: dmaNumber = 24'h800000;
default: dmaNumber = 24'h0;
assign updateTDMC = updateShadowReOrderWrPtr;
always @ (posedge SysClk)
DMA0_Inc_Pkt_Cnt <= 1'b0;
DMA0_Inc_Head <= dmaNumber[0];
DMA0_Mark_Bit <= dmaNumber[0] & atHeadOfFifoMarkBit;
DMA0_Inc_Pkt_Cnt <= dmaNumber[0] & atHeadOfFifoGatherLast;
DMA0_Inc_Pkt_Cnt <= 1'b0;
always @ (posedge SysClk)
DMA1_Inc_Pkt_Cnt <= 1'b0;
DMA1_Inc_Head <= dmaNumber[1];
DMA1_Mark_Bit <= dmaNumber[1] & atHeadOfFifoMarkBit;
DMA1_Inc_Pkt_Cnt <= dmaNumber[1] & atHeadOfFifoGatherLast;
DMA1_Inc_Pkt_Cnt <= 1'b0;
always @ (posedge SysClk)
DMA2_Inc_Pkt_Cnt <= 1'b0;
DMA2_Inc_Head <= dmaNumber[2];
DMA2_Mark_Bit <= dmaNumber[2] & atHeadOfFifoMarkBit;
DMA2_Inc_Pkt_Cnt <= dmaNumber[2] & atHeadOfFifoGatherLast;
DMA2_Inc_Pkt_Cnt <= 1'b0;
always @ (posedge SysClk)
DMA3_Inc_Pkt_Cnt <= 1'b0;
DMA3_Inc_Head <= dmaNumber[3];
DMA3_Mark_Bit <= dmaNumber[3] & atHeadOfFifoMarkBit;
DMA3_Inc_Pkt_Cnt <= dmaNumber[3] & atHeadOfFifoGatherLast;
DMA3_Inc_Pkt_Cnt <= 1'b0;
always @ (posedge SysClk)
DMA4_Inc_Pkt_Cnt <= 1'b0;
DMA4_Inc_Head <= dmaNumber[4];
DMA4_Mark_Bit <= dmaNumber[4] & atHeadOfFifoMarkBit;
DMA4_Inc_Pkt_Cnt <= dmaNumber[4] & atHeadOfFifoGatherLast;
DMA4_Inc_Pkt_Cnt <= 1'b0;
always @ (posedge SysClk)
DMA5_Inc_Pkt_Cnt <= 1'b0;
DMA5_Inc_Head <= dmaNumber[5];
DMA5_Mark_Bit <= dmaNumber[5] & atHeadOfFifoMarkBit;
DMA5_Inc_Pkt_Cnt <= dmaNumber[5] & atHeadOfFifoGatherLast;
DMA5_Inc_Pkt_Cnt <= 1'b0;
always @ (posedge SysClk)
DMA6_Inc_Pkt_Cnt <= 1'b0;
DMA6_Inc_Head <= dmaNumber[6];
DMA6_Mark_Bit <= dmaNumber[6] & atHeadOfFifoMarkBit;
DMA6_Inc_Pkt_Cnt <= dmaNumber[6] & atHeadOfFifoGatherLast;
DMA6_Inc_Pkt_Cnt <= 1'b0;
always @ (posedge SysClk)
DMA7_Inc_Pkt_Cnt <= 1'b0;
DMA7_Inc_Head <= dmaNumber[7];
DMA7_Mark_Bit <= dmaNumber[7] & atHeadOfFifoMarkBit;
DMA7_Inc_Pkt_Cnt <= dmaNumber[7] & atHeadOfFifoGatherLast;
DMA7_Inc_Pkt_Cnt <= 1'b0;
always @ (posedge SysClk)
DMA8_Inc_Pkt_Cnt <= 1'b0;
DMA8_Inc_Head <= dmaNumber[8];
DMA8_Mark_Bit <= dmaNumber[8] & atHeadOfFifoMarkBit;
DMA8_Inc_Pkt_Cnt <= dmaNumber[8] & atHeadOfFifoGatherLast;
DMA8_Inc_Pkt_Cnt <= 1'b0;
always @ (posedge SysClk)
DMA9_Inc_Pkt_Cnt <= 1'b0;
DMA9_Inc_Head <= dmaNumber[9];
DMA9_Mark_Bit <= dmaNumber[9] & atHeadOfFifoMarkBit;
DMA9_Inc_Pkt_Cnt <= dmaNumber[9] & atHeadOfFifoGatherLast;
DMA9_Inc_Pkt_Cnt <= 1'b0;
always @ (posedge SysClk)
DMA10_Inc_Pkt_Cnt <= 1'b0;
DMA10_Inc_Head <= dmaNumber[10];
DMA10_Mark_Bit <= dmaNumber[10] & atHeadOfFifoMarkBit;
DMA10_Inc_Pkt_Cnt <= dmaNumber[10] & atHeadOfFifoGatherLast;
DMA10_Inc_Pkt_Cnt <= 1'b0;
always @ (posedge SysClk)
DMA11_Inc_Pkt_Cnt <= 1'b0;
DMA11_Inc_Head <= dmaNumber[11];
DMA11_Mark_Bit <= dmaNumber[11] & atHeadOfFifoMarkBit;
DMA11_Inc_Pkt_Cnt <= dmaNumber[11] & atHeadOfFifoGatherLast;
DMA11_Inc_Pkt_Cnt <= 1'b0;
always @ (posedge SysClk)
DMA12_Inc_Pkt_Cnt <= 1'b0;
DMA12_Inc_Head <= dmaNumber[12];
DMA12_Mark_Bit <= dmaNumber[12] & atHeadOfFifoMarkBit;
DMA12_Inc_Pkt_Cnt <= dmaNumber[12] & atHeadOfFifoGatherLast;
DMA12_Inc_Pkt_Cnt <= 1'b0;
always @ (posedge SysClk)
DMA13_Inc_Pkt_Cnt <= 1'b0;
DMA13_Inc_Head <= dmaNumber[13];
DMA13_Mark_Bit <= dmaNumber[13] & atHeadOfFifoMarkBit;
DMA13_Inc_Pkt_Cnt <= dmaNumber[13] & atHeadOfFifoGatherLast;
DMA13_Inc_Pkt_Cnt <= 1'b0;
always @ (posedge SysClk)
DMA14_Inc_Pkt_Cnt <= 1'b0;
DMA14_Inc_Head <= dmaNumber[14];
DMA14_Mark_Bit <= dmaNumber[14] & atHeadOfFifoMarkBit;
DMA14_Inc_Pkt_Cnt <= dmaNumber[14] & atHeadOfFifoGatherLast;
DMA14_Inc_Pkt_Cnt <= 1'b0;
always @ (posedge SysClk)
DMA15_Inc_Pkt_Cnt <= 1'b0;
DMA15_Inc_Head <= dmaNumber[15];
DMA15_Mark_Bit <= dmaNumber[15] & atHeadOfFifoMarkBit;
DMA15_Inc_Pkt_Cnt <= dmaNumber[15] & atHeadOfFifoGatherLast;
DMA15_Inc_Pkt_Cnt <= 1'b0;
always @ (posedge SysClk)
DMA16_Inc_Pkt_Cnt <= 1'b0;
DMA16_Inc_Head <= dmaNumber[16];
DMA16_Mark_Bit <= dmaNumber[16] & atHeadOfFifoMarkBit;
DMA16_Inc_Pkt_Cnt <= dmaNumber[16] & atHeadOfFifoGatherLast;
DMA16_Inc_Pkt_Cnt <= 1'b0;
always @ (posedge SysClk)
DMA17_Inc_Pkt_Cnt <= 1'b0;
DMA17_Inc_Head <= dmaNumber[17];
DMA17_Mark_Bit <= dmaNumber[17] & atHeadOfFifoMarkBit;
DMA17_Inc_Pkt_Cnt <= dmaNumber[17] & atHeadOfFifoGatherLast;
DMA17_Inc_Pkt_Cnt <= 1'b0;
always @ (posedge SysClk)
DMA18_Inc_Pkt_Cnt <= 1'b0;
DMA18_Inc_Head <= dmaNumber[18];
DMA18_Mark_Bit <= dmaNumber[18] & atHeadOfFifoMarkBit;
DMA18_Inc_Pkt_Cnt <= dmaNumber[18] & atHeadOfFifoGatherLast;
DMA18_Inc_Pkt_Cnt <= 1'b0;
always @ (posedge SysClk)
DMA19_Inc_Pkt_Cnt <= 1'b0;
DMA19_Inc_Head <= dmaNumber[19];
DMA19_Mark_Bit <= dmaNumber[19] & atHeadOfFifoMarkBit;
DMA19_Inc_Pkt_Cnt <= dmaNumber[19] & atHeadOfFifoGatherLast;
DMA19_Inc_Pkt_Cnt <= 1'b0;
always @ (posedge SysClk)
DMA20_Inc_Pkt_Cnt <= 1'b0;
DMA20_Inc_Head <= dmaNumber[20];
DMA20_Mark_Bit <= dmaNumber[20] & atHeadOfFifoMarkBit;
DMA20_Inc_Pkt_Cnt <= dmaNumber[20] & atHeadOfFifoGatherLast;
DMA20_Inc_Pkt_Cnt <= 1'b0;
always @ (posedge SysClk)
DMA21_Inc_Pkt_Cnt <= 1'b0;
DMA21_Inc_Head <= dmaNumber[21];
DMA21_Mark_Bit <= dmaNumber[21] & atHeadOfFifoMarkBit;
DMA21_Inc_Pkt_Cnt <= dmaNumber[21] & atHeadOfFifoGatherLast;
DMA21_Inc_Pkt_Cnt <= 1'b0;
always @ (posedge SysClk)
DMA22_Inc_Pkt_Cnt <= 1'b0;
DMA22_Inc_Head <= dmaNumber[22];
DMA22_Mark_Bit <= dmaNumber[22] & atHeadOfFifoMarkBit;
DMA22_Inc_Pkt_Cnt <= dmaNumber[22] & atHeadOfFifoGatherLast;
DMA22_Inc_Pkt_Cnt <= 1'b0;
always @ (posedge SysClk)
DMA23_Inc_Pkt_Cnt <= 1'b0;
DMA23_Inc_Head <= dmaNumber[23];
DMA23_Mark_Bit <= dmaNumber[23] & atHeadOfFifoMarkBit;
DMA23_Inc_Pkt_Cnt <= dmaNumber[23] & atHeadOfFifoGatherLast;
DMA23_Inc_Pkt_Cnt <= 1'b0;
/*--------------------------------------------------------------*/
/*--------------------------------------------------------------*/
assign spaceForAnchor = ({1'b0, totalAlignedNumberofBytes}
reAlignerSpaceAvailable[14:0]);
if (!Reset_L) Anchor_Done <= #`SD 1'b0;
else Anchor_Done <= #`SD anchorDone;
/*--------------------------------------------------------------*/
// Anchor, Re-order & Pointer State Vectors
/*--------------------------------------------------------------*/
if (!Reset_L) Anchor_State <= #`SD ANCHOR_IDLE;
else Anchor_State <= #`SD nextAnchorState;
if (!Reset_L) ReOrder_State <= #`SD RE_ORDER_IDLE;
else ReOrder_State <= #`SD nextReOrderState;
if (!Reset_L) Pointer_State <= #`SD POINTER_IDLE;
else Pointer_State <= #`SD nextPointerState;
/*--------------------------------------------------------------*/
/*--------------------------------------------------------------*/
function [3:0] AnchorDefaults;
input [3:0] currentState;
AnchorDefaults = currentState;
always @(/*AUTOSENSE*/Txc_Enabled or MAC_Enabled
or Anchor_State or Req_Anchor
or spaceForAnchor or reOrderStateFull
case(Anchor_State) // synopsys full_case parallel_case
/* 0in < case -full -parallel */
nextAnchorState = AnchorDefaults(Anchor_State);
nextAnchorState = CHECK_ANCHOR_SIZE;
nextAnchorState = AnchorDefaults(Anchor_State);
if (spaceForAnchor & ~reOrderStateFull)
nextAnchorState = ANCHOR_ACCEPT;
nextAnchorState = ANCHOR_REJECT;
nextAnchorState = AnchorDefaults(Anchor_State);
nextAnchorState = ANCHOR_WAIT;
nextAnchorState = AnchorDefaults(Anchor_State);
nextAnchorState = ANCHOR_WAIT;
nextAnchorState = AnchorDefaults(Anchor_State);
nextAnchorState = ANCHOR_IDLE;
/*--------------------------------------------------------------*/
// End of Anchor State Machine
/*--------------------------------------------------------------*/
/*--------------------------------------------------------------*/
// Re-Order Data State Machine
/*--------------------------------------------------------------*/
function [3:0] ReOrderDefaults;
input [3:0] currentState;
ReOrderDefaults = currentState;
TXC_DMC_Resp_Accept = 1'b0;
always @(/*AUTOSENSE*/Txc_Enabled or MAC_Enabled
or ReOrder_State or DMC_TXC_Resp_Rdy or DMC_TXC_Resp_Client
or transactionTimeout or nullTransaction or validTransaction
or DMC_TXC_Trans_Complete or DMC_TXC_Resp_Complete
case(ReOrder_State) // synopsys full_case parallel_case
/* 0in < case -full -parallel */
nextReOrderState = ReOrderDefaults(ReOrder_State);
if (DMC_TXC_Resp_Rdy & DMC_TXC_Resp_Client)
nextReOrderState = REORDER_STATE_LOAD;
TXC_DMC_Resp_Accept = 1'b1;
nextReOrderState = ReOrderDefaults(ReOrder_State);
nextReOrderState = TRANSACTION_TIMEOUT;
else if (nullTransaction)
nextReOrderState = NULL_TRANSACTION;
else if (validTransaction)
nextReOrderState = WAIT_FOR_RESP_COMP;
nextReOrderState = RE_ORDER_FATAL;
nextReOrderState = ReOrderDefaults(ReOrder_State);
if (DMC_TXC_Trans_Complete | DMC_TXC_Resp_Complete)
nextReOrderState = FLUSH_PIPELINE;
nextReOrderState = ReOrderDefaults(ReOrder_State);
if (DMC_TXC_Trans_Complete | DMC_TXC_Resp_Complete)
nextReOrderState = RE_ORDER_IDLE;
nextReOrderState = ReOrderDefaults(ReOrder_State);
if (DMC_TXC_Trans_Complete | DMC_TXC_Resp_Complete)
nextReOrderState = RE_ORDER_IDLE;
nextReOrderState = ReOrderDefaults(ReOrder_State);
if (Txc_Enabled & MAC_Enabled)
if (DMC_TXC_Resp_Rdy & DMC_TXC_Resp_Client)
nextReOrderState = REORDER_STATE_LOAD;
TXC_DMC_Resp_Accept = 1'b1;
nextReOrderState = RE_ORDER_IDLE;
nextReOrderState = RE_ORDER_IDLE;
nextReOrderState = ReOrderDefaults(ReOrder_State);
if (!Txc_Enabled | !MAC_Enabled)
nextReOrderState = RE_ORDER_IDLE;
/*--------------------------------------------------------------*/
// Re-Order Read Pointer State Machine
/*--------------------------------------------------------------*/
function [3:0] PointerDefaults;
input [3:0] currentState;
PointerDefaults = currentState;
updateShadowReOrderWrPtr = 1'b0;
decReOrderEntries = 1'b0;
always @(/*AUTOSENSE*/Txc_Enabled or MAC_Enabled
or Pointer_State or reOrderStateEmpty
case(Pointer_State) // synopsys full_case parallel_case
/* 0in < case -full -parallel */
nextPointerState = PointerDefaults(Pointer_State);
nextPointerState = WAIT_FOR_POINTER_DONE;
nextPointerState = PointerDefaults(Pointer_State);
updateShadowReOrderWrPtr = 1'b1;
nextPointerState = POINTER_RD_UPDATE;
nextPointerState = PointerDefaults(Pointer_State);
reOrderEntriesRd = ~reOrderStateEmpty;
decReOrderEntries = ~reOrderStateEmpty;
nextPointerState = POINTER_IDLE;