summaryrefslogtreecommitdiff
path: root/inc
diff options
context:
space:
mode:
Diffstat (limited to 'inc')
-rw-r--r--inc/cache.h9
-rw-r--r--inc/dram.h21
-rw-r--r--inc/utils.h14
3 files changed, 29 insertions, 15 deletions
diff --git a/inc/cache.h b/inc/cache.h
index 3b16ca1..a5fa16e 100644
--- a/inc/cache.h
+++ b/inc/cache.h
@@ -42,6 +42,15 @@ class Cache : public Storage
private:
/**
+ * Returns OK if `accessor` is allowed to complete its request this cycle.
+ * Handles cache misses, wait times, and setting the current accessor this
+ * storage is serving.
+ * @param the accessor asking for a resource
+ * @return whether or not the access can be carried out this function call.
+ */
+ Response is_access_cleared(Accessor accessor, int address);
+ /**
+ * Helper for access_cleared.
* Fetches `address` from a lower level of storage if it is not already
* present. If it is not, temporarily sets the is_blocked attribute of this
* cache level to true, and the victim line is chosen/written back.
diff --git a/inc/dram.h b/inc/dram.h
index c7f927a..ff2c298 100644
--- a/inc/dram.h
+++ b/inc/dram.h
@@ -32,22 +32,13 @@ class Dram : public Storage
private:
/**
- * Helper for `write` a word
+ * Returns OK if `accessor` is allowed to complete its request this cycle.
+ * Handles wait times, side door, and setting the current accessor this
+ * storage is serving.
+ * @param the accessor asking for a resource
+ * @return whether or not the access can be carried out this function call.
*/
- void do_write(signed int, int);
- /**
- * Helper for writing a line.
- */
- void
- do_write_line(std::array<signed int, LINE_SIZE> data_line, int address);
- /**
- * Helper for `read` a line
- */
- void do_read(std::array<signed int, LINE_SIZE> &data_line, int address);
- /**
- * Helper for reading a word.
- */
- void do_read_word(signed int &data, int address);
+ Response is_access_cleared(Accessor accessor);
};
std::ostream &operator<<(std::ostream &os, const Dram &d);
diff --git a/inc/utils.h b/inc/utils.h
index aa8831b..df8d374 100644
--- a/inc/utils.h
+++ b/inc/utils.h
@@ -20,6 +20,20 @@ void get_bit_fields(int address, int *tag, int *index, int *offset);
*/
const std::string string_format(const char *const zcFormat, ...);
+/**
+ * Given `address`, returns an address that is within the current memory size
+ * using a clean wrap.
+ * @param an address
+ * @return an address guaranteed to be within range.
+ */
int wrap_address(int address);
+/**
+ * Given `address`, returns the line and word it is in.
+ * @param an address
+ * @param the line (row) `address` is in
+ * @param the word (column) `address` corresponds to
+ */
+void get_memory_index(int address, int &line, int &word);
+
#endif /* UTILS_H_INCLUDED */