Line 39... |
Line 39... |
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
//
|
//
|
// CVS Revision History
|
// CVS Revision History
|
//
|
//
|
// $Log: not supported by cvs2svn $
|
// $Log: not supported by cvs2svn $
|
|
// Revision 1.50 2003/01/22 13:49:26 tadejm
|
|
// When control packets were received, they were ignored in some cases.
|
|
//
|
// Revision 1.49 2003/01/21 12:09:40 mohor
|
// Revision 1.49 2003/01/21 12:09:40 mohor
|
// When receiving normal data frame and RxFlow control was switched on, RXB
|
// When receiving normal data frame and RxFlow control was switched on, RXB
|
// interrupt was not set.
|
// interrupt was not set.
|
//
|
//
|
// Revision 1.48 2003/01/20 12:05:26 mohor
|
// Revision 1.48 2003/01/20 12:05:26 mohor
|
Line 484... |
Line 487... |
wire [1:0] TxValidBytes;
|
wire [1:0] TxValidBytes;
|
|
|
wire [7:0] TempTxBDAddress;
|
wire [7:0] TempTxBDAddress;
|
wire [7:0] TempRxBDAddress;
|
wire [7:0] TempRxBDAddress;
|
|
|
wire SetGotData;
|
|
wire GotDataEvaluate;
|
|
|
|
wire RxStatusWrite;
|
wire RxStatusWrite;
|
|
|
reg WB_ACK_O;
|
reg WB_ACK_O;
|
|
|
wire [8:0] RxStatusIn;
|
wire [8:0] RxStatusIn;
|
Line 933... |
Line 933... |
always @ (posedge WB_CLK_I or posedge Reset)
|
always @ (posedge WB_CLK_I or posedge Reset)
|
begin
|
begin
|
if(Reset)
|
if(Reset)
|
ReadTxDataFromMemory <=#Tp 1'b0;
|
ReadTxDataFromMemory <=#Tp 1'b0;
|
else
|
else
|
if(TxLengthEq0 | TxAbortPacket | TxRetryPacket)
|
if(TxLengthEq0 | TxAbortPulse | TxRetryPulse)
|
ReadTxDataFromMemory <=#Tp 1'b0;
|
ReadTxDataFromMemory <=#Tp 1'b0;
|
else
|
else
|
if(SetReadTxDataFromMemory)
|
if(SetReadTxDataFromMemory)
|
ReadTxDataFromMemory <=#Tp 1'b1;
|
ReadTxDataFromMemory <=#Tp 1'b1;
|
end
|
end
|
|
|
reg tx_burst_en;
|
reg tx_burst_en;
|
reg rx_burst_en;
|
reg rx_burst_en;
|
reg BlockingLastReadOn_Abort_Retry;
|
|
|
|
wire ReadTxDataFromMemory_2 = ReadTxDataFromMemory & ~BlockReadTxDataFromMemory & ~BlockingLastReadOn_Abort_Retry;
|
wire ReadTxDataFromMemory_2 = ReadTxDataFromMemory & ~BlockReadTxDataFromMemory;
|
wire tx_burst = ReadTxDataFromMemory_2 & tx_burst_en;
|
wire tx_burst = ReadTxDataFromMemory_2 & tx_burst_en;
|
|
|
wire [31:0] TxData_wb;
|
wire [31:0] TxData_wb;
|
wire ReadTxDataFromFifo_wb;
|
wire ReadTxDataFromFifo_wb;
|
|
|
always @ (posedge WB_CLK_I or posedge Reset)
|
always @ (posedge WB_CLK_I or posedge Reset)
|
begin
|
begin
|
if(Reset)
|
if(Reset)
|
BlockReadTxDataFromMemory <=#Tp 1'b0;
|
BlockReadTxDataFromMemory <=#Tp 1'b0;
|
else
|
else
|
if((TxBufferAlmostFull | TxLength <= 4)& MasterWbTX & (~cyc_cleared) & (!(TxAbortPacket | TxRetryPacket)))
|
if((TxBufferAlmostFull | TxLength <= 4)& MasterWbTX & (~cyc_cleared) & (!(TxAbortPacket_NotCleared | TxRetryPacket_NotCleared)))
|
BlockReadTxDataFromMemory <=#Tp 1'b1;
|
BlockReadTxDataFromMemory <=#Tp 1'b1;
|
else
|
else
|
if(ReadTxDataFromFifo_wb | TxDonePacket | TxAbortPacket | TxRetryPacket)
|
if(ReadTxDataFromFifo_wb | TxDonePacket | TxAbortPacket | TxRetryPacket)
|
BlockReadTxDataFromMemory <=#Tp 1'b0;
|
BlockReadTxDataFromMemory <=#Tp 1'b0;
|
end
|
end
|
|
|
|
|
always @ (posedge WB_CLK_I or posedge Reset)
|
|
begin
|
|
if(Reset)
|
|
BlockingLastReadOn_Abort_Retry <=#Tp 1'b0;
|
|
else
|
|
if(TxAbortPacket | TxRetryPacket)
|
|
BlockingLastReadOn_Abort_Retry <=#Tp 1'b0;
|
|
else
|
|
if(((TxAbort_wb & !TxAbortPacket_NotCleared) | (TxRetry_wb & !TxRetryPacket_NotCleared)) & !TxBDReady)
|
|
BlockingLastReadOn_Abort_Retry <=#Tp 1'b1;
|
|
end
|
|
|
|
|
|
|
|
|
|
assign MasterAccessFinished = m_wb_ack_i | m_wb_err_i;
|
assign MasterAccessFinished = m_wb_ack_i | m_wb_err_i;
|
wire [`ETH_TX_FIFO_CNT_WIDTH-1:0] txfifo_cnt;
|
wire [`ETH_TX_FIFO_CNT_WIDTH-1:0] txfifo_cnt;
|
wire [`ETH_RX_FIFO_CNT_WIDTH-1:0] rxfifo_cnt;
|
wire [`ETH_RX_FIFO_CNT_WIDTH-1:0] rxfifo_cnt;
|
reg [`ETH_BURST_CNT_WIDTH-1:0] tx_burst_cnt;
|
reg [`ETH_BURST_CNT_WIDTH-1:0] tx_burst_cnt;
|
reg [`ETH_BURST_CNT_WIDTH-1:0] rx_burst_cnt;
|
reg [`ETH_BURST_CNT_WIDTH-1:0] rx_burst_cnt;
|
Line 1269... |
Line 1253... |
TxStartFrm <=#Tp 1'b0;
|
TxStartFrm <=#Tp 1'b0;
|
else
|
else
|
if(TxStartFrm_sync2)
|
if(TxStartFrm_sync2)
|
TxStartFrm <=#Tp 1'b1;
|
TxStartFrm <=#Tp 1'b1;
|
else
|
else
|
if(TxUsedData_q | ~TxStartFrm_sync2 & (TxRetry | TxAbort))
|
if(TxUsedData_q | ~TxStartFrm_sync2 & (TxRetry & (~TxRetry_q) | TxAbort & (~TxAbort_q)))
|
TxStartFrm <=#Tp 1'b0;
|
TxStartFrm <=#Tp 1'b0;
|
end
|
end
|
// End: Generation of the TxStartFrm_wb which is then synchronized to the MTxClk
|
// End: Generation of the TxStartFrm_wb which is then synchronized to the MTxClk
|
|
|
|
|
Line 1423... |
Line 1407... |
always @ (posedge WB_CLK_I or posedge Reset)
|
always @ (posedge WB_CLK_I or posedge Reset)
|
begin
|
begin
|
if(Reset)
|
if(Reset)
|
TxAbortPacket <=#Tp 1'b0;
|
TxAbortPacket <=#Tp 1'b0;
|
else
|
else
|
if(TxAbort_wb & !tx_burst_en & MasterWbTX & MasterAccessFinished & !TxAbortPacketBlocked |
|
if(TxAbort_wb & (~tx_burst_en) & MasterWbTX & MasterAccessFinished & (~TxAbortPacketBlocked) |
|
TxAbort_wb & !MasterWbTX & !TxAbortPacketBlocked)
|
TxAbort_wb & (~MasterWbTX) & (~TxAbortPacketBlocked))
|
TxAbortPacket <=#Tp 1'b1;
|
TxAbortPacket <=#Tp 1'b1;
|
else
|
else
|
TxAbortPacket <=#Tp 1'b0;
|
TxAbortPacket <=#Tp 1'b0;
|
end
|
end
|
|
|
Line 1439... |
Line 1423... |
TxAbortPacket_NotCleared <=#Tp 1'b0;
|
TxAbortPacket_NotCleared <=#Tp 1'b0;
|
else
|
else
|
if(TxEn & TxEn_q & TxAbortPacket_NotCleared)
|
if(TxEn & TxEn_q & TxAbortPacket_NotCleared)
|
TxAbortPacket_NotCleared <=#Tp 1'b0;
|
TxAbortPacket_NotCleared <=#Tp 1'b0;
|
else
|
else
|
if(TxAbort_wb & !tx_burst_en & MasterWbTX & MasterAccessFinished |
|
if(TxAbort_wb & (~tx_burst_en) & MasterWbTX & MasterAccessFinished & (~TxAbortPacketBlocked) |
|
TxAbort_wb & !MasterWbTX)
|
TxAbort_wb & (~MasterWbTX) & (~TxAbortPacketBlocked))
|
TxAbortPacket_NotCleared <=#Tp 1'b1;
|
TxAbortPacket_NotCleared <=#Tp 1'b1;
|
end
|
end
|
|
|
|
|
always @ (posedge WB_CLK_I or posedge Reset)
|
always @ (posedge WB_CLK_I or posedge Reset)
|
Line 1480... |
Line 1464... |
TxRetryPacket_NotCleared <=#Tp 1'b0;
|
TxRetryPacket_NotCleared <=#Tp 1'b0;
|
else
|
else
|
if(StartTxBDRead)
|
if(StartTxBDRead)
|
TxRetryPacket_NotCleared <=#Tp 1'b0;
|
TxRetryPacket_NotCleared <=#Tp 1'b0;
|
else
|
else
|
if(TxRetry_wb & !tx_burst_en & MasterWbTX & MasterAccessFinished |
|
if(TxRetry_wb & !tx_burst_en & MasterWbTX & MasterAccessFinished & !TxRetryPacketBlocked |
|
TxRetry_wb & !MasterWbTX)
|
TxRetry_wb & !MasterWbTX & !TxRetryPacketBlocked)
|
TxRetryPacket_NotCleared <=#Tp 1'b1;
|
TxRetryPacket_NotCleared <=#Tp 1'b1;
|
end
|
end
|
|
|
|
|
always @ (posedge WB_CLK_I or posedge Reset)
|
always @ (posedge WB_CLK_I or posedge Reset)
|
Line 1521... |
Line 1505... |
TxDonePacket_NotCleared <=#Tp 1'b0;
|
TxDonePacket_NotCleared <=#Tp 1'b0;
|
else
|
else
|
if(TxEn & TxEn_q & TxDonePacket_NotCleared)
|
if(TxEn & TxEn_q & TxDonePacket_NotCleared)
|
TxDonePacket_NotCleared <=#Tp 1'b0;
|
TxDonePacket_NotCleared <=#Tp 1'b0;
|
else
|
else
|
if(TxDone_wb & !tx_burst_en & MasterWbTX & MasterAccessFinished |
|
if(TxDone_wb & !tx_burst_en & MasterWbTX & MasterAccessFinished & (~TxDonePacketBlocked) |
|
TxDone_wb & !MasterWbTX)
|
TxDone_wb & !MasterWbTX & (~TxDonePacketBlocked))
|
TxDonePacket_NotCleared <=#Tp 1'b1;
|
TxDonePacket_NotCleared <=#Tp 1'b1;
|
end
|
end
|
|
|
|
|
always @ (posedge WB_CLK_I or posedge Reset)
|
always @ (posedge WB_CLK_I or posedge Reset)
|
Line 1540... |
Line 1524... |
if(!TxDone_wb & TxDone_wb_q)
|
if(!TxDone_wb & TxDone_wb_q)
|
TxDonePacketBlocked <=#Tp 1'b0;
|
TxDonePacketBlocked <=#Tp 1'b0;
|
end
|
end
|
|
|
|
|
// Sinchronizing and evaluating tx data
|
|
//assign SetGotData = (TxStartFrm_wb | NewTxDataAvaliable_wb & ~TxAbort_wb & ~TxRetry_wb) & ~WB_CLK_I;
|
|
assign SetGotData = (TxStartFrm_wb);
|
|
|
|
// Evaluating data. If abort or retry occured meanwhile than data is ignored.
|
|
//assign GotDataEvaluate = GotDataSync3 & ~GotData & (~TxRetry & ~TxAbort | (TxRetry | TxAbort) & (TxStartFrm));
|
|
assign GotDataEvaluate = (~TxRetry & ~TxAbort | (TxRetry | TxAbort) & (TxStartFrm));
|
|
|
|
|
|
// Indication of the last word
|
// Indication of the last word
|
always @ (posedge MTxClk or posedge Reset)
|
always @ (posedge MTxClk or posedge Reset)
|
begin
|
begin
|
if(Reset)
|
if(Reset)
|
LastWord <=#Tp 1'b0;
|
LastWord <=#Tp 1'b0;
|