From d743c48b821bad11943b77bdc9a5d9d975fd8cb0 Mon Sep 17 00:00:00 2001 From: Alejandro Soto Date: Sun, 18 Sep 2022 00:39:21 -0600 Subject: Add Avalon-MM emulator --- tb/avalon.hpp | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 tb/avalon.hpp (limited to 'tb/avalon.hpp') diff --git a/tb/avalon.hpp b/tb/avalon.hpp new file mode 100644 index 0000000..38c8792 --- /dev/null +++ b/tb/avalon.hpp @@ -0,0 +1,46 @@ +#ifndef AVALON_HPP +#define AVALON_HPP + +#include +#include + +namespace taller::avalon +{ + class slave + { + public: + virtual std::uint32_t base_address() = 0; + virtual std::uint32_t address_mask() = 0; + + virtual bool read(std::uint32_t addr, std::uint32_t &data) = 0; + virtual bool write(std::uint32_t addr, std::uint32_t data, unsigned byte_enable) = 0; + }; + + template + class interconnect + { + public: + inline interconnect(Platform &plat) noexcept + : plat(plat) + {} + + void tick(); + void attach(slave &dev); + + private: + struct binding + { + std::uint32_t base; + std::uint32_t mask; + slave &dev; + }; + + Platform &plat; + slave* active = nullptr; + std::vector devices; + }; +} + +#include "avalon.impl.hpp" + +#endif -- cgit v1.2.3