diff options
| author | Alejandro Soto <alejandro@34project.org> | 2022-11-20 13:42:59 -0600 |
|---|---|---|
| committer | Alejandro Soto <alejandro@34project.org> | 2022-11-20 13:42:59 -0600 |
| commit | df69f7b7c73be01968ba767ab112b227533bbd70 (patch) | |
| tree | 4375b9ecf321a3ef0d1746e17237c03dd668a8d8 /tb/avalon.impl.hpp | |
| parent | 6ebe514137fa41ac015122da4dcaba56af84e531 (diff) | |
Add tick, bail signals to simulated Avalon slaves
Diffstat (limited to '')
| -rw-r--r-- | tb/avalon.impl.hpp | 22 |
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; |
