summaryrefslogtreecommitdiffstats
path: root/src/aig
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2012-08-04 09:37:49 -0700
committerAlan Mishchenko <alanmi@berkeley.edu>2012-08-04 09:37:49 -0700
commit294c06f162c54482938e60990ad6a5219e9917b7 (patch)
treefd585a3350a7d9f8d91cae2d1e3ce784c948cf14 /src/aig
parenta01b479013e702050c2be0ccce1435fac8ed0e99 (diff)
downloadabc-294c06f162c54482938e60990ad6a5219e9917b7.tar.gz
abc-294c06f162c54482938e60990ad6a5219e9917b7.tar.bz2
abc-294c06f162c54482938e60990ad6a5219e9917b7.zip
Scalable gate-level abstraction.
Diffstat (limited to 'src/aig')
-rw-r--r--src/aig/gia/giaAbsGla2.c109
1 files changed, 1 insertions, 108 deletions
diff --git a/src/aig/gia/giaAbsGla2.c b/src/aig/gia/giaAbsGla2.c
index 85f0c00d..8269ecbe 100644
--- a/src/aig/gia/giaAbsGla2.c
+++ b/src/aig/gia/giaAbsGla2.c
@@ -1015,7 +1015,7 @@ void Ga2_ManShrinkAbs( Ga2_Man_t * p, int nAbs, int nValues, int nSatVars )
Vec_PtrForEachEntry( Vec_Int_t *, p->vId2Lit, vMap, i )
{
Vec_IntShrink( vMap, nValues );
- Vec_IntForEachEntry( vMap, Entry, k )
+ Vec_IntForEachEntryStart( vMap, Entry, k, p->LimAbs )
if ( Entry >= 2*nSatVars )
Vec_IntWriteEntry( vMap, k, -1 );
}
@@ -1107,114 +1107,7 @@ void Ga2_ManRestart( Ga2_Man_t * p )
memset( p->pTable, 0, 6 * sizeof(int) * p->nTable );
}
-/**Function*************************************************************
-
- Synopsis [Unrolls one timeframe.]`
-
- Description []
-
- SideEffects []
-
- SeeAlso []
-
-***********************************************************************/
-/*
-int Ga2_ManUnroll_rec( Ga2_Man_t * p, Gia_Obj_t * pObj, int f )
-{
- int fSimple = 1;
- int Id = Gia_ObjId(p->pGia, pObj);
- unsigned uTruth;
- Gia_Obj_t * pLeaf;
- int nLeaves, * pLeaves;
- int i, Lit, pLits[5];
- if ( Gia_ObjIsConst0(pObj) || (f==0 && Gia_ObjIsRo(p->pGia, pObj)) )
- {
- if ( fSimple )
- {
- Lit = Ga2_ObjFindOrAddLit( p, pObj, f );
- Lit = Abc_LitNot(Lit);
- assert( Lit > 1 );
- sat_solver2_addclause( p->pSat, &Lit, &Lit + 1, -1 );
- return Abc_LitNot(Lit);
- }
- return 0;
- }
- if ( Gia_ObjIsCo(pObj) )
- return Abc_LitNotCond( Ga2_ManUnroll_rec(p, Gia_ObjFanin0(pObj), f), Gia_ObjFaninC0(pObj) );
- assert( pObj->fPhase );
- if ( Ga2_ObjIsLeaf0(p, pObj) )
- return Ga2_ObjFindOrAddLit( p, pObj, f );
- assert( !Gia_ObjIsPi(p->pGia, pObj) );
- Lit = Ga2_ObjFindLit( p, pObj, f );
- if ( Lit >= 0 )
- return Lit;
- if ( Gia_ObjIsRo(p->pGia, pObj) )
- {
- assert( f > 0 );
- Lit = Ga2_ManUnroll_rec( p, Gia_ObjRoToRi(p->pGia, pObj), f-1 );
- Ga2_ObjAddLit( p, pObj, f, Lit );
- return Lit;
- }
- assert( Gia_ObjIsAnd(pObj) );
- nLeaves = Ga2_ObjLeaveNum( p->pGia, pObj );
- pLeaves = Ga2_ObjLeavePtr( p->pGia, pObj );
- if ( fSimple )
- {
- // collect fanin literals
- for ( i = 0; i < nLeaves; i++ )
- {
- pLeaf = Gia_ManObj(p->pGia, pLeaves[i]);
- pLits[i] = Ga2_ManUnroll_rec( p, pLeaf, f );
- }
- // create fanout literal
- Lit = Ga2_ObjFindOrAddLit( p, pObj, f );
- // create clauses
- Ga2_ManCnfAddStatic( p, Ga2_ObjCnf0(p, pObj), Ga2_ObjCnf1(p, pObj), pLits, Lit, Gia_ObjId(p->pGia, pObj) );
- return Lit;
- }
- // collect fanin literals
- for ( i = 0; i < nLeaves; i++ )
- {
- pLeaf = Gia_ManObj( p->pGia, pLeaves[i] );
- if ( Ga2_ObjIsAbs0(p, pLeaf) ) // belongs to original abstraction
- pLits[i] = Ga2_ManUnroll_rec( p, pLeaf, f );
- else if ( Ga2_ObjIsLeaf0(p, pLeaf) ) // belongs to original PPIs
- pLits[i] = GA2_BIG_NUM + i;
- else assert( 0 );
- }
- // collect literals
- Vec_IntClear( p->vLits );
- for ( i = 0; i < nLeaves; i++ )
- Vec_IntPush( p->vLits, pLits[i] );
- // minimize truth table
- uTruth = Ga2_ObjComputeTruthSpecial( p->pGia, pObj, Ga2_ObjLeaves(p->pGia, pObj), p->vLits );
- if ( uTruth == 0 || uTruth == ~0 ) // const 0 / 1
- {
- Lit = (uTruth > 0);
- Ga2_ObjAddLit( p, pObj, f, Lit );
- }
- else if ( uTruth == 0xAAAAAAAA || uTruth == 0x55555555 ) // buffer / inverter
- {
- Lit = Vec_IntEntry( p->vLits, 0 );
- if ( Lit >= GA2_BIG_NUM )
- {
- pLeaf = Gia_ManObj( p->pGia, pLeaves[Lit-GA2_BIG_NUM] );
- Lit = Ga2_ObjFindOrAddLit( p, pLeaf, f );
- }
- Lit = Abc_LitNotCond( Lit, uTruth == 0x55555555 );
- Ga2_ObjAddLit( p, pObj, f, Lit );
- }
- else
- {
- // perform structural hashing here!!!
- // add new node
- Lit = Ga2_ObjFindOrAddLit(p, pObj, f);
- Ga2_ManCnfAddDynamic( p, uTruth, Vec_IntArray(p->vLits), Lit );
- }
- return Lit;
-}
-*/
/**Function*************************************************************
Synopsis []