OpenASIP  2.0
Functions
ProGeTools Namespace Reference

Functions

std::string findHDBPath (std::string name)
 
bool findInOptionList (const std::string &option, std::vector< std::string > list, bool enableAll=true)
 
std::vector< IDF::FUGenerated::DAGOperationgenerateableDAGOperations (const std::vector< IDF::FUGenerated::Info > infos, std::ostream &verbose)
 
std::vector< IDF::FUGenerated::InfocreateFUGeneratableOperationInfos (const ProGeOptions &options, std::ostream &verbose)
 
bool checkForGeneratableFU (const ProGeOptions &options, TTAMachine::FunctionUnit &fu, IDF::FUGenerated &fug, const std::vector< IDF::FUGenerated::Info > &infos, const std::vector< IDF::FUGenerated::DAGOperation > dagops)
 
bool checkForSelectableFU (const ProGeOptions &options, TTAMachine::FunctionUnit &fu, IDF::FUImplementationLocation &loc, std::ostream &verbose)
 
bool checkForSelectableRF (const ProGeOptions &options, TTAMachine::RegisterFile &rf, IDF::RFImplementationLocation &loc, std::ostream &verbose)
 
bool checkForSelectableIU (const ProGeOptions &options, TTAMachine::ImmediateUnit &iu, IDF::IUImplementationLocation &loc, std::ostream &verbose)
 
bool canGenerateFromDAG (const OperationDAG &dag, const std::vector< IDF::FUGenerated::Info > infos, std::vector< IDF::FUGenerated::Info > *subops)
 
int dagLatency (const OperationDAG &dag, const std::unordered_map< std::string, int > &maxOpLatency)
 
int maxLatencyToNode (const OperationDAG &dag, OperationDAGNode &node, const std::unordered_map< std::string, int > &maxOpLatency, bool allowDifference=true)
 
int nodeLatency (OperationDAGNode &node, const std::unordered_map< std::string, int > &maxOpLatency)
 
bool languageMatches (HDB::BlockImplementationFile::Format format, ProGe::HDL language)
 

Function Documentation

◆ canGenerateFromDAG()

bool ProGeTools::canGenerateFromDAG ( const OperationDAG dag,
const std::vector< IDF::FUGenerated::Info infos,
std::vector< IDF::FUGenerated::Info > *  subops 
)

Checks if DAG operation can be implemented, i.e. all basic operations can be implemented

Definition at line 194 of file ProGeTools.cc.

196  {
197  if (dag.isNull()) {
198  return false;
199  }
200 
201  bool canImplement = true;
202  for (int n = 0; n < dag.nodeCount(); ++n) {
203  OperationNode* operationNode =
204  dynamic_cast<OperationNode*>(&dag.node(n));
205  if (operationNode) {
206  std::string operation =
207  operationNode->referencedOperation().name();
208  operation = StringTools::stringToLower(operation);
209 
210  bool foundOperation = false;
211  for (auto&& info : infos) {
212  if (info.operationName == operation) {
213  foundOperation = true;
214  if (subops) {
215  subops->emplace_back(info);
216  }
217  break;
218  }
219  }
220  if (foundOperation == false) {
221  canImplement = false;
222  break;
223  }
224  }
225  }
226  return canImplement;
227 }

References OperationDAG::isNull(), Operation::name(), BoostGraph< GraphNode, GraphEdge >::node(), BoostGraph< GraphNode, GraphEdge >::nodeCount(), OperationNode::referencedOperation(), and StringTools::stringToLower().

Referenced by Automagic::generateableDAGOperations(), generateableDAGOperations(), and FUGen::parseOperations().

Here is the call graph for this function:

◆ checkForGeneratableFU()

bool ProGeTools::checkForGeneratableFU ( const ProGeOptions options,
TTAMachine::FunctionUnit fu,
IDF::FUGenerated fug,
const std::vector< IDF::FUGenerated::Info > &  infos,
const std::vector< IDF::FUGenerated::DAGOperation dagops 
)

Check if given fu can be generated. If so return it in fug.

Definition at line 59 of file ProGeTools.cc.

62  {
63  std::vector<TTAMachine::HWOperation*> operations;
64  std::vector<std::string> genops;
65 
66  for (int i = 0; i < fu.operationCount(); ++i) {
67  operations.emplace_back(fu.operation(i));
68  }
69 
70  for (auto&& op : operations) {
71  int maxLatency;
73  fug.name(), options.fuFrontRegistered, false)) {
74  maxLatency = op->latency() - 1;
76  fug.name(), options.fuMiddleRegistered, false)) {
77  maxLatency = op->latency() - 2;
79  fug.name(), options.fuBackRegistered, false)) {
80  maxLatency = op->latency();
82  fug.name(), options.fuFrontRegistered)) {
83  maxLatency = op->latency() - 1;
85  fug.name(), options.fuMiddleRegistered)) {
86  maxLatency = op->latency() - 2;
87  } else { // Default to back-register
88  maxLatency = op->latency();
89  }
90  for (auto&& info : infos) {
91  if (op->name() == info.operationName &&
92  maxLatency >= info.latency) {
93  fug.addOperation(info);
94  genops.emplace_back(info.operationName);
95  break;
96  }
97  }
98  }
99 
100  for (auto&& op : operations) {
101  for (auto&& dop : dagops) {
102  if (std::find(genops.begin(), genops.end(), op->name()) ==
103  genops.end() &&
104  op->name() == dop.operationName) {
105  fug.addOperation(dop);
106  genops.emplace_back(dop.operationName);
107  }
108  }
109  }
110 
111  size_t neededFUops = fu.operationCount();
112 
113  if (genops.size() == neededFUops) {
114  return true;
115  } else {
116  return false;
117  }
118 }

References IDF::FUGenerated::addOperation(), findInOptionList(), IDF::FUGenerated::name(), TTAMachine::FunctionUnit::operation(), TTAMachine::FunctionUnit::operationCount(), and options.

Referenced by ProGe::ProGeUI::generateIDF().

Here is the call graph for this function:

◆ checkForSelectableFU()

bool ProGeTools::checkForSelectableFU ( const ProGeOptions options,
TTAMachine::FunctionUnit fu,
IDF::FUImplementationLocation loc,
std::ostream &  verbose 
)

Checks if FU has an implementation in hdbs.

Definition at line 352 of file ProGeTools.cc.

354  {
355  (void)verbose;
356  for (auto&& hdb : options.hdbList) {
357  std::string hdbPath = findHDBPath(hdb);
358  HDB::CachedHDBManager& manager =
360  std::set<RowID> rows = manager.fuEntryIDs();
361  for (auto&& row : rows) {
362  auto fuEntry = manager.fuByEntryID(row);
363  if (!fuEntry->hasImplementation() ||
364  !fuEntry->hasArchitecture()) {
365  continue;
366  }
367  auto arch = fuEntry->architecture();
368  auto impl = fuEntry->implementation();
369  // Check that operations match.
370  if (fu.operationCount() != arch.architecture().operationCount()) {
371  continue;
372  }
373  bool wrongLanguage = false;
374  for (int i = 0; i < impl.implementationFileCount(); ++i) {
375  auto f = impl.file(i);
376  if (f.format() ==
378  options.language == ProGe::HDL::Verilog) {
379  wrongLanguage = true;
380  break;
381  } else if (
382  f.format() ==
384  options.language == ProGe::HDL::VHDL) {
385  wrongLanguage = true;
386  break;
387  }
388  }
389  if (wrongLanguage) {
390  continue;
391  }
392  bool found = true;
393  for (int i = 0; i < fu.operationCount(); ++i) {
394  auto op = fu.operation(i);
395  if (!arch.architecture().hasOperation(op->name())) {
396  found = false;
397  break;
398  }
399  if (op->latency() !=
400  arch.architecture().operation(op->name())->latency()) {
401  found = false;
402  break;
403  }
404  }
405  if (!found) {
406  continue;
407  }
408 
409  loc.setID(row);
410  loc.setHDBFile(hdbPath);
411  return true;
412  }
413  }
414 
415  return false;
416 }

References HDB::FUEntry::architecture(), findHDBPath(), HDB::HDBManager::fuByEntryID(), HDB::HDBManager::fuEntryIDs(), HDB::CachedHDBManager::instance(), TTAMachine::FunctionUnit::operation(), TTAMachine::FunctionUnit::operationCount(), options, IDF::UnitImplementationLocation::setHDBFile(), IDF::UnitImplementationLocation::setID(), ProGe::Verilog, and ProGe::VHDL.

Referenced by ProGe::ProGeUI::generateIDF().

Here is the call graph for this function:

◆ checkForSelectableIU()

bool ProGeTools::checkForSelectableIU ( const ProGeOptions options,
TTAMachine::ImmediateUnit iu,
IDF::IUImplementationLocation loc,
std::ostream &  verbose 
)

Checks if RF has an implementation in hdbs.

Definition at line 500 of file ProGeTools.cc.

502  {
503  (void)verbose;
504  for (auto&& hdb : options.hdbList) {
505  std::string hdbPath = findHDBPath(hdb);
506  HDB::CachedHDBManager& manager =
508  std::set<RowID> rows = manager.rfEntryIDs();
509  for (auto&& row : rows) {
510  auto rfEntry = manager.rfByEntryID(row);
511  // Exclude these:
512  if (!rfEntry->hasImplementation() ||
513  !rfEntry->hasArchitecture()) {
514  continue;
515  }
516  auto arch = rfEntry->architecture();
517  auto impl = rfEntry->implementation();
518  bool wrongLanguage = false;
519  for (int i = 0; i < impl.implementationFileCount(); ++i) {
520  auto f = impl.file(i);
521  if (f.format() ==
523  options.language == ProGe::HDL::Verilog) {
524  wrongLanguage = true;
525  break;
526  } else if (
527  f.format() ==
529  options.language == ProGe::HDL::VHDL) {
530  wrongLanguage = true;
531  break;
532  }
533  }
534  if (wrongLanguage) {
535  continue;
536  }
537  if (iu.isUsedAsGuard() != arch.hasGuardSupport()) {
538  continue;
539  }
540  if (iu.maxReads() != arch.readPortCount()) {
541  continue;
542  }
543  if (1 != arch.writePortCount()) {
544  continue;
545  }
546  if (iu.latency() != arch.latency()) {
547  continue;
548  }
549  if (!arch.hasParameterizedWidth() &&
550  (iu.width() != arch.width())) {
551  continue;
552  }
553  if (!arch.hasParameterizedSize() && (iu.size() != arch.size())) {
554  continue;
555  }
556  // Must be a perfect choise.
557  loc.setID(row);
558  loc.setHDBFile(hdbPath);
559  return true;
560  }
561  }
562  return false;
563 }

References HDB::RFEntry::architecture(), findHDBPath(), HDB::CachedHDBManager::instance(), TTAMachine::RegisterFile::isUsedAsGuard(), TTAMachine::ImmediateUnit::latency(), TTAMachine::RegisterFile::maxReads(), options, HDB::HDBManager::rfByEntryID(), HDB::HDBManager::rfEntryIDs(), IDF::UnitImplementationLocation::setHDBFile(), IDF::UnitImplementationLocation::setID(), TTAMachine::BaseRegisterFile::size(), ProGe::Verilog, ProGe::VHDL, and TTAMachine::BaseRegisterFile::width().

Referenced by ProGe::ProGeUI::generateIDF().

Here is the call graph for this function:

◆ checkForSelectableRF()

bool ProGeTools::checkForSelectableRF ( const ProGeOptions options,
TTAMachine::RegisterFile rf,
IDF::RFImplementationLocation loc,
std::ostream &  verbose 
)

Checks if RF has an implementation in hdbs.

Definition at line 422 of file ProGeTools.cc.

424  {
425  (void)verbose;
426  for (auto&& hdb : options.hdbList) {
427  std::string hdbPath = findHDBPath(hdb);
428  HDB::CachedHDBManager& manager =
430  std::set<RowID> rows = manager.rfEntryIDs();
431  for (auto&& row : rows) {
432  auto rfEntry = manager.rfByEntryID(row);
433  // Exclude these:
434  if (!rfEntry->hasImplementation() ||
435  !rfEntry->hasArchitecture()) {
436  continue;
437  }
438  auto arch = rfEntry->architecture();
439  auto impl = rfEntry->implementation();
440  bool wrongLanguage = false;
441  for (int i = 0; i < impl.implementationFileCount(); ++i) {
442  auto f = impl.file(i);
443  if (f.format() ==
445  options.language == ProGe::HDL::Verilog) {
446  wrongLanguage = true;
447  break;
448  } else if (
449  f.format() ==
451  options.language == ProGe::HDL::VHDL) {
452  wrongLanguage = true;
453  break;
454  }
455  }
456  if (wrongLanguage) {
457  continue;
458  }
459  if (rf.isUsedAsGuard() != arch.hasGuardSupport()) {
460  continue;
461  }
462  if (rf.outputPortCount() != arch.readPortCount()) {
463  continue;
464  }
465  if (rf.inputPortCount() != arch.writePortCount()) {
466  continue;
467  }
468  if (rf.bidirPortCount() != arch.bidirPortCount()) {
469  continue;
470  }
471  if (1 != arch.latency()) {
472  continue;
473  }
474  if (rf.guardLatency() != arch.guardLatency()) {
475  continue;
476  }
477  if (!arch.hasParameterizedWidth() &&
478  (rf.width() != arch.width())) {
479  continue;
480  }
481  if (!arch.hasParameterizedSize() && (rf.size() != arch.size())) {
482  continue;
483  }
484  if (rf.zeroRegister() != arch.zeroRegister()) {
485  continue;
486  }
487  // Must be a perfect choise.
488  loc.setID(row);
489  loc.setHDBFile(hdbPath);
490  return true;
491  }
492  }
493  return false;
494 }

References HDB::RFEntry::architecture(), TTAMachine::Unit::bidirPortCount(), findHDBPath(), TTAMachine::RegisterFile::guardLatency(), TTAMachine::Unit::inputPortCount(), HDB::CachedHDBManager::instance(), TTAMachine::RegisterFile::isUsedAsGuard(), options, TTAMachine::Unit::outputPortCount(), HDB::HDBManager::rfByEntryID(), HDB::HDBManager::rfEntryIDs(), IDF::UnitImplementationLocation::setHDBFile(), IDF::UnitImplementationLocation::setID(), TTAMachine::BaseRegisterFile::size(), ProGe::Verilog, ProGe::VHDL, TTAMachine::BaseRegisterFile::width(), and TTAMachine::RegisterFile::zeroRegister().

Referenced by ProGe::ProGeUI::generateIDF().

Here is the call graph for this function:

◆ createFUGeneratableOperationInfos()

std::vector< IDF::FUGenerated::Info > ProGeTools::createFUGeneratableOperationInfos ( const ProGeOptions options,
std::ostream &  verbose 
)

Parses all given hdbs for operation implementations.

Definition at line 306 of file ProGeTools.cc.

307  {
308  std::vector<IDF::FUGenerated::Info> infos;
309 
310  for (auto&& hdb : options.hdbList) {
311  std::string hdbPath = findHDBPath(hdb);
312  verbose << " searching implementations from " << hdbPath << "\n";
313  HDB::CachedHDBManager& manager =
315  std::set<RowID> rows = manager.OperationImplementationIDs();
316  std::vector<IDF::FUGenerated::Info> newInfos;
317  for (auto&& row : rows) {
318  auto opimpl = manager.OperationImplementationByID(row);
319  newInfos.emplace_back(IDF::FUGenerated::Info{
320  opimpl.name, hdbPath, opimpl.id, opimpl.latency});
321  }
322 
323  std::sort(
324  newInfos.begin(), newInfos.end(),
326  return a.latency > b.latency;
327  });
328 
329  infos.insert(infos.end(), newInfos.begin(), newInfos.end());
330  }
331 
332  return infos;
333 }

References findHDBPath(), IDF::FUGenerated::Info::id, HDB::CachedHDBManager::instance(), HDB::HDBManager::OperationImplementationByID(), HDB::HDBManager::OperationImplementationIDs(), and options.

Referenced by ProGe::ProGeUI::generateIDF().

Here is the call graph for this function:

◆ dagLatency()

int ProGeTools::dagLatency ( const OperationDAG dag,
const std::unordered_map< std::string, int > &  maxOpLatency 
)

Finds the maximum latency of the dag. Uses maxOpLatency for the node latencies.

Definition at line 234 of file ProGeTools.cc.

236  {
237  assert(!dag.isNull());
238 
239  int maxLatency = 0;
240 
241  // To find the global critical path, go through every end terminal's
242  // critical path and find the maximum.
243  auto sinkNodes = dag.sinkNodes();
244  for (auto node : sinkNodes) {
245  int latency = maxLatencyToNode(dag, *node, maxOpLatency);
246  maxLatency = std::max(latency, maxLatency);
247  }
248  return maxLatency;
249 }

References assert, OperationDAG::isNull(), maxLatencyToNode(), and BoostGraph< GraphNode, GraphEdge >::sinkNodes().

Referenced by FUGen::parseOperations().

Here is the call graph for this function:

◆ findHDBPath()

std::string ProGeTools::findHDBPath ( std::string  name)

Tries to find full path for hdb file.

Definition at line 339 of file ProGeTools.cc.

339  {
340  if (FileSystem::fileExists(name)) {
341  return name;
342  }
343 
344  std::vector<std::string> paths = Environment::hdbPaths();
345  return FileSystem::findFileInSearchPaths(paths, name);
346 }

References FileSystem::fileExists(), FileSystem::findFileInSearchPaths(), and Environment::hdbPaths().

Referenced by Automagic::checkForSelectableFU(), checkForSelectableFU(), Automagic::checkForSelectableIU(), checkForSelectableIU(), checkForSelectableRF(), Automagic::checkForSelectableRF(), Automagic::createFUGeneratableOperationInfos(), and createFUGeneratableOperationInfos().

Here is the call graph for this function:

◆ findInOptionList()

bool ProGeTools::findInOptionList ( const std::string &  option,
std::vector< std::string >  list,
bool  enableAll = true 
)

Check if option is in the list or list has 'ALL' in it.

Definition at line 124 of file ProGeTools.cc.

126  {
127  std::string lowered_option = StringTools::stringToLower(option);
128  for (auto&& item : list) {
129  std::string lowered_item = StringTools::stringToLower(item);
130  if (lowered_item == lowered_option ||
131  (enableAll && lowered_item == "all")) {
132  return true;
133  }
134  }
135  return false;
136 }

References StringTools::stringToLower().

Referenced by checkForGeneratableFU(), FUGen::createMandatoryPorts(), FUGen::createShadowRegisters(), and FUGen::implement().

Here is the call graph for this function:

◆ generateableDAGOperations()

std::vector< IDF::FUGenerated::DAGOperation > ProGeTools::generateableDAGOperations ( const std::vector< IDF::FUGenerated::Info infos,
std::ostream &  verbose 
)

Find out all operations we can generate from DAG.

Definition at line 142 of file ProGeTools.cc.

143  {
144  std::vector<IDF::FUGenerated::DAGOperation> dagops;
145  std::set<std::string> opNames;
146 
147  verbose << " can implement DAG operations that use:\n ";
148  std::string sep;
149  for (auto&& info : infos) {
150  verbose << sep << info.operationName;
151  sep = ", ";
152  }
153  verbose << "\n";
154 
155  OperationPool opPool;
156  OperationIndex& opIndex = opPool.index();
157  for (int i = 0; i < opIndex.moduleCount(); ++i) {
158  OperationModule& module = opIndex.module(i);
159  for (int j = 0; j < opIndex.operationCount(module); ++j) {
160  std::string opName = opIndex.operationName(j, module);
161  if (opNames.count(opName) > 0) {
162  continue;
163  }
164  Operation& op = opPool.operation(opName.c_str());
165  for (int d = 0; d < op.dagCount(); ++d) {
166  std::vector<IDF::FUGenerated::Info> subops;
167  if (canGenerateFromDAG(op.dag(d), infos, &subops)) {
168  opName = StringTools::stringToLower(opName);
169  dagops.emplace_back(
170  IDF::FUGenerated::DAGOperation{opName, subops});
171  opNames.insert(opName);
172  break;
173  }
174  }
175  }
176  }
177 
178  verbose << " can implement DAG operations:\n ";
179  sep = "";
180  for (auto&& op : dagops) {
181  verbose << sep << op.operationName;
182  sep = ", ";
183  }
184  verbose << "\n";
185 
186  return dagops;
187 }

References canGenerateFromDAG(), Operation::dag(), Operation::dagCount(), OperationPool::index(), OperationIndex::module(), OperationIndex::moduleCount(), OperationPool::operation(), OperationIndex::operationCount(), OperationIndex::operationName(), and StringTools::stringToLower().

Referenced by ProGe::ProGeUI::generateIDF().

Here is the call graph for this function:

◆ languageMatches()

bool ProGeTools::languageMatches ( HDB::BlockImplementationFile::Format  format,
ProGe::HDL  language 
)

◆ maxLatencyToNode()

int ProGeTools::maxLatencyToNode ( const OperationDAG dag,
OperationDAGNode node,
const std::unordered_map< std::string, int > &  maxOpLatency,
bool  allowDifference = true 
)

Definition at line 274 of file ProGeTools.cc.

277  {
278  // Go through all the parents.
279  int maxLeafLatency = -1;
280  for (auto&& e : dag.inEdges(node)) {
281  OperationDAGNode& nextNode = dag.tailNode(*e);
282  // Recursive call to parent nodes
283  int parentLatency = maxLatencyToNode(dag, nextNode, maxOpLatency) +
284  nodeLatency(nextNode, maxOpLatency);
285 
286  if (!allowDifference && maxLeafLatency != -1) {
287  assert(
288  maxLeafLatency == parentLatency &&
289  "Two input edges of DAG node have different latency!");
290  }
291 
292  maxLeafLatency = std::max(maxLeafLatency, parentLatency);
293  }
294 
295  // For nodes without children
296  maxLeafLatency = std::max(maxLeafLatency, 0);
297 
298  // Return only the longest leaf latency.
299  return maxLeafLatency;
300 }

References assert, BoostGraph< GraphNode, GraphEdge >::inEdges(), nodeLatency(), and BoostGraph< GraphNode, GraphEdge >::tailNode().

Referenced by Automagic::dagLatency(), dagLatency(), Automagic::maxLatencyToNode(), and FUGen::scheduleOperations().

Here is the call graph for this function:

◆ nodeLatency()

int ProGeTools::nodeLatency ( OperationDAGNode node,
const std::unordered_map< std::string, int > &  maxOpLatency 
)

Definition at line 252 of file ProGeTools.cc.

254  {
255  int latency = 0;
256 
257  OperationNode* operationNode = dynamic_cast<OperationNode*>(&node);
258  if (operationNode) {
259  std::string subOpName = operationNode->referencedOperation().name();
260  subOpName = StringTools::stringToLower(subOpName);
261  if (maxOpLatency.find(subOpName) != maxOpLatency.end()) {
262  latency = maxOpLatency.at(subOpName);
263  }
264  }
265 
266  return latency;
267 }

References Operation::name(), OperationNode::referencedOperation(), and StringTools::stringToLower().

Referenced by Automagic::maxLatencyToNode(), and maxLatencyToNode().

Here is the call graph for this function:
OperationPool::operation
Operation & operation(const char *name)
Definition: OperationPool.cc:99
OperationDAG::isNull
bool isNull() const
Definition: OperationDAG.hh:48
BoostGraph::tailNode
virtual Node & tailNode(const Edge &edge) const
ProGe::Verilog
@ Verilog
Verilog.
Definition: ProGeTypes.hh:42
BoostGraph::node
Node & node(const int index) const
IDF::UnitImplementationLocation::setHDBFile
virtual void setHDBFile(std::string file)
Definition: UnitImplementationLocation.cc:201
OperationPool::index
OperationIndex & index()
Definition: OperationPool.cc:109
TTAMachine::Unit::bidirPortCount
virtual int bidirPortCount() const
Definition: Unit.cc:174
OperationNode::referencedOperation
Operation & referencedOperation() const
Definition: OperationNode.cc:70
OperationNode
Definition: OperationNode.hh:47
Operation::name
virtual TCEString name() const
Definition: Operation.cc:93
IDF::UnitImplementationLocation::setID
virtual void setID(int id)
Definition: UnitImplementationLocation.cc:210
IDF::FUGenerated::Info::id
int id
Definition: FUGenerated.hh:46
TTAMachine::ImmediateUnit::latency
virtual int latency() const
Definition: ImmediateUnit.cc:155
HDB::CachedHDBManager
Definition: CachedHDBManager.hh:63
HDB::RFEntry::architecture
RFArchitecture & architecture() const
Definition: RFEntry.cc:145
assert
#define assert(condition)
Definition: Application.hh:86
ProGeTools::nodeLatency
int nodeLatency(OperationDAGNode &node, const std::unordered_map< std::string, int > &maxOpLatency)
Definition: ProGeTools.cc:252
TTAMachine::RegisterFile::maxReads
virtual int maxReads() const
Definition: RegisterFile.cc:123
ProGe::VHDL
@ VHDL
VHDL.
Definition: ProGeTypes.hh:41
OperationDAGNode
Definition: OperationDAGNode.hh:45
Environment::hdbPaths
static std::vector< std::string > hdbPaths(bool libraryPathsOnly=false)
Definition: Environment.cc:683
HDB::HDBManager::fuEntryIDs
std::set< RowID > fuEntryIDs() const
Definition: HDBManager.cc:2035
HDB::FUEntry::architecture
FUArchitecture & architecture() const
Definition: FUEntry.cc:129
IDF::FUGenerated::Info
Definition: FUGenerated.hh:43
TTAMachine::FunctionUnit::operationCount
virtual int operationCount() const
Definition: FunctionUnit.cc:419
BoostGraph::sinkNodes
virtual NodeSet sinkNodes() const
Operation
Definition: Operation.hh:59
BoostGraph::inEdges
virtual EdgeSet inEdges(const Node &node) const
HDB::HDBManager::OperationImplementationIDs
std::set< RowID > OperationImplementationIDs() const
Definition: HDBManager.cc:2193
HDB::HDBManager::rfEntryIDs
std::set< RowID > rfEntryIDs() const
Definition: HDBManager.cc:2067
options
static MachInfoCmdLineOptions options
Definition: MachInfo.cc:46
TTAMachine::Unit::outputPortCount
virtual int outputPortCount(bool countBidir=false) const
Definition: Unit.cc:145
Operation::dagCount
virtual int dagCount() const
Definition: Operation.cc:134
TTAMachine::Unit::inputPortCount
virtual int inputPortCount(bool countBidir=false) const
Definition: Unit.cc:160
OperationIndex::moduleCount
int moduleCount() const
HDB::HDBManager::OperationImplementationByID
OperationImplementation OperationImplementationByID(RowID id) const
Definition: HDBManager.cc:2248
ProGeTools::maxLatencyToNode
int maxLatencyToNode(const OperationDAG &dag, OperationDAGNode &node, const std::unordered_map< std::string, int > &maxOpLatency, bool allowDifference=true)
Definition: ProGeTools.cc:274
TTAMachine::RegisterFile::isUsedAsGuard
virtual bool isUsedAsGuard() const
Definition: RegisterFile.cc:567
FileSystem::fileExists
static bool fileExists(const std::string fileName)
OperationModule
Definition: OperationModule.hh:46
ProGeTools::findHDBPath
std::string findHDBPath(std::string name)
Definition: ProGeTools.cc:339
OperationIndex
Definition: OperationIndex.hh:58
IDF::FUGenerated::addOperation
void addOperation(const Info &op)
Definition: FUGenerated.cc:128
ProGeTools::canGenerateFromDAG
bool canGenerateFromDAG(const OperationDAG &dag, const std::vector< IDF::FUGenerated::Info > infos, std::vector< IDF::FUGenerated::Info > *subops)
Definition: ProGeTools.cc:194
TTAMachine::FunctionUnit::operation
virtual HWOperation * operation(const std::string &name) const
Definition: FunctionUnit.cc:363
TTAMachine::RegisterFile::guardLatency
virtual int guardLatency() const
Definition: RegisterFile.cc:333
OperationPool
Definition: OperationPool.hh:52
IDF::FUGenerated::DAGOperation
Definition: FUGenerated.hh:49
IDF::FUGenerated::name
std::string name() const
Definition: FUGenerated.cc:103
TTAMachine::BaseRegisterFile::size
virtual int size() const
TTAMachine::BaseRegisterFile::width
virtual int width() const
FileSystem::findFileInSearchPaths
static std::string findFileInSearchPaths(const std::vector< std::string > &searchPaths, const std::string &file)
Definition: FileSystem.cc:562
BoostGraph::nodeCount
int nodeCount() const
OperationIndex::operationCount
int operationCount(const OperationModule &om)
Definition: OperationIndex.cc:363
HDB::HDBManager::fuByEntryID
FUEntry * fuByEntryID(RowID id) const
Definition: HDBManager.cc:2828
OperationIndex::module
OperationModule & module(int i)
ProGeTools::findInOptionList
bool findInOptionList(const std::string &option, std::vector< std::string > list, bool enableAll=true)
Definition: ProGeTools.cc:124
Operation::dag
virtual OperationDAG & dag(int index) const
Definition: Operation.cc:148
OperationIndex::operationName
std::string operationName(int i, const OperationModule &om)
Definition: OperationIndex.cc:337
StringTools::stringToLower
static std::string stringToLower(const std::string &source)
Definition: StringTools.cc:160
TTAMachine::RegisterFile::zeroRegister
virtual bool zeroRegister() const
Definition: RegisterFile.cc:629
HDB::HDBManager::rfByEntryID
RFEntry * rfByEntryID(RowID id) const
Definition: HDBManager.cc:2885
HDB::CachedHDBManager::instance
static CachedHDBManager & instance(const std::string &hdbFile)
Definition: CachedHDBManager.cc:89