ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
rwr.h
Go to the documentation of this file.
1
20
21#ifndef ABC__opt__rwr__rwr_h
22#define ABC__opt__rwr__rwr_h
23
24
28
29#include "base/abc/abc.h"
30#include "opt/cut/cut.h"
31
35
36
37
39
40
44
45#define RWR_LIMIT 1048576/4 // ((1 << 20)
46
47typedef struct Rwr_Man_t_ Rwr_Man_t;
48typedef struct Rwr_Node_t_ Rwr_Node_t;
49
51{
52 // internal lookups
53 int nFuncs; // number of four var functions
54 unsigned short * puCanons; // canonical forms
55 char * pPhases; // canonical phases
56 char * pPerms; // canonical permutations
57 unsigned char * pMap; // mapping of functions into class numbers
58 unsigned short * pMapInv; // mapping of classes into functions
59 char * pPractical; // practical NPN classes
60 char ** pPerms4; // four-var permutations
61 // node space
62 Vec_Ptr_t * vForest; // all the nodes
63 Rwr_Node_t ** pTable; // the hash table of nodes by their canonical form
64 Vec_Vec_t * vClasses; // the nodes of the equivalence classes
65 Extra_MmFixed_t * pMmNode; // memory for nodes and cuts
66 // statistical variables
67 int nTravIds; // the counter of traversal IDs
68 int nConsidered; // the number of nodes considered
69 int nAdded; // the number of nodes added to lists
70 int nClasses; // the number of NN classes
71 // the result of resynthesis
72 int fCompl; // indicates if the output of FF should be complemented
73 void * pGraph; // the decomposition tree (temporary)
74 Vec_Ptr_t * vFanins; // the fanins array (temporary)
75 Vec_Ptr_t * vFaninsCur; // the fanins array (temporary)
76 Vec_Int_t * vLevNums; // the array of levels (temporary)
77 Vec_Ptr_t * vNodesTemp; // the nodes in MFFC (temporary)
78 // node statistics
84 int nScores[222];
88 // runtime statistics
96};
97
98struct Rwr_Node_t_ // 24 bytes
99{
100 int Id; // ID
101 int TravId; // traversal ID
102 short nScore;
103 short nGain;
104 short nAdded;
105 unsigned uTruth : 16; // truth table
106 unsigned Volume : 8; // volume
107 unsigned Level : 6; // level
108 unsigned fUsed : 1; // mark
109 unsigned fExor : 1; // mark
110 Rwr_Node_t * p0; // first child
111 Rwr_Node_t * p1; // second child
112 Rwr_Node_t * pNext; // next in the table
113};
114
115// manipulation of complemented attributes
116static inline int Rwr_IsComplement( Rwr_Node_t * p ) { return (int )(((ABC_PTRUINT_T)p) & 01); }
117static inline Rwr_Node_t * Rwr_Regular( Rwr_Node_t * p ) { return (Rwr_Node_t *)((ABC_PTRUINT_T)(p) & ~01); }
118static inline Rwr_Node_t * Rwr_Not( Rwr_Node_t * p ) { return (Rwr_Node_t *)((ABC_PTRUINT_T)(p) ^ 01); }
119static inline Rwr_Node_t * Rwr_NotCond( Rwr_Node_t * p, int c ) { return (Rwr_Node_t *)((ABC_PTRUINT_T)(p) ^ (c)); }
120
124
128
129/*=== rwrDec.c ========================================================*/
130extern void Rwr_ManPreprocess( Rwr_Man_t * p );
131/*=== rwrEva.c ========================================================*/
132extern int Rwr_NodeRewrite( Rwr_Man_t * p, Cut_Man_t * pManCut, Abc_Obj_t * pNode, int fUpdateLevel, int fUseZeros, int fPlaceEnable );
133extern void Rwr_ScoresClean( Rwr_Man_t * p );
134extern void Rwr_ScoresReport( Rwr_Man_t * p );
135/*=== rwrLib.c ========================================================*/
136extern void Rwr_ManPrecompute( Rwr_Man_t * p );
137extern Rwr_Node_t * Rwr_ManAddVar( Rwr_Man_t * p, unsigned uTruth, int fPrecompute );
138extern Rwr_Node_t * Rwr_ManAddNode( Rwr_Man_t * p, Rwr_Node_t * p0, Rwr_Node_t * p1, int fExor, int Level, int Volume );
139extern int Rwr_ManNodeVolume( Rwr_Man_t * p, Rwr_Node_t * p0, Rwr_Node_t * p1 );
140extern void Rwr_ManIncTravId( Rwr_Man_t * p );
141/*=== rwrMan.c ========================================================*/
142extern Rwr_Man_t * Rwr_ManStart( int fPrecompute );
143extern void Rwr_ManStop( Rwr_Man_t * p );
144extern void Rwr_ManPrintStats( Rwr_Man_t * p );
145extern void Rwr_ManPrintStatsFile( Rwr_Man_t * p );
146extern void * Rwr_ManReadDecs( Rwr_Man_t * p );
148extern int Rwr_ManReadCompl( Rwr_Man_t * p );
149extern void Rwr_ManAddTimeCuts( Rwr_Man_t * p, abctime Time );
150extern void Rwr_ManAddTimeUpdate( Rwr_Man_t * p, abctime Time );
151extern void Rwr_ManAddTimeTotal( Rwr_Man_t * p, abctime Time );
152/*=== rwrPrint.c ========================================================*/
153extern void Rwr_ManPrint( Rwr_Man_t * p );
154/*=== rwrUtil.c ========================================================*/
155extern void Rwr_ManWriteToArray( Rwr_Man_t * p );
156extern void Rwr_ManLoadFromArray( Rwr_Man_t * p, int fVerbose );
157extern void Rwr_ManWriteToFile( Rwr_Man_t * p, char * pFileName );
158extern void Rwr_ManLoadFromFile( Rwr_Man_t * p, char * pFileName );
159extern void Rwr_ListAddToTail( Rwr_Node_t ** ppList, Rwr_Node_t * pNode );
160extern char * Rwr_ManGetPractical( Rwr_Man_t * p );
161
162
163
165
166
167
168#endif
169
173
struct Abc_Obj_t_ Abc_Obj_t
Definition abc.h:116
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
struct Cut_ManStruct_t_ Cut_Man_t
BASIC TYPES ///.
Definition cut.h:48
Cube * p
Definition exorList.c:222
struct Extra_MmFixed_t_ Extra_MmFixed_t
Definition extra.h:147
void Rwr_ManAddTimeUpdate(Rwr_Man_t *p, abctime Time)
Definition rwrMan.c:277
Rwr_Node_t * Rwr_ManAddVar(Rwr_Man_t *p, unsigned uTruth, int fPrecompute)
Definition rwrLib.c:253
Rwr_Node_t * Rwr_ManAddNode(Rwr_Man_t *p, Rwr_Node_t *p0, Rwr_Node_t *p1, int fExor, int Level, int Volume)
Definition rwrLib.c:206
int Rwr_ManNodeVolume(Rwr_Man_t *p, Rwr_Node_t *p0, Rwr_Node_t *p1)
Definition rwrLib.c:330
Rwr_Man_t * Rwr_ManStart(int fPrecompute)
DECLARATIONS ///.
Definition rwrMan.c:47
char * Rwr_ManGetPractical(Rwr_Man_t *p)
Definition rwrUtil.c:640
void Rwr_ManWriteToFile(Rwr_Man_t *p, char *pFileName)
Definition rwrUtil.c:524
void Rwr_ScoresClean(Rwr_Man_t *p)
Definition rwrEva.c:504
void Rwr_ManAddTimeCuts(Rwr_Man_t *p, abctime Time)
Definition rwrMan.c:261
void Rwr_ManAddTimeTotal(Rwr_Man_t *p, abctime Time)
Definition rwrMan.c:293
void Rwr_ScoresReport(Rwr_Man_t *p)
Definition rwrEva.c:550
int Rwr_ManReadCompl(Rwr_Man_t *p)
Definition rwrMan.c:245
void Rwr_ManPreprocess(Rwr_Man_t *p)
MACRO DEFINITIONS ///.
Definition rwrDec.c:49
void Rwr_ManPrintStats(Rwr_Man_t *p)
Definition rwrMan.c:143
struct Rwr_Man_t_ Rwr_Man_t
Definition rwr.h:47
void Rwr_ManPrint(Rwr_Man_t *p)
Definition rwrPrint.c:237
void Rwr_ManPrintStatsFile(Rwr_Man_t *p)
Definition rwrMan.c:190
void Rwr_ManWriteToArray(Rwr_Man_t *p)
FUNCTION DEFINITIONS ///.
Definition rwrUtil.c:426
void Rwr_ManStop(Rwr_Man_t *p)
Definition rwrMan.c:109
int Rwr_NodeRewrite(Rwr_Man_t *p, Cut_Man_t *pManCut, Abc_Obj_t *pNode, int fUpdateLevel, int fUseZeros, int fPlaceEnable)
FUNCTION DEFINITIONS ///.
Definition rwrEva.c:59
void * Rwr_ManReadDecs(Rwr_Man_t *p)
Definition rwrMan.c:213
void Rwr_ManPrecompute(Rwr_Man_t *p)
FUNCTION DEFINITIONS ///.
Definition rwrLib.c:48
struct Rwr_Node_t_ Rwr_Node_t
Definition rwr.h:48
void Rwr_ManIncTravId(Rwr_Man_t *p)
Definition rwrLib.c:350
Vec_Ptr_t * Rwr_ManReadLeaves(Rwr_Man_t *p)
Definition rwrMan.c:229
void Rwr_ManLoadFromFile(Rwr_Man_t *p, char *pFileName)
Definition rwrUtil.c:562
void Rwr_ManLoadFromArray(Rwr_Man_t *p, int fVerbose)
Definition rwrUtil.c:472
void Rwr_ListAddToTail(Rwr_Node_t **ppList, Rwr_Node_t *pNode)
Definition rwrUtil.c:619
int nAdded
Definition rwr.h:69
int nNodesConsidered
Definition rwr.h:79
int nClasses
Definition rwr.h:70
int nFuncs
Definition rwr.h:53
int nCutsGood
Definition rwr.h:85
abctime timeCut
Definition rwr.h:90
abctime timeEval
Definition rwr.h:92
Vec_Ptr_t * vFanins
Definition rwr.h:74
int nNodesBeg
Definition rwr.h:82
int nNodesRewritten
Definition rwr.h:80
void * pGraph
Definition rwr.h:73
abctime timeRes
Definition rwr.h:91
unsigned short * puCanons
Definition rwr.h:54
Vec_Ptr_t * vForest
Definition rwr.h:62
Vec_Int_t * vLevNums
Definition rwr.h:76
int nNodesGained
Definition rwr.h:81
char * pPhases
Definition rwr.h:55
abctime timeUpdate
Definition rwr.h:94
Rwr_Node_t ** pTable
Definition rwr.h:63
char * pPractical
Definition rwr.h:59
Vec_Ptr_t * vFaninsCur
Definition rwr.h:75
abctime timeTotal
Definition rwr.h:95
int nNodesEnd
Definition rwr.h:83
char ** pPerms4
Definition rwr.h:60
Vec_Vec_t * vClasses
Definition rwr.h:64
int nSubgraphs
Definition rwr.h:87
int nTravIds
Definition rwr.h:67
int nCutsBad
Definition rwr.h:86
char * pPerms
Definition rwr.h:56
abctime timeStart
Definition rwr.h:89
abctime timeMffc
Definition rwr.h:93
int nScores[222]
Definition rwr.h:84
Vec_Ptr_t * vNodesTemp
Definition rwr.h:77
int fCompl
Definition rwr.h:72
Extra_MmFixed_t * pMmNode
Definition rwr.h:65
unsigned char * pMap
Definition rwr.h:57
int nConsidered
Definition rwr.h:68
unsigned short * pMapInv
Definition rwr.h:58
Rwr_Node_t * p1
Definition rwr.h:111
int Id
Definition rwr.h:100
unsigned fUsed
Definition rwr.h:108
short nGain
Definition rwr.h:103
short nAdded
Definition rwr.h:104
unsigned Volume
Definition rwr.h:106
Rwr_Node_t * p0
Definition rwr.h:110
short nScore
Definition rwr.h:102
unsigned fExor
Definition rwr.h:109
unsigned Level
Definition rwr.h:107
Rwr_Node_t * pNext
Definition rwr.h:112
int TravId
Definition rwr.h:101
unsigned uTruth
Definition rwr.h:105
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
Definition vecPtr.h:42
typedefABC_NAMESPACE_HEADER_START struct Vec_Vec_t_ Vec_Vec_t
INCLUDES ///.
Definition vecVec.h:42