added a state to ensure the error signal propagates, and now we assert src_rdy if...
authormatt <matt@221aa14e-8319-0410-a670-987f0aec2ac5>
Thu, 2 Apr 2009 08:16:11 +0000 (08:16 +0000)
committermatt <matt@221aa14e-8319-0410-a670-987f0aec2ac5>
Thu, 2 Apr 2009 08:16:11 +0000 (08:16 +0000)
git-svn-id: http://gnuradio.org/svn/gnuradio/trunk@10743 221aa14e-8319-0410-a670-987f0aec2ac5

usrp2/fpga/simple_gemac/rxmac_to_ll8.v

index cb5814ce30ea177a0e81f05a43526a501b37f06d..80a4899145f0e5a0d38b595d5f303eec1f798cee 100644 (file)
@@ -4,19 +4,20 @@ module rxmac_to_ll8
    input [7:0] rx_data, input rx_valid, input rx_error, input rx_ack,
    output [7:0] ll_data, output ll_sof, output ll_eof, output ll_error, output ll_src_rdy, input ll_dst_rdy );
 
-   reg [1:0] xfer_state;
+   reg [2:0] xfer_state;
 
-   assign ll_data     = rx_data;
-   assign ll_src_rdy  = rx_valid;
-   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_data          = rx_data;
+   assign ll_src_rdy       = rx_valid | (xfer_state == XFER_ERROR);
+   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);
    
    localparam XFER_IDLE     = 0;
    localparam XFER_ACTIVE   = 1;
    localparam XFER_ERROR    = 2;
-   localparam XFER_OVERRUN  = 3;
-   
+   localparam XFER_ERROR_2  = 3;
+   localparam XFER_OVERRUN  = 4;
+      
    always @(posedge clk)
      if(reset | clear)
        xfer_state         <= XFER_IDLE;
@@ -33,7 +34,10 @@ module rxmac_to_ll8
           else if(~ll_dst_rdy)
             xfer_state <= XFER_OVERRUN;
         XFER_ERROR :
-          if(~rx_valid)
+          if(ll_dst_rdy)
+            xfer_state <= XFER_ERROR_2;
+        XFER_ERROR_2 :
+          if(~rx_error)
             xfer_state <= XFER_IDLE;
         XFER_OVERRUN :
           if(ll_dst_rdy & ~rx_valid)