diff options
| author | Alejandro Soto <alejandro@34project.org> | 2022-10-15 19:31:55 -0600 |
|---|---|---|
| committer | Alejandro Soto <alejandro@34project.org> | 2022-10-15 19:31:55 -0600 |
| commit | ec152d814af82524cf68df95d7f06b9b70c0d0d0 (patch) | |
| tree | 417ad3c693f0618dd9609ffef6028fa0a955fee2 /tb | |
| parent | 7d95ff01bcd8c42efe118fd1bddaabfca0e937eb (diff) | |
Rework bus architecture
Diffstat (limited to 'tb')
| -rw-r--r-- | tb/avalon.impl.hpp | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/tb/avalon.impl.hpp b/tb/avalon.impl.hpp index cc371a7..60f36a4 100644 --- a/tb/avalon.impl.hpp +++ b/tb/avalon.impl.hpp @@ -24,18 +24,33 @@ namespace taller::avalon template<class Platform> void interconnect<Platform>::tick(bool clk) { + if(active) + { + assert(avl_address == plat.avl_address); + assert(avl_read == plat.avl_read); + assert(avl_write == plat.avl_write); + assert(avl_writedata == plat.avl_writedata); + assert(avl_byteenable == plat.avl_byteenable); + } + if(!clk) { + if(!plat.avl_waitrequest) + { + active = nullptr; + } + + return; + } else if(!active) + { avl_address = plat.avl_address; avl_read = plat.avl_read; avl_write = plat.avl_write; avl_writedata = plat.avl_writedata; avl_byteenable = plat.avl_byteenable; - return; - } - if(!active) - { + assert(!avl_read || !avl_write); + if(avl_address & 0b11) { fprintf(stderr, "[avl] unaligned address: 0x%08x\n", avl_address); @@ -59,7 +74,6 @@ namespace taller::avalon } } - assert(!avl_read || !avl_write); auto pos = (avl_address & ~active->address_mask()) >> 2; if(avl_read) @@ -69,11 +83,6 @@ namespace taller::avalon { plat.avl_waitrequest = !active->write(pos, avl_writedata, avl_byteenable); } - - if(!plat.avl_waitrequest) - { - active = nullptr; - } } } |
