vector.h

Go to the documentation of this file.
00001 #ifndef __VECTOR_H__
00002 #define __VECTOR_H__
00003 
00004 /*
00005  Copyright (c) 2006-2010 Trevor Williams
00006 
00007  This program is free software; you can redistribute it and/or modify
00008  it under the terms of the GNU General Public License as published by the Free Software
00009  Foundation; either version 2 of the License, or (at your option) any later version.
00010 
00011  This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
00012  without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
00013  See the GNU General Public License for more details.
00014 
00015  You should have received a copy of the GNU General Public License along with this program;
00016  if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
00017 */
00018 
00026 #include <stdio.h>
00027 
00028 #include "defines.h"
00029 
00030 
00032 void vector_init_ulong(
00033   /*@out@*/ 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   /*@out@*/ 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   /*@out@*/ 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   /*@out@*/ 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   /*@out@*/ 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 /*@-exportlocal@*/
00192 void vector_display_ulong(
00193   ulong**      value,
00194   unsigned int width,
00195   unsigned int type
00196 );
00197 /*@=exportlocal@*/
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   /*@out@*/ 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   /*@out@*/ vector** vec,
00349   /*@out@*/ 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   /*@out@*/ unsigned int* tog01_cnt,
00364   /*@out@*/ unsigned int* tog10_cnt
00365 );
00366 
00368 void vector_mem_rw_count(
00369             vector*       vec,
00370             int           lsb,
00371             int           msb,
00372   /*@out@*/ unsigned int* wr_cnt,
00373   /*@out@*/ 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 
Generated on Sun Nov 21 00:55:36 2010 for Covered by  doxygen 1.6.3