summaryrefslogtreecommitdiff
path: root/tb/avalon.impl.hpp
diff options
context:
space:
mode:
authorAlejandro Soto <alejandro@34project.org>2022-10-16 16:01:47 -0600
committerAlejandro Soto <alejandro@34project.org>2022-10-16 16:01:47 -0600
commit3aca2967a35d05dac3d9121a882d608b10a588bb (patch)
tree25a8d37d6213f518b9ff95ef8b4de30a337a1b2d /tb/avalon.impl.hpp
parent2e6ce7931b690ccec1e41fa6847dfc1351c59d75 (diff)
Implement simulation testbenches
Diffstat (limited to '')
-rw-r--r--tb/avalon.impl.hpp26
1 files changed, 26 insertions, 0 deletions
diff --git a/tb/avalon.impl.hpp b/tb/avalon.impl.hpp
index 60f36a4..6864c6d 100644
--- a/tb/avalon.impl.hpp
+++ b/tb/avalon.impl.hpp
@@ -84,6 +84,32 @@ namespace taller::avalon
plat.avl_waitrequest = !active->write(pos, avl_writedata, avl_byteenable);
}
}
+
+ template<class Platform>
+ std::uint32_t interconnect<Platform>::dump(std::uint32_t addr)
+ {
+ std::uint32_t avl_address = addr << 2;
+
+ for(auto &binding : devices)
+ {
+ if((avl_address & binding.mask) == binding.base)
+ {
+ auto &dev = binding.dev;
+ auto pos = (avl_address & ~dev.address_mask()) >> 2;
+
+ std::uint32_t readdata;
+ while(!dev.read(pos, readdata))
+ {
+ continue;
+ }
+
+ return readdata;
+ }
+ }
+
+ fprintf(stderr, "[avl] attempt to dump memory hole at 0x%08x\n", addr);
+ assert(false);
+ }
}
#endif