[libre-riscv-dev] Minerva L1 Cache
Luke Kenneth Casson Leighton
lkcl at lkcl.net
Mon Jun 15 21:10:53 BST 2020
On Mon, Jun 15, 2020 at 8:54 PM Yehowshua <yimmanuel3 at gatech.edu> wrote:
>
> >
> > with the current resources the scoreboard is not an immediate
> > incremental priority: getting a functional core that executes
> > instructions is a top priority... *and then* the scoreboard can be
> > incrementally added to it if there is time to do so.
>
> OK. So right now, it sounds like instructions execute in order with
> scoreboard?
no scoreboard at all. no dependency checking at all.
> Are we simply stalling with instructional dependencies?
correct. it's why it's nicknamed the brain-dead core
https://git.libre-soc.org/?p=soc.git;a=blob;f=src/soc/simple/core.py;hb=HEAD
https://git.libre-soc.org/?p=soc.git;a=blob;f=src/soc/simple/test/test_core.py;hb=HEAD
at the moment it has three major top-level components:
* Function Unit block
* Register Files
* TSTL0CacheBuffer which contains a single memory port to a single
nmigen Memory with 64 8-words.
the unit test feeds instructions directly into one (and only one) of
the pipelines, and waits for the busy flag to go LOW.
> I’m assuming that right now there is no multi-issue or anything of that
> nature at the moment?
correct. incremental development. each step - each new piece of
functionality - confirmed by a unit test.
* when the core's executing instructions, we can start writing more
comprehensive unit tests.
* when the scoreboard is added, we re-run those unit tests. if they
work, chances are scoreboard is functional.
* when that's added, we add multi-issue. exactly the same same thing
again: run the unit tests.
i am absolutely shocked to find that there is not a single other
"open" processor that takes this approach. they all - all of them -
rely heavily on "high level" integration tests. test suites written
by other people. or just a series of binaries which test the *whole*
system.
one error and the only way to find it is to compile up one massive
core. if that takes several minutes to do (minerva takes a *minute*
to compile to verilog), tough luck.
we can run the *local* unit tests for the *local* module that is
believed to be the problem and rapidly track the problem down.
btw my brother dan pointed out that this type of approach - which is
not carried out *AT ALL* by *ANY* commercial team (especially Intel
right now) let alone an "open source" one, is a critically important
"Unique Selling Point" to investors.
by having a combination of low-level unit tests (and formal
correctness proofs) that test components individually prior to use in
a higher level that then *ALSO* has a unit test, this type of approach
is *EXACTLY* the kind of thing that will give investors a high degree
of confidence that we will be a safe bet.
l.
More information about the libre-riscv-dev
mailing list