You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Apparently, resources in a dense memory window cannot be smaller than
the data width of the parent memory map. This can be demonstrated in test_memory.py by making the resource in the dense window smaller
than the ratio of the window (2 < 4):
# from this, which works
self.win3.add_resource(self.res6, name="name6", size=16)
# to this, which raises AssertionError in MemoryMap._translate(), via MemoryMap.all_resources() later on
self.win3.add_resource(self.res6, name="name6", size=2)
Here is another test case I created:
import pytest
from amaranth_soc.memory import MemoryMap
def test_dense():
regs = ("reg0", "reg1", "reg2", "reg3")
window = MemoryMap(addr_width=2, data_width=8)
for reg in regs:
window.add_resource(reg, name=reg, size=1)
memory_map = MemoryMap(addr_width=1, data_width=16)
(start, end, ratio) = memory_map.add_window(window, sparse=False)
assert start == 0
assert end == 2
assert ratio == 2
assert memory_map.decode_address(0) == regs[0] # unexpected! (would expect regs[0], regs[1])
assert memory_map.decode_address(1) == regs[0] # completely unexpected!
with pytest.raises(AssertionError): # unexpected!
list(memory_map.all_resources())
for reg in regs:
with pytest.raises(AssertionError): # unexpected!
res = memory_map.find_resource(reg)
I would expect that it is possible to address multiple units with a
single address in this case. Am I making a logical mistake this this assumption?
If not, is this just a problem with the implementation
(e.g. ResourceInfo not being able to represent "fractional"
addresses)?
In either case, I think this should be caught in add_window() already (or at least with an explanatory exception text).
The text was updated successfully, but these errors were encountered:
chenz
changed the title
Resources on dense memory windows must be sized multipes of "parent" data_width?
Resources on dense memory windows must be sized multilpes of "parent" data_width?
Mar 30, 2023
chenz
changed the title
Resources on dense memory windows must be sized multilpes of "parent" data_width?
Resources on dense memory windows must be sized multiples of "parent" data_width?
Mar 30, 2023
Apparently, resources in a dense memory window cannot be smaller than
the data width of the parent memory map. This can be demonstrated in
test_memory.py
by making the resource in the dense window smallerthan the ratio of the window (2 < 4):
Here is another test case I created:
I would expect that it is possible to address multiple units with a
single address in this case. Am I making a logical mistake this this assumption?
If not, is this just a problem with the implementation
(e.g. ResourceInfo not being able to represent "fractional"
addresses)?
In either case, I think this should be caught in
add_window()
already (or at least with an explanatory exception text).The text was updated successfully, but these errors were encountered: