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

Subversion Repositories ethmac

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 89 to Rev 90
    Reverse comparison

Rev 89 → Rev 90

/trunk/rtl/verilog/eth_wishbone.v
41,6 → 41,9
// CVS Revision History
//
// $Log: not supported by cvs2svn $
// Revision 1.17 2002/03/09 16:08:45 mohor
// rx_fifo was not always cleared ok. Fixed.
//
// Revision 1.16 2002/03/09 13:51:20 mohor
// Status was not latched correctly sometimes. Fixed.
//
323,7 → 326,6
wire TxAbortPulse;
 
wire StartRxBDRead;
wire StartRxStatusWrite;
 
wire StartTxBDRead;
 
440,8 → 442,8
else
begin
// Switching between three stages depends on enable signals
casex ({WbEn_q, RxEn_q, TxEn_q, RxEn_needed, TxEn_needed}) // synopsys parallel_case
5'b100_1x :
case ({WbEn_q, RxEn_q, TxEn_q, RxEn_needed, TxEn_needed}) // synopsys parallel_case
5'b100_10, 5'b100_11 :
begin
WbEn <=#Tp 1'b0;
RxEn <=#Tp 1'b1; // wb access stage and r_RxEn is enabled
457,7 → 459,7
ram_addr <=#Tp TxBDAddress + TxPointerRead;
ram_di <=#Tp TxBDDataIn;
end
5'b010_x0 :
5'b010_00, 5'b010_10 :
begin
WbEn <=#Tp 1'b1; // RxEn access stage and r_TxEn is disabled
RxEn <=#Tp 1'b0;
467,7 → 469,7
BDWrite <=#Tp BDCs & WB_WE_I;
BDRead <=#Tp BDCs & ~WB_WE_I;
end
5'b010_x1 :
5'b010_01, 5'b010_11 :
begin
WbEn <=#Tp 1'b0;
RxEn <=#Tp 1'b0;
475,7 → 477,7
ram_addr <=#Tp TxBDAddress + TxPointerRead;
ram_di <=#Tp TxBDDataIn;
end
5'b001_xx :
5'b001_00, 5'b001_01, 5'b001_10, 5'b001_11 :
begin
WbEn <=#Tp 1'b1; // TxEn access stage (we always go to wb access stage)
RxEn <=#Tp 1'b0;
569,7 → 571,7
if(Reset)
TxBDRead <=#Tp 1'b1;
else
if(StartTxBDRead)
if(StartTxBDRead & ~TxBDReady)
TxBDRead <=#Tp 1'b1;
else
if(TxBDReady)
619,7 → 621,7
if(Reset)
BlockingTxBDRead <=#Tp 1'b0;
else
if(StartTxBDRead)
if(StartTxBDRead & ~TxBDReady)
BlockingTxBDRead <=#Tp 1'b1;
else
if(TxStartFrm_wb)
753,7 → 755,7
if(Reset)
BlockReadTxDataFromMemory <=#Tp 1'b0;
else
if(ReadTxDataFromFifo_wb)
if(ReadTxDataFromFifo_wb | ResetReadTxDataFromMemory)
BlockReadTxDataFromMemory <=#Tp 1'b0;
else
if((TxBufferAlmostFull | TxLength <= 4)& MasterWbTX)
765,8 → 767,8
assign MasterAccessFinished = m_wb_ack_i | m_wb_err_i;
 
assign m_wb_sel_o = 4'hf;
reg[3:0] state;
 
 
// Enabling master wishbone access to the memory for two devices TX and RX.
always @ (posedge WB_CLK_I or posedge Reset)
begin
778,6 → 780,7
m_wb_cyc_o <=#Tp 1'b0;
m_wb_stb_o <=#Tp 1'b0;
m_wb_we_o <=#Tp 1'b0;
state <=#Tp 4'h0;
end
else
begin
791,6 → 794,7
m_wb_cyc_o <=#Tp 1'b1;
m_wb_stb_o <=#Tp 1'b1;
m_wb_we_o <=#Tp 1'b1;
state <=#Tp 4'h1;
end
5'b00_10_0, 5'b00_10_1 :
begin
800,6 → 804,7
m_wb_cyc_o <=#Tp 1'b1;
m_wb_stb_o <=#Tp 1'b1;
m_wb_we_o <=#Tp 1'b0;
state <=#Tp 4'h2;
end
5'b10_10_1 :
begin
809,6 → 814,7
m_wb_cyc_o <=#Tp 1'b1;
m_wb_stb_o <=#Tp 1'b1;
m_wb_we_o <=#Tp 1'b0;
state <=#Tp 4'h3;
end
5'b01_01_1 :
begin
816,6 → 822,7
MasterWbRX <=#Tp 1'b1;
m_wb_adr_o <=#Tp RxPointer;
m_wb_we_o <=#Tp 1'b1;
state <=#Tp 4'h4;
end
5'b10_01_1, 5'b10_11_1 :
begin
823,6 → 830,7
MasterWbRX <=#Tp 1'b1;
m_wb_adr_o <=#Tp RxPointer;
m_wb_we_o <=#Tp 1'b1;
state <=#Tp 4'h5;
end
5'b01_10_1, 5'b01_11_1 :
begin
830,6 → 838,7
MasterWbRX <=#Tp 1'b0;
m_wb_adr_o <=#Tp TxPointer;
m_wb_we_o <=#Tp 1'b0;
state <=#Tp 4'h6;
end
5'b10_00_1, 5'b01_00_1 :
begin
837,6 → 846,7
MasterWbRX <=#Tp 1'b0;
m_wb_cyc_o <=#Tp 1'b0;
m_wb_stb_o <=#Tp 1'b0;
state <=#Tp 4'h7;
end
default: // Don't touch
begin
844,6 → 854,7
MasterWbRX <=#Tp MasterWbRX;
m_wb_cyc_o <=#Tp m_wb_cyc_o;
m_wb_stb_o <=#Tp m_wb_stb_o;
state <=#Tp state;
end
endcase
end
1333,7 → 1344,7
end
 
 
assign StartRxBDRead = RxStatusWrite | RxAbort;
assign StartRxBDRead = RxStatusWrite | RxAbortLatched;
 
// Reading the Rx buffer descriptor
always @ (posedge WB_CLK_I or posedge Reset)
1341,7 → 1352,7
if(Reset)
RxBDRead <=#Tp 1'b1;
else
if(StartRxBDRead)
if(StartRxBDRead & ~RxBDReady)
RxBDRead <=#Tp 1'b1;
else
if(RxBDReady)
1627,12 → 1638,53
reg RxAbortSyncb1;
reg RxAbortSyncb2;
 
reg LatchedRxStartFrm;
reg SyncRxStartFrm;
reg SyncRxStartFrm_q;
wire RxFifoReset;
 
always @ (posedge MRxClk or posedge Reset)
begin
if(Reset)
LatchedRxStartFrm <=#Tp 0;
else
if(RxStartFrm & ~SyncRxStartFrm)
LatchedRxStartFrm <=#Tp 1;
else
if(SyncRxStartFrm)
LatchedRxStartFrm <=#Tp 0;
end
 
 
always @ (posedge WB_CLK_I or posedge Reset)
begin
if(Reset)
SyncRxStartFrm <=#Tp 0;
else
if(LatchedRxStartFrm)
SyncRxStartFrm <=#Tp 1;
else
SyncRxStartFrm <=#Tp 0;
end
 
 
always @ (posedge WB_CLK_I or posedge Reset)
begin
if(Reset)
SyncRxStartFrm_q <=#Tp 0;
else
SyncRxStartFrm_q <=#Tp SyncRxStartFrm;
end
 
 
assign RxFifoReset = SyncRxStartFrm & ~SyncRxStartFrm_q;
 
 
eth_fifo #(`RX_FIFO_DATA_WIDTH, `RX_FIFO_DEPTH, `RX_FIFO_CNT_WIDTH)
rx_fifo (.data_in(RxDataLatched2), .data_out(m_wb_dat_o),
.clk(WB_CLK_I), .reset(Reset),
.write(WriteRxDataToFifo_wb), .read(MasterWbRX & m_wb_ack_i),
.clear(RxAbortSync2 | RxStatusWriteLatched), .full(RxBufferFull),
.clear(RxFifoReset), .full(RxBufferFull),
.almost_full(RxBufferAlmostFull), .almost_empty(RxBufferAlmostEmpty),
.empty(RxBufferEmpty)
);
1647,10 → 1699,10
if(Reset)
ShiftEnded_tck <=#Tp 1'b0;
else
if(SetWriteRxDataToFifo & StartShiftWillEnd & ~RxAbort)
if(SetWriteRxDataToFifo & StartShiftWillEnd & ~RxAbort & ~ShiftEnded_tck)
ShiftEnded_tck <=#Tp 1'b1;
else
if(ShiftEndedSync2 | RxAbort)
if(ShiftEnded | RxAbort)
ShiftEnded_tck <=#Tp 1'b0;
end
 
1667,11 → 1719,7
if(Reset)
ShiftEndedSync2 <=#Tp 1'b0;
else
if(ShiftEndedSync1)
ShiftEndedSync2 <=#Tp 1'b1;
else
if(ShiftEnded)
ShiftEndedSync2 <=#Tp 1'b0;
ShiftEndedSync2 <=#Tp ShiftEndedSync1;
end
 
 
1681,7 → 1729,7
if(Reset)
ShiftEnded <=#Tp 1'b0;
else
if(ShiftEndedSync2 & MasterWbRX & m_wb_ack_i & RxBufferAlmostEmpty)
if(ShiftEndedSync2 & MasterWbRX & m_wb_ack_i & RxBufferAlmostEmpty & ~ShiftEnded)
ShiftEnded <=#Tp 1'b1;
else
if(RxStatusWrite)

powered by: WebSVN 2.1.0

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