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;
|