Adding function printout to &put.

This commit is contained in:
Alan Mishchenko 2026-07-01 13:44:00 -07:00
parent b4ca3e7f52
commit a01df4b82c
2 changed files with 87 additions and 5 deletions

View File

@ -35235,6 +35235,7 @@ int Abc_CommandAbc9Put( Abc_Frame_t * pAbc, int argc, char ** argv )
extern Abc_Ntk_t * Abc_NtkFromCellMappedGia( Gia_Man_t * p, int fUseBuffs );
extern Abc_Ntk_t * Abc_NtkFromMappedGia( Gia_Man_t * p, int fFindEnables, int fUseBuffs );
extern Abc_Ntk_t * Abc_NtkFromMappedGiaAnd5( Gia_Man_t * p, int fFindEnables, int fUseBuffs );
extern Abc_Ntk_t * Abc_NtkFromMappedGia2( Gia_Man_t * p, int fFindEnables, int fUseBuffs, int fCheckAnd5, int fVerbose );
Aig_Man_t * pMan;
Abc_Ntk_t * pNtk = Abc_FrameReadNtk(pAbc);
@ -35280,7 +35281,7 @@ int Abc_CommandAbc9Put( Abc_Frame_t * pAbc, int argc, char ** argv )
else if ( Gia_ManHasCellMapping(pAbc->pGia) )
pNtk = Abc_NtkFromCellMappedGia( pAbc->pGia, fUseBuffs );
else if ( Gia_ManHasMapping(pAbc->pGia) || pAbc->pGia->pMuxes )
pNtk = fCheckAnd5 ? Abc_NtkFromMappedGiaAnd5( pAbc->pGia, 0, fUseBuffs ) : Abc_NtkFromMappedGia( pAbc->pGia, 0, fUseBuffs );
pNtk = Abc_NtkFromMappedGia2( pAbc->pGia, 0, fUseBuffs, fCheckAnd5, fVerbose );
else if ( Gia_ManHasDangling(pAbc->pGia) == 0 )
{
pMan = Gia_ManToAig( pAbc->pGia, 0 );

View File

@ -792,6 +792,82 @@ static int Abc_Tt5AndDecPolarity( word Truth )
return 1;
return -1;
}
static word Abc_Tt5CofactorTo4( word Truth, int iVar, int fCompl )
{
word Result = 0;
int a, k;
for ( a = 0; a < 16; a++ )
{
int iMint = fCompl ? 0 : (1 << iVar);
for ( k = 0; k < 4; k++ )
if ( (a >> k) & 1 )
iMint |= 1 << (k < iVar ? k : k + 1);
if ( (Truth >> iMint) & 1 )
Result |= ((word)1) << a;
}
return Result;
}
static int Abc_Tt5FindAndDec( word Truth, int * piVar, int * pfCompl, word * pTruth4 )
{
int v;
for ( v = 0; v < 5; v++ )
{
if ( Abc_Tt6Cofactor0(Truth, v) == 0 )
{
*piVar = v;
*pfCompl = 0;
*pTruth4 = Abc_Tt5CofactorTo4( Truth, v, 0 );
return 1;
}
if ( Abc_Tt6Cofactor1(Truth, v) == 0 )
{
*piVar = v;
*pfCompl = 1;
*pTruth4 = Abc_Tt5CofactorTo4( Truth, v, 1 );
return 1;
}
}
return 0;
}
static void Abc_NtkFromMappedGiaPrint5Decs( Abc_Ntk_t * pNtk )
{
Hop_Man_t * pHopMan;
Abc_Obj_t * pObj;
Vec_Int_t * vTruth;
int i, nNodes5 = 0, nNodesOver5 = 0;
assert( Abc_NtkIsLogic(pNtk) && Abc_NtkHasAig(pNtk) );
Abc_NtkForEachNode( pNtk, pObj, i )
{
nNodes5 += Abc_ObjFaninNum(pObj) == 5;
nNodesOver5 += Abc_ObjFaninNum(pObj) > 5;
}
if ( nNodes5 == 0 || nNodesOver5 > 0 )
return;
pHopMan = (Hop_Man_t *)pNtk->pManFunc;
vTruth = Vec_IntAlloc( 64 );
Abc_Print( 1, "Top-level AND decompositions of 5-input nodes:\n" );
Abc_NtkForEachNode( pNtk, pObj, i )
{
word Truth, Truth4;
int iVar, fCompl;
if ( Abc_ObjFaninNum(pObj) != 5 )
continue;
Truth = (word)*Hop_ManConvertAigToTruth( pHopMan, (Hop_Obj_t *)pObj->pData, 5, vTruth, 0 );
if ( !Abc_Tt5FindAndDec( Truth, &iVar, &fCompl, &Truth4 ) )
{
Abc_Print( 1, "%05d : ", Abc_ObjId(pObj) );
Abc_TtPrintHexRev( stdout, &Truth, 5 );
Abc_Print( 1, " = <none>\n" );
continue;
}
Abc_Print( 1, "%05d : ", Abc_ObjId(pObj) );
Abc_TtPrintHexRev( stdout, &Truth, 5 );
Abc_Print( 1, " = %cx%d & ", fCompl ? '~' : ' ', iVar );
Abc_TtPrintHexRev( stdout, &Truth4, 4 );
Abc_Print( 1, "\n" );
}
Vec_IntFree( vTruth );
}
/**Function*************************************************************
@ -826,9 +902,8 @@ Abc_Obj_t * Abc_NtkFromMappedGia_rec( Abc_Ntk_t * pNtkNew, Gia_Man_t * p, int iO
pObjNew = Abc_NtkCreateNodeInv(pNtkNew, pObjNew);
return pObjNew;
}
Abc_Ntk_t * Abc_NtkFromMappedGiaInt( Gia_Man_t * p, int fFindEnables, int fUseBuffs, int fCheckAnd5 )
Abc_Ntk_t * Abc_NtkFromMappedGiaInt( Gia_Man_t * p, int fFindEnables, int fUseBuffs, int fCheckAnd5, int fVerbose )
{
int fVerbose = 0;
int fDuplicate = 0;
Abc_Ntk_t * pNtkNew;
Abc_Obj_t * pObjNew, * pObjNewLi, * pObjNewLo, * pConst0 = NULL;
@ -1023,16 +1098,22 @@ Abc_Ntk_t * Abc_NtkFromMappedGiaInt( Gia_Man_t * p, int fFindEnables, int fUseBu
// check the resulting AIG
if ( !Abc_NtkCheck( pNtkNew ) )
Abc_Print( 1, "Abc_NtkFromMappedGia(): Network check has failed.\n" );
if ( fVerbose && Gia_ManHasMapping(p) )
Abc_NtkFromMappedGiaPrint5Decs( pNtkNew );
Vec_BitFreeP( &vCompls );
return pNtkNew;
}
Abc_Ntk_t * Abc_NtkFromMappedGia2( Gia_Man_t * p, int fFindEnables, int fUseBuffs, int fCheckAnd5, int fVerbose )
{
return Abc_NtkFromMappedGiaInt( p, fFindEnables, fUseBuffs, fCheckAnd5, fVerbose );
}
Abc_Ntk_t * Abc_NtkFromMappedGia( Gia_Man_t * p, int fFindEnables, int fUseBuffs )
{
return Abc_NtkFromMappedGiaInt( p, fFindEnables, fUseBuffs, 0 );
return Abc_NtkFromMappedGiaInt( p, fFindEnables, fUseBuffs, 0, 0 );
}
Abc_Ntk_t * Abc_NtkFromMappedGiaAnd5( Gia_Man_t * p, int fFindEnables, int fUseBuffs )
{
return Abc_NtkFromMappedGiaInt( p, fFindEnables, fUseBuffs, 1 );
return Abc_NtkFromMappedGiaInt( p, fFindEnables, fUseBuffs, 1, 0 );
}
/**Function*************************************************************