[libre-riscv-dev] store computation unit

Luke Kenneth Casson Leighton lkcl at lkcl.net
Sat Jun 8 23:22:05 BST 2019

On Wednesday, June 5, 2019, Mitchalsup <mitchalsup at aol.com> wrote:

So STs have to hold up other STs in sequence.
> Only until it is known that the 2 stores have independent addresses.

After writing that unit test and seeing the output, I kinda better
understand this now.

The parallels with the regfile only go so far, because unlike the regfile
where the instructions give the reg# explicitly, and thus the overlaps
between regs can be done immediately, AGEN does NOT happen immediately.

So at issue time you have no idea, at all, if there is going to be a clash.

Therefore, there are two possible approaches, one of which is a failure:

1. When issuing a 2nd ST, make it transitively ALSO dependent on the 1st.

2. Overload shadowing (the concept of shadowing, not branch shadowing, a
second *type* of shadowing that uses the exact same logic) to "hold" the
commit until AGEN clashes are known.

The problem with 2 is, it's the wrong place. The dependency information is

Further regarding 1, the preliminary exploration with the unit tests showed
that I could only get the proper "blocks" by accumulating *both* the LD
*and* ST operations as dependencies

LD 1 issued
LD 2 depends on LD1
ST1 depends on LD1 LD2
ST2 depends on ST1 LD1 LD2

and so on.

Once AGEN is known, we now have the equivalent of the reg# (the address)
and for each known address against other known addresses, those
dependencies should very rapidly disappear.

Still lots more to investigate.


crowd-funded eco-conscious hardware: https://www.crowdsupply.com/eoma68

More information about the libre-riscv-dev mailing list