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 :
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
`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