#ifndef TALLER_MEM_HPP #define TALLER_MEM_HPP #include #include #include "avalon.hpp" namespace taller::avalon { template class mem : public slave { public: mem(std::uint32_t base, std::uint32_t size); virtual bool read(std::uint32_t addr, std::uint32_t &data) final override; virtual bool write ( std::uint32_t addr, std::uint32_t data, unsigned byte_enable = 0b1111 ) final override; template void load(F loader, std::size_t offset = 0); private: std::unique_ptr block; unsigned count = 0; bool ready() noexcept; }; } #include "mem.impl.hpp" #endif