summaryrefslogtreecommitdiffstats
path: root/src/aig/gia/giaTim.c
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2015-10-04 09:51:57 -0700
committerAlan Mishchenko <alanmi@berkeley.edu>2015-10-04 09:51:57 -0700
commit26dc25b7f5e23689636b4d89b98281e821cf7fe8 (patch)
treeff4e262b60ac139762f75925f22dde402cb17a2b /src/aig/gia/giaTim.c
parent7d9e3c2ffe131098a48e493eb9890c551144200b (diff)
downloadabc-26dc25b7f5e23689636b4d89b98281e821cf7fe8.tar.gz
abc-26dc25b7f5e23689636b4d89b98281e821cf7fe8.tar.bz2
abc-26dc25b7f5e23689636b4d89b98281e821cf7fe8.zip
Adding support for flop init-states in extended AIG.
Diffstat (limited to 'src/aig/gia/giaTim.c')
-rw-r--r--src/aig/gia/giaTim.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/aig/gia/giaTim.c b/src/aig/gia/giaTim.c
index bd77847b..d48f2637 100644
--- a/src/aig/gia/giaTim.c
+++ b/src/aig/gia/giaTim.c
@@ -842,6 +842,28 @@ Gia_Man_t * Gia_ManDupCollapse( Gia_Man_t * p, Gia_Man_t * pBoxes, Vec_Int_t * v
Gia_ManStop( pTemp );
assert( Tim_ManPoNum(pManTime) == Gia_ManCoNum(pNew) );
assert( Tim_ManPiNum(pManTime) == Gia_ManCiNum(pNew) );
+ // implement initial state if given
+ if ( p->vRegInits && Vec_IntSum(p->vRegInits) )
+ {
+ char * pInit = ABC_ALLOC( char, Vec_IntSize(p->vRegInits) + 1 );
+ Gia_Obj_t * pObj;
+ int i;
+ assert( Vec_IntSize(p->vRegInits) == Gia_ManRegNum(pNew) );
+ Gia_ManForEachRo( pNew, pObj, i )
+ {
+ if ( Vec_IntEntry(p->vRegInits, i) == 0 )
+ pInit[i] = '0';
+ else if ( Vec_IntEntry(p->vRegInits, i) == 1 )
+ pInit[i] = '1';
+ else
+ pInit[i] = 'X';
+ }
+ pInit[i] = 0;
+ pNew = Gia_ManDupZeroUndc( pTemp = pNew, pInit, 1 );
+ pNew->nConstrs = pTemp->nConstrs; pTemp->nConstrs = 0;
+ Gia_ManStop( pTemp );
+ ABC_FREE( pInit );
+ }
return pNew;
}