#ifndef WORKER_H #define WORKER_H #include "cache.h" #include "controller.h" #include "dram.h" #include "ex.h" #include "id.h" #include "if.h" #include "mm.h" #include "wb.h" #include #include #include #include #include class Worker : public QObject { Q_OBJECT private: /** * The storage objects, stored smallest to largest. */ std::deque s; IF *if_stage; ID *id_stage; EX *ex_stage; MM *mm_stage; WB *wb_stage; Controller *ct = nullptr; QMutex ct_mutex; /** * The size each progressive cache level increases by. */ unsigned int size_inc; public: explicit Worker(QObject *parent = nullptr); ~Worker(); QMutex& get_ct_mutex() { return ct_mutex; } public slots: void runSteps(int steps); void configure( std::vector ways, std::vector program, bool is_pipelined); signals: void clock_cycles(int value, int pc); void dram_storage(const std::vector> data); void cache_storage(const std::vector> data); 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 finished(); }; #endif // WORKER_H