1 | /**CHeaderFile***************************************************************** |
---|
2 | |
---|
3 | FileName [imcInt.h] |
---|
4 | |
---|
5 | PackageName [imc] |
---|
6 | |
---|
7 | Synopsis [Internal data type definitions and macros to handle the |
---|
8 | structures of the imc package.] |
---|
9 | |
---|
10 | Author [Jae-Young Jang <jjang@vlsi.colorado.edu>] |
---|
11 | |
---|
12 | Copyright [This file was created at the University of Colorado at Boulder. |
---|
13 | The University of Colorado at Boulder makes no warranty about the suitability |
---|
14 | of this software for any purpose. It is presented on an AS IS basis.] |
---|
15 | |
---|
16 | Revision [$Id:] |
---|
17 | |
---|
18 | ******************************************************************************/ |
---|
19 | |
---|
20 | #ifndef _IMCINT |
---|
21 | #define _IMCINT |
---|
22 | |
---|
23 | /*---------------------------------------------------------------------------*/ |
---|
24 | /* Nested includes */ |
---|
25 | /*---------------------------------------------------------------------------*/ |
---|
26 | |
---|
27 | #include "imc.h" |
---|
28 | #include "fsm.h" |
---|
29 | #include <string.h> |
---|
30 | |
---|
31 | /*---------------------------------------------------------------------------*/ |
---|
32 | /* Constant declarations */ |
---|
33 | /*---------------------------------------------------------------------------*/ |
---|
34 | |
---|
35 | /*---------------------------------------------------------------------------*/ |
---|
36 | /* Type declarations */ |
---|
37 | /*---------------------------------------------------------------------------*/ |
---|
38 | |
---|
39 | /*---------------------------------------------------------------------------*/ |
---|
40 | /* Structure declarations */ |
---|
41 | /*---------------------------------------------------------------------------*/ |
---|
42 | |
---|
43 | /**Struct********************************************************************** |
---|
44 | |
---|
45 | Synopsis [Information for a total system.] |
---|
46 | |
---|
47 | Description [Information for a total system.] |
---|
48 | |
---|
49 | SeeAlso [ImcInfoStruct] |
---|
50 | |
---|
51 | ******************************************************************************/ |
---|
52 | struct ImcSystemInfo{ |
---|
53 | st_table *latchNameTable; /* Names of latches in a system */ |
---|
54 | array_t *latchNameArray; |
---|
55 | array_t *latchNodeArray; |
---|
56 | array_t *nsMddIdArray; |
---|
57 | array_t *psMddIdArray; |
---|
58 | array_t *inputMddIdArray; |
---|
59 | array_t *TRArray; |
---|
60 | array_t *lowerTRArray; |
---|
61 | array_t *mvfArray; |
---|
62 | array_t *latchSizeArray; |
---|
63 | st_table *nsMddIdToIndex; |
---|
64 | st_table *psMddIdToIndex; |
---|
65 | array_t *includedPsMddId; |
---|
66 | array_t *includedNsMddId; |
---|
67 | array_t *includedLatchIndex; |
---|
68 | array_t *excludedPsMddId; |
---|
69 | array_t *excludedNsMddId; |
---|
70 | array_t *excludedLatchIndex; |
---|
71 | st_table *excludedPsMddIdTable; |
---|
72 | }; |
---|
73 | |
---|
74 | |
---|
75 | /**Struct********************************************************************** |
---|
76 | |
---|
77 | Synopsis [Information for an upper-bound approximate system.] |
---|
78 | |
---|
79 | Description [Information for an upper-bound approximate system.] |
---|
80 | |
---|
81 | SeeAlso [ImcInfoStruct] |
---|
82 | |
---|
83 | ******************************************************************************/ |
---|
84 | struct ImcUpperSystemInfo{ |
---|
85 | Imc_SystemInfo_t *systemInfo; |
---|
86 | mdd_t *careStates; |
---|
87 | array_t *fwdRealationArray; |
---|
88 | array_t *fwdSmoothVarsArray; |
---|
89 | array_t *bwdRealationArray; |
---|
90 | array_t *bwdMinimizedRealationArray; |
---|
91 | array_t *bwdSmoothVarsArray; |
---|
92 | |
---|
93 | }; |
---|
94 | |
---|
95 | /**Struct********************************************************************** |
---|
96 | |
---|
97 | Synopsis [Information for an upper-bound approximate system.] |
---|
98 | |
---|
99 | Description [Information for an upper-bound approximate system.] |
---|
100 | |
---|
101 | SeeAlso [ImcInfoStruct] |
---|
102 | |
---|
103 | ******************************************************************************/ |
---|
104 | struct ImcLowerSystemInfo{ |
---|
105 | Imc_SystemInfo_t *systemInfo; |
---|
106 | mdd_t *careStates; |
---|
107 | array_t *bwdRealationArray; |
---|
108 | array_t *bwdMinimizedRealationArray; |
---|
109 | array_t *bwdSmoothVarsArray; |
---|
110 | }; |
---|
111 | |
---|
112 | /**Struct********************************************************************** |
---|
113 | |
---|
114 | Synopsis [Information for nodes in opeerational graph.] |
---|
115 | |
---|
116 | Description [Information for nodes in opeerational graph.] |
---|
117 | |
---|
118 | SeeAlso [ImcInfoStruct] |
---|
119 | |
---|
120 | ******************************************************************************/ |
---|
121 | struct ImcNodeInfo{ |
---|
122 | boolean polarity; |
---|
123 | boolean isExact; |
---|
124 | mdd_t *upperSat; /* upper satisfying set */ |
---|
125 | mdd_t *lowerSat; /* lower satisfying set */ |
---|
126 | boolean upperDone; |
---|
127 | boolean lowerDone; |
---|
128 | mdd_t *propagatedGoalSet; |
---|
129 | mdd_t *propagatedGoalSetTrue; |
---|
130 | mdd_t *goalSet; |
---|
131 | mdd_t *goalSetTrue; |
---|
132 | mdd_t *pseudoEdges; |
---|
133 | Imc_VerificationResult answer; |
---|
134 | }; |
---|
135 | |
---|
136 | /**Struct********************************************************************** |
---|
137 | |
---|
138 | Synopsis [Information regarding the imc package.] |
---|
139 | |
---|
140 | Description [This is a higher level of information related to the imc |
---|
141 | verification.] |
---|
142 | |
---|
143 | SeeAlso [ImcSubsystemInfo] |
---|
144 | |
---|
145 | ******************************************************************************/ |
---|
146 | struct ImcInfoStruct{ |
---|
147 | /* General Info */ |
---|
148 | Ntk_Network_t *network; /* Corresponding network */ |
---|
149 | Fsm_Fsm_t *globalFsm; /* Global FSM */ |
---|
150 | boolean useLocalFsm; |
---|
151 | Imc_DcLevel dcLevel; /* Don't care level */ |
---|
152 | mdd_t *initialStates; /* Initial states */ |
---|
153 | Ctlp_FormulaClass formulaClass; /* ECTL, ACTL, MIXED, QuantifierFree */ |
---|
154 | mdd_t *modelCareStates; /* Global care states */ |
---|
155 | Imc_VerbosityLevel verbosity; /* Verbosity */ |
---|
156 | Imc_RefineMethod refine; /* Refinement method */ |
---|
157 | Imc_VerificationResult result; /* Verification Result */ |
---|
158 | mdd_manager *mddMgr; /* MDD Manager */ |
---|
159 | Imc_PartMethod partMethod; |
---|
160 | char *modelName; |
---|
161 | Hrc_Node_t *currentNode; |
---|
162 | |
---|
163 | /* Image, Preimage computation Info */ |
---|
164 | array_t *supportMddIdArray; /* don't free */ |
---|
165 | array_t *preQMddIdArray; /* don't free */ |
---|
166 | array_t *imgQMddIdArray; /* don't free */ |
---|
167 | |
---|
168 | /* Operational graph Info */ |
---|
169 | Imc_GraphType graphType; /* pDOG, nDOG, MOG */ |
---|
170 | st_table *nodeInfoTable; /* node info table */ |
---|
171 | boolean needLower; |
---|
172 | boolean needUpper; |
---|
173 | |
---|
174 | /* Incremental Verification dependent info */ |
---|
175 | Imc_SystemInfo_t *systemInfo; /* System info of total system */ |
---|
176 | int incrementalSize; /* Number of transition sub-relations |
---|
177 | to be refined at each refinement */ |
---|
178 | |
---|
179 | /* approximation and Dynamic Refinement dependent Info */ |
---|
180 | Imc_LowerMethod lowerMethod; /* Lower-bound approximation method */ |
---|
181 | Imc_UpperMethod upperMethod; /* Upper-bound approximation method */ |
---|
182 | Imc_UpperSystemInfo_t *upperSystemInfo; /* Upper-bound approximate system */ |
---|
183 | Imc_LowerSystemInfo_t *lowerSystemInfo; /* Lower-bound approximate system */ |
---|
184 | mdd_t *edges; /* for edge traversal refinement */ |
---|
185 | |
---|
186 | /* approximation and Static Refinement dependent Info */ |
---|
187 | Part_CMethod correlationMethod; |
---|
188 | array_t *staticRefineSchedule; /* Static refinement schedule */ |
---|
189 | }; |
---|
190 | |
---|
191 | /*---------------------------------------------------------------------------*/ |
---|
192 | /* Variable declarations */ |
---|
193 | /*---------------------------------------------------------------------------*/ |
---|
194 | |
---|
195 | |
---|
196 | /*---------------------------------------------------------------------------*/ |
---|
197 | /* Macro declarations */ |
---|
198 | /*---------------------------------------------------------------------------*/ |
---|
199 | |
---|
200 | |
---|
201 | /**AutomaticStart*************************************************************/ |
---|
202 | |
---|
203 | /*---------------------------------------------------------------------------*/ |
---|
204 | /* Function prototypes */ |
---|
205 | /*---------------------------------------------------------------------------*/ |
---|
206 | |
---|
207 | EXTERN array_t * ImcCreateScheduleArray(Ntk_Network_t *network, Ctlp_Formula_t *formula, boolean dynamicIncrease, Imc_RefineMethod refine, int verbosity, int incrementalSize, Part_CMethod correlationMethod); |
---|
208 | EXTERN int ImcModelCheckAtomicFormula(Imc_Info_t *imcInfo, Ctlp_Formula_t *formula); |
---|
209 | EXTERN int ImcModelCheckTrueFalseFormula(Imc_Info_t *imcInfo, Ctlp_Formula_t *formula, boolean isTrue); |
---|
210 | EXTERN int ImcModelCheckNotFormula(Imc_Info_t *imcInfo, Ctlp_Formula_t *formula, boolean isUpper); |
---|
211 | EXTERN int ImcModelCheckAndFormula(Imc_Info_t *imcInfo, Ctlp_Formula_t *formula, boolean isUpper); |
---|
212 | EXTERN void ImcPrintLatchInApproxSystem(Imc_Info_t *imcInfo); |
---|
213 | EXTERN void ImcNodeInfoTableFree(st_table *nodeInfoTable); |
---|
214 | |
---|
215 | /**AutomaticEnd***************************************************************/ |
---|
216 | |
---|
217 | #endif /* _IMCINT */ |
---|
218 | |
---|
219 | |
---|
220 | |
---|
221 | |
---|
222 | |
---|
223 | |
---|
224 | |
---|
225 | |
---|
226 | |
---|
227 | |
---|
228 | |
---|
229 | |
---|