X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/blast.git/blobdiff_plain/756baf5c8eaf003e8271dab9c395de2b0e704857..9bfa0c13066918f440ac2b5461fb3f8847f43fd6:/GroupBlock.cpp?ds=sidebyside diff --git a/GroupBlock.cpp b/GroupBlock.cpp index 422cf97..f618789 100644 --- a/GroupBlock.cpp +++ b/GroupBlock.cpp @@ -5,31 +5,48 @@ #include "GroupInterface.h" #include "string.h" #include +#include "Parameters.h" int GroupBlock::counter = 1; GroupBlock::GroupBlock(GroupBlock *_parent) throw(Exception) : AbstractBlock() { + GroupInterface* clk = NULL; + GroupInterface* rst = NULL; + // force topGroup to false if this group has a parent if (_parent != NULL) { topGroup = false; name = QString("sub_group")+"_"+QString::number(counter++); + // creating clk/rst interfaces + clk = new GroupInterface(this,"clk", AbstractInterface::Input, AbstractInterface::Clock); + rst = new GroupInterface(this,"reset", AbstractInterface::Input, AbstractInterface::Reset); + addInterface(clk); + addInterface(rst); } else { topGroup = true; name = QString("top_group"); // creating external clk/rst interfaces - GroupInterface* clk = new GroupInterface(this,"ext_clk", AbstractInterface::Input, AbstractInterface::Clock); - GroupInterface* rst = new GroupInterface(this,"ext_reset", AbstractInterface::Input, AbstractInterface::Reset); + clk = new GroupInterface(this,"ext_clk", AbstractInterface::Input, AbstractInterface::Clock); + rst = new GroupInterface(this,"ext_reset", AbstractInterface::Input, AbstractInterface::Reset); addInterface(clk); addInterface(rst); - // creating clkrstgen block : done in Dispatcher since this has no access to library + // creating clkrstgen block and connecting it to this: done in Dispatcher since this has no access to library } parent = _parent; - if (parent != NULL) { - // adding this to the child blocks of parent - AB_TO_GRP(parent)->addBlock(this); + + if (_parent != NULL) { + try { + connectClkReset(); + } + catch(Exception e) { + AbstractBlock* source = (AbstractBlock *)(e.getSource()); + cerr << qPrintable(source->getName()) << ":" << qPrintable(e.getMessage()) << endl; + throw(e); + } } + } GroupBlock::~GroupBlock() { @@ -153,20 +170,22 @@ void GroupBlock::computeOutputPattern(int nbExec) throw(Exception) { if (block->getControlOutputs().size() > 0) addIt = true; } else { - // if the block has all its connected inputs that are connected to an intput of the group, add it too - addIt = true; - foreach(AbstractInterface* iface, block->getControlInputs()) { - //cout << qPrintable(iface->getName()) << " of " << qPrintable(iface->getOwner()->getName()) << " connected to " << endl; - ConnectedInterface* connFrom = ((ConnectedInterface*)iface)->getConnectedFrom(); - //cout << qPrintable(connFrom->getName()) << " of " << qPrintable(connFrom->getOwner()->getName()) << endl; - - if (connFrom == NULL) { - addIt = false; - break; - } - else if (connFrom->getOwner() != this) { - addIt = false; - break; + // if the block has all its connected control inputs that are connected to an intput of the group, add it too + if (block->getControlInputs().size() > 0) { + addIt = true; + foreach(AbstractInterface* iface, block->getControlInputs()) { + //cout << qPrintable(iface->getName()) << " of " << qPrintable(iface->getOwner()->getName()) << " connected to " << endl; + ConnectedInterface* connFrom = ((ConnectedInterface*)iface)->getConnectedFrom(); + //cout << qPrintable(connFrom->getName()) << " of " << qPrintable(connFrom->getOwner()->getName()) << endl; + + if (connFrom == NULL) { + addIt = false; + break; + } + else if (connFrom->getOwner() != this) { + addIt = false; + break; + } } } } @@ -253,7 +272,7 @@ void GroupBlock::generateVHDL(const QString& path) throw(Exception) { QString coreFile = ""; coreFile = path; - coreFile.append(normalizeName(name)); + coreFile.append(Parameters::normalizeName(name)); coreFile.append(".vhd"); QFile vhdlCore(coreFile); @@ -262,13 +281,15 @@ void GroupBlock::generateVHDL(const QString& path) throw(Exception) { throw(Exception(VHDLFILE_NOACCESS)); } + cout << "generate VHDL of block " << qPrintable(name) << " in " << qPrintable(coreFile) << endl; QTextStream outCore(&vhdlCore); + QDomElement dummyElt; try { - generateComments(outCore); - generateLibraries(outCore); + generateComments(outCore,dummyElt,""); + generateLibraries(outCore,dummyElt); generateEntity(outCore); - generateArchitecture(outCore); + generateArchitecture(outCore,dummyElt); } catch(Exception err) { throw(err); @@ -278,11 +299,11 @@ void GroupBlock::generateVHDL(const QString& path) throw(Exception) { } -void GroupBlock::generateComments(QTextStream& out) throw(Exception) { +void GroupBlock::generateComments(QTextStream& out, QDomElement &elt, QString coreFile) throw(Exception) { out << " -- VHDL generated automatically for " << name << " --" << endl << endl; } -void GroupBlock::generateLibraries(QTextStream& out) throw(Exception) { +void GroupBlock::generateLibraries(QTextStream& out, QDomElement &elt) throw(Exception) { out << "library IEEE;" << endl; out << "use IEEE.STD_LOGIC_1164.all;" << endl; @@ -290,7 +311,7 @@ void GroupBlock::generateLibraries(QTextStream& out) throw(Exception) { } -void GroupBlock::generateEntity(QTextStream& out) throw(Exception) { +void GroupBlock::generateEntity(QTextStream& out, bool hasController) throw(Exception) { int i; @@ -393,7 +414,11 @@ void GroupBlock::generateEntity(QTextStream& out) throw(Exception) { } -void GroupBlock::generateArchitecture(QTextStream& out) throw(Exception) { +void GroupBlock::generateArchitecture(QTextStream& out, QDomElement &elt) throw(Exception) { } +void GroupBlock::generateController(QTextStream &out) throw(Exception) { + +} +