summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbd <bdunaisky@umass.edu>2025-04-16 15:56:32 +0000
committerGitHub <noreply@github.com>2025-04-16 15:56:32 +0000
commitb778ccc3e7c2f2ac3c4892a87f5269f342fd895f (patch)
tree481b94886edf89f3bf08d06b96092298d1cdbf8c
parent561f7a6e6c24b05383b6db86b48125ee80a8355f (diff)
parentf9e5214e87a935e1311b886e44bdfe1f8bfbdf56 (diff)
Merge pull request #51 from bdunahu/dev-sid
[WIP] Added pipeline to GUI
-rw-r--r--gui/gui.cc106
-rw-r--r--gui/gui.h54
-rw-r--r--gui/gui.ui404
-rw-r--r--gui/worker.cc13
-rw-r--r--gui/worker.h5
-rw-r--r--inc/id.h2
-rw-r--r--inc/if.h2
-rw-r--r--inc/stage.h3
-rw-r--r--src/sim/id.cc9
-rw-r--r--src/sim/if.cc9
-rw-r--r--src/sim/stage.cc12
11 files changed, 509 insertions, 110 deletions
diff --git a/gui/gui.cc b/gui/gui.cc
index 3d3c56f..3c091e1 100644
--- a/gui/gui.cc
+++ b/gui/gui.cc
@@ -19,6 +19,16 @@ GUI::GUI(QWidget *parent)
// Display clock cycles and PC
connect(worker, &Worker::clock_cycles, this, &GUI::onWorkerClockCycles);
+ connect(worker, &Worker::if_info, this, &GUI::onWorkerFetchInfo);
+
+ connect(worker, &Worker::id_info, this, &GUI::onWorkerDecodeInfo);
+
+ connect(worker, &Worker::ex_info, this, &GUI::onWorkerExecuteInfo);
+
+ connect(worker, &Worker::mm_info, this, &GUI::onWorkerMemoryInfo);
+
+ connect(worker, &Worker::wb_info, this, &GUI::onWorkerWriteBackInfo);
+
// Display dram
connect(worker, &Worker::dram_storage, this, &GUI::onWorkerShowDram);
@@ -103,7 +113,7 @@ void displayTableHTML(QTextEdit *textEdit, const std::vector<std::array<signed i
textEdit->setReadOnly(true);
}
-void browseAndUploadFile(QTextEdit *textEdit) {
+void browseAndUploadFile(QWidget* parent) {
QString filePath = QFileDialog::getOpenFileName(nullptr, "Open File", QDir::homePath(), "Text Files (*.txt);;All Files (*.*)");
if (filePath.isEmpty()) {
@@ -112,7 +122,8 @@ void browseAndUploadFile(QTextEdit *textEdit) {
QFile file(filePath);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
- textEdit->setPlainText("Error: Unable to open file!");
+ // textEdit->setPlainText("Error: Unable to open file!");
+ QMessageBox::critical(parent, "File Upload", "Unable to open file!");
return;
}
@@ -135,15 +146,98 @@ void browseAndUploadFile(QTextEdit *textEdit) {
file.close();
- textEdit->setReadOnly(false);
- textEdit->setHtml(content);
- textEdit->setReadOnly(true);
+
+ QMessageBox::information(parent, "File Upload", "Instructions loaded successfully!");
+
+ // textEdit->setReadOnly(false);
+ // textEdit->setHtml(content);
+ // textEdit->setReadOnly(true);
}
void GUI::onWorkerClockCycles(int cycles, int pc) {
+ QFont font = ui->cycles_label->font();
+ font.setBold(true);
+ font.setItalic(true);
+ font.setPointSize(14);
+ ui->cycles_label->setFont(font);
ui->cycles_label->setText("Clock Cycles: " + QString::number(cycles) + "\t\t" + "PC: " + QString::number(pc));
}
+void GUI::onWorkerFetchInfo(const std::vector<int> info) {
+ //QString::asprintf("%04X", value)
+ if(!info.empty()) {
+ ui->fetch_pc->setText(QString::number(info[0]));
+ ui->fetch_instruction_bits->setText(QString::asprintf("%04X", info[1]));
+ } else {
+ ui->fetch_pc->clear();
+ ui->fetch_instruction_bits->clear();
+ }
+}
+
+void GUI::onWorkerDecodeInfo(const std::vector<int> info) {
+ if(!info.empty()) {
+ // ui->decode_mnemonic->setText(mnemonicToString((Mnemonic)info[0]));
+ ui->decode_pc->setText(QString::number(info[0]));
+ ui->decode_s1->setText(QString::asprintf("%04X", info[1]));
+ // ui->decode_s2->setText(QString::asprintf("%04X", info[3]));
+ // ui->decode_s3->setText(QString::asprintf("%04X", info[4]));
+ } else {
+ // ui->decode_mnemonic->clear();
+ ui->decode_pc->clear();
+ ui->decode_s1->clear();
+ // ui->decode_s2->clear();
+ // ui->decode_s3->clear();
+ }
+}
+
+void GUI::onWorkerExecuteInfo(const std::vector<int> info) {
+ if(!info.empty()) {
+ ui->execute_mnemonic->setText(mnemonicToString((Mnemonic)info[0]));
+ ui->execute_pc->setText(QString::number(info[1]));
+ ui->execute_s1->setText(QString::asprintf("%04X", info[2]));
+ ui->execute_s2->setText(QString::asprintf("%04X", info[3]));
+ ui->execute_s3->setText(QString::asprintf("%04X", info[4]));
+ } else {
+ ui->execute_mnemonic->clear();
+ ui->execute_pc->clear();
+ ui->execute_s1->clear();
+ ui->execute_s2->clear();
+ ui->execute_s3->clear();
+ }
+}
+
+void GUI::onWorkerMemoryInfo(const std::vector<int> info) {
+ if(!info.empty()) {
+ ui->memory_mnemonic->setText(mnemonicToString((Mnemonic)info[0]));
+ ui->memory_pc->setText(QString::number(info[1]));
+ ui->memory_s1->setText(QString::asprintf("%04X", info[2]));
+ ui->memory_s2->setText(QString::asprintf("%04X", info[3]));
+ ui->memory_s3->setText(QString::asprintf("%04X", info[4]));
+ } else {
+ ui->memory_mnemonic->clear();
+ ui->memory_pc->clear();
+ ui->memory_s1->clear();
+ ui->memory_s2->clear();
+ ui->memory_s3->clear();
+ }
+}
+
+void GUI::onWorkerWriteBackInfo(const std::vector<int> info) {
+ if(!info.empty()) {
+ ui->wb_mnemonic->setText(mnemonicToString((Mnemonic)info[0]));
+ ui->wb_pc->setText(QString::number(info[1]));
+ ui->wb_s1->setText(QString::asprintf("%04X", info[2]));
+ ui->wb_s2->setText(QString::asprintf("%04X", info[3]));
+ ui->wb_s3->setText(QString::asprintf("%04X", info[4]));
+ } else {
+ ui->wb_mnemonic->clear();
+ ui->wb_pc->clear();
+ ui->wb_s1->clear();
+ ui->wb_s2->clear();
+ ui->wb_s3->clear();
+ }
+}
+
void GUI::onWorkerShowDram(const std::vector<std::array<signed int, LINE_SIZE>> data) {
displayTableHTML(ui->dram_table, data);
}
@@ -163,7 +257,7 @@ void GUI::onWorkerFinished() {
void GUI::on_upload_intructions_btn_clicked()
{
qDebug() << "Upload intructions button clicked.";
- browseAndUploadFile(ui->instruction_table);
+ browseAndUploadFile(ui->register_table);
}
diff --git a/gui/gui.h b/gui/gui.h
index 77a8867..b845124 100644
--- a/gui/gui.h
+++ b/gui/gui.h
@@ -7,6 +7,7 @@
#include <QFile>
#include <QTextStream>
#include <QTextEdit>
+#include <QMessageBox>
#include "worker.h"
QT_BEGIN_NAMESPACE
@@ -33,6 +34,16 @@ signals:
private slots:
void onWorkerClockCycles(int value, int pc);
+ void onWorkerFetchInfo(const std::vector<int> info);
+
+ void onWorkerDecodeInfo(const std::vector<int> info);
+
+ void onWorkerExecuteInfo(const std::vector<int> info);
+
+ void onWorkerMemoryInfo(const std::vector<int> info);
+
+ void onWorkerWriteBackInfo(const std::vector<int> info);
+
void onWorkerShowDram(const std::vector<std::array<signed int, LINE_SIZE>> data);
void onWorkerShowCache(const std::vector<std::array<signed int, LINE_SIZE>> data);
@@ -65,5 +76,48 @@ private:
Ui::GUI *ui;
QThread workerThread;
Worker *worker;
+ const std::map<Mnemonic, QString> mnemonicNameMap = {
+ {Mnemonic::ADD, "ADD"},
+ {Mnemonic::SUB, "SUB"},
+ {Mnemonic::MUL, "MUL"},
+ {Mnemonic::QUOT, "QUOT"},
+ {Mnemonic::SFTR, "SFTR"},
+ {Mnemonic::SFTL, "SFTL"},
+ {Mnemonic::AND, "AND"},
+ {Mnemonic::OR, "OR"},
+ {Mnemonic::NOT, "NOT"},
+ {Mnemonic::XOR, "XOR"},
+ {Mnemonic::ADDV, "ADDV"},
+ {Mnemonic::SUBV, "SUBV"},
+ {Mnemonic::MULV, "MULV"},
+ {Mnemonic::DIVV, "DIVV"},
+ {Mnemonic::CMP, "CMP"},
+ {Mnemonic::CEV, "CEV"},
+ {Mnemonic::LOAD, "LOAD"},
+ {Mnemonic::LOADV, "LOADV"},
+ {Mnemonic::ADDI, "ADDI"},
+ {Mnemonic::SUBI, "SUBI"},
+ {Mnemonic::SFTRI, "SFTRI"},
+ {Mnemonic::SFTLI, "SFTLI"},
+ {Mnemonic::ANDI, "ANDI"},
+ {Mnemonic::ORI, "ORI"},
+ {Mnemonic::XORI, "XORI"},
+ {Mnemonic::STORE, "STORE"},
+ {Mnemonic::STOREV, "STOREV"},
+ {Mnemonic::JMP, "JMP"},
+ {Mnemonic::JRL, "JRL"},
+ {Mnemonic::JAL, "JAL"},
+ {Mnemonic::BEQ, "BEQ"},
+ {Mnemonic::BGT, "BGT"},
+ {Mnemonic::BUF, "BUF"},
+ {Mnemonic::BOF, "BOF"},
+ {Mnemonic::PUSH, "PUSH"},
+ {Mnemonic::POP, "POP"},
+ {Mnemonic::NOP, "NOP"},
+ };
+ QString mnemonicToString(Mnemonic mnemonic) {
+ auto it = mnemonicNameMap.find(mnemonic);
+ return (it != mnemonicNameMap.end()) ? it->second : "Unknown";
+ }
};
#endif // GUI_H
diff --git a/gui/gui.ui b/gui/gui.ui
index f515b58..7390212 100644
--- a/gui/gui.ui
+++ b/gui/gui.ui
@@ -13,49 +13,16 @@
<property name="windowTitle">
<string>RISC V[ECTOR]</string>
</property>
- <widget class="QWidget" name="centralwidget">
- <layout class="QVBoxLayout" name="verticalLayout_14">
+ <widget class="QWidget" name="centralwidget">
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
- <layout class="QGridLayout" name="gridLayout">
- <item row="1" column="6" rowspan="2">
- <widget class="Line" name="line_14">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- </widget>
- </item>
- <item row="1" column="1" rowspan="2">
- <layout class="QVBoxLayout" name="verticalLayout">
- <item>
- <widget class="QLabel" name="label">
- <property name="font">
- <font>
- <bold>true</bold>
- </font>
- </property>
- <property name="text">
- <string>Instructions</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="Line" name="line">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
+ <layout class="QGridLayout" name="gridLayout_2" rowstretch="0,0,0" columnstretch="0,3,0,1,0">
+ <item row="0" column="1">
+ <layout class="QVBoxLayout" name="verticalLayout_19">
<item>
- <widget class="QTextEdit" name="instruction_table"/>
- </item>
- </layout>
- </item>
- <item row="1" column="3" rowspan="2">
- <layout class="QVBoxLayout" name="verticalLayout_13">
- <item>
- <layout class="QVBoxLayout" name="verticalLayout_3">
+ <layout class="QVBoxLayout" name="verticalLayout_20">
<item>
- <widget class="QLabel" name="label_2">
+ <widget class="QLabel" name="label_5">
<property name="font">
<font>
<bold>true</bold>
@@ -67,7 +34,7 @@
</widget>
</item>
<item>
- <widget class="Line" name="line_2">
+ <widget class="Line" name="line_25">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
@@ -79,18 +46,18 @@
</layout>
</item>
<item>
- <widget class="Line" name="line_13">
+ <widget class="Line" name="line_26">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
- <layout class="QHBoxLayout" name="horizontalLayout_5">
+ <layout class="QHBoxLayout" name="horizontalLayout_7">
<item>
- <layout class="QVBoxLayout" name="verticalLayout_2">
+ <layout class="QVBoxLayout" name="verticalLayout_21">
<item>
- <widget class="QLabel" name="label_4">
+ <widget class="QLabel" name="label_6">
<property name="font">
<font>
<bold>true</bold>
@@ -102,7 +69,7 @@
</widget>
</item>
<item>
- <widget class="Line" name="line_4">
+ <widget class="Line" name="line_27">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
@@ -114,16 +81,16 @@
</layout>
</item>
<item>
- <widget class="Line" name="line_19">
+ <widget class="Line" name="line_28">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item>
- <layout class="QVBoxLayout" name="verticalLayout_4">
+ <layout class="QVBoxLayout" name="verticalLayout_22">
<item>
- <widget class="QLabel" name="label_3">
+ <widget class="QLabel" name="label_10">
<property name="font">
<font>
<bold>true</bold>
@@ -135,7 +102,7 @@
</widget>
</item>
<item>
- <widget class="Line" name="line_3">
+ <widget class="Line" name="line_29">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
@@ -150,33 +117,255 @@
</item>
</layout>
</item>
- <item row="1" column="2" rowspan="2">
- <widget class="Line" name="line_17">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- </widget>
- </item>
- <item row="0" column="1" colspan="5">
- <widget class="Line" name="line_10">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item row="3" column="1" colspan="5">
- <widget class="Line" name="line_11">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
+ <item row="1" column="0" colspan="5">
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QGroupBox" name="Fetch">
+ <property name="title">
+ <string>Fetch</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QLineEdit" name="fetch_instruction_bits">
+ <property name="placeholderText">
+ <string>Instruction Bits</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLineEdit" name="fetch_pc">
+ <property name="placeholderText">
+ <string>Program Counter</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="Line" name="line">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="Decode">
+ <property name="title">
+ <string>Decode</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_2">
+ <item>
+ <widget class="QLineEdit" name="decode_s1">
+ <property name="placeholderText">
+ <string>Instruction Bits</string>
+ </property>
+ </widget>
+ </item>
+ <!-- <item>
+ <widget class="QLineEdit" name="decode_s2">
+ <property name="text">
+ <string/>
+ </property>
+ <property name="placeholderText">
+ <string>Program COunte</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLineEdit" name="decode_s3">
+ <property name="placeholderText">
+ <string>s3</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLineEdit" name="decode_mnemonic">
+ <property name="placeholderText">
+ <string>Mnemonic</string>
+ </property>
+ </widget>
+ </item> -->
+ <item>
+ <widget class="QLineEdit" name="decode_pc">
+ <property name="placeholderText">
+ <string>Program Counter</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="Line" name="line_2">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="Execute">
+ <property name="title">
+ <string>Execute</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_3">
+ <item>
+ <widget class="QLineEdit" name="execute_s1">
+ <property name="placeholderText">
+ <string>s1</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLineEdit" name="execute_s2">
+ <property name="text">
+ <string/>
+ </property>
+ <property name="placeholderText">
+ <string>s2</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLineEdit" name="execute_s3">
+ <property name="placeholderText">
+ <string>s3</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLineEdit" name="execute_mnemonic">
+ <property name="placeholderText">
+ <string>Mnemonic</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLineEdit" name="execute_pc">
+ <property name="placeholderText">
+ <string>Program Counter</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="Line" name="line_3">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="Memory">
+ <property name="title">
+ <string>Memory</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_4">
+ <item>
+ <widget class="QLineEdit" name="memory_s1">
+ <property name="placeholderText">
+ <string>s1</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLineEdit" name="memory_s2">
+ <property name="text">
+ <string/>
+ </property>
+ <property name="placeholderText">
+ <string>s2</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLineEdit" name="memory_s3">
+ <property name="placeholderText">
+ <string>s3</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLineEdit" name="memory_mnemonic">
+ <property name="placeholderText">
+ <string>Mnemonic</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLineEdit" name="memory_pc">
+ <property name="placeholderText">
+ <string>Program Counter</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="Line" name="line_4">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="WriteBack">
+ <property name="title">
+ <string>Write Back</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_5">
+ <item>
+ <widget class="QLineEdit" name="wb_s1">
+ <property name="placeholderText">
+ <string>s1</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLineEdit" name="wb_s2">
+ <property name="text">
+ <string/>
+ </property>
+ <property name="placeholderText">
+ <string>s2</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLineEdit" name="wb_s3">
+ <property name="placeholderText">
+ <string>s3</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLineEdit" name="wb_mnemonic">
+ <property name="placeholderText">
+ <string>Mnemonic</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLineEdit" name="wb_pc">
+ <property name="placeholderText">
+ <string>Program Counter</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ </layout>
</item>
- <item row="1" column="5" rowspan="2">
- <layout class="QVBoxLayout" name="verticalLayout_12">
+ <item row="0" column="3">
+ <layout class="QVBoxLayout" name="verticalLayout_23">
<item>
- <layout class="QVBoxLayout" name="verticalLayout_8">
+ <layout class="QVBoxLayout" name="verticalLayout_24">
<item>
- <widget class="QLabel" name="label_7">
+ <widget class="QLabel" name="label_12">
<property name="font">
<font>
<bold>true</bold>
@@ -188,14 +377,14 @@
</widget>
</item>
<item>
- <widget class="Line" name="line_5">
+ <widget class="Line" name="line_33">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
- <layout class="QVBoxLayout" name="verticalLayout_6">
+ <layout class="QVBoxLayout" name="verticalLayout_25">
<item>
<widget class="QPushButton" name="upload_intructions_btn">
<property name="text">
@@ -204,7 +393,7 @@
</widget>
</item>
<item>
- <layout class="QHBoxLayout" name="horizontalLayout_3">
+ <layout class="QHBoxLayout" name="horizontalLayout_8">
<item>
<widget class="QPushButton" name="upload_program_state_btn">
<property name="text">
@@ -217,7 +406,7 @@
</layout>
</item>
<item>
- <widget class="Line" name="line_7">
+ <widget class="Line" name="line_34">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
@@ -226,9 +415,9 @@
</layout>
</item>
<item>
- <layout class="QVBoxLayout" name="verticalLayout_9">
+ <layout class="QVBoxLayout" name="verticalLayout_26">
<item>
- <widget class="QLabel" name="label_8">
+ <widget class="QLabel" name="label_13">
<property name="font">
<font>
<bold>true</bold>
@@ -240,16 +429,16 @@
</widget>
</item>
<item>
- <widget class="Line" name="line_8">
+ <widget class="Line" name="line_35">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
- <layout class="QVBoxLayout" name="verticalLayout_5">
+ <layout class="QVBoxLayout" name="verticalLayout_27">
<item>
- <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <layout class="QHBoxLayout" name="horizontalLayout_9">
<item>
<widget class="QPushButton" name="refresh_dram_btn">
<property name="text">
@@ -274,12 +463,25 @@
</layout>
</item>
<item>
- <layout class="QHBoxLayout" name="horizontalLayout">
+ <layout class="QHBoxLayout" name="horizontalLayout_10">
+ <item>
+ <widget class="QPushButton" name="Reset_Btn">
+ <property name="text">
+ <string>Reset</string>
+ </property>
+ </widget>
+ </item>
<item>
<widget class="QCheckBox" name="enable_pipeline_checkbox">
<property name="text">
<string>Enable Pipeline</string>
</property>
+ <property name="checkable">
+ <bool>false</bool>
+ </property>
+ <property name="checked">
+ <bool>false</bool>
+ </property>
</widget>
</item>
<item>
@@ -287,6 +489,9 @@
<property name="text">
<string>Enable Cache</string>
</property>
+ <property name="checkable">
+ <bool>false</bool>
+ </property>
</widget>
</item>
</layout>
@@ -296,16 +501,16 @@
</layout>
</item>
<item>
- <layout class="QVBoxLayout" name="verticalLayout_10">
+ <layout class="QVBoxLayout" name="verticalLayout_28">
<item>
- <widget class="Line" name="line_15">
+ <widget class="Line" name="line_36">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
- <widget class="QLabel" name="label_9">
+ <widget class="QLabel" name="label_14">
<property name="font">
<font>
<bold>true</bold>
@@ -317,16 +522,16 @@
</widget>
</item>
<item>
- <widget class="Line" name="line_9">
+ <widget class="Line" name="line_37">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
- <layout class="QVBoxLayout" name="verticalLayout_7">
+ <layout class="QVBoxLayout" name="verticalLayout_29">
<item>
- <layout class="QHBoxLayout" name="horizontalLayout_4">
+ <layout class="QHBoxLayout" name="horizontalLayout_11">
<item>
<widget class="QLineEdit" name="number_steps_inp">
<property name="placeholderText">
@@ -355,16 +560,16 @@
</layout>
</item>
<item>
- <widget class="Line" name="line_16">
+ <widget class="Line" name="line_38">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
- <layout class="QVBoxLayout" name="verticalLayout_11">
+ <layout class="QVBoxLayout" name="verticalLayout_30">
<item>
- <widget class="QLabel" name="label_11">
+ <widget class="QLabel" name="label_15">
<property name="font">
<font>
<bold>true</bold>
@@ -376,7 +581,7 @@
</widget>
</item>
<item>
- <widget class="Line" name="line_6">
+ <widget class="Line" name="line_39">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
@@ -400,15 +605,8 @@
</item>
</layout>
</item>
- <item row="0" column="0" rowspan="3">
- <widget class="Line" name="line_12">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- </widget>
- </item>
- <item row="1" column="4" rowspan="2">
- <widget class="Line" name="line_18">
+ <item row="0" column="2">
+ <widget class="Line" name="line_5">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
diff --git a/gui/worker.cc b/gui/worker.cc
index 685b46c..e7c9876 100644
--- a/gui/worker.cc
+++ b/gui/worker.cc
@@ -63,6 +63,8 @@ void Worker::doWork()
this->d->load(p);
}
+
+
Worker::~Worker()
{
emit finished();
@@ -98,6 +100,11 @@ void Worker::runSteps(int steps)
emit cache_storage(this->c->view(0, 8));
emit register_storage(this->ct->get_gprs());
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());
}
void Worker::runStep()
@@ -107,6 +114,10 @@ void Worker::runStep()
emit dram_storage(this->d->view(0, 256));
emit cache_storage(this->c->view(0, 8));
emit register_storage(this->ct->get_gprs());
- qDebug() << "PC " << this->ct->get_pc();
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());
}
diff --git a/gui/worker.h b/gui/worker.h
index 99ab39a..ee8926b 100644
--- a/gui/worker.h
+++ b/gui/worker.h
@@ -44,6 +44,11 @@ signals:
void dram_storage(const std::vector<std::array<signed int, LINE_SIZE>> data);
void cache_storage(const std::vector<std::array<signed int, LINE_SIZE>> data);
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 finished();
};
diff --git a/inc/id.h b/inc/id.h
index fd8c874..db22d7d 100644
--- a/inc/id.h
+++ b/inc/id.h
@@ -38,6 +38,8 @@ class ID : public Stage
*/
void write_guard(signed int &r);
+ std::vector<int> stage_info() override;
+
private:
void advance_helper() override;
/**
diff --git a/inc/if.h b/inc/if.h
index 63ca90e..7ee6ecb 100644
--- a/inc/if.h
+++ b/inc/if.h
@@ -17,6 +17,8 @@ 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 da33075..1cedac6 100644
--- a/inc/stage.h
+++ b/inc/stage.h
@@ -38,6 +38,8 @@ class Stage
*/
virtual InstrDTO *advance(Response p);
+ virtual std::vector<int> stage_info();
+
/* The following methods are made public so that they may be tested, and are
* not to be called from outside classes during standard execution.
*/
@@ -132,6 +134,7 @@ class Stage
* The current status of this stage.
*/
Response status;
+
};
#endif /* STAGE_H_INCLUDED */
diff --git a/src/sim/id.cc b/src/sim/id.cc
index 0c0be91..46694ad 100644
--- a/src/sim/id.cc
+++ b/src/sim/id.cc
@@ -142,3 +142,12 @@ void ID::decode_J_type(signed int &s1, signed int &s2, signed int &s3)
this->status = this->read_guard(*&s1);
}
+
+std::vector<int> ID::stage_info() {
+ std::vector<int> info;
+ if(this->curr_instr){
+ info.push_back(this->curr_instr->get_pc());
+ info.push_back(this->curr_instr->get_instr_bits());
+ }
+ return info;
+}
diff --git a/src/sim/if.cc b/src/sim/if.cc
index 4ab7f3e..fb49749 100644
--- a/src/sim/if.cc
+++ b/src/sim/if.cc
@@ -23,6 +23,15 @@ 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->get_pc());
+ info.push_back(this->curr_instr->get_instr_bits());
+ }
+ return info;
+}
+
void IF::advance_helper()
{
Response r;
diff --git a/src/sim/stage.cc b/src/sim/stage.cc
index 2857e1f..8a570f0 100644
--- a/src/sim/stage.cc
+++ b/src/sim/stage.cc
@@ -53,6 +53,18 @@ 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->get_mnemonic());
+ info.push_back(this->curr_instr->get_pc());
+ info.push_back(this->curr_instr->get_s1());
+ info.push_back(this->curr_instr->get_s2());
+ info.push_back(this->curr_instr->get_s3());
+ }
+ return info;
+ }
+
void Stage::set_condition(CC c, bool v)
{
if (v)