MACRO DEFINITIONS ///.
585{
589 double Delta;
590
591 int i, Iter, nNodes, nNodesPrev;
593 assert( Abc_NtkIsLogic(pNtk) );
594
595
597
598
601 else
603 if ( pPars->nLutSize > 6 )
604 pPars->nLutSize = 6;
605 if ( pPars->nLutSize < 3 )
606 pPars->nLutSize = 3;
607
608 if ( pPars->nVarsShared > pPars->nLutSize - 2 )
609 pPars->nVarsShared = pPars->nLutSize - 2;
610
611 pPars->nVarsMax = pPars->nLutsMax * (pPars->nLutSize - 1) + 1;
612 while ( pPars->nVarsMax > 16 )
613 {
614 pPars->nLutsMax--;
615 pPars->nVarsMax = pPars->nLutsMax * (pPars->nLutSize - 1) + 1;
616
617 }
618 if ( pPars->fVerbose )
619 {
620 printf( "Resynthesis for %d %d-LUTs with %d non-MFFC LUTs, %d crossbars, and %d-input cuts.\n",
621 pPars->nLutsMax, pPars->nLutSize, pPars->nLutsOver, pPars->nVarsShared, pPars->nVarsMax );
622 }
623
624
625
627 {
628 fprintf( stdout, "Converting to BDD has failed.\n" );
629 return 0;
630 }
631 assert( Abc_NtkHasAig(pNtk) );
632
633
636
637
640 p->nNodesTotal = Abc_NtkNodeNum(pNtk);
641 p->vLevels = Vec_VecStart( pNtk->
LevelMax );
642 if (
p->pPars->fSatur )
643 p->vVisited = Vec_VecStart( 0 );
644 if ( pPars->fVerbose )
645 {
647 p->nTotalNodes = Abc_NtkNodeNum(pNtk);
648 }
649
650
651
652
653
654
655
656
657
658
659 nNodesPrev =
p->nNodesTotal;
660 for ( Iter = 1; ; Iter++ )
661 {
662
663 if (
p->pPars->fSatur )
664 Vec_VecExpand(
p->vVisited, Abc_NtkObjNumMax(pNtk) + 1 );
665
666
667 nNodes = Abc_NtkObjNumMax(pNtk);
668 if ( !pPars->fVeryVerbose )
671 {
672
673 if ( pPars->fFirst )
674 {
675 if ( !Abc_ObjIsCo(Abc_ObjFanout0(pObj)) )
676 continue;
677 }
678 if ( i >= nNodes )
679 break;
680 if ( !pPars->fVeryVerbose )
681 Extra_ProgressBarUpdate( pProgress, i, NULL );
682
684 continue;
685
687 if (
p->pPars->fOldAlgo )
689 else
691 }
692 if ( !pPars->fVeryVerbose )
694
695
696 Delta = 100.00 * (nNodesPrev - Abc_NtkNodeNum(pNtk)) /
p->nNodesTotal;
697 if ( Delta < 0.05 )
698 break;
699 nNodesPrev = Abc_NtkNodeNum(pNtk);
700 if ( !
p->pPars->fSatur )
701 break;
702
703 if ( pPars->fFirst )
704 break;
705 }
707
708
709
710
711
712
713
714
715
716
717
718
719
720 if ( pPars->fVerbose )
721 {
722
724 p->nTotalNodes2 = Abc_NtkNodeNum(pNtk);
725 printf( "Node gain = %5d. (%.2f %%) ",
726 p->nTotalNodes-
p->nTotalNodes2, 100.0*(
p->nTotalNodes-
p->nTotalNodes2)/
p->nTotalNodes );
727 printf( "Edge gain = %5d. (%.2f %%) ",
728 p->nTotalNets-
p->nTotalNets2, 100.0*(
p->nTotalNets-
p->nTotalNets2)/
p->nTotalNets );
729 printf(
"Muxes = %4d. Dsds = %4d.",
p->nMuxes,
p->nDsds );
730 printf( "\n" );
731 printf( "Nodes = %5d (%3d) Cuts = %5d (%4d) Changes = %5d Iter = %2d Benefit = %d.\n",
732 p->nNodesTotal,
p->nNodesOver,
p->nCutsTotal,
p->nCutsUseful,
p->nChanges, Iter,
p->nBenefited );
733
734 printf( "Non-DSD:" );
735 for ( i = 3; i <= pPars->nVarsMax; i++ )
737 printf(
" %d=%d", i,
p->nBlocks[i] );
738 printf( "\n" );
739
740 p->timeTotal = Abc_Clock() - clk;
741 p->timeEval =
p->timeEval -
p->timeMap;
742 p->timeOther =
p->timeTotal -
p->timeCuts -
p->timeTruth -
p->timeEval -
p->timeMap;
743 ABC_PRTP(
"Cuts ",
p->timeCuts,
p->timeTotal );
744 ABC_PRTP(
"Truth ",
p->timeTruth,
p->timeTotal );
745 ABC_PRTP(
"CSupps",
p->timeSupps,
p->timeTotal );
746 ABC_PRTP(
"Eval ",
p->timeEval,
p->timeTotal );
747 ABC_PRTP(
" MuxAn",
p->timeEvalMuxAn,
p->timeEval );
748 ABC_PRTP(
" MuxSp",
p->timeEvalMuxSp,
p->timeEval );
749 ABC_PRTP(
" DsdAn",
p->timeEvalDsdAn,
p->timeEval );
750 ABC_PRTP(
" DsdSp",
p->timeEvalDsdSp,
p->timeEval );
751 ABC_PRTP(
" Other",
p->timeEval-
p->timeEvalMuxAn-
p->timeEvalMuxSp-
p->timeEvalDsdAn-
p->timeEvalDsdSp,
p->timeEval );
753 ABC_PRTP(
"Other ",
p->timeOther,
p->timeTotal );
754 ABC_PRTP(
"TOTAL ",
p->timeTotal,
p->timeTotal );
755 }
756
758
760 {
761 printf( "Lpk_Resynthesize: The network check has failed.\n" );
762 return 0;
763 }
764 return 1;
765}
ABC_DLL int Abc_NtkSweep(Abc_Ntk_t *pNtk, int fVerbose)
struct Abc_Obj_t_ Abc_Obj_t
ABC_DLL int Abc_NtkGetFaninMax(Abc_Ntk_t *pNtk)
ABC_DLL int Abc_NtkCheck(Abc_Ntk_t *pNtk)
FUNCTION DEFINITIONS ///.
ABC_DLL void Abc_NtkStopReverseLevels(Abc_Ntk_t *pNtk)
ABC_DLL int Abc_NtkLevel(Abc_Ntk_t *pNtk)
ABC_DLL void Abc_NtkStartReverseLevels(Abc_Ntk_t *pNtk, int nMaxLevelIncrease)
ABC_DLL int Abc_NtkToAig(Abc_Ntk_t *pNtk)
ABC_DLL int Abc_NtkGetTotalFanins(Abc_Ntk_t *pNtk)
#define Abc_NtkForEachNode(pNtk, pNode, i)
#define ABC_PRTP(a, t, T)
ABC_DLL void * Abc_FrameReadLibLut()
ABC_NAMESPACE_IMPL_START typedef char ProgressBar
struct If_LibLut_t_ If_LibLut_t
int Lpk_NodeHasChanged(Lpk_Man_t *p, int iNode)
int Lpk_ResynthesizeNodeNew(Lpk_Man_t *p)
int Lpk_ResynthesizeNode(Lpk_Man_t *p)
Lpk_Man_t * Lpk_ManStart(Lpk_Par_t *pPars)
DECLARATIONS ///.
struct Lpk_Man_t_ Lpk_Man_t
void Lpk_ManStop(Lpk_Man_t *p)