#ifndef __CPU_FUNC_UNIT_HH__
#define __CPU_FUNC_UNIT_HH__
+#include <array>
#include <bitset>
#include <string>
#include <vector>
#include "cpu/op_class.hh"
+#include "params/FUDesc.hh"
+#include "params/OpDesc.hh"
#include "sim/sim_object.hh"
////////////////////////////////////////////////////////////////////////////
//
//
-struct OpDesc : public SimObject
+class OpDesc : public SimObject
{
+ public:
OpClass opClass;
- unsigned opLat;
- unsigned issueLat;
+ Cycles opLat;
+ bool pipelined;
- OpDesc(std::string name, OpClass c, unsigned o, unsigned i)
- : SimObject(name), opClass(c), opLat(o), issueLat(i) {};
+ OpDesc(const OpDescParams *p)
+ : SimObject(p), opClass(p->opClass), opLat(p->opLat),
+ pipelined(p->pipelined) {};
};
-struct FUDesc : public SimObject
+class FUDesc : public SimObject
{
+ public:
std::vector<OpDesc *> opDescList;
unsigned number;
- FUDesc(std::string name, std::vector<OpDesc *> l, unsigned n)
- : SimObject(name), opDescList(l), number(n) {};
+ FUDesc(const FUDescParams *p)
+ : SimObject(p), opDescList(p->opList), number(p->count) {};
};
-typedef std::vector<OpDesc *>::iterator OPDDiterator;
-typedef std::vector<FUDesc *>::iterator FUDDiterator;
+typedef std::vector<OpDesc *>::const_iterator OPDDiterator;
+typedef std::vector<FUDesc *>::const_iterator FUDDiterator;
class FuncUnit
{
private:
- unsigned opLatencies[Num_OpClasses];
- unsigned issueLatencies[Num_OpClasses];
+ std::array<unsigned, Num_OpClasses> opLatencies;
+ std::array<bool, Num_OpClasses> pipelined;
std::bitset<Num_OpClasses> capabilityList;
public:
std::string name;
- void addCapability(OpClass cap, unsigned oplat, unsigned issuelat);
+ void addCapability(OpClass cap, unsigned oplat, bool pipelined);
bool provides(OpClass capability);
std::bitset<Num_OpClasses> capabilities();
unsigned &opLatency(OpClass capability);
- unsigned issueLatency(OpClass capability);
+ bool isPipelined(OpClass capability);
};
#endif // __FU_POOL_HH__