summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2011-08-06 01:31:07 +0800
committerAlan Mishchenko <alanmi@berkeley.edu>2011-08-06 01:31:07 +0800
commitb9dea5d674f406b78cfb9d1b417b5e81b4550cde (patch)
tree0b977e2e2bfa895cc68a7b6bfb78967463f87c66
parentfbb12a06f20e40eea8d8aa45982d1f9f1cdb9809 (diff)
downloadabc-b9dea5d674f406b78cfb9d1b417b5e81b4550cde.tar.gz
abc-b9dea5d674f406b78cfb9d1b417b5e81b4550cde.tar.bz2
abc-b9dea5d674f406b78cfb9d1b417b5e81b4550cde.zip
Other changes to enable new features in the mapper (bug fix).
-rw-r--r--src/base/abc/abc.h1
-rw-r--r--src/base/abc/abcNetlist.c9
-rw-r--r--src/base/abc/abcNtk.c1
-rw-r--r--src/base/abci/abcIf.c5
-rw-r--r--src/base/io/ioWriteBlif.c12
5 files changed, 28 insertions, 0 deletions
diff --git a/src/base/abc/abc.h b/src/base/abc/abc.h
index 0d59d7e0..776fe452 100644
--- a/src/base/abc/abc.h
+++ b/src/base/abc/abc.h
@@ -213,6 +213,7 @@ struct Abc_Ntk_t_
Vec_Ptr_t * vOnehots; // names of one-hot-encoded registers
Vec_Int_t * vObjPerm; // permutation saved
Vec_Vec_t * vRealPos; // additional PO info
+ Vec_Int_t * vRealNodes; // additional PO info
// node attributes
Vec_Ptr_t * vAttrs; // managers of various node attributes (node functionality, global BDDs, etc)
};
diff --git a/src/base/abc/abcNetlist.c b/src/base/abc/abcNetlist.c
index f4245957..051b29f0 100644
--- a/src/base/abc/abcNetlist.c
+++ b/src/base/abc/abcNetlist.c
@@ -219,6 +219,15 @@ Abc_Ntk_t * Abc_NtkLogicToNetlist( Abc_Ntk_t * pNtk )
Abc_NtkForEachNode( pNtk, pObj, i )
Abc_ObjForEachFanin( pObj, pFanin, k )
Abc_ObjAddFanin( pObj->pCopy, pFanin->pCopy->pCopy );
+ // remap the real nodess
+ if ( pNtk->vRealNodes )
+ {
+ assert( pNtkNew->vRealNodes == NULL );
+ pNtkNew->vRealNodes = Vec_IntAlloc( Vec_IntSize(pNtk->vRealNodes) );
+ Abc_NtkForEachObjVec( pNtk->vRealNodes, pNtk, pObj, i )
+ Vec_IntPush( pNtkNew->vRealNodes, Abc_ObjId(pObj->pCopy) );
+ }
+
// duplicate EXDC
if ( pNtk->pExdc )
pNtkNew->pExdc = Abc_NtkToNetlist( pNtk->pExdc );
diff --git a/src/base/abc/abcNtk.c b/src/base/abc/abcNtk.c
index 4295835d..adb20761 100644
--- a/src/base/abc/abcNtk.c
+++ b/src/base/abc/abcNtk.c
@@ -1048,6 +1048,7 @@ void Abc_NtkDelete( Abc_Ntk_t * pNtk )
Vec_PtrFreeP( &pNtk->vLtlProperties );
Vec_IntFreeP( &pNtk->vObjPerm );
Vec_VecFreeP( &pNtk->vRealPos );
+ Vec_IntFreeP( &pNtk->vRealNodes );
ABC_FREE( pNtk );
}
diff --git a/src/base/abci/abcIf.c b/src/base/abci/abcIf.c
index e1218343..bc38c496 100644
--- a/src/base/abci/abcIf.c
+++ b/src/base/abci/abcIf.c
@@ -1084,9 +1084,11 @@ void Abc_NtkRecreatePoDrivers( If_Man_t * p, Abc_Ntk_t * pNtkNew )
return;
}
+ assert( pNtkNew->vRealNodes == NULL );
// create drivers
vDrivers = Vec_PtrStart( pNtkNew->nRealPos );
vDriverInvs = Vec_IntStart( pNtkNew->nRealPos );
+ pNtkNew->vRealNodes = Vec_IntAlloc( pNtkNew->nRealPos );
for ( i = pNtkNew->nRealPos; i < Abc_NtkPoNum(pNtkNew); i++ )
{
pObj = Abc_NtkPo( pNtkNew, i );
@@ -1098,6 +1100,7 @@ void Abc_NtkRecreatePoDrivers( If_Man_t * p, Abc_Ntk_t * pNtkNew )
// printf( "%d", Abc_ObjFaninC0(pObj) );
Vec_PtrPush( vDrivers, pNode );
Vec_IntPush( vDriverInvs, Abc_ObjFaninC0(pObj) );
+ Vec_IntPush( pNtkNew->vRealNodes, Abc_ObjId(pNode) );
}
assert( Vec_PtrSize( vDrivers ) == Abc_NtkPoNum( pNtkNew ) );
@@ -1161,6 +1164,8 @@ void Abc_NtkRecreatePoDrivers( If_Man_t * p, Abc_Ntk_t * pNtkNew )
fCompl = Vec_IntEntry( vDriverInvs, numPo );
if ( fCompl )
pFaninNew = Abc_NtkCreateNodeInv( pNtkNew, pFaninNew );
+// else
+// pFaninNew = Abc_NtkCreateNodeBuf( pNtkNew, pFaninNew );
if ( !Abc_NtkIfCheckTfi( pNtkNew, pObj, pFaninNew ) )
Abc_ObjPatchFanin( pObj, pFanin, pFaninNew );
diff --git a/src/base/io/ioWriteBlif.c b/src/base/io/ioWriteBlif.c
index ca54a766..175f2641 100644
--- a/src/base/io/ioWriteBlif.c
+++ b/src/base/io/ioWriteBlif.c
@@ -384,6 +384,18 @@ void Io_NtkWritePos( FILE * pFile, Abc_Ntk_t * pNtk, int fWriteLatches )
NameCounter++;
}
}
+ if ( pNtk->vRealNodes )
+ {
+ Abc_Obj_t * pObj;
+ fprintf( pFile, "\n\n" );
+ assert( pNtk->nRealPos >= 0 );
+ Abc_NtkForEachObjVec( pNtk->vRealNodes, pNtk, pObj, i )
+ fprintf( pFile, "#INFO %s %s\n",
+ Abc_ObjName(Abc_ObjFanin0(Abc_NtkPo(pNtk, pNtk->nRealPos+i))),
+ Abc_ObjName(Abc_ObjFanout0(pObj)) );
+ fprintf( pFile, "\n" );
+ }
+
}
/**Function*************************************************************