From 2c424d29fd813b1fbef3b07595713611a1684903 Mon Sep 17 00:00:00 2001 From: bd Date: Sat, 8 Mar 2025 12:51:01 -0500 Subject: enforce single unit per clock cycle, order to serve storage requests --- inc/storage.h | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) (limited to 'inc/storage.h') diff --git a/inc/storage.h b/inc/storage.h index a38f17d..95b6749 100644 --- a/inc/storage.h +++ b/inc/storage.h @@ -2,18 +2,35 @@ #define STORAGE_H #include "definitions.h" #include "response.h" +#include #include -#include +#include #include enum Accessor { MEM, FETCH, L1CACHE, - IDLE, SIDE, }; +/** + * Wrapper class for std::deque. + * + * Implements a deque that does not push duplicate objects. + */ +template class Deque : public std::deque +{ + public: + using std::deque::deque; + + void push_back(const T &value) + { + if (std::find(this->begin(), this->end(), value) == this->end()) + std::deque::push_back(value); + } +}; + class Storage { public: @@ -41,6 +58,10 @@ class Storage * is a word. */ std::vector> view(int base, int lines); + /** + * Advances to the next job if the current job is completed. + */ + void resolve(); protected: /** @@ -62,11 +83,11 @@ class Storage */ int delay; /** - * The accessor currently being serviced. + * The accessors currently being serviced, in first come first serve order. */ - enum Accessor servicing; + Deque deque; /** - * The number of cycles until the currently request is completed. + * The number of cycles until the current request is completed. */ int wait_time; }; -- cgit v1.2.3