X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/blast.git/blobdiff_plain/c25a6c891bde475aa51b4c4f5d42ecd7540910bb..6ca6321283b9c93a6df9dcd5216bfa01df9ad24b:/AbstractBlock.cpp?ds=inline diff --git a/AbstractBlock.cpp b/AbstractBlock.cpp index 13adcae..c1c3c38 100644 --- a/AbstractBlock.cpp +++ b/AbstractBlock.cpp @@ -3,9 +3,11 @@ #include #include "AbstractInterface.h" #include "BlockParameter.h" +#include "Parameters.h" #include "GroupBlock.h" #include "ConnectedInterface.h" + AbstractBlock::AbstractBlock() { name = ""; parent = NULL; @@ -13,7 +15,7 @@ AbstractBlock::AbstractBlock() { /* AbstractBlock::AbstractBlock(const QString& _name) { - name = normalizeName(_name); + name = Parameters::normalizeName(_name); parent = NULL; } */ @@ -29,7 +31,7 @@ AbstractBlock::~AbstractBlock() { } void AbstractBlock::setName(const QString& str) { - name = normalizeName(str); + name = Parameters::normalizeName(str); } void AbstractBlock::setParent(AbstractBlock* _parent) { @@ -57,10 +59,12 @@ bool AbstractBlock::isSourceBlock() { } /* NB: a generator is a block that has no data inputs * and has at least one data output. + * By the way, blokcs that have no data input/output + * (like clkrstgen) are not generators ! */ bool AbstractBlock::isGeneratorBlock() { if (getDataInputs().size() > 0) return false; - + if (getDataOutputs().size() == 0) return false; return true; } @@ -239,18 +243,13 @@ QList AbstractBlock::getWishboneParameters() { return lst; } -QString AbstractBlock::normalizeName(const QString &name) { - QString s = name; - s.replace(QRegularExpression("[^a-zA-Z0-9_]"),"_"); - s.replace(QRegularExpression("[_]+"),"_"); - return s; -} + void AbstractBlock::connectClkReset() throw(Exception) { GroupBlock* parentBlock = AB_TO_GRP(parent); - cout << "connecting clk/rst for child " << qPrintable(name) << " of " << qPrintable(parentBlock->getName()) << endl; + QList lstClk = getInterfaces(AbstractInterface::Input,AbstractInterface::Clock); QList lstRst = getInterfaces(AbstractInterface::Input,AbstractInterface::Reset); @@ -274,10 +273,12 @@ void AbstractBlock::connectClkReset() throw(Exception) { fromClk = AI_TO_CON(clkrstgen->getIfaceFromName("clk")); fromRst = AI_TO_CON(clkrstgen->getIfaceFromName("reset")); } + cout << "connecting clk/rst for " << qPrintable(name) << " to clkrstgen" << endl; } else { fromClk = AI_TO_CON(parentBlock->getIfaceFromName("clk")); fromRst = AI_TO_CON(parentBlock->getIfaceFromName("reset")); + cout << "connecting clk/rst for child " << qPrintable(name) << " of " << qPrintable(parentBlock->getName()) << endl; } if ((fromClk == NULL) || (fromRst == NULL)) { throw(Exception(IFACE_GROUP_NOCLKRST,parentBlock)); @@ -285,10 +286,33 @@ void AbstractBlock::connectClkReset() throw(Exception) { else { fromClk->connectTo(toClk); fromRst->connectTo(toRst); + cout << "connection done between " << qPrintable(toClk->getConnectedFrom()->getOwner()->getName()) << "/" << qPrintable(toClk->getConnectedFrom()->getName()); + cout << " and " << qPrintable(toClk->getOwner()->getName()) << "/" << qPrintable(toClk->getName()) << endl; } +} +void AbstractBlock::generateEntity(QTextStream& out, bool hasController) throw(Exception) { + out << "entity " << name << " is" << endl; + try { + generateEntityOrComponentBody(out, 0, hasController); + } + catch(Exception e) { + throw(e); + } + out << "end entity " << name << ";" << endl << endl; } +void AbstractBlock::generateComponent(QTextStream& out, bool hasController) throw(Exception) { + + out << " component " << name << " is" << endl; + try { + generateEntityOrComponentBody(out, 2, hasController); + } + catch(Exception e) { + throw(e); + } + out << " end component; " << endl << endl; +}