summaryrefslogtreecommitdiff
path: root/tb/avalon.impl.hpp
diff options
context:
space:
mode:
authorAlejandro Soto <alejandro@34project.org>2022-11-20 13:42:59 -0600
committerAlejandro Soto <alejandro@34project.org>2022-11-20 13:42:59 -0600
commitdf69f7b7c73be01968ba767ab112b227533bbd70 (patch)
tree4375b9ecf321a3ef0d1746e17237c03dd668a8d8 /tb/avalon.impl.hpp
parent6ebe514137fa41ac015122da4dcaba56af84e531 (diff)
Add tick, bail signals to simulated Avalon slaves
Diffstat (limited to '')
-rw-r--r--tb/avalon.impl.hpp22
1 files changed, 21 insertions, 1 deletions
diff --git a/tb/avalon.impl.hpp b/tb/avalon.impl.hpp
index 3173af8..5ba514f 100644
--- a/tb/avalon.impl.hpp
+++ b/tb/avalon.impl.hpp
@@ -52,7 +52,14 @@ namespace taller::avalon
}
return true;
- } else if(!active)
+ }
+
+ for(auto &binding : devices)
+ {
+ binding.dev.tick();
+ }
+
+ if(!active)
{
avl_address = plat.avl_address;
avl_read = plat.avl_read;
@@ -77,6 +84,8 @@ namespace taller::avalon
if(!active)
{
+ bail();
+
const char *op = avl_read ? "read" : "write";
fprintf(stderr, "[avl] attempt to %s memory hole at 0x%08x\n", op, avl_address);
return false;
@@ -84,6 +93,8 @@ namespace taller::avalon
if(avl_address & active->word_mask())
{
+ bail();
+
fprintf(stderr, "[avl] unaligned address: 0x%08x\n", avl_address);
return false;
}
@@ -105,6 +116,15 @@ namespace taller::avalon
}
template<class Platform>
+ void interconnect<Platform>::bail() noexcept
+ {
+ for(auto &binding : devices)
+ {
+ binding.dev.bail();
+ }
+ }
+
+ template<class Platform>
std::uint32_t interconnect<Platform>::dump(std::uint32_t addr)
{
std::uint32_t avl_address = addr << 2;