ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
retCore.c
Go to the documentation of this file.
1
20
21#include "retInt.h"
22
24
25
29
31
35
47int Abc_NtkRetime( Abc_Ntk_t * pNtk, int Mode, int nDelayLim, int fForwardOnly, int fBackwardOnly, int fOneStep, int fUseOldNames, int fVerbose )
48{
49 int nLatches = Abc_NtkLatchNum(pNtk);
50 int nLevels = Abc_NtkLevel(pNtk);
51 int RetValue = 0;
52 abctime clkTotal = Abc_Clock();
53 int nNodesOld, nLatchesOld;
54 assert( Mode > 0 && Mode < 7 );
55 assert( !fForwardOnly || !fBackwardOnly );
56
57 // cleanup the network
58 nNodesOld = Abc_NtkNodeNum(pNtk);
59 nLatchesOld = Abc_NtkLatchNum(pNtk);
60 Abc_NtkCleanupSeq(pNtk, 0, 0, 0);
61 if ( nNodesOld > Abc_NtkNodeNum(pNtk) || nLatchesOld > Abc_NtkLatchNum(pNtk) )
62 printf( "Cleanup before retiming removed %d dangling nodes and %d dangling latches.\n",
63 nNodesOld - Abc_NtkNodeNum(pNtk), nLatchesOld - Abc_NtkLatchNum(pNtk) );
64
65 // perform retiming
66 switch ( Mode )
67 {
68 case 1: // forward
69 RetValue = Abc_NtkRetimeIncremental( pNtk, nDelayLim, 1, 0, 0, fUseOldNames, fVerbose );
70 break;
71 case 2: // backward
72 RetValue = Abc_NtkRetimeIncremental( pNtk, nDelayLim, 0, 0, 0, fUseOldNames, fVerbose );
73 break;
74 case 3: // min-area
75 RetValue = Abc_NtkRetimeMinArea( pNtk, fForwardOnly, fBackwardOnly, fUseOldNames, fVerbose );
76 break;
77 case 4: // min-delay
78 if ( !fBackwardOnly )
79 RetValue += Abc_NtkRetimeIncremental( pNtk, nDelayLim, 1, 1, fOneStep, fUseOldNames, fVerbose );
80 if ( !fForwardOnly )
81 RetValue += Abc_NtkRetimeIncremental( pNtk, nDelayLim, 0, 1, fOneStep, fUseOldNames, fVerbose );
82 break;
83 case 5: // min-area + min-delay
84 RetValue = Abc_NtkRetimeMinArea( pNtk, fForwardOnly, fBackwardOnly, fUseOldNames, fVerbose );
85 if ( !fBackwardOnly )
86 RetValue += Abc_NtkRetimeIncremental( pNtk, nDelayLim, 1, 1, 0, fUseOldNames, fVerbose );
87 if ( !fForwardOnly )
88 RetValue += Abc_NtkRetimeIncremental( pNtk, nDelayLim, 0, 1, 0, fUseOldNames, fVerbose );
89 break;
90 case 6: // Pan's algorithm
91 RetValue = Abc_NtkRetimeLValue( pNtk, 500, fVerbose );
92 break;
93 default:
94 printf( "Unknown retiming option.\n" );
95 break;
96 }
97 if ( fVerbose )
98 {
99 printf( "Reduction in area = %3d. Reduction in delay = %3d. ",
100 nLatches - Abc_NtkLatchNum(pNtk), nLevels - Abc_NtkLevel(pNtk) );
101 ABC_PRT( "Total runtime", Abc_Clock() - clkTotal );
102 }
103 timeRetime = Abc_Clock() - clkTotal;
104 return RetValue;
105}
106
119{
120 extern int Abc_NtkSecFraig( Abc_Ntk_t * pNtk1, Abc_Ntk_t * pNtk2, int nSeconds, int nFrames, int fVerbose );
121 Abc_Ntk_t * pNtkRet;
122 assert( Abc_NtkIsLogic(pNtk) );
123 Abc_NtkToSop( pNtk, -1, ABC_INFINITY );
124// if ( !Abc_NtkCheck( pNtk ) )
125// fprintf( stdout, "Abc_NtkRetimeDebug(): Network check has failed.\n" );
126// Io_WriteBlifLogic( pNtk, "debug_temp.blif", 1 );
127 pNtkRet = Abc_NtkDup( pNtk );
128 Abc_NtkRetime( pNtkRet, 3, 0, 0, 1, 0, 1, 0 ); // debugging backward flow
129 return !Abc_NtkSecFraig( pNtk, pNtkRet, 10000, 3, 0 );
130}
131
135
136
138
int timeRetime
DECLARATIONS ///.
Definition retCore.c:30
int Abc_NtkSecFraig(Abc_Ntk_t *pNtk1, Abc_Ntk_t *pNtk2, int nSeconds, int nFrames, int fVerbose)
Definition abcVerify.c:578
struct Abc_Ntk_t_ Abc_Ntk_t
Definition abc.h:115
ABC_DLL int Abc_NtkLevel(Abc_Ntk_t *pNtk)
Definition abcDfs.c:1449
ABC_DLL int Abc_NtkToSop(Abc_Ntk_t *pNtk, int fMode, int nCubeLimit)
Definition abcFunc.c:1261
ABC_DLL int Abc_NtkCleanupSeq(Abc_Ntk_t *pNtk, int fLatchSweep, int fAutoSweep, int fVerbose)
Definition abcSweep.c:919
ABC_DLL Abc_Ntk_t * Abc_NtkDup(Abc_Ntk_t *pNtk)
Definition abcNtk.c:472
ABC_INT64_T abctime
Definition abc_global.h:332
#define ABC_PRT(a, t)
Definition abc_global.h:255
#define ABC_INFINITY
MACRO DEFINITIONS ///.
Definition abc_global.h:250
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
int Abc_NtkRetimeMinArea(Abc_Ntk_t *pNtk, int fForwardOnly, int fBackwardOnly, int fUseOldNames, int fVerbose)
FUNCTION DEFINITIONS ///.
Definition retArea.c:53
int Abc_NtkRetimeDebug(Abc_Ntk_t *pNtk)
Definition retCore.c:118
int Abc_NtkRetime(Abc_Ntk_t *pNtk, int Mode, int nDelayLim, int fForwardOnly, int fBackwardOnly, int fOneStep, int fUseOldNames, int fVerbose)
FUNCTION DEFINITIONS ///.
Definition retCore.c:47
int Abc_NtkRetimeIncremental(Abc_Ntk_t *pNtk, int nDelayLim, int fForward, int fMinDelay, int fOneStep, int fUseOldNames, int fVerbose)
FUNCTION DEFINITIONS ///.
Definition retIncrem.c:47
int Abc_NtkRetimeLValue(Abc_Ntk_t *pNtk, int nIterLimit, int fVerbose)
FUNCTION DEFINITIONS ///.
Definition retLvalue.c:61
#define assert(ex)
Definition util_old.h:213