[Libre-soc-dev] microwatt / libresoc dcache

Luke Kenneth Casson Leighton lkcl at lkcl.net
Thu May 6 20:24:28 BST 2021

allo again paul,

for reference here is dcache.py:

pretty much near-identical to dcache.vhdl, one major difference: the bottom
3 LSBs of the address are *not* copied onto the WB bus (as previously
discussed, a 32 bit address @ 64 bits wide data must put *29* MSBs onto the
WB Bus, *not* the full 32)

appreciated the input yesterday about dcache.vhdl, the 3 cycles:

* AGEN (address generation)
* ST data drop
* actual fetch.

so this is where it gets interesting: we also have an AGEN Phase in
Libre-SOC, but because the intent is to be an Out-of-Order design plus also
to allow single regfile read port thru triple read ports as a config
option, we have *no idea* if the two RA / RB regs for AGEN will come before
*or after* the RS from a STORE operation!

therefore i had to stall the introduction of the AGEN assertion into
dcache.py until the ST reg has been read (many cycles later, at present).

c'est la vie :)

my question to you is about the cache sram reading (not writing)


here you can see ADR_BUF=true, and it is set in dcache.py

a normal SRAM you would expect a 1 clock cycle delay, all good.  except
here, an *extra* cycle of delay is added.  after assertion of the read it
is *two* cycles before the data appears on the read data output.

i have no idea why, and i'm not skilled enough at VHDL to work out how to
remove it.

any chance of making that a config-selectable option in dcache.vhdl?  i can
then see how that was done and make corresponding edits.

it is not a high priority, the code is "functional" as-is.



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

More information about the Libre-soc-dev mailing list