diff options
Diffstat (limited to 'src/map')
-rw-r--r-- | src/map/scl/sclSize.h | 1 | ||||
-rw-r--r-- | src/map/scl/sclUpsize.c | 25 | ||||
-rw-r--r-- | src/map/scl/sclUtil.c | 27 |
3 files changed, 52 insertions, 1 deletions
diff --git a/src/map/scl/sclSize.h b/src/map/scl/sclSize.h index 771eb820..78c1f2f2 100644 --- a/src/map/scl/sclSize.h +++ b/src/map/scl/sclSize.h @@ -577,6 +577,7 @@ extern void Abc_SclUpsizePerform( SC_Lib * pLib, Abc_Ntk_t * pNtk, SC_S /*=== sclUtil.c ===============================================================*/ extern void Abc_SclMioGates2SclGates( SC_Lib * pLib, Abc_Ntk_t * p ); extern void Abc_SclSclGates2MioGates( SC_Lib * pLib, Abc_Ntk_t * p ); +extern void Abc_SclTransferGates( Abc_Ntk_t * pOld, Abc_Ntk_t * pNew ); extern void Abc_SclPrintGateSizes( SC_Lib * pLib, Abc_Ntk_t * p ); extern void Abc_SclMinsizePerform( SC_Lib * pLib, Abc_Ntk_t * p, int fUseMax, int fVerbose ); extern int Abc_SclCountMinSize( SC_Lib * pLib, Abc_Ntk_t * p, int fUseMax ); diff --git a/src/map/scl/sclUpsize.c b/src/map/scl/sclUpsize.c index d5d405d3..5c630735 100644 --- a/src/map/scl/sclUpsize.c +++ b/src/map/scl/sclUpsize.c @@ -865,7 +865,7 @@ void Abc_SclUpsizeRemoveDangling( SC_Man * p, Abc_Ntk_t * pNtk ) SeeAlso [] ***********************************************************************/ -void Abc_SclUpsizePerform( SC_Lib * pLib, Abc_Ntk_t * pNtk, SC_SizePars * pPars ) +void Abc_SclUpsizePerformInt( SC_Lib * pLib, Abc_Ntk_t * pNtk, SC_SizePars * pPars ) { SC_Man * p; Vec_Int_t * vPathPos = NULL; // critical POs @@ -1013,6 +1013,29 @@ void Abc_SclUpsizePerform( SC_Lib * pLib, Abc_Ntk_t * pNtk, SC_SizePars * pPars // Abc_NtkCleanMarkAB( pNtk ); } +/**Function************************************************************* + + Synopsis [] + + Description [] + + SideEffects [] + + SeeAlso [] + +***********************************************************************/ +void Abc_SclUpsizePerform( SC_Lib * pLib, Abc_Ntk_t * pNtk, SC_SizePars * pPars ) +{ + Abc_Ntk_t * pNtkNew = pNtk; + if ( pNtk->nBarBufs2 > 0 ) + pNtkNew = Abc_NtkDupDfsNoBarBufs( pNtk ); + Abc_SclUpsizePerformInt( pLib, pNtkNew, pPars ); + if ( pNtk->nBarBufs2 > 0 ) + Abc_SclTransferGates( pNtk, pNtkNew ); + if ( pNtk->nBarBufs2 > 0 ) + Abc_NtkDelete( pNtkNew ); +} + //////////////////////////////////////////////////////////////////////// /// END OF FILE /// //////////////////////////////////////////////////////////////////////// diff --git a/src/map/scl/sclUtil.c b/src/map/scl/sclUtil.c index 4489e3f2..5af1b88b 100644 --- a/src/map/scl/sclUtil.c +++ b/src/map/scl/sclUtil.c @@ -96,6 +96,33 @@ void Abc_SclSclGates2MioGates( SC_Lib * pLib, Abc_Ntk_t * p ) /**Function************************************************************* + Synopsis [Transfer gate sizes from AIG without barbufs.] + + Description [] + + SideEffects [] + + SeeAlso [] + +***********************************************************************/ +void Abc_SclTransferGates( Abc_Ntk_t * pOld, Abc_Ntk_t * pNew ) +{ + Abc_Obj_t * pObj; int i; + assert( pOld->nBarBufs2 > 0 ); + assert( pNew->nBarBufs2 == 0 ); + Abc_NtkForEachNode( pOld, pObj, i ) + { + if ( pObj->pCopy == NULL ) + continue; + if ( Abc_ObjIsBarBuf(pObj) ) + continue; + assert( Abc_ObjNtk(pObj->pCopy) == pNew ); + pObj->pData = pObj->pCopy->pData; + } +} + +/**Function************************************************************* + Synopsis [Reports percentage of gates of each size.] Description [] |