summaryrefslogtreecommitdiffstats
path: root/simple_gemac
diff options
context:
space:
mode:
authormatt <matt@221aa14e-8319-0410-a670-987f0aec2ac5>2009-04-02 23:35:12 +0000
committermatt <matt@221aa14e-8319-0410-a670-987f0aec2ac5>2009-04-02 23:35:12 +0000
commit054841c4bc1f596d646733613766993f56be1ad6 (patch)
treef9f405808036cc5008c977fa88b905ee5585e994 /simple_gemac
parentf67baf74dbbba737b04eeae8fd48201008805894 (diff)
downloaduhd-054841c4bc1f596d646733613766993f56be1ad6.tar.gz
uhd-054841c4bc1f596d646733613766993f56be1ad6.tar.bz2
uhd-054841c4bc1f596d646733613766993f56be1ad6.zip
Properly signals an error and drops the remainder of the packet if there is an overrun. ERROR_2 changed to ERROR2.
git-svn-id: http://gnuradio.org/svn/gnuradio/trunk@10751 221aa14e-8319-0410-a670-987f0aec2ac5
Diffstat (limited to 'simple_gemac')
-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)