summaryrefslogtreecommitdiffstats
path: root/src/base
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2014-10-08 10:41:20 -0700
committerAlan Mishchenko <alanmi@berkeley.edu>2014-10-08 10:41:20 -0700
commite4d58876714197bc3597846bf3224c0cdf8b1c66 (patch)
treee8105c4f4ce5609a5944210754166f1afb7d5c74 /src/base
parentbd0373daf5e5c5206b8272cf92eac7ce88af731e (diff)
downloadabc-e4d58876714197bc3597846bf3224c0cdf8b1c66.tar.gz
abc-e4d58876714197bc3597846bf3224c0cdf8b1c66.tar.bz2
abc-e4d58876714197bc3597846bf3224c0cdf8b1c66.zip
Detection of threshold functions.
Diffstat (limited to 'src/base')
-rw-r--r--src/base/abci/abc.c25
-rw-r--r--src/base/abci/abcDec.c3
2 files changed, 25 insertions, 3 deletions
diff --git a/src/base/abci/abc.c b/src/base/abci/abc.c
index 15bfc76b..3408144a 100644
--- a/src/base/abci/abc.c
+++ b/src/base/abci/abc.c
@@ -16256,10 +16256,11 @@ usage:
***********************************************************************/
int Abc_CommandDsdFilter( Abc_Frame_t * pAbc, int argc, char ** argv )
{
+ extern void Id_DsdManTuneThresh( If_DsdMan_t * p, int fUnate, int fThresh, int fVerbose );
If_DsdMan_t * pDsd = (If_DsdMan_t *)Abc_FrameReadManDsd();
- int c, nLimit = 0, nLutSize = -1, fCleanOccur = 0, fCleanMarks = 0, fVerbose = 0;
+ int c, nLimit = 0, nLutSize = -1, fCleanOccur = 0, fCleanMarks = 0, fInvMarks = 0, fUnate = 0, fThresh = 0, fVerbose = 0;
Extra_UtilGetoptReset();
- while ( ( c = Extra_UtilGetopt( argc, argv, "LKomvh" ) ) != EOF )
+ while ( ( c = Extra_UtilGetopt( argc, argv, "LKomiutvh" ) ) != EOF )
{
switch ( c )
{
@@ -16287,6 +16288,15 @@ int Abc_CommandDsdFilter( Abc_Frame_t * pAbc, int argc, char ** argv )
case 'm':
fCleanMarks ^= 1;
break;
+ case 'i':
+ fInvMarks ^= 1;
+ break;
+ case 'u':
+ fUnate ^= 1;
+ break;
+ case 't':
+ fThresh ^= 1;
+ break;
case 'v':
fVerbose ^= 1;
break;
@@ -16309,15 +16319,24 @@ int Abc_CommandDsdFilter( Abc_Frame_t * pAbc, int argc, char ** argv )
If_DsdManCleanOccur( pDsd, fVerbose );
if ( fCleanMarks )
If_DsdManCleanMarks( pDsd, fVerbose );
+ if ( fInvMarks )
+ If_DsdManInvertMarks( pDsd, fVerbose );
+ if ( fUnate )
+ Id_DsdManTuneThresh( pDsd, 1, 0, fVerbose );
+ if ( fThresh )
+ Id_DsdManTuneThresh( pDsd, 0, 1, fVerbose );
return 0;
usage:
- Abc_Print( -2, "usage: dsd_filter [-LK num] [-omvh]\n" );
+ Abc_Print( -2, "usage: dsd_filter [-LK num] [-omiutvh]\n" );
Abc_Print( -2, "\t filtering structured and modifying parameters of DSD manager\n" );
Abc_Print( -2, "\t-L num : remove structures with fewer occurrences that this [default = %d]\n", nLimit );
Abc_Print( -2, "\t-K num : new LUT size to set for the DSD manager [default = %d]\n", nLutSize );
Abc_Print( -2, "\t-o : toggles cleaning occurrence counters [default = %s]\n", fCleanOccur? "yes": "no" );
Abc_Print( -2, "\t-m : toggles cleaning matching marks [default = %s]\n", fCleanMarks? "yes": "no" );
+ Abc_Print( -2, "\t-i : toggles inverting matching marks [default = %s]\n", fInvMarks? "yes": "no" );
+ Abc_Print( -2, "\t-u : toggles marking unate functions [default = %s]\n", fUnate? "yes": "no" );
+ Abc_Print( -2, "\t-t : toggles marking threshold functions [default = %s]\n", fThresh? "yes": "no" );
Abc_Print( -2, "\t-v : toggles verbose output [default = %s]\n", fVerbose? "yes": "no" );
Abc_Print( -2, "\t-h : print the command usage\n");
return 1;
diff --git a/src/base/abci/abcDec.c b/src/base/abci/abcDec.c
index 3ed73c26..5e4f848a 100644
--- a/src/base/abci/abcDec.c
+++ b/src/base/abci/abcDec.c
@@ -502,6 +502,9 @@ void Abc_TruthDecPerform( Abc_TtStore_t * p, int DecType, int fVerbose )
vCover = Vec_IntAlloc( 1 << 16 );
for ( i = 0; i < p->nFuncs; i++ )
{
+// extern int Abc_IsopTest( word * pFunc, int nVars, Vec_Int_t * vCover );
+// Abc_IsopTest( p->pFuncs[i], p->nVars, vCover );
+// continue;
if ( fVerbose )
printf( "%7d : ", i );
pSopStr = Kit_PlaFromTruthNew( (unsigned *)p->pFuncs[i], p->nVars, vCover, vStr );