X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/blast.git/blobdiff_plain/4cf57e6db08da791233d75237f62e74bc88dd427..8f0bedf735fe2b306c11c3f4a168245a05e37ccd:/Dispatcher.cpp diff --git a/Dispatcher.cpp b/Dispatcher.cpp index a552f20..c3ff33f 100644 --- a/Dispatcher.cpp +++ b/Dispatcher.cpp @@ -69,6 +69,9 @@ GroupWidget *Dispatcher::loadProject(const QString& filename) { return NULL; } + QFileInfo info(filename); + params->projectPath = info.absolutePath(); + cout << "project path = " << qPrintable(params->projectPath) << endl; groupList.append(topGroup); return topGroup; } @@ -85,7 +88,7 @@ void Dispatcher::closeCurrentProject() { sceneCounter = 0; } -bool Dispatcher::createConnection(InterfaceItem *iface1, InterfaceItem *iface2) { +bool Dispatcher::createConnection(InterfaceItem *iface1, InterfaceItem *iface2, bool visible) { ConnectedInterface* ref1 = iface1->refInter; ConnectedInterface* ref2 = iface2->refInter; @@ -106,7 +109,7 @@ bool Dispatcher::createConnection(InterfaceItem *iface1, InterfaceItem *iface2) } if ((ok1 == true) || (ok2 == true)) { - iface1->getOwner()->getScene()->createConnectionItem(iface1,iface2); + iface1->getOwner()->getScene()->createConnectionItem(iface1,iface2, visible); unselectAllItems(); params->unsaveModif = true; @@ -179,10 +182,8 @@ void Dispatcher::generateBlockVHDL(BoxItem *item){ if (item->getRefBlock()->isFunctionalBlock()) { FunctionalBlock* block = AB_TO_FUN(item->getRefBlock()); - ReferenceBlock* ref = block->getReference(); - BlockImplementation* impl = ref->getImplementations().at(0); try { - impl->generateVHDL(block,"/home/sdomas/"); + block->generateVHDL(params->projectPath); } catch(Exception e) { cout << qPrintable(e.getMessage()) << endl; @@ -371,10 +372,18 @@ void Dispatcher::showPatterns(InterfaceItem *item) { msg += " owned by "; msg += item->refInter->getOwner()->getName(); msg += " is:\n"; - ConnectedInterface* iface = AI_TO_CON(item->refInter->getAssociatedIface()); - ConnectedInterface* fromIface = iface->getConnectedFrom(); - if (fromIface->getOutputPattern() == NULL) return; - foreach(char c, *(fromIface->getOutputPattern())) { + // get the precursor output pattern + ConnectedInterface* connIface = AI_TO_CON(item->refInter->getAssociatedIface()); + QList* out = connIface->getConnectedFrom()->getOutputPattern(); + // get the modifier + AbstractInputModifier* modifier = connIface->getInputModifier(); + // check if the input is modified + if (modifier != NULL) { + + out = modifier->getModifiedInput(out); + } + + foreach(char c, *out) { msg += QString::number((int)c); } msg += "\n"; @@ -401,7 +410,8 @@ void Dispatcher::showModifier(InterfaceItem *item) { cout << "call to " << qPrintable(fctName) << endl; #endif QString msg = ""; - AbstractInputModifier* mod = item->refInter->getInputModifier(); + ConnectedInterface* assoIface = AI_TO_CON(item->refInter->getAssociatedIface()); + AbstractInputModifier* mod = assoIface->getInputModifier(); if (mod->isDelay()) { DelayInputModifier* delay = (DelayInputModifier *)mod; msg = "Pattern of iface "; @@ -421,7 +431,8 @@ void Dispatcher::removeModifier(InterfaceItem *item) { cout << "call to " << qPrintable(fctName) << endl; #endif - item->refInter->clearInputModifier(); + ConnectedInterface* assoIface = AI_TO_CON(item->refInter->getAssociatedIface()); + assoIface->clearInputModifier(); } @@ -546,7 +557,16 @@ GroupWidget *Dispatcher::createTopScene(){ // creating the model part of the group Graph* graph = params->createGraph(); - GroupBlock *refBlock = graph->getTopGroup(); + GroupBlock *topBlock = graph->getTopGroup(); + // creating the clkrstgen block + ReferenceBlock* ref = params->getHiddenReferenceBlock("clkrstgen"); + FunctionalBlock* newOne = params->getGraph()->createFunctionalBlock(topBlock, ref); + ConnectedInterface* fromIface = AI_TO_CON(topBlock->getIfaceFromName("ext_clk")); + ConnectedInterface* toIface = AI_TO_CON(newOne->getIfaceFromName("ext_clk")); + fromIface->connectTo(toIface); + fromIface = AI_TO_CON(topBlock->getIfaceFromName("ext_reset")); + toIface = AI_TO_CON(newOne->getIfaceFromName("ext_reset")); + fromIface->connectTo(toIface); // creating a fake and not connected interface //AbstractInterface* iface = new GroupInterface(refBlock,"grp_iface",AbstractInterface::Input,AbstractInterface::Top); @@ -560,7 +580,7 @@ GroupWidget *Dispatcher::createTopScene(){ params->setTopScene(scene); params->setCurrentScene(scene); // creating the view part of the group - GroupItem *group = new GroupItem(NULL,refBlock,this,params); + GroupItem *group = new GroupItem(NULL,topBlock,this,params); // adding the fake interface to the top group item @@ -1073,10 +1093,12 @@ void Dispatcher::connectInterToGroup(InterfaceItem *item){ // creating/adding the group interface in the graph model GroupInterface *groupInter = new GroupInterface(parentBlock,refInter->getName()+"_group",refInter->getDirection(),refInter->getPurpose()); parentItem->getRefBlock()->addInterface(groupInter); - // creating/adding the group control interface in the graph model - GroupInterface *groupCtlInter = new GroupInterface(parentBlock,refInter->getName()+"_group_enb",refInter->getDirection(),AbstractInterface::Control); - groupCtlInter->setAssociatedIface(groupInter); - parentItem->getRefBlock()->addInterface(groupCtlInter); + // creating/adding the group control interface in the graph model if the purpose is data + if (refInter->getPurpose() == AbstractInterface::Data) { + GroupInterface *groupCtlInter = new GroupInterface(parentBlock,refInter->getName()+"_group_enb",refInter->getDirection(),AbstractInterface::Control); + groupCtlInter->setAssociatedIface(groupInter); + parentItem->getRefBlock()->addInterface(groupCtlInter); + } // creating/adding the group interface in the current scene model, and connection item InterfaceItem *groupIfaceItem = new InterfaceItem(0,item->getOrientation(),groupInter,parentItem,params); parentItem->addInterfaceItem(groupIfaceItem,true); @@ -1216,8 +1238,9 @@ void Dispatcher::findGraphModifications(FunctionalBlock *block) { QList* delay = iterD.value(); if (delay->at(0) > 0) { // create delay and associate it to the connected input - AbstractInputModifier* mod = new DelayInputModifier(delay->at(0)); - ConnectedInterface* toIface = AI_TO_CON(iterD.key()->getAssociatedIface()); + + ConnectedInterface* toIface = AI_TO_CON(iterD.key()); + AbstractInputModifier* mod = new DelayInputModifier(toIface, delay->at(0)); cout << "modify input of " << qPrintable(toIface->getName()) << endl; toIface->setInputModifier(mod); // repaint