[libre-riscv-dev] pipeline sync issues
programmerjake at gmail.com
Wed Apr 10 09:05:51 BST 2019
On Wed, Apr 10, 2019, 00:52 Luke Kenneth Casson Leighton <lkcl at lkcl.net>
> On Wed, Apr 10, 2019 at 8:22 AM Jacob Lifshay <programmerjake at gmail.com>
> > One possible way to fix the truth table is to write in each row how many
> > data elements are stored in the stage and how many will be in the stage
> > next clock cycle and make sure that that matches. This is similar to the
> > "transfer" column in
> immediately, from the analysis i've done, i know that because it only
> has 8 states, it's invalid. 8 states means that one of the 4 pieces
> of information (i-v/r, o-v/r) is not being taken into account.
no, it's all taken into account because succ.valid_out is not a flip-flop,
it's a non-synchronous combination of pred.valid_in and the internal state,
therefore it doesn't have to be listed as an input in the truth table. The
truth table only needs to have the current state of all internal registers
and all inputs from the outside listed as inputs in the truth table. The
internal state consists of the buf_full signal (ignoring the data path),
whereas in BufferedPipeline the internal state includes p_o_ready and
n_o_valid because they are treated as flip-flops.
> > Once the truth table is fixed then you just have to change the nmigen
> > to match.
> > >
> > > note: if we don't conform to the industry-standard practices for
> > > ready/valid, we will not be able to use SyncFIFO in our designs.
> > >
> > I haven't checked the api, but building adaptors should be quite simple.
> ... it was. w00t!
> i ran a couple of manual tests, setting the FIFO depth to 2 and to
> 4... and it works! amazing.
> libre-riscv-dev mailing list
> libre-riscv-dev at lists.libre-riscv.org
More information about the libre-riscv-dev