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

Private GIT Repository
nearly finished GroupBlock VHDL gen
[blast.git] / BlockParameterWishbone.cpp
1 #include "BlockParameterWishbone.h"\r
2 \r
3 BlockParameterWishbone::BlockParameterWishbone() : BlockParameter() {\r
4   userValue = defaultValue;\r
5   width = "0";\r
6   wbAccess = BlockParameter::Read;\r
7   wbValue = "0";\r
8   wbDuration = BlockParameter::Permanent;\r
9 }\r
10 \r
11 BlockParameterWishbone::BlockParameterWishbone(AbstractBlock* _owner, const QString& _name , const QString& _type, const QString& _width, const QString& _value, int _wbAccess, QString _wbValue, int _wbDuration) : BlockParameter (_owner, _name, _type, _value) {\r
12   userValue = _value;\r
13   width = _width;\r
14   wbAccess = _wbAccess;\r
15   wbValue = _wbValue;\r
16   wbDuration = _wbDuration;\r
17 }\r
18 \r
19 QVariant BlockParameterWishbone::getValue() {\r
20   if (isValueSet()) {\r
21     return userValue;\r
22   }\r
23   return defaultValue;\r
24 }\r
25 \r
26 bool BlockParameterWishbone::isWishboneParameter() {\r
27   return true;\r
28 }\r
29 \r
30 void BlockParameterWishbone::setValue(const QString& _value) {\r
31   userValue = QVariant(_value);\r
32 }\r
33 \r
34 bool BlockParameterWishbone::isValueSet() {\r
35   if (userValue.isNull()) return false;\r
36   return true;\r
37 }\r
38 \r
39 bool BlockParameterWishbone::isDefaultValue() {\r
40   if (userValue == defaultValue) return true;\r
41   return false;\r
42 }\r
43 \r
44 BlockParameter* BlockParameterWishbone::clone() {\r
45   BlockParameter* block = new BlockParameterWishbone(owner,name,getTypeString(),width,defaultValue.toString(),wbAccess,wbValue,wbDuration);\r
46   return block;\r
47 }\r
48 \r
49 QString BlockParameterWishbone::toVHDL(int context, int flags) {\r
50 \r
51   QString ret="";\r
52   bool ok;\r
53   if ((context == BlockParameter::Entity) || (context == BlockParameter::Component)) {\r
54 \r
55     QString formatBool = "%1 : %2 std_logic";\r
56     QString formatVector = "%1 : %2 std_logic_vector(%3 downto %4)";\r
57     if ((flags & BlockParameter::NoComma) == 0) {\r
58       formatBool.append(";");\r
59       formatVector.append(";");\r
60     }\r
61     QString orientation="";\r
62     if (wbAccess == Read) {\r
63       orientation = "out";\r
64     }\r
65     else {\r
66       orientation = "in";\r
67     }\r
68     if (type == Boolean) {\r
69       ret = formatVector.arg(name).arg(orientation);\r
70     }\r
71     else if (type == Natural) {\r
72       int w = width.toInt(&ok);\r
73       if (!ok) {\r
74         ret = formatVector.arg(name).arg(orientation).arg("INVALID SIZE").arg("0");\r
75       }\r
76       else {\r
77         w -= 1;\r
78         ret = formatVector.arg(name).arg(orientation).arg(w).arg("0");\r
79       }\r
80     }\r
81     else if (type == Expression) {\r
82       QString w = width.remove('$');\r
83       w.append("-1");\r
84       ret = formatVector.arg(name).arg(orientation).arg(w).arg("0");\r
85     }\r
86   }\r
87   return ret;\r
88 }\r
89 \r
90 \r