eliminate use of the `XXX_draining macro
[fleet.git] / ships / Alu.ship
index 3b2117f..fa9dfd8 100644 (file)
@@ -143,6 +143,8 @@ public void service() {
   assign eq            = in1_d == in2_d;
   assign cout          = sum[`WORDWIDTH];
 
+  reg out_draining;
+
   assign out_d_[`WORDWIDTH] =
           (inOp_d_trunc==0) ? 1'b0 :
           (inOp_d_trunc==1) ? 1'b0 :
@@ -168,11 +170,13 @@ public void service() {
   always @(posedge clk) begin
     if (!rst) begin
       `reset
+      out_draining <= 0;
     end else begin
       `flush
       `cleanup
-      if (`out_draining) begin
+      if (out_draining && `out_empty) begin
         `drain_inOp
+        out_draining <= 0;
         if      (inOp_d_trunc==0) `drain_in1
         else if (inOp_d_trunc==1) `drain_in2
         else if (inOp_d_trunc==9 &&  both_negative) begin `drain_in1 `drain_in2 end
@@ -187,8 +191,9 @@ public void service() {
           `drain_in2
         end
       end
-      if (`out_empty && `in1_full && `in2_full && `inOp_full) begin
+      if (!out_draining && `out_empty && `in1_full && `in2_full && `inOp_full) begin
         `fill_out
+        out_draining <= 1;
       end
     end
   end