[libre-riscv-dev] pipeline stages controlling delays

Luke Kenneth Casson Leighton lkcl at lkcl.net
Fri Apr 5 23:44:39 BST 2019


i realised overnight: the signals that need to be firebroken are not
p.o_ready and n.o_valid, it's p.i_valid and n.i_ready that need the

p.i_valid comes in from the previous stage as n.o_valid, and likewise
n.i_ready comes in from the *next* stage as p.o_ready, hence why i got
them confused.

by severing the "real" link between p.i_valid (external) and p.i_valid
(internal), the IO-control-handler (not going to call it a "Stage")
knows the difference between the *previous* stage having valid data
and the...

argh argh argh it's both, isn't it?  if the stage is not ready, the
p.o_ready must not be sent, *and* the p.i_valid must be ignored.

hooray!  that worked!  there was already a function for checking
i_valid, i hooked into that and told it to return false if the stage
said that it's not ready.

ok.... so... i am guessing that the same trick needs to be applied to
the output.


More information about the libre-riscv-dev mailing list