23
23
#include "sat/bsat/satStore.h"
24
24
#include "misc/extra/extra.h"
25
25
#include "sat/glucose/AbcGlucose.h"
26
+ #include "misc/util/utilTruth.h"
26
27
27
28
ABC_NAMESPACE_IMPL_START
28
29
@@ -282,7 +283,7 @@ Gia_Man_t * Gia_Gen2CreateMiter( int nLutSize, int nLutNum )
282
283
pNew = Gia_ManCleanup ( pTemp = pNew );
283
284
Gia_ManStop ( pTemp );
284
285
printf ( "Generated QBF miter with %d parameters, %d functional variables, and %d AIG nodes.\n" ,
285
- nLutNum * (1 << nLutSize ), 2 * nLutNum , Gia_ManAndNum (pNew ) );
286
+ nLutNum * (1 << nLutSize ), 2 * nLutSize , Gia_ManAndNum (pNew ) );
286
287
return pNew ;
287
288
}
288
289
int Gia_Gen2CodeOne ( int nLutSize , int nLutNum , Vec_Int_t * vCode , int x )
@@ -293,62 +294,80 @@ int Gia_Gen2CodeOne( int nLutSize, int nLutNum, Vec_Int_t * vCode, int x )
293
294
Code |= (1 << k );
294
295
return Code ;
295
296
}
297
+ word * Gia_Gen2CodeOneP ( int nLutSize , int nLutNum , Vec_Int_t * vCode , int x )
298
+ {
299
+ word * pRes = ABC_CALLOC ( word , Abc_Bit6WordNum (nLutNum ) );
300
+ int k ;
301
+ for ( k = 0 ; k < nLutNum ; k ++ )
302
+ if ( Vec_IntEntry (vCode , k * (1 << nLutSize )+ x ) )
303
+ Abc_InfoSetBit ( (unsigned * )pRes , k );
304
+ return pRes ;
305
+ }
296
306
void Gia_Gen2CodePrint ( int nLutSize , int nLutNum , Vec_Int_t * vCode )
297
307
{
298
308
// |<-- PVars(0)-->|...|<-- PVars(nLutNum-1)-->|
299
309
int i , n , nPairs = 16 ;
300
310
printf ( "%d-input %d-output code table:\n" , nLutSize , nLutNum );
301
311
for ( i = 0 ; i < (1 << nLutSize ); i ++ )
302
312
{
303
- int Code = Gia_Gen2CodeOne ( nLutSize , nLutNum , vCode , i );
313
+ word * CodeX = Gia_Gen2CodeOneP ( nLutSize , nLutNum , vCode , i );
304
314
printf ( "%3d " , i );
305
315
Extra_PrintBinary ( stdout , (unsigned * )& i , nLutSize );
306
316
printf ( " --> " );
307
- printf ( "%3d " , Code );
308
- Extra_PrintBinary ( stdout , (unsigned * )& Code , nLutNum );
317
+ if ( nLutNum <= 16 )
318
+ printf ( "%5d " , (int )CodeX [0 ] );
319
+ Extra_PrintBinary ( stdout , (unsigned * )CodeX , nLutNum );
309
320
printf ( "\n" );
321
+ ABC_FREE ( CodeX );
310
322
}
311
323
// create several different pairs
312
324
srand ( time (NULL ) );
313
325
printf ( "Simulation of the encoding with %d random pairs:\n" , nPairs );
314
326
for ( n = 0 ; n < nPairs ; n ++ )
315
327
{
316
328
unsigned MaskIn = Abc_InfoMask ( nLutSize );
317
- unsigned MaskOut = Abc_InfoMask ( nLutNum );
318
- int CodeX , CodeY , CodeXY , CodeXCodeY ;
319
- int NumX = 0 , NumY = 0 , NumXY ;
329
+ int NumX = 0 , NumY = 0 , NumXY , nWords = Abc_Bit6WordNum ( nLutNum );
330
+ word * CodeX , * CodeY , * CodeXY ;
331
+ word * CodeXCodeY = ABC_CALLOC ( word , nWords ) ;
320
332
while ( NumX == NumY )
321
333
{
322
334
NumX = rand () % (1 << nLutSize );
323
335
NumY = rand () % (1 << nLutSize );
324
336
NumXY = MaskIn & ~(NumX & NumY );
325
337
}
326
- CodeX = Gia_Gen2CodeOne ( nLutSize , nLutNum , vCode , NumX );
327
- CodeY = Gia_Gen2CodeOne ( nLutSize , nLutNum , vCode , NumY );
328
- CodeXY = Gia_Gen2CodeOne ( nLutSize , nLutNum , vCode , NumXY );
329
- CodeXCodeY = MaskOut & ~(CodeX & CodeY );
338
+ CodeX = Gia_Gen2CodeOneP ( nLutSize , nLutNum , vCode , NumX );
339
+ CodeY = Gia_Gen2CodeOneP ( nLutSize , nLutNum , vCode , NumY );
340
+ CodeXY = Gia_Gen2CodeOneP ( nLutSize , nLutNum , vCode , NumXY );
341
+ Abc_TtAnd ( CodeXCodeY , CodeX , CodeY , nWords , 1 );
342
+ if ( nLutNum < 64 * nWords )
343
+ CodeXCodeY [nWords - 1 ] &= Abc_Tt6Mask (nLutNum % 64 );
330
344
331
345
printf ( "%2d :" , n );
332
- printf ( " x =%3d " , NumX );
346
+ printf ( " x =%3d " , NumX );
333
347
Extra_PrintBinary ( stdout ,(unsigned * ) & NumX , nLutSize );
334
- printf ( " y =%3d " , NumY );
348
+ printf ( " y =%3d " , NumY );
335
349
Extra_PrintBinary ( stdout , (unsigned * )& NumY , nLutSize );
336
- printf ( " nand =%3d " , NumXY );
350
+ printf ( " nand =%3d " , NumXY );
337
351
Extra_PrintBinary ( stdout , (unsigned * )& NumXY , nLutSize );
338
352
printf ( " " );
339
353
340
- printf ( " c(x) =%3d " , CodeX );
341
- Extra_PrintBinary ( stdout , (unsigned * )& CodeX , nLutNum );
342
- printf ( " c(y) =%3d " , CodeY );
343
- Extra_PrintBinary ( stdout , (unsigned * )& CodeY , nLutNum );
344
- printf ( " c(nand) =%3d " , CodeXY );
345
- Extra_PrintBinary ( stdout , (unsigned * )& CodeXY , nLutNum );
346
- printf ( " nand(c(x), c(y)) =%3d " , CodeXCodeY );
347
- Extra_PrintBinary ( stdout , (unsigned * )& CodeXCodeY , nLutNum );
348
- printf ( " " );
349
-
350
- printf ( "%s" , CodeXCodeY == CodeXY ? "yes" : "no" );
354
+ printf ( " c(x) = " );
355
+ Extra_PrintBinary ( stdout , (unsigned * )CodeX , nLutNum );
356
+ printf ( " c(y) = " );
357
+ Extra_PrintBinary ( stdout , (unsigned * )CodeY , nLutNum );
358
+ printf ( " c(nand) = " );
359
+ Extra_PrintBinary ( stdout , (unsigned * )CodeXY , nLutNum );
360
+ printf ( " nand(c(x),c(y)) = " );
361
+ Extra_PrintBinary ( stdout , (unsigned * )CodeXCodeY , nLutNum );
362
+ printf ( " " );
363
+
364
+ printf ( "%s" , Abc_TtEqual ( CodeXCodeY , CodeXY , nWords ) ? "yes" : "no" );
351
365
printf ( "\n" );
366
+
367
+ ABC_FREE ( CodeX );
368
+ ABC_FREE ( CodeY );
369
+ ABC_FREE ( CodeXY );
370
+ ABC_FREE ( CodeXCodeY );
352
371
}
353
372
}
354
373
void Gia_Gen2CodeTest ()
0 commit comments