summaryrefslogtreecommitdiffstats
path: root/src/opt/dar/darInt.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/opt/dar/darInt.h')
-rw-r--r--src/opt/dar/darInt.h171
1 files changed, 171 insertions, 0 deletions
diff --git a/src/opt/dar/darInt.h b/src/opt/dar/darInt.h
new file mode 100644
index 00000000..08af70df
--- /dev/null
+++ b/src/opt/dar/darInt.h
@@ -0,0 +1,171 @@
+/**CFile****************************************************************
+
+ FileName [darInt.h]
+
+ SystemName [ABC: Logic synthesis and verification system.]
+
+ PackageName [DAG-aware AIG rewriting.]
+
+ Synopsis [Internal declarations.]
+
+ Author [Alan Mishchenko]
+
+ Affiliation [UC Berkeley]
+
+ Date [Ver. 1.0. Started - April 28, 2007.]
+
+ Revision [$Id: darInt.h,v 1.00 2007/04/28 00:00:00 alanmi Exp $]
+
+***********************************************************************/
+
+#ifndef ABC__aig__dar__darInt_h
+#define ABC__aig__dar__darInt_h
+
+
+////////////////////////////////////////////////////////////////////////
+/// INCLUDES ///
+////////////////////////////////////////////////////////////////////////
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <time.h>
+
+//#include "bar.h"
+#include "src/misc/vec/vec.h"
+#include "src/aig/aig/aig.h"
+#include "dar.h"
+
+////////////////////////////////////////////////////////////////////////
+/// PARAMETERS ///
+////////////////////////////////////////////////////////////////////////
+
+
+
+ABC_NAMESPACE_HEADER_START
+
+
+////////////////////////////////////////////////////////////////////////
+/// BASIC TYPES ///
+////////////////////////////////////////////////////////////////////////
+
+typedef struct Dar_Man_t_ Dar_Man_t;
+typedef struct Dar_Cut_t_ Dar_Cut_t;
+
+// the AIG 4-cut
+struct Dar_Cut_t_ // 6 words
+{
+ unsigned uSign; // cut signature
+ unsigned uTruth : 16; // the truth table of the cut function
+ unsigned Value : 11; // the value of the cut
+ unsigned fBest : 1; // marks the best cut
+ unsigned fUsed : 1; // marks the cut currently in use
+ unsigned nLeaves : 3; // the number of leaves
+ int pLeaves[4]; // the array of leaves
+};
+
+// the AIG manager
+struct Dar_Man_t_
+{
+ // input data
+ Dar_RwrPar_t * pPars; // rewriting parameters
+ Aig_Man_t * pAig; // AIG manager
+ // various data members
+ Aig_MmFixed_t * pMemCuts; // memory manager for cuts
+ void * pManCnf; // CNF managers
+ Vec_Ptr_t * vCutNodes; // the nodes with cuts allocated
+ // current rewriting step
+ Vec_Ptr_t * vLeavesBest; // the best set of leaves
+ int OutBest; // the best output (in the library)
+ int OutNumBest; // the best number of the output
+ int GainBest; // the best gain
+ int LevelBest; // the level of node with the best gain
+ int ClassBest; // the equivalence class of the best replacement
+ // function statistics
+ int nTotalSubgs; // the total number of subgraphs tried
+ int ClassTimes[222];// the runtimes for each class
+ int ClassGains[222];// the gains for each class
+ int ClassSubgs[222];// the graphs for each class
+ int nCutMemUsed; // memory used for cuts
+ // rewriting statistics
+ int nNodesInit; // the original number of nodes
+ int nNodesTried; // the number of nodes attempted
+ int nCutsAll; // all cut pairs
+ int nCutsTried; // computed cuts
+ int nCutsUsed; // used cuts
+ int nCutsBad; // bad cuts due to absent fanin
+ int nCutsGood; // good cuts
+ int nCutsSkipped; // skipped bad cuts
+ // timing statistics
+ int timeCuts;
+ int timeEval;
+ int timeOther;
+ int timeTotal;
+ int time1;
+ int time2;
+};
+
+static inline Dar_Cut_t * Dar_ObjCuts( Aig_Obj_t * pObj ) { return (Dar_Cut_t *)pObj->pData; }
+static inline void Dar_ObjSetCuts( Aig_Obj_t * pObj, Dar_Cut_t * pCuts ) { assert( !Aig_ObjIsNone(pObj) ); pObj->pData = pCuts; }
+
+////////////////////////////////////////////////////////////////////////
+/// MACRO DEFINITIONS ///
+////////////////////////////////////////////////////////////////////////
+
+////////////////////////////////////////////////////////////////////////
+/// ITERATORS ///
+////////////////////////////////////////////////////////////////////////
+
+// iterator over all cuts of the node
+#define Dar_ObjForEachCutAll( pObj, pCut, i ) \
+ for ( (pCut) = Dar_ObjCuts(pObj), i = 0; i < (int)(pObj)->nCuts; i++, pCut++ )
+#define Dar_ObjForEachCut( pObj, pCut, i ) \
+ for ( (pCut) = Dar_ObjCuts(pObj), i = 0; i < (int)(pObj)->nCuts; i++, pCut++ ) if ( (pCut)->fUsed==0 ) {} else
+// iterator over leaves of the cut
+#define Dar_CutForEachLeaf( p, pCut, pLeaf, i ) \
+ for ( i = 0; (i < (int)(pCut)->nLeaves) && (((pLeaf) = Aig_ManObj(p, (pCut)->pLeaves[i])), 1); i++ )
+
+////////////////////////////////////////////////////////////////////////
+/// FUNCTION DECLARATIONS ///
+////////////////////////////////////////////////////////////////////////
+
+/*=== darBalance.c ========================================================*/
+/*=== darCore.c ===========================================================*/
+/*=== darCut.c ============================================================*/
+extern void Dar_ManCutsRestart( Dar_Man_t * p, Aig_Obj_t * pRoot );
+extern void Dar_ManCutsFree( Dar_Man_t * p );
+extern Dar_Cut_t * Dar_ObjPrepareCuts( Dar_Man_t * p, Aig_Obj_t * pObj );
+extern Dar_Cut_t * Dar_ObjComputeCuts_rec( Dar_Man_t * p, Aig_Obj_t * pObj );
+extern Dar_Cut_t * Dar_ObjComputeCuts( Dar_Man_t * p, Aig_Obj_t * pObj );
+extern void Dar_ObjCutPrint( Aig_Man_t * p, Aig_Obj_t * pObj );
+/*=== darData.c ===========================================================*/
+extern Vec_Int_t * Dar_LibReadNodes();
+extern Vec_Int_t * Dar_LibReadOuts();
+extern Vec_Int_t * Dar_LibReadPrios();
+/*=== darLib.c ============================================================*/
+extern void Dar_LibStart();
+extern void Dar_LibStop();
+extern void Dar_LibReturnCanonicals( unsigned * pCanons );
+extern void Dar_LibEval( Dar_Man_t * p, Aig_Obj_t * pRoot, Dar_Cut_t * pCut, int Required, int * pnMffcSize );
+extern Aig_Obj_t * Dar_LibBuildBest( Dar_Man_t * p );
+/*=== darMan.c ============================================================*/
+extern Dar_Man_t * Dar_ManStart( Aig_Man_t * pAig, Dar_RwrPar_t * pPars );
+extern void Dar_ManStop( Dar_Man_t * p );
+extern void Dar_ManPrintStats( Dar_Man_t * p );
+/*=== darPrec.c ============================================================*/
+extern char ** Dar_Permutations( int n );
+extern void Dar_Truth4VarNPN( unsigned short ** puCanons, char ** puPhases, char ** puPerms, unsigned char ** puMap );
+
+
+
+ABC_NAMESPACE_HEADER_END
+
+
+
+#endif
+
+////////////////////////////////////////////////////////////////////////
+/// END OF FILE ///
+////////////////////////////////////////////////////////////////////////
+