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);
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);
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);
multStr = eltOutput.attribute("multiplicity","none");
mult = ReferenceInterface::translateMultiplicity(multStr);
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);
+ }
QDomElement eltBidirs = eltInputs.nextSiblingElement("bidirs");
QDomNodeList listNodeBidirs = eltBidirs.elementsByTagName("bidir");
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);
multStr = eltBidir.attribute("multiplicity","none");
mult = ReferenceInterface::translateMultiplicity(multStr);
foreach(BlockParameter* param, params) {
if (param->isWishboneParameter()) {
- BlockParameterWishbone* p = (BlockParameterWishbone*)param;
- int orientation = -1;
+
+ 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->getType(),p->getWidth(), AbstractInterface::Output, AbstractInterface::Wishbone,1);
+ 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->getType(),p->getWidth(), AbstractInterface::Input, AbstractInterface::Wishbone,1);
+ iface = new ReferenceInterface(this,p->getName(),p->getTypeString(),p->getWidth(), AbstractInterface::Input, AbstractInterface::Wishbone,1);
inputs.append(iface);
}
- ReferenceInterface* iface = new ReferenceInterface(this,p->getName(),p->getType(),p->getWidth(), orientation, AbstractInterface::Wishbone,1);
+ else {
+ throw (Exception(BLOCKFILE_CORRUPTED));
+ }
}
}
}