Properly signals an error and drops the remainder of the packet if there is an overru...
authormatt <matt@221aa14e-8319-0410-a670-987f0aec2ac5>
Thu, 2 Apr 2009 23:35:12 +0000 (23:35 +0000)
committermatt <matt@221aa14e-8319-0410-a670-987f0aec2ac5>
Thu, 2 Apr 2009 23:35:12 +0000 (23:35 +0000)
git-svn-id: http://gnuradio.org/svn/gnuradio/trunk@10751 221aa14e-8319-0410-a670-987f0aec2ac5

usrp2/fpga/simple_gemac/rxmac_to_ll8.v

index 80a4899145f0e5a0d38b595d5f303eec1f798cee..d4015716e80c7d561d20f45a08cf378577d62635 100644 (file)
@@ -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_ERROR  = 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)