43 #ifndef __CPU_O3_FU_POOL_HH__
44 #define __CPU_O3_FU_POOL_HH__
53 #include "params/FUPool.hh"
102 inline void addFU(
int fu_idx);
149 int getUnit(OpClass capability);
180 #endif // __CPU_O3_FU_POOL_HH__
void dump()
Debugging function used to dump FU information.
void takeOverFrom()
Takes over from another CPU's thread.
Cycles is a wrapper class for representing cycle counts, i.e.
int getFU()
Returns the index of the FU at the head of the queue, and changes the index to the next element...
std::vector< FuncUnit * > funcUnits
Functional units.
std::vector< int > funcUnitsIdx
Queue of FU indices.
Cycles getOpLatency(OpClass capability)
Returns the operation execution latency of the given capability.
FUIdxQueue fuPerCapList[Num_OpClasses]
Per op class queues of FUs that provide that capability.
void freeUnitNextCycle(int fu_idx)
Frees a FU at the end of this cycle.
static constexpr auto NoCapableFU
int size
Size of the queue.
Class that implements a circular queue to hold FU indices.
bool isDrained() const
Have all the FUs drained?
std::vector< bool > unitBusy
Bitvector listing which FUs are busy.
std::vector< int > unitsToBeFreed
List of units to be freed at the end of this cycle.
Pool of FU's, specific to the new CPU model.
int size()
Returns the total number of FUs.
std::array< bool, Num_OpClasses > pipelined
Whether op is pipelined or not.
std::array< Cycles, Num_OpClasses > maxOpLatencies
Maximum op execution latencies, per op class.
FUPool(const Params *p)
Constructs a FU pool.
void addFU(int fu_idx)
Adds a FU to the queue.
int idx
Circular queue index.
static const OpClass Num_OpClasses
std::vector< FuncUnit * >::iterator fuListIterator
int getUnit(OpClass capability)
Gets a FU providing the requested capability.
bool isPipelined(OpClass capability)
Returns the issue latency of the given capability.
void processFreeUnits()
Frees all FUs on the list.
std::bitset< Num_OpClasses > capabilityList
Bitvector listing capabilities of this FU pool.
Abstract superclass for simulation objects.
FUIdxQueue()
Constructs a circular queue of FU indices.
static constexpr auto NoFreeFU