summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--simple_gemac/rxmac_to_ll8.v18
1 files changed, 12 insertions, 6 deletions
diff --git a/simple_gemac/rxmac_to_ll8.v b/simple_gemac/rxmac_to_ll8.v
index 80a489914..d4015716e 100644
--- a/simple_gemac/rxmac_to_ll8.v
+++ b/simple_gemac/rxmac_to_ll8.v
@@ -7,16 +7,19 @@ module rxmac_to_ll8
reg [2:0] xfer_state;
assign ll_data = rx_data;
- assign ll_src_rdy = rx_valid | (xfer_state == XFER_ERROR);
+ assign ll_src_rdy = ((rx_valid & (xfer_state != XFER_OVERRUN2) )
+ | (xfer_state == XFER_ERROR)
+ | (xfer_state == XFER_OVERRUN));
assign ll_sof = ((xfer_state==XFER_IDLE)|(xfer_state==XFER_ERROR)|(xfer_state==XFER_OVERRUN));
assign ll_eof = (rx_ack | (xfer_state==XFER_ERROR) | (xfer_state==XFER_OVERRUN));
- assign ll_error = (xfer_state == XFER_ERROR);
+ assign ll_error = (xfer_state == XFER_ERROR)|(xfer_state==XFER_OVERRUN);
localparam XFER_IDLE = 0;
localparam XFER_ACTIVE = 1;
localparam XFER_ERROR = 2;
- localparam XFER_ERROR_2 = 3;
+ localparam XFER_ERROR2 = 3;
localparam XFER_OVERRUN = 4;
+ localparam XFER_OVERRUN2 = 5;
always @(posedge clk)
if(reset | clear)
@@ -35,12 +38,15 @@ module rxmac_to_ll8
xfer_state <= XFER_OVERRUN;
XFER_ERROR :
if(ll_dst_rdy)
- xfer_state <= XFER_ERROR_2;
- XFER_ERROR_2 :
+ xfer_state <= XFER_ERROR2;
+ XFER_ERROR2 :
if(~rx_error)
xfer_state <= XFER_IDLE;
XFER_OVERRUN :
- if(ll_dst_rdy & ~rx_valid)
+ if(ll_dst_rdy)
+ xfer_state <= XFER_OVERRUN2;
+ XFER_OVERRUN2 :
+ if(~rx_valid)
xfer_state <= XFER_IDLE;
endcase // case (xfer_state)