00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef _SIGNALS_
00025 #define _SIGNALS_
00026
00027 #include "tlib.hh"
00028 #include "binop.hh"
00029 #include <assert.h>
00030 #include <vector>
00031
00032 using namespace std;
00033
00034
00036
00040
00041
00042
00043 Tree sigInt(int n);
00044 Tree sigReal(float n);
00045
00046 bool isSigInt(Tree t, int* i);
00047 bool isSigReal(Tree t, float* r);
00048
00049
00050
00051 Tree sigInput(int i);
00052 Tree sigOutput(int i, Tree t);
00053
00054 bool isSigInput(Tree t, int* i);
00055 bool isSigOutput(Tree t, int* i, Tree& t0);
00056
00057
00058 Tree sigDelay0(Tree t);
00059 Tree sigDelay1(Tree t);
00060 bool isSigDelay1(Tree t, Tree& t0);
00061
00062 Tree sigFixDelay(Tree t0, Tree t1);
00063 bool isSigFixDelay(Tree t, Tree& t0, Tree& t1);
00064
00065 Tree sigPrefix(Tree t0, Tree t1);
00066 bool isSigPrefix(Tree t, Tree& t0, Tree& t1);
00067
00068 Tree sigIota(Tree t0);
00069 bool isSigIota(Tree t, Tree& t0);
00070
00071
00072 Tree sigIntCast(Tree t);
00073 Tree sigFloatCast(Tree t);
00074
00075 bool isSigIntCast(Tree t);
00076 bool isSigFloatCast(Tree t);
00077
00078 bool isSigIntCast(Tree t, Tree& x);
00079 bool isSigFloatCast(Tree t, Tree& x);
00080
00081
00082
00083 Tree sigRDTbl (Tree t, Tree i);
00084 Tree sigWRTbl (Tree id, Tree t, Tree i, Tree s);
00085 Tree sigTable (Tree id, Tree n, Tree sig);
00086 Tree sigGen (Tree content);
00087
00088 bool isSigRDTbl (Tree s, Tree& t, Tree& i);
00089 bool isSigWRTbl (Tree u, Tree& id, Tree& t, Tree& i, Tree& s);
00090 bool isSigTable (Tree t, Tree& id, Tree& n, Tree& sig);
00091 bool isSigGen (Tree t, Tree& content);
00092 bool isSigGen (Tree t);
00093
00094 inline Tree sigWriteReadTable(Tree n, Tree init, Tree widx, Tree wsig, Tree ridx)
00095 {
00096 return sigRDTbl(sigWRTbl(nil, sigTable(nil, n, sigGen(init)), widx, wsig), ridx);
00097 }
00098
00099 inline Tree sigReadOnlyTable(Tree n, Tree init, Tree ridx)
00100 {
00101 return sigRDTbl(sigTable(nil, n, sigGen(init)), ridx);
00102 }
00103
00104
00105
00106 Tree sigSelect2 (Tree selector, Tree s1, Tree s2);
00107 Tree sigSelect3 (Tree selector, Tree s1, Tree s2, Tree s3);
00108
00109 bool isSigSelect2 (Tree t, Tree& selector, Tree& s1, Tree& s2);
00110 bool isSigSelect3 (Tree t, Tree& selector, Tree& s1, Tree& s2, Tree& s3);
00111
00112
00113 Tree sigBinOp (int op, Tree x, Tree y);
00114 bool isSigBinOp (Tree s, int* op, Tree& x, Tree& y);
00115
00116
00117 Tree sigFFun (Tree ff, Tree largs);
00118 bool isSigFFun (Tree s, Tree& ff, Tree& largs);
00119
00120
00121
00122 Tree sigFConst (Tree type, Tree name, Tree file);
00123 bool isSigFConst (Tree s);
00124 bool isSigFConst (Tree s, Tree& type, Tree& name, Tree& file);
00125
00126
00127
00128 Tree sigFVar (Tree type, Tree name, Tree file);
00129 bool isSigFVar (Tree s);
00130 bool isSigFVar (Tree s, Tree& type, Tree& name, Tree& file);
00131
00132
00133 inline Tree sigAdd(Tree x, Tree y) { return sigBinOp(kAdd, x, y); }
00134 inline Tree sigSub(Tree x, Tree y) { return sigBinOp(kSub, x, y); }
00135 inline Tree sigMul(Tree x, Tree y) { return sigBinOp(kMul, x, y); }
00136 inline Tree sigDiv(Tree x, Tree y) { return sigBinOp(kDiv, x, y); }
00137 inline Tree sigRem(Tree x, Tree y) { return sigBinOp(kRem, x, y); }
00138
00139 inline Tree sigAND(Tree x, Tree y) { return sigBinOp(kAND, x, y); }
00140 inline Tree sigOR(Tree x, Tree y) { return sigBinOp(kOR, x, y); }
00141 inline Tree sigXOR(Tree x, Tree y) { return sigBinOp(kXOR, x, y); }
00142
00143 inline Tree sigLeftShift(Tree x, Tree y) { return sigBinOp(kLsh, x, y); }
00144 inline Tree sigRightShift(Tree x, Tree y) { return sigBinOp(kRsh, x, y); }
00145
00146 inline Tree sigGT(Tree x, Tree y) { return sigBinOp(kGT, x, y); }
00147 inline Tree sigLT(Tree x, Tree y) { return sigBinOp(kLT, x, y); }
00148 inline Tree sigGE(Tree x, Tree y) { return sigBinOp(kGE, x, y); }
00149 inline Tree sigLE(Tree x, Tree y) { return sigBinOp(kLE, x, y); }
00150 inline Tree sigEQ(Tree x, Tree y) { return sigBinOp(kEQ, x, y); }
00151 inline Tree sigNE(Tree x, Tree y) { return sigBinOp(kNE, x, y); }
00152
00153
00154 bool isSigAdd (Tree a, Tree&x, Tree&y);
00155 bool isSigMul (Tree a, Tree&x, Tree&y);
00156 bool isSigSub (Tree a, Tree&x, Tree&y);
00157 bool isSigDiv (Tree a, Tree&x, Tree&y);
00158
00159
00160 Tree addNums (Tree a, Tree b);
00161 Tree subNums (Tree a, Tree b);
00162 Tree mulNums (Tree a, Tree b);
00163 Tree divNums (Tree a, Tree b);
00164 Tree divExtendedNums (Tree a, Tree b);
00165 Tree minusNum (Tree a);
00166 Tree inverseNum (Tree a);
00167
00168
00169 inline bool isNum (Tree a) { assert(a); return isNum(a->node()); }
00170 inline bool isZero (Tree a) { assert(a); return isZero(a->node()); }
00171 inline bool isGTZero (Tree a) { assert(a); return isGTZero(a->node()); }
00172 inline bool isGEZero (Tree a) { assert(a); return isGEZero(a->node()); }
00173 inline bool isOne (Tree a) { assert(a); return isOne(a->node()); }
00174 inline bool isMinusOne (Tree a) { assert(a); return isMinusOne(a->node()); }
00175
00176
00177 Tree sigProj (int i, Tree rgroup);
00178 bool isProj (Tree t, int* i, Tree& rgroup);
00179
00180 inline bool isNum(const Tree& t, num& n)
00181 {
00182 float f;
00183 int i;
00184
00185 if (isFloat(t->node(), &f)) { n = f; return true; }
00186 if (isInt(t->node(), &i)) { n = i; return true; }
00187 return false;
00188 }
00189
00190
00191
00192
00193
00194
00195 Tree sigButton (Tree label);
00196 bool isSigButton (Tree s);
00197 bool isSigButton (Tree s, Tree& label);
00198
00199 Tree sigCheckbox (Tree label);
00200 bool isSigCheckbox (Tree s);
00201 bool isSigCheckbox (Tree s, Tree& label);
00202
00203 Tree sigVSlider (Tree label, Tree cur, Tree min, Tree max, Tree step);
00204 bool isSigVSlider (Tree s);
00205 bool isSigVSlider (Tree s, Tree& label, Tree& cur, Tree& min, Tree& max, Tree& step);
00206
00207 Tree sigHSlider (Tree label, Tree cur, Tree min, Tree max, Tree step);
00208 bool isSigHSlider (Tree s);
00209 bool isSigHSlider (Tree s, Tree& label, Tree& cur, Tree& min, Tree& max, Tree& step);
00210
00211 Tree sigNumEntry (Tree label, Tree cur, Tree min, Tree max, Tree step);
00212 bool isSigNumEntry (Tree s);
00213 bool isSigNumEntry (Tree s, Tree& label, Tree& cur, Tree& min, Tree& max, Tree& step);
00214
00215
00216 Tree sigVBargraph (Tree label, Tree min, Tree max, Tree t0);
00217 bool isSigVBargraph (Tree s);
00218 bool isSigVBargraph (Tree s, Tree& label, Tree& min, Tree& max, Tree& t0);
00219
00220 Tree sigHBargraph (Tree label, Tree min, Tree max, Tree t0);
00221 bool isSigHBargraph (Tree s);
00222 bool isSigHBargraph (Tree s, Tree& label, Tree& min, Tree& max, Tree& t0);
00223
00224 Tree sigAttach (Tree x, Tree y);
00225 bool isSigAttach (Tree s);
00226 bool isSigAttach (Tree s, Tree& x, Tree& y);
00227
00228
00229
00230
00231
00232
00233
00234
00235 Tree sigTuple (int mode, Tree ls);
00236 bool isSigTuple (Tree s, int* mode, Tree& ls);
00237
00238
00239
00240 Tree sigTupleAccess(Tree ts, Tree idx);
00241 bool isSigTupleAccess(Tree s, Tree& ts, Tree& idx);
00242
00243
00244 Tree sigCartesianProd (Tree s1, Tree s2);
00245
00246
00247
00248
00249
00250
00251
00252 int getSubSignals (Tree sig, vector<Tree>& vsigs, bool visitgen=true);
00253
00254
00255
00262 bool verySimple(Tree exp);
00263
00264
00265
00266 #endif