#include "BlockParameterGeneric.h"
#include "BlockParameterPort.h"
#include "BlockParameterWishbone.h"
+#include "Parameters.h"
ReferenceBlock::ReferenceBlock(const QString _xmlFile) : AbstractBlock() {
xmlFile = _xmlFile;
}
else {
QDomText txtName = nodeNameTxt.toText();
- name = txtName.data().trimmed();
+ name = Parameters::normalizeName(txtName.data().trimmed());
cout<< "block name : " << qPrintable(name) << endl;
}
QString idsStr = eltCat.attribute("ids","none");
if (idsStr == "none") throw (Exception(BLOCKFILE_CORRUPTED));
- QStringList listCat = idsStr.split(",");
- foreach(QString str, listCat)
- {
- int idCat = str.toInt(&ok);
- categories.append(idCat);
+ if (idsStr.isEmpty()) {
+ categories.append(99);
+ }
+ else {
+ QStringList listCat = idsStr.split(",");
+ foreach(QString str, listCat)
+ {
+ int idCat = str.toInt(&ok);
+ categories.append(idCat);
+ }
}
// getting description
QString nameStr;
QString typeStr;
QString widthStr;
+ QString endianStr;
QString purposeStr;
int purpose;
QString multStr;
nameStr = eltInput.attribute("name","none");
typeStr = eltInput.attribute("type","none");
widthStr = eltInput.attribute("width","none");
+ endianStr = eltInput.attribute("endian","none");
+ int endianess;
+ if ((endianStr == "none") || (endianStr == "little")) {
+ endianess = AbstractInterface::LittleEndian;
+ }
+ else if (endianStr == "big") {
+ endianess = AbstractInterface::BigEndian;
+ }
+ else {
+ throw (Exception(BLOCKFILE_CORRUPTED));
+ }
purposeStr = eltInput.attribute("purpose","none");
cout << "block : " << this->getName().toStdString() << endl;
cout << "purpose for " << nameStr.toStdString() << " : " << purposeStr.toStdString() << endl;
multStr = eltInput.attribute("multiplicity","none");
mult = ReferenceInterface::translateMultiplicity(multStr);
- inter = new ReferenceInterface(this,nameStr,typeStr,widthStr,AbstractInterface::Input, purpose, mult);
+ inter = new ReferenceInterface(this,nameStr,AbstractInterface::Input, purpose, typeStr, widthStr, endianess, mult);
inputs.append(inter);
}
// getting each control
AbstractInterface* dataIface = getIfaceFromName(nameStr);
if (dataIface == NULL) throw (Exception(BLOCKFILE_CORRUPTED));
nameStr = dataIface->getName()+"_enb";
- inter = new ReferenceInterface(this,nameStr,"boolean","1",AbstractInterface::Input, AbstractInterface::Control, 1);
+ inter = new ReferenceInterface(this,nameStr,AbstractInterface::Input, AbstractInterface::Control,"boolean","1", AbstractInterface::LittleEndian, 1);
if (!inter->setAssociatedIface(dataIface)) {
throw (Exception(BLOCKFILE_CORRUPTED));
}
nameStr = eltOutput.attribute("name","none");
typeStr = eltOutput.attribute("type","none");
widthStr = eltOutput.attribute("width","none");
+ endianStr = eltOutput.attribute("endian","none");
+ int endianess;
+ if ((endianStr == "none") || (endianStr == "little")) {
+ endianess = AbstractInterface::LittleEndian;
+ }
+ else if (endianStr == "big") {
+ endianess = AbstractInterface::BigEndian;
+ }
+ else {
+ throw (Exception(BLOCKFILE_CORRUPTED));
+ }
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);
+ inter = new ReferenceInterface(this,nameStr,AbstractInterface::Output, purpose,typeStr,widthStr, endianess, mult);
outputs.append(inter);
}
// getting each control
AbstractInterface* dataIface = getIfaceFromName(nameStr);
if (dataIface == NULL) throw (Exception(BLOCKFILE_CORRUPTED));
nameStr = dataIface->getName()+"_enb";
- inter = new ReferenceInterface(this,nameStr,"boolean","1",AbstractInterface::Output, AbstractInterface::Control, 1);
+ inter = new ReferenceInterface(this,nameStr,AbstractInterface::Output, AbstractInterface::Control,"boolean","1",AbstractInterface::LittleEndian, 1);
if (!inter->setAssociatedIface(dataIface)) {
throw (Exception(BLOCKFILE_CORRUPTED));
}
nameStr = eltBidir.attribute("name","none");
typeStr = eltBidir.attribute("type","none");
widthStr = eltBidir.attribute("width","none");
+ endianStr = eltBidir.attribute("endian","none");
+ int endianess;
+ if ((endianStr == "none") || (endianStr == "little")) {
+ endianess = AbstractInterface::LittleEndian;
+ }
+ else if (endianStr == "big") {
+ endianess = AbstractInterface::BigEndian;
+ }
+ else {
+ throw (Exception(BLOCKFILE_CORRUPTED));
+ }
purposeStr = eltBidir.attribute("purpose","none");
purpose = ReferenceInterface::translatePurpose(purposeStr);
multStr = eltBidir.attribute("multiplicity","none");
mult = ReferenceInterface::translateMultiplicity(multStr);
- inter = new ReferenceInterface(this,nameStr,typeStr,widthStr,AbstractInterface::InOut, purpose, mult);
+ inter = new ReferenceInterface(this,nameStr,AbstractInterface::InOut, purpose,typeStr,widthStr, endianess, mult);
bidirs.append(inter);
}
}
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);
+ iface = new ReferenceInterface(this,p->getName(), AbstractInterface::Output, AbstractInterface::Wishbone, p->getTypeString(),p->getWidth(), AbstractInterface::LittleEndian, 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);
+ iface = new ReferenceInterface(this,p->getName(), AbstractInterface::Input, AbstractInterface::Wishbone,p->getTypeString(),p->getWidth(),AbstractInterface::LittleEndian,1);
inputs.append(iface);
}
else {
ReferenceInterface *iface = (ReferenceInterface *)(b.inputs.at(i));
if (iface->getPurpose() == AbstractInterface::Control) {
toWrite << iface->getName();
+ toWrite << iface->getType();
toWrite << iface->getWidth();
toWrite << iface->getPurpose();
toWrite << iface->getDirection();
ReferenceInterface *iface = (ReferenceInterface *)(b.inputs.at(i));
if (iface->getPurpose() != AbstractInterface::Control) {
toWrite << iface->getName();
+ toWrite << iface->getType();
toWrite << iface->getWidth();
toWrite << iface->getPurpose();
toWrite << iface->getDirection();
ReferenceInterface *iface = (ReferenceInterface *)(b.outputs.at(i));
if (iface->getPurpose() == AbstractInterface::Control) {
toWrite << iface->getName();
+ toWrite << iface->getType();
toWrite << iface->getWidth();
toWrite << iface->getPurpose();
toWrite << iface->getDirection();
ReferenceInterface *iface = (ReferenceInterface *)(b.outputs.at(i));
if (iface->getPurpose() != AbstractInterface::Control) {
toWrite << iface->getName();
+ toWrite << iface->getType();
toWrite << iface->getWidth();
toWrite << iface->getPurpose();
toWrite << iface->getDirection();
for(int i=0; i<b.bidirs.size(); i++){
ReferenceInterface *iface = (ReferenceInterface *)(b.bidirs.at(i));
toWrite << iface->getName();
+ toWrite << iface->getType();
toWrite << iface->getWidth();
toWrite << iface->getPurpose();
toWrite << iface->getDirection();
iface = new ReferenceInterface(&b);
in >> txt;
iface->setName(txt);
+ int type;
+ in >> type;
+ iface->setType(type);
in >> txt;
iface->setWidth(txt);
in >> val;
iface = new ReferenceInterface(&b);
in >> txt;
iface->setName(txt);
+ int type;
+ in >> type;
+ iface->setType(type);
in >> txt;
iface->setWidth(txt);
in >> val;
iface = new ReferenceInterface(&b);
in >> txt;
iface->setName(txt);
+ int type;
+ in >> type;
+ iface->setType(type);
in >> txt;
iface->setWidth(txt);
in >> val;
return in;
}
-bool ReferenceBlock::computeOutputPattern(int nbExec) {
+void ReferenceBlock::checkInputPatternCompatibility() throw(Exception){
+ throw(Exception(INVALID_REFBLOCK_USE));
+}
+
+void ReferenceBlock::computeOutputPattern(int nbExec) throw(Exception) {
// does strictly nothing
- return false;
+ throw(Exception(INVALID_REFBLOCK_USE));
+}
+
+void ReferenceBlock::computeAdmittanceDelays() throw(Exception) {
+ // does strictly nothing
+ throw(Exception(INVALID_REFBLOCK_USE));
+}
+
+
+void ReferenceBlock::generateVHDL(const QString& path) throw(Exception){
+ throw(Exception(INVALID_REFBLOCK_USE));
+}
+
+void ReferenceBlock::generateComments(QTextStream& out, QDomElement &elt, QString coreFile) throw(Exception) {
+ throw(Exception(INVALID_REFBLOCK_USE));
}
+
+void ReferenceBlock::generateLibraries(QTextStream& out, QDomElement &elt) throw(Exception) {
+ throw(Exception(INVALID_REFBLOCK_USE));
+}
+
+void ReferenceBlock::generateEntity(QTextStream& out, bool hasController) throw(Exception) {
+ throw(Exception(INVALID_REFBLOCK_USE));
+}
+
+void ReferenceBlock::generateArchitecture(QTextStream& out, QDomElement &elt ) throw(Exception) {
+ throw(Exception(INVALID_REFBLOCK_USE));
+}
+
+void ReferenceBlock::generateController(QTextStream& out) throw(Exception) {
+ throw(Exception(INVALID_REFBLOCK_USE));
+}
+