diff options
author | bd <bdunaisky@umass.edu> | 2025-03-23 17:47:34 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-03-23 17:47:34 +0000 |
commit | 877aa98855fad77ef93a8c9f5a5e8191fbb9e699 (patch) | |
tree | 75d92632f6e9b2f112e45791af9dc01389039557 /inc/controller.h | |
parent | 8a0a483c0e63fd2be6f514a20ae7309e2e768c94 (diff) | |
parent | df2391b70b89f15be7932d18fa77f950fc452f31 (diff) |
Merge pull request #30 from bdunahu/bdunahu
Add controller.h, implementation and tests.
Diffstat (limited to 'inc/controller.h')
-rw-r--r-- | inc/controller.h | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/inc/controller.h b/inc/controller.h new file mode 100644 index 0000000..0cafe10 --- /dev/null +++ b/inc/controller.h @@ -0,0 +1,50 @@ +#ifndef CONTROLLER_H +#define CONTROLLER_H +#include "stage.h" + +/** + * Houses the clock, and acts as the main API to the GUI. + */ +class Controller : public Stage +{ + public: + /** + * Constructor. + * @param The storage object to use. + * @param Whether or not efficient pipelining will be used. + * @return A newly allocated controller object. + */ + Controller(Storage *storage, bool is_pipelined); + ~Controller(); + + /** + * Direct the simulator to run for `number` clock cycles. + * @param the number of clock cycles to run for. + */ + void run_for(int number); + /** + * @return the current clock cycle. + */ + int get_clock_cycle(); + /** + * @return a copy of gprs. + */ + std::array<int, GPR_NUM> get_gprs(); + /** + * @return the pc. + */ + int get_pc(); + + private: + /** + * Helper for run_for. + * Advances the simulation by a single cycle. + */ + void advance(); + /** + * The current clock cycle. + */ + int clock_cycle; +}; + +#endif /* CONTROLLER_H_INCLUDED */ |