Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Atomic access to multi-block registers - holding register documentation #12

Open
m-kru opened this issue Feb 22, 2024 · 4 comments
Open

Comments

@m-kru
Copy link

m-kru commented Feb 22, 2024

In Atomic access to multi-block registers you state:

The advantage of sharing holding registers is that it reduces the size of the address decoder and read multiplexer; many addresses taking data from the same source is advantageous for both area and timing. The primary disadvantage is that it only works properly when the blocks are accessed sequentially and completely. It is up to the bus master to enforce this; if it fails to do so, accesses may end up reading or writing garbage. You can therefore generally NOT mix purely AXI4L multi-master systems with multi-block registers.

I am not sure you are correct here. With logical registers wider than the data bus width you still have multiple addresses, which you present, for example, here bitrange. The required address space size is not smaller because of the holding register, so how can it affect the address decoding logic? I think the only resource utilization you reduce by sharing the snapshot/shadow register (you call it holding register) is the number of flip flops required for logical registers wider than the data bus width.

@jvanstraten
Copy link
Collaborator

Sorry for the exceptionally late response. I broke my hand right around the time you posted this, couldn't type at the time, and then it slipped through the cracks. Better late than never I suppose.

Anyway, I think you're right and my thinking was flawed. Even thinking about it now my intuition is that it's smaller, but when I try drawing it out in my head it's indeed the same. Maybe it's advantageous for timing since you effectively get two sequential read multiplexers for the holding register, but it's probably negligible.

jvanstraten added a commit that referenced this issue May 22, 2024
@jvanstraten
Copy link
Collaborator

It looks like whatever CI used to generate the docs is long gone, but I updated the sources, at least. I guess I'll keep this open then.

@mbrobbel
Copy link
Contributor

It looks like whatever CI used to generate the docs is long gone, but I updated the sources, at least. I guess I'll keep this open then.

#14

@m-kru
Copy link
Author

m-kru commented May 26, 2024

@jvanstraten

Maybe it's advantageous for timing since you effectively get two sequential read multiplexers for the holding register, but it's probably negligible.

If the slave has large number of registers it might be. However, I guess it also depends on the relative size of these 2 stage multiplexers. If any of the multiplexers is much bigger than the other one, than it probably again becomes negligible.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants