diff options
| author | bd <bdunahu@operationnull.com> | 2025-03-21 16:06:07 -0400 | 
|---|---|---|
| committer | bd <bdunahu@operationnull.com> | 2025-03-21 16:06:07 -0400 | 
| commit | 431cba9a4bcef0e0ae047d45a7f3d98e601e30ed (patch) | |
| tree | 178eefa29cd9ac5ba88efd989364e1bbf591189e /inc | |
| parent | 41a6a317964c7ff09a98e9bbdb1995ac46937ff3 (diff) | |
Small cleanups to up a lot of inplementation details
Diffstat (limited to 'inc')
| -rw-r--r-- | inc/cache.h | 9 | ||||
| -rw-r--r-- | inc/dram.h | 21 | ||||
| -rw-r--r-- | inc/utils.h | 14 | 
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. @@ -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 */ | 
