diff options
-rw-r--r-- | simple_gemac/rxmac_to_ll8.v | 18 |
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) |