OpenCores
URL https://opencores.org/ocsvn/ethmac/ethmac/trunk

Subversion Repositories ethmac

[/] [ethmac/] [branches/] [unneback/] [rtl/] [verilog/] [eth_wishbone.v] - Diff between revs 272 and 278

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 272 Rev 278
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;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.