00001 #ifndef __VECTOR_H__
00002 #define __VECTOR_H__
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00026 #include <stdio.h>
00027
00028 #include "defines.h"
00029
00030
00032 void vector_init_ulong(
00033 vector* vec,
00034 ulong** value,
00035 ulong data_l,
00036 ulong data_h,
00037 bool owns_value,
00038 int width,
00039 int type
00040 );
00041
00043 void vector_init_r64(
00044 vector* vec,
00045 rv64* value,
00046 double data,
00047 char* str,
00048 bool owns_value,
00049 int type
00050 );
00051
00053 void vector_init_r32(
00054 vector* vec,
00055 rv32* value,
00056 float data,
00057 char* str,
00058 bool owns_value,
00059 int type
00060 );
00061
00063 vector* vector_create(
00064 int width,
00065 int type,
00066 int data_type,
00067 bool data
00068 );
00069
00071 void vector_copy(
00072 const vector* from_vec,
00073 vector* to_vec
00074 );
00075
00080 void vector_copy_range(
00081 vector* to_vec,
00082 const vector* from_vec,
00083 int lsb
00084 );
00085
00087 void vector_clone(
00088 const vector* from_vec,
00089 vector** to_vec
00090 );
00091
00093 void vector_db_write(
00094 vector* vec,
00095 FILE* file,
00096 bool write_data,
00097 bool net
00098 );
00099
00101 void vector_db_read(
00102 vector** vec,
00103 char** line
00104 );
00105
00107 void vector_db_merge(
00108 vector* base,
00109 char** line,
00110 bool same
00111 );
00112
00114 void vector_merge(
00115 vector* base,
00116 vector* other
00117 );
00118
00120 int vector_get_eval_a(
00121 vector* vec,
00122 int index
00123 );
00124
00126 int vector_get_eval_b(
00127 vector* vec,
00128 int index
00129 );
00130
00132 int vector_get_eval_c(
00133 vector* vec,
00134 int index
00135 );
00136
00138 int vector_get_eval_d(
00139 vector* vec,
00140 int index
00141 );
00142
00144 int vector_get_eval_ab_count(
00145 vector* vec
00146 );
00147
00149 int vector_get_eval_abc_count(
00150 vector* vec
00151 );
00152
00154 int vector_get_eval_abcd_count(
00155 vector* vec
00156 );
00157
00159 char* vector_get_toggle01_ulong(
00160 ulong** value,
00161 int width
00162 );
00163
00165 char* vector_get_toggle10_ulong(
00166 ulong** value,
00167 int width
00168 );
00169
00171 void vector_display_toggle01_ulong(
00172 ulong** value,
00173 int width,
00174 FILE* ofile
00175 );
00176
00178 void vector_display_toggle10_ulong(
00179 ulong** value,
00180 int width,
00181 FILE* ofile
00182 );
00183
00185 void vector_display_value_ulong(
00186 ulong** value,
00187 int width
00188 );
00189
00190
00192 void vector_display_ulong(
00193 ulong** value,
00194 unsigned int width,
00195 unsigned int type
00196 );
00197
00198
00200 void vector_display(
00201 const vector* vec
00202 );
00203
00205 bool vector_set_value_ulong(
00206 vector* vec,
00207 ulong** value,
00208 unsigned int width
00209 );
00210
00212 bool vector_part_select_pull(
00213 vector* tgt,
00214 vector* src,
00215 int lsb,
00216 int msb,
00217 bool set_mem_rd
00218 );
00219
00221 bool vector_part_select_push(
00222 vector* tgt,
00223 int tgt_lsb,
00224 int tgt_msb,
00225 const vector* src,
00226 int src_lsb,
00227 int src_msb,
00228 bool sign_extend
00229 );
00230
00235 void vector_set_unary_evals(
00236 vector* vec
00237 );
00238
00243 void vector_set_and_comb_evals(
00244 vector* tgt,
00245 vector* left,
00246 vector* right
00247 );
00248
00253 void vector_set_or_comb_evals(
00254 vector* tgt,
00255 vector* left,
00256 vector* right
00257 );
00258
00263 void vector_set_other_comb_evals(
00264 vector* tgt,
00265 vector* left,
00266 vector* right
00267 );
00268
00270 bool vector_sign_extend(
00271 vector* vec,
00272 int last
00273 );
00274
00276 bool vector_is_unknown(
00277 const vector* vec
00278 );
00279
00281 bool vector_is_not_zero(
00282 const vector* vec
00283 );
00284
00286 bool vector_set_to_x(
00287 vector* vec
00288 );
00289
00291 int vector_to_int(
00292 const vector* vec
00293 );
00294
00296 uint64 vector_to_uint64(
00297 const vector* vec
00298 );
00299
00301 real64 vector_to_real64(
00302 const vector* vec
00303 );
00304
00306 void vector_to_sim_time(
00307 const vector* vec,
00308 uint64 scale,
00309 sim_time* time
00310 );
00311
00313 bool vector_from_int(
00314 vector* vec,
00315 int value
00316 );
00317
00319 bool vector_from_uint64(
00320 vector* vec,
00321 uint64 value
00322 );
00323
00325 bool vector_from_real64(
00326 vector* vec,
00327 real64 value
00328 );
00329
00331 char* vector_to_string(
00332 vector* vec,
00333 int base,
00334 bool show_all
00335 );
00336
00338 void vector_from_string_fixed(
00339 vector* vec,
00340 const char* str
00341 );
00342
00344 void vector_from_string(
00345 char** str,
00346 bool quoted,
00347 vector** vec,
00348 int* base
00349 );
00350
00352 bool vector_vcd_assign(
00353 vector* vec,
00354 const char* value,
00355 int msb,
00356 int lsb
00357 );
00358
00360 void vector_toggle_count(
00361 vector* vec,
00362 unsigned int* tog01_cnt,
00363 unsigned int* tog10_cnt
00364 );
00365
00367 void vector_mem_rw_count(
00368 vector* vec,
00369 int lsb,
00370 int msb,
00371 unsigned int* wr_cnt,
00372 unsigned int* rd_cnt
00373 );
00374
00376 bool vector_set_assigned(
00377 vector* vec,
00378 int msb,
00379 int lsb
00380 );
00381
00383 bool vector_set_coverage_and_assign_ulong(
00384 vector* vec,
00385 const ulong* scratchl,
00386 const ulong* scratchh,
00387 int lsb,
00388 int msb
00389 );
00390
00392 bool vector_bitwise_and_op(
00393 vector* tgt,
00394 vector* src1,
00395 vector* src2
00396 );
00397
00399 bool vector_bitwise_nand_op(
00400 vector* tgt,
00401 vector* src1,
00402 vector* src2
00403 );
00404
00406 bool vector_bitwise_or_op(
00407 vector* tgt,
00408 vector* src1,
00409 vector* src2
00410 );
00411
00413 bool vector_bitwise_nor_op(
00414 vector* tgt,
00415 vector* src1,
00416 vector* src2
00417 );
00418
00420 bool vector_bitwise_xor_op(
00421 vector* tgt,
00422 vector* src1,
00423 vector* src2
00424 );
00425
00427 bool vector_bitwise_nxor_op(
00428 vector* tgt,
00429 vector* src1,
00430 vector* src2
00431 );
00432
00434 bool vector_op_lt(
00435 vector* tgt,
00436 const vector* left,
00437 const vector* right
00438 );
00439
00441 bool vector_op_le(
00442 vector* tgt,
00443 const vector* left,
00444 const vector* right
00445 );
00446
00448 bool vector_op_gt(
00449 vector* tgt,
00450 const vector* left,
00451 const vector* right
00452 );
00453
00455 bool vector_op_ge(
00456 vector* tgt,
00457 const vector* left,
00458 const vector* right
00459 );
00460
00462 bool vector_op_eq(
00463 vector* tgt,
00464 const vector* left,
00465 const vector* right
00466 );
00467
00469 bool vector_ceq_ulong(
00470 const vector* left,
00471 const vector* right
00472 );
00473
00475 bool vector_op_ceq(
00476 vector* tgt,
00477 const vector* left,
00478 const vector* right
00479 );
00480
00482 bool vector_op_cxeq(
00483 vector* tgt,
00484 const vector* left,
00485 const vector* right
00486 );
00487
00489 bool vector_op_czeq(
00490 vector* tgt,
00491 const vector* left,
00492 const vector* right
00493 );
00494
00496 bool vector_op_ne(
00497 vector* tgt,
00498 const vector* left,
00499 const vector* right
00500 );
00501
00503 bool vector_op_cne(
00504 vector* tgt,
00505 const vector* left,
00506 const vector* right
00507 );
00508
00510 bool vector_op_lor(
00511 vector* tgt,
00512 const vector* left,
00513 const vector* right
00514 );
00515
00517 bool vector_op_land(
00518 vector* tgt,
00519 const vector* left,
00520 const vector* right
00521 );
00522
00524 bool vector_op_lshift(
00525 vector* tgt,
00526 const vector* left,
00527 const vector* right
00528 );
00529
00531 bool vector_op_rshift(
00532 vector* tgt,
00533 const vector* left,
00534 const vector* right
00535 );
00536
00538 bool vector_op_arshift(
00539 vector* tgt,
00540 const vector* left,
00541 const vector* right
00542 );
00543
00545 bool vector_op_add(
00546 vector* tgt,
00547 const vector* left,
00548 const vector* right
00549 );
00550
00552 bool vector_op_negate(
00553 vector* tgt,
00554 const vector* src
00555 );
00556
00558 bool vector_op_subtract(
00559 vector* tgt,
00560 const vector* left,
00561 const vector* right
00562 );
00563
00565 bool vector_op_multiply(
00566 vector* tgt,
00567 const vector* left,
00568 const vector* right
00569 );
00570
00572 bool vector_op_divide(
00573 vector* tgt,
00574 const vector* left,
00575 const vector* right
00576 );
00577
00579 bool vector_op_modulus(
00580 vector* tgt,
00581 const vector* left,
00582 const vector* right
00583 );
00584
00586 bool vector_op_inc(
00587 vector* tgt,
00588 vecblk* tvb
00589 );
00590
00592 bool vector_op_dec(
00593 vector* tgt,
00594 vecblk* tvb
00595 );
00596
00598 bool vector_unary_inv(
00599 vector* tgt,
00600 const vector* src
00601 );
00602
00604 bool vector_unary_and(
00605 vector* tgt,
00606 const vector* src
00607 );
00608
00610 bool vector_unary_nand(
00611 vector* tgt,
00612 const vector* src
00613 );
00614
00616 bool vector_unary_or(
00617 vector* tgt,
00618 const vector* src
00619 );
00620
00622 bool vector_unary_nor(
00623 vector* tgt,
00624 const vector* src
00625 );
00626
00628 bool vector_unary_xor(
00629 vector* tgt,
00630 const vector* src
00631 );
00632
00634 bool vector_unary_nxor(
00635 vector* tgt,
00636 const vector* src
00637 );
00638
00640 bool vector_unary_not(
00641 vector* tgt,
00642 const vector* src
00643 );
00644
00646 bool vector_op_expand(
00647 vector* tgt,
00648 const vector* left,
00649 const vector* right
00650 );
00651
00653 bool vector_op_list(
00654 vector* tgt,
00655 const vector* left,
00656 const vector* right
00657 );
00658
00660 void vector_dealloc_value(
00661 vector* vec
00662 );
00663
00665 void vector_dealloc(
00666 vector* vec
00667 );
00668
00669 #endif
00670