OpenASIP 2.2
Loading...
Searching...
No Matches
Static Public Member Functions | Private Member Functions | List of all members
FUValidator Class Reference

#include <FUValidator.hh>

Collaboration diagram for FUValidator:
Collaboration graph

Static Public Member Functions

static void checkOperandBindings (const TTAMachine::FunctionUnit &fu, MachineValidatorResults &results)
 
static void checkOperations (const TTAMachine::FunctionUnit &fu, MachineValidatorResults &results)
 

Private Member Functions

 FUValidator ()
 

Detailed Description

Validator for function units.

Definition at line 45 of file FUValidator.hh.

Constructor & Destructor Documentation

◆ FUValidator()

FUValidator::FUValidator ( )
private

Member Function Documentation

◆ checkOperandBindings()

void FUValidator::checkOperandBindings ( const TTAMachine::FunctionUnit fu,
MachineValidatorResults results 
)
static

Checks that the operands used in the operations of the given FU are bound to some port.

Parameters
fuThe function unit.
resultsResults of the validation are added to the given instance.

Definition at line 54 of file FUValidator.cc.

56 {
57
58 for (int i = 0; i < fu.operationCount(); i++) {
59 HWOperation* operation = fu.operation(i);
60 ExecutionPipeline* pLine = operation->pipeline();
62 for (int i = 0; i < pLine->latency(); i++) {
64 pLine->readOperands(i);
65 ExecutionPipeline::OperandSet writtenOperands =
66 pLine->writtenOperands(i);
67 usedOperands.insert(
68 readOperands.begin(), readOperands.end());
69 usedOperands.insert(
70 writtenOperands.begin(), writtenOperands.end());
71 }
72
73
74 for (ExecutionPipeline::OperandSet::const_iterator iter =
75 usedOperands.begin();
76 iter != usedOperands.end(); iter++) {
77 int io = *iter;
78 FUPort* port = operation->port(io);
79 if (port == NULL) {
80 boost::format errorMsg(
81 "IO number %1% is not bound to any port in "
82 "operation %2% in FU %3%.");
83 errorMsg % io % operation->name() % fu.name();
84 results.addError(
86 }
87 }
88 }
89}
void addError(MachineValidator::ErrorCode code, const std::string &errorMsg)
@ USED_IO_NOT_BOUND
Pipeline uses an IO which is not bound.
virtual TCEString name() const
OperandSet writtenOperands(int cycle) const
OperandSet readOperands(int cycle) const
std::set< int > OperandSet
Set for operand indexes.
virtual HWOperation * operation(const std::string &name) const
virtual int operationCount() const
ExecutionPipeline * pipeline() const
virtual FUPort * port(int operand) const
const std::string & name() const

References MachineValidatorResults::addError(), TTAMachine::ExecutionPipeline::latency(), TTAMachine::HWOperation::name(), TTAMachine::Component::name(), TTAMachine::FunctionUnit::operation(), TTAMachine::FunctionUnit::operationCount(), TTAMachine::HWOperation::pipeline(), TTAMachine::HWOperation::port(), TTAMachine::ExecutionPipeline::readOperands(), MachineValidator::USED_IO_NOT_BOUND, and TTAMachine::ExecutionPipeline::writtenOperands().

Referenced by HDB::HDBManager::addFUArchitecture(), and MachineValidator::checkOperandBindings().

Here is the call graph for this function:

◆ checkOperations()

void FUValidator::checkOperations ( const TTAMachine::FunctionUnit fu,
MachineValidatorResults results 
)
static

Checks that the FU has at least one operation which is valid, i.e. has at least one triggering input port

Parameters
fuThe function unit.
resultsResults of the validation are added to the given instance.

Definition at line 100 of file FUValidator.cc.

102 {
103
104 for (int i = 0; i < fu.operationCount(); i++) {
105 HWOperation* operation = fu.operation(i);
106 ExecutionPipeline* pLine = operation->pipeline();
108 for (int i = 0; i < pLine->latency(); i++) {
109 ExecutionPipeline::OperandSet readOperands =
110 pLine->readOperands(i);
111 for (ExecutionPipeline::OperandSet::const_iterator iter =
112 readOperands.begin(); iter != readOperands.end(); iter++) {
113 FUPort* port = operation->port(*iter);
114 if (port != NULL && port->isTriggering()) {
115 return;
116 }
117 }
118 }
119 }
120
121 boost::format errorMsg("FU %1% has no valid operations.");
122 errorMsg % fu.name();
123 results.addError(MachineValidator::FU_NO_VALID_OPERATIONS, errorMsg.str());
124}
@ FU_NO_VALID_OPERATIONS
FU has no operations with a trigger.
virtual bool isTriggering() const
Definition FUPort.cc:182

References MachineValidatorResults::addError(), MachineValidator::FU_NO_VALID_OPERATIONS, TTAMachine::FUPort::isTriggering(), TTAMachine::ExecutionPipeline::latency(), TTAMachine::Component::name(), TTAMachine::FunctionUnit::operation(), TTAMachine::FunctionUnit::operationCount(), TTAMachine::HWOperation::pipeline(), TTAMachine::HWOperation::port(), and TTAMachine::ExecutionPipeline::readOperands().

Referenced by HDB::HDBManager::addFUArchitecture().

Here is the call graph for this function:

The documentation for this class was generated from the following files: