return NULL;
}
+ QFileInfo info(filename);
+ params->projectPath = info.absolutePath();
+ cout << "project path = " << qPrintable(params->projectPath) << endl;
groupList.append(topGroup);
return topGroup;
}
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;
}
if ((ok1 == true) || (ok2 == true)) {
- iface1->getOwner()->getScene()->createConnectionItem(iface1,iface2);
+ iface1->getOwner()->getScene()->createConnectionItem(iface1,iface2, visible);
unselectAllItems();
params->unsaveModif = true;
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;
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<char>* 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";
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 ";
cout << "call to " << qPrintable(fctName) << endl;
#endif
- item->refInter->clearInputModifier();
+ ConnectedInterface* assoIface = AI_TO_CON(item->refInter->getAssociatedIface());
+ assoIface->clearInputModifier();
}
// 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);
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
// 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);
QList<int>* 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