mirror of
https://github.com/YosysHQ/abc.git
synced 2026-09-07 11:11:19 +02:00
Combined old reparametrization command with the new one.
This commit is contained in:
@@ -123,6 +123,10 @@ extern Vec_Int_t * Gia_GlaConvertToFla( Gia_Man_t * p, Vec_Int_t * vGla );
|
||||
extern int Gia_GlaCountFlops( Gia_Man_t * p, Vec_Int_t * vGla );
|
||||
extern int Gia_GlaCountNodes( Gia_Man_t * p, Vec_Int_t * vGla );
|
||||
|
||||
/*=== absRpm.c =========================================================*/
|
||||
extern Gia_Man_t * Abs_RpmPerform( Gia_Man_t * p, int nCutMax, int fVerbose, int fVeryVerbose );
|
||||
/*=== absRpmOld.c =========================================================*/
|
||||
extern Gia_Man_t * Abs_RpmPerformOld( Gia_Man_t * p, int fVerbose );
|
||||
|
||||
/*=== absOldCex.c ==========================================================*/
|
||||
extern Vec_Int_t * Saig_ManCbaFilterFlops( Aig_Man_t * pAig, Abc_Cex_t * pAbsCex, Vec_Int_t * vFlopClasses, Vec_Int_t * vAbsFfsToAdd, int nFfsToSelect );
|
||||
|
||||
@@ -0,0 +1,201 @@
|
||||
/**CFile****************************************************************
|
||||
|
||||
FileName [absRpmOld.c]
|
||||
|
||||
SystemName [ABC: Logic synthesis and verification system.]
|
||||
|
||||
PackageName [Scalable AIG package.]
|
||||
|
||||
Synopsis [Old min-cut-based reparametrization.]
|
||||
|
||||
Author [Alan Mishchenko]
|
||||
|
||||
Affiliation [UC Berkeley]
|
||||
|
||||
Date [Ver. 1.0. Started - June 20, 2005.]
|
||||
|
||||
Revision [$Id: absRpmOld.c,v 1.00 2005/06/20 00:00:00 alanmi Exp $]
|
||||
|
||||
***********************************************************************/
|
||||
|
||||
#include "abs.h"
|
||||
|
||||
ABC_NAMESPACE_IMPL_START
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
/// DECLARATIONS ///
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
/// FUNCTION DEFINITIONS ///
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/**Function*************************************************************
|
||||
|
||||
Synopsis [Specialized duplication.]
|
||||
|
||||
Description [Replaces registers by PIs/POs and PIs by registers.]
|
||||
|
||||
SideEffects []
|
||||
|
||||
SeeAlso []
|
||||
|
||||
***********************************************************************/
|
||||
Gia_Man_t * Gia_ManDupIn2Ff( Gia_Man_t * p )
|
||||
{
|
||||
Vec_Int_t * vPiOuts;
|
||||
Gia_Man_t * pNew;
|
||||
Gia_Obj_t * pObj;
|
||||
int i;
|
||||
vPiOuts = Vec_IntAlloc( Gia_ManPiNum(p) );
|
||||
pNew = Gia_ManStart( Gia_ManObjNum(p) + 2 * Gia_ManPiNum(p) );
|
||||
pNew->pName = Abc_UtilStrsav( p->pName );
|
||||
pNew->pSpec = Abc_UtilStrsav( p->pSpec );
|
||||
Gia_ManFillValue( p );
|
||||
Gia_ManConst0(p)->Value = 0;
|
||||
Gia_ManForEachPi( p, pObj, i )
|
||||
Vec_IntPush( vPiOuts, Gia_ManAppendCi(pNew) );
|
||||
Gia_ManForEachRo( p, pObj, i )
|
||||
pObj->Value = Gia_ManAppendCi( pNew );
|
||||
Gia_ManForEachPi( p, pObj, i )
|
||||
pObj->Value = Gia_ManAppendCi( pNew );
|
||||
Gia_ManForEachAnd( p, pObj, i )
|
||||
pObj->Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
|
||||
Gia_ManForEachPo( p, pObj, i )
|
||||
pObj->Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
|
||||
Gia_ManForEachRi( p, pObj, i )
|
||||
pObj->Value = Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
|
||||
Gia_ManForEachPi( p, pObj, i )
|
||||
Gia_ManAppendCo( pNew, Vec_IntEntry(vPiOuts, i) );
|
||||
Gia_ManSetRegNum( pNew, Gia_ManPiNum(p) );
|
||||
Vec_IntFree( vPiOuts );
|
||||
return pNew;
|
||||
}
|
||||
|
||||
/**Function*************************************************************
|
||||
|
||||
Synopsis [Reverses the above step.]
|
||||
|
||||
Description []
|
||||
|
||||
SideEffects []
|
||||
|
||||
SeeAlso []
|
||||
|
||||
***********************************************************************/
|
||||
int Gia_ManDupFf2In_rec( Gia_Man_t * pNew, Gia_Obj_t * pObj )
|
||||
{
|
||||
if ( pObj->Value != ~0 )
|
||||
return pObj->Value;
|
||||
assert( Gia_ObjIsAnd(pObj) );
|
||||
Gia_ManDupFf2In_rec( pNew, Gia_ObjFanin0(pObj) );
|
||||
Gia_ManDupFf2In_rec( pNew, Gia_ObjFanin1(pObj) );
|
||||
return pObj->Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
|
||||
}
|
||||
|
||||
/**Function*************************************************************
|
||||
|
||||
Synopsis [Reverses the above step.]
|
||||
|
||||
Description []
|
||||
|
||||
SideEffects []
|
||||
|
||||
SeeAlso []
|
||||
|
||||
***********************************************************************/
|
||||
Gia_Man_t * Gia_ManDupFf2In( Gia_Man_t * p, int nFlopsOld )
|
||||
{
|
||||
Gia_Man_t * pNew;
|
||||
Gia_Obj_t * pObj;
|
||||
int i;
|
||||
pNew = Gia_ManStart( Gia_ManObjNum(p) );
|
||||
pNew->pName = Abc_UtilStrsav( p->pName );
|
||||
pNew->pSpec = Abc_UtilStrsav( p->pSpec );
|
||||
Gia_ManFillValue( p );
|
||||
Gia_ManConst0(p)->Value = 0;
|
||||
Gia_ManForEachRo( p, pObj, i )
|
||||
pObj->Value = Gia_ManAppendCi( pNew );
|
||||
for ( i = Gia_ManPiNum(p) - nFlopsOld; i < Gia_ManPiNum(p); i++ )
|
||||
Gia_ManPi(p, i)->Value = Gia_ManAppendCi( pNew );
|
||||
Gia_ManForEachPo( p, pObj, i )
|
||||
Gia_ManDupFf2In_rec( pNew, Gia_ObjFanin0(pObj) );
|
||||
Gia_ManForEachPo( p, pObj, i )
|
||||
Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
|
||||
Gia_ManSetRegNum( pNew, nFlopsOld );
|
||||
return pNew;
|
||||
}
|
||||
|
||||
/**Function*************************************************************
|
||||
|
||||
Synopsis [Reparameterized to get rid of useless primary inputs.]
|
||||
|
||||
Description []
|
||||
|
||||
SideEffects []
|
||||
|
||||
SeeAlso []
|
||||
|
||||
***********************************************************************/
|
||||
Gia_Man_t * Abs_RpmPerformOld( Gia_Man_t * p, int fVerbose )
|
||||
{
|
||||
// extern Aig_Man_t * Saig_ManRetimeMinArea( Aig_Man_t * p, int nMaxIters, int fForwardOnly, int fBackwardOnly, int fInitial, int fVerbose );
|
||||
Aig_Man_t * pMan, * pTemp;
|
||||
Gia_Man_t * pNew, * pTmp;
|
||||
int nFlopsOld = Gia_ManRegNum(p);
|
||||
if ( fVerbose )
|
||||
{
|
||||
printf( "Original AIG:\n" );
|
||||
Gia_ManPrintStats( p, 0, 0 );
|
||||
}
|
||||
|
||||
// perform input trimming
|
||||
pNew = Gia_ManDupTrimmed( p, 1, 0, 0 );
|
||||
if ( fVerbose )
|
||||
{
|
||||
printf( "After PI trimming:\n" );
|
||||
Gia_ManPrintStats( pNew, 0, 0 );
|
||||
}
|
||||
// transform GIA
|
||||
pNew = Gia_ManDupIn2Ff( pTmp = pNew );
|
||||
Gia_ManStop( pTmp );
|
||||
if ( fVerbose )
|
||||
{
|
||||
printf( "After PI-2-FF transformation:\n" );
|
||||
Gia_ManPrintStats( pNew, 0, 0 );
|
||||
}
|
||||
|
||||
// derive AIG
|
||||
pMan = Gia_ManToAigSimple( pNew );
|
||||
Gia_ManStop( pNew );
|
||||
// perform min-reg retiming
|
||||
pMan = Saig_ManRetimeMinArea( pTemp = pMan, 10, 0, 0, 1, 0 );
|
||||
Aig_ManStop( pTemp );
|
||||
// derive GIA
|
||||
pNew = Gia_ManFromAigSimple( pMan );
|
||||
Aig_ManStop( pMan );
|
||||
if ( fVerbose )
|
||||
{
|
||||
printf( "After min-area retiming:\n" );
|
||||
Gia_ManPrintStats( pNew, 0, 0 );
|
||||
}
|
||||
|
||||
// transform back
|
||||
pNew = Gia_ManDupFf2In( pTmp = pNew, nFlopsOld );
|
||||
Gia_ManStop( pTmp );
|
||||
if ( fVerbose )
|
||||
{
|
||||
printf( "After FF-2-PI tranformation:\n" );
|
||||
Gia_ManPrintStats( pNew, 0, 0 );
|
||||
}
|
||||
return pNew;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
/// END OF FILE ///
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
ABC_NAMESPACE_IMPL_END
|
||||
|
||||
@@ -12,5 +12,6 @@ SRC += src/proof/abs/abs.c \
|
||||
src/proof/abs/absRef.c \
|
||||
src/proof/abs/absRefSelect.c \
|
||||
src/proof/abs/absRpm.c \
|
||||
src/proof/abs/absRpmOld.c \
|
||||
src/proof/abs/absVta.c \
|
||||
src/proof/abs/absUtil.c
|
||||
|
||||
Reference in New Issue
Block a user