ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
Ttopt::TruthTable Class Reference
Inheritance diagram for Ttopt::TruthTable:

Public Types

typedef std::bitset< 64 > bsw
 

Public Member Functions

 TruthTable (int nInputs, int nOutputs)
 
virtual void Save (unsigned i)
 
virtual void Load (unsigned i)
 
virtual void SaveIndices (unsigned i)
 
virtual void LoadIndices (unsigned i)
 
word GetValue (int index_lev, int lev)
 
int IsEq (int index1, int index2, int lev, bool fCompl=false)
 
bool Imply (int index1, int index2, int lev)
 
int BDDNodeCountLevel (int lev)
 
int BDDNodeCount ()
 
int BDDFind (int index, int lev)
 
virtual int BDDBuildOne (int index, int lev)
 
virtual void BDDBuildStartup ()
 
virtual void BDDBuildLevel (int lev)
 
virtual int BDDBuild ()
 
virtual int BDDRebuild (int lev)
 
virtual void Swap (int lev)
 
void SwapIndex (int &index, int d)
 
virtual int BDDSwap (int lev)
 
int SiftReo ()
 
void Reo (std::vector< int > vLevelsNew)
 
int RandomSiftReo (int nRound)
 
int BDDGenerateAigRec (Gia_Man_t *pNew, std::vector< int > const &vInputs, std::vector< std::vector< int > > &vvNodes, int index, int lev)
 
virtual void BDDGenerateAig (Gia_Man_t *pNew, Vec_Int_t *vSupp)
 

Public Attributes

int nInputs
 
int nSize
 
int nTotalSize
 
int nOutputs
 
std::vector< wordt
 
std::vector< std::vector< int > > vvIndices
 
std::vector< std::vector< int > > vvRedundantIndices
 
std::vector< int > vLevels
 
std::vector< std::vector< word > > savedt
 
std::vector< std::vector< std::vector< int > > > vvIndicesSaved
 
std::vector< std::vector< std::vector< int > > > vvRedundantIndicesSaved
 
std::vector< std::vector< int > > vLevelsSaved
 

Static Public Attributes

static const int ww = 64
 
static const int lww = 6
 
static const word ones []
 
static const word swapmask []
 

Detailed Description

Definition at line 39 of file giaTtopt.cpp.

Member Typedef Documentation

◆ bsw

typedef std::bitset<64> Ttopt::TruthTable::bsw

Definition at line 43 of file giaTtopt.cpp.

Constructor & Destructor Documentation

◆ TruthTable()

Ttopt::TruthTable::TruthTable ( int nInputs,
int nOutputs )
inline

Definition at line 63 of file giaTtopt.cpp.

64 srand(0xABC);
65 if(nInputs >= lww) {
66 nSize = 1 << (nInputs - lww);
68 t.resize(nTotalSize);
69 } else {
70 nSize = 0;
71 nTotalSize = ((1 << nInputs) * nOutputs + ww - 1) / ww;
72 t.resize(nTotalSize);
73 }
74 vLevels.resize(nInputs);
75 for(int i = 0; i < nInputs; i++) {
76 vLevels[i] = i;
77 }
78 }
std::vector< int > vLevels
Definition giaTtopt.cpp:53
std::vector< word > t
Definition giaTtopt.cpp:49
static const int lww
Definition giaTtopt.cpp:42
static const int ww
Definition giaTtopt.cpp:41
Here is the caller graph for this function:

Member Function Documentation

◆ BDDBuild()

virtual int Ttopt::TruthTable::BDDBuild ( )
inlinevirtual

Reimplemented in Ttopt::TruthTableLevelTSM, and Ttopt::TruthTableReo.

Definition at line 243 of file giaTtopt.cpp.

243 {
245 for(int i = 1; i < nInputs; i++) {
246 BDDBuildLevel(i);
247 }
248 return BDDNodeCount();
249 }
virtual void BDDBuildStartup()
Definition giaTtopt.cpp:222
virtual void BDDBuildLevel(int lev)
Definition giaTtopt.cpp:232
Here is the call graph for this function:
Here is the caller graph for this function:

◆ BDDBuildLevel()

virtual void Ttopt::TruthTable::BDDBuildLevel ( int lev)
inlinevirtual

Reimplemented in Ttopt::TruthTableReo.

Definition at line 232 of file giaTtopt.cpp.

232 {
233 for(unsigned i = 0; i < vvIndices[lev-1].size(); i++) {
234 int index = vvIndices[lev-1][i];
235 int cof0 = BDDBuildOne(index << 1, lev);
236 int cof1 = BDDBuildOne((index << 1) ^ 1, lev);
237 if(cof0 == cof1) {
238 vvRedundantIndices[lev-1].push_back(index);
239 }
240 }
241 }
std::vector< std::vector< int > > vvRedundantIndices
Definition giaTtopt.cpp:52
virtual int BDDBuildOne(int index, int lev)
Definition giaTtopt.cpp:213
std::vector< std::vector< int > > vvIndices
Definition giaTtopt.cpp:51
Here is the call graph for this function:
Here is the caller graph for this function:

◆ BDDBuildOne()

virtual int Ttopt::TruthTable::BDDBuildOne ( int index,
int lev )
inlinevirtual

Reimplemented in Ttopt::TruthTableCare, and Ttopt::TruthTableLevelTSM.

Definition at line 213 of file giaTtopt.cpp.

213 {
214 int r = BDDFind(index, lev);
215 if(r >= -2) {
216 return r;
217 }
218 vvIndices[lev].push_back(index);
219 return (vvIndices[lev].size() - 1) << 1;
220 }
int BDDFind(int index, int lev)
Definition giaTtopt.cpp:165
unsigned long long size
Definition giaNewBdd.h:39
Here is the call graph for this function:
Here is the caller graph for this function:

◆ BDDBuildStartup()

virtual void Ttopt::TruthTable::BDDBuildStartup ( )
inlinevirtual

Reimplemented in Ttopt::TruthTableCare, and Ttopt::TruthTableReo.

Definition at line 222 of file giaTtopt.cpp.

222 {
223 vvIndices.clear();
224 vvIndices.resize(nInputs);
225 vvRedundantIndices.clear();
227 for(int i = 0; i < nOutputs; i++) {
228 BDDBuildOne(i, 0);
229 }
230 }
Here is the call graph for this function:
Here is the caller graph for this function:

◆ BDDFind()

int Ttopt::TruthTable::BDDFind ( int index,
int lev )
inline

Definition at line 165 of file giaTtopt.cpp.

165 {
166 int logwidth = nInputs - lev;
167 if(logwidth > lww) {
168 int nScopeSize = 1 << (logwidth - lww);
169 bool fZero = true;
170 bool fOne = true;
171 for(int i = 0; i < nScopeSize && (fZero || fOne); i++) {
172 word value = t[nScopeSize * index + i];
173 fZero &= !value;
174 fOne &= !(~value);
175 }
176 if(fZero || fOne) {
177 return -2 ^ (int)fOne;
178 }
179 for(unsigned j = 0; j < vvIndices[lev].size(); j++) {
180 int index2 = vvIndices[lev][j];
181 bool fEq = true;
182 bool fCompl = true;
183 for(int i = 0; i < nScopeSize && (fEq || fCompl); i++) {
184 fEq &= (t[nScopeSize * index + i] == t[nScopeSize * index2 + i]);
185 fCompl &= (t[nScopeSize * index + i] == ~t[nScopeSize * index2 + i]);
186 }
187 if(fEq || fCompl) {
188 return (j << 1) ^ (int)fCompl;
189 }
190 }
191 } else {
192 word value = GetValue(index, lev);
193 if(!value) {
194 return -2;
195 }
196 if(!(value ^ ones[logwidth])) {
197 return -1;
198 }
199 for(unsigned j = 0; j < vvIndices[lev].size(); j++) {
200 int index2 = vvIndices[lev][j];
201 word value2 = value ^ GetValue(index2, lev);
202 if(!(value2)) {
203 return j << 1;
204 }
205 if(!(value2 ^ ones[logwidth])) {
206 return (j << 1) ^ 1;
207 }
208 }
209 }
210 return -3;
211 }
ABC_NAMESPACE_IMPL_START typedef signed char value
word GetValue(int index_lev, int lev)
Definition giaTtopt.cpp:109
static const word ones[]
Definition giaTtopt.cpp:60
unsigned __int64 word
DECLARATIONS ///.
Definition kitPerm.c:36
Here is the call graph for this function:
Here is the caller graph for this function:

◆ BDDGenerateAig()

virtual void Ttopt::TruthTable::BDDGenerateAig ( Gia_Man_t * pNew,
Vec_Int_t * vSupp )
inlinevirtual

Reimplemented in Ttopt::TruthTableReo.

Definition at line 446 of file giaTtopt.cpp.

446 {
447 vvIndices.clear();
448 vvIndices.resize(nInputs);
449 std::vector<std::vector<int> > vvNodes(nInputs);
450 std::vector<int> vInputs(nInputs);
451 int i;
452 for(i = 0; i < nInputs; i++) {
453 vInputs[vLevels[i]] = Vec_IntEntry(vSupp, nInputs - i - 1) << 1;
454 }
455 for(i = 0; i < nOutputs; i++) {
456 int node = BDDGenerateAigRec(pNew, vInputs, vvNodes, i, 0);
457 Gia_ManAppendCo(pNew, node);
458 }
459 }
int BDDGenerateAigRec(Gia_Man_t *pNew, std::vector< int > const &vInputs, std::vector< std::vector< int > > &vvNodes, int index, int lev)
Definition giaTtopt.cpp:420
Here is the call graph for this function:
Here is the caller graph for this function:

◆ BDDGenerateAigRec()

int Ttopt::TruthTable::BDDGenerateAigRec ( Gia_Man_t * pNew,
std::vector< int > const & vInputs,
std::vector< std::vector< int > > & vvNodes,
int index,
int lev )
inline

Definition at line 420 of file giaTtopt.cpp.

420 {
421 int r = BDDFind(index, lev);
422 if(r >= 0) {
423 return vvNodes[lev][r >> 1] ^ (r & 1);
424 }
425 if(r >= -2) {
426 return r + 2;
427 }
428 int cof0 = BDDGenerateAigRec(pNew, vInputs, vvNodes, index << 1, lev + 1);
429 int cof1 = BDDGenerateAigRec(pNew, vInputs, vvNodes, (index << 1) ^ 1, lev + 1);
430 if(cof0 == cof1) {
431 return cof0;
432 }
433 int node;
434 if(Imply(index << 1, (index << 1) ^ 1, lev + 1)) {
435 node = Gia_ManHashOr(pNew, Gia_ManHashAnd(pNew, vInputs[lev], cof1), cof0);
436 } else if(Imply((index << 1) ^ 1, index << 1, lev + 1)) {
437 node = Gia_ManHashOr(pNew, Gia_ManHashAnd(pNew, vInputs[lev] ^ 1, cof0), cof1);
438 } else {
439 node = Gia_ManHashMux(pNew, vInputs[lev], cof1, cof0);
440 }
441 vvIndices[lev].push_back(index);
442 vvNodes[lev].push_back(node);
443 return node;
444 }
bool Imply(int index1, int index2, int lev)
Definition giaTtopt.cpp:137
int Gia_ManHashOr(Gia_Man_t *p, int iLit0, int iLit1)
Definition giaHash.c:621
int Gia_ManHashMux(Gia_Man_t *p, int iCtrl, int iData1, int iData0)
Definition giaHash.c:692
int Gia_ManHashAnd(Gia_Man_t *p, int iLit0, int iLit1)
Definition giaHash.c:576
Here is the call graph for this function:
Here is the caller graph for this function:

◆ BDDNodeCount()

int Ttopt::TruthTable::BDDNodeCount ( )
inline

Definition at line 157 of file giaTtopt.cpp.

157 {
158 int count = 1; // const node
159 for(int i = 0; i < nInputs; i++) {
160 count += BDDNodeCountLevel(i);
161 }
162 return count;
163 }
int BDDNodeCountLevel(int lev)
Definition giaTtopt.cpp:153
Here is the call graph for this function:
Here is the caller graph for this function:

◆ BDDNodeCountLevel()

int Ttopt::TruthTable::BDDNodeCountLevel ( int lev)
inline

Definition at line 153 of file giaTtopt.cpp.

153 {
154 return vvIndices[lev].size() - vvRedundantIndices[lev].size();
155 }
Here is the caller graph for this function:

◆ BDDRebuild()

virtual int Ttopt::TruthTable::BDDRebuild ( int lev)
inlinevirtual

Reimplemented in Ttopt::TruthTableCare, Ttopt::TruthTableLevelTSM, and Ttopt::TruthTableReo.

Definition at line 251 of file giaTtopt.cpp.

251 {
252 vvIndices[lev].clear();
253 vvIndices[lev+1].clear();
254 for(int i = lev; i < lev + 2; i++) {
255 if(!i) {
256 for(int j = 0; j < nOutputs; j++) {
257 BDDBuildOne(j, 0);
258 }
259 } else {
260 vvRedundantIndices[i-1].clear();
261 BDDBuildLevel(i);
262 }
263 }
264 if(lev < nInputs - 2) {
265 vvRedundantIndices[lev+1].clear();
266 for(unsigned i = 0; i < vvIndices[lev+1].size(); i++) {
267 int index = vvIndices[lev+1][i];
268 if(IsEq(index << 1, (index << 1) ^ 1, lev + 2)) {
269 vvRedundantIndices[lev+1].push_back(index);
270 }
271 }
272 }
273 return BDDNodeCount();
274 }
int IsEq(int index1, int index2, int lev, bool fCompl=false)
Definition giaTtopt.cpp:118
Here is the call graph for this function:
Here is the caller graph for this function:

◆ BDDSwap()

virtual int Ttopt::TruthTable::BDDSwap ( int lev)
inlinevirtual

Reimplemented in Ttopt::TruthTableCare, and Ttopt::TruthTableReo.

Definition at line 313 of file giaTtopt.cpp.

313 {
314 Swap(lev);
315 for(int i = lev + 2; i < nInputs; i++) {
316 for(unsigned j = 0; j < vvIndices[i].size(); j++) {
317 SwapIndex(vvIndices[i][j], i - (lev + 2));
318 }
319 }
320 // swapping vvRedundantIndices is unnecessary for node counting
321 return BDDRebuild(lev);
322 }
virtual void Swap(int lev)
Definition giaTtopt.cpp:276
void SwapIndex(int &index, int d)
Definition giaTtopt.cpp:305
virtual int BDDRebuild(int lev)
Definition giaTtopt.cpp:251
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetValue()

word Ttopt::TruthTable::GetValue ( int index_lev,
int lev )
inline

Definition at line 109 of file giaTtopt.cpp.

109 {
110 assert(index_lev >= 0);
111 assert(nInputs - lev <= lww);
112 int logwidth = nInputs - lev;
113 int index = index_lev >> (lww - logwidth);
114 int pos = (index_lev % (1 << (lww - logwidth))) << logwidth;
115 return (t[index] >> pos) & ones[logwidth];
116 }
bool pos
Definition globals.c:30
#define assert(ex)
Definition util_old.h:213
Here is the caller graph for this function:

◆ Imply()

bool Ttopt::TruthTable::Imply ( int index1,
int index2,
int lev )
inline

Definition at line 137 of file giaTtopt.cpp.

137 {
138 assert(index1 >= 0);
139 assert(index2 >= 0);
140 int logwidth = nInputs - lev;
141 if(logwidth > lww) {
142 int nScopeSize = 1 << (logwidth - lww);
143 for(int i = 0; i < nScopeSize; i++) {
144 if(t[nScopeSize * index1 + i] & ~t[nScopeSize * index2 + i]) {
145 return false;
146 }
147 }
148 return true;
149 }
150 return !(GetValue(index1, lev) & (GetValue(index2, lev) ^ ones[logwidth]));
151 }
Here is the call graph for this function:
Here is the caller graph for this function:

◆ IsEq()

int Ttopt::TruthTable::IsEq ( int index1,
int index2,
int lev,
bool fCompl = false )
inline

Definition at line 118 of file giaTtopt.cpp.

118 {
119 assert(index1 >= 0);
120 assert(index2 >= 0);
121 int logwidth = nInputs - lev;
122 bool fEq = true;
123 if(logwidth > lww) {
124 int nScopeSize = 1 << (logwidth - lww);
125 for(int i = 0; i < nScopeSize && (fEq || fCompl); i++) {
126 fEq &= (t[nScopeSize * index1 + i] == t[nScopeSize * index2 + i]);
127 fCompl &= (t[nScopeSize * index1 + i] == ~t[nScopeSize * index2 + i]);
128 }
129 } else {
130 word value = GetValue(index1, lev) ^ GetValue(index2, lev);
131 fEq &= !value;
132 fCompl &= !(value ^ ones[logwidth]);
133 }
134 return 2 * fCompl + fEq;
135 }
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Load()

virtual void Ttopt::TruthTable::Load ( unsigned i)
inlinevirtual

Reimplemented in Ttopt::TruthTableCare, and Ttopt::TruthTableReo.

Definition at line 89 of file giaTtopt.cpp.

89 {
90 assert(i < savedt.size());
91 t = savedt[i];
93 }
std::vector< std::vector< int > > vLevelsSaved
Definition giaTtopt.cpp:58
std::vector< std::vector< word > > savedt
Definition giaTtopt.cpp:55
Here is the caller graph for this function:

◆ LoadIndices()

virtual void Ttopt::TruthTable::LoadIndices ( unsigned i)
inlinevirtual

Reimplemented in Ttopt::TruthTableCare, and Ttopt::TruthTableReo.

Definition at line 104 of file giaTtopt.cpp.

104 {
107 }
std::vector< std::vector< std::vector< int > > > vvRedundantIndicesSaved
Definition giaTtopt.cpp:57
std::vector< std::vector< std::vector< int > > > vvIndicesSaved
Definition giaTtopt.cpp:56
Here is the caller graph for this function:

◆ RandomSiftReo()

int Ttopt::TruthTable::RandomSiftReo ( int nRound)
inline

Definition at line 396 of file giaTtopt.cpp.

396 {
397 int best = SiftReo();
398 Save(2);
399 for(int i = 0; i < nRound; i++) {
400 std::vector<int> vLevelsNew(nInputs);
401 int j;
402 for(j = 0; j < nInputs; j++) {
403 vLevelsNew[j] = j;
404 }
405 for(j = nInputs - 1; j > 0; j--) {
406 int d = rand() % j;
407 std::swap(vLevelsNew[j], vLevelsNew[d]);
408 }
409 Reo(vLevelsNew);
410 int r = SiftReo();
411 if(best > r) {
412 best = r;
413 Save(2);
414 }
415 }
416 Load(2);
417 return best;
418 }
void Reo(std::vector< int > vLevelsNew)
Definition giaTtopt.cpp:379
virtual void Save(unsigned i)
Definition giaTtopt.cpp:80
virtual void Load(unsigned i)
Definition giaTtopt.cpp:89
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Reo()

void Ttopt::TruthTable::Reo ( std::vector< int > vLevelsNew)
inline

Definition at line 379 of file giaTtopt.cpp.

379 {
380 for(int i = 0; i < nInputs; i++) {
381 int var = std::find(vLevelsNew.begin(), vLevelsNew.end(), i) - vLevelsNew.begin();
382 int lev = vLevels[var];
383 if(lev < i) {
384 for(int j = lev; j < i; j++) {
385 Swap(j);
386 }
387 } else if(lev > i) {
388 for(int j = lev - 1; j >= i; j--) {
389 Swap(j);
390 }
391 }
392 }
393 assert(vLevels == vLevelsNew);
394 }
unsigned short var
Definition giaNewBdd.h:35
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Save()

virtual void Ttopt::TruthTable::Save ( unsigned i)
inlinevirtual

Reimplemented in Ttopt::TruthTableCare, and Ttopt::TruthTableReo.

Definition at line 80 of file giaTtopt.cpp.

80 {
81 if(savedt.size() < i + 1) {
82 savedt.resize(i + 1);
83 vLevelsSaved.resize(i + 1);
84 }
85 savedt[i] = t;
87 }
Here is the caller graph for this function:

◆ SaveIndices()

virtual void Ttopt::TruthTable::SaveIndices ( unsigned i)
inlinevirtual

Reimplemented in Ttopt::TruthTableCare, and Ttopt::TruthTableReo.

Definition at line 95 of file giaTtopt.cpp.

95 {
96 if(vvIndicesSaved.size() < i + 1) {
97 vvIndicesSaved.resize(i + 1);
98 vvRedundantIndicesSaved.resize(i + 1);
99 }
102 }
Here is the caller graph for this function:

◆ SiftReo()

int Ttopt::TruthTable::SiftReo ( )
inline

Definition at line 324 of file giaTtopt.cpp.

324 {
325 int best = BDDBuild();
326 Save(0);
327 SaveIndices(0);
328 std::vector<int> vars(nInputs);
329 int i;
330 for(i = 0; i < nInputs; i++) {
331 vars[i] = i;
332 }
333 std::vector<unsigned> vCounts(nInputs);
334 for(i = 0; i < nInputs; i++) {
335 vCounts[i] = BDDNodeCountLevel(vLevels[i]);
336 }
337 for(i = 1; i < nInputs; i++) {
338 int j = i;
339 while(j > 0 && vCounts[vars[j-1]] < vCounts[vars[j]]) {
340 std::swap(vars[j], vars[j-1]);
341 j--;
342 }
343 }
344 bool turn = true;
345 unsigned j;
346 for(j = 0; j < vars.size(); j++) {
347 int var = vars[j];
348 bool updated = false;
349 int lev = vLevels[var];
350 for(int i = lev; i < nInputs - 1; i++) {
351 int count = BDDSwap(i);
352 if(best > count) {
353 best = count;
354 updated = true;
355 Save(turn);
356 SaveIndices(turn);
357 }
358 }
359 if(lev) {
360 Load(!turn);
361 LoadIndices(!turn);
362 for(int i = lev - 1; i >= 0; i--) {
363 int count = BDDSwap(i);
364 if(best > count) {
365 best = count;
366 updated = true;
367 Save(turn);
368 SaveIndices(turn);
369 }
370 }
371 }
372 turn ^= updated;
373 Load(!turn);
374 LoadIndices(!turn);
375 }
376 return best;
377 }
virtual int BDDSwap(int lev)
Definition giaTtopt.cpp:313
virtual int BDDBuild()
Definition giaTtopt.cpp:243
virtual void LoadIndices(unsigned i)
Definition giaTtopt.cpp:104
virtual void SaveIndices(unsigned i)
Definition giaTtopt.cpp:95
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Swap()

virtual void Ttopt::TruthTable::Swap ( int lev)
inlinevirtual

Reimplemented in Ttopt::TruthTableCare, and Ttopt::TruthTableReo.

Definition at line 276 of file giaTtopt.cpp.

276 {
277 assert(lev < nInputs - 1);
278 std::vector<int>::iterator it0 = std::find(vLevels.begin(), vLevels.end(), lev);
279 std::vector<int>::iterator it1 = std::find(vLevels.begin(), vLevels.end(), lev + 1);
280 std::swap(*it0, *it1);
281 if(nInputs - lev - 1 > lww) {
282 int nScopeSize = 1 << (nInputs - lev - 2 - lww);
283 for(int i = nScopeSize; i < nTotalSize; i += (nScopeSize << 2)) {
284 for(int j = 0; j < nScopeSize; j++) {
285 std::swap(t[i + j], t[i + nScopeSize + j]);
286 }
287 }
288 } else if(nInputs - lev - 1 == lww) {
289 for(int i = 0; i < nTotalSize; i += 2) {
290 t[i+1] ^= t[i] >> (ww / 2);
291 t[i] ^= t[i+1] << (ww / 2);
292 t[i+1] ^= t[i] >> (ww / 2);
293 }
294 } else {
295 for(int i = 0; i < nTotalSize; i++) {
296 int d = nInputs - lev - 2;
297 int shamt = 1 << d;
298 t[i] ^= (t[i] >> shamt) & swapmask[d];
299 t[i] ^= (t[i] & swapmask[d]) << shamt;
300 t[i] ^= (t[i] >> shamt) & swapmask[d];
301 }
302 }
303 }
static const word swapmask[]
Definition giaTtopt.cpp:61
Here is the caller graph for this function:

◆ SwapIndex()

void Ttopt::TruthTable::SwapIndex ( int & index,
int d )
inline

Definition at line 305 of file giaTtopt.cpp.

305 {
306 if((index >> d) % 4 == 1) {
307 index += 1 << d;
308 } else if((index >> d) % 4 == 2) {
309 index -= 1 << d;
310 }
311 }
Here is the caller graph for this function:

Member Data Documentation

◆ lww

const int Ttopt::TruthTable::lww = 6
static

Definition at line 42 of file giaTtopt.cpp.

◆ nInputs

int Ttopt::TruthTable::nInputs

Definition at line 45 of file giaTtopt.cpp.

◆ nOutputs

int Ttopt::TruthTable::nOutputs

Definition at line 48 of file giaTtopt.cpp.

◆ nSize

int Ttopt::TruthTable::nSize

Definition at line 46 of file giaTtopt.cpp.

◆ nTotalSize

int Ttopt::TruthTable::nTotalSize

Definition at line 47 of file giaTtopt.cpp.

◆ ones

const word Ttopt::TruthTable::ones
static
Initial value:
= {ABC_CONST(0x0000000000000001),
ABC_CONST(0x0000000000000003),
ABC_CONST(0x000000000000000f),
ABC_CONST(0x00000000000000ff),
ABC_CONST(0x000000000000ffff),
ABC_CONST(0x00000000ffffffff),
ABC_CONST(0xffffffffffffffff)}
#define ABC_CONST(number)
PARAMETERS ///.
Definition abc_global.h:240

Definition at line 60 of file giaTtopt.cpp.

◆ savedt

std::vector<std::vector<word> > Ttopt::TruthTable::savedt

Definition at line 55 of file giaTtopt.cpp.

◆ swapmask

const word Ttopt::TruthTable::swapmask
static
Initial value:
= {ABC_CONST(0x2222222222222222),
ABC_CONST(0x0c0c0c0c0c0c0c0c),
ABC_CONST(0x00f000f000f000f0),
ABC_CONST(0x0000ff000000ff00),
ABC_CONST(0x00000000ffff0000)}

Definition at line 61 of file giaTtopt.cpp.

◆ t

std::vector<word> Ttopt::TruthTable::t

Definition at line 49 of file giaTtopt.cpp.

◆ vLevels

std::vector<int> Ttopt::TruthTable::vLevels

Definition at line 53 of file giaTtopt.cpp.

◆ vLevelsSaved

std::vector<std::vector<int> > Ttopt::TruthTable::vLevelsSaved

Definition at line 58 of file giaTtopt.cpp.

◆ vvIndices

std::vector<std::vector<int> > Ttopt::TruthTable::vvIndices

Definition at line 51 of file giaTtopt.cpp.

◆ vvIndicesSaved

std::vector<std::vector<std::vector<int> > > Ttopt::TruthTable::vvIndicesSaved

Definition at line 56 of file giaTtopt.cpp.

◆ vvRedundantIndices

std::vector<std::vector<int> > Ttopt::TruthTable::vvRedundantIndices

Definition at line 52 of file giaTtopt.cpp.

◆ vvRedundantIndicesSaved

std::vector<std::vector<std::vector<int> > > Ttopt::TruthTable::vvRedundantIndicesSaved

Definition at line 57 of file giaTtopt.cpp.

◆ ww

const int Ttopt::TruthTable::ww = 64
static

Definition at line 41 of file giaTtopt.cpp.


The documentation for this class was generated from the following file: