Line 39... |
Line 39... |
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
//
|
//
|
// CVS Revision History
|
// CVS Revision History
|
//
|
//
|
// $Log: not supported by cvs2svn $
|
// $Log: not supported by cvs2svn $
|
|
// Revision 1.2 2001/09/24 15:02:56 mohor
|
|
// Defines changed (All precede with ETH_). Small changes because some
|
|
// tools generate warnings when two operands are together. Synchronization
|
|
// between two clocks domains in eth_wishbonedma.v is changed (due to ASIC
|
|
// demands).
|
|
//
|
// Revision 1.1 2001/08/06 14:44:29 mohor
|
// Revision 1.1 2001/08/06 14:44:29 mohor
|
// A define FPGA added to select between Artisan RAM (for ASIC) and Block Ram (For Virtex).
|
// A define FPGA added to select between Artisan RAM (for ASIC) and Block Ram (For Virtex).
|
// Include files fixed to contain no path.
|
// Include files fixed to contain no path.
|
// File names and module names changed ta have a eth_ prologue in the name.
|
// File names and module names changed ta have a eth_ prologue in the name.
|
// File eth_timescale.v is used to define timescale
|
// File eth_timescale.v is used to define timescale
|
Line 68... |
Line 74... |
|
|
|
|
module eth_registers( DataIn, Address, Rw, Cs, Clk, Reset, DataOut, r_DmaEn,
|
module eth_registers( DataIn, Address, Rw, Cs, Clk, Reset, DataOut, r_DmaEn,
|
r_RecSmall, r_Pad, r_HugEn, r_CrcEn, r_DlyCrcEn,
|
r_RecSmall, r_Pad, r_HugEn, r_CrcEn, r_DlyCrcEn,
|
r_Rst, r_FullD, r_ExDfrEn, r_NoBckof, r_LoopBck, r_IFG,
|
r_Rst, r_FullD, r_ExDfrEn, r_NoBckof, r_LoopBck, r_IFG,
|
r_Pro, r_Iam, r_Bro, r_NoPre, r_TxEn, r_RxEn, Busy_IRQ, RxF_IRQ,
|
r_Pro, r_Iam, r_Bro, r_NoPre, r_TxEn, r_RxEn,
|
RxB_IRQ, TxE_IRQ, TxB_IRQ, Busy_MASK, RxF_MASK, RxB_MASK, TxE_MASK,
|
TxB_IRQ, TxE_IRQ, RxB_IRQ, RxF_IRQ, Busy_IRQ,
|
TxB_MASK, r_IPGT, r_IPGR1, r_IPGR2, r_MinFL, r_MaxFL, r_MaxRet,
|
r_IPGT, r_IPGR1, r_IPGR2, r_MinFL, r_MaxFL, r_MaxRet,
|
r_CollValid, r_TxFlow, r_RxFlow, r_PassAll,
|
r_CollValid, r_TxFlow, r_RxFlow, r_PassAll,
|
r_MiiMRst, r_MiiNoPre, r_ClkDiv, r_WCtrlData, r_RStat, r_ScanStat,
|
r_MiiMRst, r_MiiNoPre, r_ClkDiv, r_WCtrlData, r_RStat, r_ScanStat,
|
r_RGAD, r_FIAD, r_CtrlData, NValid_stat, Busy_stat,
|
r_RGAD, r_FIAD, r_CtrlData, NValid_stat, Busy_stat,
|
LinkFail, r_MAC, WCtrlDataStart, RStatStart,
|
LinkFail, r_MAC, WCtrlDataStart, RStatStart,
|
UpdateMIIRX_DATAReg, Prsd, r_RxBDAddress, RX_BD_ADR_Wr
|
UpdateMIIRX_DATAReg, Prsd, r_RxBDAddress, RX_BD_ADR_Wr, int_o
|
);
|
);
|
|
|
parameter Tp = 1;
|
parameter Tp = 1;
|
|
|
input [31:0] DataIn;
|
input [31:0] DataIn;
|
Line 116... |
Line 122... |
output r_Bro;
|
output r_Bro;
|
output r_NoPre;
|
output r_NoPre;
|
output r_TxEn;
|
output r_TxEn;
|
output r_RxEn;
|
output r_RxEn;
|
|
|
output Busy_IRQ;
|
input TxB_IRQ;
|
output RxF_IRQ;
|
input TxE_IRQ;
|
output RxB_IRQ;
|
input RxB_IRQ;
|
output TxE_IRQ;
|
input RxF_IRQ;
|
output TxB_IRQ;
|
input Busy_IRQ;
|
|
|
output Busy_MASK;
|
|
output RxF_MASK;
|
|
output RxB_MASK;
|
|
output TxE_MASK;
|
|
output TxB_MASK;
|
|
|
|
output [6:0] r_IPGT;
|
output [6:0] r_IPGT;
|
|
|
output [6:0] r_IPGR1;
|
output [6:0] r_IPGR1;
|
|
|
Line 163... |
Line 163... |
input NValid_stat;
|
input NValid_stat;
|
input Busy_stat;
|
input Busy_stat;
|
input LinkFail;
|
input LinkFail;
|
|
|
output [47:0] r_MAC;
|
output [47:0] r_MAC;
|
|
|
output [7:0] r_RxBDAddress;
|
output [7:0] r_RxBDAddress;
|
|
|
output RX_BD_ADR_Wr;
|
output RX_BD_ADR_Wr;
|
|
output int_o;
|
|
|
|
reg irq_txb;
|
|
reg irq_txe;
|
|
reg irq_rxb;
|
|
reg irq_rxf;
|
|
reg irq_busy;
|
|
|
wire Write = Cs & Rw;
|
wire Write = Cs & Rw;
|
wire Read = Cs & ~Rw;
|
wire Read = Cs & ~Rw;
|
|
|
wire MODER_Wr = (Address == `ETH_MODER_ADR) & Write;
|
wire MODER_Wr = (Address == `ETH_MODER_ADR) & Write;
|
Line 215... |
Line 218... |
wire [31:0] MAC_ADDR0Out;
|
wire [31:0] MAC_ADDR0Out;
|
wire [31:0] MAC_ADDR1Out;
|
wire [31:0] MAC_ADDR1Out;
|
wire [31:0] RX_BD_ADROut;
|
wire [31:0] RX_BD_ADROut;
|
|
|
eth_register #(32) MODER (.DataIn(DataIn), .DataOut(MODEROut), .Write(MODER_Wr), .Clk(Clk), .Reset(Reset), .Default(`ETH_MODER_DEF));
|
eth_register #(32) MODER (.DataIn(DataIn), .DataOut(MODEROut), .Write(MODER_Wr), .Clk(Clk), .Reset(Reset), .Default(`ETH_MODER_DEF));
|
eth_register #(32) INT_SOURCE (.DataIn(DataIn), .DataOut(INT_SOURCEOut), .Write(INT_SOURCE_Wr), .Clk(Clk), .Reset(Reset), .Default(`ETH_INT_SOURCE_DEF));
|
|
eth_register #(32) INT_MASK (.DataIn(DataIn), .DataOut(INT_MASKOut), .Write(INT_MASK_Wr), .Clk(Clk), .Reset(Reset), .Default(`ETH_INT_MASK_DEF));
|
eth_register #(32) INT_MASK (.DataIn(DataIn), .DataOut(INT_MASKOut), .Write(INT_MASK_Wr), .Clk(Clk), .Reset(Reset), .Default(`ETH_INT_MASK_DEF));
|
eth_register #(32) IPGT (.DataIn(DataIn), .DataOut(IPGTOut), .Write(IPGT_Wr), .Clk(Clk), .Reset(Reset), .Default(`ETH_IPGT_DEF));
|
eth_register #(32) IPGT (.DataIn(DataIn), .DataOut(IPGTOut), .Write(IPGT_Wr), .Clk(Clk), .Reset(Reset), .Default(`ETH_IPGT_DEF));
|
eth_register #(32) IPGR1 (.DataIn(DataIn), .DataOut(IPGR1Out), .Write(IPGR1_Wr), .Clk(Clk), .Reset(Reset), .Default(`ETH_IPGR1_DEF));
|
eth_register #(32) IPGR1 (.DataIn(DataIn), .DataOut(IPGR1Out), .Write(IPGR1_Wr), .Clk(Clk), .Reset(Reset), .Default(`ETH_IPGR1_DEF));
|
eth_register #(32) IPGR2 (.DataIn(DataIn), .DataOut(IPGR2Out), .Write(IPGR2_Wr), .Clk(Clk), .Reset(Reset), .Default(`ETH_IPGR2_DEF));
|
eth_register #(32) IPGR2 (.DataIn(DataIn), .DataOut(IPGR2Out), .Write(IPGR2_Wr), .Clk(Clk), .Reset(Reset), .Default(`ETH_IPGR2_DEF));
|
eth_register #(32) PACKETLEN (.DataIn(DataIn), .DataOut(PACKETLENOut), .Write(PACKETLEN_Wr), .Clk(Clk), .Reset(Reset), .Default(`ETH_PACKETLEN_DEF));
|
eth_register #(32) PACKETLEN (.DataIn(DataIn), .DataOut(PACKETLENOut), .Write(PACKETLEN_Wr), .Clk(Clk), .Reset(Reset), .Default(`ETH_PACKETLEN_DEF));
|
Line 330... |
Line 332... |
assign r_Bro = MODEROut[3];
|
assign r_Bro = MODEROut[3];
|
assign r_NoPre = MODEROut[2];
|
assign r_NoPre = MODEROut[2];
|
assign r_TxEn = MODEROut[1];
|
assign r_TxEn = MODEROut[1];
|
assign r_RxEn = MODEROut[0];
|
assign r_RxEn = MODEROut[0];
|
|
|
assign Busy_IRQ = INT_SOURCEOut[4];
|
|
assign RxF_IRQ = INT_SOURCEOut[3];
|
|
assign RxB_IRQ = INT_SOURCEOut[2];
|
|
assign TxE_IRQ = INT_SOURCEOut[1];
|
|
assign TxB_IRQ = INT_SOURCEOut[0];
|
|
|
|
assign Busy_MASK = INT_MASKOut[4];
|
|
assign RxF_MASK = INT_MASKOut[3];
|
|
assign RxB_MASK = INT_MASKOut[2];
|
|
assign TxE_MASK = INT_MASKOut[1];
|
|
assign TxB_MASK = INT_MASKOut[0];
|
|
|
|
assign r_IPGT[6:0] = IPGTOut[6:0];
|
assign r_IPGT[6:0] = IPGTOut[6:0];
|
|
|
assign r_IPGR1[6:0] = IPGR1Out[6:0];
|
assign r_IPGR1[6:0] = IPGR1Out[6:0];
|
|
|
assign r_IPGR2[6:0] = IPGR2Out[6:0];
|
assign r_IPGR2[6:0] = IPGR2Out[6:0];
|
Line 385... |
Line 375... |
assign r_MAC[47:32] = MAC_ADDR1Out[15:0];
|
assign r_MAC[47:32] = MAC_ADDR1Out[15:0];
|
|
|
assign r_RxBDAddress[7:0] = RX_BD_ADROut[7:0];
|
assign r_RxBDAddress[7:0] = RX_BD_ADROut[7:0];
|
|
|
|
|
|
// Interrupt generation
|
|
|
|
always @ (posedge Clk or posedge Reset)
|
|
begin
|
|
if(Reset)
|
|
irq_txb <= 1'b0;
|
|
else
|
|
if(TxB_IRQ & INT_MASKOut[0])
|
|
irq_txb <= #Tp 1'b1;
|
|
else
|
|
if(INT_SOURCE_Wr & DataIn[0])
|
|
irq_txb <= #Tp 1'b0;
|
|
end
|
|
|
|
always @ (posedge Clk or posedge Reset)
|
|
begin
|
|
if(Reset)
|
|
irq_txe <= 1'b0;
|
|
else
|
|
if(TxE_IRQ & INT_MASKOut[1])
|
|
irq_txe <= #Tp 1'b1;
|
|
else
|
|
if(INT_SOURCE_Wr & DataIn[1])
|
|
irq_txe <= #Tp 1'b0;
|
|
end
|
|
|
|
always @ (posedge Clk or posedge Reset)
|
|
begin
|
|
if(Reset)
|
|
irq_rxb <= 1'b0;
|
|
else
|
|
if(RxB_IRQ & INT_MASKOut[2])
|
|
irq_rxb <= #Tp 1'b1;
|
|
else
|
|
if(INT_SOURCE_Wr & DataIn[2])
|
|
irq_rxb <= #Tp 1'b0;
|
|
end
|
|
|
|
always @ (posedge Clk or posedge Reset)
|
|
begin
|
|
if(Reset)
|
|
irq_rxf <= 1'b0;
|
|
else
|
|
if(RxF_IRQ & INT_MASKOut[3])
|
|
irq_rxf <= #Tp 1'b1;
|
|
else
|
|
if(INT_SOURCE_Wr & DataIn[3])
|
|
irq_rxf <= #Tp 1'b0;
|
|
end
|
|
|
|
always @ (posedge Clk or posedge Reset)
|
|
begin
|
|
if(Reset)
|
|
irq_busy <= 1'b0;
|
|
else
|
|
if(Busy_IRQ & INT_MASKOut[4])
|
|
irq_busy <= #Tp 1'b1;
|
|
else
|
|
if(INT_SOURCE_Wr & DataIn[4])
|
|
irq_busy <= #Tp 1'b0;
|
|
end
|
|
|
|
// Generating interrupt signal
|
|
assign int_o = irq_txb | irq_txe | irq_rxb | irq_rxf | irq_busy;
|
|
|
|
// For reading interrupt status
|
|
assign INT_SOURCEOut = {28'h0, irq_busy, irq_rxf, irq_rxb, irq_txe, irq_txb};
|
|
|
|
|
|
|
endmodule
|
endmodule
|
|
|
No newline at end of file
|
No newline at end of file
|