[libre-riscv-dev] pipeline sync issues

Luke Kenneth Casson Leighton lkcl at lkcl.net
Wed Apr 10 05:29:27 BST 2019


ok i think i have the answer as to why UnbufferedPipeline (CombStage),
and UnbufferedPipeline2 (BreakReadyStage) etc. are not working.

i wrote out the truth table and found that UnbufferedPipeline does not
take into consideration p_o_ready.

setting p_o_ready on any given cycle is a *contract* that says that,
on the *next* cycle, if n_i_valid is true the stage *WILL*, without
fail, be ready to accept the input.

to reiterate: that's on the *next* cycle it will be ready to accept the input.

in terms of e.g. the nmigen FIFO code, it's similar to as if
write-enable were ignored.

by contrast, the truth table for SimpleHandshake respects p_o_ready.
it takes into account all four signals, and is a 16-way table.
UnbufferedPipeline is only 8, which is a clear indicator of the source
of the issue.


More information about the libre-riscv-dev mailing list