ReadyValidPipeline constructor

ReadyValidPipeline(
  1. Logic clk,
  2. Logic validPipeIn,
  3. Logic readyPipeOut, {
  4. List<List<Conditional> Function(PipelineStageInfo p)> stages = const [],
  5. Map<Logic, dynamic>? resetValues,
  6. List<Logic> signals = const [],
  7. Logic? reset,
  8. bool asyncReset = false,
})

Constructs a pipeline with Ready/Valid protocol at each stage.

The validPipeIn signal indicates that the input to the pipeline is valid. The readyPipeOut signal indicates that the receiver of the output of the pipeline is ready to pull out of the pipeline.

The validPipeOut signal indicates that valid contents are ready to be received at the output of the pipeline. The readyPipeIn signal indicates that the pipeline is ready to accept new content.

The pipeline will only progress through any stage, including the output, if both valid and ready are asserted at the same time. This pipeline is capable of having bubbles, but they will collapse if downstream stages are backpressured.

If contents are pushed in when the pipeline is not ready, they will be dropped.

Note that the resetValues will take effect the same way as a normal Pipeline, but the valid indication on the output will remain at 0 until a valid input has made its way from the input to the output.

Implementation

ReadyValidPipeline(
  Logic clk,
  Logic validPipeIn,
  Logic readyPipeOut, {
  List<List<Conditional> Function(PipelineStageInfo p)> stages = const [],
  Map<Logic, dynamic>? resetValues,
  List<Logic> signals = const [],
  Logic? reset,
  bool asyncReset = false,
}) : this.multi(
        [clk],
        validPipeIn,
        readyPipeOut,
        stages: stages,
        resetValues: resetValues,
        signals: signals,
        reset: reset,
        asyncReset: asyncReset,
      );