abc-master
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
dch.h File Reference

Go to the source code of this file.

Data Structures

struct  Dch_Pars_t_
 

Typedefs

typedef
typedefABC_NAMESPACE_HEADER_START
struct Dch_Pars_t_ 
Dch_Pars_t
 INCLUDES ///. More...
 

Functions

Aig_Man_tDch_DeriveTotalAig (Vec_Ptr_t *vAigs)
 MACRO DEFINITIONS ///. More...
 
void Dch_ManSetDefaultParams (Dch_Pars_t *p)
 DECLARATIONS ///. More...
 
int Dch_ManReadVerbose (Dch_Pars_t *p)
 
Aig_Man_tDch_ComputeChoices (Aig_Man_t *pAig, Dch_Pars_t *pPars)
 
void Dch_ComputeEquivalences (Aig_Man_t *pAig, Dch_Pars_t *pPars)
 
Aig_Man_tDar_ManChoiceNew (Aig_Man_t *pAig, Dch_Pars_t *pPars)
 

Typedef Documentation

typedef typedefABC_NAMESPACE_HEADER_START struct Dch_Pars_t_ Dch_Pars_t

INCLUDES ///.

CFile****************************************************************

FileName [dch.h]

SystemName [ABC: Logic synthesis and verification system.]

PackageName [Choice computation for tech-mapping.]

Synopsis [External declarations.]

Author [Alan Mishchenko]

Affiliation [UC Berkeley]

Date [Ver. 1.0. Started - June 29, 2008.]

Revision [

Id:
dch.h,v 1.00 2008/07/29 00:00:00 alanmi Exp

]PARAMETERS ///BASIC TYPES ///

Definition at line 43 of file dch.h.

Function Documentation

Aig_Man_t* Dar_ManChoiceNew ( Aig_Man_t pAig,
Dch_Pars_t pPars 
)

Function*************************************************************

Synopsis [Reproduces script "compress2".]

Description [Consumes the input AIG to reduce memory usage.]

SideEffects []

SeeAlso []

Definition at line 849 of file darScript.c.

850 {
851  extern Aig_Man_t * Cec_ComputeChoices( Gia_Man_t * pGia, Dch_Pars_t * pPars );
852 // extern Aig_Man_t * Dch_DeriveTotalAig( Vec_Ptr_t * vAigs );
853  extern Aig_Man_t * Dch_ComputeChoices( Aig_Man_t * pAig, Dch_Pars_t * pPars );
854 // int fVerbose = pPars->fVerbose;
855  Aig_Man_t * pMan, * pTemp;
856  Gia_Man_t * pGia;
857  Vec_Ptr_t * vPios;
858  void * pManTime;
859  char * pName, * pSpec;
860  abctime clk;
861 
862  // save useful things
863  pManTime = pAig->pManTime; pAig->pManTime = NULL;
864  pName = Abc_UtilStrsav( pAig->pName );
865  pSpec = Abc_UtilStrsav( pAig->pSpec );
866 
867  // perform synthesis
868 clk = Abc_Clock();
869  pGia = Dar_NewChoiceSynthesis( Aig_ManDupDfs(pAig), 1, 1, pPars->fPower, pPars->fLightSynth, pPars->fVerbose );
870 pPars->timeSynth = Abc_Clock() - clk;
871 
872  // perform choice computation
873  if ( pPars->fUseGia )
874  pMan = Cec_ComputeChoices( pGia, pPars );
875  else
876  {
877  pMan = Gia_ManToAigSkip( pGia, 3 );
878  Gia_ManStop( pGia );
879  pMan = Dch_ComputeChoices( pTemp = pMan, pPars );
880  Aig_ManStop( pTemp );
881  }
882 
883  // create guidence
884  vPios = Aig_ManOrderPios( pMan, pAig );
885  Aig_ManStop( pAig );
886 
887  // reconstruct the network
888  pMan = Aig_ManDupDfsGuided( pTemp = pMan, vPios );
889  Aig_ManStop( pTemp );
890  Vec_PtrFree( vPios );
891 
892  // reset levels
893  pMan->pManTime = pManTime;
894  Aig_ManChoiceLevel( pMan );
895 
896  // copy names
897  ABC_FREE( pMan->pName );
898  ABC_FREE( pMan->pSpec );
899  pMan->pName = pName;
900  pMan->pSpec = pSpec;
901  return pMan;
902 }
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
Definition: vecPtr.h:42
void Gia_ManStop(Gia_Man_t *p)
Definition: giaMan.c:77
typedefABC_NAMESPACE_HEADER_START struct Aig_Man_t_ Aig_Man_t
INCLUDES ///.
Definition: aig.h:50
void Aig_ManStop(Aig_Man_t *p)
Definition: aigMan.c:187
Aig_Man_t * Aig_ManDupDfs(Aig_Man_t *p)
Definition: aigDup.c:563
typedefABC_NAMESPACE_HEADER_START struct Dch_Pars_t_ Dch_Pars_t
INCLUDES ///.
Definition: dch.h:43
static abctime Abc_Clock()
Definition: abc_global.h:279
int Aig_ManChoiceLevel(Aig_Man_t *p)
Definition: aigDfs.c:581
Aig_Man_t * Aig_ManDupDfsGuided(Aig_Man_t *p, Vec_Ptr_t *vPios)
Definition: aigDup.c:694
Vec_Ptr_t * Aig_ManOrderPios(Aig_Man_t *p, Aig_Man_t *pOrder)
Definition: aigDup.c:626
Gia_Man_t * Dar_NewChoiceSynthesis(Aig_Man_t *pAig, int fBalance, int fUpdateLevel, int fPower, int fLightSynth, int fVerbose)
Definition: darScript.c:632
void * pManTime
Definition: gia.h:165
Aig_Man_t * Cec_ComputeChoices(Gia_Man_t *pGia, Dch_Pars_t *pPars)
Definition: cecChoice.c:385
Aig_Man_t * Gia_ManToAigSkip(Gia_Man_t *p, int nOutDelta)
Definition: giaAig.c:324
#define ABC_FREE(obj)
Definition: abc_global.h:232
Definition: gia.h:95
Aig_Man_t * Dch_ComputeChoices(Aig_Man_t *pAig, Dch_Pars_t *pPars)
Definition: dchCore.c:89
ABC_INT64_T abctime
Definition: abc_global.h:278
char * Abc_UtilStrsav(char *s)
Definition: starter.c:47
static void Vec_PtrFree(Vec_Ptr_t *p)
Definition: vecPtr.h:223
Aig_Man_t* Dch_ComputeChoices ( Aig_Man_t pAig,
Dch_Pars_t pPars 
)

Function*************************************************************

Synopsis [Performs computation of AIGs with choices.]

Description [Takes several AIGs and performs choicing.]

SideEffects []

SeeAlso []

Definition at line 89 of file dchCore.c.

90 {
91  Dch_Man_t * p;
92  Aig_Man_t * pResult;
93  abctime clk, clkTotal = Abc_Clock();
94  // reset random numbers
95  Aig_ManRandom(1);
96  // start the choicing manager
97  p = Dch_ManCreate( pAig, pPars );
98  // compute candidate equivalence classes
99 clk = Abc_Clock();
100  p->ppClasses = Dch_CreateCandEquivClasses( pAig, pPars->nWords, pPars->fVerbose );
101 p->timeSimInit = Abc_Clock() - clk;
102 // Dch_ClassesPrint( p->ppClasses, 0 );
103  p->nLits = Dch_ClassesLitNum( p->ppClasses );
104  // perform SAT sweeping
105  Dch_ManSweep( p );
106  // free memory ahead of time
107 p->timeTotal = Abc_Clock() - clkTotal;
108  Dch_ManStop( p );
109  // create choices
110  ABC_FREE( pAig->pTable );
111  pResult = Dch_DeriveChoiceAig( pAig, pPars->fSkipRedSupp );
112  // count the number of representatives
113  if ( pPars->fVerbose )
114  Abc_Print( 1, "STATS: Ands:%8d ->%8d. Reprs:%7d ->%7d. Choices =%7d.\n",
115  Aig_ManNodeNum(pAig),
116  Aig_ManNodeNum(pResult),
118  Dch_DeriveChoiceCountEquivs( pResult ),
119  Aig_ManChoiceNum( pResult ) );
120  return pResult;
121 }
int Dch_ClassesLitNum(Dch_Cla_t *p)
Definition: dchClass.c:206
typedefABC_NAMESPACE_HEADER_START struct Aig_Man_t_ Aig_Man_t
INCLUDES ///.
Definition: aig.h:50
static Llb_Mgr_t * p
Definition: llb3Image.c:950
void Dch_ManStop(Dch_Man_t *p)
Definition: dchMan.c:122
Aig_Man_t * Dch_DeriveChoiceAig(Aig_Man_t *pAig, int fSkipRedSupps)
Definition: dchChoice.c:517
void Dch_ManSweep(Dch_Man_t *p)
Definition: dchSweep.c:106
unsigned Aig_ManRandom(int fReset)
Definition: aigUtil.c:1157
static abctime Abc_Clock()
Definition: abc_global.h:279
static int Aig_ManNodeNum(Aig_Man_t *p)
Definition: aig.h:256
Dch_Cla_t * Dch_CreateCandEquivClasses(Aig_Man_t *pAig, int nWords, int fVerbose)
Definition: dchSim.c:264
int nLits
Definition: dchInt.h:82
Dch_Man_t * Dch_ManCreate(Aig_Man_t *pAig, Dch_Pars_t *pPars)
DECLARATIONS ///.
Definition: dchMan.c:45
Dch_Cla_t * ppClasses
Definition: dchInt.h:60
static void Abc_Print(int level, const char *format,...)
Definition: abc_global.h:313
int Dch_DeriveChoiceCountEquivs(Aig_Man_t *pAig)
Definition: dchChoice.c:89
abctime timeTotal
Definition: dchInt.h:95
int Aig_ManChoiceNum(Aig_Man_t *p)
Definition: aigUtil.c:1007
#define ABC_FREE(obj)
Definition: abc_global.h:232
abctime timeSimInit
Definition: dchInt.h:87
int Dch_DeriveChoiceCountReprs(Aig_Man_t *pAig)
FUNCTION DECLARATIONS ///.
Definition: dchChoice.c:75
ABC_INT64_T abctime
Definition: abc_global.h:278
void Dch_ComputeEquivalences ( Aig_Man_t pAig,
Dch_Pars_t pPars 
)

Function*************************************************************

Synopsis [Performs computation of AIGs with choices.]

Description [Takes several AIGs and performs choicing.]

SideEffects []

SeeAlso []

Definition at line 134 of file dchCore.c.

135 {
136  Dch_Man_t * p;
137  abctime clk, clkTotal = Abc_Clock();
138  // reset random numbers
139  Aig_ManRandom(1);
140  // start the choicing manager
141  p = Dch_ManCreate( pAig, pPars );
142  // compute candidate equivalence classes
143 clk = Abc_Clock();
144  p->ppClasses = Dch_CreateCandEquivClasses( pAig, pPars->nWords, pPars->fVerbose );
145 p->timeSimInit = Abc_Clock() - clk;
146 // Dch_ClassesPrint( p->ppClasses, 0 );
147  p->nLits = Dch_ClassesLitNum( p->ppClasses );
148  // perform SAT sweeping
149  Dch_ManSweep( p );
150  // free memory ahead of time
151 p->timeTotal = Abc_Clock() - clkTotal;
152  Dch_ManStop( p );
153 }
int Dch_ClassesLitNum(Dch_Cla_t *p)
Definition: dchClass.c:206
static Llb_Mgr_t * p
Definition: llb3Image.c:950
void Dch_ManStop(Dch_Man_t *p)
Definition: dchMan.c:122
void Dch_ManSweep(Dch_Man_t *p)
Definition: dchSweep.c:106
unsigned Aig_ManRandom(int fReset)
Definition: aigUtil.c:1157
static abctime Abc_Clock()
Definition: abc_global.h:279
Dch_Cla_t * Dch_CreateCandEquivClasses(Aig_Man_t *pAig, int nWords, int fVerbose)
Definition: dchSim.c:264
int nLits
Definition: dchInt.h:82
Dch_Man_t * Dch_ManCreate(Aig_Man_t *pAig, Dch_Pars_t *pPars)
DECLARATIONS ///.
Definition: dchMan.c:45
Dch_Cla_t * ppClasses
Definition: dchInt.h:60
abctime timeTotal
Definition: dchInt.h:95
abctime timeSimInit
Definition: dchInt.h:87
ABC_INT64_T abctime
Definition: abc_global.h:278
Aig_Man_t* Dch_DeriveTotalAig ( Vec_Ptr_t vAigs)

MACRO DEFINITIONS ///.

FUNCTION DECLARATIONS ///

Function*************************************************************

Synopsis [Derives the cumulative AIG.]

Description []

SideEffects []

SeeAlso []

Definition at line 65 of file dchAig.c.

66 {
67  Aig_Man_t * pAig, * pAig2, * pAigTotal;
68  Aig_Obj_t * pObj, * pObjPi, * pObjPo;
69  int i, k, nNodes;
70  assert( Vec_PtrSize(vAigs) > 0 );
71  // make sure they have the same number of PIs/POs
72  nNodes = 0;
73  pAig = (Aig_Man_t *)Vec_PtrEntry( vAigs, 0 );
74  Vec_PtrForEachEntry( Aig_Man_t *, vAigs, pAig2, i )
75  {
76  assert( Aig_ManCiNum(pAig) == Aig_ManCiNum(pAig2) );
77  assert( Aig_ManCoNum(pAig) == Aig_ManCoNum(pAig2) );
78  nNodes += Aig_ManNodeNum(pAig2);
79  Aig_ManCleanData( pAig2 );
80  }
81  // map constant nodes
82  pAigTotal = Aig_ManStart( nNodes );
83  Vec_PtrForEachEntry( Aig_Man_t *, vAigs, pAig2, k )
84  Aig_ManConst1(pAig2)->pData = Aig_ManConst1(pAigTotal);
85  // map primary inputs
86  Aig_ManForEachCi( pAig, pObj, i )
87  {
88  pObjPi = Aig_ObjCreateCi( pAigTotal );
89  Vec_PtrForEachEntry( Aig_Man_t *, vAigs, pAig2, k )
90  Aig_ManCi( pAig2, i )->pData = pObjPi;
91  }
92  // construct the AIG in the order of POs
93  Aig_ManForEachCo( pAig, pObj, i )
94  {
95  Vec_PtrForEachEntry( Aig_Man_t *, vAigs, pAig2, k )
96  {
97  pObjPo = Aig_ManCo( pAig2, i );
98  Dch_DeriveTotalAig_rec( pAigTotal, Aig_ObjFanin0(pObjPo) );
99  }
100  Aig_ObjCreateCo( pAigTotal, Aig_ObjChild0Copy(pObj) );
101  }
102 /*
103  // mark the cone of the first AIG
104  Aig_ManIncrementTravId( pAigTotal );
105  Aig_ManForEachObj( pAig, pObj, i )
106  if ( pObj->pData )
107  Aig_ObjSetTravIdCurrent( pAigTotal, pObj->pData );
108 */
109  // cleanup should not be done
110  return pAigTotal;
111 }
Aig_Obj_t * Aig_ObjCreateCo(Aig_Man_t *p, Aig_Obj_t *pDriver)
Definition: aigObj.c:66
typedefABC_NAMESPACE_HEADER_START struct Aig_Man_t_ Aig_Man_t
INCLUDES ///.
Definition: aig.h:50
static Aig_Obj_t * Aig_ObjFanin0(Aig_Obj_t *pObj)
Definition: aig.h:308
Aig_Man_t * Aig_ManStart(int nNodesMax)
DECLARATIONS ///.
Definition: aigMan.c:47
#define Aig_ManForEachCi(p, pObj, i)
ITERATORS ///.
Definition: aig.h:393
Aig_Obj_t * Aig_ObjCreateCi(Aig_Man_t *p)
DECLARATIONS ///.
Definition: aigObj.c:45
#define Aig_ManForEachCo(p, pObj, i)
Definition: aig.h:398
ABC_NAMESPACE_IMPL_START void Dch_DeriveTotalAig_rec(Aig_Man_t *p, Aig_Obj_t *pObj)
DECLARATIONS ///.
Definition: dchAig.c:45
static int Vec_PtrSize(Vec_Ptr_t *p)
Definition: vecPtr.h:295
static int Aig_ManNodeNum(Aig_Man_t *p)
Definition: aig.h:256
static int Aig_ManCoNum(Aig_Man_t *p)
Definition: aig.h:252
static Aig_Obj_t * Aig_ManCi(Aig_Man_t *p, int i)
Definition: aig.h:266
static int Aig_ManCiNum(Aig_Man_t *p)
Definition: aig.h:251
Definition: aig.h:69
static Aig_Obj_t * Aig_ObjChild0Copy(Aig_Obj_t *pObj)
Definition: aig.h:312
static Aig_Obj_t * Aig_ManConst1(Aig_Man_t *p)
Definition: aig.h:264
static void * Vec_PtrEntry(Vec_Ptr_t *p, int i)
Definition: vecPtr.h:362
static Aig_Obj_t * Aig_ManCo(Aig_Man_t *p, int i)
Definition: aig.h:267
#define assert(ex)
Definition: util_old.h:213
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.
Definition: vecPtr.h:55
void Aig_ManCleanData(Aig_Man_t *p)
Definition: aigUtil.c:205
int Dch_ManReadVerbose ( Dch_Pars_t p)

Function*************************************************************

Synopsis [Returns verbose parameter.]

Description []

SideEffects []

SeeAlso []

Definition at line 73 of file dchCore.c.

74 {
75  return p->fVerbose;
76 }
static Llb_Mgr_t * p
Definition: llb3Image.c:950
void Dch_ManSetDefaultParams ( Dch_Pars_t p)

DECLARATIONS ///.

CFile****************************************************************

FileName [dchCore.c]

SystemName [ABC: Logic synthesis and verification system.]

PackageName [Choice computation for tech-mapping.]

Synopsis [The core procedures.]

Author [Alan Mishchenko]

Affiliation [UC Berkeley]

Date [Ver. 1.0. Started - June 29, 2008.]

Revision [

Id:
dchCore.c,v 1.00 2008/07/29 00:00:00 alanmi Exp

]FUNCTION DEFINITIONS /// Function*************************************************************

Synopsis [This procedure sets default parameters.]

Description []

SideEffects []

SeeAlso []

Definition at line 45 of file dchCore.c.

46 {
47  memset( p, 0, sizeof(Dch_Pars_t) );
48  p->nWords = 8; // the number of simulation words
49  p->nBTLimit = 1000; // conflict limit at a node
50  p->nSatVarMax = 5000; // the max number of SAT variables
51  p->fSynthesis = 1; // derives three snapshots
52  p->fPolarFlip = 1; // uses polarity adjustment
53  p->fSimulateTfo = 1; // simulate TFO
54  p->fPower = 0; // power-aware rewriting
55  p->fLightSynth = 0; // uses lighter version of synthesis
56  p->fSkipRedSupp = 0; // skips choices with redundant structural support
57  p->fVerbose = 0; // verbose stats
58  p->nNodesAhead = 1000; // the lookahead in terms of nodes
59  p->nCallsRecycle = 100; // calls to perform before recycling SAT solver
60 }
char * memset()
static Llb_Mgr_t * p
Definition: llb3Image.c:950
typedefABC_NAMESPACE_HEADER_START struct Dch_Pars_t_ Dch_Pars_t
INCLUDES ///.
Definition: dch.h:43