ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
cut.h
Go to the documentation of this file.
1
20
21#ifndef ABC__opt__cut__cut_h
22#define ABC__opt__cut__cut_h
23
24
28
32
33
34
36
37
38#define CUT_SIZE_MIN 3 // the min K of the K-feasible cut computation
39#define CUT_SIZE_MAX 12 // the max K of the K-feasible cut computation
40
41#define CUT_SHIFT 8 // the number of bits for storing latch number in the cut leaves
42#define CUT_MASK 0xFF // the mask to get the stored latch number
43
47
52
54{
55 int nVarsMax; // the max cut size ("k" of the k-feasible cuts)
56 int nKeepMax; // the max number of cuts kept at a node
57 int nIdsMax; // the max number of IDs of cut objects
58 int nBitShift; // the number of bits used for the latch counter of an edge
59 int nCutSet; // the number of nodes in the cut set
60 int fTruth; // compute truth tables
61 int fFilter; // filter dominated cuts
62 int fSeq; // compute sequential cuts
63 int fDrop; // drop cuts on the fly
64 int fDag; // compute only DAG cuts
65 int fTree; // compute only tree cuts
66 int fGlobal; // compute only global cuts
67 int fLocal; // compute only local cuts
68 int fRecord; // record the cut computation flow
69 int fRecordAig; // record the cut functions
70 int fFancy; // perform fancy computations
71 int fMap; // computes delay of FPGA mapping with cuts
72 int fAdjust; // removed useless fanouts of XORs/MUXes
73 int fNpnSave; // enables dumping 6-input truth tables
74 int fVerbose; // the verbosiness flag
75};
76
78{
79 unsigned Num0 : 11; // temporary number
80 unsigned Num1 : 11; // temporary number
81 unsigned fSimul : 1; // the value of cut's output at 000.. pattern
82 unsigned fCompl : 1; // the cut is complemented
83 unsigned nVarsMax : 4; // the max number of vars [4-6]
84 unsigned nLeaves : 4; // the number of leaves [4-6]
85 unsigned uSign; // the signature
86 unsigned uCanon0; // the canonical form
87 unsigned uCanon1; // the canonical form
88 Cut_Cut_t * pNext; // the next cut in the list
89 int pLeaves[0]; // the array of leaves
90};
91
92static inline int Cut_CutReadLeaveNum( Cut_Cut_t * p ) { return p->nLeaves; }
93static inline int * Cut_CutReadLeaves( Cut_Cut_t * p ) { return p->pLeaves; }
94static inline unsigned * Cut_CutReadTruth( Cut_Cut_t * p ) { return (unsigned *)(p->pLeaves + p->nVarsMax); }
95static inline void Cut_CutWriteTruth( Cut_Cut_t * p, unsigned * puTruth ) {
96 int i;
97 for ( i = (p->nVarsMax <= 5) ? 0 : ((1 << (p->nVarsMax - 5)) - 1); i >= 0; i-- )
98 p->pLeaves[p->nVarsMax + i] = (int)puTruth[i];
99}
100
104
108
109/*=== cutApi.c ==========================================================*/
110extern Cut_Cut_t * Cut_NodeReadCutsNew( Cut_Man_t * p, int Node );
111extern Cut_Cut_t * Cut_NodeReadCutsOld( Cut_Man_t * p, int Node );
112extern Cut_Cut_t * Cut_NodeReadCutsTemp( Cut_Man_t * p, int Node );
113extern void Cut_NodeWriteCutsNew( Cut_Man_t * p, int Node, Cut_Cut_t * pList );
114extern void Cut_NodeWriteCutsOld( Cut_Man_t * p, int Node, Cut_Cut_t * pList );
115extern void Cut_NodeWriteCutsTemp( Cut_Man_t * p, int Node, Cut_Cut_t * pList );
116extern void Cut_NodeSetTriv( Cut_Man_t * p, int Node );
117extern void Cut_NodeTryDroppingCuts( Cut_Man_t * p, int Node );
118extern void Cut_NodeFreeCuts( Cut_Man_t * p, int Node );
119/*=== cutCut.c ==========================================================*/
120extern void Cut_CutPrint( Cut_Cut_t * pCut, int fSeq );
121extern void Cut_CutPrintList( Cut_Cut_t * pList, int fSeq );
122extern int Cut_CutCountList( Cut_Cut_t * pList );
123/*=== cutMan.c ==========================================================*/
124extern Cut_Man_t * Cut_ManStart( Cut_Params_t * pParams );
125extern void Cut_ManStop( Cut_Man_t * p );
126extern void Cut_ManPrintStats( Cut_Man_t * p );
127extern void Cut_ManPrintStatsToFile( Cut_Man_t * p, char * pFileName, abctime TimeTotal );
128extern void Cut_ManSetFanoutCounts( Cut_Man_t * p, Vec_Int_t * vFanCounts );
129extern void Cut_ManSetNodeAttrs( Cut_Man_t * p, Vec_Int_t * vFanCounts );
130extern int Cut_ManReadVarsMax( Cut_Man_t * p );
133extern void Cut_ManIncrementDagNodes( Cut_Man_t * p );
134/*=== cutNode.c ==========================================================*/
135extern Cut_Cut_t * Cut_NodeComputeCuts( Cut_Man_t * p, int Node, int Node0, int Node1, int fCompl0, int fCompl1, int fTriv, int TreeCode );
136extern Cut_Cut_t * Cut_NodeUnionCuts( Cut_Man_t * p, Vec_Int_t * vNodes );
137extern Cut_Cut_t * Cut_NodeUnionCutsSeq( Cut_Man_t * p, Vec_Int_t * vNodes, int CutSetNum, int fFirst );
138extern int Cut_ManMappingArea_rec( Cut_Man_t * p, int Node );
139/*=== cutSeq.c ==========================================================*/
140extern void Cut_NodeComputeCutsSeq( Cut_Man_t * p, int Node, int Node0, int Node1, int fCompl0, int fCompl1, int nLat0, int nLat1, int fTriv, int CutSetNum );
141extern void Cut_NodeNewMergeWithOld( Cut_Man_t * p, int Node );
142extern int Cut_NodeTempTransferToNew( Cut_Man_t * p, int Node, int CutSetNum );
143extern void Cut_NodeOldTransferToNew( Cut_Man_t * p, int Node );
144/*=== cutOracle.c ==========================================================*/
145extern Cut_Oracle_t * Cut_OracleStart( Cut_Man_t * pMan );
146extern void Cut_OracleStop( Cut_Oracle_t * p );
147extern void Cut_OracleSetFanoutCounts( Cut_Oracle_t * p, Vec_Int_t * vFanCounts );
148extern int Cut_OracleReadDrop( Cut_Oracle_t * p );
149extern void Cut_OracleNodeSetTriv( Cut_Oracle_t * p, int Node );
150extern Cut_Cut_t * Cut_OracleComputeCuts( Cut_Oracle_t * p, int Node, int Node0, int Node1, int fCompl0, int fCompl1 );
151extern void Cut_OracleTryDroppingCuts( Cut_Oracle_t * p, int Node );
152/*=== cutTruth.c ==========================================================*/
153extern void Cut_TruthNCanonicize( Cut_Cut_t * pCut );
154/*=== cutPre22.c ==========================================================*/
155extern void Cut_CellPrecompute();
156extern void Cut_CellLoad();
157extern int Cut_CellIsRunning();
158extern void Cut_CellDumpToFile();
159extern int Cut_CellTruthLookup( unsigned * pTruth, int nVars );
160
161
162
164
165
166
167#endif
168
172
ABC_INT64_T abctime
Definition abc_global.h:332
#define ABC_NAMESPACE_HEADER_END
#define ABC_NAMESPACE_HEADER_START
NAMESPACES ///.
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
Definition bblif.c:37
void Cut_OracleTryDroppingCuts(Cut_Oracle_t *p, int Node)
Definition cutOracle.c:407
void Cut_CutPrintList(Cut_Cut_t *pList, int fSeq)
Definition cutCut.c:308
void Cut_ManIncrementDagNodes(Cut_Man_t *p)
Definition cutMan.c:309
void Cut_ManPrintStatsToFile(Cut_Man_t *p, char *pFileName, abctime TimeTotal)
Definition cutMan.c:204
void Cut_NodeTryDroppingCuts(Cut_Man_t *p, int Node)
Definition cutApi.c:162
Cut_Cut_t * Cut_NodeReadCutsOld(Cut_Man_t *p, int Node)
Definition cutApi.c:63
Cut_Cut_t * Cut_NodeComputeCuts(Cut_Man_t *p, int Node, int Node0, int Node1, int fCompl0, int fCompl1, int fTriv, int TreeCode)
Definition cutNode.c:369
int Cut_NodeTempTransferToNew(Cut_Man_t *p, int Node, int CutSetNum)
Definition cutSeq.c:197
Cut_Cut_t * Cut_OracleComputeCuts(Cut_Oracle_t *p, int Node, int Node0, int Node1, int fCompl0, int fCompl1)
Definition cutOracle.c:320
struct Cut_ParamsStruct_t_ Cut_Params_t
Definition cut.h:51
void Cut_NodeSetTriv(Cut_Man_t *p, int Node)
Definition cutApi.c:145
void Cut_CellPrecompute()
Definition cutPre22.c:233
void Cut_NodeComputeCutsSeq(Cut_Man_t *p, int Node, int Node0, int Node1, int fCompl0, int fCompl1, int nLat0, int nLat1, int fTriv, int CutSetNum)
Definition cutSeq.c:72
Cut_Cut_t * Cut_NodeUnionCuts(Cut_Man_t *p, Vec_Int_t *vNodes)
Definition cutNode.c:678
void Cut_ManPrintStats(Cut_Man_t *p)
Definition cutMan.c:155
void Cut_ManSetNodeAttrs(Cut_Man_t *p, Vec_Int_t *vFanCounts)
Definition cutMan.c:245
Cut_Oracle_t * Cut_OracleStart(Cut_Man_t *pMan)
FUNCTION DEFINITIONS ///.
Definition cutOracle.c:73
int Cut_CutCountList(Cut_Cut_t *pList)
Definition cutCut.c:166
void Cut_NodeWriteCutsTemp(Cut_Man_t *p, int Node, Cut_Cut_t *pList)
Definition cutApi.c:129
int Cut_OracleReadDrop(Cut_Oracle_t *p)
Definition cutOracle.c:176
int Cut_CellTruthLookup(unsigned *pTruth, int nVars)
Definition cutPre22.c:940
void Cut_CellLoad()
FUNCTION DEFINITIONS ///.
Definition cutPre22.c:169
void Cut_NodeWriteCutsOld(Cut_Man_t *p, int Node, Cut_Cut_t *pList)
Definition cutApi.c:113
Cut_Man_t * Cut_ManStart(Cut_Params_t *pParams)
FUNCTION DEFINITIONS ///.
Definition cutMan.c:47
void Cut_NodeWriteCutsNew(Cut_Man_t *p, int Node, Cut_Cut_t *pList)
Definition cutApi.c:97
struct Cut_ManStruct_t_ Cut_Man_t
BASIC TYPES ///.
Definition cut.h:48
Cut_Cut_t * Cut_NodeReadCutsNew(Cut_Man_t *p, int Node)
MACRO DEFINITIONS ///.
Definition cutApi.c:45
void Cut_OracleSetFanoutCounts(Cut_Oracle_t *p, Vec_Int_t *vFanCounts)
Definition cutOracle.c:160
void Cut_CutPrint(Cut_Cut_t *pCut, int fSeq)
Definition cutCut.c:276
int Cut_CellIsRunning()
Definition cutPre22.c:819
void Cut_TruthNCanonicize(Cut_Cut_t *pCut)
Definition cutTruth.c:85
Vec_Int_t * Cut_ManReadNodeAttrs(Cut_Man_t *p)
Definition cutMan.c:293
Cut_Cut_t * Cut_NodeUnionCutsSeq(Cut_Man_t *p, Vec_Int_t *vNodes, int CutSetNum, int fFirst)
Definition cutNode.c:795
void Cut_NodeNewMergeWithOld(Cut_Man_t *p, int Node)
Definition cutSeq.c:165
void Cut_OracleNodeSetTriv(Cut_Oracle_t *p, int Node)
Definition cutOracle.c:192
struct Cut_OracleStruct_t_ Cut_Oracle_t
Definition cut.h:49
void Cut_OracleStop(Cut_Oracle_t *p)
Definition cutOracle.c:127
void Cut_NodeFreeCuts(Cut_Man_t *p, int Node)
Definition cutApi.c:184
void Cut_CellDumpToFile()
Definition cutPre22.c:835
void Cut_ManSetFanoutCounts(Cut_Man_t *p, Vec_Int_t *vFanCounts)
Definition cutMan.c:229
struct Cut_CutStruct_t_ Cut_Cut_t
Definition cut.h:50
int Cut_ManReadVarsMax(Cut_Man_t *p)
Definition cutMan.c:261
Cut_Params_t * Cut_ManReadParams(Cut_Man_t *p)
Definition cutMan.c:277
int Cut_ManMappingArea_rec(Cut_Man_t *p, int Node)
Definition cutNode.c:544
void Cut_NodeOldTransferToNew(Cut_Man_t *p, int Node)
Definition cutSeq.c:217
void Cut_ManStop(Cut_Man_t *p)
Definition cutMan.c:124
Cut_Cut_t * Cut_NodeReadCutsTemp(Cut_Man_t *p, int Node)
Definition cutApi.c:80
Cube * p
Definition exorList.c:222
unsigned uCanon0
Definition cut.h:86
unsigned uCanon1
Definition cut.h:87
unsigned nVarsMax
Definition cut.h:83
unsigned Num1
Definition cut.h:80
unsigned Num0
Definition cut.h:79
int pLeaves[0]
Definition cut.h:89
unsigned fCompl
Definition cut.h:82
unsigned fSimul
Definition cut.h:81
unsigned uSign
Definition cut.h:85
unsigned nLeaves
Definition cut.h:84
Cut_Cut_t * pNext
Definition cut.h:88
DECLARATIONS ///.
Definition cutOracle.c:31