[libre-riscv-dev] TLB key for CAM

Luke Kenneth Casson Leighton lkcl at lkcl.net
Tue Mar 26 03:38:15 GMT 2019


On Tue, Mar 26, 2019 at 2:29 AM Daniel Benusovich
<flyingmonkeys1996 at gmail.com> wrote:
>
> > any ideas on what the next step would be?
>
> I was planning on removing the second cache for the time being from
> the TLB and writing the basic unit tests for the TLB.

 sounds initially like a plan to get going... ahh is that the 2-level
TLB idea that you were thinking of removing? i really liked the 2
levels (and it turns out it's something that intel does for high
performance).

 would it be possible to remove the 2nd cache, write a unit test to
prove one cache, then add it back in and modify the unit test to do 2
again?

> Sorry for being gone for a bit had a hectic weekend.

 no worries

> After that is done I am not really to sure as the TLB will be
> fundamentally done.

 great!  would that mean it would be at the point where it could do
page-walking in hardware?  or are we sticking to software?

> Do you have any ideas? I have seen the phrase
> formal verification being thrown about (I have no
> idea what that is yet I have not googled it haha) so maybe that? Or
> start the next component perhaps?

 next component... and/or discuss/review the levels of TLB idea, i
really liked that concept, to have a 2-level TLB with reduced CAM
sizes for the 1st level.   being able to check the peformance of that,
via a unit test that emulates workloads would be really useful.

 honestly there's quite a bit i am not familiar with on this, so the
more everyone can help out the better.

 oh!  btw, VectorAssembler.py can be replaced with this:

 vector = []
 for index in range(len(something):
      ematch = entry_array[index].match
      vector.append(ematch)

encoder.i.eq(Cat(*vector))

basically, VectorAssembler is identical to the nmigen "Cat" class.

the Cat class takes a variable number of non-keyword arguments.  to
pass in a list *as if* it was a series of arguments, you do
Cat(*arguments).

so, these are identical:

arg1 = "hello"
arg2 = "fred"
Cat(arg1, arg2)

this is identical to the above:

arguments_list = [arg1, arg2]
Cat(*arguments_list)

the star ("*") is what tells python to apply the list (or tuple) as
arguments *to* the Cat object.

l.



More information about the libre-riscv-dev mailing list