From 95d09e12792cf5ececd32b8dc84f2cd090c496ef Mon Sep 17 00:00:00 2001 From: bd Date: Tue, 22 Apr 2025 20:49:26 -0400 Subject: Remove the accessor object --- inc/stage.h | 5 ----- 1 file changed, 5 deletions(-) (limited to 'inc/stage.h') diff --git a/inc/stage.h b/inc/stage.h index 448c61a..745e0ff 100644 --- a/inc/stage.h +++ b/inc/stage.h @@ -17,7 +17,6 @@ #ifndef STAGE_H #define STAGE_H -#include "accessor.h" #include "instrDTO.h" #include "pipe_spec.h" #include "response.h" @@ -111,10 +110,6 @@ class Stage * @return the value in the associated register. */ signed int dereference_register(signed int v); - /** - * The name of the pipeline stage. - */ - Accessor id; /** * The shared pool of general-purpose integer registers. */ -- cgit v1.2.3 From 8e33ba4499bced747f66ed436211876d220342d6 Mon Sep 17 00:00:00 2001 From: bd Date: Wed, 23 Apr 2025 00:47:24 -0400 Subject: Rename Response.WAIT to READY, delete BLOCKED --- inc/response.h | 3 +-- inc/stage.h | 2 +- src/controller.cc | 2 +- src/if.cc | 2 +- src/response.cc | 2 +- src/stage.cc | 8 ++++---- tests/controller.cc | 2 +- tests/dum.h | 2 +- tests/ex.cc | 4 ++-- tests/id.cc | 4 ++-- tests/if.cc | 8 ++++---- 11 files changed, 19 insertions(+), 20 deletions(-) (limited to 'inc/stage.h') diff --git a/inc/response.h b/inc/response.h index 501923a..c1f38e7 100644 --- a/inc/response.h +++ b/inc/response.h @@ -21,8 +21,7 @@ enum Response { OK, - WAIT, - BLOCKED, + READY, STALLED, }; diff --git a/inc/stage.h b/inc/stage.h index 745e0ff..7dcb7b4 100644 --- a/inc/stage.h +++ b/inc/stage.h @@ -50,7 +50,7 @@ class Stage * ready to accept a new instruction object next cycle. * @return a DTO object containing the next instruction to be processed. * - * Must set the status to WAIT when the current instruction is evicted.. + * Must set the status to READY when the current instruction is evicted.. */ virtual InstrDTO *advance(Response p); diff --git a/src/controller.cc b/src/controller.cc index 1c379ec..8df4b97 100644 --- a/src/controller.cc +++ b/src/controller.cc @@ -38,7 +38,7 @@ void Controller::run_for(int number) int i; for (i = 0; i < number; ++i) { try { - this->advance(WAIT); + this->advance(READY); } catch (HaltException &e) { break; } diff --git a/src/if.cc b/src/if.cc index 62a105c..5f07ee2 100644 --- a/src/if.cc +++ b/src/if.cc @@ -25,7 +25,7 @@ InstrDTO *IF::advance(Response p) InstrDTO *r = nullptr; this->advance_helper(); - if (this->curr_instr != nullptr && p == WAIT) { + if (this->curr_instr != nullptr && p == READY) { // don't increment PC if the PC was just set by wb if (this->curr_instr->is_squashed != 1) ++this->pc; diff --git a/src/response.cc b/src/response.cc index d56419a..7624b82 100644 --- a/src/response.cc +++ b/src/response.cc @@ -20,6 +20,6 @@ std::ostream &operator<<(std::ostream &os, Response r) { - const std::string nameR[] = {"OK", "WAIT", "BLOCKED", "STALLED"}; + const std::string nameR[] = {"OK", "READY", "STALLED"}; return os << nameR[r]; } diff --git a/src/stage.cc b/src/stage.cc index e5a4333..55756b6 100644 --- a/src/stage.cc +++ b/src/stage.cc @@ -23,7 +23,7 @@ Stage::Stage(Stage *next) { this->next = next; this->curr_instr = nullptr; - this->status = WAIT; + this->status = READY; } Stage::~Stage() { delete this->next; }; @@ -50,15 +50,15 @@ InstrDTO *Stage::advance(Response p) if (this->curr_instr && this->status != OK) { this->advance_helper(); } - if (this->status == OK && p == WAIT && this->curr_instr) { + if (this->status == OK && p == READY && this->curr_instr) { // mutual consent r = new InstrDTO(*this->curr_instr); delete curr_instr; curr_instr = nullptr; - this->status = WAIT; + this->status = READY; } - n = (p != WAIT || this->status != WAIT) ? STALLED : WAIT; + n = (p != READY || this->status != READY) ? STALLED : READY; s = this->next->advance(n); if (s) this->curr_instr = s; diff --git a/tests/controller.cc b/tests/controller.cc index 1d1ddb6..9bc71f6 100644 --- a/tests/controller.cc +++ b/tests/controller.cc @@ -37,7 +37,7 @@ class ControllerPipeFixture InstrDTO *i = nullptr; int j; for (j = 0; j < this->stage_num + 1; ++j) { - i = this->ct->advance(WAIT); + i = this->ct->advance(READY); REQUIRE(i == nullptr); } } diff --git a/tests/dum.h b/tests/dum.h index 5bfc646..e60ffad 100644 --- a/tests/dum.h +++ b/tests/dum.h @@ -17,7 +17,7 @@ class DUM : public Stage { InstrDTO *r = nullptr; - if (this->curr_instr && p == WAIT) { + if (this->curr_instr && p == READY) { r = new InstrDTO(*this->curr_instr); delete this->curr_instr; curr_instr = nullptr; diff --git a/tests/ex.cc b/tests/ex.cc index 1fc333e..5972182 100644 --- a/tests/ex.cc +++ b/tests/ex.cc @@ -33,9 +33,9 @@ class EXFixture i->mnemonic = m; this->dum->set_curr_instr(i); - i = this->ct->advance(WAIT); + i = this->ct->advance(READY); REQUIRE(i == nullptr); - i = this->ct->advance(WAIT); + i = this->ct->advance(READY); REQUIRE(i != nullptr); return i; diff --git a/tests/id.cc b/tests/id.cc index e82adc3..a81e967 100644 --- a/tests/id.cc +++ b/tests/id.cc @@ -29,9 +29,9 @@ class IDFixture i->slot_A = raw; this->dum->set_curr_instr(i); - i = this->ct->advance(WAIT); + i = this->ct->advance(READY); REQUIRE(i == nullptr); - i = this->ct->advance(WAIT); + i = this->ct->advance(READY); REQUIRE(i != nullptr); return i; diff --git a/tests/if.cc b/tests/if.cc index 59a7890..e2a7dbe 100644 --- a/tests/if.cc +++ b/tests/if.cc @@ -36,7 +36,7 @@ class IFFixture int i; for (i = 0; i < this->m_delay + 1; ++i) { - r = this->ct->advance(WAIT); + r = this->ct->advance(READY); // check response CHECK(r == nullptr); } @@ -52,11 +52,11 @@ class IFFixture int i; for (i = 0; i < this->c_delay; ++i) { - r = this->ct->advance(WAIT); + r = this->ct->advance(READY); // check response REQUIRE(r == nullptr); } - r = this->ct->advance(WAIT); + r = this->ct->advance(READY); // check response REQUIRE(r != nullptr); return r; @@ -122,7 +122,7 @@ TEST_CASE_METHOD(IFFixture, "fetch waits with old instruction", "[if_pipe]") REQUIRE(i != nullptr); } - i = this->ct->advance(WAIT); + i = this->ct->advance(READY); REQUIRE(i != nullptr); REQUIRE(i->slot_A == this->p[0]); -- cgit v1.2.3 From a3528b83dd10fa9cdf7ef5635f615c1b295f3f4c Mon Sep 17 00:00:00 2001 From: bd Date: Fri, 25 Apr 2025 21:12:58 -0400 Subject: Pass full DTO to GUI --- gui/gui.cc | 59 +++++++++++++++++++++++++++++------------------------------ gui/gui.h | 10 +++++----- gui/worker.cc | 10 +++++----- gui/worker.h | 10 +++++----- inc/id.h | 2 -- inc/if.h | 2 -- inc/stage.h | 15 ++++++++------- src/id.cc | 10 ---------- src/if.cc | 9 --------- src/stage.cc | 13 +------------ 10 files changed, 53 insertions(+), 87 deletions(-) (limited to 'inc/stage.h') 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 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 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 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 info) } } -void GUI::onWorkerMemoryInfo(const std::vector 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 info) } } -void GUI::onWorkerWriteBackInfo(const std::vector 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 info); + void onWorkerFetchInfo(const InstrDTO *); - void onWorkerDecodeInfo(const std::vector info); + void onWorkerDecodeInfo(const InstrDTO *); - void onWorkerExecuteInfo(const std::vector info); + void onWorkerExecuteInfo(const InstrDTO *); - void onWorkerMemoryInfo(const std::vector info); + void onWorkerMemoryInfo(const InstrDTO *); - void onWorkerWriteBackInfo(const std::vector info); + void onWorkerWriteBackInfo(const InstrDTO *); void onWorkerShowStorage( const std::vector> 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> data, int i); void register_storage(const std::array data); - void if_info(const std::vector info); - void id_info(const std::vector info); - void ex_info(const std::vector info); - void mm_info(const std::vector info); - void wb_info(const std::vector 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 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 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 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. @@ -72,11 +78,6 @@ class Stage */ void set_condition(CC c, bool v); - /** - * Squashes the pipeline. - */ - void squash(); - /** * The set of registers currently 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 ID::stage_info() -{ - std::vector 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 IF::stage_info() { - std::vector 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 Stage::stage_info() -{ - std::vector 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) { -- cgit v1.2.3