commit-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commit-gnuradio] r5840 - gnuradio/branches/developers/matt/u2f/control_


From: matt
Subject: [Commit-gnuradio] r5840 - gnuradio/branches/developers/matt/u2f/control_lib
Date: Mon, 25 Jun 2007 20:53:59 -0600 (MDT)

Author: matt
Date: 2007-06-25 20:53:59 -0600 (Mon, 25 Jun 2007)
New Revision: 5840

Modified:
   gnuradio/branches/developers/matt/u2f/control_lib/fifo_int.v
Log:
new states and lines for error and clear


Modified: gnuradio/branches/developers/matt/u2f/control_lib/fifo_int.v
===================================================================
--- gnuradio/branches/developers/matt/u2f/control_lib/fifo_int.v        
2007-06-26 02:50:20 UTC (rev 5839)
+++ gnuradio/branches/developers/matt/u2f/control_lib/fifo_int.v        
2007-06-26 02:53:59 UTC (rev 5840)
@@ -11,7 +11,9 @@
    input [3:0] step,
    input read_go,
    input write_go,
+   input clear,
    output done,
+   output error,
    
    // Buffer Interface
    output en_o,
@@ -24,6 +26,7 @@
    input [31:0] wr_dat_i,
    input wr_write_i,
    input wr_done_i,
+   input wr_error_i,
    output wr_ready_o,
    output wr_full_o,
    
@@ -31,6 +34,7 @@
    output [31:0] rd_dat_o,
    input rd_read_i,
    input rd_done_i,
+   input rd_error_i,
    output rd_ready_o,
    output rd_empty_o
    );
@@ -48,6 +52,7 @@
    localparam PRE_READ = 3'd1;
    localparam READING = 3'd2;
    localparam WRITING = 3'd3;
+   localparam ERROR = 3'd4;
 
    reg [3:0]  state;
    
@@ -57,57 +62,69 @@
          addr_o <= 0;
          state <= IDLE;
        end
-     else 
-       case(state)
-        IDLE :
-          if(read_go)
+     else
+       if(clear)
+        state <= IDLE;
+       else 
+        case(state)
+          IDLE :
+            if(read_go)
+              begin
+                 addr_o <= firstline;
+                 state <= PRE_READ;
+              end
+            else if(write_go)
+              begin
+                 addr_o <= firstline;
+                 state <= WRITING;
+              end
+          
+          PRE_READ :
             begin
-               addr_o <= firstline;
-               state <= PRE_READ;
+               state <= READING;
+               addr_o <= addr_o + 1;
             end
-          else if(write_go)
+          
+          READING :
+            if(rd_read_i)
+              begin
+                 addr_o <= addr_o + 1;
+                 if(rd_error_i)
+                   state <= ERROR;
+                 else if(addr_o == lastline + 9'd1)
+                   state <= IDLE;
+              end
+          
+          WRITING :
             begin
-               addr_o <= firstline;
-               state <= WRITING;
-            end
-        
-        PRE_READ :
-          begin
-             state <= READING;
-             addr_o <= addr_o + 1;
-          end
-
-        READING :
-          if(rd_read_i)
-            begin
-               addr_o <= addr_o + 1;
-               if(addr_o == lastline + 9'd1)
-                 state <= IDLE;
-            end
-
-        WRITING :
-          begin
-             if(wr_write_i)
-               begin
-                  addr_o <= addr_o + 1;
-                  if(addr_o == lastline)
-                    state <= IDLE;
-               end
-             if(wr_done_i)
-               state <= IDLE;
-          end
-
-       endcase // case(state)
-
+               if(wr_error_i)
+                 state <= ERROR;
+               else
+                 begin
+                    if(wr_write_i)
+                      begin
+                         addr_o <= addr_o + 1;
+                         if(addr_o == lastline)
+                           state <= IDLE;
+                      end
+                    if(wr_done_i)
+                      state <= IDLE;
+                 end // else: !if(wr_error_i)
+            end // case: WRITING
+          
+        endcase // case(state)
+   
    // FIXME read side ignores rd_done_i for now
    
    assign rd_en = (state == PRE_READ) || ((state == READING) && rd_read_i);
    assign rd_empty_o = (state != READING) && (state != PRE_READ);
    assign rd_ready_o = (state == READING);
-
+   
    assign wr_en = (state == WRITING) && wr_write_i;  // IF this is a timing 
problem, we could always enable when in this state
    assign we_o = (state == WRITING) && wr_write_i;  // IF this is a timing 
problem, we could always write when in this state
    assign wr_full_o = (state != WRITING);
    assign wr_ready_o = (state == WRITING);
-   
+
+   assign done = (state == IDLE);
+   assign error = (state == ERROR);
 endmodule // fifo_int





reply via email to

[Prev in Thread] Current Thread [Next in Thread]