diff options
Diffstat (limited to 'src/map')
-rw-r--r-- | src/map/amap/amapParse.c | 6 | ||||
-rw-r--r-- | src/map/amap/amapRead.c | 3 | ||||
-rw-r--r-- | src/map/mapper/mapperTime.c | 3 | ||||
-rw-r--r-- | src/map/mio/mioUtils.c | 36 |
4 files changed, 34 insertions, 14 deletions
diff --git a/src/map/amap/amapParse.c b/src/map/amap/amapParse.c index f02cd6cc..61377d14 100644 --- a/src/map/amap/amapParse.c +++ b/src/map/amap/amapParse.c @@ -103,7 +103,7 @@ Hop_Obj_t * Amap_ParseFormulaOper( Hop_Man_t * pMan, Vec_Ptr_t * pStackFn, int O SeeAlso [] ***********************************************************************/ -Hop_Obj_t * Amap_ParseFormula( FILE * pOutput, char * pFormInit, Vec_Ptr_t * vVarNames, Hop_Man_t * pMan ) +Hop_Obj_t * Amap_ParseFormula( FILE * pOutput, char * pFormInit, Vec_Ptr_t * vVarNames, Hop_Man_t * pMan, char * pGateName ) { char * pFormula; Vec_Ptr_t * pStackFn; @@ -278,7 +278,7 @@ Hop_Obj_t * Amap_ParseFormula( FILE * pOutput, char * pFormInit, Vec_Ptr_t * vVa } if ( !fFound ) { - fprintf( pOutput, "Amap_ParseFormula(): The parser cannot find var \"%s\" in the input var list.\n", pTemp ); + fprintf( pOutput, "Amap_ParseFormula(): The parser cannot find var \"%s\" in the input var list of gate \"%s\".\n", pTemp, pGateName ); Flag = AMAP_EQN_FLAG_ERROR; break; } @@ -428,7 +428,7 @@ int Amap_LibParseEquations( Amap_Lib_t * p, int fVerbose ) Vec_PtrClear( vNames ); Amap_GateForEachPin( pGate, pPin ) Vec_PtrPush( vNames, pPin->pName ); - pObj = Amap_ParseFormula( stdout, pGate->pForm, vNames, pMan ); + pObj = Amap_ParseFormula( stdout, pGate->pForm, vNames, pMan, pGate->pName ); if ( pObj == NULL ) break; pTruth = Hop_ManConvertAigToTruth( pMan, pObj, pGate->nPins, vTruth, 0 ); diff --git a/src/map/amap/amapRead.c b/src/map/amap/amapRead.c index 183989c1..3ccfc011 100644 --- a/src/map/amap/amapRead.c +++ b/src/map/amap/amapRead.c @@ -36,6 +36,7 @@ ABC_NAMESPACE_IMPL_START // these symbols (and no other) can appear in the formulas #define AMAP_SYMB_AND '*' +#define AMAP_SYMB_AND2 '&' #define AMAP_SYMB_OR1 '+' #define AMAP_SYMB_OR2 '|' #define AMAP_SYMB_XOR '^' @@ -236,7 +237,7 @@ int Amap_GateCollectNames( Aig_MmFlex_t * pMem, char * pForm, char * pPinNames[] for ( pTemp = Buffer; *pTemp; pTemp++ ) if ( *pTemp == AMAP_SYMB_AND || *pTemp == AMAP_SYMB_OR1 || *pTemp == AMAP_SYMB_OR2 || *pTemp == AMAP_SYMB_XOR || *pTemp == AMAP_SYMB_NOT || *pTemp == AMAP_SYMB_OPEN - || *pTemp == AMAP_SYMB_CLOSE || *pTemp == AMAP_SYMB_AFTNOT ) + || *pTemp == AMAP_SYMB_CLOSE || *pTemp == AMAP_SYMB_AFTNOT || *pTemp == AMAP_SYMB_AND2 ) *pTemp = ' '; // save the names nPins = 0; diff --git a/src/map/mapper/mapperTime.c b/src/map/mapper/mapperTime.c index 414d366a..fb734713 100644 --- a/src/map/mapper/mapperTime.c +++ b/src/map/mapper/mapperTime.c @@ -349,7 +349,7 @@ void Map_TimePropagateRequired( Map_Man_t * p ) if ( pNode->pCutBest[1] && pNode->tRequired[1].Worst < MAP_FLOAT_LARGE ) Map_TimePropagateRequiredPhase( p, pNode, 1 ); } - +/* // in the end, we verify the required times // for this, we compute the arrival times of the outputs of each phase // of the supergates using the fanins' required times as the fanins' arrival times @@ -377,6 +377,7 @@ void Map_TimePropagateRequired( Map_Man_t * p ) // assert( ptReqOutTest->Fall < pNode->tRequired[1].Fall + p->fEpsilon ); } } +*/ } void Map_TimeComputeRequiredGlobal( Map_Man_t * p ) { diff --git a/src/map/mio/mioUtils.c b/src/map/mio/mioUtils.c index 5e3b8e4c..c6c1750d 100644 --- a/src/map/mio/mioUtils.c +++ b/src/map/mio/mioUtils.c @@ -280,22 +280,40 @@ void Mio_WriteLibrary( FILE * pFile, Mio_Library_t * pLib, int fPrintSops ) ***********************************************************************/ int Mio_DelayCompare( Mio_Gate_t ** ppG1, Mio_Gate_t ** ppG2 ) { - if ( (*ppG1)->dDelayMax < (*ppG2)->dDelayMax ) + int Comp; + float Eps = (float)0.0094636; + if ( (*ppG1)->dDelayMax < (*ppG2)->dDelayMax - Eps ) return -1; - if ( (*ppG1)->dDelayMax > (*ppG2)->dDelayMax ) + if ( (*ppG1)->dDelayMax > (*ppG2)->dDelayMax + Eps ) return 1; + // compare names + Comp = strcmp( (*ppG1)->pName, (*ppG2)->pName ); + if ( Comp < 0 ) + return -1; + if ( Comp > 0 ) + return 1; + assert( 0 ); return 0; } int Mio_AreaCompare( Mio_Cell_t * pG1, Mio_Cell_t * pG2 ) { - if ( (pG1)->nFanins < (pG2)->nFanins ) + int Comp; + float Eps = (float)0.0094636; + if ( pG1->nFanins < pG2->nFanins ) return -1; - if ( (pG1)->nFanins > (pG2)->nFanins ) + if ( pG1->nFanins > pG2->nFanins ) return 1; - if ( (pG1)->Area < (pG2)->Area ) + if ( pG1->Area < pG2->Area - Eps ) return -1; - if ( (pG1)->Area > (pG2)->Area ) + if ( pG1->Area > pG2->Area + Eps ) return 1; + // compare names + Comp = strcmp( pG1->pName, pG2->pName ); + if ( Comp < 0 ) + return -1; + if ( Comp > 0 ) + return 1; + assert( 0 ); return 0; } @@ -333,7 +351,7 @@ static inline float Mio_GateDelayAve( Mio_Gate_t * pGate ) static inline int Mio_CompareTwoGates( Mio_Gate_t * pCell, Mio_Gate_t * pGate ) { int Comp; - float Eps = (float)0.01; + float Eps = (float)0.0094636; float CellDelay, GateDelay; // compare areas if ( pCell->dArea > (float)pGate->dArea + Eps ) @@ -424,7 +442,7 @@ Mio_Gate_t ** Mio_CollectRoots( Mio_Library_t * pLib, int nInputs, float tDelay, static inline int Mio_CompareTwo( Mio_Cell_t * pCell, Mio_Gate_t * pGate ) { int Comp; - float Eps = (float)0.01; + float Eps = (float)0.0094636; float CellDelay, GateDelay; // compare areas if ( pCell->Area > (float)pGate->dArea + Eps ) @@ -541,7 +559,7 @@ Mio_Cell_t * Mio_CollectRootsNew( Mio_Library_t * pLib, int nInputs, int * pnGat if ( pCell->pName == NULL ) printf( "None\n" ); else - printf( "%-20s In = %d N = %3d A = %7.2f D = %7.2f\n", + printf( "%-20s In = %d N = %3d A = %12.6f D = %12.6f\n", pCell->pName, pCell->nFanins, pCounts[i], pCell->Area, Mio_CellDelayAve(pCell) ); } ABC_FREE( pCounts ); |