[libre-riscv-dev] query in soc/TLB
Luke Kenneth Casson Leighton
lkcl at lkcl.net
Fri Apr 12 13:56:42 BST 2019
On Fri, Apr 12, 2019 at 1:43 PM Rishabh Jain <rishucoding at gmail.com> wrote:
> hi everyone,
> Daniel,luke: could you please look into these:
> for file soc/TLB/src/AddressEncoder.py
> 1. is this table for priority encoder correct?
> I3 I2 I1 I0 | O1 O0 V
> 0 0 0 0 | x x 0
> x x x 1 | 0 0 1
> x x 1 0 | 0 1 1
> x 1 0 0 | 1 0 1
> 1 0 0 0 | 1 1 1
> i believe this table follows with line 87 and 96 of
> though Jacob answered this previously, but his table was giving priority to
> the highest bit.
you need to read the docstring at the top of the class, in nmigen/lib/coding.py
"""Priority encode requests to binary.
If any bit in ``i`` is asserted, ``n`` is low and ``o`` indicates
the least significant
Otherwise, ``n`` is high and ``o`` is ``0``.
note it says **LEAST** significant bit. you have l3 l2 l1 l0 so the
LEAST significant bit is on the RIGHT.
so... L3=1 and l2/l1/l0=0.... therefore O=0b11... yes, i'd agree with that.
> 3. how do i go about understanding the module priority encoder and encoder.
> i really like nmigen having these built-in combinational ckts.. but to know
> what member variables are present and how the module is working, where to
at the source code for the module, and for examples where it is used.
> I am struggling with values "encoder.n" and "p_encoder.n" .. i guess these
> are related to "valid input".
again: read the docstring. it says "n is LOW" if any bit is asserted.
n is **LOW** if any bit is asserted.
> 4. I guess there is silly mistake on line 56 of AddressEncoder.py:
> should be : "Line56: "# Multiple Match if encoder n is valid" "
see above. n is **LOW** if any bit is asserted.
> By Tuesday, I will be able to check other modules in TLB.
> I appreciate the efforts put by Daniel in commenting on the code. Really
> good comments.
yeah, they are.
More information about the libre-riscv-dev