From 0c63c46e31642d0102542a745af6b445a9d22b3b Mon Sep 17 00:00:00 2001 From: Alejandro Soto Date: Tue, 13 Dec 2022 21:43:25 -0600 Subject: Implement interrupt controller --- tb/avalon.impl.hpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'tb/avalon.impl.hpp') diff --git a/tb/avalon.impl.hpp b/tb/avalon.impl.hpp index 6f4bfb9..e04c7b0 100644 --- a/tb/avalon.impl.hpp +++ b/tb/avalon.impl.hpp @@ -21,17 +21,29 @@ namespace taller::avalon devices.push_back(binding { base, mask, dev }); } + template + void interconnect::attach_intc(interrupt_controller &intc) + { + assert(root_intc == nullptr); + + attach(intc.as_slave()); + root_intc = &intc; + } + template bool interconnect::tick(bool clk) { if(!plat.reset_reset_n) [[unlikely]] { active = nullptr; + plat.avl_irq = 0; + avl_read = false; avl_write = false; avl_address = 0; avl_writedata = 0; avl_byteenable = 0; + return true; } @@ -59,6 +71,11 @@ namespace taller::avalon binding.dev.tick(); } + if(root_intc) + { + plat.avl_irq = root_intc->irq(); + } + if(!active) { avl_address = plat.avl_address; -- cgit v1.2.3