X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/blast.git/blobdiff_plain/bc5d59217a24b25c1b913bec4a41dd026d02720c..e0eaffd44fc9733bc230a803c80d8d5efd0faca6:/Dispatcher.cpp?ds=sidebyside diff --git a/Dispatcher.cpp b/Dispatcher.cpp index 266160b..574243e 100644 --- a/Dispatcher.cpp +++ b/Dispatcher.cpp @@ -100,7 +100,16 @@ void Dispatcher::setSceneCounter(Context context, int value) { } bool Dispatcher::createConnection(Context context, InterfaceItem *iface1, InterfaceItem *iface2, bool visible) { - + static QString fctName = "Dispatcher::createConnection()"; +#ifdef DEBUG_FCTNAME + cout << "call to " << qPrintable(fctName) << endl; +#endif + + bool testClock = false; + if (context == Design) { + testClock = true; + } + ConnectedInterface* ref1 = iface1->refInter; ConnectedInterface* ref2 = iface2->refInter; // connect both interface @@ -108,30 +117,33 @@ bool Dispatcher::createConnection(Context context, InterfaceItem *iface1, Interf bool ok1 = false; bool ok2 = false; + cout << "trying to create a connection between " << qPrintable(ref1->getOwner()->getName()) << "/" << qPrintable(ref1->getName()); + cout << " and " << qPrintable(ref2->getOwner()->getName()) << "/" << qPrintable(ref2->getName()); + // test the ref1->ref2 connection - if ((ref1->canConnectTo(ref2)) && (ref2->canConnectFrom(ref1))) { + if ((ref1->canConnectTo(ref2,testClock)) && (ref2->canConnectFrom(ref1,testClock))) { ref1->connectTo(ref2); ok1 = true; } // if the first one did not work, test ref2->ref1 - if ((ok1 == false) && (ref2->canConnectTo(ref1)) && (ref1->canConnectFrom(ref2))) { + if ((ok1 == false) && (ref2->canConnectTo(ref1,testClock)) && (ref1->canConnectFrom(ref2,testClock))) { ref2->connectTo(ref1); ok2 = true; } if ((ok1 == true) || (ok2 == true)) { if (ok1) { - cout << "trying to create a connection from " << qPrintable(ref1->getOwner()->getName()) << "/" << qPrintable(ref1->getName()); + cout << " ... done with " << qPrintable(ref1->getOwner()->getName()) << "/" << qPrintable(ref1->getName()); cout << " to " << qPrintable(ref2->getOwner()->getName()) << "/" << qPrintable(ref2->getName()); iface1->getOwner()->getScene()->createConnectionItem(iface1,iface2, visible); } else { - cout << "trying to create a connection from " << qPrintable(ref2->getOwner()->getName()) << "/" << qPrintable(ref2->getName()); + cout << "... done with " << qPrintable(ref2->getOwner()->getName()) << "/" << qPrintable(ref2->getName()); cout << " to " << qPrintable(ref1->getOwner()->getName()) << "/" << qPrintable(ref1->getName()); iface2->getOwner()->getScene()->createConnectionItem(iface2,iface1, visible); } - cout << " ... done." << endl; + cout << endl; unselectAllItems(context); params->unsaveModif = true; @@ -200,6 +212,12 @@ void Dispatcher::generateVHDL(Context context) throw(Exception) { #ifdef DEBUG_FCTNAME cout << "call to " << qPrintable(fctName) << endl; #endif + /* NB: only called in Design context */ + if (context != Design) { + cout << "Abnormal case: call to " << qPrintable(fctName) << " not in Design context" << endl; + return; + } + QDir baseDir(params->projectPath); QDir srcDir(params->projectPath+"/src"); @@ -304,6 +322,12 @@ void Dispatcher::generateBlockVHDL(Context context, BoxItem *item){ #ifdef DEBUG_FCTNAME cout << "call to " << qPrintable(fctName) << endl; #endif + /* NB: only called in Design context */ + if (context != Design) { + cout << "Abnormal case: call to " << qPrintable(fctName) << " not in Design context" << endl; + return; + } + if (item->getRefBlock()->isFunctionalBlock()) { FunctionalBlock* block = AB_TO_FUN(item->getRefBlock()); @@ -321,6 +345,12 @@ void Dispatcher::renameFunctionalBlock(Context context, BoxItem *item){ #ifdef DEBUG_FCTNAME cout << "call to " << qPrintable(fctName) << endl; #endif + /* NB: only called in Design context */ + if (context != Design) { + cout << "Abnormal case: call to " << qPrintable(fctName) << " not in Design context" << endl; + return; + } + GroupWidget* win = item->getScene()->getGroupWidget(); @@ -360,6 +390,12 @@ void Dispatcher::renameGroupBlock(Context context, GroupItem *item){ #ifdef DEBUG_FCTNAME cout << "call to " << qPrintable(fctName) << endl; #endif + /* NB: only called in Design context */ + if (context != Design) { + cout << "Abnormal case: call to " << qPrintable(fctName) << " not in Design context" << endl; + return; + } + GroupWidget* win = item->getScene()->getGroupWidget(); @@ -406,6 +442,12 @@ void Dispatcher::renameStimuliItem(Context context, StimuliItem *item){ #ifdef DEBUG_FCTNAME cout << "call to " << qPrintable(fctName) << endl; #endif + /* NB: only called in Design context */ + if (context != Design) { + cout << "Abnormal case: call to " << qPrintable(fctName) << " not in Design context" << endl; + return; + } + GroupWidget* win = item->getScene()->getGroupWidget(); @@ -446,6 +488,11 @@ void Dispatcher::renameInterface(Context context, InterfaceItem *item) { #ifdef DEBUG_FCTNAME cout << "call to " << qPrintable(fctName) << endl; #endif + /* NB: only called in Design context */ + if (context != Design) { + cout << "Abnormal case: call to " << qPrintable(fctName) << " not in Design context" << endl; + return; + } GroupWidget* win = item->getOwner()->getScene()->getGroupWidget(); @@ -490,6 +537,12 @@ void Dispatcher::showPatterns(Context context, InterfaceItem *item) { #ifdef DEBUG_FCTNAME cout << "call to " << qPrintable(fctName) << endl; #endif + /* NB: only called in Design context */ + if (context != Design) { + cout << "Abnormal case: call to " << qPrintable(fctName) << " not in Design context" << endl; + return; + } + QString msg = ""; if (item->refInter->getDirection() == AbstractInterface::Input) { msg = "Input pattern of iface "; @@ -534,6 +587,12 @@ void Dispatcher::showModifier(Context context, InterfaceItem *item) { #ifdef DEBUG_FCTNAME cout << "call to " << qPrintable(fctName) << endl; #endif + /* NB: only called in Design context */ + if (context != Design) { + cout << "Abnormal case: call to " << qPrintable(fctName) << " not in Design context" << endl; + return; + } + QString msg = ""; ConnectedInterface* assoIface = AI_TO_CON(item->refInter->getAssociatedIface()); AbstractInputModifier* mod = assoIface->getInputModifier(); @@ -551,10 +610,16 @@ void Dispatcher::showModifier(Context context, InterfaceItem *item) { } void Dispatcher::removeModifier(Context context, InterfaceItem *item) { - static QString fctName = "Dispatcher::showModifier()"; + static QString fctName = "Dispatcher::removeModifier()"; #ifdef DEBUG_FCTNAME cout << "call to " << qPrintable(fctName) << endl; #endif + /* NB: only called in Design context */ + if (context != Design) { + cout << "Abnormal case: call to " << qPrintable(fctName) << " not in Design context" << endl; + return; + } + ConnectedInterface* assoIface = AI_TO_CON(item->refInter->getAssociatedIface()); assoIface->clearInputModifier(); @@ -566,6 +631,12 @@ void Dispatcher::duplicateBoxItem(Context context, BoxItem *item){ #ifdef DEBUG_FCTNAME cout << "call to " << qPrintable(fctName) << endl; #endif + /* NB: only called in Design context */ + if (context != Design) { + cout << "Abnormal case: call to " << qPrintable(fctName) << " not in Design context" << endl; + return; + } + GroupScene *scene = item->getScene(); AbstractBlock* block = item->getRefBlock(); @@ -589,6 +660,12 @@ void Dispatcher::duplicateStimuliItem(Context context, StimuliItem *item) { #ifdef DEBUG_FCTNAME cout << "call to " << qPrintable(fctName) << endl; #endif + /* NB: only called in Design context */ + if (context != Design) { + cout << "Abnormal case: call to " << qPrintable(fctName) << " not in Design context" << endl; + return; + } + GroupScene *scene = item->getScene(); AbstractBlock* block = item->getRefBlock(); @@ -612,6 +689,12 @@ void Dispatcher::duplicateInterfaceItem(Context context, InterfaceItem *item) { #ifdef DEBUG_FCTNAME cout << "call to " << qPrintable(fctName) << endl; #endif + /* NB: only called in Design context */ + if (context != Design) { + cout << "Abnormal case: call to " << qPrintable(fctName) << " not in Design context" << endl; + return; + } + AbstractInterface *refI = item->refInter; if (! refI->isFunctionalInterface()) return; @@ -1106,8 +1189,11 @@ void Dispatcher::removeBoxItem(Context context, BoxItem *item) { #ifdef DEBUG_FCTNAME cout << "call to " << qPrintable(fctName) << endl; #endif - - if (context != Design) return; + /* NB: only called in Design context */ + if (context != Design) { + cout << "Abnormal case: call to " << qPrintable(fctName) << " not in Design context" << endl; + return; + } /* a BoxItem (group of func) can be removed only if none of its interfaces is connected to a group interface that is itself @@ -1182,6 +1268,11 @@ void Dispatcher::removeAllBlockConnections(Context context, AbstractBoxItem *ite #ifdef DEBUG_FCTNAME cout << "call to " << qPrintable(fctName) << endl; #endif + /* NB: only called in Design context */ + if (context != Design) { + cout << "Abnormal case: call to " <getInterfaces()) { foreach(ConnectionItem* conn, ifaceItem->connections) { @@ -1195,6 +1286,11 @@ void Dispatcher::removeStimuliItem(Context context, StimuliItem *item) { #ifdef DEBUG_FCTNAME cout << "call to " << qPrintable(fctName) << endl; #endif + /* NB: only called in Design context */ + if (context != Design) { + cout << "Abnormal case: call to " <getFromInterfaceItem(); InterfaceItem* toIfaceItem = connItem->getToInterfaceItem(); @@ -1291,6 +1393,16 @@ void Dispatcher::removeConnection(Context context, ConnectionItem *connItem) { void Dispatcher::connectBoxItemClock(Context context, BoxItem *item, QString clkName, int idGen) throw(Exception) { + static QString fctName = "Dispatcher::connectBoxItemClock()"; +#ifdef DEBUG_FCTNAME + cout << "call to " << qPrintable(fctName) << endl; +#endif + /* NB: only called in Design context */ + if (context != Design) { + cout << "Abnormal case: call to " <searchInterfaceItemByName(clkName); GroupItem* parentGroup = item->getScene()->getGroupItem(); @@ -1324,6 +1436,17 @@ void Dispatcher::connectBoxItemClock(Context context, BoxItem *item, QString clk } void Dispatcher::connectBoxItemReset(Context context, BoxItem *item, QString rstName, int idGen) throw(Exception) { + + static QString fctName = "Dispatcher::connectBoxItemReset()"; +#ifdef DEBUG_FCTNAME + cout << "call to " << qPrintable(fctName) << endl; +#endif + /* NB: only called in Design context */ + if (context != Design) { + cout << "Abnormal case: call to " <searchInterfaceItemByName(rstName); GroupItem* parentGroup = item->getScene()->getGroupItem(); @@ -1357,6 +1480,17 @@ void Dispatcher::connectBoxItemReset(Context context, BoxItem *item, QString rst } void Dispatcher::connectStimuliItemClock(Context context, StimuliItem *item, QString clkName, int idGen) throw(Exception) { + + static QString fctName = "Dispatcher::connectStimuliItemClock()"; +#ifdef DEBUG_FCTNAME + cout << "call to " << qPrintable(fctName) << endl; +#endif + /* NB: only called in Design context */ + if (context != Design) { + cout << "Abnormal case: call to " <searchInterfaceItemByName(clkName); BoxItem* clkrstItem = NULL; @@ -1381,6 +1515,16 @@ void Dispatcher::connectStimuliItemClock(Context context, StimuliItem *item, QSt } void Dispatcher::connectStimuliItemReset(Context context, StimuliItem *item, QString rstName, int idGen) throw(Exception) { + static QString fctName = "Dispatcher::connectStimuliItemReset()"; +#ifdef DEBUG_FCTNAME + cout << "call to " << qPrintable(fctName) << endl; +#endif + /* NB: only called in Design context */ + if (context != Design) { + cout << "Abnormal case: call to " <searchInterfaceItemByName(rstName); BoxItem* clkrstItem = NULL; @@ -1412,6 +1556,17 @@ void Dispatcher::showBlocksLibrary(){ } void Dispatcher::showProperties(Context context, InterfaceItem *inter) { + + static QString fctName = "Dispatcher::showProperties()"; +#ifdef DEBUG_FCTNAME + cout << "call to " << qPrintable(fctName) << endl; +#endif + /* NB: only called in Design context */ + if (context != Design) { + cout << "Abnormal case: call to " <exec(); } @@ -1424,6 +1579,16 @@ void Dispatcher::showProperties(Context context, InterfaceItem *inter) { */ void Dispatcher::connectInterToGroup(Context context, InterfaceItem *item){ + static QString fctName = "Dispatcher::connectInterToGroup()"; +#ifdef DEBUG_FCTNAME + cout << "call to " << qPrintable(fctName) << endl; +#endif + /* NB: only called in Design context */ + if (context != Design) { + cout << "Abnormal case: call to " <refInter; cout << "owner of iface = " << qPrintable(refInter->getOwner()->getName()) << endl; @@ -1445,7 +1610,12 @@ void Dispatcher::connectInterToGroup(Context context, InterfaceItem *item){ parentItem->addInterfaceItem(groupIfaceItem,true); // creating the connection, in graph and with an item - createConnection(context, item, groupIfaceItem); + /* NOTE: + Since the group interface is for now unconnected, it is impossible to determine + its clock domain. Thus, the connection must be created without testing the clock domain + consistency. For that, we cheat by changing the context to Load because it implies no clock test. + */ + createConnection(Load, item, groupIfaceItem); // if groupItem is not topGroup, must also add a new interface to the parent BlockItem BoxItem* parent2Item = parentItem->getParentItem(); @@ -1465,6 +1635,11 @@ void Dispatcher::removeFunctionalInterface(Context context, InterfaceItem *item) #ifdef DEBUG_FCTNAME cout << "call to " << qPrintable(fctName) << endl; #endif + /* NB: only called in Design context */ + if (context != Design) { + cout << "Abnormal case: call to " <computeAdmittanceDelays(); // get the block item that is associated to block