| 1 | /* |
| 2 | * FileName: vcs_acc_user.h |
| 3 | * |
| 4 | * Facility: Verilog Compiled Simulator (VCS) |
| 5 | * |
| 6 | * Functional Description: |
| 7 | * Defines acc-type routines that are not part of the OVI standard. |
| 8 | * |
| 9 | * Notes: |
| 10 | * Include "acc_user.h" before this file (to get type definitions.) |
| 11 | * |
| 12 | * Copyright (c) 1997-98 by Synopsys, Inc. All rights reserved. |
| 13 | */ |
| 14 | |
| 15 | #ifndef VCS_ACC_USER_H |
| 16 | #define VCS_ACC_USER_H |
| 17 | |
| 18 | #ifdef __cplusplus |
| 19 | extern "C" { |
| 20 | #endif |
| 21 | |
| 22 | /*------------------------------- object types ------------------------------*/ |
| 23 | #define accPath 206 |
| 24 | #define accPrimPath 232 |
| 25 | #define accTermPath 238 |
| 26 | #define accModTermPath 240 |
| 27 | #define accTermModPath 242 |
| 28 | #define accCollapsedNet 304 |
| 29 | #define accVlogSimPath 310 |
| 30 | #define accExpandedPath 312 |
| 31 | #define accSwXlInvisibleNet 314 |
| 32 | #define accAcceleratedNet 316 |
| 33 | #define accRemoval 378 |
| 34 | #define accRecrem 379 |
| 35 | #define accAssignmentStat 526 |
| 36 | #define accContAssignStat 527 |
| 37 | #define accNullStat 528 |
| 38 | #define accDelayStat 530 |
| 39 | #define accAssignDelayStat 532 |
| 40 | #define accRtlDelayStat 534 |
| 41 | #define accAssignEventStat 536 |
| 42 | #define accAssignMultiStat 537 |
| 43 | #define accRtlEventStat 538 |
| 44 | #define accRtlMultiStat 539 |
| 45 | #define accGenEventStat 540 |
| 46 | #define accDisableStat 542 |
| 47 | #define accAssignStat 544 |
| 48 | #define accDeassignStat 546 |
| 49 | #define accForceStat 548 |
| 50 | #define accReleaseStat 550 |
| 51 | #define accInitialStat 552 |
| 52 | #define accAlwaysStat 554 |
| 53 | #define accAtEventStat 556 |
| 54 | #define accUnnamedBeginStat 558 |
| 55 | #define accNamedBeginStat 560 |
| 56 | #define accUnnamedForkStat 562 |
| 57 | #define accNamedForkStat 564 |
| 58 | #define accIfStat 566 |
| 59 | #define accCaseStat 568 |
| 60 | #define accCaseZStat 570 |
| 61 | #define accCaseXStat 572 |
| 62 | #define accForeverStat 574 |
| 63 | #define accRepeatStat 576 |
| 64 | #define accWhileStat 578 |
| 65 | #define accForStat 580 |
| 66 | #define accWaitStat 582 |
| 67 | #define accStringVar 647 |
| 68 | #define accChar 650 |
| 69 | #define accInt 652 |
| 70 | #define accBitType 654 |
| 71 | #define accByte 656 |
| 72 | #define accShortInt 658 |
| 73 | #define accLongInt 660 |
| 74 | #define accLogic 662 |
| 75 | #define accModPathHasIfnone 715 |
| 76 | #define accRealWire 697 |
| 77 | #define accOvaUnit 698 |
| 78 | #define accAutomatic 802 |
| 79 | |
| 80 | /*------------------ parameter values for acc_configure() -------------------*/ |
| 81 | #define accSpecitemScope 7 |
| 82 | #define accWarnNestedLoconn 9 |
| 83 | #define accWarnNestedHiconn 10 |
| 84 | #define accMinMultiplier 12 |
| 85 | #define accTypMultiplier 13 |
| 86 | #define accMaxMultiplier 14 |
| 87 | #define accAttrDelimStr 15 |
| 88 | #define accDelayCount 16 |
| 89 | #define accDelayArrays 18 |
| 90 | #define accUserErrorString 20 |
| 91 | |
| 92 | /*------------------------------ product types ------------------------------*/ |
| 93 | #define accVerilog 5 |
| 94 | |
| 95 | |
| 96 | /*** this structure is provided to allow compilation of pli applications ***/ |
| 97 | /*** containing s_tfcell arrays; these arrays are not used by VCS ***/ |
| 98 | typedef struct t_tfcell { |
| 99 | short type; |
| 100 | short data; |
| 101 | int (*checktf)(); |
| 102 | int (*sizetf)(); |
| 103 | int (*calltf)(); |
| 104 | int (*misctf)(); |
| 105 | char *tfname; |
| 106 | char *fill1; |
| 107 | char *fill2; |
| 108 | int fill3; |
| 109 | struct t_tfcell *fill4; |
| 110 | struct t_tfcell *fill5; |
| 111 | char *fill6; |
| 112 | int fill7; |
| 113 | } s_tfcell; |
| 114 | |
| 115 | #define usertask 1 |
| 116 | #define userfunction 2 |
| 117 | #define userrealfunction 3 |
| 118 | |
| 119 | #define accMemory 700 /* array of registers */ |
| 120 | #define accMda 701 /* array of registers */ |
| 121 | #define accTimeMda 702 /* array of registers */ |
| 122 | #define accIntegerMda 703 /* array of registers */ |
| 123 | #define accRealMda 704 /* array of registers */ |
| 124 | #define accRegMda 705 /* array of registers */ |
| 125 | #define accMdaWor 706 |
| 126 | #define accMdaWand 707 |
| 127 | #define accMdaTri 708 |
| 128 | #define accMdaTri0 709 |
| 129 | #define accMdaTri1 710 |
| 130 | #define accMdaTriand 711 |
| 131 | #define accMdaTrior 712 |
| 132 | #define accMdaTrireg 713 |
| 133 | #define accMdaSupply0 714 |
| 134 | #define accMdaSupply1 715 |
| 135 | #define accMdaWire 716 |
| 136 | #define accCharMda 717 |
| 137 | #define accByteMda 718 |
| 138 | #define accBitMda 719 |
| 139 | #define accIntMda 720 |
| 140 | #define accLongIntMda 721 |
| 141 | #define accShortIntMda 722 |
| 142 | #define accLogicMda 723 |
| 143 | |
| 144 | /* Added for Veralite and System Verilog */ |
| 145 | |
| 146 | #define accEnum 724 |
| 147 | #define accRegEnum 725 |
| 148 | #define accCharEnum 726 |
| 149 | #define accByteEnum 727 |
| 150 | #define accBitEnum 728 |
| 151 | #define accIntEnum 729 |
| 152 | #define accIntegerEnum 730 |
| 153 | #define accShortIntEnum 731 |
| 154 | #define accLongIntEnum 732 |
| 155 | #define accLogicEnum 733 |
| 156 | #define accEnumMda 734 |
| 157 | #define accUnion 735 |
| 158 | #define accStructure 736 |
| 159 | #define accUnionMda 737 |
| 160 | #define accStructureMda 738 |
| 161 | #define accInterface 739 |
| 162 | #define accInterfaceInstance 740 |
| 163 | #define accMemoryWord 741 |
| 164 | #define accMdaWord 742 |
| 165 | #define accAggregateWord 743 |
| 166 | #define accClass 744 |
| 167 | #define accStringMda 745 |
| 168 | #define accClassMda 746 |
| 169 | |
| 170 | /* System Science requires that acc_next_driver() return |
| 171 | behavioral drivers if this configuration parameter is true */ |
| 172 | #define accBehavDrivers 701 |
| 173 | |
| 174 | |
| 175 | /* Extended Location Structure */ |
| 176 | typedef struct t_location2 { |
| 177 | int line_no; |
| 178 | char *filename; |
| 179 | int tag; |
| 180 | } s_location2, *p_location2; |
| 181 | |
| 182 | /* Source File Info Structure */ |
| 183 | typedef struct vcs_srcfile_info_t { |
| 184 | char *SourceFileName; |
| 185 | int SourceFileTag; |
| 186 | int StartLineNum; |
| 187 | int EndLineNum; |
| 188 | } vcs_srcfile_info_s, *vcs_srcfile_info_p; |
| 189 | |
| 190 | |
| 191 | /* this structure is needed to support memory callback, needed by INTEL */ |
| 192 | |
| 193 | /*--------------- structure passed to callback routine for VCL --------------*/ |
| 194 | typedef struct t_mem_vc_record |
| 195 | { |
| 196 | int vc_reason; |
| 197 | int vc_hightime; |
| 198 | int vc_lowtime; |
| 199 | char *user_data; |
| 200 | char* p_mem_value; |
| 201 | int mem_word_index; |
| 202 | } s_mem_vc_record, *p_mem_vc_record; |
| 203 | |
| 204 | #define memory_value_change 6 |
| 205 | |
| 206 | |
| 207 | |
| 208 | #ifndef VCS_ARGS |
| 209 | #define VCS_ARGS_DEFINED_HERE |
| 210 | |
| 211 | #if defined(__STDC__) || defined(__cplusplus) || defined(_AIX) |
| 212 | # define VCS_ARGS(p) p |
| 213 | #else |
| 214 | # define VCS_ARGS(p) () |
| 215 | #endif |
| 216 | |
| 217 | #endif /* VCS_ARGS */ |
| 218 | |
| 219 | |
| 220 | /* Source File Info Routines */ |
| 221 | extern vcs_srcfile_info_p acc_mod_sfi_fetch VCS_ARGS ((handle handleModule)); |
| 222 | |
| 223 | /* Next Routines */ |
| 224 | extern handle acc_next_signal_driver VCS_ARGS ((handle handleObj, handle handleDriver)); |
| 225 | extern handle acc_next_signal_driver_i VCS_ARGS ((handle handleObj, handle handleDriver)); |
| 226 | extern handle acc_next_vpddriver VCS_ARGS ((handle handleObj, handle handleDriver)); |
| 227 | |
| 228 | extern int acc_is_active_driver VCS_ARGS ((handle handleDriver)); |
| 229 | |
| 230 | /* Line Callback Routines */ |
| 231 | extern int acc_mod_lcb_enabled VCS_ARGS((void)); |
| 232 | extern void acc_mod_lcb_add VCS_ARGS ((handle handleModule, void (*consumer)(), char *user_data)); |
| 233 | extern void acc_mod_lcb_del VCS_ARGS ((handle handleModule, void (*consumer)(), char *user_data)); |
| 234 | extern p_location acc_mod_lcb_fetch VCS_ARGS ((handle handleModule)); |
| 235 | extern p_location2 acc_mod_lcb_fetch2 VCS_ARGS ((handle handleModule)); |
| 236 | |
| 237 | /* Interface to $lsi_dumpports() tasks */ |
| 238 | typedef enum { USE_DUMPPORTS_FORMAT_LSI, USE_DUMPPORTS_FORMAT_IEEE } lsi_dumpports_format_type; |
| 239 | extern int acc_lsi_dumpports_call VCS_ARGS ((handle instance, char *filename)); |
| 240 | extern int acc_lsi_dumpports_close VCS_ARGS ((handle instance, char *filename)); |
| 241 | extern void acc_lsi_dumpports_misc VCS_ARGS ((int data, int reason)); |
| 242 | extern int acc_lsi_dumpports_setformat VCS_ARGS ((lsi_dumpports_format_type format)); |
| 243 | extern int acc_lsi_dumpports_off VCS_ARGS ((char *fname)); |
| 244 | extern int acc_lsi_dumpports_on VCS_ARGS ((char *fname)); |
| 245 | extern int acc_lsi_dumpports_limit VCS_ARGS ((unsigned long filesize, char *fname)); |
| 246 | extern int acc_lsi_dumpports_flush VCS_ARGS ((char *fname)); |
| 247 | extern int acc_lsi_dumpports_all VCS_ARGS ((char *fname)); |
| 248 | |
| 249 | /* Co-simulation */ |
| 250 | extern int acci_getnextlongtime VCS_ARGS ((unsigned *lotime, unsigned *hitime)); |
| 251 | extern int acc_is_vhdl_scope(handle handleModule); |
| 252 | extern int acc_has_vhdl_parent(handle handleModule); |
| 253 | extern void* acc_fetch_vhpi_handle(handle handleModule); |
| 254 | |
| 255 | extern int acc_stability VCS_ARGS ((handle handleModule)); |
| 256 | |
| 257 | /* Compaq specific routines */ |
| 258 | extern handle vcs_next_driver VCS_ARGS ((handle handleObj, handle handleDriver, int *driverType)); |
| 259 | extern unsigned int vcs_convert_string_to_strength_value VCS_ARGS ((char *value_str)); |
| 260 | extern char *vcs_convert_strength_value_to_string VCS_ARGS ((unsigned int value)); |
| 261 | extern unsigned int vcs_fetch_scalar_strength_value VCS_ARGS ((handle h)); |
| 262 | extern unsigned int vcs_fetch_scalar_port_strength_value VCS_ARGS ((handle h)); |
| 263 | |
| 264 | /* Tharas specific routines */ |
| 265 | extern int vcs_random(void); |
| 266 | extern int vcs_random_const_seed(int seed); |
| 267 | extern int vcs_random_seed(int *seed); |
| 268 | extern int vcs_dist_uniform(int *seed,int start,int end); |
| 269 | extern int vcs_dist_normal(int *seed,int mean,int standard_deviation); |
| 270 | extern int vcs_dist_exponential(int *seed,int mean); |
| 271 | extern int vcs_dist_poisson(int *seed,int mean); |
| 272 | |
| 273 | /* debussy specific routines */ |
| 274 | extern void vcs_free_handle(handle phandle); |
| 275 | extern void vcs_use_free( int useFree); |
| 276 | |
| 277 | /* other customer-specific routines */ |
| 278 | extern handle acc_handle_mem_by_fullname(const char *name); |
| 279 | extern void acc_readmem(handle mem, const char *memfile, int frmt); |
| 280 | |
| 281 | |
| 282 | /* ********************************************************************** */ |
| 283 | /* BEGIN: SUPPORT FOR RTX */ |
| 284 | /* ********************************************************************** */ |
| 285 | extern unsigned char *acc_getmem_value_pointer VCS_ARGS((handle memhand)); |
| 286 | extern void acc_getmem_bitstr VCS_ARGS((handle memhand,char *retBitStr,int row, int start,int len)); |
| 287 | extern void acc_setmem_bitstr VCS_ARGS((handle memhand,char *bitStrValue,int row,int start)); |
| 288 | extern void acc_getmem_hexstr VCS_ARGS((handle memhand,char *retHexStr,int row,int start,int len)); |
| 289 | extern void acc_setmem_hexstr VCS_ARGS((handle memhand,char *hexStrValue,int row,int start)); |
| 290 | extern void acc_setmem_int VCS_ARGS((handle memhand,int value,int row,int start,int len)); |
| 291 | extern int acc_getmem_int VCS_ARGS((handle memhand,int row, int start, int len)); |
| 292 | extern void acc_clearmem_int VCS_ARGS((handle)); |
| 293 | extern int acc_getmem_size VCS_ARGS((handle)); |
| 294 | extern void acc_getmem_range VCS_ARGS((handle memhand, int* p_left_index, int* p_right_index)); |
| 295 | extern void acc_getmem_word_range VCS_ARGS((handle memhand, int* minoflsbmsb, int* len)); |
| 296 | extern int acc_getmem_word_int VCS_ARGS((handle mem_handle, int row)) ; |
| 297 | |
| 298 | /* for MDA support */ |
| 299 | |
| 300 | extern void acc_get_mda_range VCS_ARGS((handle mdaHandle,int* dim, int** plndx, int** prindx)); |
| 301 | extern void acc_get_mda_word_range VCS_ARGS((handle mdaHandle,int* size, int* msb, int* lsb)); |
| 302 | extern void acc_getmda_bitstr VCS_ARGS((handle mdaHandle,char *retBitStr,int* dimArray, |
| 303 | int start, int len)); |
| 304 | |
| 305 | extern void acc_setmda_bitstr VCS_ARGS((handle mdaHandle,char *bitStrValue, |
| 306 | int* dimArray, int start)); |
| 307 | extern char* acc_fetch_paramval_str(handle); |
| 308 | extern char *acc_fetch_lodriver_value(handle, char*); |
| 309 | extern handle acc_get_parent_port_and_index(handle, int*); |
| 310 | extern char *acc_vcl_check(handle, void (*consumer)()); |
| 311 | extern int acc_vcl_disable(handle, void (*consumer)(), char *); |
| 312 | extern int acc_vcl_enable(handle, void (*consumer)(), char *); |
| 313 | extern void acc_fetch_module_definition_location(p_location, handle); |
| 314 | extern handle acc_handle_connected_net(handle); |
| 315 | extern handle acc_get_driver_loads_fusion(handle, handle, int, int); |
| 316 | extern handle acc_next_signal_driver_sub(handle, handle, int); |
| 317 | extern int acc_same_dest(handle, handle); |
| 318 | extern void acc_set_user_buffer_size(int); |
| 319 | extern handle acc_handle_path_AH(handle, handle); |
| 320 | extern handle acc_handle_path_old(handle, handle); |
| 321 | |
| 322 | /* this function tells if the module that you have got is actually an ova unit*/ |
| 323 | extern int acc_is_ova_unit(handle); |
| 324 | |
| 325 | |
| 326 | /* ********************************************************************** */ |
| 327 | /* END: SUPPORT FOR RTX */ |
| 328 | /* ********************************************************************** */ |
| 329 | |
| 330 | /* V2K signed support */ |
| 331 | extern int acc_handle_is_signed VCS_ARGS((handle handleObj)); |
| 332 | /* END V2K signed support */ |
| 333 | |
| 334 | extern handle acc_handle_ccond VCS_ARGS((handle handleTchk)); |
| 335 | extern char *acc_decompile VCS_ARGS((handle handleObj)); |
| 336 | extern handle acc_handle_scond VCS_ARGS((handle handleTchk)); |
| 337 | |
| 338 | extern void acc_mem_vcl_add VCS_ARGS((handle object_p, int (*consumer)(), char *user_data)); |
| 339 | extern void acc_mem_vcl_delete VCS_ARGS((handle object_p, int (*consumer)(), char *user_data)); |
| 340 | |
| 341 | /* vcl bit flag definitions */ |
| 342 | #define vcl_strength_flag 1 |
| 343 | #define vcl_verilog_flag 2 |
| 344 | #define vcl_compact_flag 8 |
| 345 | |
| 346 | /* test whether strength information is requested for vcl */ |
| 347 | #define vcl_setstr_m(flags_) ( flags_ |= vcl_strength_flag ) |
| 348 | #define vcl_clearstr_m(flags_) ( flags_ &= ~vcl_strength_flag ) |
| 349 | #define vcl_isstr_m(flags_) ( flags_ & vcl_strength_flag ) |
| 350 | |
| 351 | /* test whether Verilog information is requested for vcl */ |
| 352 | #define vcl_setvl_m(flags_) ( flags_ |= vcl_verilog_flag ) |
| 353 | #define vcl_clearvl_m(flags_) ( flags_ &= ~vcl_verilog_flag ) |
| 354 | #define vcl_isvl_m(flags_) ( flags_ & vcl_verilog_flag ) |
| 355 | |
| 356 | /* test whether vcl trigger is compact or normal */ |
| 357 | #define vcl_setcompact_m(flags_) ( flags_ |= vcl_compact_flag ) |
| 358 | #define vcl_clearcompact_m(flags_) ( flags_ &= ~vcl_compact_flag ) |
| 359 | #define vcl_iscompact_m(flags_) ( flags_ & vcl_compact_flag ) |
| 360 | |
| 361 | |
| 362 | #ifdef VCS_ARGS_DEFINED_HERE |
| 363 | #undef VCS_ARGS_DEFINED_HERE |
| 364 | #undef VCS_ARGS |
| 365 | #endif |
| 366 | |
| 367 | #ifdef __cplusplus |
| 368 | } /* extern "C" */ |
| 369 | #endif |
| 370 | |
| 371 | #endif /* VCS_ACC_USER_H */ |