diff options
| author | Alejandro Soto <alejandro@34project.org> | 2023-10-05 06:31:27 -0600 |
|---|---|---|
| committer | Alejandro Soto <alejandro@34project.org> | 2023-10-05 13:07:57 -0600 |
| commit | e2d82e8e18ebddc78a0c187c4b7501b9f3aaa9c5 (patch) | |
| tree | eb72ed72e33f3a5ef3d9843ddcff624156177647 /tb/mem.hpp | |
| parent | 59caca686d4d7798b617ee2a9f9d4c5d1d27b8ff (diff) | |
tb: move most C++ source files to tb/top/conspiracion
Diffstat (limited to 'tb/mem.hpp')
| -rw-r--r-- | tb/mem.hpp | 55 |
1 files changed, 0 insertions, 55 deletions
diff --git a/tb/mem.hpp b/tb/mem.hpp deleted file mode 100644 index abcf386..0000000 --- a/tb/mem.hpp +++ /dev/null @@ -1,55 +0,0 @@ -#ifndef TALLER_MEM_HPP -#define TALLER_MEM_HPP - -#include <cstdint> -#include <memory> - -#include "avalon.hpp" - -namespace taller::avalon -{ - class mem : public slave - { - public: - mem(std::uint32_t base, std::uint32_t size); - - virtual bool read_line - ( - std::uint32_t addr, line &data, unsigned byte_enable - ) final override; - - virtual bool write_line - ( - std::uint32_t addr, const line &data, unsigned byte_enable - ) final override; - - template<typename F> - void load(F loader, std::size_t offset = 0); - - private: - std::unique_ptr<line[]> block; - unsigned count = 0; - - bool ready() noexcept; - }; - - template<typename F> - void mem::load(F loader, std::size_t offset) - { - const auto base = base_address(); - const auto bits = 4; - - std::size_t size = address_span(); - std::size_t addr = base_address() + offset; - - while (addr >= base && addr < base + size) { - std::size_t read = loader(&block[(addr - base) >> bits], (base + size - addr) >> bits); - if (!read) - break; - - addr += read << bits; - } - } -} - -#endif |
