-
- if ( out_r && !out_a) begin
- end else if ( out_r && out_a) begin out_r <= 0;
- end else if (!out_r && !out_a && inAddrRead_r && !inAddrRead_a) begin
+ if (!inCBD_r && inCBD_a) inCBD_a <= 0;
+
+ // assumes we never want a zero-length codebag
+ if ( inCBD_r && !inCBD_a && !out_r && !out_a) begin
+ if (!dispatching_cbd) begin
+ cursor <= inCBD_d[(`INSTRUCTION_WIDTH-1):(`CODEBAG_SIZE_BITS)];
+ counter <= 0;
+ dispatching_cbd <= 1;
+ end
+ out_r <= 1;
+ end else if (inCBD_r && out_r && out_a) begin
+ out_r <= 0;
+ if (counter != inCBD_d[(`CODEBAG_SIZE_BITS-1):0]) begin
+ cursor <= cursor + 1;
+ counter <= counter + 1;
+ end else begin
+ inCBD_a <= 1;
+ counter <= 0;
+ dispatching_cbd <= 0;
+ end
+ end else if (!dispatching_cbd && out_r && out_a) begin out_r <= 0;
+ end else if (!dispatching_cbd && !out_r && !out_a && inAddrRead_r && !inAddrRead_a) begin