From c2af6262df9c37f83dc47901529e7e5e28d69636 Mon Sep 17 00:00:00 2001 From: bd Date: Fri, 18 Apr 2025 23:27:43 -0400 Subject: Swap to just priming file on button click, status display --- gui/gui.h | 207 +++++++++++++++++++++++++++++++------------------------------- 1 file changed, 105 insertions(+), 102 deletions(-) (limited to 'gui/gui.h') diff --git a/gui/gui.h b/gui/gui.h index aaa0ede..85f965a 100644 --- a/gui/gui.h +++ b/gui/gui.h @@ -1,117 +1,120 @@ #ifndef GUI_H #define GUI_H -#include -#include -#include +#include "worker.h" #include -#include -#include -#include +#include #include -#include "worker.h" +#include +#include +#include +#include +#include +#include QT_BEGIN_NAMESPACE -namespace Ui { +namespace Ui +{ class GUI; } QT_END_NAMESPACE class GUI : public QMainWindow { - Q_OBJECT - -public: - GUI(QWidget *parent = nullptr); - ~GUI(); - bool is_pipelined = false; - std::vector ways; - -signals: - void sendRefreshDram(); - void sendRefreshCache(); - void sendRefreshRegisters(); - void sendRunSteps(int steps); - void sendLoadProgram(std::vector program); - -private slots: - void onWorkerClockCycles(int value, int pc); - - void onWorkerFetchInfo(const std::vector info); - - void onWorkerDecodeInfo(const std::vector info); - - void onWorkerExecuteInfo(const std::vector info); - - void onWorkerMemoryInfo(const std::vector info); - - void onWorkerWriteBackInfo(const std::vector info); - - void onWorkerShowDram(const std::vector> data); - - void onWorkerShowCache(const std::vector> data); - - void onWorkerShowRegisters(const std::array &data); - - void onWorkerFinished(); - - void on_upload_intructions_btn_clicked(); - - void on_upload_program_state_btn_clicked(); - - void on_enable_pipeline_checkbox_checkStateChanged(const Qt::CheckState &arg1); - - void on_step_btn_clicked(); - - void on_save_program_state_btn_clicked(); - -private: - Ui::GUI *ui; - QThread workerThread; - Worker *worker; - QVector step_values = {1, 5, 10, 50, 250, 1000, 10000}; - const std::map 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"; - } + Q_OBJECT + + public: + GUI(QWidget *parent = nullptr); + ~GUI(); + bool is_pipelined = false; + std::vector ways; + + signals: + void sendRefreshDram(); + void sendRefreshCache(); + void sendRefreshRegisters(); + void sendRunSteps(int steps); + + private slots: + void onWorkerClockCycles(int value, int pc); + + void onWorkerFetchInfo(const std::vector info); + + void onWorkerDecodeInfo(const std::vector info); + + void onWorkerExecuteInfo(const std::vector info); + + void onWorkerMemoryInfo(const std::vector info); + + void onWorkerWriteBackInfo(const std::vector info); + + void + onWorkerShowDram(const std::vector> data); + + void onWorkerShowCache( + const std::vector> data); + + void onWorkerShowRegisters(const std::array &data); + + void onWorkerFinished(); + + void on_upload_intructions_btn_clicked(); + + void on_upload_program_state_btn_clicked(); + + void + on_enable_pipeline_checkbox_checkStateChanged(const Qt::CheckState &arg1); + + void on_step_btn_clicked(); + + void on_save_program_state_btn_clicked(); + + private: + Ui::GUI *ui; + + /** + * The message displayed on the status bar. + */ + QLabel *status_label; + + /** + * The currently loaded program. + */ + std::vector p; + + QThread workerThread; + + Worker *worker; + + QVector step_values = {1, 5, 10, 50, 250, 1000, 10000}; + + const std::map 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"; + } + + QString make_status(const std::function &func); }; #endif // GUI_H -- cgit v1.2.3