diff options
author | matt <matt@221aa14e-8319-0410-a670-987f0aec2ac5> | 2009-04-02 23:35:12 +0000 |
---|---|---|
committer | matt <matt@221aa14e-8319-0410-a670-987f0aec2ac5> | 2009-04-02 23:35:12 +0000 |
commit | 054841c4bc1f596d646733613766993f56be1ad6 (patch) | |
tree | f9f405808036cc5008c977fa88b905ee5585e994 /simple_gemac | |
parent | f67baf74dbbba737b04eeae8fd48201008805894 (diff) | |
download | uhd-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.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) |