diff options
author | bd <bdunaisky@umass.edu> | 2025-03-06 21:28:20 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-03-06 21:28:20 +0000 |
commit | 0983f834b66f046c5468814fa86af3f4a3c215b6 (patch) | |
tree | af137790ab40290d1cc4e83f3261370c591512bc /inc/storage.h | |
parent | e3369aad54bce775e2951e71618eb2cbb17972f9 (diff) | |
parent | e296a3a6ab782cb80b7091324b41bb78db6d3906 (diff) |
Merge pull request #13 from bdunahu/bdunahu
constructors + method declarations for cache, dram, reponse, storage
Diffstat (limited to 'inc/storage.h')
-rw-r--r-- | inc/storage.h | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/inc/storage.h b/inc/storage.h new file mode 100644 index 0000000..1e512e2 --- /dev/null +++ b/inc/storage.h @@ -0,0 +1,59 @@ +#ifndef STORAGE_H +#define STORAGE_H +#include "response.h" +#include <array> +#include <vector> + +enum Accessor { + MEMORY, + FETCH, + L1CACHE, +}; + +class Storage +{ + public: + /** + * Write `data` into `address`. + * @param the source making the request. + * @param the data (hexadecimal) to write. + * @param the address to write to. + * @return a status code reflecting the state of the storage level. + */ + virtual Response * + write(Accessor accessor, signed int data, int address) = 0; + /** + * Get the data at `address`. + * @param the source making the request. + * @param the address being accessed. + * @return a status code reflecting the state of the storage level, and the + * data being returned. + */ + virtual Response *read(Accessor accessor, int address) = 0; + /** + * Sidedoor view of `lines` of memory starting at `base`. + * @param The base line to start getting memory from. + * @param The amount of lines to fetch. + * @return A matrix of data values, where each row is a line and each column + * is a word. + */ + virtual int **view(int base, int lines) = 0; + + protected: + /** + * The data currently stored in this level of storage. + */ + std::vector<std::array<unsigned int, 4>> *data; + /** + * A pointer to the next lowest level of storage. + * Used in case of cache misses. + */ + Storage *lower; + /** + * The number of clock cycles this level of storage takes to complete + * requests. + */ + int delay; +}; + +#endif /* STORAGE_H_INCLUDED */ |