return b;
}
-bool Graph::removeGroupBlock(GroupBlock *group) {
+void Graph::removeGroupBlock(GroupBlock *group) {
group->removeAllBlocks();
GroupBlock* parent = AB_TO_GRP(group->getParent());
parent->removeBlock(group);
FunctionalBlock* Graph::duplicateSourceBlock(FunctionalBlock *block) {
- ReferenceBlock* ref = block->getReference();
- GroupBlock* group = AB_TO_GRP(block->getParent());
+ ReferenceBlock* ref = block->getReference();
// adding to the graph
FunctionalBlock* newBlock = createSourceBlock(ref);
return true;
}
-bool Graph::createPatterns() {
- bool ok = true;
+void Graph::createPatterns() throw(Exception) {
+
foreach(AbstractBlock* block, sources) {
FunctionalBlock* funBlock = AB_TO_FUN(block);
- ok = funBlock->createPatterns();
- if (!ok) return false;
+ try {
+ funBlock->createPatterns();
+ }
+ catch(Exception e) {
+ throw(e);
+ }
}
foreach(AbstractBlock* block, groups) {
foreach(AbstractBlock* inBlock, group->getBlocks()) {
if (inBlock->isFunctionalBlock()) {
FunctionalBlock* funBlock = AB_TO_FUN(inBlock);
- ok = funBlock->createPatterns();
- if (!ok) return false;
+ try {
+ funBlock->createPatterns();
+ }
+ catch(Exception e) {
+ throw(e);
+ }
}
}
- }
- return true;
+ }
}
void Graph::resetPatternComputed() {
foreach(AbstractBlock* block, sources) {
block->setPatternComputed(false);
+ block->resetTraversalLevel();
}
foreach(AbstractBlock* block, groups) {
GroupBlock* group = AB_TO_GRP(block);
group->setPatternComputed(false);
+ block->resetTraversalLevel();
foreach(AbstractBlock* inBlock, group->getBlocks()) {
inBlock->setPatternComputed(false);
+ block->resetTraversalLevel();
}
}
}
-bool Graph::computeOutputPatterns(int nbExec) {
+void Graph::computeOutputPatterns(int nbExec) throw(Exception) {
- createPatterns();
- resetPatternComputed();
+ try {
+ createPatterns();
+ }
+ catch(Exception e) {
+ throw(e);
+ }
+
+ resetPatternComputed();
// search for all block that are generators.
QList<FunctionalBlock*> generators;
generators.append(sources);
}
}
}
- // search for maximum delta
- int maxDelta = 0;
+ // search for maximum PP length
+ int maxPP = 0;
foreach(FunctionalBlock* block, generators) {
- if (block->getDelta() > maxDelta) maxDelta = block->getDelta();
+ if (block->getProductionPatternLength() > maxPP) maxPP = block->getProductionPatternLength();
}
// compute output for generators
- int maxExecLen = maxDelta*nbExec;
+ int maxExecLen = maxPP*nbExec;
foreach(FunctionalBlock* block, generators) {
- int d = block->getDelta();
+ int d = block->getProductionPatternLength();
block->computeOutputPattern((maxExecLen+d-1)/d);
}
// compute output for top group
- topGroup->computeOutputPattern();
+ try {
+ topGroup->computeOutputPattern();
+ }
+ catch(Exception e) {
+ throw(e);
+ }
+}
+
+void Graph::generateVHDL(const QString &path) throw(Exception) {
+ try {
+ topGroup->generateVHDL(path);
+ }
+ catch(Exception e) {
+ throw(e);
+ }
}