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

Subversion Repositories ethmac

[/] [ethmac/] [trunk/] [rtl/] [verilog/] [eth_wishbone.v] - Diff between revs 64 and 77

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

Rev 64 Rev 77
Line 39... Line 39...
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
//
//
// CVS Revision History
// CVS Revision History
//
//
// $Log: not supported by cvs2svn $
// $Log: not supported by cvs2svn $
 
// Revision 1.11  2002/02/15 17:07:39  mohor
 
// Status was not written correctly when frames were discarted because of
 
// address mismatch.
 
//
// Revision 1.10  2002/02/15 12:17:39  mohor
// Revision 1.10  2002/02/15 12:17:39  mohor
// RxStartFrm cleared when abort or retry comes.
// RxStartFrm cleared when abort or retry comes.
//
//
// Revision 1.9  2002/02/15 11:59:10  mohor
// Revision 1.9  2002/02/15 11:59:10  mohor
// Changes that were lost when updating from 1.5 to 1.8 fixed.
// Changes that were lost when updating from 1.5 to 1.8 fixed.
Line 76... Line 80...
//
//
//
//
//
//
//
//
 
 
// igor !!!
// Build pause frame
// Napravi, pause frame
// Check GotData and evaluate data (abort or something like that comes before StartFrm)
 
// m_wb_err_i should start status underrun or uverrun
// Poskusi spremeniti vse signale na wb strani da bodo imeli enake koncnice (npr _wb),
// r_RecSmall not used
// vsi na MTxClk strani pa _txclk   
 
// Evaluiraj dato da pre start framom ni prisel abort ali kaj podobnega (kot je bilo v GotData, ki ga zbrisi)
 
 
 
// Naj m_wb_err_i vzge status underrun ali uverrun
 
 
 
`include "eth_defines.v"
`include "eth_defines.v"
`include "timescale.v"
`include "timescale.v"
 
 
 
 
Line 96... Line 96...
 
 
    // WISHBONE common
    // WISHBONE common
    WB_CLK_I, WB_DAT_I, WB_DAT_O,
    WB_CLK_I, WB_DAT_I, WB_DAT_O,
 
 
    // WISHBONE slave
    // WISHBONE slave
                WB_ADR_I, WB_SEL_I, WB_WE_I, WB_ACK_O,
                WB_ADR_I, WB_WE_I, WB_ACK_O,
    BDCs,
    BDCs,
 
 
    Reset,
    Reset,
 
 
    // WISHBONE master
    // WISHBONE master
Line 115... Line 115...
 
 
    //RX
    //RX
    MRxClk, RxData, RxValid, RxStartFrm, RxEndFrm, RxAbort,
    MRxClk, RxData, RxValid, RxStartFrm, RxEndFrm, RxAbort,
 
 
    // Register
    // Register
    r_TxEn, r_RxEn, r_TxBDNum, r_DmaEn, TX_BD_NUM_Wr, r_RecSmall,
    r_TxEn, r_RxEn, r_TxBDNum, TX_BD_NUM_Wr, r_RecSmall,
 
 
    WillSendControlFrame, TxCtrlEndFrm, // igor !!! WillSendControlFrame gre najbrz ven
    WillSendControlFrame, TxCtrlEndFrm, // igor !!! WillSendControlFrame gre najbrz ven
 
 
    // Interrupts
    // Interrupts
    TxB_IRQ, TxE_IRQ, RxB_IRQ, RxF_IRQ, Busy_IRQ,
    TxB_IRQ, TxE_IRQ, RxB_IRQ, RxE_IRQ, Busy_IRQ, TxC_IRQ, RxC_IRQ,
 
 
    // Rx Status
    // Rx Status
    InvalidSymbol, LatchedCrcError, RxLateCollision, ShortFrame, DribbleNibble,
    InvalidSymbol, LatchedCrcError, RxLateCollision, ShortFrame, DribbleNibble,
    ReceivedPacketTooBig, RxLength, LoadRxStatus,
    ReceivedPacketTooBig, RxLength, LoadRxStatus, ReceivedPacketGood,
 
 
    // Tx Status
    // Tx Status
    RetryCntLatched, RetryLimit, LateCollLatched, DeferLatched, CarrierSenseLost
    RetryCntLatched, RetryLimit, LateCollLatched, DeferLatched, CarrierSenseLost
 
 
                );
                );
Line 141... Line 141...
input  [31:0]   WB_DAT_I;       // WISHBONE data input
input  [31:0]   WB_DAT_I;       // WISHBONE data input
output [31:0]   WB_DAT_O;       // WISHBONE data output
output [31:0]   WB_DAT_O;       // WISHBONE data output
 
 
// WISHBONE slave
// WISHBONE slave
input   [9:2]   WB_ADR_I;       // WISHBONE address input
input   [9:2]   WB_ADR_I;       // WISHBONE address input
input   [3:0]   WB_SEL_I;       // WISHBONE byte select input
 
input           WB_WE_I;        // WISHBONE write enable input
input           WB_WE_I;        // WISHBONE write enable input
input           BDCs;           // Buffer descriptors are selected
input           BDCs;           // Buffer descriptors are selected
output          WB_ACK_O;       // WISHBONE acknowledge output
output          WB_ACK_O;       // WISHBONE acknowledge output
 
 
// WISHBONE master
// WISHBONE master
Line 168... Line 167...
input           ShortFrame;       // Frame shorter then the minimum size (r_MinFL) was received while small packets are enabled (r_RecSmall)
input           ShortFrame;       // Frame shorter then the minimum size (r_MinFL) was received while small packets are enabled (r_RecSmall)
input           DribbleNibble;    // Extra nibble received
input           DribbleNibble;    // Extra nibble received
input           ReceivedPacketTooBig;// Received packet is bigger than r_MaxFL
input           ReceivedPacketTooBig;// Received packet is bigger than r_MaxFL
input    [15:0] RxLength;         // Length of the incoming frame
input    [15:0] RxLength;         // Length of the incoming frame
input           LoadRxStatus;     // Rx status was loaded
input           LoadRxStatus;     // Rx status was loaded
 
input           ReceivedPacketGood;// Received packet's length and CRC are good
 
 
// Tx Status signals
// Tx Status signals
input     [3:0] RetryCntLatched;  // Latched Retry Counter
input     [3:0] RetryCntLatched;  // Latched Retry Counter
input           RetryLimit;       // Retry limit reached (Retry Max value + 1 attempts were made)
input           RetryLimit;       // Retry limit reached (Retry Max value + 1 attempts were made)
input           LateCollLatched;  // Late collision occured
input           LateCollLatched;  // Late collision occured
Line 205... Line 205...
 
 
//Register
//Register
input           r_TxEn;         // Transmit enable
input           r_TxEn;         // Transmit enable
input           r_RxEn;         // Receive enable
input           r_RxEn;         // Receive enable
input   [7:0]   r_TxBDNum;      // Receive buffer descriptor number
input   [7:0]   r_TxBDNum;      // Receive buffer descriptor number
input           r_DmaEn;        // DMA enable
 
input           TX_BD_NUM_Wr;   // RxBDNumber written
input           TX_BD_NUM_Wr;   // RxBDNumber written
input           r_RecSmall;     // Receive small frames igor !!! tega uporabi
input           r_RecSmall;     // Receive small frames igor !!! tega uporabi
 
 
// Interrupts
// Interrupts
output TxB_IRQ;
output TxB_IRQ;
output TxE_IRQ;
output TxE_IRQ;
output RxB_IRQ;
output RxB_IRQ;
output RxF_IRQ;
output RxE_IRQ;
output Busy_IRQ;
output Busy_IRQ;
 
output TxC_IRQ;
 
output RxC_IRQ;
 
 
 
 
 
reg TxB_IRQ;
 
reg TxE_IRQ;
 
reg RxB_IRQ;
 
reg RxE_IRQ;
 
 
 
 
reg             TxStartFrm;
reg             TxStartFrm;
reg             TxEndFrm;
reg             TxEndFrm;
reg     [7:0]   TxData;
reg     [7:0]   TxData;
 
 
Line 302... Line 310...
wire            StartTxBDRead;
wire            StartTxBDRead;
 
 
wire            TxIRQEn;
wire            TxIRQEn;
wire            WrapTxStatusBit;
wire            WrapTxStatusBit;
 
 
 
wire            RxIRQEn;
wire            WrapRxStatusBit;
wire            WrapRxStatusBit;
 
 
wire    [1:0]   TxValidBytes;
wire    [1:0]   TxValidBytes;
 
 
wire    [7:0]   TempTxBDAddress;
wire    [7:0]   TempTxBDAddress;
Line 405... Line 414...
      WbEn <=#Tp 1'b1;
      WbEn <=#Tp 1'b1;
      RxEn <=#Tp 1'b0;
      RxEn <=#Tp 1'b0;
      TxEn <=#Tp 1'b0;
      TxEn <=#Tp 1'b0;
      ram_addr <=#Tp 8'h0;
      ram_addr <=#Tp 8'h0;
      ram_di <=#Tp 32'h0;
      ram_di <=#Tp 32'h0;
 
      BDRead <=#Tp 1'b0;
 
      BDWrite <=#Tp 1'b0;
    end
    end
  else
  else
    begin
    begin
      // Switching between three stages depends on enable signals
      // Switching between three stages depends on enable signals
      casex ({WbEn_q, RxEn_q, TxEn_q, RxEn_needed, TxEn_needed})  // synopsys parallel_case
      casex ({WbEn_q, RxEn_q, TxEn_q, RxEn_needed, TxEn_needed})  // synopsys parallel_case
Line 960... Line 971...
 
 
assign TxIRQEn          = TxStatus[14];
assign TxIRQEn          = TxStatus[14];
assign WrapTxStatusBit  = TxStatus[13];
assign WrapTxStatusBit  = TxStatus[13];
assign PerPacketPad     = TxStatus[12];
assign PerPacketPad     = TxStatus[12];
assign PerPacketCrcEn   = TxStatus[11];
assign PerPacketCrcEn   = TxStatus[11];
//assign TxPauseRq      = TxStatus[9];      // already used     Ta gre ven, ker bo stvar izvedena preko registrov
 
 
 
 
 
 
assign RxIRQEn         = RxStatus[14];
assign WrapRxStatusBit = RxStatus[13];
assign WrapRxStatusBit = RxStatus[13];
 
 
 
 
// Temporary Tx and Rx buffer descriptor address 
// Temporary Tx and Rx buffer descriptor address 
assign TempTxBDAddress[7:0] = {8{ TxStatusWrite     & ~WrapTxStatusBit}} & (TxBDAddress + 2'h2) ; // Tx BD increment or wrap (last BD)
assign TempTxBDAddress[7:0] = {8{ TxStatusWrite     & ~WrapTxStatusBit}} & (TxBDAddress + 2'h2) ; // Tx BD increment or wrap (last BD)
Line 989... Line 1000...
always @ (posedge WB_CLK_I or posedge Reset)
always @ (posedge WB_CLK_I or posedge Reset)
begin
begin
  if(Reset)
  if(Reset)
    RxBDAddress <=#Tp 8'h0;
    RxBDAddress <=#Tp 8'h0;
  else
  else
  if(TX_BD_NUM_Wr)                        // When r_TxBDNum is updated, RxBDAddress is also igor !!! ta del bi se lahko popravil
  if(TX_BD_NUM_Wr)                        // When r_TxBDNum is updated, RxBDAddress is also
    RxBDAddress <=#Tp WB_DAT_I[7:0];
    RxBDAddress <=#Tp WB_DAT_I[7:0];
  else
  else
  if(RxStatusWrite)
  if(RxStatusWrite)
    RxBDAddress <=#Tp TempRxBDAddress;
    RxBDAddress <=#Tp TempRxBDAddress;
end
end
Line 1691... Line 1702...
  if(RxStartFrm)
  if(RxStartFrm)
    RxAbortLatched <=#Tp 1'b0;
    RxAbortLatched <=#Tp 1'b0;
end
end
 
 
 
 
 
 
 
 
 
 
// Interrupts
 
assign TxB_IRQ = 1'b0;
 
assign TxE_IRQ = 1'b0;
 
assign RxB_IRQ = 1'b0;
 
assign RxF_IRQ = 1'b0;
 
assign Busy_IRQ = 1'b0;
 
 
 
 
 
 
 
reg LoadStatusBlocked;
reg LoadStatusBlocked;
 
 
always @ (posedge MRxClk or posedge Reset)
always @ (posedge MRxClk or posedge Reset)
begin
begin
  if(Reset)
  if(Reset)
Line 1754... Line 1753...
  if(RxBufferFull & WriteRxDataToFifo_wb)
  if(RxBufferFull & WriteRxDataToFifo_wb)
    RxOverrun <=#Tp 1'b1;
    RxOverrun <=#Tp 1'b1;
end
end
 
 
 
 
 
 
 
wire TxError;
 
assign TxError = TxUnderRun | RetryLimit | LateCollLatched | CarrierSenseLost;
 
 
 
wire RxError;
 
assign RxError = |RxStatusInLatched[6:0];
 
 
 
// Tx Done Interrupt
 
always @ (posedge WB_CLK_I or posedge Reset)
 
begin
 
  if(Reset)
 
    TxB_IRQ <=#Tp 1'b0;
 
  else
 
  if(TxStatusWrite & TxIRQEn)
 
    TxB_IRQ <=#Tp ~TxError;
 
  else
 
    TxB_IRQ <=#Tp 1'b0;
 
end
 
 
 
 
 
// Tx Error Interrupt
 
always @ (posedge WB_CLK_I or posedge Reset)
 
begin
 
  if(Reset)
 
    TxE_IRQ <=#Tp 1'b0;
 
  else
 
  if(TxStatusWrite & TxIRQEn)
 
    TxE_IRQ <=#Tp TxError;
 
  else
 
    TxE_IRQ <=#Tp 1'b0;
 
end
 
 
 
 
 
// Rx Done Interrupt
 
always @ (posedge WB_CLK_I or posedge Reset)
 
begin
 
  if(Reset)
 
    RxB_IRQ <=#Tp 1'b0;
 
  else
 
  if(RxStatusWrite & RxIRQEn)
 
    RxB_IRQ <=#Tp ReceivedPacketGood;
 
  else
 
    RxB_IRQ <=#Tp 1'b0;
 
end
 
 
 
 
 
// Rx Error Interrupt
 
always @ (posedge WB_CLK_I or posedge Reset)
 
begin
 
  if(Reset)
 
    RxE_IRQ <=#Tp 1'b0;
 
  else
 
  if(RxStatusWrite & RxIRQEn)
 
    RxE_IRQ <=#Tp RxError;
 
  else
 
    RxE_IRQ <=#Tp 1'b0;
 
end
 
 
 
 
 
assign RxC_IRQ = 1'b0;
 
assign TxC_IRQ = 1'b0;
 
assign Busy_IRQ = 1'b0;
 
 
 
 
 
 
 
 
 
 
// TX
// TX
// bit 15 ready
// bit 15 ready
// bit 14 interrupt
// bit 14 interrupt
// bit 13 wrap
// bit 13 wrap
// bit 12 pad
// bit 12 pad

powered by: WebSVN 2.1.0

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