summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2019-05-29 14:46:25 -0700
committerAlan Mishchenko <alanmi@berkeley.edu>2019-05-29 14:46:25 -0700
commit62487de97bd3fc2f0b72cdb20763e1d542dffe71 (patch)
tree7c33eca22d4ea2739ca5951fed64e5a57a6488b7 /src
parent712f46ca23ebf3e43337f0651d2737557b52f922 (diff)
downloadabc-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.c16
-rw-r--r--src/map/if/ifMap.c2
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 )