summaryrefslogtreecommitdiff
path: root/uarch/exec.h
blob: 1cfc5254b1ffda95b71c440ea56606f02b45bbff (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#pragma once

#include <memory>

#include "aisa/aisa.h"
#include "aisa/simple-models.h"
#include "sim/sim.h"
#include "sim/queue.h"
#include "uarch/types.h"

namespace uarch {

    struct ExecStage : public sim::Schedulable, aisa::TaskStack, aisa::VectorRF {
        sim::Queue<Uop> &execq;
        sim::Queue<FillReq> &fillreqq;
        sim::Queue<Fill> &fillq;
        sim::Queue<Store> &storeq;

        std::unique_ptr<const aisa::Step> step;
        aisa::Wires wires;
        bool outstanding_fill = false;
        bool fill_complete = false;

        ExecStage(sim::Scheduler &scheduler, sim::Queue<Uop> &execq, sim::Queue<FillReq> &fillreqq, sim::Queue<Fill> &fillq, sim::Queue<Store> &storeq);

        void clock() override;
    };

}