diff options
author | Alan Mishchenko <alanmi@berkeley.edu> | 2019-05-29 14:46:25 -0700 |
---|---|---|
committer | Alan Mishchenko <alanmi@berkeley.edu> | 2019-05-29 14:46:25 -0700 |
commit | 62487de97bd3fc2f0b72cdb20763e1d542dffe71 (patch) | |
tree | 7c33eca22d4ea2739ca5951fed64e5a57a6488b7 /src | |
parent | 712f46ca23ebf3e43337f0651d2737557b52f922 (diff) | |
download | abc-62487de97bd3fc2f0b72cdb20763e1d542dffe71.tar.gz abc-62487de97bd3fc2f0b72cdb20763e1d542dffe71.tar.bz2 abc-62487de97bd3fc2f0b72cdb20763e1d542dffe71.zip |
Adding support for user-specified wire delays in &if.
Diffstat (limited to 'src')
-rw-r--r-- | src/base/abci/abc.c | 16 | ||||
-rw-r--r-- | src/map/if/ifMap.c | 2 |
2 files changed, 17 insertions, 1 deletions
diff --git a/src/base/abci/abc.c b/src/base/abci/abc.c index c576bf4a..429b48d9 100644 --- a/src/base/abci/abc.c +++ b/src/base/abci/abc.c @@ -36980,8 +36980,24 @@ int Abc_CommandAbc9If( Abc_Frame_t * pAbc, int argc, char ** argv ) return 1; } + // add wire delay to LUT library delays + if ( pPars->WireDelay > 0 && pPars->pLutLib ) + { + int i, k; + for ( i = 0; i <= pPars->pLutLib->LutMax; i++ ) + for ( k = 0; k <= i; k++ ) + pPars->pLutLib->pLutDelays[i][k] += pPars->WireDelay; + } // perform mapping pNew = Gia_ManPerformMapping( pAbc->pGia, pPars ); + // subtract wire delay from LUT library delays + if ( pPars->WireDelay > 0 && pPars->pLutLib ) + { + int i, k; + for ( i = 0; i <= pPars->pLutLib->LutMax; i++ ) + for ( k = 0; k <= i; k++ ) + pPars->pLutLib->pLutDelays[i][k] -= pPars->WireDelay; + } if ( pNew == NULL ) { Abc_Print( -1, "Abc_CommandAbc9If(): Mapping of GIA has failed.\n" ); diff --git a/src/map/if/ifMap.c b/src/map/if/ifMap.c index 018c7817..b5ae6b11 100644 --- a/src/map/if/ifMap.c +++ b/src/map/if/ifMap.c @@ -217,7 +217,7 @@ void If_ObjPerformMappingAnd( If_Man_t * p, If_Obj_t * pObj, int Mode, int fPrep assert( pCut->Delay != -1 ); // assert( pCut->Delay <= pObj->Required + p->fEpsilon ); if ( pCut->Delay > pObj->Required + 2*p->fEpsilon ) - Abc_Print( 1, "If_ObjPerformMappingAnd(): Warning! Delay of node %d (%f) exceeds the required times (%f).\n", + Abc_Print( 1, "If_ObjPerformMappingAnd(): Warning! Node with ID %d has delay (%f) exceeding the required times (%f).\n", pObj->Id, pCut->Delay, pObj->Required + p->fEpsilon ); pCut->Area = (Mode == 2)? If_CutAreaDerefed( p, pCut ) : If_CutAreaFlow( p, pCut ); if ( p->pPars->fEdge ) |