[libre-riscv-dev] buffered pipeline

Jacob Lifshay programmerjake at gmail.com
Fri Apr 5 07:12:25 BST 2019


So, I think we should make a shared git repo that has all the pipeline
utility code separated out so that it can be used as a submodule for our
other code. This allows us to easily synchronize our code between different
repos. Alternatively, we should merge all our nmigen repos into a monorepo.
In either case, the ieee754fpu repo is the wrong spot for it.

I think we should have it (or at least an automatically updated mirror) on
debian salsa because of the nicer interface for viewing code and because of
the CI capabilities, so we could set it up to automatically run the unit
tests each time we push code. Note that debian salsa currently doesn't have
very much test runner infrastructure, so we shouldn't be running long
tests, so that's why I haven't set up Kazan to automatically run unit tests
since building LLVM takes quite a while.

Also, we need to decide on a subset of the pipeline API that is stable
enough that we can start building significant quantities of code on it
since an API that's constantly changing in incompatible ways doesn't help.
I think we should proceed with the explicit Stage classes since they are
much easier to compose using StageGroup (like the *Pipeline classes that
luke wrote, except it has the Stage interface and doesn't insert registers
between stages) and since they are much less complicated than getting the
user-friendly __getattr__/__setattr__ implementation to work.

I'm fine with switching to overridable functions that define the input and
output shapes and using the eq function that luke wrote but I think we need
ready/valid to be passed through Stage instances to support stages that are
entire pipelines or FSMs. We can use CombStage (or similar) for boilerplate
code for simple combinatorial stages.

Jacob


More information about the libre-riscv-dev mailing list