Line 41... |
Line 41... |
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
//
|
//
|
// CVS Revision History
|
// CVS Revision History
|
//
|
//
|
// $Log: not supported by cvs2svn $
|
// $Log: not supported by cvs2svn $
|
|
// Revision 1.12 2004/04/26 15:26:23 igorm
|
|
// - Bug connected to the TX_BD_NUM_Wr signal fixed (bug came in with the
|
|
// previous update of the core.
|
|
// - TxBDAddress is set to 0 after the TX is enabled in the MODER register.
|
|
// - RxBDAddress is set to r_TxBDNum<<1 after the RX is enabled in the MODER
|
|
// register. (thanks to Mathias and Torbjorn)
|
|
// - Multicast reception was fixed. Thanks to Ulrich Gries
|
|
//
|
// Revision 1.11 2004/03/17 09:32:15 igorm
|
// Revision 1.11 2004/03/17 09:32:15 igorm
|
// Multicast detection fixed. Only the LSB of the first byte is checked.
|
// Multicast detection fixed. Only the LSB of the first byte is checked.
|
//
|
//
|
// Revision 1.10 2002/11/22 01:57:06 mohor
|
// Revision 1.10 2002/11/22 01:57:06 mohor
|
// Rx Flow control fixed. CF flag added to the RX buffer descriptor. RxAbort
|
// Rx Flow control fixed. CF flag added to the RX buffer descriptor. RxAbort
|
Line 150... |
Line 158... |
reg Broadcast;
|
reg Broadcast;
|
reg Multicast;
|
reg Multicast;
|
reg [5:0] CrcHash;
|
reg [5:0] CrcHash;
|
reg CrcHashGood;
|
reg CrcHashGood;
|
reg DelayData;
|
reg DelayData;
|
reg [3:0] LatchedNibble;
|
|
reg [7:0] LatchedByte;
|
reg [7:0] LatchedByte;
|
reg [7:0] RxData_d;
|
reg [7:0] RxData_d;
|
reg RxValid_d;
|
reg RxValid_d;
|
reg RxStartFrm_d;
|
reg RxStartFrm_d;
|
reg RxEndFrm_d;
|
reg RxEndFrm_d;
|
Line 177... |
Line 184... |
wire GenerateRxValid;
|
wire GenerateRxValid;
|
wire GenerateRxStartFrm;
|
wire GenerateRxStartFrm;
|
wire GenerateRxEndFrm;
|
wire GenerateRxEndFrm;
|
wire DribbleRxEndFrm;
|
wire DribbleRxEndFrm;
|
wire [3:0] DlyCrcCnt;
|
wire [3:0] DlyCrcCnt;
|
|
wire IFGCounterEq24;
|
|
|
assign MRxDEqD = MRxD == 4'hd;
|
assign MRxDEqD = MRxD == 4'hd;
|
assign MRxDEq5 = MRxD == 4'h5;
|
assign MRxDEq5 = MRxD == 4'h5;
|
|
|
|
|
Line 202... |
Line 209... |
.HugEn(HugEn), .IFGCounterEq24(IFGCounterEq24), .ByteCntEq0(ByteCntEq0),
|
.HugEn(HugEn), .IFGCounterEq24(IFGCounterEq24), .ByteCntEq0(ByteCntEq0),
|
.ByteCntEq1(ByteCntEq1), .ByteCntEq2(ByteCntEq2), .ByteCntEq3(ByteCntEq3),
|
.ByteCntEq1(ByteCntEq1), .ByteCntEq2(ByteCntEq2), .ByteCntEq3(ByteCntEq3),
|
.ByteCntEq4(ByteCntEq4), .ByteCntEq5(ByteCntEq5), .ByteCntEq6(ByteCntEq6),
|
.ByteCntEq4(ByteCntEq4), .ByteCntEq5(ByteCntEq5), .ByteCntEq6(ByteCntEq6),
|
.ByteCntEq7(ByteCntEq7), .ByteCntGreat2(ByteCntGreat2),
|
.ByteCntEq7(ByteCntEq7), .ByteCntGreat2(ByteCntGreat2),
|
.ByteCntSmall7(ByteCntSmall7), .ByteCntMaxFrame(ByteCntMaxFrame),
|
.ByteCntSmall7(ByteCntSmall7), .ByteCntMaxFrame(ByteCntMaxFrame),
|
.ByteCnt(ByteCnt)
|
.ByteCntOut(ByteCnt)
|
);
|
);
|
|
|
// Rx Address Check
|
// Rx Address Check
|
|
|
eth_rxaddrcheck rxaddrcheck1
|
eth_rxaddrcheck rxaddrcheck1
|
Line 260... |
Line 267... |
begin
|
begin
|
if(Reset)
|
if(Reset)
|
begin
|
begin
|
RxData_d[7:0] <= #Tp 8'h0;
|
RxData_d[7:0] <= #Tp 8'h0;
|
DelayData <= #Tp 1'b0;
|
DelayData <= #Tp 1'b0;
|
LatchedNibble[3:0] <= #Tp 4'h0;
|
|
LatchedByte[7:0] <= #Tp 8'h0;
|
LatchedByte[7:0] <= #Tp 8'h0;
|
RxData[7:0] <= #Tp 8'h0;
|
RxData[7:0] <= #Tp 8'h0;
|
end
|
end
|
else
|
else
|
begin
|
begin
|
LatchedNibble[3:0] <= #Tp MRxD[3:0]; // Latched nibble
|
LatchedByte[7:0] <= #Tp {MRxD[3:0], LatchedByte[7:4]}; // Latched byte
|
LatchedByte[7:0] <= #Tp {MRxD[3:0], LatchedNibble[3:0]}; // Latched byte
|
|
DelayData <= #Tp StateData[0];
|
DelayData <= #Tp StateData[0];
|
|
|
if(GenerateRxValid)
|
if(GenerateRxValid)
|
RxData_d[7:0] <= #Tp LatchedByte[7:0] & {8{|StateData}}; // Data goes through only in data state
|
RxData_d[7:0] <= #Tp LatchedByte[7:0] & {8{|StateData}}; // Data goes through only in data state
|
else
|
else
|