toDownstreamReadyAndValid method
Converts this ReadyThenValidInterface to a ReadyAndValidInterface by adding a small FIFO to buffer data.
Implementation
ReadyAndValidInterface<LogicType> toDownstreamReadyAndValid(
Logic clk,
Logic reset,
) {
final downstream = ReadyAndValidInterface<LogicType>(
data.clone() as LogicType,
);
final readEnable = Logic();
final fifo = Fifo(
clk,
reset,
depth: 2,
writeEnable: valid,
writeData: data,
readEnable: readEnable,
name: 'ready_then_valid_to_ready_and_valid_fifo_${data.name}',
);
readEnable <= downstream.ready & downstream.valid;
ready <= ~fifo.full;
downstream.data <= fifo.readData;
downstream.valid <= ~fifo.empty;
return downstream;
}