try {
loadInterfaces(eltInter);
}
+ catch(int err) {
+ throw(err);
+ }
+
+ // create interfaces that correspond to a wishbone parameter, if any.
+ try {
+ createInterfaceForParameters();
+ }
catch(int err) {
throw(err);
}
int duration = 0;
QString wbValue = "";
QStringList listWb = wbStr.split(",");
+ cout << "wb param has:";
+ foreach(QString s, listWb) {
+ cout << qPrintable(s) << " | ";
+ }
+ cout << endl;
if (listWb.at(0) == "r") {
access = BlockParameter::Read;
}
- else if (wbStr == "w") {
+ else if (listWb.at(0) == "w") {
access = BlockParameter::Write;
bool ok;
wbValue = listWb.at(1).toInt(&ok);
QString widthStr;
QString purposeStr;
int purpose;
- QString levelStr;
- int level;
QString multStr;
int mult;
AbstractInterface* inter;
if ((elt.isNull()) || (elt.tagName() != "interfaces")) throw (Exception(BLOCKFILE_CORRUPTED));
QDomElement eltInputs = elt.firstChildElement("inputs");
+ // getting each input
QDomNodeList listNodeInputs = eltInputs.elementsByTagName("input");
for(int i=0;i<listNodeInputs.size();i++) {
QDomNode node = listNodeInputs.at(i);
cout << "purpose for " << nameStr.toStdString() << " : " << purposeStr.toStdString() << endl;
purpose = ReferenceInterface::translatePurpose(purposeStr);
cout << "translated purpose : " << purpose << endl;
- levelStr = eltInput.attribute("level","none");
- level = ReferenceInterface::translateLevel(levelStr);
multStr = eltInput.attribute("multiplicity","none");
mult = ReferenceInterface::translateMultiplicity(multStr);
- inter = new ReferenceInterface(this,nameStr,typeStr,widthStr,AbstractInterface::Input, purpose, level, mult);
+ inter = new ReferenceInterface(this,nameStr,typeStr,widthStr,AbstractInterface::Input, purpose, mult);
+ inputs.append(inter);
+ }
+ // getting each control
+ QDomNodeList listNodeInCtl = eltInputs.elementsByTagName("control");
+ for(int i=0;i<listNodeInCtl.size();i++) {
+ QDomNode node = listNodeInCtl.at(i);
+ QDomElement eltInput = node.toElement();
+ nameStr = eltInput.attribute("iface","none");
+ AbstractInterface* dataIface = getIfaceFromName(nameStr);
+ if (dataIface == NULL) throw (Exception(BLOCKFILE_CORRUPTED));
+ nameStr = dataIface->getName()+"_ctl";
+ inter = new ReferenceInterface(this,nameStr,"boolean","1",AbstractInterface::Input, AbstractInterface::Control, 1);
+ if (!inter->setAssociatedIface(dataIface)) {
+ throw (Exception(BLOCKFILE_CORRUPTED));
+ }
inputs.append(inter);
}
-
QDomElement eltOutputs = eltInputs.nextSiblingElement("outputs");
QDomNodeList listNodeOutputs = eltOutputs.elementsByTagName("output");
for(int i=0;i<listNodeOutputs.size();i++) {
nameStr = eltOutput.attribute("name","none");
typeStr = eltOutput.attribute("type","none");
widthStr = eltOutput.attribute("width","none");
- purposeStr = eltOutput.attribute("type","none");
+ purposeStr = eltOutput.attribute("purpose","none");
purpose = ReferenceInterface::translatePurpose(purposeStr);
- levelStr = eltOutput.attribute("level","none");
- level = ReferenceInterface::translateLevel(levelStr);
multStr = eltOutput.attribute("multiplicity","none");
mult = ReferenceInterface::translateMultiplicity(multStr);
- inter = new ReferenceInterface(this,nameStr,typeStr,widthStr,AbstractInterface::Output, purpose, level, mult);
+ inter = new ReferenceInterface(this,nameStr,typeStr,widthStr,AbstractInterface::Output, purpose, mult);
+ outputs.append(inter);
+ }
+ // getting each control
+ QDomNodeList listNodeOutCtl = eltOutputs.elementsByTagName("control");
+ for(int i=0;i<listNodeOutCtl.size();i++) {
+ QDomNode node = listNodeOutCtl.at(i);
+ QDomElement eltOutput = node.toElement();
+ nameStr = eltOutput.attribute("iface","none");
+ AbstractInterface* dataIface = getIfaceFromName(nameStr);
+ if (dataIface == NULL) throw (Exception(BLOCKFILE_CORRUPTED));
+ nameStr = dataIface->getName()+"_ctl";
+ inter = new ReferenceInterface(this,nameStr,"boolean","1",AbstractInterface::Output, AbstractInterface::Control, 1);
+ if (!inter->setAssociatedIface(dataIface)) {
+ throw (Exception(BLOCKFILE_CORRUPTED));
+ }
outputs.append(inter);
}
nameStr = eltBidir.attribute("name","none");
typeStr = eltBidir.attribute("type","none");
widthStr = eltBidir.attribute("width","none");
- purposeStr = eltBidir.attribute("type","none");
+ purposeStr = eltBidir.attribute("purpose","none");
purpose = ReferenceInterface::translatePurpose(purposeStr);
- levelStr = eltBidir.attribute("level","none");
- level = ReferenceInterface::translateLevel(levelStr);
multStr = eltBidir.attribute("multiplicity","none");
mult = ReferenceInterface::translateMultiplicity(multStr);
- inter = new ReferenceInterface(this,nameStr,typeStr,widthStr,AbstractInterface::InOut, purpose, level, mult);
+ inter = new ReferenceInterface(this,nameStr,typeStr,widthStr,AbstractInterface::InOut, purpose, mult);
bidirs.append(inter);
}
}
-void ReferenceBlock::parametersValidation(QList<AbstractBlock *> *checkedBlocks, QList<AbstractBlock *> *blocksToConfigure)
-{
+void ReferenceBlock::createInterfaceForParameters() throw(Exception){
+ ReferenceInterface* iface = NULL;
+ foreach(BlockParameter* param, params) {
+
+ if (param->isWishboneParameter()) {
+
+ BlockParameterWishbone* p = (BlockParameterWishbone*)param;
+ cout << "creating interface for parameter wb " << qPrintable(p->getName()) << endl;
+
+ if (p->getWBAccess() == BlockParameter::Read) {
+ iface = new ReferenceInterface(this,p->getName(),p->getTypeString(),p->getWidth(), AbstractInterface::Output, AbstractInterface::Wishbone,1);
+ outputs.append(iface);
+ }
+ else if (p->getWBAccess() == BlockParameter::Write) {
+ iface = new ReferenceInterface(this,p->getName(),p->getTypeString(),p->getWidth(), AbstractInterface::Input, AbstractInterface::Wishbone,1);
+ inputs.append(iface);
+ }
+ else {
+ throw (Exception(BLOCKFILE_CORRUPTED));
+ }
+ }
+ }
+}
+
+void ReferenceBlock::parametersValidation(QList<AbstractBlock *> *checkedBlocks, QList<AbstractBlock *> *blocksToConfigure) {
return;
}
toWrite << iface->getName();
toWrite << iface->getWidth();
toWrite << iface->getPurpose();
- toWrite << iface->getDirection();
- toWrite << iface->getLevel();
+ toWrite << iface->getDirection();
toWrite << iface->getMultiplicity();
}
toWrite << b.outputs.size();
toWrite << iface->getName();
toWrite << iface->getWidth();
toWrite << iface->getPurpose();
- toWrite << iface->getDirection();
- toWrite << iface->getLevel();
+ toWrite << iface->getDirection();
toWrite << iface->getMultiplicity();
}
toWrite << b.bidirs.size();
toWrite << iface->getName();
toWrite << iface->getWidth();
toWrite << iface->getPurpose();
- toWrite << iface->getDirection();
- toWrite << iface->getLevel();
+ toWrite << iface->getDirection();
toWrite << iface->getMultiplicity();
}
in >> val;
iface->setPurpose(val);
in >> val;
- iface->setDirection(val);
- in >> val;
- iface->setLevel(val);
+ iface->setDirection(val);
in >> val;
iface->setMultiplicity(val);
b.inputs.append(iface);
iface->setPurpose(val);
in >> val;
iface->setDirection(val);
- in >> val;
- iface->setLevel(val);
- in >> val;
+ in >> val;
iface->setMultiplicity(val);
b.outputs.append(iface);
}
iface->setPurpose(val);
in >> val;
iface->setDirection(val);
- in >> val;
- iface->setLevel(val);
- in >> val;
+ in >> val;
iface->setMultiplicity(val);
b.bidirs.append(iface);
}