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

Subversion Repositories ethmac

[/] [ethmac/] [trunk/] [rtl/] [verilog/] [eth_wishbone.v] - Diff between revs 80 and 82

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

Rev 80 Rev 82
Line 39... Line 39...
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
//
//
// CVS Revision History
// CVS Revision History
//
//
// $Log: not supported by cvs2svn $
// $Log: not supported by cvs2svn $
 
// Revision 1.13  2002/02/26 16:59:55  mohor
 
// Small fixes for external/internal DMA missmatches.
 
//
// Revision 1.12  2002/02/26 16:22:07  mohor
// Revision 1.12  2002/02/26 16:22:07  mohor
// Interrupts changed
// Interrupts changed
//
//
// Revision 1.11  2002/02/15 17:07:39  mohor
// Revision 1.11  2002/02/15 17:07:39  mohor
// Status was not written correctly when frames were discarted because of
// Status was not written correctly when frames were discarted because of
Line 131... Line 134...
    InvalidSymbol, LatchedCrcError, RxLateCollision, ShortFrame, DribbleNibble,
    InvalidSymbol, LatchedCrcError, RxLateCollision, ShortFrame, DribbleNibble,
    ReceivedPacketTooBig, RxLength, LoadRxStatus, ReceivedPacketGood,
    ReceivedPacketTooBig, RxLength, LoadRxStatus, ReceivedPacketGood,
 
 
    // Tx Status
    // Tx Status
    RetryCntLatched, RetryLimit, LateCollLatched, DeferLatched, CarrierSenseLost
    RetryCntLatched, RetryLimit, LateCollLatched, DeferLatched, CarrierSenseLost
 
 
                );
                );
 
 
 
 
parameter Tp = 1;
parameter Tp = 1;
 
 
Line 281... Line 283...
reg             TxAbort_q;
reg             TxAbort_q;
reg             TxRetry_q;
reg             TxRetry_q;
reg             TxUsedData_q;
reg             TxUsedData_q;
 
 
reg    [31:0]   RxDataLatched2;
reg    [31:0]   RxDataLatched2;
reg    [23:0]   RxDataLatched1;
 
 
// reg    [23:0]   RxDataLatched1;
 
reg    [31:8]   RxDataLatched1;     // Big Endian Byte Ordering
 
 
reg     [1:0]   RxValidBytes;
reg     [1:0]   RxValidBytes;
reg     [1:0]   RxByteCnt;
reg     [1:0]   RxByteCnt;
reg             LastByteIn;
reg             LastByteIn;
reg             ShiftWillEnd;
reg             ShiftWillEnd;
 
 
Line 765... Line 770...
      m_wb_we_o  <=#Tp 1'b0;
      m_wb_we_o  <=#Tp 1'b0;
    end
    end
  else
  else
    begin
    begin
      // Switching between two stages depends on enable signals
      // Switching between two stages depends on enable signals
      casex ({MasterWbTX, MasterWbRX, ReadTxDataFromMemory_2, WriteRxDataToMemory, MasterAccessFinished})  // synopsys parallel_case full_case
      case ({MasterWbTX, MasterWbRX, ReadTxDataFromMemory_2, WriteRxDataToMemory, MasterAccessFinished})
        5'b00_x1_x :
        5'b00_01_0, 5'b00_11_0 :
          begin
          begin
            MasterWbTX <=#Tp 1'b0;  // idle and master write is needed (data write to rx buffer)
            MasterWbTX <=#Tp 1'b0;  // idle and master write is needed (data write to rx buffer)
            MasterWbRX <=#Tp 1'b1;
            MasterWbRX <=#Tp 1'b1;
            m_wb_adr_o <=#Tp RxPointer;
            m_wb_adr_o <=#Tp RxPointer;
            m_wb_cyc_o <=#Tp 1'b1;
            m_wb_cyc_o <=#Tp 1'b1;
            m_wb_stb_o <=#Tp 1'b1;
            m_wb_stb_o <=#Tp 1'b1;
            m_wb_we_o  <=#Tp 1'b1;
            m_wb_we_o  <=#Tp 1'b1;
          end
          end
        5'b00_10_x :
        5'b00_10_0, 5'b00_10_1 :
          begin
          begin
            MasterWbTX <=#Tp 1'b1;  // idle and master read is needed (data read from tx buffer)
            MasterWbTX <=#Tp 1'b1;  // idle and master read is needed (data read from tx buffer)
            MasterWbRX <=#Tp 1'b0;
            MasterWbRX <=#Tp 1'b0;
            m_wb_adr_o <=#Tp TxPointer;
            m_wb_adr_o <=#Tp TxPointer;
            m_wb_cyc_o <=#Tp 1'b1;
            m_wb_cyc_o <=#Tp 1'b1;
Line 800... Line 805...
            MasterWbTX <=#Tp 1'b0;  // master write and master write is needed (data write to rx buffer)
            MasterWbTX <=#Tp 1'b0;  // master write and master write is needed (data write to rx buffer)
            MasterWbRX <=#Tp 1'b1;
            MasterWbRX <=#Tp 1'b1;
            m_wb_adr_o <=#Tp RxPointer;
            m_wb_adr_o <=#Tp RxPointer;
            m_wb_we_o  <=#Tp 1'b1;
            m_wb_we_o  <=#Tp 1'b1;
          end
          end
        5'b10_x1_1 :
        5'b10_01_1, 5'b10_11_1 :
          begin
          begin
            MasterWbTX <=#Tp 1'b0;  // master read and master write is needed (data write to rx buffer)
            MasterWbTX <=#Tp 1'b0;  // master read and master write is needed (data write to rx buffer)
            MasterWbRX <=#Tp 1'b1;
            MasterWbRX <=#Tp 1'b1;
            m_wb_adr_o <=#Tp RxPointer;
            m_wb_adr_o <=#Tp RxPointer;
            m_wb_we_o  <=#Tp 1'b1;
            m_wb_we_o  <=#Tp 1'b1;
          end
          end
        5'b01_1x_1 :
        5'b01_10_1, 5'b01_11_1 :
          begin
          begin
            MasterWbTX <=#Tp 1'b1;  // master write and master read is needed (data read from tx buffer)
            MasterWbTX <=#Tp 1'b1;  // master write and master read is needed (data read from tx buffer)
            MasterWbRX <=#Tp 1'b0;
            MasterWbRX <=#Tp 1'b0;
            m_wb_adr_o <=#Tp TxPointer;
            m_wb_adr_o <=#Tp TxPointer;
            m_wb_we_o  <=#Tp 1'b0;
            m_wb_we_o  <=#Tp 1'b0;
          end
          end
        5'bxx_00_1 :
        5'b10_00_1, 5'b01_00_1 :
          begin
          begin
            MasterWbTX <=#Tp 1'b0;  // whatever and no master read or write is needed (ack or err comes finishing previous access)
            MasterWbTX <=#Tp 1'b0;  // whatever and no master read or write is needed (ack or err comes finishing previous access)
            MasterWbRX <=#Tp 1'b0;
            MasterWbRX <=#Tp 1'b0;
            m_wb_cyc_o <=#Tp 1'b0;
            m_wb_cyc_o <=#Tp 1'b0;
            m_wb_stb_o <=#Tp 1'b0;
            m_wb_stb_o <=#Tp 1'b0;
          end
          end
 
        default:                            // Don't touch
 
          begin
 
            MasterWbTX <=#Tp MasterWbTX;
 
            MasterWbRX <=#Tp MasterWbRX;
 
            m_wb_cyc_o <=#Tp m_wb_cyc_o;
 
            m_wb_stb_o <=#Tp m_wb_stb_o;
 
          end
      endcase
      endcase
    end
    end
end
end
 
 
wire TxFifoClear;
wire TxFifoClear;
Line 1120... Line 1132...
    TxData <=#Tp TxData_wb[7:0];
    TxData <=#Tp TxData_wb[7:0];
  else
  else
  if(TxUsedData & Flop)
  if(TxUsedData & Flop)
    begin
    begin
      case(TxByteCnt)
      case(TxByteCnt)
        0 : TxData <=#Tp TxDataLatched[7:0];
//        0 : TxData <=#Tp TxDataLatched[7:0];
        1 : TxData <=#Tp TxDataLatched[15:8];
//        1 : TxData <=#Tp TxDataLatched[15:8];
        2 : TxData <=#Tp TxDataLatched[23:16];
//        2 : TxData <=#Tp TxDataLatched[23:16];
        3 : TxData <=#Tp TxDataLatched[31:24];
//        3 : TxData <=#Tp TxDataLatched[31:24];
 
        0 : TxData <=#Tp TxDataLatched[31:24];      // Big Endian Byte Ordering
 
        1 : TxData <=#Tp TxDataLatched[23:16];
 
        2 : TxData <=#Tp TxDataLatched[15:8];
 
        3 : TxData <=#Tp TxDataLatched[7:0];
      endcase
      endcase
    end
    end
end
end
 
 
 
 
Line 1509... Line 1525...
    RxDataLatched1       <=#Tp 24'h0;
    RxDataLatched1       <=#Tp 24'h0;
  else
  else
  if(RxValid & RxBDReady & ~LastByteIn & (RxStartFrm | RxEnableWindow))
  if(RxValid & RxBDReady & ~LastByteIn & (RxStartFrm | RxEnableWindow))
    begin
    begin
      case(RxByteCnt)     // synopsys parallel_case
      case(RxByteCnt)     // synopsys parallel_case
        2'h0:        RxDataLatched1[7:0]   <=#Tp RxData;
//        2'h0:        RxDataLatched1[7:0]   <=#Tp RxData;
        2'h1:        RxDataLatched1[15:8]  <=#Tp RxData;
//        2'h1:        RxDataLatched1[15:8]  <=#Tp RxData;
        2'h2:        RxDataLatched1[23:16] <=#Tp RxData;
//        2'h2:        RxDataLatched1[23:16] <=#Tp RxData;
 
//        2'h3:        RxDataLatched1        <=#Tp RxDataLatched1;
 
        2'h0:        RxDataLatched1[31:24] <=#Tp RxData;            // Big Endian Byte Ordering
 
        2'h1:        RxDataLatched1[23:16] <=#Tp RxData;
 
        2'h2:        RxDataLatched1[15:8]  <=#Tp RxData;
        2'h3:        RxDataLatched1        <=#Tp RxDataLatched1;
        2'h3:        RxDataLatched1        <=#Tp RxDataLatched1;
      endcase
      endcase
    end
    end
end
end
 
 
Line 1526... Line 1546...
begin
begin
  if(Reset)
  if(Reset)
    RxDataLatched2 <=#Tp 32'h0;
    RxDataLatched2 <=#Tp 32'h0;
  else
  else
  if(SetWriteRxDataToFifo & ~ShiftWillEnd)
  if(SetWriteRxDataToFifo & ~ShiftWillEnd)
    RxDataLatched2 <=#Tp {RxData, RxDataLatched1[23:0]};
//    RxDataLatched2 <=#Tp {RxData, RxDataLatched1[23:0]};
 
    RxDataLatched2 <=#Tp {RxDataLatched1[31:8], RxData};              // Big Endian Byte Ordering
  else
  else
  if(SetWriteRxDataToFifo & ShiftWillEnd)
  if(SetWriteRxDataToFifo & ShiftWillEnd)
    case(RxValidBytes)
    case(RxValidBytes)
      0 : RxDataLatched2 <=#Tp {RxData, RxDataLatched1[23:0]};
//      0 : RxDataLatched2 <=#Tp {RxData, RxDataLatched1[23:0]};
      1 : RxDataLatched2 <=#Tp { 24'h0, RxDataLatched1[7:0]};
//      1 : RxDataLatched2 <=#Tp { 24'h0, RxDataLatched1[7:0]};
      2 : RxDataLatched2 <=#Tp { 16'h0, RxDataLatched1[15:0]};
//      2 : RxDataLatched2 <=#Tp { 16'h0, RxDataLatched1[15:0]};
      3 : RxDataLatched2 <=#Tp {  8'h0, RxDataLatched1[23:0]};
//      3 : RxDataLatched2 <=#Tp {  8'h0, RxDataLatched1[23:0]};
 
      0 : RxDataLatched2 <=#Tp {RxDataLatched1[31:8],  RxData};       // Big Endian Byte Ordering
 
      1 : RxDataLatched2 <=#Tp {RxDataLatched1[31:24], 24'h0};
 
      2 : RxDataLatched2 <=#Tp {RxDataLatched1[31:16], 16'h0};
 
      3 : RxDataLatched2 <=#Tp {RxDataLatched1[31:8],   8'h0};
    endcase
    endcase
end
end
 
 
 
 
reg WriteRxDataToFifoSync1;
reg WriteRxDataToFifoSync1;

powered by: WebSVN 2.1.0

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