summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbd <bdunahu@operationnull.com>2025-04-25 21:12:58 -0400
committerbd <bdunahu@operationnull.com>2025-04-25 21:12:58 -0400
commita3528b83dd10fa9cdf7ef5635f615c1b295f3f4c (patch)
treed4b3836a433dcb4e5a9615a8a1477b2901358451
parent9ef2928aefd0983c7b3b04023c0b958b86dd77ff (diff)
Pass full DTO to GUI
-rw-r--r--gui/gui.cc59
-rw-r--r--gui/gui.h10
-rw-r--r--gui/worker.cc10
-rw-r--r--gui/worker.h10
-rw-r--r--inc/id.h2
-rw-r--r--inc/if.h2
-rw-r--r--inc/stage.h15
-rw-r--r--src/id.cc10
-rw-r--r--src/if.cc9
-rw-r--r--src/stage.cc13
10 files changed, 53 insertions, 87 deletions
diff --git a/gui/gui.cc b/gui/gui.cc
index 496a443..bf9e6cf 100644
--- a/gui/gui.cc
+++ b/gui/gui.cc
@@ -169,36 +169,36 @@ void GUI::on_worker_refresh_gui(int cycles, int pc)
ui->cycle_counter->set_value(cycles);
}
-void GUI::onWorkerFetchInfo(const std::vector<int> info)
+void GUI::onWorkerFetchInfo(const InstrDTO *i)
{
- if (!info.empty()) {
- ui->fetch_squashed->setText(QString::number(info[0]));
- ui->fetch_bits->set_value(info[1]);
+ if (i) {
+ ui->fetch_squashed->setText(QString::number(i->is_squashed));
+ ui->fetch_bits->set_value(i->slot_A);
} else {
ui->fetch_squashed->clear();
ui->fetch_bits->clear();
}
}
-void GUI::onWorkerDecodeInfo(const std::vector<int> info)
+void GUI::onWorkerDecodeInfo(const InstrDTO *i)
{
- if (!info.empty()) {
- ui->decode_squashed->setText(QString::number(info[0]));
- ui->decode_bits->set_value(info[1]);
+ if (i) {
+ ui->decode_squashed->setText(QString::number(i->is_squashed));
+ ui->decode_bits->set_value(i->slot_A);
} else {
ui->decode_squashed->clear();
ui->decode_bits->clear();
}
}
-void GUI::onWorkerExecuteInfo(const std::vector<int> info)
+void GUI::onWorkerExecuteInfo(const InstrDTO *i)
{
- if (!info.empty()) {
- ui->execute_mnemonic->setText(mnemonicToString((Mnemonic)info[0]));
- ui->execute_squashed->setText(QString::number(info[1]));
- ui->execute_s1->set_value(info[2]);
- ui->execute_s2->set_value(info[3]);
- ui->execute_s3->set_value(info[4]);
+ if (i) {
+ ui->execute_mnemonic->setText(mnemonicToString(i->mnemonic));
+ ui->execute_squashed->setText(QString::number(i->is_squashed));
+ ui->execute_s1->set_value(i->operands.integer.slot_one);
+ ui->execute_s2->set_value(i->operands.integer.slot_two);
+ ui->execute_s3->set_value(i->operands.integer.slot_three);
} else {
ui->execute_mnemonic->clear();
ui->execute_squashed->clear();
@@ -208,15 +208,14 @@ void GUI::onWorkerExecuteInfo(const std::vector<int> info)
}
}
-void GUI::onWorkerMemoryInfo(const std::vector<int> info)
+void GUI::onWorkerMemoryInfo(const InstrDTO *i)
{
- if (!info.empty()) {
- std::cout << "this " << info[3] << std::endl;
- ui->memory_mnemonic->setText(mnemonicToString((Mnemonic)info[0]));
- ui->memory_squashed->setText(QString::number(info[1]));
- ui->memory_s1->set_value(info[2]);
- ui->memory_s2->set_value(info[3]);
- ui->memory_s3->set_value(info[4]);
+ if (i) {
+ ui->memory_mnemonic->setText(mnemonicToString(i->mnemonic));
+ ui->memory_squashed->setText(QString::number(i->is_squashed));
+ ui->memory_s1->set_value(i->operands.integer.slot_one);
+ ui->memory_s2->set_value(i->operands.integer.slot_two);
+ ui->memory_s3->set_value(i->operands.integer.slot_three);
} else {
ui->memory_mnemonic->clear();
ui->memory_squashed->clear();
@@ -226,14 +225,14 @@ void GUI::onWorkerMemoryInfo(const std::vector<int> info)
}
}
-void GUI::onWorkerWriteBackInfo(const std::vector<int> info)
+void GUI::onWorkerWriteBackInfo(const InstrDTO *i)
{
- if (!info.empty()) {
- ui->write_mnemonic->setText(mnemonicToString((Mnemonic)info[0]));
- ui->write_squashed->setText(QString::number(info[1]));
- ui->write_s1->set_value(info[2]);
- ui->write_s2->set_value(info[3]);
- ui->write_s3->set_value(info[4]);
+ if (i) {
+ ui->write_mnemonic->setText(mnemonicToString(i->mnemonic));
+ ui->write_squashed->setText(QString::number(i->is_squashed));
+ ui->write_s1->set_value(i->operands.integer.slot_one);
+ ui->write_s2->set_value(i->operands.integer.slot_two);
+ ui->write_s3->set_value(i->operands.integer.slot_three);
} else {
ui->write_mnemonic->clear();
ui->write_squashed->clear();
diff --git a/gui/gui.h b/gui/gui.h
index 7b03f75..b3a3110 100644
--- a/gui/gui.h
+++ b/gui/gui.h
@@ -57,15 +57,15 @@ class GUI : public QMainWindow
private slots:
void on_worker_refresh_gui(int value, int pc);
- void onWorkerFetchInfo(const std::vector<int> info);
+ void onWorkerFetchInfo(const InstrDTO *);
- void onWorkerDecodeInfo(const std::vector<int> info);
+ void onWorkerDecodeInfo(const InstrDTO *);
- void onWorkerExecuteInfo(const std::vector<int> info);
+ void onWorkerExecuteInfo(const InstrDTO *);
- void onWorkerMemoryInfo(const std::vector<int> info);
+ void onWorkerMemoryInfo(const InstrDTO *);
- void onWorkerWriteBackInfo(const std::vector<int> info);
+ void onWorkerWriteBackInfo(const InstrDTO *);
void onWorkerShowStorage(
const std::vector<std::array<signed int, LINE_SIZE>> data, int i);
diff --git a/gui/worker.cc b/gui/worker.cc
index 2652fce..203f907 100644
--- a/gui/worker.cc
+++ b/gui/worker.cc
@@ -89,10 +89,10 @@ void Worker::runSteps(int steps)
emit storage(this->s.at(i - 1)->view(0, 1 << this->size_inc * i), i + 1);
emit clock_cycles(this->ct->get_clock_cycle(), this->ct->get_pc());
- emit if_info(this->if_stage->stage_info());
- emit id_info(this->id_stage->stage_info());
- emit ex_info(this->ex_stage->stage_info());
- emit mm_info(this->mm_stage->stage_info());
- emit wb_info(this->wb_stage->stage_info());
+ emit if_info(this->if_stage->get_instr());
+ emit id_info(this->id_stage->get_instr());
+ emit ex_info(this->ex_stage->get_instr());
+ emit mm_info(this->mm_stage->get_instr());
+ emit wb_info(this->wb_stage->get_instr());
this->ct_mutex.unlock();
}
diff --git a/gui/worker.h b/gui/worker.h
index 95c81d5..072263a 100644
--- a/gui/worker.h
+++ b/gui/worker.h
@@ -72,11 +72,11 @@ class Worker : public QObject
void
storage(const std::vector<std::array<signed int, LINE_SIZE>> data, int i);
void register_storage(const std::array<int, GPR_NUM> data);
- void if_info(const std::vector<int> info);
- void id_info(const std::vector<int> info);
- void ex_info(const std::vector<int> info);
- void mm_info(const std::vector<int> info);
- void wb_info(const std::vector<int> info);
+ void if_info(const InstrDTO *);
+ void id_info(const InstrDTO *);
+ void ex_info(const InstrDTO *);
+ void mm_info(const InstrDTO *);
+ void wb_info(const InstrDTO *);
void finished();
};
diff --git a/inc/id.h b/inc/id.h
index 39485b6..aafe2e5 100644
--- a/inc/id.h
+++ b/inc/id.h
@@ -50,8 +50,6 @@ class ID : public Stage
*/
void write_guard(signed int &r);
- std::vector<int> stage_info() override;
-
private:
/**
* Helper for `get_instr_fields`
diff --git a/inc/if.h b/inc/if.h
index c374145..f0eb6e2 100644
--- a/inc/if.h
+++ b/inc/if.h
@@ -28,8 +28,6 @@ class IF : public Stage
InstrDTO *advance(Response p) override;
- std::vector<int> stage_info() override;
-
private:
void advance_helper() override;
};
diff --git a/inc/stage.h b/inc/stage.h
index 7dcb7b4..16f1235 100644
--- a/inc/stage.h
+++ b/inc/stage.h
@@ -53,8 +53,14 @@ class Stage
* Must set the status to READY when the current instruction is evicted..
*/
virtual InstrDTO *advance(Response p);
-
- virtual std::vector<int> stage_info();
+ /**
+ * @return the current instruction.
+ */
+ InstrDTO *get_instr();
+ /**
+ * Squashes the pipeline.
+ */
+ void squash();
/* The following methods are made public so that they may be tested, and are
* not to be called from outside classes during standard execution.
@@ -73,11 +79,6 @@ class Stage
void set_condition(CC c, bool v);
/**
- * Squashes the pipeline.
- */
- void squash();
-
- /**
* The set of registers currently checked out.
*/
static std::deque<signed int> checked_out;
diff --git a/src/id.cc b/src/id.cc
index d8368c8..d2a8f02 100644
--- a/src/id.cc
+++ b/src/id.cc
@@ -211,13 +211,3 @@ void ID::decode_J_type(
}
}
-
-std::vector<int> ID::stage_info()
-{
- std::vector<int> info;
- if (this->curr_instr) {
- info.push_back(this->curr_instr->is_squashed);
- info.push_back(this->curr_instr->slot_A);
- }
- return info;
-}
diff --git a/src/if.cc b/src/if.cc
index 5f07ee2..0f622d4 100644
--- a/src/if.cc
+++ b/src/if.cc
@@ -37,15 +37,6 @@ InstrDTO *IF::advance(Response p)
return r;
}
-std::vector<int> IF::stage_info() {
- std::vector<int> info;
- if(this->curr_instr){
- info.push_back(this->curr_instr->is_squashed);
- info.push_back(this->curr_instr->slot_A);
- }
- return info;
-}
-
void IF::advance_helper()
{
Response r;
diff --git a/src/stage.cc b/src/stage.cc
index 55756b6..4efe2fe 100644
--- a/src/stage.cc
+++ b/src/stage.cc
@@ -65,18 +65,7 @@ InstrDTO *Stage::advance(Response p)
return r;
}
-std::vector<int> Stage::stage_info()
-{
- std::vector<int> info;
- if (this->curr_instr) {
- info.push_back(this->curr_instr->mnemonic);
- info.push_back(this->curr_instr->is_squashed);
- info.push_back(this->curr_instr->operands.integer.slot_one);
- info.push_back(this->curr_instr->operands.integer.slot_two);
- info.push_back(this->curr_instr->operands.integer.slot_three);
- }
- return info;
-}
+InstrDTO *Stage::get_instr() { return this->curr_instr; }
void Stage::set_condition(CC c, bool v)
{