mirror of https://github.com/YosysHQ/abc.git
Improvements to the timing manager.
This commit is contained in:
parent
5c30eb10ef
commit
70a3474849
|
|
@ -1671,6 +1671,7 @@ Gia_Man_t * Gia_ManPerformMappingInt( Gia_Man_t * p, If_Par_t * pPars )
|
|||
}
|
||||
if ( p->pManTime )
|
||||
pIfMan->pManTim = Tim_ManDup( (Tim_Man_t *)p->pManTime, pPars->fDelayOpt || pPars->fDelayOptLut || pPars->fDsdBalance || pPars->fUserRecLib );
|
||||
// Tim_ManPrint( pIfMan->pManTim );
|
||||
if ( !If_ManPerformMapping( pIfMan ) )
|
||||
{
|
||||
If_ManStop( pIfMan );
|
||||
|
|
@ -1694,8 +1695,6 @@ Gia_Man_t * Gia_ManPerformMapping( Gia_Man_t * p, void * pp )
|
|||
Gia_Man_t * pNew;
|
||||
if ( p->pManTime && Tim_ManBoxNum(p->pManTime) && Gia_ManIsNormalized(p) )
|
||||
{
|
||||
Tim_Man_t * pTimOld = (Tim_Man_t *)p->pManTime;
|
||||
p->pManTime = Tim_ManDup( pTimOld, 1 );
|
||||
pNew = Gia_ManDupUnnormalize( p );
|
||||
if ( pNew == NULL )
|
||||
return NULL;
|
||||
|
|
@ -1714,9 +1713,6 @@ Gia_Man_t * Gia_ManPerformMapping( Gia_Man_t * p, void * pp )
|
|||
Gia_ManTransferPacking( pNew, p );
|
||||
Gia_ManTransferTiming( pNew, p );
|
||||
Gia_ManStop( p );
|
||||
// cleanup
|
||||
Tim_ManStop( (Tim_Man_t *)pNew->pManTime );
|
||||
pNew->pManTime = pTimOld;
|
||||
assert( Gia_ManIsNormalized(pNew) );
|
||||
}
|
||||
else
|
||||
|
|
|
|||
|
|
@ -427,6 +427,8 @@ void Gia_ManPrintStats( Gia_Man_t * p, Gps_Par_t * pPars )
|
|||
Abc_Print( 1, " mem =%5.2f MB", Gia_ManMemory(p)/(1<<20) );
|
||||
if ( Gia_ManHasChoices(p) )
|
||||
Abc_Print( 1, " ch =%5d", Gia_ManChoiceNum(p) );
|
||||
if ( p->pManTime )
|
||||
Abc_Print( 1, " box =%d", Tim_ManBoxNum((Tim_Man_t *)p->pManTime) );
|
||||
if ( pPars && pPars->fMuxXor )
|
||||
printf( "\nXOR/MUX " ), Gia_ManPrintMuxStats( p );
|
||||
if ( pPars && pPars->fSwitch )
|
||||
|
|
@ -456,8 +458,8 @@ void Gia_ManPrintStats( Gia_Man_t * p, Gps_Par_t * pPars )
|
|||
Gia_ManPrintLutStats( p );
|
||||
if ( p->pPlacement )
|
||||
Gia_ManPrintPlacement( p );
|
||||
if ( p->pManTime )
|
||||
Tim_ManPrintStats( (Tim_Man_t *)p->pManTime, p->nAnd2Delay );
|
||||
// if ( p->pManTime )
|
||||
// Tim_ManPrintStats( (Tim_Man_t *)p->pManTime, p->nAnd2Delay );
|
||||
// print register classes
|
||||
Gia_ManPrintFlopClasses( p );
|
||||
Gia_ManPrintGateClasses( p );
|
||||
|
|
|
|||
|
|
@ -323,7 +323,7 @@ If_LibBox_t * If_LibBoxRead( char * pFileName )
|
|||
for ( i = 0; i < nPis * nPos; i++ )
|
||||
{
|
||||
pToken = If_LibBoxGetToken( pFile );
|
||||
pBox->pDelays[i] = (pToken[0] == '-') ? -1 : atoi(pToken);
|
||||
pBox->pDelays[i] = (pToken[0] == '-') ? -ABC_INFINITY : atoi(pToken);
|
||||
}
|
||||
// extract next name
|
||||
pToken = If_LibBoxGetToken( pFile );
|
||||
|
|
@ -342,7 +342,7 @@ void If_LibBoxPrint( FILE * pFile, If_LibBox_t * p )
|
|||
fprintf( pFile, "%s %d %d %d %d\n", pBox->pName, pBox->Id, !pBox->fBlack, pBox->nPis, pBox->nPos );
|
||||
for ( j = 0; j < pBox->nPos; j++, printf("\n") )
|
||||
for ( k = 0; k < pBox->nPis; k++ )
|
||||
if ( pBox->pDelays[j * pBox->nPis + k] == -1 )
|
||||
if ( pBox->pDelays[j * pBox->nPis + k] == -ABC_INFINITY )
|
||||
fprintf( pFile, " - " );
|
||||
else
|
||||
fprintf( pFile, "%5d ", pBox->pDelays[j * pBox->nPis + k] );
|
||||
|
|
|
|||
|
|
@ -128,7 +128,10 @@ Tim_Man_t * Tim_ManDup( Tim_Man_t * p, int fUnitDelay )
|
|||
pDelayTableNew[1] = (int)pDelayTable[1];
|
||||
pDelayTableNew[2] = (int)pDelayTable[2];
|
||||
for ( k = 0; k < nInputs * nOutputs; k++ )
|
||||
pDelayTableNew[3+k] = fUnitDelay ? (float)fUnitDelay : pDelayTable[3+k];
|
||||
if ( pDelayTable[3+k] == -ABC_INFINITY )
|
||||
pDelayTableNew[3+k] = -ABC_INFINITY;
|
||||
else
|
||||
pDelayTableNew[3+k] = fUnitDelay ? (float)fUnitDelay : pDelayTable[3+k];
|
||||
// assert( (int)pDelayTableNew[0] == Vec_PtrSize(pNew->vDelayTables) );
|
||||
assert( Vec_PtrEntry(pNew->vDelayTables, i) == NULL );
|
||||
Vec_PtrWriteEntry( pNew->vDelayTables, i, pDelayTableNew );
|
||||
|
|
|
|||
|
|
@ -200,7 +200,8 @@ float Tim_ManGetCiArrival( Tim_Man_t * p, int iCi )
|
|||
pDelays = pTable + 3 + i * pBox->nInputs;
|
||||
DelayBest = -TIM_ETERNITY;
|
||||
Tim_ManBoxForEachInput( p, pBox, pObj, k )
|
||||
DelayBest = Abc_MaxInt( DelayBest, pObj->timeArr + pDelays[k] );
|
||||
if ( pDelays[k] != -ABC_INFINITY )
|
||||
DelayBest = Abc_MaxInt( DelayBest, pObj->timeArr + pDelays[k] );
|
||||
pObjRes->timeArr = DelayBest;
|
||||
pObjRes->TravId = p->nTravIds;
|
||||
}
|
||||
|
|
@ -248,7 +249,8 @@ float Tim_ManGetCoRequired( Tim_Man_t * p, int iCo )
|
|||
Tim_ManBoxForEachOutput( p, pBox, pObj, k )
|
||||
{
|
||||
pDelays = pTable + 3 + k * pBox->nInputs;
|
||||
DelayBest = Abc_MinFloat( DelayBest, pObj->timeReq - pDelays[i] );
|
||||
if ( pDelays[k] != -ABC_INFINITY )
|
||||
DelayBest = Abc_MinFloat( DelayBest, pObj->timeReq - pDelays[i] );
|
||||
}
|
||||
pObjRes->timeReq = DelayBest;
|
||||
pObjRes->TravId = p->nTravIds;
|
||||
|
|
|
|||
Loading…
Reference in New Issue