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

Subversion Repositories ethmac

[/] [ethmac/] [tags/] [rel_14/] [rtl/] [verilog/] [eth_wishbone.v] - Diff between revs 150 and 159

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

Rev 150 Rev 159
Line 39... Line 39...
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
//
//
// CVS Revision History
// CVS Revision History
//
//
// $Log: not supported by cvs2svn $
// $Log: not supported by cvs2svn $
 
// Revision 1.33  2002/09/04 18:47:57  mohor
 
// Debug registers reg1, 2, 3, 4 connected. Synchronization of many signals
 
// changed (bugs fixed). Access to un-alligned buffers fixed. RxAbort signal
 
// was not used OK.
 
//
// Revision 1.32  2002/08/14 19:31:48  mohor
// Revision 1.32  2002/08/14 19:31:48  mohor
// Register TX_BD_NUM is changed so it contains value of the Tx buffer descriptors. No
// Register TX_BD_NUM is changed so it contains value of the Tx buffer descriptors. No
// need to multiply or devide any more.
// need to multiply or devide any more.
//
//
// Revision 1.31  2002/07/25 18:29:01  mohor
// Revision 1.31  2002/07/25 18:29:01  mohor
Line 147... Line 152...
// Revision 1.1  2002/01/23 10:47:59  mohor
// Revision 1.1  2002/01/23 10:47:59  mohor
// Initial version. Equals to eth_wishbonedma.v at this moment.
// Initial version. Equals to eth_wishbonedma.v at this moment.
//
//
//
//
//
//
//
 
 
 
// Build 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
 
// r_RecSmall not used
 
 
 
`include "eth_defines.v"
`include "eth_defines.v"
`include "timescale.v"
`include "timescale.v"
 
 
 
 
Line 346... Line 345...
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    [31:8]   RxDataLatched1;     // Big Endian Byte Ordering
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;
Line 418... Line 416...
 
 
wire StartRxPointerRead;
wire StartRxPointerRead;
reg RxPointerRead;
reg RxPointerRead;
 
 
 
 
always @ (posedge WB_CLK_I or posedge Reset)
always @ (posedge WB_CLK_I)
begin
 
  if(Reset)
 
    begin
 
      WB_ACK_O <=#Tp 1'b0;
 
    end
 
  else
 
    begin
    begin
      WB_ACK_O <=#Tp BDWrite & WbEn & WbEn_q | BDRead & WbEn & ~WbEn_q;
      WB_ACK_O <=#Tp BDWrite & WbEn & WbEn_q | BDRead & WbEn & ~WbEn_q;
    end
    end
end
 
 
 
assign WB_DAT_O = ram_do;
assign WB_DAT_O = ram_do;
 
 
// Generic synchronous single-port RAM interface
// Generic synchronous single-port RAM interface
eth_spram_256x32 bd_ram (
eth_spram_256x32 bd_ram (
        // Generic synchronous single-port RAM interface
 
        .clk(WB_CLK_I), .rst(Reset), .ce(ram_ce), .we(ram_we), .oe(ram_oe), .addr(ram_addr), .di(ram_di), .do(ram_do)
        .clk(WB_CLK_I), .rst(Reset), .ce(ram_ce), .we(ram_we), .oe(ram_oe), .addr(ram_addr), .di(ram_di), .do(ram_do)
);
);
 
 
assign ram_ce = 1'b1;
assign ram_ce = 1'b1;
assign ram_we = BDWrite & WbEn & WbEn_q | TxStatusWrite | RxStatusWrite;
assign ram_we = BDWrite & WbEn & WbEn_q | TxStatusWrite | RxStatusWrite;
Line 634... Line 624...
  if(~TxDone_wb & ~TxAbort_wb)
  if(~TxDone_wb & ~TxAbort_wb)
    BlockingTxStatusWrite <=#Tp 1'b0;
    BlockingTxStatusWrite <=#Tp 1'b0;
end
end
 
 
 
 
 
reg BlockingTxStatusWrite_sync1;
 
reg BlockingTxStatusWrite_sync2;
 
 
 
// Synchronizing BlockingTxStatusWrite to MTxClk
 
always @ (posedge MTxClk or posedge Reset)
 
begin
 
  if(Reset)
 
    BlockingTxStatusWrite_sync1 <=#Tp 1'b0;
 
  else
 
    BlockingTxStatusWrite_sync1 <=#Tp BlockingTxStatusWrite;
 
end
 
 
 
// Synchronizing BlockingTxStatusWrite to MTxClk
 
always @ (posedge MTxClk or posedge Reset)
 
begin
 
  if(Reset)
 
    BlockingTxStatusWrite_sync2 <=#Tp 1'b0;
 
  else
 
    BlockingTxStatusWrite_sync2 <=#Tp BlockingTxStatusWrite_sync1;
 
end
 
 
 
 
// TxBDRead state is activated only once. 
// TxBDRead state is activated only once. 
always @ (posedge WB_CLK_I or posedge Reset)
always @ (posedge WB_CLK_I or posedge Reset)
begin
begin
  if(Reset)
  if(Reset)
    BlockingTxBDRead <=#Tp 1'b0;
    BlockingTxBDRead <=#Tp 1'b0;
Line 675... Line 687...
 
 
wire TxLengthEq0;
wire TxLengthEq0;
wire TxLengthLt4;
wire TxLengthLt4;
 
 
reg BlockingIncrementTxPointer;
reg BlockingIncrementTxPointer;
reg [31:0] TxPointer;
reg [31:2] TxPointerMSB;
reg [1:0]  TxPointerLatched;
reg [1:0]  TxPointerLSB;
reg [1:0]  TxPointerLatched_rst;
reg [1:0]  TxPointerLSB_rst;
reg [31:0] RxPointer;
reg [31:2] RxPointerMSB;
reg [1:0]  RxPointerLatched;
reg [1:0]  RxPointerLSB_rst;
 
 
wire RxBurstAcc;
wire RxBurstAcc;
wire RxWordAcc;
wire RxWordAcc;
wire RxHalfAcc;
wire RxHalfAcc;
wire RxByteAcc;
wire RxByteAcc;
Line 700... Line 712...
  if(MasterWbTX & m_wb_ack_i)
  if(MasterWbTX & m_wb_ack_i)
    begin
    begin
      if(TxLengthLt4)
      if(TxLengthLt4)
        TxLength <=#Tp 16'h0;
        TxLength <=#Tp 16'h0;
      else
      else
      if(TxPointerLatched_rst==2'h0)
      if(TxPointerLSB_rst==2'h0)
        TxLength <=#Tp TxLength - 3'h4;    // Length is subtracted at the data request
        TxLength <=#Tp TxLength - 3'h4;    // Length is subtracted at the data request
      else
      else
      if(TxPointerLatched_rst==2'h1)
      if(TxPointerLSB_rst==2'h1)
        TxLength <=#Tp TxLength - 3'h3;    // Length is subtracted at the data request
        TxLength <=#Tp TxLength - 3'h3;    // Length is subtracted at the data request
      else
      else
      if(TxPointerLatched_rst==2'h2)
      if(TxPointerLSB_rst==2'h2)
        TxLength <=#Tp TxLength - 3'h2;    // Length is subtracted at the data request
        TxLength <=#Tp TxLength - 3'h2;    // Length is subtracted at the data request
      else
      else
      if(TxPointerLatched_rst==2'h3)
      if(TxPointerLSB_rst==2'h3)
        TxLength <=#Tp TxLength - 3'h1;    // Length is subtracted at the data request
        TxLength <=#Tp TxLength - 3'h1;    // Length is subtracted at the data request
    end
    end
end
end
 
 
 
 
Line 733... Line 745...
 
 
reg cyc_cleared;
reg cyc_cleared;
reg IncrTxPointer;
reg IncrTxPointer;
 
 
 
 
//Latching Tx buffer pointer from buffer descriptor;
// Latching Tx buffer pointer from buffer descriptor. Only 30 MSB bits are latched
 
// because TxPointerMSB is only used for word-aligned accesses.
always @ (posedge WB_CLK_I or posedge Reset)
always @ (posedge WB_CLK_I or posedge Reset)
begin
begin
  if(Reset)
  if(Reset)
    TxPointer <=#Tp 0;
    TxPointerMSB <=#Tp 30'h0;
  else
  else
  if(TxEn & TxEn_q & TxPointerRead)
  if(TxEn & TxEn_q & TxPointerRead)
    TxPointer <=#Tp ram_do;
    TxPointerMSB <=#Tp ram_do[31:2];
  else
  else
  if(IncrTxPointer & ~BlockingIncrementTxPointer)
  if(IncrTxPointer & ~BlockingIncrementTxPointer)
      TxPointer <=#Tp TxPointer + 3'h4; // Word access
    TxPointerMSB <=#Tp TxPointerMSB + 1'b1;     // TxPointer is word-aligned
end
end
 
 
 
 
//Latching last addresses from buffer descriptor (used as byte-half-word indicator);
// Latching 2 MSB bits of the buffer descriptor. Since word accesses are performed,
 
// valid data does not necesserly start at byte 0 (could be byte 0, 1, 2 or 3). This
 
// signals are used for proper selection of the start byte (TxData and TxByteCnt) are
 
// set by this two bits.
always @ (posedge WB_CLK_I or posedge Reset)
always @ (posedge WB_CLK_I or posedge Reset)
begin
begin
  if(Reset)
  if(Reset)
    TxPointerLatched[1:0] <=#Tp 0;
    TxPointerLSB[1:0] <=#Tp 0;
  else
  else
  if(TxEn & TxEn_q & TxPointerRead)
  if(TxEn & TxEn_q & TxPointerRead)
    TxPointerLatched[1:0] <=#Tp ram_do[1:0];
    TxPointerLSB[1:0] <=#Tp ram_do[1:0];
end
end
 
 
 
 
//Latching last addresses from buffer descriptor (used as byte-half-word indicator);
// Latching 2 MSB bits of the buffer descriptor. 
 
// After the read access, TxLength needs to be decremented for the number of the valid
 
// bytes (1 to 4 bytes are valid in the first word). After the first read all bytes are 
 
// valid so this two bits are reset to zero. 
always @ (posedge WB_CLK_I or posedge Reset)
always @ (posedge WB_CLK_I or posedge Reset)
begin
begin
  if(Reset)
  if(Reset)
    TxPointerLatched_rst[1:0] <=#Tp 0;
    TxPointerLSB_rst[1:0] <=#Tp 0;
  else
  else
  if(TxEn & TxEn_q & TxPointerRead)
  if(TxEn & TxEn_q & TxPointerRead)
    TxPointerLatched_rst[1:0] <=#Tp ram_do[1:0];
    TxPointerLSB_rst[1:0] <=#Tp ram_do[1:0];
  else
  else
  if(MasterWbTX & m_wb_ack_i)                 // After first access pointer is word alligned
  if(MasterWbTX & m_wb_ack_i)                 // After first access pointer is word alligned
    TxPointerLatched_rst[1:0] <=#Tp 0;
    TxPointerLSB_rst[1:0] <=#Tp 0;
end
end
 
 
 
 
reg  [3:0] m_wb_sel_tmp_rx;
reg  [3:0] RxByteSel;
wire MasterAccessFinished;
wire MasterAccessFinished;
 
 
 
 
always @ (posedge WB_CLK_I or posedge Reset)
always @ (posedge WB_CLK_I or posedge Reset)
begin
begin
Line 832... Line 851...
end
end
 
 
 
 
 
 
assign MasterAccessFinished = m_wb_ack_i | m_wb_err_i;
assign MasterAccessFinished = m_wb_ack_i | m_wb_err_i;
reg [3:0] state;
 
// Enabling master wishbone access to the memory for two devices TX and RX.
// Enabling master wishbone access to the memory for two devices TX and RX.
always @ (posedge WB_CLK_I or posedge Reset)
always @ (posedge WB_CLK_I or posedge Reset)
begin
begin
  if(Reset)
  if(Reset)
    begin
    begin
 state <=#Tp 4'h0;
 
      MasterWbTX <=#Tp 1'b0;
      MasterWbTX <=#Tp 1'b0;
      MasterWbRX <=#Tp 1'b0;
      MasterWbRX <=#Tp 1'b0;
      m_wb_adr_o <=#Tp 32'h0;
      m_wb_adr_o <=#Tp 32'h0;
      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;
Line 855... Line 873...
    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, cyc_cleared})  // synopsys parallel_case
      casex ({MasterWbTX, MasterWbRX, ReadTxDataFromMemory_2, WriteRxDataToMemory, MasterAccessFinished, cyc_cleared})  // synopsys parallel_case
        6'b00_01_0_x, 6'b00_11_0_x :
        6'b00_01_0_x, 6'b00_11_0_x :
          begin
          begin
 state <=#Tp 4'h1;
 
            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 {RxPointerMSB, 2'h0};
            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;
            m_wb_sel_o <=#Tp m_wb_sel_tmp_rx;
            m_wb_sel_o <=#Tp RxByteSel;
            IncrTxPointer<=#Tp 1'b0;
            IncrTxPointer<=#Tp 1'b0;
          end
          end
        6'b00_10_0_x, 6'b00_10_1_x :
        6'b00_10_0_x, 6'b00_10_1_x :
          begin
          begin
 state <=#Tp 4'h2;
 
            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[31:2], 2'h0};
            m_wb_adr_o <=#Tp {TxPointerMSB, 2'h0};
            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'b0;
            m_wb_we_o  <=#Tp 1'b0;
            m_wb_sel_o <=#Tp 4'hf;
            m_wb_sel_o <=#Tp 4'hf;
            IncrTxPointer<=#Tp 1'b1;
            IncrTxPointer<=#Tp 1'b1;
          end
          end
        6'b10_10_0_1 :
        6'b10_10_0_1 :
          begin
          begin
 state <=#Tp 4'h3;
 
            MasterWbTX <=#Tp 1'b1;  // master read and master read is needed (data read from tx buffer)
            MasterWbTX <=#Tp 1'b1;  // master read and master read is needed (data read from tx buffer)
            MasterWbRX <=#Tp 1'b0;
            MasterWbRX <=#Tp 1'b0;
            m_wb_adr_o <=#Tp {TxPointer[31:2], 2'h0};
            m_wb_adr_o <=#Tp {TxPointerMSB, 2'h0};
            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'b0;
            m_wb_we_o  <=#Tp 1'b0;
            m_wb_sel_o <=#Tp 4'hf;
            m_wb_sel_o <=#Tp 4'hf;
            cyc_cleared<=#Tp 1'b0;
            cyc_cleared<=#Tp 1'b0;
            IncrTxPointer<=#Tp 1'b1;
            IncrTxPointer<=#Tp 1'b1;
          end
          end
        6'b01_01_0_1 :
        6'b01_01_0_1 :
          begin
          begin
 state <=#Tp 4'h4;
 
            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 {RxPointerMSB, 2'h0};
            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;
            m_wb_sel_o <=#Tp m_wb_sel_tmp_rx;
            m_wb_sel_o <=#Tp RxByteSel;
            cyc_cleared<=#Tp 1'b0;
            cyc_cleared<=#Tp 1'b0;
            IncrTxPointer<=#Tp 1'b0;
            IncrTxPointer<=#Tp 1'b0;
          end
          end
        6'b10_01_0_1, 6'b10_11_0_1 :
        6'b10_01_0_1, 6'b10_11_0_1 :
          begin
          begin
 state <=#Tp 4'h5;
 
            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 {RxPointerMSB, 2'h0};
            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;
            m_wb_sel_o <=#Tp m_wb_sel_tmp_rx;
            m_wb_sel_o <=#Tp RxByteSel;
            cyc_cleared<=#Tp 1'b0;
            cyc_cleared<=#Tp 1'b0;
            IncrTxPointer<=#Tp 1'b0;
            IncrTxPointer<=#Tp 1'b0;
          end
          end
        6'b01_10_0_1, 6'b01_11_0_1 :
        6'b01_10_0_1, 6'b01_11_0_1 :
          begin
          begin
 state <=#Tp 4'h6;
 
            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[31:2], 2'h0};
            m_wb_adr_o <=#Tp {TxPointerMSB, 2'h0};
            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'b0;
            m_wb_we_o  <=#Tp 1'b0;
            m_wb_sel_o <=#Tp 4'hf;
            m_wb_sel_o <=#Tp 4'hf;
            cyc_cleared<=#Tp 1'b0;
            cyc_cleared<=#Tp 1'b0;
            IncrTxPointer<=#Tp 1'b1;
            IncrTxPointer<=#Tp 1'b1;
          end
          end
        6'b10_10_1_0, 6'b01_01_1_0, 6'b10_01_1_0, 6'b10_11_1_0, 6'b01_10_1_0, 6'b01_11_1_0 :
        6'b10_10_1_0, 6'b01_01_1_0, 6'b10_01_1_0, 6'b10_11_1_0, 6'b01_10_1_0, 6'b01_11_1_0 :
          begin
          begin
 state <=#Tp 4'h7;
 
            m_wb_cyc_o <=#Tp 1'b0;  // whatever and master read or write is needed. We need to clear m_wb_cyc_o before next access is started
            m_wb_cyc_o <=#Tp 1'b0;  // whatever and master read or write is needed. We need to clear m_wb_cyc_o before next access is started
            m_wb_stb_o <=#Tp 1'b0;
            m_wb_stb_o <=#Tp 1'b0;
            cyc_cleared<=#Tp 1'b1;
            cyc_cleared<=#Tp 1'b1;
            IncrTxPointer<=#Tp 1'b0;
            IncrTxPointer<=#Tp 1'b0;
          end
          end
        6'b10_00_1_x, 6'b01_00_1_x :
        6'b10_00_1_x, 6'b01_00_1_x :
          begin
          begin
 state <=#Tp 4'h8;
 
            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;
            IncrTxPointer<=#Tp 1'b0;
            IncrTxPointer<=#Tp 1'b0;
          end
          end
        6'b10_00_0_1, 6'b01_00_0_1 :
        6'b10_00_0_1, 6'b01_00_0_1 :
          begin
          begin
 state <=#Tp 4'h9;
 
            MasterWbTX <=#Tp 1'b0;  // Between cyc_cleared request was cleared
            MasterWbTX <=#Tp 1'b0;  // Between cyc_cleared request was cleared
            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;
            IncrTxPointer<=#Tp 1'b0;
            IncrTxPointer<=#Tp 1'b0;
Line 1268... Line 1277...
begin
begin
  if(Reset)
  if(Reset)
    TxData <=#Tp 0;
    TxData <=#Tp 0;
  else
  else
  if(TxStartFrm_sync2 & ~TxStartFrm)
  if(TxStartFrm_sync2 & ~TxStartFrm)
    case(TxPointerLatched)  // synopsys parallel_case
    case(TxPointerLSB)  // synopsys parallel_case
      2'h0 : TxData <=#Tp TxData_wb[31:24];                  // Big Endian Byte Ordering
      2'h0 : TxData <=#Tp TxData_wb[31:24];                  // Big Endian Byte Ordering
      2'h1 : TxData <=#Tp TxData_wb[23:16];                  // Big Endian Byte Ordering
      2'h1 : TxData <=#Tp TxData_wb[23:16];                  // Big Endian Byte Ordering
      2'h2 : TxData <=#Tp TxData_wb[15:08];                  // Big Endian Byte Ordering
      2'h2 : TxData <=#Tp TxData_wb[15:08];                  // Big Endian Byte Ordering
      2'h3 : TxData <=#Tp TxData_wb[07:00];                  // Big Endian Byte Ordering
      2'h3 : TxData <=#Tp TxData_wb[07:00];                  // Big Endian Byte Ordering
    endcase
    endcase
  else
  else
  if(TxStartFrm & TxUsedData & TxPointerLatched==2'h3)
  if(TxStartFrm & TxUsedData & TxPointerLSB==2'h3)
    TxData <=#Tp TxData_wb[31:24];                           // Big Endian Byte Ordering
    TxData <=#Tp TxData_wb[31:24];                           // Big Endian Byte Ordering
  else
  else
  if(TxUsedData & Flop)
  if(TxUsedData & Flop)
    begin
    begin
      case(TxByteCnt)  // synopsys parallel_case
      case(TxByteCnt)  // synopsys parallel_case
Line 1315... Line 1324...
  if(TxBufferEmpty & ReadTxDataFromFifo_wb)
  if(TxBufferEmpty & ReadTxDataFromFifo_wb)
    TxUnderRun_wb <=#Tp 1'b1;
    TxUnderRun_wb <=#Tp 1'b1;
end
end
 
 
 
 
 
reg TxUnderRun_sync1;
 
 
// Tx under run
// Tx under run
always @ (posedge MTxClk or posedge Reset)
always @ (posedge MTxClk or posedge Reset)
begin
begin
  if(Reset)
  if(Reset)
    TxUnderRun <=#Tp 1'b0;
    TxUnderRun_sync1 <=#Tp 1'b0;
  else
  else
  if(TxUnderRun_wb)
  if(TxUnderRun_wb)
    TxUnderRun <=#Tp 1'b1;
    TxUnderRun_sync1 <=#Tp 1'b1;
 
  else
 
  if(BlockingTxStatusWrite_sync2)
 
    TxUnderRun_sync1 <=#Tp 1'b0;
 
end
 
 
 
// Tx under run
 
always @ (posedge MTxClk or posedge Reset)
 
begin
 
  if(Reset)
 
    TxUnderRun <=#Tp 1'b0;
  else
  else
  if(BlockingTxStatusWrite)
  if(BlockingTxStatusWrite_sync2)
    TxUnderRun <=#Tp 1'b0;
    TxUnderRun <=#Tp 1'b0;
 
  else
 
  if(TxUnderRun_sync1)
 
    TxUnderRun <=#Tp 1'b1;
end
end
 
 
 
 
// Tx Byte counter
// Tx Byte counter
always @ (posedge MTxClk or posedge Reset)
always @ (posedge MTxClk or posedge Reset)
Line 1339... Line 1363...
  else
  else
  if(TxAbort_q | TxRetry_q)
  if(TxAbort_q | TxRetry_q)
    TxByteCnt <=#Tp 2'h0;
    TxByteCnt <=#Tp 2'h0;
  else
  else
  if(TxStartFrm & ~TxUsedData)
  if(TxStartFrm & ~TxUsedData)
    case(TxPointerLatched)  // synopsys parallel_case
    case(TxPointerLSB)  // synopsys parallel_case
      2'h0 : TxByteCnt <=#Tp 2'h1;
      2'h0 : TxByteCnt <=#Tp 2'h1;
      2'h1 : TxByteCnt <=#Tp 2'h2;
      2'h1 : TxByteCnt <=#Tp 2'h2;
      2'h2 : TxByteCnt <=#Tp 2'h3;
      2'h2 : TxByteCnt <=#Tp 2'h3;
      2'h3 : TxByteCnt <=#Tp 2'h0;
      2'h3 : TxByteCnt <=#Tp 2'h0;
    endcase
    endcase
  else
  else
  if(TxUsedData & Flop)
  if(TxUsedData & Flop)
    TxByteCnt <=#Tp TxByteCnt + 1'b1;
    TxByteCnt <=#Tp TxByteCnt + 1'b1;
end
end
 
 
/*
 
// Start: Generation of the ReadTxDataFromFifo_tck signal and synchronization to the WB_CLK_I
 
reg ReadTxDataFromFifo_sync1;
 
reg ReadTxDataFromFifo_sync2;
 
reg ReadTxDataFromFifo_sync3;
 
reg ReadTxDataFromFifo_syncb1;
 
reg ReadTxDataFromFifo_syncb2;
 
 
 
 
 
always @ (posedge MTxClk or posedge Reset)
 
begin
 
  if(Reset)
 
    ReadTxDataFromFifo_tck <=#Tp 1'b0;
 
  else
 
  if(TxStartFrm_sync2 & ~TxStartFrm | TxUsedData & Flop & TxByteCnt == 2'h3 & ~LastWord | TxStartFrm & TxUsedData & Flop & TxByteCnt == 2'h0)
 
     ReadTxDataFromFifo_tck <=#Tp 1'b1;
 
  else
 
  if(ReadTxDataFromFifo_syncb2)
 
    ReadTxDataFromFifo_tck <=#Tp 1'b0;
 
end
 
 
 
// Synchronizing TxStartFrm_wb to MTxClk
 
always @ (posedge WB_CLK_I or posedge Reset)
 
begin
 
  if(Reset)
 
    ReadTxDataFromFifo_sync1 <=#Tp 1'b0;
 
  else
 
    ReadTxDataFromFifo_sync1 <=#Tp ReadTxDataFromFifo_tck;
 
end
 
 
 
always @ (posedge WB_CLK_I or posedge Reset)
 
begin
 
  if(Reset)
 
    ReadTxDataFromFifo_sync2 <=#Tp 1'b0;
 
  else
 
    ReadTxDataFromFifo_sync2 <=#Tp ReadTxDataFromFifo_sync1;
 
end
 
 
 
always @ (posedge MTxClk or posedge Reset)
 
begin
 
  if(Reset)
 
    ReadTxDataFromFifo_syncb1 <=#Tp 1'b0;
 
  else
 
    ReadTxDataFromFifo_syncb1 <=#Tp ReadTxDataFromFifo_sync2;
 
end
 
 
 
always @ (posedge MTxClk or posedge Reset)
 
begin
 
  if(Reset)
 
    ReadTxDataFromFifo_syncb2 <=#Tp 1'b0;
 
  else
 
    ReadTxDataFromFifo_syncb2 <=#Tp ReadTxDataFromFifo_syncb1;
 
end
 
 
 
always @ (posedge WB_CLK_I or posedge Reset)
 
begin
 
  if(Reset)
 
    ReadTxDataFromFifo_sync3 <=#Tp 1'b0;
 
  else
 
    ReadTxDataFromFifo_sync3 <=#Tp ReadTxDataFromFifo_sync2;
 
end
 
 
 
assign ReadTxDataFromFifo_wb = ReadTxDataFromFifo_sync2 & ~ReadTxDataFromFifo_sync3;
 
// End: Generation of the ReadTxDataFromFifo_tck signal and synchronization to the WB_CLK_I
 
*/
 
 
 
// Start: Generation of the ReadTxDataFromFifo_tck signal and synchronization to the WB_CLK_I
// Start: Generation of the ReadTxDataFromFifo_tck signal and synchronization to the WB_CLK_I
reg ReadTxDataFromFifo_sync1;
reg ReadTxDataFromFifo_sync1;
reg ReadTxDataFromFifo_sync2;
reg ReadTxDataFromFifo_sync2;
reg ReadTxDataFromFifo_sync3;
reg ReadTxDataFromFifo_sync3;
Line 1620... Line 1579...
 
 
//Latching Rx buffer pointer from buffer descriptor;
//Latching Rx buffer pointer from buffer descriptor;
always @ (posedge WB_CLK_I or posedge Reset)
always @ (posedge WB_CLK_I or posedge Reset)
begin
begin
  if(Reset)
  if(Reset)
    RxPointer <=#Tp 32'h0;
    RxPointerMSB <=#Tp 30'h0;
  else
  else
  if(RxEn & RxEn_q & RxPointerRead)
  if(RxEn & RxEn_q & RxPointerRead)
    RxPointer <=#Tp {ram_do[31:2], 2'h0};
    RxPointerMSB <=#Tp ram_do[31:2];
  else
  else
  if(MasterWbRX & m_wb_ack_i)
  if(MasterWbRX & m_wb_ack_i)
      RxPointer <=#Tp RxPointer + 3'h4; // Word access  (always word access. m_wb_sel_o are used for selecting bytes)
      RxPointerMSB <=#Tp RxPointerMSB + 1; // Word access  (always word access. m_wb_sel_o are used for selecting bytes)
end
end
 
 
 
 
//Latching last addresses from buffer descriptor (used as byte-half-word indicator);
//Latching last addresses from buffer descriptor (used as byte-half-word indicator);
always @ (posedge WB_CLK_I or posedge Reset)
always @ (posedge WB_CLK_I or posedge Reset)
begin
begin
  if(Reset)
  if(Reset)
    RxPointerLatched[1:0] <=#Tp 0;
    RxPointerLSB_rst[1:0] <=#Tp 0;
  else
  else
  if(MasterWbRX & m_wb_ack_i)                 // After first write all m_wb_sel_tmp_rx are active
  if(MasterWbRX & m_wb_ack_i)                 // After first write all RxByteSel are active
    RxPointerLatched[1:0] <=#Tp 0;
    RxPointerLSB_rst[1:0] <=#Tp 0;
  else
  else
  if(RxEn & RxEn_q & RxPointerRead)
  if(RxEn & RxEn_q & RxPointerRead)
    RxPointerLatched[1:0] <=#Tp ram_do[1:0];
    RxPointerLSB_rst[1:0] <=#Tp ram_do[1:0];
end
end
 
 
 
 
always @ (RxPointerLatched)
always @ (RxPointerLSB_rst)
begin
begin
  case(RxPointerLatched[1:0])  // synopsys parallel_case
  case(RxPointerLSB_rst[1:0])  // synopsys parallel_case
    2'h0 : m_wb_sel_tmp_rx[3:0] = 4'hf;
    2'h0 : RxByteSel[3:0] = 4'hf;
    2'h1 : m_wb_sel_tmp_rx[3:0] = 4'h7;
    2'h1 : RxByteSel[3:0] = 4'h7;
    2'h2 : m_wb_sel_tmp_rx[3:0] = 4'h3;
    2'h2 : RxByteSel[3:0] = 4'h3;
    2'h3 : m_wb_sel_tmp_rx[3:0] = 4'h1;
    2'h3 : RxByteSel[3:0] = 4'h1;
  endcase
  endcase
end
end
 
 
 
 
always @ (posedge WB_CLK_I or posedge Reset)
always @ (posedge WB_CLK_I or posedge Reset)
Line 1714... Line 1673...
  else
  else
  if(RxValid & RxBDReady & RxEndFrm & ~(&RxByteCnt) & RxEnableWindow)
  if(RxValid & RxBDReady & RxEndFrm & ~(&RxByteCnt) & RxEnableWindow)
    LastByteIn <=#Tp 1'b1;
    LastByteIn <=#Tp 1'b1;
end
end
 
 
reg ShiftEnded_tck;
reg ShiftEnded_rck;
reg ShiftEndedSync1;
reg ShiftEndedSync1;
reg ShiftEndedSync2;
reg ShiftEndedSync2;
reg ShiftEndedSync3;
reg ShiftEndedSync3;
reg ShiftEndedSync_c1;
reg ShiftEndedSync_c1;
reg ShiftEndedSync_c2;
reg ShiftEndedSync_c2;
 
 
wire StartShiftWillEnd;
wire StartShiftWillEnd;
//assign StartShiftWillEnd = LastByteIn & (&RxByteCnt) | RxValid & RxEndFrm & (&RxByteCnt) & RxEnableWindow;
 
assign StartShiftWillEnd = LastByteIn  | RxValid & RxEndFrm & (&RxByteCnt) & RxEnableWindow;
assign StartShiftWillEnd = LastByteIn  | RxValid & RxEndFrm & (&RxByteCnt) & RxEnableWindow;
 
 
// Indicating that data reception will end
// Indicating that data reception will end
always @ (posedge MRxClk or posedge Reset)
always @ (posedge MRxClk or posedge Reset)
begin
begin
  if(Reset)
  if(Reset)
    ShiftWillEnd <=#Tp 1'b0;
    ShiftWillEnd <=#Tp 1'b0;
  else
  else
  if(ShiftEnded_tck | RxAbort)
  if(ShiftEnded_rck | RxAbort)
    ShiftWillEnd <=#Tp 1'b0;
    ShiftWillEnd <=#Tp 1'b0;
  else
  else
  if(StartShiftWillEnd)
  if(StartShiftWillEnd)
    ShiftWillEnd <=#Tp 1'b1;
    ShiftWillEnd <=#Tp 1'b1;
end
end
Line 1746... Line 1704...
always @ (posedge MRxClk or posedge Reset)
always @ (posedge MRxClk or posedge Reset)
begin
begin
  if(Reset)
  if(Reset)
    RxByteCnt <=#Tp 2'h0;
    RxByteCnt <=#Tp 2'h0;
  else
  else
  if(ShiftEnded_tck | RxAbort)
  if(ShiftEnded_rck | RxAbort)
    RxByteCnt <=#Tp 2'h0;
    RxByteCnt <=#Tp 2'h0;
  else
  else
  if(RxValid & RxStartFrm & RxBDReady)
  if(RxValid & RxStartFrm & RxBDReady)
    case(RxPointerLatched)  // synopsys parallel_case
    case(RxPointerLSB_rst)  // synopsys parallel_case
      2'h0 : RxByteCnt <=#Tp 2'h1;
      2'h0 : RxByteCnt <=#Tp 2'h1;
      2'h1 : RxByteCnt <=#Tp 2'h2;
      2'h1 : RxByteCnt <=#Tp 2'h2;
      2'h2 : RxByteCnt <=#Tp 2'h3;
      2'h2 : RxByteCnt <=#Tp 2'h3;
      2'h3 : RxByteCnt <=#Tp 2'h0;
      2'h3 : RxByteCnt <=#Tp 2'h0;
    endcase
    endcase
Line 1769... Line 1727...
begin
begin
  if(Reset)
  if(Reset)
    RxValidBytes <=#Tp 2'h1;
    RxValidBytes <=#Tp 2'h1;
  else
  else
  if(RxValid & RxStartFrm)
  if(RxValid & RxStartFrm)
    case(RxPointerLatched)  // synopsys parallel_case
    case(RxPointerLSB_rst)  // synopsys parallel_case
      2'h0 : RxValidBytes <=#Tp 2'h1;
      2'h0 : RxValidBytes <=#Tp 2'h1;
      2'h1 : RxValidBytes <=#Tp 2'h2;
      2'h1 : RxValidBytes <=#Tp 2'h2;
      2'h2 : RxValidBytes <=#Tp 2'h3;
      2'h2 : RxValidBytes <=#Tp 2'h3;
      2'h3 : RxValidBytes <=#Tp 2'h0;
      2'h3 : RxValidBytes <=#Tp 2'h0;
    endcase
    endcase
Line 1789... Line 1747...
    RxDataLatched1       <=#Tp 24'h0;
    RxDataLatched1       <=#Tp 24'h0;
  else
  else
  if(RxValid & RxBDReady & ~LastByteIn)
  if(RxValid & RxBDReady & ~LastByteIn)
    if(RxStartFrm)
    if(RxStartFrm)
    begin
    begin
      case(RxPointerLatched)     // synopsys parallel_case
      case(RxPointerLSB_rst)     // synopsys parallel_case
        2'h0:        RxDataLatched1[31:24] <=#Tp RxData;            // Big Endian Byte Ordering
        2'h0:        RxDataLatched1[31:24] <=#Tp RxData;            // Big Endian Byte Ordering
        2'h1:        RxDataLatched1[23:16] <=#Tp RxData;
        2'h1:        RxDataLatched1[23:16] <=#Tp RxData;
        2'h2:        RxDataLatched1[15:8]  <=#Tp RxData;
        2'h2:        RxDataLatched1[15:8]  <=#Tp RxData;
        2'h3:        RxDataLatched1        <=#Tp RxDataLatched1;
        2'h3:        RxDataLatched1        <=#Tp RxDataLatched1;
      endcase
      endcase
Line 1820... Line 1778...
  if(SetWriteRxDataToFifo & ~ShiftWillEnd)
  if(SetWriteRxDataToFifo & ~ShiftWillEnd)
    RxDataLatched2 <=#Tp {RxDataLatched1[31:8], RxData};              // Big Endian Byte Ordering
    RxDataLatched2 <=#Tp {RxDataLatched1[31:8], RxData};              // Big Endian Byte Ordering
  else
  else
  if(SetWriteRxDataToFifo & ShiftWillEnd)
  if(SetWriteRxDataToFifo & ShiftWillEnd)
    case(RxValidBytes)  // synopsys parallel_case
    case(RxValidBytes)  // synopsys parallel_case
//      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};
 
      0 : RxDataLatched2 <=#Tp {RxDataLatched1[31:8],  RxData};       // Big Endian Byte Ordering
      0 : RxDataLatched2 <=#Tp {RxDataLatched1[31:8],  RxData};       // Big Endian Byte Ordering
      1 : RxDataLatched2 <=#Tp {RxDataLatched1[31:24], 24'h0};
      1 : RxDataLatched2 <=#Tp {RxDataLatched1[31:24], 24'h0};
      2 : RxDataLatched2 <=#Tp {RxDataLatched1[31:16], 16'h0};
      2 : RxDataLatched2 <=#Tp {RxDataLatched1[31:16], 16'h0};
      3 : RxDataLatched2 <=#Tp {RxDataLatched1[31:8],   8'h0};
      3 : RxDataLatched2 <=#Tp {RxDataLatched1[31:8],   8'h0};
    endcase
    endcase
Line 1838... Line 1792...
reg WriteRxDataToFifoSync2;
reg WriteRxDataToFifoSync2;
reg WriteRxDataToFifoSync3;
reg WriteRxDataToFifoSync3;
 
 
 
 
// Indicating start of the reception process
// Indicating start of the reception process
//assign SetWriteRxDataToFifo = (RxValid & RxBDReady & ~RxStartFrm & RxEnableWindow & (&RxByteCnt)) | (ShiftWillEnd & LastByteIn & (&RxByteCnt));
assign SetWriteRxDataToFifo = (RxValid & RxBDReady & ~RxStartFrm & RxEnableWindow & (&RxByteCnt)) | (RxValid & RxBDReady & RxStartFrm & (&RxPointerLSB_rst)) | (ShiftWillEnd & LastByteIn & (&RxByteCnt));
assign SetWriteRxDataToFifo = (RxValid & RxBDReady & ~RxStartFrm & RxEnableWindow & (&RxByteCnt)) | (RxValid & RxBDReady & RxStartFrm & (&RxPointerLatched)) | (ShiftWillEnd & LastByteIn & (&RxByteCnt));
 
/*
 
always @ (posedge MRxClk or posedge Reset)
 
begin
 
  if(Reset)
 
    WriteRxDataToFifo <=#Tp 1'b0;
 
  else
 
  if(SetWriteRxDataToFifo & ~RxAbort)
 
    WriteRxDataToFifo <=#Tp 1'b1;
 
  else
 
  if(WriteRxDataToFifoSync1 | RxAbort)
 
    WriteRxDataToFifo <=#Tp 1'b0;
 
end
 
 
 
 
 
 
 
always @ (posedge WB_CLK_I or posedge Reset)
 
begin
 
  if(Reset)
 
    WriteRxDataToFifoSync1 <=#Tp 1'b0;
 
  else
 
  if(WriteRxDataToFifo)
 
    WriteRxDataToFifoSync1 <=#Tp 1'b1;
 
  else
 
    WriteRxDataToFifoSync1 <=#Tp 1'b0;
 
end
 
 
 
always @ (posedge WB_CLK_I or posedge Reset)
 
begin
 
  if(Reset)
 
    WriteRxDataToFifoSync2 <=#Tp 1'b0;
 
  else
 
    WriteRxDataToFifoSync2 <=#Tp WriteRxDataToFifoSync1;
 
end
 
 
 
wire WriteRxDataToFifo_wb;
 
assign WriteRxDataToFifo_wb = WriteRxDataToFifoSync1 & ~WriteRxDataToFifoSync2;
 
*/
 
 
 
always @ (posedge MRxClk or posedge Reset)
always @ (posedge MRxClk or posedge Reset)
begin
begin
  if(Reset)
  if(Reset)
    WriteRxDataToFifo <=#Tp 1'b0;
    WriteRxDataToFifo <=#Tp 1'b0;
Line 1992... Line 1908...
 
 
// Generation of the end-of-frame signal
// Generation of the end-of-frame signal
always @ (posedge MRxClk or posedge Reset)
always @ (posedge MRxClk or posedge Reset)
begin
begin
  if(Reset)
  if(Reset)
    ShiftEnded_tck <=#Tp 1'b0;
    ShiftEnded_rck <=#Tp 1'b0;
  else
  else
  if(~RxAbort & SetWriteRxDataToFifo & StartShiftWillEnd)
  if(~RxAbort & SetWriteRxDataToFifo & StartShiftWillEnd)
    ShiftEnded_tck <=#Tp 1'b1;
    ShiftEnded_rck <=#Tp 1'b1;
  else
  else
  if(RxAbort | ShiftEndedSync_c1 & ShiftEndedSync_c2)
  if(RxAbort | ShiftEndedSync_c1 & ShiftEndedSync_c2)
    ShiftEnded_tck <=#Tp 1'b0;
    ShiftEnded_rck <=#Tp 1'b0;
end
end
 
 
always @ (posedge WB_CLK_I or posedge Reset)
always @ (posedge WB_CLK_I or posedge Reset)
begin
begin
  if(Reset)
  if(Reset)
    ShiftEndedSync1 <=#Tp 1'b0;
    ShiftEndedSync1 <=#Tp 1'b0;
  else
  else
    ShiftEndedSync1 <=#Tp ShiftEnded_tck;
    ShiftEndedSync1 <=#Tp ShiftEnded_rck;
end
end
 
 
always @ (posedge WB_CLK_I or posedge Reset)
always @ (posedge WB_CLK_I or posedge Reset)
begin
begin
  if(Reset)
  if(Reset)
Line 2134... Line 2050...
  else
  else
  if(RxAbort)
  if(RxAbort)
    RxAbortLatched <=#Tp 1'b1;
    RxAbortLatched <=#Tp 1'b1;
end
end
 
 
/*
 
reg LoadStatusBlocked;
 
 
 
always @ (posedge MRxClk or posedge Reset)
 
begin
 
  if(Reset)
 
    LoadStatusBlocked <=#Tp 1'b0;
 
  else
 
  if(LoadRxStatus & ~RxAbortLatched)
 
    LoadStatusBlocked <=#Tp 1'b1;
 
  else
 
  if(RxStatusWrite_rck | RxStartFrm)
 
    LoadStatusBlocked <=#Tp 1'b0;
 
end
 
*/
 
// LatchedRxLength[15:0]
 
always @ (posedge MRxClk or posedge Reset)
always @ (posedge MRxClk or posedge Reset)
begin
begin
  if(Reset)
  if(Reset)
    LatchedRxLength[15:0] <=#Tp 16'h0;
    LatchedRxLength[15:0] <=#Tp 16'h0;
  else
  else
//  if(LoadRxStatus & ~RxAbortLatched & ~LoadStatusBlocked)
 
  if(LoadRxStatus)
  if(LoadRxStatus)
    LatchedRxLength[15:0] <=#Tp RxLength[15:0];
    LatchedRxLength[15:0] <=#Tp RxLength[15:0];
end
end
 
 
 
 
Line 2168... Line 2068...
always @ (posedge MRxClk or posedge Reset)
always @ (posedge MRxClk or posedge Reset)
begin
begin
  if(Reset)
  if(Reset)
    RxStatusInLatched <=#Tp 'h0;
    RxStatusInLatched <=#Tp 'h0;
  else
  else
//  if(LoadRxStatus & ~RxAbortLatched & ~LoadStatusBlocked)
 
  if(LoadRxStatus)
  if(LoadRxStatus)
    RxStatusInLatched <=#Tp RxStatusIn;
    RxStatusInLatched <=#Tp RxStatusIn;
end
end
 
 
 
 
Line 2287... Line 2186...
// bit 3  od rx je ReceivedPacketTooBig
// bit 3  od rx je ReceivedPacketTooBig
// bit 2  od rx je ShortFrame
// bit 2  od rx je ShortFrame
// bit 1  od rx je LatchedCrcError
// bit 1  od rx je LatchedCrcError
// bit 0  od rx je RxLateCollision
// bit 0  od rx je RxLateCollision
 
 
assign reg1 = RxPointer[31:0];                  /* 0x58 */
assign reg1 = {RxPointerMSB[31:2], 2'h0};                  /* 0x58 */
 
 
assign reg2 = {                                 /* 0x5c */
assign reg2 = {                                 /* 0x5c */
  RxStatusWriteLatched,         // 31
  RxStatusWriteLatched,         // 31
  RxStatusWrite_rck,            // 30
  RxStatusWrite_rck,            // 30
  RxEn_needed,                  // 29
  RxEn_needed,                  // 29
Line 2303... Line 2202...
  ShiftEnded,                   // 23
  ShiftEnded,                   // 23
  RxPointerRead,                // 23
  RxPointerRead,                // 23
  LastByteIn,                   // 21
  LastByteIn,                   // 21
  ShiftWillEnd,                 // 20
  ShiftWillEnd,                 // 20
  2'h0, RxByteCnt[1:0],         // 19:16
  2'h0, RxByteCnt[1:0],         // 19:16
  2'h0, RxPointerLatched[1:0],  // 15:12
  2'h0, RxPointerLSB_rst[1:0],      // 15:12
  RxBDAddress[7:0],             // 11:4
  RxBDAddress[7:0],             // 11:4
  state[3:0]                    // 3:0
  4'h0                          // 3:0
};
};
 
 
assign reg3 = {                                 /* 0x60 */
assign reg3 = {                                 /* 0x60 */
  ShiftEndedSync_c2,            // 31
  ShiftEndedSync_c2,            // 31
  RxAbortSyncb1,                // 30
  RxAbortSyncb1,                // 30
Line 2324... Line 2223...
  RxValid,                      // 23
  RxValid,                      // 23
  RxEndFrm,                     // 22
  RxEndFrm,                     // 22
  RxEnableWindow,               // 21
  RxEnableWindow,               // 21
  StartShiftWillEnd,            // 20
  StartShiftWillEnd,            // 20
  ShiftWillEnd,                 // 19
  ShiftWillEnd,                 // 19
  ShiftEnded_tck,               // 18
  ShiftEnded_rck,               // 18
  SetWriteRxDataToFifo,         // 17
  SetWriteRxDataToFifo,         // 17
  WriteRxDataToFifo,            // 16
  WriteRxDataToFifo,            // 16
  WriteRxDataToFifoSync3,       // 15
  WriteRxDataToFifoSync3,       // 15
  WriteRxDataToFifoSync2,       // 14
  WriteRxDataToFifoSync2,       // 14
  WriteRxDataToFifoSync1,       // 13
  WriteRxDataToFifoSync1,       // 13

powered by: WebSVN 2.1.0

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