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