Stack bugfixes
[fleet.git] / ships / Stack.ship
index 58d5e12..a3bb7ef 100644 (file)
@@ -37,21 +37,25 @@ process any new {\tt pop} operations.
 
   reg    [(`DATAWIDTH-1):0] mem [4:0];
   reg    [5:0]              depth;
+  reg    skip;
+  initial depth = 0;
 
   always @(posedge clk) begin
-    if (depth < 32) begin
-      `onread(push_r, push_a)
-        pop_d       = push_d;
-        mem[depth] <= push_d;
-        depth       = depth + 1;
-      end
-    end
+    skip = 0;
     if (depth > 0) begin
-      `onwrite(pop_r, pop_d)
-        depth = depth - 1;
-        if (depth > 0) begin
-          pop_d = mem[depth];
+      `onwrite(pop_r, pop_a)
+        if (depth > 1) begin
+          pop_d <= mem[depth-2];
         end
+        depth <= depth - 1;
+        skip = 1;
+      end
+    end
+    if (!skip && depth < 32) begin
+      `onread(push_r, push_a)
+        pop_d      <= push_d;
+        mem[depth] <= push_d;
+        depth      <= depth + 1;
       end
     end
   end