summaryrefslogtreecommitdiffstats
path: root/src/base
diff options
context:
space:
mode:
Diffstat (limited to 'src/base')
-rw-r--r--src/base/abc/abc.h18
-rw-r--r--src/base/abc/abcAig.c31
-rw-r--r--src/base/abc/abcCheck.c5
-rw-r--r--src/base/abc/abcNames.c113
-rw-r--r--src/base/abc/abcNtk.c27
-rw-r--r--src/base/abc/abcObj.c33
-rw-r--r--src/base/abc/abcUtil.c51
-rw-r--r--src/base/abci/abcPrint.c2
-rw-r--r--src/base/abci/abcProve.c4
-rw-r--r--src/base/abci/abcSat.c10
-rw-r--r--src/base/io/ioReadBlif.c5
-rw-r--r--src/base/io/ioReadEdif.c3
12 files changed, 191 insertions, 111 deletions
diff --git a/src/base/abc/abc.h b/src/base/abc/abc.h
index 32365b81..1fb57f67 100644
--- a/src/base/abc/abc.h
+++ b/src/base/abc/abc.h
@@ -40,6 +40,7 @@ extern "C" {
#include "solver.h"
#include "vec.h"
#include "stmm.h"
+#include "nm.h"
////////////////////////////////////////////////////////////////////////
/// PARAMETERS ///
@@ -158,12 +159,13 @@ struct Abc_Ntk_t_
char * pSpec; // the name of the spec file if present
int Id; // network ID
// name representation
- stmm_table * tName2Net; // the table hashing net names into net pointer
- stmm_table * tObj2Name; // the table hashing PI/PO/latch pointers into names
+// stmm_table * tName2Net; // the table hashing net names into net pointer
+// stmm_table * tObj2Name; // the table hashing PI/PO/latch pointers into names
// components of the network
Vec_Ptr_t * vObjs; // the array of all objects (net, nodes, latches)
Vec_Ptr_t * vCis; // the array of combinational inputs (PIs followed by latches)
Vec_Ptr_t * vCos; // the array of combinational outputs (POs followed by latches)
+ Vec_Ptr_t * vAsserts; // the array of assertions
Vec_Ptr_t * vLats; // the array of latches (or the cutset in the sequential network)
Vec_Ptr_t * vCutSet; // the array of cutset nodes (used in the sequential AIG)
// the stats about the number of living objects
@@ -174,6 +176,7 @@ struct Abc_Ntk_t_
int nLatches; // the number of live latches
int nPis; // the number of primary inputs
int nPos; // the number of primary outputs
+ int nAsserts; // the number of assertion primary outputs
// the functionality manager
void * pManFunc; // AIG manager, BDD manager, or memory manager for SOPs
// the global functions (BDDs)
@@ -198,6 +201,8 @@ struct Abc_Ntk_t_
Vec_Int_t * vIntTemp; // the temporary array
Vec_Str_t * vStrTemp; // the temporary array
void * pData; // the temporary pointer
+ // name manager
+ Nm_Man_t * pManName;
// the backup network and the step number
Abc_Ntk_t * pNetBackup; // the pointer to the previous backup network
int iStep; // the generation number for the given network
@@ -207,7 +212,7 @@ struct Abc_Ntk_t_
short fHieVisited; // flag to mark the visited network
short fHiePath; // flag to mark the network on the path
// memory management
- Extra_MmFlex_t * pMmNames; // memory manager for net names
+// Extra_MmFlex_t * pMmNames; // memory manager for net names
Extra_MmFixed_t* pMmObj; // memory manager for objects
Extra_MmStep_t * pMmStep; // memory manager for arrays
};
@@ -540,15 +545,13 @@ extern Abc_Obj_t * Abc_ObjAlloc( Abc_Ntk_t * pNtk, Abc_ObjType_t Type );
extern void Abc_ObjRecycle( Abc_Obj_t * pObj );
extern void Abc_ObjAdd( Abc_Obj_t * pObj );
/*=== abcNames.c ====================================================*/
-extern char * Abc_NtkRegisterName( Abc_Ntk_t * pNtk, char * pName );
-extern char * Abc_NtkRegisterNamePlus( Abc_Ntk_t * pNtk, char * pName, char * pSuffix );
+//extern char * Abc_NtkRegisterName( Abc_Ntk_t * pNtk, char * pName );
+//extern char * Abc_NtkRegisterNamePlus( Abc_Ntk_t * pNtk, char * pName, char * pSuffix );
extern char * Abc_ObjName( Abc_Obj_t * pNode );
extern char * Abc_ObjNameSuffix( Abc_Obj_t * pObj, char * pSuffix );
-extern char * Abc_ObjNameUnique( Abc_Ntk_t * pNtk, char * pName );
extern char * Abc_ObjNameDummy( char * pPrefix, int Num, int nDigits );
extern char * Abc_NtkLogicStoreName( Abc_Obj_t * pNodeNew, char * pNameOld );
extern char * Abc_NtkLogicStoreNamePlus( Abc_Obj_t * pNodeNew, char * pNameOld, char * pSuffix );
-extern void Abc_NtkCreateCioNamesTable( Abc_Ntk_t * pNtk );
extern void Abc_NtkDupCioNamesTable( Abc_Ntk_t * pNtk, Abc_Ntk_t * pNtkNew );
extern void Abc_NtkDupCioNamesTableDual( Abc_Ntk_t * pNtk, Abc_Ntk_t * pNtkNew );
extern Vec_Ptr_t * Abc_NodeGetFaninNames( Abc_Obj_t * pNode );
@@ -561,7 +564,6 @@ extern void Abc_NtkAddDummyPiNames( Abc_Ntk_t * pNtk );
extern void Abc_NtkAddDummyPoNames( Abc_Ntk_t * pNtk );
extern void Abc_NtkAddDummyLatchNames( Abc_Ntk_t * pNtk );
extern void Abc_NtkShortNames( Abc_Ntk_t * pNtk );
-extern stmm_table * Abc_NtkNamesToTable( Vec_Ptr_t * vNodes );
/*=== abcNetlist.c ==========================================================*/
extern Abc_Ntk_t * Abc_NtkNetlistToLogic( Abc_Ntk_t * pNtk );
extern Abc_Ntk_t * Abc_NtkLogicToNetlist( Abc_Ntk_t * pNtk, int fDirect );
diff --git a/src/base/abc/abcAig.c b/src/base/abc/abcAig.c
index 0d75eb76..f1171992 100644
--- a/src/base/abc/abcAig.c
+++ b/src/base/abc/abcAig.c
@@ -58,6 +58,11 @@ struct Abc_Aig_t_
Vec_Ptr_t * vStackReplaceNew; // the nodes to be used for replacement
Vec_Vec_t * vLevels; // the nodes to be updated
Vec_Vec_t * vLevelsR; // the nodes to be updated
+
+ int nStrash0;
+ int nStrash1;
+ int nStrash5;
+ int nStrash2;
};
// iterators through the entries in the linked lists of nodes
@@ -164,6 +169,8 @@ int Abc_AigCleanup( Abc_Aig_t * pMan )
Vec_Ptr_t * vDangles;
Abc_Obj_t * pAnd;
int i, nNodesOld;
+// printf( "Strash0 = %d. Strash1 = %d. Strash100 = %d. StrashM = %d.\n",
+// pMan->nStrash0, pMan->nStrash1, pMan->nStrash5, pMan->nStrash2 );
nNodesOld = pMan->nEntries;
// collect the AND nodes that do not fanout
vDangles = Vec_PtrAlloc( 100 );
@@ -369,6 +376,27 @@ Abc_Obj_t * Abc_AigAndLookup( Abc_Aig_t * pMan, Abc_Obj_t * p0, Abc_Obj_t * p1 )
return p0;
return Abc_ObjNot(pConst1);
}
+/*
+ {
+ int nFans0 = Abc_ObjFanoutNum( Abc_ObjRegular(p0) );
+ int nFans1 = Abc_ObjFanoutNum( Abc_ObjRegular(p1) );
+ if ( nFans0 == 0 || nFans1 == 0 )
+ pMan->nStrash0++;
+ else if ( nFans0 == 1 || nFans1 == 1 )
+ pMan->nStrash1++;
+ else if ( nFans0 <= 100 && nFans1 <= 100 )
+ pMan->nStrash5++;
+ else
+ pMan->nStrash2++;
+ }
+*/
+ {
+ int nFans0 = Abc_ObjFanoutNum( Abc_ObjRegular(p0) );
+ int nFans1 = Abc_ObjFanoutNum( Abc_ObjRegular(p1) );
+ if ( nFans0 == 0 || nFans1 == 0 )
+ return NULL;
+ }
+
// order the arguments
if ( Abc_ObjRegular(p0)->Id > Abc_ObjRegular(p1)->Id )
pAnd = p0, p0 = p1, p1 = pAnd;
@@ -377,7 +405,10 @@ Abc_Obj_t * Abc_AigAndLookup( Abc_Aig_t * pMan, Abc_Obj_t * p0, Abc_Obj_t * p1 )
// find the matching node in the table
Abc_AigBinForEachEntry( pMan->pBins[Key], pAnd )
if ( p0 == Abc_ObjChild0(pAnd) && p1 == Abc_ObjChild1(pAnd) )
+ {
+// assert( Abc_ObjFanoutNum(Abc_ObjRegular(p0)) && Abc_ObjFanoutNum(p1) );
return pAnd;
+ }
return NULL;
}
diff --git a/src/base/abc/abcCheck.c b/src/base/abc/abcCheck.c
index 5c152409..49e0e825 100644
--- a/src/base/abc/abcCheck.c
+++ b/src/base/abc/abcCheck.c
@@ -233,6 +233,7 @@ bool Abc_NtkCheckNames( Abc_Ntk_t * pNtk )
if ( Abc_NtkIsNetlist(pNtk) )
{
+/*
// check that the nets in the table are also in the network
stmm_foreach_item( pNtk->tName2Net, gen, &pName, (char**)&pNet )
{
@@ -251,8 +252,9 @@ bool Abc_NtkCheckNames( Abc_Ntk_t * pNtk )
return 0;
}
}
+*/
}
-
+/*
// check PI/PO/latch names
Abc_NtkForEachPi( pNtk, pObj, i )
{
@@ -293,6 +295,7 @@ bool Abc_NtkCheckNames( Abc_Ntk_t * pNtk )
return 0;
}
}
+*/
return 1;
}
diff --git a/src/base/abc/abcNames.c b/src/base/abc/abcNames.c
index 14f0b505..f9fbe9db 100644
--- a/src/base/abc/abcNames.c
+++ b/src/base/abc/abcNames.c
@@ -44,11 +44,14 @@
***********************************************************************/
char * Abc_NtkRegisterName( Abc_Ntk_t * pNtk, char * pName )
{
+/*
char * pRegName;
if ( pName == NULL ) return NULL;
pRegName = Extra_MmFlexEntryFetch( pNtk->pMmNames, strlen(pName) + 1 );
strcpy( pRegName, pName );
return pRegName;
+*/
+ return NULL;
}
/**Function*************************************************************
@@ -64,11 +67,14 @@ char * Abc_NtkRegisterName( Abc_Ntk_t * pNtk, char * pName )
***********************************************************************/
char * Abc_NtkRegisterNamePlus( Abc_Ntk_t * pNtk, char * pName, char * pSuffix )
{
+/*
char * pRegName;
assert( pName && pSuffix );
pRegName = Extra_MmFlexEntryFetch( pNtk->pMmNames, strlen(pName) + strlen(pSuffix) + 1 );
sprintf( pRegName, "%s%s", pName, pSuffix );
return pRegName;
+*/
+ return NULL;
}
/**Function*************************************************************
@@ -90,7 +96,9 @@ char * Abc_ObjName( Abc_Obj_t * pObj )
char * pName;
// check if the object is in the lookup table
- if ( stmm_lookup( pObj->pNtk->tObj2Name, (char *)pObj, &pName ) )
+// if ( stmm_lookup( pObj->pNtk->tObj2Name, (char *)pObj, &pName ) )
+// return pName;
+ if ( pName = Nm_ManFindNameById(pObj->pNtk->pManName, pObj->Id) )
return pName;
// consider network types
@@ -134,33 +142,6 @@ char * Abc_ObjNameSuffix( Abc_Obj_t * pObj, char * pSuffix )
return Buffer;
}
-/**Function*************************************************************
-
- Synopsis [Finds a unique name for the node.]
-
- Description [If the name exists, tries appending numbers to it until
- it becomes unique.]
-
- SideEffects []
-
- SeeAlso []
-
-***********************************************************************/
-char * Abc_ObjNameUnique( Abc_Ntk_t * pNtk, char * pName )
-{
- static char Buffer[1000];
- int Counter;
- assert( 0 );
- if ( !stmm_is_member( pNtk->tName2Net, pName ) )
- return pName;
- for ( Counter = 1; ; Counter++ )
- {
- sprintf( Buffer, "%s_%d", pName, Counter );
- if ( !stmm_is_member( pNtk->tName2Net, Buffer ) )
- return Buffer;
- }
- return NULL;
-}
/**Function*************************************************************
@@ -195,6 +176,7 @@ char * Abc_ObjNameDummy( char * pPrefix, int Num, int nDigits )
***********************************************************************/
char * Abc_NtkLogicStoreName( Abc_Obj_t * pObjNew, char * pNameOld )
{
+/*
char * pNewName;
assert( Abc_ObjIsCio(pObjNew) );
// get the new name
@@ -205,6 +187,9 @@ char * Abc_NtkLogicStoreName( Abc_Obj_t * pObjNew, char * pNameOld )
assert( 0 ); // the object is added for the second time
}
return pNewName;
+*/
+ Nm_ManStoreIdName( pObjNew->pNtk->pManName, pObjNew->Id, pNameOld, NULL );
+ return NULL;
}
/**Function*************************************************************
@@ -220,6 +205,7 @@ char * Abc_NtkLogicStoreName( Abc_Obj_t * pObjNew, char * pNameOld )
***********************************************************************/
char * Abc_NtkLogicStoreNamePlus( Abc_Obj_t * pObjNew, char * pNameOld, char * pSuffix )
{
+/*
char * pNewName;
assert( pSuffix );
assert( Abc_ObjIsCio(pObjNew) );
@@ -231,31 +217,9 @@ char * Abc_NtkLogicStoreNamePlus( Abc_Obj_t * pObjNew, char * pNameOld, char * p
assert( 0 ); // the object is added for the second time
}
return pNewName;
-}
-
-/**Function*************************************************************
-
- Synopsis [Creates the name arrays from the old network.]
-
- Description []
-
- SideEffects []
-
- SeeAlso []
-
-***********************************************************************/
-void Abc_NtkCreateCioNamesTable( Abc_Ntk_t * pNtk )
-{
- Abc_Obj_t * pObj;
- int i;
- assert( Abc_NtkIsNetlist(pNtk) );
- assert( st_count(pNtk->tObj2Name) == 0 );
- Abc_NtkForEachPi( pNtk, pObj, i )
- Abc_NtkLogicStoreName( pObj, Abc_ObjFanout0(pObj)->pData );
- Abc_NtkForEachPo( pNtk, pObj, i )
- Abc_NtkLogicStoreName( pObj, Abc_ObjFanin0(pObj)->pData );
- Abc_NtkForEachLatch( pNtk, pObj, i )
- Abc_NtkLogicStoreName( pObj, Abc_ObjFanout0(pObj)->pData );
+*/
+ Nm_ManStoreIdName( pObjNew->pNtk->pManName, pObjNew->Id, pNameOld, pSuffix );
+ return NULL;
}
/**Function*************************************************************
@@ -276,16 +240,16 @@ void Abc_NtkDupCioNamesTable( Abc_Ntk_t * pNtk, Abc_Ntk_t * pNtkNew )
assert( Abc_NtkPiNum(pNtk) == Abc_NtkPiNum(pNtkNew) );
assert( Abc_NtkPoNum(pNtk) == Abc_NtkPoNum(pNtkNew) );
assert( Abc_NtkLatchNum(pNtk) == Abc_NtkLatchNum(pNtkNew) );
- assert( st_count(pNtk->tObj2Name) > 0 );
- assert( st_count(pNtkNew->tObj2Name) == 0 );
+// assert( st_count(pNtk->tObj2Name) > 0 );
+// assert( st_count(pNtkNew->tObj2Name) == 0 );
// copy the CI/CO names if given
Abc_NtkForEachPi( pNtk, pObj, i )
- Abc_NtkLogicStoreName( Abc_NtkPi(pNtkNew,i), Abc_ObjName(pObj) );
+ Abc_NtkLogicStoreName( Abc_NtkPi(pNtkNew,i), Abc_ObjName(Abc_ObjFanout0Ntk(pObj)) );
Abc_NtkForEachPo( pNtk, pObj, i )
- Abc_NtkLogicStoreName( Abc_NtkPo(pNtkNew,i), Abc_ObjName(pObj) );
+ Abc_NtkLogicStoreName( Abc_NtkPo(pNtkNew,i), Abc_ObjName(Abc_ObjFanin0Ntk(pObj)) );
if ( !Abc_NtkIsSeq(pNtk) )
Abc_NtkForEachLatch( pNtk, pObj, i )
- Abc_NtkLogicStoreName( Abc_NtkLatch(pNtkNew,i), Abc_ObjName(pObj) );
+ Abc_NtkLogicStoreName( Abc_NtkLatch(pNtkNew,i), Abc_ObjName(Abc_ObjFanout0Ntk(pObj)) );
}
/**Function*************************************************************
@@ -306,8 +270,8 @@ void Abc_NtkDupCioNamesTableDual( Abc_Ntk_t * pNtk, Abc_Ntk_t * pNtkNew )
assert( Abc_NtkPiNum(pNtk) == Abc_NtkPiNum(pNtkNew) );
assert( Abc_NtkPoNum(pNtk) * 2 == Abc_NtkPoNum(pNtkNew) );
assert( Abc_NtkLatchNum(pNtk) == Abc_NtkLatchNum(pNtkNew) );
- assert( st_count(pNtk->tObj2Name) > 0 );
- assert( st_count(pNtkNew->tObj2Name) == 0 );
+// assert( st_count(pNtk->tObj2Name) > 0 );
+// assert( st_count(pNtkNew->tObj2Name) == 0 );
// copy the CI/CO names if given
Abc_NtkForEachPi( pNtk, pObj, i )
Abc_NtkLogicStoreName( Abc_NtkPi(pNtkNew,i), Abc_ObjName(pObj) );
@@ -573,35 +537,16 @@ void Abc_NtkAddDummyLatchNames( Abc_Ntk_t * pNtk )
***********************************************************************/
void Abc_NtkShortNames( Abc_Ntk_t * pNtk )
{
- stmm_free_table( pNtk->tObj2Name );
- pNtk->tObj2Name = stmm_init_table(stmm_ptrcmp, stmm_ptrhash);
+// stmm_free_table( pNtk->tObj2Name );
+// pNtk->tObj2Name = stmm_init_table(stmm_ptrcmp, stmm_ptrhash);
+ Nm_ManFree( pNtk->pManName );
+ pNtk->pManName = Nm_ManCreate( Abc_NtkPiNum(pNtk) + Abc_NtkPoNum(pNtk) + Abc_NtkLatchNum(pNtk) + 10 );
+
Abc_NtkAddDummyPiNames( pNtk );
Abc_NtkAddDummyPoNames( pNtk );
Abc_NtkAddDummyLatchNames( pNtk );
}
-/**Function*************************************************************
-
- Synopsis [Returns the hash table with these names.]
-
- Description []
-
- SideEffects []
-
- SeeAlso []
-
-***********************************************************************/
-stmm_table * Abc_NtkNamesToTable( Vec_Ptr_t * vNodes )
-{
- stmm_table * tTable;
- Abc_Obj_t * pObj;
- int i;
- tTable = stmm_init_table(strcmp, stmm_strhash);
- Vec_PtrForEachEntry( vNodes, pObj, i )
- stmm_insert( tTable, Abc_ObjName(pObj), (char *)pObj );
- return tTable;
-}
-
////////////////////////////////////////////////////////////////////////
/// END OF FILE ///
////////////////////////////////////////////////////////////////////////
diff --git a/src/base/abc/abcNtk.c b/src/base/abc/abcNtk.c
index 0640d661..c8bdf987 100644
--- a/src/base/abc/abcNtk.c
+++ b/src/base/abc/abcNtk.c
@@ -57,14 +57,15 @@ Abc_Ntk_t * Abc_NtkAlloc( Abc_NtkType_t Type, Abc_NtkFunc_t Func )
pNtk->vCutSet = Vec_PtrAlloc( 100 );
pNtk->vCis = Vec_PtrAlloc( 100 );
pNtk->vCos = Vec_PtrAlloc( 100 );
+ pNtk->vAsserts = Vec_PtrAlloc( 100 );
pNtk->vPtrTemp = Vec_PtrAlloc( 100 );
pNtk->vIntTemp = Vec_IntAlloc( 100 );
pNtk->vStrTemp = Vec_StrAlloc( 100 );
// start the hash table
- pNtk->tName2Net = stmm_init_table(strcmp, stmm_strhash);
- pNtk->tObj2Name = stmm_init_table(stmm_ptrcmp, stmm_ptrhash);
+// pNtk->tName2Net = stmm_init_table(strcmp, stmm_strhash);
+// pNtk->tObj2Name = stmm_init_table(stmm_ptrcmp, stmm_ptrhash);
// start the memory managers
- pNtk->pMmNames = Extra_MmFlexStart();
+// pNtk->pMmNames = Extra_MmFlexStart();
pNtk->pMmObj = Extra_MmFixedStart( sizeof(Abc_Obj_t) );
pNtk->pMmStep = Extra_MmStepStart( ABC_NUM_STEPS );
// get ready to assign the first Obj ID
@@ -94,6 +95,9 @@ Abc_Ntk_t * Abc_NtkAlloc( Abc_NtkType_t Type, Abc_NtkFunc_t Func )
}
else
Vec_PtrPush( pNtk->vObjs, NULL );
+ // name manager
+ pNtk->pManName = Nm_ManCreate( 1000 );
+//printf( "Allocated newtork %p\n", pNtk );
return pNtk;
}
@@ -146,7 +150,8 @@ Abc_Ntk_t * Abc_NtkStartFrom( Abc_Ntk_t * pNtk, Abc_NtkType_t Type, Abc_NtkFunc_
Abc_HManAddProto( pObj->pCopy, pObj );
}
// transfer the names
- Abc_NtkDupCioNamesTable( pNtk, pNtkNew );
+ if ( Type != ABC_NTK_NETLIST )
+ Abc_NtkDupCioNamesTable( pNtk, pNtkNew );
Abc_ManTimeDup( pNtk, pNtkNew );
// check that the CI/CO/latches are copied correctly
assert( Abc_NtkCiNum(pNtk) == Abc_NtkCiNum(pNtkNew) );
@@ -335,7 +340,7 @@ void Abc_NtkFinalizeRead( Abc_Ntk_t * pNtk )
// fix the net drivers
Abc_NtkFixNonDrivenNets( pNtk );
// create the names table
- Abc_NtkCreateCioNamesTable( pNtk );
+// Abc_NtkCreateCioNamesTable( pNtk );
// add latches to the CI/CO arrays
Abc_NtkForEachLatch( pNtk, pLatch, i )
{
@@ -735,6 +740,7 @@ void Abc_NtkDelete( Abc_Ntk_t * pNtk )
int LargePiece = (4 << ABC_NUM_STEPS);
if ( pNtk == NULL )
return;
+//printf( "Deleted newtork %p\n", pNtk );
// make sure all the marks are clean
Abc_NtkForEachObj( pNtk, pObj, i )
{
@@ -761,6 +767,7 @@ void Abc_NtkDelete( Abc_Ntk_t * pNtk )
// free the arrays
Vec_PtrFree( pNtk->vCis );
Vec_PtrFree( pNtk->vCos );
+ Vec_PtrFree( pNtk->vAsserts );
Vec_PtrFree( pNtk->vObjs );
Vec_PtrFree( pNtk->vLats );
Vec_PtrFree( pNtk->vCutSet );
@@ -769,15 +776,15 @@ void Abc_NtkDelete( Abc_Ntk_t * pNtk )
Vec_StrFree( pNtk->vStrTemp );
if ( pNtk->pModel ) free( pNtk->pModel );
// free the hash table of Obj name into Obj ID
- stmm_free_table( pNtk->tName2Net );
- stmm_free_table( pNtk->tObj2Name );
+// stmm_free_table( pNtk->tName2Net );
+// stmm_free_table( pNtk->tObj2Name );
TotalMemory = 0;
- TotalMemory += Extra_MmFlexReadMemUsage(pNtk->pMmNames);
+// TotalMemory += Extra_MmFlexReadMemUsage(pNtk->pMmNames);
TotalMemory += Extra_MmFixedReadMemUsage(pNtk->pMmObj);
TotalMemory += Extra_MmStepReadMemUsage(pNtk->pMmStep);
// fprintf( stdout, "The total memory allocated internally by the network = %0.2f Mb.\n", ((double)TotalMemory)/(1<<20) );
// free the storage
- Extra_MmFlexStop ( pNtk->pMmNames, 0 );
+// Extra_MmFlexStop ( pNtk->pMmNames, 0 );
Extra_MmFixedStop( pNtk->pMmObj, 0 );
Extra_MmStepStop ( pNtk->pMmStep, 0 );
// free the timing manager
@@ -797,6 +804,8 @@ void Abc_NtkDelete( Abc_Ntk_t * pNtk )
}
else if ( !Abc_NtkHasMapping(pNtk) )
assert( 0 );
+ // name manager
+ Nm_ManFree( pNtk->pManName );
// free the hierarchy
if ( Abc_NtkIsNetlist(pNtk) && pNtk->tName2Model )
{
diff --git a/src/base/abc/abcObj.c b/src/base/abc/abcObj.c
index 4be253d1..56fcef95 100644
--- a/src/base/abc/abcObj.c
+++ b/src/base/abc/abcObj.c
@@ -101,12 +101,14 @@ void Abc_ObjAdd( Abc_Obj_t * pObj )
// perform specialized operations depending on the object type
if ( Abc_ObjIsNet(pObj) )
{
+/*
// add the name to the table
if ( pObj->pData && stmm_insert( pNtk->tName2Net, pObj->pData, (char *)pObj ) )
{
printf( "Error: The net is already in the table...\n" );
assert( 0 );
}
+*/
pNtk->nNets++;
}
else if ( Abc_ObjIsNode(pObj) )
@@ -169,12 +171,19 @@ Abc_Obj_t * Abc_NtkDupObj( Abc_Ntk_t * pNtkNew, Abc_Obj_t * pObj )
}
}
else if ( Abc_ObjIsNet(pObj) ) // copy the name
- pObjNew->pData = Abc_NtkRegisterName( pNtkNew, pObj->pData );
+ {
+// pObjNew->pData = Abc_NtkRegisterName( pNtkNew, pObj->pData );
+ }
else if ( Abc_ObjIsLatch(pObj) ) // copy the reset value
pObjNew->pData = pObj->pData;
pObj->pCopy = pObjNew;
// add the object to the network
Abc_ObjAdd( pObjNew );
+
+
+ if ( Abc_ObjIsNet(pObj) )
+ pObjNew->pData = Nm_ManStoreIdName( pNtkNew->pManName, pObjNew->Id, pObj->pData, NULL );
+
return pObjNew;
}
@@ -214,12 +223,15 @@ void Abc_NtkDeleteObj( Abc_Obj_t * pObj )
// perform specialized operations depending on the object type
if ( Abc_ObjIsNet(pObj) )
{
+ assert( 0 );
+/*
// remove the net from the hash table of nets
if ( pObj->pData && !stmm_delete( pNtk->tName2Net, (char **)&pObj->pData, (char **)&pObj ) )
{
printf( "Error: The net is not in the table...\n" );
assert( 0 );
}
+*/
pObj->pData = NULL;
pNtk->nNets--;
}
@@ -238,11 +250,15 @@ void Abc_NtkDeleteObj( Abc_Obj_t * pObj )
assert( Abc_NtkPoNum(pObj->pNtk) > 0 );
Vec_PtrRemove( pObj->pNtk->vCos, pObj );
pObj->pNtk->nPos--;
+
+ assert( 0 );
+/*
// add the name to the table
if ( !stmm_delete( pObj->pNtk->tObj2Name, (char **)&pObj, NULL ) )
{
assert( 0 ); // the PO is not in the table
}
+*/
}
else
assert( 0 );
@@ -359,10 +375,16 @@ Abc_Obj_t * Abc_NtkFindCo( Abc_Ntk_t * pNtk, char * pName )
Abc_Obj_t * Abc_NtkFindNet( Abc_Ntk_t * pNtk, char * pName )
{
Abc_Obj_t * pNet;
+ int ObjId;
assert( Abc_NtkIsNetlist(pNtk) );
- if ( stmm_lookup( pNtk->tName2Net, pName, (char**)&pNet ) )
- return pNet;
- return NULL;
+// if ( stmm_lookup( pNtk->tName2Net, pName, (char**)&pNet ) )
+// return pNet;
+// return NULL;
+ ObjId = Nm_ManFindIdByName( pNtk->pManName, pName, NULL );
+ if ( ObjId == -1 )
+ return NULL;
+ pNet = Abc_NtkObj( pNtk, ObjId );
+ return pNet;
}
/**Function*************************************************************
@@ -384,8 +406,9 @@ Abc_Obj_t * Abc_NtkFindOrCreateNet( Abc_Ntk_t * pNtk, char * pName )
return pNet;
// create a new net
pNet = Abc_ObjAlloc( pNtk, ABC_OBJ_NET );
- pNet->pData = Abc_NtkRegisterName( pNtk, pName );
+// pNet->pData = Abc_NtkRegisterName( pNtk, pName );
Abc_ObjAdd( pNet );
+ pNet->pData = Nm_ManStoreIdName( pNtk->pManName, pNet->Id, pName, NULL );
return pNet;
}
diff --git a/src/base/abc/abcUtil.c b/src/base/abc/abcUtil.c
index 8449c91d..034aa38f 100644
--- a/src/base/abc/abcUtil.c
+++ b/src/base/abc/abcUtil.c
@@ -1064,6 +1064,57 @@ void Abc_NtkReassignIds( Abc_Ntk_t * pNtk )
Abc_AigRehash( pNtk->pManFunc );
}
+/**Function*************************************************************
+
+ Synopsis [Detect cases when non-trivial FF matching is possible.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void Abc_NtkDetectMatching( Abc_Ntk_t * pNtk )
+{
+ Abc_Obj_t * pLatch, * pFanin;
+ int i, nTFFs, nJKFFs;
+ nTFFs = nJKFFs = 0;
+ Abc_NtkForEachLatch( pNtk, pLatch, i )
+ {
+ pFanin = Abc_ObjFanin0(pLatch);
+ if ( Abc_ObjFaninNum(pFanin) != 2 )
+ continue;
+ if ( Abc_NodeIsExorType(pLatch) )
+ {
+ if ( Abc_ObjFanin0(Abc_ObjFanin0(pFanin)) == pLatch ||
+ Abc_ObjFanin1(Abc_ObjFanin0(pFanin)) == pLatch )
+ nTFFs++;
+ }
+ if ( Abc_ObjFaninNum( Abc_ObjFanin0(pFanin) ) != 2 ||
+ Abc_ObjFaninNum( Abc_ObjFanin1(pFanin) ) != 2 )
+ continue;
+
+/*
+ if ( !Abc_ObjFaninC0(pLatch) ||
+ !Abc_ObjFaninC0( Abc_ObjFanin0(pFanin) ) ||
+ !Abc_ObjFaninC1( Abc_ObjFanin0(pFanin) ) )
+ continue;
+*/
+
+ if ( (Abc_ObjFanin0(Abc_ObjFanin0(pFanin)) == pLatch ||
+ Abc_ObjFanin1(Abc_ObjFanin0(pFanin)) == pLatch) &&
+ (Abc_ObjFanin0(Abc_ObjFanin1(pFanin)) == pLatch ||
+ Abc_ObjFanin1(Abc_ObjFanin1(pFanin)) == pLatch) )
+ {
+ nJKFFs++;
+ }
+ }
+ printf( "D = %6d. T = %6d. JK = %6d. (%6.2f %%)\n",
+ Abc_NtkLatchNum(pNtk), nTFFs, nJKFFs, 100.0 * nJKFFs / Abc_NtkLatchNum(pNtk) );
+}
+
+
////////////////////////////////////////////////////////////////////////
/// END OF FILE ///
////////////////////////////////////////////////////////////////////////
diff --git a/src/base/abci/abcPrint.c b/src/base/abci/abcPrint.c
index d7b270bf..2aad721b 100644
--- a/src/base/abci/abcPrint.c
+++ b/src/base/abci/abcPrint.c
@@ -50,6 +50,8 @@ void Abc_NtkPrintStats( FILE * pFile, Abc_Ntk_t * pNtk, int fFactored )
{
int Num, Num2;
+// Abc_NtkDetectMatching( pNtk );
+// return;
fprintf( pFile, "%-13s:", pNtk->pName );
fprintf( pFile, " i/o = %4d/%4d", Abc_NtkPiNum(pNtk), Abc_NtkPoNum(pNtk) );
diff --git a/src/base/abci/abcProve.c b/src/base/abci/abcProve.c
index c0e904bf..23315223 100644
--- a/src/base/abci/abcProve.c
+++ b/src/base/abci/abcProve.c
@@ -140,8 +140,9 @@ int Abc_NtkMiterProve( Abc_Ntk_t ** ppNtk, void * pPars )
if ( RetValue >= 0 )
break;
}
- }
+ }
+/*
// try to prove it using brute force SAT
if ( RetValue < 0 && pParams->fUseBdds )
{
@@ -161,6 +162,7 @@ int Abc_NtkMiterProve( Abc_Ntk_t ** ppNtk, void * pPars )
pNtk = pNtkTemp;
Abc_NtkMiterPrint( pNtk, "BDD building", clk, pParams->fVerbose );
}
+*/
if ( RetValue < 0 )
{
diff --git a/src/base/abci/abcSat.c b/src/base/abci/abcSat.c
index 9348231b..06376eed 100644
--- a/src/base/abci/abcSat.c
+++ b/src/base/abci/abcSat.c
@@ -422,7 +422,15 @@ int Abc_NtkMiterSatCreateInt( solver * pSat, Abc_Ntk_t * pNtk, int fJFront )
pNode->pCopy = (Abc_Obj_t *)vNodes->nSize;
Vec_PtrPush( vNodes, pNode );
Abc_NtkClauseTriv( pSat, pNode, vVars );
-
+/*
+ // add the PI variables first
+ Abc_NtkForEachCi( pNtk, pNode, i )
+ {
+ pNode->fMarkA = 1;
+ pNode->pCopy = (Abc_Obj_t *)vNodes->nSize;
+ Vec_PtrPush( vNodes, pNode );
+ }
+*/
// collect the nodes that need clauses and top-level assignments
Abc_NtkForEachCo( pNtk, pNode, i )
{
diff --git a/src/base/io/ioReadBlif.c b/src/base/io/ioReadBlif.c
index f6d92af7..3d33e6a3 100644
--- a/src/base/io/ioReadBlif.c
+++ b/src/base/io/ioReadBlif.c
@@ -216,6 +216,8 @@ Abc_Ntk_t * Io_ReadBlifNetworkOne( Io_ReadBlif_t * p )
{
printf( "%s: File parsing skipped after line %d (\"%s\").\n", p->pFileName,
Extra_FileReaderGetLineNumber(p->pReader, 0), p->vTokens->pArray[0] );
+ Abc_NtkDelete(pNtk);
+ p->pNtkCur = NULL;
return NULL;
}
@@ -573,7 +575,8 @@ int Io_ReadBlifNetworkSubcircuit( Io_ReadBlif_t * p, Vec_Ptr_t * vTokens )
// store the names of formal/actual inputs/outputs of the box
vNames = Vec_PtrAlloc( 10 );
Vec_PtrForEachEntryStart( vTokens, pName, i, 1 )
- Vec_PtrPush( vNames, Abc_NtkRegisterName(p->pNtkCur, pName) );
+// Vec_PtrPush( vNames, Abc_NtkRegisterName(p->pNtkCur, pName) );
+ Vec_PtrPush( vNames, Extra_UtilStrsav(pName) ); // memory leak!!!
// create a new box and add it to the network
pBox = Abc_NtkCreateBox( p->pNtkCur );
diff --git a/src/base/io/ioReadEdif.c b/src/base/io/ioReadEdif.c
index 3bdf2567..7c447523 100644
--- a/src/base/io/ioReadEdif.c
+++ b/src/base/io/ioReadEdif.c
@@ -121,7 +121,8 @@ Abc_Ntk_t * Io_ReadEdifNetwork( Extra_FileReader_t * p )
else
{
pObj = Abc_NtkCreateNode( pNtk );
- pObj->pData = Abc_NtkRegisterName( pNtk, pGateName );
+// pObj->pData = Abc_NtkRegisterName( pNtk, pGateName );
+ pObj->pData = Extra_UtilStrsav( pGateName ); // memory leak!!!
}
Abc_ObjAddFanin( pNet, pObj );
}