ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
llbInt.h
Go to the documentation of this file.
1
20
21#ifndef ABC__aig__llb__llbInt_h
22#define ABC__aig__llb__llbInt_h
23
24
28
29#include <stdio.h>
30#include "aig/aig/aig.h"
31#include "aig/saig/saig.h"
32#include "proof/ssw/ssw.h"
33#include "llb.h"
34
35#include "bdd/extrab/extraBdd.h"
36
40
42
46
47typedef struct Llb_Man_t_ Llb_Man_t;
48typedef struct Llb_Mtr_t_ Llb_Mtr_t;
49typedef struct Llb_Grp_t_ Llb_Grp_t;
50
52{
53 Gia_ParLlb_t * pPars; // parameters
54 Aig_Man_t * pAigGlo; // initial AIG manager (owned by the caller)
55 Aig_Man_t * pAig; // derived AIG manager (created in this package)
56 DdManager * dd; // BDD manager
57 DdManager * ddG; // BDD manager
58 DdManager * ddR; // BDD manager
59 Vec_Int_t * vObj2Var; // mapping AIG ObjId into BDD var index
60 Vec_Int_t * vVar2Obj; // mapping BDD var index into AIG ObjId
61 Vec_Ptr_t * vGroups; // group Id into group pointer
62 Llb_Mtr_t * pMatrix; // dependency matrix
63 // image computation
64 Vec_Ptr_t * vRings; // onion rings
65 Vec_Int_t * vVarBegs; // the first group where the var appears
66 Vec_Int_t * vVarEnds; // the last group where the var appears
67 // variable mapping
68 Vec_Int_t * vNs2Glo; // next state variables into global variables
69 Vec_Int_t * vCs2Glo; // next state variables into global variables
70 Vec_Int_t * vGlo2Cs; // global variables into current state variables
71 Vec_Int_t * vGlo2Ns; // global variables into current state variables
72 // flow computation
73// Vec_Int_t * vMem;
74// Vec_Ptr_t * vTops;
75// Vec_Ptr_t * vBots;
76// Vec_Ptr_t * vCuts;
77};
78
80{
81 int nPis; // number of primary inputs
82 int nFfs; // number of flip-flops
83 int nRows; // number of rows
84 int nCols; // number of columns
85 int * pColSums; // sum of values in a column
86 Llb_Grp_t ** pColGrps; // group structure for each col
87 int * pRowSums; // sum of values in a row
88 char ** pMatrix; // dependency matrix
89 Llb_Man_t * pMan; // manager
90 // partial product
91 char * pProdVars; // variables in the partial product
92 int * pProdNums; // var counts in the remaining partitions
93};
94
96{
97 int Id; // group ID
98 Vec_Ptr_t * vIns; // input AIG objs
99 Vec_Ptr_t * vOuts; // output AIG objs
100 Vec_Ptr_t * vNodes; // internal AIG objs
101 Llb_Man_t * pMan; // manager
102 Llb_Grp_t * pPrev; // previous group
103 Llb_Grp_t * pNext; // next group
104};
105
109
110static inline int Llb_ObjBddVar( Vec_Int_t * vOrder, Aig_Obj_t * pObj ) { return Vec_IntEntry(vOrder, Aig_ObjId(pObj)); }
111
115
116/*=== llbConstr.c ======================================================*/
118extern void Llb_ManPrintEntries( Aig_Man_t * p, Vec_Int_t * vCands );
119/*=== llbCore.c ======================================================*/
120extern int Llb_ManModelCheckAig( Aig_Man_t * pAigGlo, Gia_ParLlb_t * pPars, Vec_Int_t * vHints, DdManager ** pddGlo );
121/*=== llbCluster.c ======================================================*/
122extern void Llb_ManCluster( Llb_Mtr_t * p );
123/*=== llbDump.c ======================================================*/
124extern void Llb_ManDumpReached( DdManager * ddG, DdNode * bReached, char * pModel, char * pFileName );
125/*=== llbFlow.c ======================================================*/
126extern Vec_Ptr_t * Llb_ManFlow( Aig_Man_t * p, Vec_Ptr_t * vSources, int * pnFlow );
127/*=== llbHint.c ======================================================*/
129extern int Llb_ManModelCheckAigWithHints( Aig_Man_t * pAigGlo, Gia_ParLlb_t * pPars );
130/*=== llbMan.c =======================================================*/
131extern void Llb_ManPrepareVarMap( Llb_Man_t * p );
132extern Llb_Man_t * Llb_ManStart( Aig_Man_t * pAigGlo, Aig_Man_t * pAig, Gia_ParLlb_t * pPars );
133extern void Llb_ManStop( Llb_Man_t * p );
134/*=== llbMatrix.c ====================================================*/
135extern void Llb_MtrVerifyMatrix( Llb_Mtr_t * p );
136extern Llb_Mtr_t * Llb_MtrCreate( Llb_Man_t * p );
137extern void Llb_MtrFree( Llb_Mtr_t * p );
138extern void Llb_MtrPrint( Llb_Mtr_t * p, int fOrder );
139extern void Llb_MtrPrintMatrixStats( Llb_Mtr_t * p );
140/*=== llbPart.c ======================================================*/
141extern Llb_Grp_t * Llb_ManGroupAlloc( Llb_Man_t * pMan );
142extern void Llb_ManGroupStop( Llb_Grp_t * p );
143extern void Llb_ManPrepareGroups( Llb_Man_t * pMan );
145extern Llb_Grp_t * Llb_ManGroupCreateFromCuts( Llb_Man_t * pMan, Vec_Int_t * vCut1, Vec_Int_t * vCut2 );
146extern void Llb_ManPrepareVarLimits( Llb_Man_t * p );
147/*=== llbPivot.c =====================================================*/
148extern int Llb_ManTracePaths( Aig_Man_t * p, Aig_Obj_t * pPivot );
149extern Vec_Int_t * Llb_ManMarkPivotNodes( Aig_Man_t * p, int fUseInternal );
150/*=== llbReach.c =====================================================*/
151extern int Llb_ManReachability( Llb_Man_t * p, Vec_Int_t * vHints, DdManager ** pddGlo );
152/*=== llbSched.c =====================================================*/
153extern void Llb_MtrSchedule( Llb_Mtr_t * p );
154
155/*=== llb2Bad.c ======================================================*/
156extern DdNode * Llb_BddComputeBad( Aig_Man_t * pInit, DdManager * dd, abctime TimeOut );
157extern DdNode * Llb_BddQuantifyPis( Aig_Man_t * pInit, DdManager * dd, DdNode * bFunc );
158/*=== llb2Core.c ======================================================*/
159extern DdNode * Llb_CoreComputeCube( DdManager * dd, Vec_Int_t * vVars, int fUseVarIndex, char * pValues );
160extern int Llb_CoreExperiment( Aig_Man_t * pInit, Aig_Man_t * pAig, Gia_ParLlb_t * pPars, Vec_Ptr_t * vResult, abctime TimeTarget );
161/*=== llb2Driver.c ======================================================*/
163extern Vec_Int_t * Llb_DriverCollectNs( Aig_Man_t * pAig, Vec_Int_t * vDriRefs );
164extern Vec_Int_t * Llb_DriverCollectCs( Aig_Man_t * pAig );
165extern DdNode * Llb_DriverPhaseCube( Aig_Man_t * pAig, Vec_Int_t * vDriRefs, DdManager * dd );
166extern DdManager * Llb_DriverLastPartition( Aig_Man_t * p, Vec_Int_t * vVarsNs, abctime TimeTarget );
167/*=== llb2Image.c ======================================================*/
168extern Vec_Ptr_t * Llb_ImgSupports( Aig_Man_t * p, Vec_Ptr_t * vDdMans, Vec_Int_t * vStart, Vec_Int_t * vStop, int fAddPis, int fVerbose );
169extern void Llb_ImgSchedule( Vec_Ptr_t * vSupps, Vec_Ptr_t ** pvQuant0, Vec_Ptr_t ** pvQuant1, int fVerbose );
170extern DdManager * Llb_ImgPartition( Aig_Man_t * p, Vec_Ptr_t * vLower, Vec_Ptr_t * vUpper, abctime TimeTarget );
171extern void Llb_ImgQuantifyFirst( Aig_Man_t * pAig, Vec_Ptr_t * vDdMans, Vec_Ptr_t * vQuant0, int fVerbose );
172extern void Llb_ImgQuantifyReset( Vec_Ptr_t * vDdMans );
173extern DdNode * Llb_ImgComputeImage( Aig_Man_t * pAig, Vec_Ptr_t * vDdMans, DdManager * dd, DdNode * bInit,
174 Vec_Ptr_t * vQuant0, Vec_Ptr_t * vQuant1, Vec_Int_t * vDriRefs,
175 abctime TimeTarget, int fBackward, int fReorder, int fVerbose );
176
177extern DdManager * Llb_NonlinImageStart( Aig_Man_t * pAig, Vec_Ptr_t * vLeaves, Vec_Ptr_t * vRoots, int * pVars2Q, int * pOrder, int fFirst, abctime TimeTarget );
178extern DdNode * Llb_NonlinImageCompute( DdNode * bCurrent, int fReorder, int fDrop, int fVerbose, int * pOrder );
179extern void Llb_NonlinImageQuit();
180
181/*=== llb3Image.c =======================================================*/
182extern DdNode * Llb_NonlinImage( Aig_Man_t * pAig, Vec_Ptr_t * vLeaves, Vec_Ptr_t * vRoots, int * pVars2Q,
183 DdManager * dd, DdNode * bCurrent, int fReorder, int fVerbose, int * pOrder );
184/*=== llb3Nonlin.c ======================================================*/
185extern DdNode * Llb_NonlinComputeInitState( Aig_Man_t * pAig, DdManager * dd );
186
187
188/*=== llb4Cex.c =======================================================*/
189extern Abc_Cex_t * Llb4_Nonlin4TransformCex( Aig_Man_t * pAig, Vec_Ptr_t * vStates, int iCexPo, int fVerbose );
190/*=== llb4Cluster.c =======================================================*/
191//extern void Llb_Nonlin4Cluster( Aig_Man_t * pAig, DdManager ** pdd, Vec_Int_t ** pvOrder, Vec_Ptr_t ** pvGroups, int nBddMax, int fVerbose );
192/*=== llb4Image.c =======================================================*/
193extern DdNode * Llb_Nonlin4Image( DdManager * dd, Vec_Ptr_t * vParts, DdNode * bCurrent, Vec_Int_t * vVars2Q );
194extern Vec_Ptr_t * Llb_Nonlin4Group( DdManager * dd, Vec_Ptr_t * vParts, Vec_Int_t * vVars2Q, int nSizeMax );
195/*=== llb4Map.c =========================================================*/
196//extern Vec_Int_t * Llb_AigMap( Aig_Man_t * pAig, int nLutSize, int nLutMin );
197/*=== llb4Nonlin.c ======================================================*/
198//extern int Llb_Nonlin4CoreReach( Aig_Man_t * pAig, Gia_ParLlb_t * pPars );
199/*=== llb4Sweep.c ======================================================*/
200extern void Llb4_Nonlin4Sweep( Aig_Man_t * pAig, int nSweepMax, int nClusterMax, DdManager ** pdd, Vec_Int_t ** pvOrder, Vec_Ptr_t ** pvGroups, int fVerbose );
201
202
204
205
206
207#endif
208
212
ABC_INT64_T abctime
Definition abc_global.h:332
#define ABC_NAMESPACE_HEADER_END
#define ABC_NAMESPACE_HEADER_START
NAMESPACES ///.
struct Aig_Obj_t_ Aig_Obj_t
Definition aig.h:51
typedefABC_NAMESPACE_HEADER_START struct Aig_Man_t_ Aig_Man_t
INCLUDES ///.
Definition aig.h:50
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
Definition bblif.c:37
Cube * p
Definition exorList.c:222
Llb_Grp_t * Llb_ManGroupCreateFromCuts(Llb_Man_t *pMan, Vec_Int_t *vCut1, Vec_Int_t *vCut2)
Definition llb1Group.c:312
DdManager * Llb_ImgPartition(Aig_Man_t *p, Vec_Ptr_t *vLower, Vec_Ptr_t *vUpper, abctime TimeTarget)
Definition llb2Image.c:183
Abc_Cex_t * Llb4_Nonlin4TransformCex(Aig_Man_t *pAig, Vec_Ptr_t *vStates, int iCexPo, int fVerbose)
DECLARATIONS ///.
Definition llb4Cex.c:47
void Llb_MtrPrint(Llb_Mtr_t *p, int fOrder)
Definition llb1Matrix.c:206
DdManager * Llb_DriverLastPartition(Aig_Man_t *p, Vec_Int_t *vVarsNs, abctime TimeTarget)
Definition llb2Driver.c:163
void Llb_MtrPrintMatrixStats(Llb_Mtr_t *p)
Definition llb1Matrix.c:236
void Llb_NonlinImageQuit()
Definition llb3Image.c:1075
void Llb_ManGroupStop(Llb_Grp_t *p)
Definition llb1Group.c:68
typedefABC_NAMESPACE_HEADER_START struct Llb_Man_t_ Llb_Man_t
INCLUDES ///.
Definition llbInt.h:47
DdNode * Llb_NonlinImage(Aig_Man_t *pAig, Vec_Ptr_t *vLeaves, Vec_Ptr_t *vRoots, int *pVars2Q, DdManager *dd, DdNode *bCurrent, int fReorder, int fVerbose, int *pOrder)
Definition llb3Image.c:884
Llb_Grp_t * Llb_ManGroupAlloc(Llb_Man_t *pMan)
DECLARATIONS ///.
Definition llb1Group.c:45
Vec_Int_t * Llb_ManDeriveConstraints(Aig_Man_t *p)
FUNCTION DECLARATIONS ///.
Definition llb1Constr.c:267
void Llb_ManPrepareVarLimits(Llb_Man_t *p)
Definition llb1Man.c:88
DdNode * Llb_NonlinImageCompute(DdNode *bCurrent, int fReorder, int fDrop, int fVerbose, int *pOrder)
Definition llb3Image.c:999
int Llb_ManModelCheckAig(Aig_Man_t *pAigGlo, Gia_ParLlb_t *pPars, Vec_Int_t *vHints, DdManager **pddGlo)
Definition llb1Core.c:112
struct Llb_Grp_t_ Llb_Grp_t
Definition llbInt.h:49
void Llb_ManPrepareVarMap(Llb_Man_t *p)
DECLARATIONS ///.
Definition llb1Man.c:45
void Llb_ManPrintEntries(Aig_Man_t *p, Vec_Int_t *vCands)
Definition llb1Constr.c:64
void Llb_ImgQuantifyFirst(Aig_Man_t *pAig, Vec_Ptr_t *vDdMans, Vec_Ptr_t *vQuant0, int fVerbose)
Definition llb2Image.c:288
Llb_Grp_t * Llb_ManGroupsCombine(Llb_Grp_t *p1, Llb_Grp_t *p2)
Definition llb1Group.c:251
DdManager * Llb_NonlinImageStart(Aig_Man_t *pAig, Vec_Ptr_t *vLeaves, Vec_Ptr_t *vRoots, int *pVars2Q, int *pOrder, int fFirst, abctime TimeTarget)
Definition llb3Image.c:963
Llb_Man_t * Llb_ManStart(Aig_Man_t *pAigGlo, Aig_Man_t *pAig, Gia_ParLlb_t *pPars)
Definition llb1Man.c:193
void Llb_ManPrepareGroups(Llb_Man_t *pMan)
Definition llb1Group.c:356
DdNode * Llb_Nonlin4Image(DdManager *dd, Vec_Ptr_t *vParts, DdNode *bCurrent, Vec_Int_t *vVars2Q)
Definition llb4Image.c:752
void Llb_ImgQuantifyReset(Vec_Ptr_t *vDdMans)
Definition llb2Image.c:340
void Llb_ImgSchedule(Vec_Ptr_t *vSupps, Vec_Ptr_t **pvQuant0, Vec_Ptr_t **pvQuant1, int fVerbose)
Definition llb2Image.c:122
int Llb_CoreExperiment(Aig_Man_t *pInit, Aig_Man_t *pAig, Gia_ParLlb_t *pPars, Vec_Ptr_t *vResult, abctime TimeTarget)
Definition llb2Core.c:694
int Llb_ManTracePaths(Aig_Man_t *p, Aig_Obj_t *pPivot)
Definition llb1Pivot.c:81
void Llb_ManDumpReached(DdManager *ddG, DdNode *bReached, char *pModel, char *pFileName)
Definition llb2Dump.c:63
void Llb_MtrVerifyMatrix(Llb_Mtr_t *p)
Definition llb1Matrix.c:115
void Llb_MtrFree(Llb_Mtr_t *p)
Definition llb1Matrix.c:321
Vec_Ptr_t * Llb_ManFlow(Aig_Man_t *p, Vec_Ptr_t *vSources, int *pnFlow)
Definition llb2Flow.c:762
DdNode * Llb_NonlinComputeInitState(Aig_Man_t *pAig, DdManager *dd)
Definition llb3Nonlin.c:214
int Llb_ManReachabilityWithHints(Llb_Man_t *p)
Vec_Int_t * Llb_DriverCollectCs(Aig_Man_t *pAig)
Definition llb2Driver.c:106
Vec_Ptr_t * Llb_Nonlin4Group(DdManager *dd, Vec_Ptr_t *vParts, Vec_Int_t *vVars2Q, int nSizeMax)
Definition llb4Image.c:806
Vec_Ptr_t * Llb_ImgSupports(Aig_Man_t *p, Vec_Ptr_t *vDdMans, Vec_Int_t *vStart, Vec_Int_t *vStop, int fAddPis, int fVerbose)
FUNCTION DEFINITIONS ///.
Definition llb2Image.c:48
Vec_Int_t * Llb_ManMarkPivotNodes(Aig_Man_t *p, int fUseInternal)
Definition llb1Pivot.c:220
void Llb_ManCluster(Llb_Mtr_t *p)
DdNode * Llb_DriverPhaseCube(Aig_Man_t *pAig, Vec_Int_t *vDriRefs, DdManager *dd)
Definition llb2Driver.c:128
int Llb_ManReachability(Llb_Man_t *p, Vec_Int_t *vHints, DdManager **pddGlo)
Definition llb1Reach.c:582
DdNode * Llb_BddComputeBad(Aig_Man_t *pInit, DdManager *dd, abctime TimeOut)
DECLARATIONS ///.
Definition llb2Bad.c:45
void Llb_MtrSchedule(Llb_Mtr_t *p)
Definition llb1Sched.c:222
Vec_Int_t * Llb_DriverCollectNs(Aig_Man_t *pAig, Vec_Int_t *vDriRefs)
Definition llb2Driver.c:78
DdNode * Llb_BddQuantifyPis(Aig_Man_t *pInit, DdManager *dd, DdNode *bFunc)
Definition llb2Bad.c:109
void Llb4_Nonlin4Sweep(Aig_Man_t *pAig, int nSweepMax, int nClusterMax, DdManager **pdd, Vec_Int_t **pvOrder, Vec_Ptr_t **pvGroups, int fVerbose)
Definition llb4Sweep.c:520
Llb_Mtr_t * Llb_MtrCreate(Llb_Man_t *p)
Definition llb1Matrix.c:410
struct Llb_Mtr_t_ Llb_Mtr_t
Definition llbInt.h:48
void Llb_ManStop(Llb_Man_t *p)
Definition llb1Man.c:130
DdNode * Llb_CoreComputeCube(DdManager *dd, Vec_Int_t *vVars, int fUseVarIndex, char *pValues)
FUNCTION DEFINITIONS ///.
Definition llb2Core.c:68
DdNode * Llb_ImgComputeImage(Aig_Man_t *pAig, Vec_Ptr_t *vDdMans, DdManager *dd, DdNode *bInit, Vec_Ptr_t *vQuant0, Vec_Ptr_t *vQuant1, Vec_Int_t *vDriRefs, abctime TimeTarget, int fBackward, int fReorder, int fVerbose)
Definition llb2Image.c:364
int Llb_ManModelCheckAigWithHints(Aig_Man_t *pAigGlo, Gia_ParLlb_t *pPars)
Definition llb1Hint.c:162
Vec_Int_t * Llb_DriverCountRefs(Aig_Man_t *p)
DECLARATIONS ///.
Definition llb2Driver.c:56
typedefABC_NAMESPACE_HEADER_START struct Gia_ParLlb_t_ Gia_ParLlb_t
INCLUDES ///.
Definition llb.h:41
Vec_Ptr_t * vNodes
Definition llbInt.h:100
int Id
Definition llbInt.h:97
Llb_Grp_t * pPrev
Definition llbInt.h:102
Vec_Ptr_t * vIns
Definition llbInt.h:98
Vec_Ptr_t * vOuts
Definition llbInt.h:99
Llb_Man_t * pMan
Definition llbInt.h:101
Llb_Grp_t * pNext
Definition llbInt.h:103
Llb_Mtr_t * pMatrix
Definition llbInt.h:62
Vec_Int_t * vGlo2Cs
Definition llbInt.h:70
Aig_Man_t * pAig
Definition llbInt.h:55
Vec_Ptr_t * vGroups
Definition llbInt.h:61
Vec_Int_t * vNs2Glo
Definition llbInt.h:68
Gia_ParLlb_t * pPars
Definition llbInt.h:53
DdManager * dd
Definition llbInt.h:56
Aig_Man_t * pAigGlo
Definition llbInt.h:54
Vec_Int_t * vVarBegs
Definition llbInt.h:65
Vec_Int_t * vCs2Glo
Definition llbInt.h:69
Vec_Int_t * vVarEnds
Definition llbInt.h:66
DdManager * ddG
Definition llbInt.h:57
Vec_Int_t * vVar2Obj
Definition llbInt.h:60
Vec_Int_t * vGlo2Ns
Definition llbInt.h:71
Vec_Ptr_t * vRings
Definition llbInt.h:64
DdManager * ddR
Definition llbInt.h:58
Vec_Int_t * vObj2Var
Definition llbInt.h:59
Llb_Man_t * pMan
Definition llbInt.h:89
int nCols
Definition llbInt.h:84
Llb_Grp_t ** pColGrps
Definition llbInt.h:86
int nPis
Definition llbInt.h:81
int nFfs
Definition llbInt.h:82
int nRows
Definition llbInt.h:83
char * pProdVars
Definition llbInt.h:91
int * pColSums
Definition llbInt.h:85
char ** pMatrix
Definition llbInt.h:88
int * pRowSums
Definition llbInt.h:87
int * pProdNums
Definition llbInt.h:92
typedefABC_NAMESPACE_HEADER_START struct Abc_Cex_t_ Abc_Cex_t
INCLUDES ///.
Definition utilCex.h:39
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
Definition vecPtr.h:42