X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/blast.git/blobdiff_plain/abbc64cf04a35ab3549d5c516f44c7c5921baa63..dd3fe103df79a5a4c2962e2f05fec9a9ed58580d:/ReferenceBlock.cpp diff --git a/ReferenceBlock.cpp b/ReferenceBlock.cpp index 8b50bfa..e09b118 100644 --- a/ReferenceBlock.cpp +++ b/ReferenceBlock.cpp @@ -68,6 +68,14 @@ void ReferenceBlock::load(QDomElement &elt) throw(Exception) { 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); } @@ -161,11 +169,16 @@ void ReferenceBlock::loadParameters(QDomElement &elt) throw(Exception) { 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); @@ -204,8 +217,6 @@ void ReferenceBlock::loadInterfaces(QDomElement &elt) throw(Exception) { QString widthStr; QString purposeStr; int purpose; - QString levelStr; - int level; QString multStr; int mult; AbstractInterface* inter; @@ -213,6 +224,7 @@ void ReferenceBlock::loadInterfaces(QDomElement &elt) throw(Exception) { 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;igetName()+"_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;igetName()+"_ctl"; + inter = new ReferenceInterface(this,nameStr,"boolean","1",AbstractInterface::Output, AbstractInterface::Control, 1); + if (!inter->setAssociatedIface(dataIface)) { + throw (Exception(BLOCKFILE_CORRUPTED)); + } outputs.append(inter); } @@ -261,20 +298,41 @@ void ReferenceBlock::loadInterfaces(QDomElement &elt) throw(Exception) { 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 *checkedBlocks, QList *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 *checkedBlocks, QList *blocksToConfigure) { return; } @@ -323,8 +381,7 @@ QDataStream& operator<<(QDataStream &out, const ReferenceBlock &b) { 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(); @@ -333,8 +390,7 @@ QDataStream& operator<<(QDataStream &out, const ReferenceBlock &b) { 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(); @@ -343,8 +399,7 @@ QDataStream& operator<<(QDataStream &out, const ReferenceBlock &b) { toWrite << iface->getName(); toWrite << iface->getWidth(); toWrite << iface->getPurpose(); - toWrite << iface->getDirection(); - toWrite << iface->getLevel(); + toWrite << iface->getDirection(); toWrite << iface->getMultiplicity(); } @@ -421,9 +476,7 @@ QDataStream& operator>>(QDataStream &in, ReferenceBlock &b) { 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); @@ -441,9 +494,7 @@ QDataStream& operator>>(QDataStream &in, ReferenceBlock &b) { iface->setPurpose(val); in >> val; iface->setDirection(val); - in >> val; - iface->setLevel(val); - in >> val; + in >> val; iface->setMultiplicity(val); b.outputs.append(iface); } @@ -460,9 +511,7 @@ QDataStream& operator>>(QDataStream &in, ReferenceBlock &b) { iface->setPurpose(val); in >> val; iface->setDirection(val); - in >> val; - iface->setLevel(val); - in >> val; + in >> val; iface->setMultiplicity(val); b.bidirs.append(iface); }