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 unsigned int width
00336 );
00337
00339 void vector_from_string_fixed(
00340 vector* vec,
00341 const char* str
00342 );
00343
00345 void vector_from_string(
00346 char** str,
00347 bool quoted,
00348 vector** vec,
00349 int* base
00350 );
00351
00353 bool vector_vcd_assign(
00354 vector* vec,
00355 const char* value,
00356 int msb,
00357 int lsb
00358 );
00359
00361 void vector_toggle_count(
00362 vector* vec,
00363 unsigned int* tog01_cnt,
00364 unsigned int* tog10_cnt
00365 );
00366
00368 void vector_mem_rw_count(
00369 vector* vec,
00370 int lsb,
00371 int msb,
00372 unsigned int* wr_cnt,
00373 unsigned int* rd_cnt
00374 );
00375
00377 bool vector_set_assigned(
00378 vector* vec,
00379 int msb,
00380 int lsb
00381 );
00382
00384 bool vector_set_coverage_and_assign_ulong(
00385 vector* vec,
00386 const ulong* scratchl,
00387 const ulong* scratchh,
00388 int lsb,
00389 int msb
00390 );
00391
00393 bool vector_bitwise_and_op(
00394 vector* tgt,
00395 vector* src1,
00396 vector* src2
00397 );
00398
00400 bool vector_bitwise_nand_op(
00401 vector* tgt,
00402 vector* src1,
00403 vector* src2
00404 );
00405
00407 bool vector_bitwise_or_op(
00408 vector* tgt,
00409 vector* src1,
00410 vector* src2
00411 );
00412
00414 bool vector_bitwise_nor_op(
00415 vector* tgt,
00416 vector* src1,
00417 vector* src2
00418 );
00419
00421 bool vector_bitwise_xor_op(
00422 vector* tgt,
00423 vector* src1,
00424 vector* src2
00425 );
00426
00428 bool vector_bitwise_nxor_op(
00429 vector* tgt,
00430 vector* src1,
00431 vector* src2
00432 );
00433
00435 bool vector_op_lt(
00436 vector* tgt,
00437 const vector* left,
00438 const vector* right
00439 );
00440
00442 bool vector_op_le(
00443 vector* tgt,
00444 const vector* left,
00445 const vector* right
00446 );
00447
00449 bool vector_op_gt(
00450 vector* tgt,
00451 const vector* left,
00452 const vector* right
00453 );
00454
00456 bool vector_op_ge(
00457 vector* tgt,
00458 const vector* left,
00459 const vector* right
00460 );
00461
00463 bool vector_op_eq(
00464 vector* tgt,
00465 const vector* left,
00466 const vector* right
00467 );
00468
00470 bool vector_ceq_ulong(
00471 const vector* left,
00472 const vector* right
00473 );
00474
00476 bool vector_op_ceq(
00477 vector* tgt,
00478 const vector* left,
00479 const vector* right
00480 );
00481
00483 bool vector_op_cxeq(
00484 vector* tgt,
00485 const vector* left,
00486 const vector* right
00487 );
00488
00490 bool vector_op_czeq(
00491 vector* tgt,
00492 const vector* left,
00493 const vector* right
00494 );
00495
00497 bool vector_op_ne(
00498 vector* tgt,
00499 const vector* left,
00500 const vector* right
00501 );
00502
00504 bool vector_op_cne(
00505 vector* tgt,
00506 const vector* left,
00507 const vector* right
00508 );
00509
00511 bool vector_op_lor(
00512 vector* tgt,
00513 const vector* left,
00514 const vector* right
00515 );
00516
00518 bool vector_op_land(
00519 vector* tgt,
00520 const vector* left,
00521 const vector* right
00522 );
00523
00525 bool vector_op_lshift(
00526 vector* tgt,
00527 const vector* left,
00528 const vector* right
00529 );
00530
00532 bool vector_op_rshift(
00533 vector* tgt,
00534 const vector* left,
00535 const vector* right
00536 );
00537
00539 bool vector_op_arshift(
00540 vector* tgt,
00541 const vector* left,
00542 const vector* right
00543 );
00544
00546 bool vector_op_add(
00547 vector* tgt,
00548 const vector* left,
00549 const vector* right
00550 );
00551
00553 bool vector_op_negate(
00554 vector* tgt,
00555 const vector* src
00556 );
00557
00559 bool vector_op_subtract(
00560 vector* tgt,
00561 const vector* left,
00562 const vector* right
00563 );
00564
00566 bool vector_op_multiply(
00567 vector* tgt,
00568 const vector* left,
00569 const vector* right
00570 );
00571
00573 bool vector_op_divide(
00574 vector* tgt,
00575 const vector* left,
00576 const vector* right
00577 );
00578
00580 bool vector_op_modulus(
00581 vector* tgt,
00582 const vector* left,
00583 const vector* right
00584 );
00585
00587 bool vector_op_inc(
00588 vector* tgt,
00589 vecblk* tvb
00590 );
00591
00593 bool vector_op_dec(
00594 vector* tgt,
00595 vecblk* tvb
00596 );
00597
00599 bool vector_unary_inv(
00600 vector* tgt,
00601 const vector* src
00602 );
00603
00605 bool vector_unary_and(
00606 vector* tgt,
00607 const vector* src
00608 );
00609
00611 bool vector_unary_nand(
00612 vector* tgt,
00613 const vector* src
00614 );
00615
00617 bool vector_unary_or(
00618 vector* tgt,
00619 const vector* src
00620 );
00621
00623 bool vector_unary_nor(
00624 vector* tgt,
00625 const vector* src
00626 );
00627
00629 bool vector_unary_xor(
00630 vector* tgt,
00631 const vector* src
00632 );
00633
00635 bool vector_unary_nxor(
00636 vector* tgt,
00637 const vector* src
00638 );
00639
00641 bool vector_unary_not(
00642 vector* tgt,
00643 const vector* src
00644 );
00645
00647 bool vector_op_expand(
00648 vector* tgt,
00649 const vector* left,
00650 const vector* right
00651 );
00652
00654 bool vector_op_list(
00655 vector* tgt,
00656 const vector* left,
00657 const vector* right
00658 );
00659
00661 bool vector_op_clog2(
00662 vector* tgt,
00663 const vector* src
00664 );
00665
00667 void vector_dealloc_value(
00668 vector* vec
00669 );
00670
00672 void vector_dealloc(
00673 vector* vec
00674 );
00675
00676 #endif
00677