full <= 0;
end else begin
`flush
- if (!in1_r && in1_a) in1_a <= 0;
- if (!in2_r && in2_a) in2_a <= 0;
- if (!inOp_r && inOp_a) inOp_a <= 0;
- if (!inOp_r && !inOp_a) full <= 0;
- if (out_r && out_a) begin
- out_r <= 0;
+ `cleanup
+ if (`inOp_empty) full <= 0;
+ if (`out_draining) begin
if (op_count) temp <= temp - in2_d;
else temp <= temp - 1;
- if (op_pass && op_v1) in1_a <= 1;
- if (op_pass && op_v2) in2_a <= 1;
- end else if (inOp_r && !inOp_a) begin
+ if (op_pass && op_v1) `drain_in1
+ if (op_pass && op_v2) `drain_in2
+ end else if (`inOp_full) begin
if (!full) begin
- if (op_count && in1_r && !in1_a && in2_r && !in2_a) begin
+ if (op_count && `in1_full && `in2_full) begin
temp <= in1_d[`DATAWIDTH-1:0] - in2_d[`DATAWIDTH-1:0];
- in1_a <= 1;
+ `drain_in1
full <= 1;
- end else if (op_c1 && in1_r && !in1_a) begin
+ end else if (op_c1 && `in1_full) begin
temp <= in1_d[`DATAWIDTH-1:0]-1;
- in1_a <= 1;
+ `drain_in1
full <= 1;
- end else if (op_c2 && in2_r && !in2_a) begin
+ end else if (op_c2 && `in2_full) begin
temp <= in2_d[`DATAWIDTH-1:0]-1;
- in2_a <= 1;
+ `drain_in2
full <= 1;
end
end else if (temp[`DATAWIDTH-1]) begin
full <= 0;
- inOp_a <= 1;
+ `drain_inOp
if (op_count) begin
- in2_a <= 1;
+ `drain_in2
end else if (op_repeat && op_v1) begin
- in1_a <= 1;
+ `drain_in1
end else if (op_repeat && op_v2) begin
- in2_a <= 1;
+ `drain_in2
end
- end else if (!out_r && !out_a) begin
+ end else if (`out_empty) begin
if (op_count) begin
- out_r <= 1;
- end else if (op_v1 && in1_r && !in1_a) begin
- if (op_drop) begin in1_a <= 1; temp <= temp-1; end
- else out_r <= 1;
- end else if (op_v2 && in2_r && !in2_a) begin
- if (op_drop) begin in2_a <= 1; temp <= temp-1; end
- else out_r <= 1;
+ `fill_out
+ end else if (op_v1 && `in1_full) begin
+ if (op_drop) begin `drain_in1 temp <= temp-1; end
+ else `fill_out
+ end else if (op_v2 && `in2_full) begin
+ if (op_drop) begin `drain_in2 temp <= temp-1; end
+ else `fill_out
end
end
end