]> AND Private Git Repository - blast.git/blobdiff - ReferenceBlock.cpp
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
add clk/rst to groups
[blast.git] / ReferenceBlock.cpp
index ae7f0ce6ca80825a0301a7f34c97a6021054850b..fbf78283e3e89259c1544ae00bd4be220e366de2 100644 (file)
@@ -104,11 +104,16 @@ void ReferenceBlock::loadInformations(QDomElement &elt) throw(Exception) {
 
   QString idsStr = eltCat.attribute("ids","none");
   if (idsStr == "none") throw (Exception(BLOCKFILE_CORRUPTED));
 
   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
   }
 
   // getting description
@@ -157,7 +162,7 @@ void ReferenceBlock::loadParameters(QDomElement &elt) throw(Exception) {
         valueStr = "";
     }
     if (contextStr == "user") {
         valueStr = "";
     }
     if (contextStr == "user") {
-      param = new BlockParameterUser(this,nameStr,valueStr);
+      param = new BlockParameterUser(this,nameStr,typeStr,valueStr);
     }
     else if (contextStr == "generic") {
       param = new BlockParameterGeneric(this,nameStr,typeStr,valueStr);
     }
     else if (contextStr == "generic") {
       param = new BlockParameterGeneric(this,nameStr,typeStr,valueStr);
@@ -215,6 +220,7 @@ void ReferenceBlock::loadInterfaces(QDomElement &elt) throw(Exception) {
   QString nameStr;
   QString typeStr;
   QString widthStr;
   QString nameStr;
   QString typeStr;
   QString widthStr;
+  QString endianStr;
   QString purposeStr;
   int purpose;
   QString multStr;
   QString purposeStr;
   int purpose;
   QString multStr;
@@ -232,6 +238,17 @@ void ReferenceBlock::loadInterfaces(QDomElement &elt) throw(Exception) {
     nameStr = eltInput.attribute("name","none");
     typeStr = eltInput.attribute("type","none");
     widthStr = eltInput.attribute("width","none");
     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;
     purposeStr = eltInput.attribute("purpose","none");
     cout << "block : " << this->getName().toStdString() << endl;
     cout << "purpose for " << nameStr.toStdString() << " : " << purposeStr.toStdString() << endl;
@@ -240,7 +257,7 @@ void ReferenceBlock::loadInterfaces(QDomElement &elt) throw(Exception) {
     multStr = eltInput.attribute("multiplicity","none");
     mult = ReferenceInterface::translateMultiplicity(multStr);
 
     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
     inputs.append(inter);
   }
   // getting each control
@@ -252,7 +269,7 @@ void ReferenceBlock::loadInterfaces(QDomElement &elt) throw(Exception) {
     AbstractInterface* dataIface = getIfaceFromName(nameStr);
     if (dataIface == NULL) throw (Exception(BLOCKFILE_CORRUPTED));
     nameStr = dataIface->getName()+"_enb";
     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));      
     }
     if (!inter->setAssociatedIface(dataIface)) {
       throw (Exception(BLOCKFILE_CORRUPTED));      
     }
@@ -267,12 +284,23 @@ void ReferenceBlock::loadInterfaces(QDomElement &elt) throw(Exception) {
     nameStr = eltOutput.attribute("name","none");
     typeStr = eltOutput.attribute("type","none");
     widthStr = eltOutput.attribute("width","none");
     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);
 
     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
     outputs.append(inter);
   }
   // getting each control
@@ -284,7 +312,7 @@ void ReferenceBlock::loadInterfaces(QDomElement &elt) throw(Exception) {
     AbstractInterface* dataIface = getIfaceFromName(nameStr);
     if (dataIface == NULL) throw (Exception(BLOCKFILE_CORRUPTED));
     nameStr = dataIface->getName()+"_enb";
     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));      
     }
     if (!inter->setAssociatedIface(dataIface)) {
       throw (Exception(BLOCKFILE_CORRUPTED));      
     }
@@ -300,12 +328,23 @@ void ReferenceBlock::loadInterfaces(QDomElement &elt) throw(Exception) {
     nameStr = eltBidir.attribute("name","none");
     typeStr = eltBidir.attribute("type","none");
     widthStr = eltBidir.attribute("width","none");
     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);
 
     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);
   }
 }
     bidirs.append(inter);
   }
 }
@@ -320,11 +359,11 @@ void ReferenceBlock::createInterfaceForParameters() throw(Exception){
       cout << "creating interface for parameter wb " << qPrintable(p->getName()) << endl;
       
       if (p->getWBAccess() == BlockParameter::Read) {
       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) {
         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 {
         inputs.append(iface);                
       }
       else {
@@ -383,6 +422,7 @@ QDataStream& operator<<(QDataStream &out, const ReferenceBlock &b) {
     ReferenceInterface *iface = (ReferenceInterface *)(b.inputs.at(i));
     if (iface->getPurpose() == AbstractInterface::Control) {
       toWrite << iface->getName();
     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();    
       toWrite << iface->getWidth();
       toWrite << iface->getPurpose();
       toWrite << iface->getDirection();    
@@ -394,6 +434,7 @@ QDataStream& operator<<(QDataStream &out, const ReferenceBlock &b) {
     ReferenceInterface *iface = (ReferenceInterface *)(b.inputs.at(i));
     if (iface->getPurpose() != AbstractInterface::Control) {
       toWrite << iface->getName();
     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();    
       toWrite << iface->getWidth();
       toWrite << iface->getPurpose();
       toWrite << iface->getDirection();    
@@ -406,6 +447,7 @@ QDataStream& operator<<(QDataStream &out, const ReferenceBlock &b) {
     ReferenceInterface *iface = (ReferenceInterface *)(b.outputs.at(i));
     if (iface->getPurpose() == AbstractInterface::Control) {
       toWrite << iface->getName();
     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();    
       toWrite << iface->getWidth();
       toWrite << iface->getPurpose();
       toWrite << iface->getDirection();    
@@ -417,6 +459,7 @@ QDataStream& operator<<(QDataStream &out, const ReferenceBlock &b) {
     ReferenceInterface *iface = (ReferenceInterface *)(b.outputs.at(i));
     if (iface->getPurpose() != AbstractInterface::Control) {
       toWrite << iface->getName();
     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();    
       toWrite << iface->getWidth();
       toWrite << iface->getPurpose();
       toWrite << iface->getDirection();    
@@ -427,6 +470,7 @@ QDataStream& operator<<(QDataStream &out, const ReferenceBlock &b) {
   for(int i=0; i<b.bidirs.size(); i++){
     ReferenceInterface *iface = (ReferenceInterface *)(b.bidirs.at(i));
     toWrite << iface->getName();
   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();    
     toWrite << iface->getWidth();
     toWrite << iface->getPurpose();
     toWrite << iface->getDirection();    
@@ -471,7 +515,7 @@ QDataStream& operator>>(QDataStream &in, ReferenceBlock &b) {
     in >> valueStr;
 
     if (contextStr == "user") {
     in >> valueStr;
 
     if (contextStr == "user") {
-      p = new BlockParameterUser(&b,nameStr,valueStr);
+      p = new BlockParameterUser(&b,nameStr,typeStr,valueStr);
     }
     else if (contextStr == "generic") {
       p = new BlockParameterGeneric(&b,nameStr,typeStr,valueStr);
     }
     else if (contextStr == "generic") {
       p = new BlockParameterGeneric(&b,nameStr,typeStr,valueStr);
@@ -501,6 +545,9 @@ QDataStream& operator>>(QDataStream &in, ReferenceBlock &b) {
     iface = new ReferenceInterface(&b);
     in >> txt;
     iface->setName(txt);
     iface = new ReferenceInterface(&b);
     in >> txt;
     iface->setName(txt);
+    int type;
+    in >> type;
+    iface->setType(type);
     in >> txt;
     iface->setWidth(txt);
     in >> val;
     in >> txt;
     iface->setWidth(txt);
     in >> val;
@@ -527,6 +574,9 @@ QDataStream& operator>>(QDataStream &in, ReferenceBlock &b) {
     iface = new ReferenceInterface(&b);
     in >> txt;
     iface->setName(txt);
     iface = new ReferenceInterface(&b);
     in >> txt;
     iface->setName(txt);
+    int type;
+    in >> type;
+    iface->setType(type);
     in >> txt;
     iface->setWidth(txt);
     in >> val;
     in >> txt;
     iface->setWidth(txt);
     in >> val;
@@ -553,6 +603,9 @@ QDataStream& operator>>(QDataStream &in, ReferenceBlock &b) {
     iface = new ReferenceInterface(&b);
     in >> txt;
     iface->setName(txt);
     iface = new ReferenceInterface(&b);
     in >> txt;
     iface->setName(txt);
+    int type;
+    in >> type;
+    iface->setType(type);
     in >> txt;
     iface->setWidth(txt);
     in >> val;
     in >> txt;
     iface->setWidth(txt);
     in >> val;
@@ -567,6 +620,16 @@ QDataStream& operator>>(QDataStream &in, ReferenceBlock &b) {
   return in;
 }
 
   return in;
 }
 
-void ReferenceBlock::computeOutputPattern(int nbExec) {
+void ReferenceBlock::checkInputPatternCompatibility()  throw(Exception){
+  throw(Exception(INVALID_REFBLOCK_USE));
+}
+
+void ReferenceBlock::computeOutputPattern(int nbExec)  throw(Exception) {
+  // does strictly nothing
+  throw(Exception(INVALID_REFBLOCK_USE));  
+}
+
+void ReferenceBlock::computeAdmittanceDelays() throw(Exception) {
   // does strictly nothing
   // does strictly nothing
+  throw(Exception(INVALID_REFBLOCK_USE));
 }
 }