#pragma once #include #include "aisa/aisa.h" #include "aisa/simple-models.h" #include "sim/sim.h" #include "sim/queue.h" #include "uarch/types.h" namespace uarch { struct FetchStage : public sim::Schedulable, aisa::TaskStack, aisa::VectorRF { sim::Queue &fillreqq; sim::Queue &fillq; sim::Queue &uopq; std::unique_ptr step; aisa::Wires wires; bool outstanding_fill = false; bool fill_complete = false; FetchStage(sim::Scheduler &scheduler, const aisa::ISA &isa, sim::Queue &fillreqq, sim::Queue &fillq, sim::Queue &uopq); void clock() override; }; }