summaryrefslogtreecommitdiffstats
path: root/src/aig/nwk
diff options
context:
space:
mode:
Diffstat (limited to 'src/aig/nwk')
-rw-r--r--src/aig/nwk/nwkBidec.c5
-rw-r--r--src/aig/nwk/nwkMap.c2
-rw-r--r--src/aig/nwk/nwkStrash.c10
-rw-r--r--src/aig/nwk/nwkTiming.c51
4 files changed, 33 insertions, 35 deletions
diff --git a/src/aig/nwk/nwkBidec.c b/src/aig/nwk/nwkBidec.c
index 5d0b454e..e30d2c02 100644
--- a/src/aig/nwk/nwkBidec.c
+++ b/src/aig/nwk/nwkBidec.c
@@ -88,6 +88,11 @@ void Nwk_ManBidecResyn( Nwk_Man_t * pNtk, int fVerbose )
int clk = clock();
pPars->nVarsMax = Nwk_ManGetFaninMax( pNtk );
pPars->fVerbose = fVerbose;
+ if ( pPars->nVarsMax < 2 )
+ {
+ printf( "Resynthesis is not performed for networks whose nodes are less than 2 inputs.\n" );
+ return;
+ }
if ( pPars->nVarsMax > 15 )
{
if ( fVerbose )
diff --git a/src/aig/nwk/nwkMap.c b/src/aig/nwk/nwkMap.c
index 44aecc03..ee7f56ad 100644
--- a/src/aig/nwk/nwkMap.c
+++ b/src/aig/nwk/nwkMap.c
@@ -52,7 +52,7 @@ void Nwk_ManSetIfParsDefault( If_Par_t * pPars )
pPars->nFlowIters = 1;
pPars->nAreaIters = 2;
pPars->DelayTarget = -1;
- pPars->Epsilon = (float)0.01;
+ pPars->Epsilon = (float)0.001;
pPars->fPreprocess = 1;
pPars->fArea = 0;
pPars->fFancy = 0;
diff --git a/src/aig/nwk/nwkStrash.c b/src/aig/nwk/nwkStrash.c
index 3bcfcd41..b5e2b387 100644
--- a/src/aig/nwk/nwkStrash.c
+++ b/src/aig/nwk/nwkStrash.c
@@ -95,7 +95,8 @@ Aig_Obj_t * Nwk_ManStrashNode( Aig_Man_t * p, Nwk_Obj_t * pObj )
***********************************************************************/
Aig_Man_t * Nwk_ManStrash( Nwk_Man_t * pNtk )
{
- Aig_Man_t * pMan;//, * pTemp;
+ Vec_Ptr_t * vObjs;
+ Aig_Man_t * pMan;
Aig_Obj_t * pObjNew;
Nwk_Obj_t * pObj;
int i, Level;
@@ -105,6 +106,10 @@ Aig_Man_t * Nwk_ManStrash( Nwk_Man_t * pNtk )
pMan->pManTime = Tim_ManDup( pNtk->pManTime, 1 );
Tim_ManIncrementTravId( pMan->pManTime );
Nwk_ManForEachObj( pNtk, pObj, i )
+ pObj->pCopy = NULL;
+// Nwk_ManForEachObj( pNtk, pObj, i )
+ vObjs = Nwk_ManDfs( pNtk );
+ Vec_PtrForEachEntry( vObjs, pObj, i )
{
if ( Nwk_ObjIsCi(pObj) )
{
@@ -126,9 +131,8 @@ Aig_Man_t * Nwk_ManStrash( Nwk_Man_t * pNtk )
assert( 0 );
pObj->pCopy = pObjNew;
}
+ Vec_PtrFree( vObjs );
Aig_ManCleanup( pMan );
-// pMan = Aig_ManDupOrdered( pTemp = pMan );
-// Aig_ManStop( pTemp );
return pMan;
}
diff --git a/src/aig/nwk/nwkTiming.c b/src/aig/nwk/nwkTiming.c
index 5e4967da..9bf1d6a1 100644
--- a/src/aig/nwk/nwkTiming.c
+++ b/src/aig/nwk/nwkTiming.c
@@ -17,7 +17,7 @@
Revision [$Id: nwkTiming.c,v 1.00 2005/06/20 00:00:00 alanmi Exp $]
***********************************************************************/
-
+
#include "nwk.h"
////////////////////////////////////////////////////////////////////////
@@ -46,7 +46,7 @@ void Nwk_ManCleanTiming( Nwk_Man_t * pNtk )
Nwk_ManForEachObj( pNtk, pObj, i )
{
pObj->tArrival = pObj->tSlack = 0.0;
- pObj->tRequired = AIG_INFINITY;
+ pObj->tRequired = TIME_ETERNITY;
}
}
@@ -138,7 +138,7 @@ float Nwk_NodeComputeArrival( Nwk_Obj_t * pObj, int fUseSorting )
return Nwk_ObjArrival(pObj);
if ( Nwk_ObjIsCo(pObj) )
return Nwk_ObjArrival( Nwk_ObjFanin0(pObj) );
- tArrival = -AIG_INFINITY;
+ tArrival = -TIME_ETERNITY;
if ( pLutLib == NULL )
{
Nwk_ObjForEachFanin( pObj, pFanin, k )
@@ -196,7 +196,7 @@ float Nwk_NodeComputeRequired( Nwk_Obj_t * pObj, int fUseSorting )
assert( Nwk_ObjIsNode(pObj) || Nwk_ObjIsCi(pObj) || Nwk_ObjIsCo(pObj) );
if ( Nwk_ObjIsCo(pObj) )
return Nwk_ObjRequired(pObj);
- tRequired = AIG_INFINITY;
+ tRequired = TIME_ETERNITY;
if ( pLutLib == NULL )
{
Nwk_ObjForEachFanout( pObj, pFanout, k )
@@ -333,7 +333,7 @@ float Nwk_ManDelayTraceLut( Nwk_Man_t * pNtk )
{
printf( "The max LUT size (%d) is less than the max fanin count (%d).\n",
pLutLib->LutMax, Nwk_ManGetFaninMax(pNtk) );
- return -AIG_INFINITY;
+ return -TIME_ETERNITY;
}
// compute the reverse order of all objects
@@ -356,7 +356,7 @@ float Nwk_ManDelayTraceLut( Nwk_Man_t * pNtk )
}
// get the latest arrival times
- tArrival = -AIG_INFINITY;
+ tArrival = -TIME_ETERNITY;
Nwk_ManForEachPo( pNtk, pObj, i )
if ( tArrival < Nwk_ObjArrival(pObj) )
tArrival = Nwk_ObjArrival(pObj);
@@ -388,11 +388,12 @@ float Nwk_ManDelayTraceLut( Nwk_Man_t * pNtk )
else if ( Nwk_ObjIsCo(pObj) )
{
if ( pNtk->pManTime )
+ {
tRequired = Tim_ManGetPoRequired( pNtk->pManTime, pObj->PioId );
- else
- tRequired = Nwk_ObjRequired(pObj);
- if ( Nwk_ObjRequired(Nwk_ObjFanin0(pObj)) > tRequired )
- Nwk_ObjSetRequired( Nwk_ObjFanin0(pObj), tRequired );
+ Nwk_ObjSetRequired( pObj, tRequired );
+ }
+ if ( Nwk_ObjRequired(Nwk_ObjFanin0(pObj)) > Nwk_ObjRequired(pObj) )
+ Nwk_ObjSetRequired( Nwk_ObjFanin0(pObj), Nwk_ObjRequired(pObj) );
}
// set slack for this object
@@ -424,14 +425,12 @@ int Nwk_ManVerifyTiming( Nwk_Man_t * pNtk )
{
tArrival = Nwk_NodeComputeArrival( pObj, 1 );
tRequired = Nwk_NodeComputeRequired( pObj, 1 );
- if ( Nwk_ObjIsCi(pObj) && pNtk->pManTime )
- tArrival = Tim_ManGetPiArrival( pNtk->pManTime, pObj->PioId );
- if ( Nwk_ObjIsCo(pObj) && pNtk->pManTime )
- tArrival = Tim_ManGetPoRequired( pNtk->pManTime, pObj->PioId );
if ( !Nwk_ManTimeEqual( tArrival, Nwk_ObjArrival(pObj), (float)0.01 ) )
- printf( "Nwk_ManVerifyTiming(): Arrival time of object %d is incorrect.\n", pObj->Id );
+ printf( "Nwk_ManVerifyTiming(): Object %d has different arrival time (%.2f) from computed (%.2f).\n",
+ pObj->Id, Nwk_ObjArrival(pObj), tArrival );
if ( !Nwk_ManTimeEqual( tRequired, Nwk_ObjRequired(pObj), (float)0.01 ) )
- printf( "Nwk_ManVerifyTiming(): Required time of object %d is incorrect.\n", pObj->Id );
+ printf( "Nwk_ManVerifyTiming(): Object %d has different required time (%.2f) from computed (%.2f).\n",
+ pObj->Id, Nwk_ObjRequired(pObj), tRequired );
}
return 1;
}
@@ -586,9 +585,9 @@ void Nwk_NodeUpdateArrival( Nwk_Obj_t * pObj )
{
Tim_ManSetPoArrival( pManTime, pTemp->PioId, tArrival );
iBox = Tim_ManBoxForCo( pManTime, pNext->PioId );
- Tim_ManSetCurrentTravIdBoxInputs( pManTime, iBox );
if ( iBox >= 0 ) // this is not a true PO
{
+ Tim_ManSetCurrentTravIdBoxInputs( pManTime, iBox );
iTerm1 = Tim_ManBoxOutputFirst( pManTime, iBox );
nTerms = Tim_ManBoxOutputNum( pManTime, iBox );
for ( i = 0; i < nTerms; i++ )
@@ -635,14 +634,6 @@ void Nwk_NodeUpdateRequired( Nwk_Obj_t * pObj )
float tRequired;
int i, k, iBox, iTerm1, nTerms;
assert( Nwk_ObjIsNode(pObj) );
-
-if ( pObj->Id == 1384 )
-{
- int x = 0;
-// Nwk_ObjPrint( Nwk_ManObj(pObj->pMan, 1384) );
-// Nwk_ObjPrint( Nwk_ManObj(pObj->pMan, 422) );
-}
-
// make sure the node's required time remained the same
tRequired = Nwk_NodeComputeRequired( pObj, 1 );
assert( Nwk_ManTimeEqual( tRequired, Nwk_ObjRequired(pObj), (float)0.01 ) );
@@ -667,16 +658,16 @@ if ( pObj->Id == 1384 )
if ( Nwk_ManTimeEqual( tRequired, Nwk_ObjRequired(pTemp), (float)0.01 ) )
continue;
Nwk_ObjSetRequired( pTemp, tRequired );
- // add the fanouts to the queue
+ // add the fanins to the queue
if ( Nwk_ObjIsCi(pTemp) )
{
if ( pManTime )
{
Tim_ManSetPiRequired( pManTime, pTemp->PioId, tRequired );
iBox = Tim_ManBoxForCi( pManTime, pNext->PioId );
- Tim_ManSetCurrentTravIdBoxOutputs( pManTime, iBox );
if ( iBox >= 0 ) // this is not a true PO
{
+ Tim_ManSetCurrentTravIdBoxOutputs( pManTime, iBox );
iTerm1 = Tim_ManBoxInputFirst( pManTime, iBox );
nTerms = Tim_ManBoxInputNum( pManTime, iBox );
for ( i = 0; i < nTerms; i++ )
@@ -780,9 +771,9 @@ void Nwk_ManUpdateLevel( Nwk_Obj_t * pObj )
if ( pManTime )
{
iBox = Tim_ManBoxForCo( pManTime, pNext->PioId );
- Tim_ManSetCurrentTravIdBoxInputs( pManTime, iBox );
if ( iBox >= 0 ) // this is not a true PO
{
+ Tim_ManSetCurrentTravIdBoxInputs( pManTime, iBox );
iTerm1 = Tim_ManBoxOutputFirst( pManTime, iBox );
nTerms = Tim_ManBoxOutputNum( pManTime, iBox );
for ( i = 0; i < nTerms; i++ )
@@ -850,12 +841,10 @@ int Nwk_ManVerifyLevel( Nwk_Man_t * pNtk )
***********************************************************************/
void Nwk_ManUpdate( Nwk_Obj_t * pObj, Nwk_Obj_t * pObjNew, Vec_Vec_t * vLevels )
{
-// float Temp;
assert( pObj->pMan == pObjNew->pMan );
assert( pObj != pObjNew );
assert( Nwk_ObjFanoutNum(pObj) > 0 );
assert( Nwk_ObjIsNode(pObj) && !Nwk_ObjIsCo(pObjNew) );
-// Temp = Nwk_NodeComputeRequired( pObj, 1 );
// transfer fanouts to the old node
Nwk_ObjTransferFanout( pObj, pObjNew );
// transfer the timing information
@@ -866,7 +855,7 @@ void Nwk_ManUpdate( Nwk_Obj_t * pObj, Nwk_Obj_t * pObjNew, Vec_Vec_t * vLevels )
pObjNew->tArrival = pObj->tArrival;
pObjNew->tRequired = pObj->tRequired;
// update required times of the old fanins
- pObj->tRequired = AIG_INFINITY;
+ pObj->tRequired = TIME_ETERNITY;
Nwk_NodeUpdateRequired( pObj );
// remove the old node
Nwk_ManDeleteNode_rec( pObj );