summaryrefslogtreecommitdiff
path: root/src/sim
diff options
context:
space:
mode:
authorSiddarth Suresh <155843085+SiddarthSuresh98@users.noreply.github.com>2025-03-25 12:43:05 -0400
committerGitHub <noreply@github.com>2025-03-25 12:43:05 -0400
commit9eeea1ab8bf4eb17e5da46d57a6c1d455a0a262e (patch)
tree77f1cccbf29b05493ca5d0e24cbebc606cd90008 /src/sim
parent7ad79d8430ee22b0180e7077fe727153333e47f6 (diff)
parent9a0b9ed3d77bde99b1f1ba341850117c188f0156 (diff)
Merge pull request #35 from bdunahu/bdunahu
Add skeleton classes for 5 major pipeline stages Agree with different classes for each stage
Diffstat (limited to 'src/sim')
-rw-r--r--src/sim/controller.cc28
-rw-r--r--src/sim/ex.cc11
-rw-r--r--src/sim/id.cc11
-rw-r--r--src/sim/if.cc15
-rw-r--r--src/sim/mm.cc11
-rw-r--r--src/sim/stage.cc4
-rw-r--r--src/sim/wb.cc11
7 files changed, 81 insertions, 10 deletions
diff --git a/src/sim/controller.cc b/src/sim/controller.cc
index 8d48dc9..93fd0e0 100644
--- a/src/sim/controller.cc
+++ b/src/sim/controller.cc
@@ -1,7 +1,14 @@
#include "controller.h"
+#include "ex.h"
+#include "id.h"
+#include "if.h"
+#include "mm.h"
+#include "response.h"
#include "storage.h"
+#include "wb.h"
Controller::Controller(Storage *storage, bool is_pipelined)
+ : Stage(nullptr)
{
this->clock_cycle = 0;
this->storage = storage;
@@ -9,12 +16,14 @@ Controller::Controller(Storage *storage, bool is_pipelined)
this->pc = 0x0;
this->gprs = {0};
- // setup the other pipeline stages
- this->next = nullptr;
+ IF *f = new IF(nullptr);
+ ID *d = new ID(f);
+ EX *e = new EX(d);
+ MM *m = new MM(e);
+ WB *w = new WB(m);
+ this->next = w;
}
-Controller::~Controller() { ; }
-
void Controller::run_for(int number)
{
int i;
@@ -25,14 +34,13 @@ void Controller::run_for(int number)
int Controller::get_clock_cycle() { return this->clock_cycle; }
-std::array<int, GPR_NUM> Controller::get_gprs() {
- return this->gprs;
-}
+std::array<int, GPR_NUM> Controller::get_gprs() { return this->gprs; }
int Controller::get_pc() { return this->pc; }
-void Controller::advance() {
- ;
- // this->next->advance()
+Response Controller::advance()
+{
+ this->next->advance();
++this->clock_cycle;
+ return OK;
}
diff --git a/src/sim/ex.cc b/src/sim/ex.cc
new file mode 100644
index 0000000..f286713
--- /dev/null
+++ b/src/sim/ex.cc
@@ -0,0 +1,11 @@
+#include "ex.h"
+#include "logger.h"
+#include "response.h"
+
+static Logger *global_log = Logger::getInstance();
+
+Response EX::advance()
+{
+ global_log->log(INFO, "hello from execute!");
+ return OK;
+}
diff --git a/src/sim/id.cc b/src/sim/id.cc
new file mode 100644
index 0000000..56d9549
--- /dev/null
+++ b/src/sim/id.cc
@@ -0,0 +1,11 @@
+#include "id.h"
+#include "logger.h"
+#include "response.h"
+
+static Logger *global_log = Logger::getInstance();
+
+Response ID::advance()
+{
+ global_log->log(INFO, "hello from decode!");
+ return OK;
+}
diff --git a/src/sim/if.cc b/src/sim/if.cc
new file mode 100644
index 0000000..1026072
--- /dev/null
+++ b/src/sim/if.cc
@@ -0,0 +1,15 @@
+#include "if.h"
+#include "logger.h"
+#include "response.h"
+
+static Logger *global_log = Logger::getInstance();
+
+Response IF::advance()
+{
+ global_log->log(INFO, "hello from fetch!");
+ return OK;
+}
+
+
+
+
diff --git a/src/sim/mm.cc b/src/sim/mm.cc
new file mode 100644
index 0000000..be774ad
--- /dev/null
+++ b/src/sim/mm.cc
@@ -0,0 +1,11 @@
+#include "mm.h"
+#include "logger.h"
+#include "response.h"
+
+static Logger *global_log = Logger::getInstance();
+
+Response MM::advance()
+{
+ global_log->log(INFO, "hello from memory!");
+ return OK;
+}
diff --git a/src/sim/stage.cc b/src/sim/stage.cc
index 7d3a678..399743a 100644
--- a/src/sim/stage.cc
+++ b/src/sim/stage.cc
@@ -1,5 +1,9 @@
#include "stage.h"
+Stage::Stage(Stage *next) {
+ this->next = next;
+}
+
std::array<int, GPR_NUM> Stage::gprs;
int Stage::pc;
Storage *Stage::storage;
diff --git a/src/sim/wb.cc b/src/sim/wb.cc
new file mode 100644
index 0000000..83b1c3c
--- /dev/null
+++ b/src/sim/wb.cc
@@ -0,0 +1,11 @@
+#include "wb.h"
+#include "logger.h"
+#include "response.h"
+
+static Logger *global_log = Logger::getInstance();
+
+Response WB::advance()
+{
+ global_log->log(INFO, "hello from write back!");
+ return OK;
+}