Enhance codegen to be able to separate flow control logic from the pipeline.
- Dominant language
- C++
- Stars
- 1.9k
- Forks
- 283
- Avg merge
- 2d 10h
- Merged PRs (30d)
- 135
Description
For pipeline function generation, one use case is to have a set of pipelines with the same latency all in parallel. If these are then fed with the same valid signal, then one optimization may be to factor out the pipeline flow control into a separate module.
Consider
```
pipeline pipe0(.in(in0), ,.in_valid(in_valid), .out(out0), .out_valid(out0_valid);
pipeline pipe1(.in(in1), ,.in_valid(in_valid), .out(out1), .out_valid(out1_valid);
wire out_valid = out0_valid && out1_valid;
```
to
```
wire[N:0] flow_control;
pipeline_flow_control pipe_flow_control(.in_valid(in_valid), .out_flow_control(flow_control), .out_valid(out_valid);
pipeline pipe0(.in(in0), .out(out0), .external_flow_control(flow_control));
pipeline pipe1(.in(in1), .out(out1), .external_flow_control(flow_control));
```
where the flow control logic is factored out into the module pipeline_flow_control which then drives the stages for pipe0 and pipe1.
Contributor guide
Assessment
This issue has not been assessed yet.