1 /******************************************************************************
2 * veriuser.h
3 *
4 * IEEE 1364 1995 Verilog HDL Programming Language Interface (PLI).
5 *
6 * This file contains the constant definitions, structure definitions, and
7 * routine declarations used by the Verilog PLI procedural interface TF
8 * task/function routines.
9 *
10 * The file should be included with all C routines that use the PLI
11 * task/function routines.
12 ******************************************************************************/
13 #ifndef VERIUSER_H
14 #define VERIUSER_H
15 
16 /*---------------------------------------------------------------------------*/
17 /*------------------------------- definitions -------------------------------*/
18 /*---------------------------------------------------------------------------*/
19 
20 /*----------------------------- general defines -----------------------------*/
21 #define bool                   int
22 #define true                   1
23 #define TRUE                   1
24 #define false                  0
25 #define FALSE                  0
26 #define null                   0L
27 
28 /*---------------------- defines for error interception ---------------------*/
29 #define ERR_MESSAGE            1
30 #define ERR_WARNING            2
31 #define ERR_ERROR              3
32 #define ERR_INTERNAL           4
33 #define ERR_SYSTEM             5
34 
35 /*-------------- values for reason parameter to misctf routines -------------*/
36 
37 #define reason_checktf         1
38 #define REASON_CHECKTF         reason_checktf
39 #define reason_sizetf          2
40 #define REASON_SIZETF          reason_sizetf
41 #define reason_calltf          3
42 #define REASON_CALLTF          reason_calltf
43 #define reason_save            4
44 #define REASON_SAVE            reason_save
45 #define reason_restart         5
46 #define REASON_RESTART         reason_restart
47 #define reason_disable         6
48 #define REASON_DISABLE         reason_disable
49 #define reason_paramvc         7
50 #define REASON_PARAMVC         reason_paramvc
51 #define reason_synch           8
52 #define REASON_SYNCH           reason_synch
53 #define reason_finish          9
54 #define REASON_FINISH          reason_finish
55 #define reason_reactivate     10
56 #define REASON_REACTIVATE      reason_reactivate
57 #define reason_rosynch        11
58 #define REASON_ROSYNCH         reason_rosynch
59 #define reason_paramdrc       15
60 #define REASON_PARAMDRC        reason_paramdrc
61 #define reason_endofcompile   16
62 #define REASON_ENDOFCOMPILE    reason_endofcompile
63 #define reason_scope          17
64 #define REASON_SCOPE          reason_scope
65 #define reason_interactive    18
66 #define REASON_INTERACTIVE     reason_interactive
67 #define reason_reset          19
68 #define REASON_RESET           reason_reset
69 #define reason_endofreset     20
70 #define REASON_ENDOFRESET      reason_endofreset
71 #define reason_force          21
72 #define REASON_FORCE           reason_force
73 #define reason_release        22
74 #define REASON_RELEASE         reason_release
75 #define reason_startofsave    27
76 #define REASON_STARTOFSAVE reason_startofsave
77 #define reason_startofrestart 28
78 #define REASON_STARTOFRESTART reason_startofrestart
79 #define REASON_MAX            28
80 
81 /*-- types used by tf_typep() and expr_type field in tf_exprinfo structure --*/
82 #define tf_nullparam           0
83 #define TF_NULLPARAM           tf_nullparam
84 #define tf_string              1
85 #define TF_STRING              tf_string
86 #define tf_readonly           10
87 #define TF_READONLY            tf_readonly
88 #define tf_readwrite          11
89 #define TF_READWRITE           tf_readwrite
90 #define tf_rwbitselect        12
91 #define TF_RWBITSELECT         tf_rwbitselect
92 #define tf_rwpartselect       13
93 #define TF_RWPARTSELECT        tf_rwpartselect
94 #define tf_rwmemselect        14
95 #define TF_RWMEMSELECT         tf_rwmemselect
96 #define tf_readonlyreal       15
97 #define TF_READONLYREAL        tf_readonlyreal
98 #define tf_readwritereal      16
99 #define TF_READWRITEREAL       tf_readwritereal
100 
101 /*---------- types used by node_type field in tf_nodeinfo structure ---------*/
102 #define tf_null_node         100
103 #define TF_NULL_NODE           tf_null_node
104 #define tf_reg_node          101
105 #define TF_REG_NODE            tf_reg_node
106 #define tf_integer_node      102
107 #define TF_INTEGER_NODE        tf_integer_node
108 #define tf_time_node         103
109 #define TF_TIME_NODE           tf_time_node
110 #define tf_netvector_node    104
111 #define TF_NETVECTOR_NODE      tf_netvector_node
112 #define tf_netscalar_node    105
113 #define TF_NETSCALAR_NODE      tf_netscalar_node
114 #define tf_memory_node       106
115 #define TF_MEMORY_NODE         tf_memory_node
116 #define tf_real_node         107
117 #define TF_REAL_NODE           tf_real_node
118 
119 /*---------------------------------------------------------------------------*/
120 /*-------------------------- structure definitions --------------------------*/
121 /*---------------------------------------------------------------------------*/
122 
123 /*----- structure used with tf_exprinfo() to get expression information -----*/
124 typedef struct t_tfexprinfo
125 {
126   short expr_type;
127   short padding;
128   struct t_vecval *expr_value_p;
129   double real_value;
130   char *expr_string;
131   int expr_ngroups;
132   int expr_vec_size;
133   int expr_sign;
134   int expr_lhs_select;
135   int expr_rhs_select;
136 } s_tfexprinfo, *p_tfexprinfo;
137 
138 /*------- structure for use with tf_nodeinfo() to get node information ------*/
139 typedef struct t_tfnodeinfo
140 {
141   short node_type;
142   short padding;
143   union
144     {
145       struct t_vecval *vecval_p;
146       struct t_strengthval *strengthval_p;
147       char *memoryval_p;
148       double *real_val_p;
149     } node_value;
150   char *node_symbol;
151   int node_ngroups;
152   int node_vec_size;
153   int node_sign;
154   int node_ms_index;
155   int node_ls_index;
156   int node_mem_size;
157   int node_lhs_element;
158   int node_rhs_element;
159   int *node_handle;
160 } s_tfnodeinfo, *p_tfnodeinfo;
161 
162 /*--------------------- data structure of vector values ---------------------*/
163 typedef struct t_vecval
164 {
165   int avalbits;
166   int bvalbits;
167 } s_vecval, *p_vecval;
168 
169 /*--------------- data structure of scalar net strength values --------------*/
170 typedef struct t_strengthval
171 {
172     int strength0;
173     int strength1;
174 } s_strengthval, *p_strengthval;
175 
176 /*---------------------------------------------------------------------------*/
177 /*--------------------------- routine definitions ---------------------------*/
178 /*---------------------------------------------------------------------------*/
179 #if defined(__STDC__) || defined(__cplusplus)
180 
181 #ifndef PROTO_PARAMS
182 #define PROTO_PARAMS(params) params
183 #define DEFINED_PROTO_PARAMS
184 #endif
185 #ifndef EXTERN
186 #define EXTERN
187 #define DEFINED_EXTERN
188 #endif
189 
190 #else
191 
192 #ifndef PROTO_PARAMS
193 #define PROTO_PARAMS(params) (/* nothing */)
194 #define DEFINED_PROTO_PARAMS
195 #endif
196 #ifndef EXTERN
197 #define EXTERN extern
198 #define DEFINED_EXTERN
199 #endif
200 
201 #endif /* __STDC__ */
202 
203 EXTERN void         io_mcdprintf PROTO_PARAMS((int mcd, char *format, ...));
204 EXTERN void         io_printf PROTO_PARAMS((char *format, ...));
205 EXTERN char        *mc_scan_plusargs PROTO_PARAMS((char *plusarg));
206 EXTERN void         tf_add_long PROTO_PARAMS((int *aof_lowtime1, int *aof_hightime1, int lowtime2, int hightime2));
207 EXTERN int          tf_asynchoff PROTO_PARAMS((void));
208 EXTERN int          tf_asynchon PROTO_PARAMS((void));
209 EXTERN int          tf_clearalldelays PROTO_PARAMS((void));
210 EXTERN int          tf_compare_long PROTO_PARAMS((unsigned int low1, unsigned int high1, unsigned int low2, unsigned int high2));
211 EXTERN int          tf_copypvc_flag PROTO_PARAMS((int nparam));
212 EXTERN void         tf_divide_long PROTO_PARAMS((int *aof_low1, int *aof_high1, int low2, int high2));
213 EXTERN int          tf_dofinish PROTO_PARAMS((void));
214 EXTERN int          tf_dostop PROTO_PARAMS((void));
215 EXTERN int          tf_error PROTO_PARAMS((char *fmt, ...));
216 EXTERN int          tf_evaluatep PROTO_PARAMS((int pnum));
217 EXTERN p_tfexprinfo tf_exprinfo PROTO_PARAMS((int pnum, p_tfexprinfo pinfo));
218 EXTERN char        *tf_getcstringp PROTO_PARAMS((int nparam));
219 EXTERN char        *tf_getinstance PROTO_PARAMS((void));
220 EXTERN int          tf_getlongp PROTO_PARAMS((int *aof_highvalue, int pnum));
221 EXTERN int          tf_getlongtime PROTO_PARAMS((int *aof_hightime));
222 EXTERN int          tf_getnextlongtime PROTO_PARAMS((int *aof_lowtime, int *aof_hightime));
223 EXTERN int          tf_getp PROTO_PARAMS((int pnum));
224 EXTERN int          tf_getpchange PROTO_PARAMS((int nparam));
225 EXTERN double       tf_getrealp PROTO_PARAMS((int pnum));
226 EXTERN double       tf_getrealtime PROTO_PARAMS((void));
227 EXTERN int          tf_gettime PROTO_PARAMS((void));
228 EXTERN int          tf_gettimeprecision PROTO_PARAMS((void));
229 EXTERN int          tf_gettimeunit PROTO_PARAMS((void));
230 EXTERN char        *tf_getworkarea PROTO_PARAMS((void));
231 EXTERN int          tf_iasynchoff PROTO_PARAMS((char *inst));
232 EXTERN int          tf_iasynchon PROTO_PARAMS((char *inst));
233 EXTERN int          tf_iclearalldelays PROTO_PARAMS((char *inst));
234 EXTERN int          tf_icopypvc_flag PROTO_PARAMS((int nparam, char *inst));
235 EXTERN int          tf_ievaluatep PROTO_PARAMS((int pnum, char *inst));
236 EXTERN p_tfexprinfo tf_iexprinfo PROTO_PARAMS((int pnum, p_tfexprinfo pinfo, char *inst));
237 EXTERN char        *tf_igetcstringp PROTO_PARAMS((int nparam, char *inst));
238 EXTERN int          tf_igetlongp PROTO_PARAMS((int *aof_highvalue, int pnum, char *inst));
239 EXTERN int          tf_igetlongtime PROTO_PARAMS((int *aof_hightime, char *inst));
240 EXTERN int          tf_igetp PROTO_PARAMS((int pnum, char *inst));
241 EXTERN int          tf_igetpchange PROTO_PARAMS((int nparam, char *inst));
242 EXTERN double       tf_igetrealp PROTO_PARAMS((int pnum, char *inst));
243 EXTERN double       tf_igetrealtime PROTO_PARAMS((char *inst));
244 EXTERN int          tf_igettime PROTO_PARAMS((char *inst));
245 EXTERN int          tf_igettimeprecision PROTO_PARAMS((char *inst));
246 EXTERN int          tf_igettimeunit PROTO_PARAMS((char *inst));
247 EXTERN char        *tf_igetworkarea PROTO_PARAMS((char *inst));
248 EXTERN char        *tf_imipname PROTO_PARAMS((char *cell));
249 EXTERN int          tf_imovepvc_flag PROTO_PARAMS((int nparam, char *inst));
250 EXTERN p_tfnodeinfo tf_inodeinfo PROTO_PARAMS((int pnum, p_tfnodeinfo pinfo, char *inst));
251 EXTERN int          tf_inump PROTO_PARAMS((char *inst));
252 EXTERN int          tf_ipropagatep PROTO_PARAMS((int pnum, char *inst));
253 EXTERN int          tf_iputlongp PROTO_PARAMS((int pnum, int lowvalue, int highvalue, char *inst));
254 EXTERN int          tf_iputp PROTO_PARAMS((int pnum, int value, char *inst));
255 EXTERN int          tf_iputrealp PROTO_PARAMS((int pnum, double value, char *inst));
256 EXTERN int          tf_irosynchronize PROTO_PARAMS((char *inst));
257 EXTERN int          tf_isetdelay PROTO_PARAMS((int delay, char *inst));
258 EXTERN int          tf_isetlongdelay PROTO_PARAMS((int lowdelay, int highdelay, char *inst));
259 EXTERN int          tf_isetrealdelay PROTO_PARAMS((double realdelay, char *inst));
260 EXTERN int          tf_isizep PROTO_PARAMS((int pnum, char *inst));
261 EXTERN char        *tf_ispname PROTO_PARAMS((char *cell));
262 EXTERN int          tf_istrdelputp PROTO_PARAMS((int nparam, int bitlength, int format_char, char *value_p, int delay, int delaytype, char *inst));
263 EXTERN char        *tf_istrgetp PROTO_PARAMS((int pnum, int format_char, char *inst));
264 EXTERN int          tf_istrlongdelputp PROTO_PARAMS((int nparam, int bitlength, int format_char, char *value_p, int lowdelay, int highdelay, int delaytype, char *inst));
265 EXTERN int          tf_istrrealdelputp PROTO_PARAMS((int nparam, int bitlength, int format_char, char *value_p, double realdelay, int delaytype, char *inst));
266 EXTERN int          tf_isynchronize PROTO_PARAMS((char *inst));
267 EXTERN int          tf_itestpvc_flag PROTO_PARAMS((int nparam, char *inst));
268 EXTERN int          tf_itypep PROTO_PARAMS((int pnum, char *inst));
269 EXTERN void         tf_long_to_real PROTO_PARAMS((int int_lo, int int_hi, double *aof_real));
270 EXTERN char         *tf_longtime_tostr PROTO_PARAMS((int lowtime, int hightime));
271 EXTERN int          tf_message PROTO_PARAMS((int level, char *facility, char *messno, char *message, ...));
272 EXTERN char        *tf_mipname PROTO_PARAMS((void));
273 EXTERN int          tf_movepvc_flag PROTO_PARAMS((int nparam));
274 EXTERN void         tf_multiply_long PROTO_PARAMS((int *aof_low1, int *aof_high1, int low2, int high2));
275 EXTERN p_tfnodeinfo tf_nodeinfo PROTO_PARAMS((int pnum, p_tfnodeinfo pinfo));
276 EXTERN int          tf_nump PROTO_PARAMS((void));
277 EXTERN int          tf_propagatep PROTO_PARAMS((int pnum));
278 EXTERN int          tf_putlongp PROTO_PARAMS((int pnum, int lowvalue, int highvalue));
279 EXTERN int          tf_putp PROTO_PARAMS((int pnum, int value));
280 EXTERN int          tf_putrealp PROTO_PARAMS((int pnum, double value));
281 EXTERN int          tf_read_restart PROTO_PARAMS((char *blockptr, int blocklen));
282 EXTERN void         tf_real_to_long PROTO_PARAMS((double real, int *aof_int_lo, int *aof_int_hi));
283 EXTERN int          tf_rosynchronize PROTO_PARAMS((void));
284 EXTERN void         tf_scale_longdelay PROTO_PARAMS((char *cell, int delay_lo, int delay_hi, int *aof_delay_lo, int *aof_delay_hi));
285 EXTERN void         tf_scale_realdelay PROTO_PARAMS((char *cell, double realdelay, double *aof_realdelay));
286 EXTERN int          tf_setdelay PROTO_PARAMS((int delay));
287 EXTERN int          tf_setlongdelay PROTO_PARAMS((int lowdelay, int highdelay));
288 EXTERN int          tf_setrealdelay PROTO_PARAMS((double realdelay));
289 EXTERN int          tf_setworkarea PROTO_PARAMS((char *workarea));
290 EXTERN int          tf_sizep PROTO_PARAMS((int pnum));
291 EXTERN char        *tf_spname PROTO_PARAMS((void));
292 EXTERN int          tf_strdelputp PROTO_PARAMS((int nparam, int bitlength, int format_char, char *value_p, int delay, int delaytype));
293 EXTERN char        *tf_strgetp PROTO_PARAMS((int pnum, int format_char));
294 EXTERN char        *tf_strgettime PROTO_PARAMS((void));
295 EXTERN int          tf_strlongdelputp PROTO_PARAMS((int nparam, int bitlength, int format_char, char *value_p, int lowdelay, int highdelay, int delaytype));
296 EXTERN int          tf_strrealdelputp PROTO_PARAMS((int nparam, int bitlength, int format_char, char *value_p, double realdelay, int delaytype));
297 EXTERN void         tf_subtract_long PROTO_PARAMS((int *aof_lowtime1, int *aof_hightime1, int lowtime2, int hightime2));
298 EXTERN int          tf_synchronize PROTO_PARAMS((void));
299 EXTERN int          tf_testpvc_flag PROTO_PARAMS((int nparam));
300 EXTERN int          tf_text PROTO_PARAMS((char *fmt, ...));
301 EXTERN int          tf_typep PROTO_PARAMS((int pnum));
302 EXTERN void         tf_unscale_longdelay PROTO_PARAMS((char *cell, int delay_lo, int delay_hi, int *aof_delay_lo, int *aof_delay_hi));
303 EXTERN void         tf_unscale_realdelay PROTO_PARAMS((char *cell, double realdelay, double *aof_realdelay));
304 EXTERN int          tf_warning PROTO_PARAMS((char *fmt, ...));
305 EXTERN int          tf_write_save PROTO_PARAMS((char *blockptr, int blocklen));
306 
307 #ifdef DEFINED_PROTO_PARAMS
308 #undef DEFINED_PROTO_PARAMS
309 #undef  PROTO_PARAMS
310 #endif
311 
312 #ifdef DEFINED_EXTERN
313 #undef DEFINED_EXTERN
314 #undef EXTERN
315 #endif
316 
317 #endif /* VERIUSER_H */
318