X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/blast.git/blobdiff_plain/8fb3c55ee009a11db5e1c08a4cfb286979412745..a13795fc34cd1e74f94695d35253c3d00abec9bc:/SpecialBlock.cpp?ds=inline diff --git a/SpecialBlock.cpp b/SpecialBlock.cpp index 8c7cc10..9576dc9 100644 --- a/SpecialBlock.cpp +++ b/SpecialBlock.cpp @@ -1,7 +1,7 @@ #include "SpecialBlock.h" #include "FunctionalInterface.h" -SpecialBlock::SpecialBlock(int _type, GroupBlock* _parent, ReferenceBlock* _reference, bool createIfaces) throw(Exception) : FunctionalBlock(_parent, _reference, createIfaces) { +SpecialBlock::SpecialBlock(Graph *_graph, int _type, GroupBlock* _parent, ReferenceBlock* _reference, bool createIfaces) throw(Exception) : FunctionalBlock(_graph, _parent, _reference, createIfaces) { specialType = _type; } @@ -58,7 +58,7 @@ void SpecialBlock::checkInputPatternCompatibilitySource() throw(Exception) { } void SpecialBlock::computeOutputPatternSource(int nbExec) throw(Exception) { - cout << "computing output pattern of " << qPrintable(name) << " for " << nbExec << " executions" << endl; + cout << "computing output pattern of special block " << qPrintable(name) << " for " << nbExec << " executions" << endl; foreach(AbstractInterface* iface, getControlOutputs()) { FunctionalInterface* connIface = AI_TO_FUN(iface); // create output pattern @@ -79,8 +79,62 @@ void SpecialBlock::computeOutputPatternSink(int nbExec) throw(Exception) { } void SpecialBlock::checkInputPatternCompatibilityClockConvert() throw(Exception) { + static QString fctName = "SpecialBlock::checkInputPatternCompatibilityClockConvert()"; +#ifdef DEBUG_FCTNAME + cout << "call to " << qPrintable(fctName) << endl; +#endif + // just create input pattern + try { + createInputPattern(); + } + catch(Exception e) { + throw(e); + } } + void SpecialBlock::computeOutputPatternClockConvert(int nbExec) throw(Exception) { + static QString fctName = "SpecialBlock::computeOutputPatternClockConvert()"; +#ifdef DEBUG_FCTNAME + cout << "call to " << qPrintable(fctName) << endl; +#endif + cout << "computing output pattern of special block " << qPrintable(name) << endl; + + /* CAUTION: it is assumed that all clock domain converters are using + * a clk_in and clk_out signals for input and output clocks. + */ + AbstractInterface* clkIn = getIfaceFromName("clk_in"); + AbstractInterface* clkOut = getIfaceFromName("clk_out"); + cout << "freq clk_in = " << clkIn->getClockFrequency() << endl; + cout << "freq clk_out = " << clkOut->getClockFrequency() << endl; + + // in case of inputPattern not created, do it + if (lengthIP <= 0) { + + cout << "Strange case: input pattern is not created while it is time to compute output pattern !" << endl; + // collect the input patterns for each input + try { + createInputPattern(); + } + catch(Exception e) { + throw(e); + } + cout << "input pattern array initialized with min. len " << lengthIP << endl; + } + + // initialize the output pattern + lengthOP = 0; + foreach(AbstractInterface* iface, getControlOutputs()) { + FunctionalInterface* connIface = AI_TO_FUN(iface); + lengthOP = lengthIP+productionPattern.value(connIface)->size(); + QList* pattern = new QList(); + for(int i=0;iappend(0); + connIface->setOutputPattern(pattern); + outputPattern.insert(connIface,pattern); + } + cout << "output pattern array initialized" << endl; + + int clock = 0; + }