OpenASIP
2.0
|
#include <IUResource.hh>
Classes | |
struct | ResourceRecordType |
Public Member Functions | |
virtual | ~IUResource () |
IUResource (const TTAMachine::Machine &mach, const std::string &name, const int registers, const int width, const int latency, const bool signExtension, unsigned int initiationInterval=0) | |
virtual bool | isInUse (const int cycle) const override |
virtual bool | isAvailable (const int cycle, int immRegIndex) const |
virtual bool | isAvailable (const int cycle) const override |
virtual bool | canAssign (const int, const MoveNode &) const override |
virtual bool | canAssign (const int defCycle, const int useCycle, const MoveNode &node, int immRegIndex) const |
virtual void | assign (const int cycle, MoveNode &node) override |
virtual void | assign (const int defCycle, const int useCycle, MoveNode &node, int &index) |
virtual void | unassign (const int cycle, MoveNode &node) override |
virtual bool | isIUResource () const override |
int | registerCount () const |
std::shared_ptr< TTAProgram::TerminalImmediate > | immediateValue (const MoveNode &node) const |
int | immediateWriteCycle (const MoveNode &node) const |
int | width () const |
void | clearOldResources () |
void | clear () override |
![]() | |
virtual | ~SchedulingResource () |
SchedulingResource (const std::string &name, const unsigned int ii=0) | |
virtual int | relatedResourceGroupCount () const |
virtual int | dependentResourceGroupCount () const |
int | relatedResourceCount (const int group) const |
int | dependentResourceCount (const int group) const |
virtual void | addToRelatedGroup (const int group, SchedulingResource &resource) |
virtual void | addToDependentGroup (const int group, SchedulingResource &resource) |
virtual SchedulingResource & | relatedResource (const int group, const int index) const |
virtual SchedulingResource & | dependentResource (const int group, const int index) const |
virtual bool | hasRelatedResource (const SchedulingResource &sResource) const |
virtual bool | hasDependentResource (const SchedulingResource &sResource) const |
virtual const std::string & | name () const |
virtual int | useCount () const |
virtual void | increaseUseCount () |
virtual void | decreaseUseCount () |
virtual bool | isInputPSocketResource () const |
virtual bool | isOutputPSocketResource () const |
virtual bool | isShortImmPSocketResource () const |
virtual bool | isInputFUResource () const |
virtual bool | isOutputFUResource () const |
virtual bool | isExecutionPipelineResource () const |
virtual bool | isBusResource () const |
virtual bool | isSegmentResource () const |
virtual bool | isITemplateResource () const |
int | instructionIndex (int cycle) const |
void | setInitiationInterval (unsigned int ii) |
int | initiationInterval () const |
virtual bool | operator< (const SchedulingResource &other) const |
virtual void | setMaxCycle (unsigned int) |
Protected Member Functions | |
virtual bool | validateDependentGroups () override |
virtual bool | validateRelatedGroups () override |
void | setRegisterCount (const int registers) |
Private Types | |
typedef std::vector< ResourceRecordType * > | ResourceRecordVectorType |
Private Member Functions | |
bool | canAssignUse (int useCycle) const |
IUResource (const IUResource &) | |
IUResource & | operator= (const IUResource &) |
int | findAvailable (const int defCycle, const int useCycle, int immRegIndex) const |
Private Attributes | |
std::vector< ResourceRecordVectorType > | resourceRecord_ |
int | registerCount_ |
int | width_ |
int | latency_ |
bool | signExtension_ |
const TTAMachine::Machine & | machine_ |
Additional Inherited Members | |
![]() | |
int | initiationInterval_ |
An interface for scheduling resources of Resource Model The derived class IUResource
Definition at line 56 of file IUResource.hh.
|
private |
Definition at line 115 of file IUResource.hh.
|
virtual |
Empty destructor
Definition at line 74 of file IUResource.cc.
References SequenceTools::deleteAllItems(), registerCount(), and resourceRecord_.
IUResource::IUResource | ( | const TTAMachine::Machine & | mach, |
const std::string & | name, | ||
const int | registers, | ||
const int | width, | ||
const int | latency, | ||
const bool | signExtension, | ||
unsigned int | initiationInterval = 0 |
||
) |
Constructor defining resource name, register count and register width
name | Name of resource |
registers | Number of registers in IU |
width | Bit width of registers in immediate unit |
latency | Latency of Immediate unit, defaults to 1 in TCE |
signExtension | Indicates if IU is using Zero or Sign extend |
Definition at line 54 of file IUResource.cc.
References registerCount(), and resourceRecord_.
|
private |
|
overridevirtual |
Implementation of abstract method from base class. IUResource requires different api (definition and use cycle) This method is not to be used!
Implements SchedulingResource.
Definition at line 175 of file IUResource.cc.
References abortWithError, assert, TTAProgram::Terminal::index(), TTAProgram::Terminal::isImmediateRegister(), MoveNode::move(), resourceRecord_, and TTAProgram::Move::source().
Referenced by IUBroker::assign().
|
virtual |
Assign resource to given node for given cycle
defCycle | Cycle in which the value of immediate register will be written using instruction template |
useCycle | Cycle in which the value of immediate register will be read by MoveNode |
node | MoveNode that reads the immediate register |
index | Will be used to return index of register assigned |
Definition at line 201 of file IUResource.cc.
References __func__, TTAProgram::Terminal::copy(), findAvailable(), latency_, MoveNode::move(), SchedulingResource::name(), resourceRecord_, TTAProgram::Move::source(), and Conversion::toString().
|
virtual |
Return true if resource can be assigned for given resource in given cycle
defCycle | definition cycle |
useCycle | use of register cycle |
node | MoveNode to test |
Definition at line 321 of file IUResource.cc.
References findAvailable(), SchedulingResource::instructionIndex(), TTAProgram::Terminal::isImmediate(), SchedulingResource::isInUse(), SchedulingResource::isOutputPSocketResource(), latency_, machine_, MoveNode::move(), SchedulingResource::relatedResource(), SchedulingResource::relatedResourceCount(), SchedulingResource::relatedResourceGroupCount(), MachineConnectivityCheck::requiredImmediateWidth(), signExtension_, TTAProgram::Move::source(), and width_.
|
overridevirtual |
Implementation of abstract method from base class. IUResource requires different api (definition and use cycle) This method is not to be used!
Implements SchedulingResource.
Definition at line 282 of file IUResource.cc.
References abortWithError, canAssignUse(), and MoveNode::isMove().
Referenced by IUBroker::allAvailableResources(), and IUBroker::assign().
|
private |
Checks that a immediate value can be read in the given cycle
Definition at line 297 of file IUResource.cc.
References SchedulingResource::instructionIndex(), SchedulingResource::isInUse(), SchedulingResource::isOutputPSocketResource(), SchedulingResource::relatedResource(), SchedulingResource::relatedResourceCount(), and SchedulingResource::relatedResourceGroupCount().
Referenced by canAssign().
|
overridevirtual |
Clears bookkeeping of the scheduling resource.
After this call the state of the resource should be identical to a newly-created and initialized resource.
Reimplemented from SchedulingResource.
Definition at line 587 of file IUResource.cc.
References SchedulingResource::clear(), SequenceTools::deleteAllItems(), registerCount(), and resourceRecord_.
void IUResource::clearOldResources | ( | ) |
Definition at line 560 of file IUResource.cc.
References IUResource::ResourceRecordType::immediateValue_, registerCount(), and resourceRecord_.
Referenced by IUBroker::clearOldResources().
|
private |
Internal helper method, find available register for given pair of definition and use cycles.
Definition at line 491 of file IUResource.cc.
References SchedulingResource::instructionIndex(), latency_, registerCount(), and resourceRecord_.
Referenced by assign(), and canAssign().
std::shared_ptr< TTAProgram::TerminalImmediate > IUResource::immediateValue | ( | const MoveNode & | node | ) | const |
Returns a constant that should be written to immediate register used by MoveNode in cycle
cycle | Cycle in which immediate register is read |
node | MoveNode which is reading the register |
Definition at line 407 of file IUResource.cc.
References __func__, MoveNode::cycle(), TTAProgram::Terminal::index(), TTAProgram::Terminal::isImmediateRegister(), MoveNode::move(), resourceRecord_, and TTAProgram::Move::source().
Referenced by IUBroker::immediateValue(), and IUBroker::isAlreadyAssigned().
int IUResource::immediateWriteCycle | ( | const MoveNode & | node | ) | const |
Returns a cycle in which immediate register used by MoveNode is written
node | MoveNode which is reading the register |
Definition at line 433 of file IUResource.cc.
References MoveNode::cycle(), TTAProgram::Terminal::index(), TTAProgram::Terminal::isImmediateRegister(), MoveNode::move(), resourceRecord_, and TTAProgram::Move::source().
Referenced by IUBroker::immediateWriteCycle().
|
overridevirtual |
Test if resource IUResource is available
cycle | Cycle which to test |
Implements SchedulingResource.
Definition at line 120 of file IUResource.cc.
References isAvailable().
|
virtual |
Test if resource IUResource is available
cycle | Cycle which to test |
register | to test. If -1, any reg ok. |
Definition at line 131 of file IUResource.cc.
References SchedulingResource::instructionIndex(), latency_, registerCount(), and resourceRecord_.
Referenced by isAvailable().
|
overridevirtual |
Test if resource IUResource is used in given cycle
cycle | Cycle which to test |
Implements SchedulingResource.
Definition at line 86 of file IUResource.cc.
References SchedulingResource::instructionIndex(), latency_, registerCount(), and resourceRecord_.
|
overridevirtual |
Allways return true
Reimplemented from SchedulingResource.
Definition at line 368 of file IUResource.cc.
|
private |
int IUResource::registerCount | ( | ) | const |
Get number of registers in IU
Definition at line 395 of file IUResource.cc.
References registerCount_.
Referenced by clear(), clearOldResources(), findAvailable(), isAvailable(), isInUse(), IUResource(), setRegisterCount(), and ~IUResource().
|
protected |
Set the number of registers available in IU
registers | Number of registers in this particular IU |
Definition at line 377 of file IUResource.cc.
References __func__, registerCount(), registerCount_, and resourceRecord_.
|
overridevirtual |
Unassign resource from given node for given cycle
cycle | Cycle in which immediate is read which we want unassign. |
node | MoveNode to remove assignment from |
Implements SchedulingResource.
Definition at line 240 of file IUResource.cc.
References __func__, TTAProgram::TerminalImmediate::copy(), MoveNode::cycle(), TTAProgram::Terminal::index(), TTAProgram::Terminal::isImmediateRegister(), MoveNode::move(), resourceRecord_, TTAProgram::Move::setSource(), and TTAProgram::Move::source().
Referenced by IUBroker::unassign().
|
overrideprotectedvirtual |
Tests if all referred resources in dependent groups are of proper types
Reimplemented from SchedulingResource.
Definition at line 462 of file IUResource.cc.
|
overrideprotectedvirtual |
Tests if all referred resources in related groups are of proper types
Reimplemented from SchedulingResource.
Definition at line 473 of file IUResource.cc.
References SchedulingResource::isInputPSocketResource(), SchedulingResource::isITemplateResource(), SchedulingResource::isOutputPSocketResource(), SchedulingResource::relatedResource(), SchedulingResource::relatedResourceCount(), and SchedulingResource::relatedResourceGroupCount().
int IUResource::width | ( | ) | const |
Returns a width of registers in Immediate Unit.
Definition at line 576 of file IUResource.cc.
References width_.
Referenced by IUBroker::less_width::operator()().
|
private |
Definition at line 129 of file IUResource.hh.
Referenced by assign(), canAssign(), findAvailable(), isAvailable(), and isInUse().
|
private |
Definition at line 133 of file IUResource.hh.
Referenced by canAssign().
|
private |
Definition at line 125 of file IUResource.hh.
Referenced by registerCount(), and setRegisterCount().
|
private |
Definition at line 123 of file IUResource.hh.
Referenced by assign(), clear(), clearOldResources(), findAvailable(), immediateValue(), immediateWriteCycle(), isAvailable(), isInUse(), IUResource(), setRegisterCount(), unassign(), and ~IUResource().
|
private |
Definition at line 131 of file IUResource.hh.
Referenced by canAssign().
|
private |
Definition at line 127 of file IUResource.hh.
Referenced by canAssign(), and width().