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

Private GIT Repository
finished testbench generation
[blast.git] / BlockParameterGeneric.cpp
index 5b15eb98d368ff60895a5b4eabf719e3e2bb64e9..4ba6c8e69eb6fe2c62faaf86584506764f3d0fe1 100644 (file)
@@ -7,6 +7,9 @@ BlockParameterGeneric::BlockParameterGeneric() : BlockParameter() {
 }\r
 \r
 BlockParameterGeneric::BlockParameterGeneric(AbstractBlock* _owner, const QString &_name, const QString &_type, const QString &_value) : BlockParameter(_owner, _name, _type, _value) {\r
 }\r
 \r
 BlockParameterGeneric::BlockParameterGeneric(AbstractBlock* _owner, const QString &_name, const QString &_type, const QString &_value) : BlockParameter(_owner, _name, _type, _value) {\r
+  /* CAUTION: no check done on the type parameter !\r
+   * It must never be "expression" but something that is numeric/boolean\r
+   */\r
   userValue = defaultValue;\r
 }\r
 \r
   userValue = defaultValue;\r
 }\r
 \r
@@ -56,23 +59,59 @@ QString BlockParameterGeneric::toVHDL(int context, int flags) {
       formatNoValue.append(";");\r
     }\r
 \r
       formatNoValue.append(";");\r
     }\r
 \r
-    if (!userValue.isNull()) {\r
-      ret = formatValue.arg(name).arg(type).arg(userValue.toString());\r
+    QString typeStr = "";\r
+    QString valueStr = "";\r
+    if ((type == Boolean)||(type == Bit)) {\r
+      typeStr = "std_logic";\r
+      if (!userValue.isNull()) {\r
+        valueStr = "'"+userValue.toString()+"'";\r
+        ret = formatValue.arg(name).arg(typeStr).arg(valueStr);\r
+      }\r
+      else if (!defaultValue.isNull()) {\r
+        valueStr = "'"+defaultValue.toString()+"'";\r
+        ret = formatValue.arg(name).arg(typeStr).arg(valueStr);\r
+      }\r
+      else {\r
+        ret = formatNoValue.arg(name).arg(typeStr);\r
+      }\r
     }\r
     }\r
-    else if (!defaultValue.isNull()) {\r
-      ret = formatValue.arg(name).arg(type).arg(defaultValue.toString());\r
+    else if (type == String) {\r
+      typeStr = "string";\r
+      if (!userValue.isNull()) {\r
+        valueStr = "\""+userValue.toString()+"\"";\r
+        ret = formatValue.arg(name).arg(typeStr).arg(valueStr);\r
+      }\r
+      else if (!defaultValue.isNull()) {\r
+        valueStr = "\""+defaultValue.toString()+"\"";\r
+        ret = formatValue.arg(name).arg(typeStr).arg(valueStr);\r
+      }\r
+      else {\r
+        ret = formatNoValue.arg(name).arg(typeStr);\r
+      }\r
     }\r
     else {\r
     }\r
     else {\r
-      ret = formatNoValue.arg(name).arg(type);\r
+      typeStr = getTypeString();\r
+      if (!userValue.isNull()) {\r
+        ret = formatValue.arg(name).arg(typeStr).arg(userValue.toString());\r
+      }\r
+      else if (!defaultValue.isNull()) {\r
+        ret = formatValue.arg(name).arg(typeStr).arg(defaultValue.toString());\r
+      }\r
+      else {\r
+        ret = formatNoValue.arg(name).arg(typeStr);\r
+      }\r
     }\r
   }\r
     }\r
   }\r
-  else if (context == BlockParameter::Architecture) {\r
+  else if (context == BlockParameter::Instance) {\r
     QString format = "%1 => %2";\r
     if ((flags & BlockParameter::NoComma) == 0) {\r
       format.append(";");\r
     }\r
     AbstractBlock* parent = owner->getParent();\r
     QString format = "%1 => %2";\r
     if ((flags & BlockParameter::NoComma) == 0) {\r
       format.append(";");\r
     }\r
     AbstractBlock* parent = owner->getParent();\r
-    BlockParameter* p = parent->getParameterFromName(name);\r
+    BlockParameter* p = NULL;\r
+    if (parent != NULL) {\r
+      p = parent->getParameterFromName(name);\r
+    }\r
     if (p != NULL) {\r
       /* the parent group has a generic parameter with the same\r
            name\r
     if (p != NULL) {\r
       /* the parent group has a generic parameter with the same\r
            name\r
@@ -81,10 +120,26 @@ QString BlockParameterGeneric::toVHDL(int context, int flags) {
     }\r
     else {\r
       if (!userValue.isNull()) {\r
     }\r
     else {\r
       if (!userValue.isNull()) {\r
-        ret = format.arg(name).arg(userValue.toString());\r
+        if ((type == Boolean)||(type == Bit)) {\r
+          ret = format.arg(name).arg("'"+userValue.toString()+"'");\r
+        }\r
+        else if (type == String) {\r
+          ret = format.arg(name).arg("\""+userValue.toString()+"\"");\r
+        }\r
+        else {\r
+          ret = format.arg(name).arg(userValue.toString());\r
+        }\r
       }\r
       else if (!defaultValue.isNull()) {\r
       }\r
       else if (!defaultValue.isNull()) {\r
-        ret = format.arg(name).arg(defaultValue.toString());\r
+        if ((type == Boolean)||(type == Bit)) {\r
+          ret = format.arg(name).arg("'"+defaultValue.toString()+"'");\r
+        }\r
+        else if (type == String) {\r
+          ret = format.arg(name).arg("\""+defaultValue.toString()+"\"");\r
+        }\r
+        else {\r
+          ret = format.arg(name).arg(defaultValue.toString());\r
+        }\r
       }\r
       else {\r
         // abnormal case\r
       }\r
       else {\r
         // abnormal case\r