// Simulator for the RISC-V[ECTOR] mini-ISA // Copyright (C) 2025 Siddarth Suresh // Copyright (C) 2025 bdunahu // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program. If not, see . #ifndef GUI_H #define GUI_H #include #include #include #include #include #include #include #include "worker.h" QT_BEGIN_NAMESPACE namespace Ui { class GUI; } QT_END_NAMESPACE class GUI : public QMainWindow { Q_OBJECT public: GUI(QWidget *parent = nullptr); ~GUI(); signals: void sendRefreshDram(); void sendRefreshCache(); void sendRefreshRegisters(); void sendRunSteps(int steps); void sendRunStep(); 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_refresh_dram_btn_clicked(); void on_refresh_cache_btn_clicked(); void on_refresh_registers_btn_clicked(); void on_enable_pipeline_checkbox_checkStateChanged(const Qt::CheckState &arg1); void on_enabl_cache_checkbox_checkStateChanged(const Qt::CheckState &arg1); void on_run_steps_btn_clicked(); void on_step_btn_clicked(); void on_save_program_state_btn_clicked(); private: Ui::GUI *ui; QThread workerThread; Worker *worker; 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"; } }; #endif // GUI_H