[libre-riscv-dev] need help with auto-pipeline stage creation

Luke Kenneth Casson Leighton lkcl at lkcl.net
Wed Apr 3 09:09:49 BST 2019


On Wed, Apr 3, 2019 at 7:26 AM Jacob Lifshay <programmerjake at gmail.com> wrote:
>
> If something gets way too complex, I find reimplementing using the previous
> implementation as reference usually helps.

 i'm not quite there yet, as i don't have an actual understanding of
the issues in order to _begin_ a new implementation.  i'm basically
losing track of how the __getattr__ and __setattr_ overloads work in
conjunction with the nmigen AST, which is itself based on overloads of
arithmetic operators.

 the nmigen arithmetic operator overloads are used to accumulate an
AST, which *normally* is passed in to an "m.d.sync +=
signal.eq(something)" call.

 i am *delaying* that assignment into m.d.sync (or m.d.comb),
accumulating the list of assignments and adding them to *modules*
which are created dynamically - one per stage - as a way to create a
firebreak.

 unfortunately, somewhere along the line, the chain of assignments is
broken, leaving inputs disconnected from outputs.  i do not know where
this is occurring.

l.



More information about the libre-riscv-dev mailing list