Go to the documentation of this file.
36 #include <boost/functional/hash.hpp>
68 =
"always-write-back";
70 =
"trigger-invalidates";
77 controlUnit_(NULL), doValidityChecks_(true),
80 EMPTY_ITEMP_NAME_(
"no_limm"), alwaysWriteResults_(
false),
81 triggerInvalidatesResults_(
false), fuOrdered_(
false),
82 littleEndian_(true), bitness64_(
false) {
99 littleEndian_(old.littleEndian_),
100 bitness64_(old.bitness64_) {
142 const string procName =
"Machine::addBus";
182 }
else if (iu != NULL) {
184 }
else if (rf != NULL) {
187 const string procName =
"Machine::addUnit";
203 const string procName =
"Machine::addFunctionUnit";
302 const string procName =
"Machine::addImmediateSlot";
318 const string procName =
"Machine::setGlobalControl";
512 }
else if (iu != NULL) {
514 }
else if (rf != NULL) {
517 const string procName =
"Machine::removeUnit";
652 const string procName =
"Machine::setBusPosition";
658 if (newPosition < 0 || newPosition >=
busNavigator().count()) {
659 throw OutOfRange(__FILE__, __LINE__, procName);
662 busses_.moveToPosition(&bus, newPosition);
729 string procName =
"Machine::loadState";
772 for (
int i = 0; i < state->
childCount(); i++) {
776 Bus* bus =
new Bus(child);
798 }
else if (child->
name() ==
814 __FILE__, __LINE__, procName);
828 for (
int i = 0; i < state->
childCount(); i++) {
851 }
else if (child->
name() ==
856 }
else if (child->
name() ==
860 }
else if (child->
name() ==
877 if (itNav.
count() == 0) {
938 boost::hash<std::string> string_hasher;
939 size_t h = string_hasher(buffer);
1016 template <
typename ContainerType>
1019 for (
int i = 0; i < container.count(); i++) {
1032 for (
int i = 0; i < fuNav.
count(); i++) {
1035 if (fuLatency > maxLatency) {
1036 maxLatency = fuLatency;
1050 for (
int i = 0; i < fuNav.
count(); i++) {
1066 int fCount = fNav.
count();
1069 }
else if (fCount != 6) {
1072 TCEString(
"Only Instruction format count 6 or 0 valid") +
1076 const std::vector<std::string> requiredFormats = {
1077 "riscv_r_type",
"riscv_i_type",
"riscv_s_type",
1078 "riscv_b_type",
"riscv_u_type",
"riscv_j_type"};
1080 for (
const std::string& f : requiredFormats) {
1084 TCEString(
"Missing required instruction format: ") + f);
ComponentContainer< FunctionUnit > functionUnits_
Contains all the function units of the machine.
virtual void removeFunctionUnit(FunctionUnit &unit)
int maximumLatency() const
ComponentContainer< Bridge > bridges_
Contains all the bridges of the machine.
bool hasAttribute(const std::string &name) const
ComponentContainer< Socket > sockets_
Contains all the sockets attached to the machine.
virtual void unsetMachine()
bool hasOperation(const TCEString &opName) const
virtual ObjectState * saveState() const =0
virtual void deleteInstructionTemplate(InstructionTemplate &instrTempl)
virtual TCEString name() const
std::string stringAttribute(const std::string &name) const
virtual void deleteImmediateSlot(ImmediateSlot &slot)
void setBusPosition(const Bus &bus, int newPosition)
static const std::string OSNAME_FU
ObjectState name for function unit.
void setSourceFile(const std::string &fileName)
virtual void loadState(const ObjectState *state)
bool isRISCVMachine() const
TTAMachine::Machine * machine
the architecture definition of the estimated processor
static const std::string OSKEY_TRIGGER_INVALIDATES_OLD_RESULTS
ObjectState attribute key for trigger-invalidates-old-results.
virtual bool isUniversalMachine() const
virtual void loadState(const ObjectState *state)
static const std::string OSNAME_MACHINE
ObjectState name for Machine.
virtual ObjectState * saveState() const
void set64bits(bool flag)
virtual void removeBus(Bus &bus)
void addComponent(ContainerType &container, ComponentType &toAdd)
virtual void loadState(const ObjectState *state)
bool triggerInvalidatesResults_
virtual void addOperationTriggeredFormat(OperationTriggeredFormat &format)
virtual void unsetGlobalControl()
bool triggerInvalidatesResults() const
virtual void addInstructionTemplate(InstructionTemplate &instrTempl)
virtual int maxLatency() const
static std::string toString(const T &source)
ComponentContainer< InstructionTemplate > instructionTemplates_
Contains all the instruction templates of the machine.
static const std::string OSNAME_ADDRESS_SPACE
ObjectState name for AddressSpace.
virtual void loadState(const ObjectState *state)
virtual void addImmediateUnit(ImmediateUnit &unit)
static const std::string OSKEY_ALWAYS_WRITE_BACK_RESULTS
ObjectState attribute key for always-write-back-results.
virtual void deleteAddressSpace(AddressSpace &as)
virtual void loadState(const ObjectState *state)
virtual void removeUnit(Unit &unit)
bool alwaysWriteResults() const
static const std::string OSNAME_BUS
ObjectState name for Bus ObjectState.
virtual OperationTriggeredFormatNavigator operationTriggeredFormatNavigator() const
virtual void addRegisterFile(RegisterFile &unit)
static const std::string OSKEY_FUNCTION_UNITS_ORDERED
ObjectState attribute key for function units ordered in order of their sequential presence in ADF.
ComponentContainer< ImmediateUnit > immediateUnits_
Contains all the immediate units of the machine.
virtual ControlUnit * controlUnit() const
void addRegisteredComponent(ContainerType &container, ComponentType &toAdd)
virtual BridgeNavigator bridgeNavigator() const
virtual ImmediateUnitNavigator immediateUnitNavigator() const
MachineTester & machineTester() const
bool hasItem(const std::string &name) const
void setDestinationFile(const std::string &fileName)
void removeComponent(ContainerType &container, ComponentType &toRemove)
ComponentContainer< RegisterFile > registerFiles_
Contains all the register files of the machine.
virtual FunctionUnitNavigator functionUnitNavigator() const
virtual void removeImmediateUnit(ImmediateUnit &unit)
static const std::string OSKEY_NAME
ObjectState attribute key for the name of the component.
ObjectState * child(int index) const
void addChild(ObjectState *child)
virtual void loadState(const ObjectState *state)
virtual void deleteBridge(Bridge &bridge)
virtual void addAddressSpace(AddressSpace &as)
virtual void removeRegisterFile(RegisterFile &unit)
virtual ObjectState * saveState() const
virtual bool hasOperation(const std::string &name) const
static const std::string OSNAME_REGISTER_FILE
ObjectState name for RegisterFile.
bool doValidityChecks_
Tells whether to do validity checks or not.
virtual AddressSpaceNavigator addressSpaceNavigator() const
virtual SocketNavigator socketNavigator() const
ComponentContainer< OperationTriggeredFormat > operationTriggeredFormats_
Contains all the OTA Formats of the machine.
virtual void addBus(Bus &bus)
virtual ImmediateSlotNavigator immediateSlotNavigator() const
static const std::string OSNAME_SOCKET
ObjectState name for socket.
void writeToADF(const std::string &adfFileName) const
std::string errorMessage() const
static std::string toHexString(T source, std::size_t digits=0, bool include0x=true)
virtual void setGlobalControl(ControlUnit &unit)
const std::string EMPTY_ITEMP_NAME_
virtual void addBridge(Bridge &bridge)
void setDestinationString(std::string &destination)
virtual RegisterFileNavigator registerFileNavigator() const
DummyMachineTester * dummyMachineTester_
Dummy machine tester for the machine.
virtual void setMachine(Machine &mach)
void deleteComponent(ContainerType &container, ComponentType &toDelete)
static const std::string OSNAME_BRIDGE
ObjectState name for bridge.
virtual void addFunctionUnit(FunctionUnit &unit)
find Finds info of the inner loops in the false
virtual Machine * machine() const
ComponentContainer< AddressSpace > addressSpaces_
Contains all the address spaces of the machine.
virtual void addImmediateSlot(ImmediateSlot &slot)
void setLittleEndian(bool flag)
bool boolAttribute(const std::string &name) const
virtual BusNavigator busNavigator() const
void writeMachine(const TTAMachine::Machine &machine)
virtual void copyFromMachine(Machine &machine)
MachineTester * machineTester_
Machine tester for the machine.
virtual void loadState(const ObjectState *state)
TTAMachine::Machine * readMachine()
ComponentContainer< Bus > busses_
Contains all the busses attached to the machine.
virtual void removeSocket(Socket &socket)
ComponentType * item(int index) const
static const std::string OSNAME_CONTROL_UNIT
ObjectState name for ControlUnit.
void setTriggerInvalidatesResults(bool)
virtual InstructionTemplateNavigator instructionTemplateNavigator() const
void setAlwaysWriteResults(bool)
ComponentContainer< ImmediateSlot > immediateSlots_
Contains all the immediate slots of the machine.
virtual void addSocket(Socket &socket)
ControlUnit * controlUnit_
Global control unit.
void setAttribute(const std::string &name, const std::string &value)
static const std::string OSNAME_INSTRUCTION_TEMPLATE
ObjectState name for instruction template.
virtual void deleteOperationTriggeredFormat(OperationTriggeredFormat &format)
static Machine * loadFromADF(const std::string &adfFileName)
static void saveComponentStates(ContainerType &container, ObjectState *parent)