diff options
author | bd <bdunaisky@umass.edu> | 2025-04-12 01:38:39 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-04-12 01:38:39 +0000 |
commit | be2bc108dc112ae7e21d4a77f7bcbfac88d6fcd4 (patch) | |
tree | 08549aa6c7cbae114958df62f92c9e60eb5f114c /inc/storage.h | |
parent | 101f0facf8002907ca6e19faabfdcf472c0c3152 (diff) | |
parent | 1fb7a9bd5eb41e87871bcbb3423caaabdd8ce1d9 (diff) |
Merge pull request #1 from bdunahu/bdunahu
First part of storage rework (see description)
Diffstat (limited to 'inc/storage.h')
-rw-r--r-- | inc/storage.h | 58 |
1 files changed, 21 insertions, 37 deletions
diff --git a/inc/storage.h b/inc/storage.h index d6fa094..81194da 100644 --- a/inc/storage.h +++ b/inc/storage.h @@ -1,8 +1,6 @@ #ifndef STORAGE_H #define STORAGE_H -#include "accessor.h" #include "definitions.h" -#include "response.h" #include <algorithm> #include <array> #include <map> @@ -11,6 +9,12 @@ class Storage { public: + /** + * Constructor. + * @param The time an access to this storage device takes. + * @return A newly allocated storage object. + */ + Storage(int delay); virtual ~Storage() = default; /** @@ -18,34 +22,26 @@ class Storage * @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 request. - */ - virtual Response write_word(Accessor accessor, signed int data, int address) = 0; - - /** - * Write a data line to given address in this level of storage + * @return 1 if the request was completed, 0 otherwise. */ - virtual Response write_line(Accessor accessor, std::array<signed int, LINE_SIZE> data_line, int address) = 0; + virtual int + write_word(void *id, signed int data, int address) = 0; + virtual int + write_line(void *id, std::array<signed int, LINE_SIZE> data_line, int address) = 0; - /** * Get the data line at `address`. * @param the source making the request. * @param the address being accessed. - * @return a status code reflecting the state of the request, and the - * data being returned. + * @param the data being returned + * @return 1 if the request was completed, 0 otherwise */ - virtual Response read_line( - Accessor accessor, - int address, - std::array<signed int, LINE_SIZE> &data) = 0; + virtual int + read_line(void *id, int address, std::array<signed int, LINE_SIZE> &data) = 0; + virtual int + read_word(void *id, int address, signed int &data) = 0; /** - * Read a word from given address in this level of storage - */ - virtual Response read_word(Accessor accessor, int address, signed int &data) = 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. @@ -55,13 +51,6 @@ class Storage std::vector<std::array<signed int, LINE_SIZE>> view(int base, int lines) const; - /** - * Getter for lower attribute. - * TODO this doesn't seem like good object-oriented practice. - * @return this->lower - */ - Storage *get_lower(); - protected: /** * The data currently stored in this level of storage. @@ -73,23 +62,18 @@ class Storage */ Storage *lower; /** + * The id currently being serviced. + */ + void *current_request; + /** * The number of clock cycles this level of storage takes to complete * requests. */ int delay; /** - * The accessor currently being serviced. - */ - Accessor requester; - /** * The number of cycles until the current request is completed. */ int wait_time; - /** - * A flag indicating whether this level of storage is currently waiting for - * a lower level. - */ - int is_waiting; }; #endif /* STORAGE_H_INCLUDED */ |