[Libre-soc-bugs] [Bug 413] DIV "trial" blocks are too large

bugzilla-daemon at libre-soc.org bugzilla-daemon at libre-soc.org
Fri Jul 3 20:59:04 BST 2020


--- Comment #19 from Jacob Lifshay <programmerjake at gmail.com> ---
(In reply to Luke Kenneth Casson Leighton from comment #18)
> (In reply to Jacob Lifshay from comment #17)
> > your pipeline loopback solution is waay more complex then I was imagining:
> i've been thinking about how to do this for some considerable time, attempted
> what you suggest below, and found that when trying to add mask cancellation
> it became so complex that i couldn't actually work out how to do it.

I still think you're waay overcomplicating it. I'll post a more detailed
explanation a little later when I have time.
> mask cancellation is absolutely essential because it's how the speculative
> execution gets.. well... cancelled.

aren't the mask cancellation signals just broadcast to all pipeline stages? all
that's needed is to just mark the instruction as canceled and have the loop
footer stop looping early.

Note that the loop header and footer are special blocks (not just a mux) that
always prioritize non-canceled instructions that are looping back over new
instructions, stalling all stages before the pipeline header when an
instruction is looping back. That way, no FIFOs or any horribly complex stuff
are needed. The loop header block would have a pipeline register as part of it.

Additional advantages of the loop header/footer are that they are composable,
you can easily build a doubly-nested pipeline loop if we ever need that.

You can think of them as the pipeline equivalent of a do-while loop.

You are receiving this mail because:
You are on the CC list for the bug.

More information about the libre-soc-bugs mailing list