From ec152d814af82524cf68df95d7f06b9b70c0d0d0 Mon Sep 17 00:00:00 2001 From: Alejandro Soto Date: Sat, 15 Oct 2022 19:31:55 -0600 Subject: Rework bus architecture --- tb/avalon.impl.hpp | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) (limited to 'tb/avalon.impl.hpp') 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 void interconnect::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; - } } } -- cgit v1.2.3