Ignore:
Timestamp:
Jan 19, 2008, 12:09:01 PM (16 years ago)
Author:
rosiere
Message:

Modification of Statisctics
Add a new systemC component : Load_Store_Queue (tested with one benchmark and one configuration). Store don't supported the Data Buss Error (Load is supported)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/processor/Morpheo/Common/include/BitManipulation.h

    r63 r71  
    1111#include <stdint.h>
    1212#include <iostream>
    13 using namespace std;
    1413
    1514namespace morpheo              {
    1615
     16  //............................................................................
    1717  // gen_mask ..................................................................
     18  //............................................................................
    1819 
    1920  template <typename T>
     
    2930  };
    3031
     32  template <typename T>
     33  T gen_mask       (uint32_t index_max, uint32_t index_min)
     34  {
     35    return  (gen_mask<T>(index_max-index_min+1)<<index_min);
     36  };
     37
     38  template <typename T>
     39  T gen_mask_not   (uint32_t index_max, uint32_t index_min)
     40  {
     41    return ~(gen_mask<T>(index_max-index_min+1)<<index_min);
     42  };
     43
     44  //............................................................................
    3145  // mask, mask_not ............................................................
    32   template <typename T>
    33   T mask           (uint32_t data, uint32_t index_max, uint32_t index_min) 
    34   {
    35     return     (gen_mask<T>(index_max-index_min+1)<<index_min) & data;
    36   }
    37 
    38   template <typename T>
    39   T mask_not       (uint32_t data, uint32_t index_max, uint32_t index_min) 
    40   {
    41     return (~(gen_mask<T>(index_max-index_min+1)<<index_min)) & data;
    42   }
    43 
     46  //............................................................................
     47  template <typename T>
     48  T mask           (T data, uint32_t index_max, uint32_t index_min) 
     49  {
     50    return gen_mask    <T>(index_max,index_min) & data;
     51  }
     52
     53  template <typename T>
     54  T mask_not       (T data, uint32_t index_max, uint32_t index_min) 
     55  {
     56    return gen_mask_not<T>(index_max,index_min) & data;
     57  }
     58
     59  //............................................................................
    4460  // shift_left_logic, shift_right_logic .......................................
    45   template <typename T>
    46   T shift_logic_left (uint32_t size, uint32_t data, uint32_t value) 
     61  //............................................................................
     62  template <typename T>
     63  T shift_logic_left (uint32_t size, T data, T value) 
    4764  {
    4865    T mask = gen_mask<T> (size);
     
    5269
    5370  template <typename T>
    54   T shift_logic_right (uint32_t size, uint32_t data, uint32_t value) 
     71  T shift_logic_right (uint32_t size, T data, T value) 
    5572  {
    5673    T mask = gen_mask<T> (size);
     
    5976  }
    6077
     78  //............................................................................
    6179  // shift_logic ...............................................................
    62   template <typename T>
    63   T shift_logic      (uint32_t size, uint32_t data, uint32_t value, bool is_direction_left)
     80  //............................................................................
     81  template <typename T>
     82  T shift_logic      (uint32_t size, T data, T value, bool is_direction_left)
    6483  {
    6584    if (is_direction_left == true)
     
    6988  }
    7089
     90  //............................................................................
    7191  // shift_left_arithmetic, shift_right_arithmetic .............................
    72   template <typename T>
    73   T shift_arithmetic_left (uint32_t size, uint32_t data, uint32_t value) 
     92  //............................................................................
     93  template <typename T>
     94  T shift_arithmetic_left (uint32_t size, T data, T value) 
    7495  {
    7596    bool carry = (data&1) != 0;
     
    89110
    90111  template <typename T>
    91   T shift_arithmetic_right (uint32_t size, uint32_t data, uint32_t value) 
     112  T shift_arithmetic_right (uint32_t size, T data, T value) 
    92113  {
    93114    bool carry = (data&(1<<(size-1))) != 0;
     
    105126  }
    106127
     128  //............................................................................
    107129  // shift_arithmetic ..........................................................
    108   template <typename T>
    109   T shift_arithmetic      (uint32_t size, uint32_t data, uint32_t value, bool is_direction_left)
     130  //............................................................................
     131  template <typename T>
     132  T shift_arithmetic      (uint32_t size, T data, T value, bool is_direction_left)
    110133  {
    111134    if (is_direction_left == true)
     
    115138  }
    116139
     140  //............................................................................
    117141  // shift .....................................................................
    118   template <typename T>
    119   T shift            (uint32_t size, uint32_t data, uint32_t value, bool is_direction_left, bool is_shift_arithmetic)
     142  //............................................................................
     143  template <typename T>
     144  T shift            (uint32_t size, T data, T value, bool is_direction_left, bool is_shift_arithmetic)
    120145  {
    121146    if (is_shift_arithmetic == true)
     
    125150  }
    126151
     152  //............................................................................
    127153  // rotate_left, rotate_right .................................................
    128 
    129   template <typename T>
    130   T rotate_left    (uint32_t size, uint32_t data, uint32_t value) 
     154  //............................................................................
     155  template <typename T>
     156  T rotate_left    (uint32_t size, T data, T value) 
    131157  {
    132158    T mask        = gen_mask<T> (size);
     
    137163
    138164  template <typename T>
    139   T rotate_right    (uint32_t size, uint32_t data, uint32_t value) 
     165  T rotate_right    (uint32_t size, T data, T value) 
    140166  {
    141167    T mask        = gen_mask<T> (size);
     
    145171  }
    146172
     173  //............................................................................
    147174  // rotate ....................................................................
    148   template <typename T>
    149   T rotate         (uint32_t size, uint32_t data, uint32_t value, bool is_direction_left) 
     175  //............................................................................
     176  template <typename T>
     177  T rotate         (uint32_t size, T data, T value, bool is_direction_left) 
    150178  {
    151179    if (is_direction_left == true)
     
    155183  }
    156184
     185  //............................................................................
    157186  // range .....................................................................
    158   template <typename T>
    159   T range          (uint32_t data, uint32_t index_max, uint32_t index_min) 
     187  //............................................................................
     188  template <typename T>
     189  T range          (T data, uint32_t index_max, uint32_t index_min) 
    160190  {
    161191    return gen_mask<T>(index_max-index_min+1) & (data << index_min);
     
    163193
    164194  template <typename T>
    165   T range          (uint32_t data, uint32_t nb_bits) 
     195  T range          (T data, uint32_t nb_bits) 
    166196  {
    167197    return gen_mask<T>(nb_bits) & data;
    168198  }
     199
     200  //............................................................................
     201  // insert ....................................................................
     202  //............................................................................
     203  template <typename T>
     204  T insert         (T data_old, T data_new, uint32_t index_max, uint32_t index_min) 
     205  {
     206    return (mask<T>(data_new,index_max,index_min) | mask_not<T>(data_old,index_max,index_min));
     207  }
     208
     209  //............................................................................
     210  // extend ....................................................................
     211  //............................................................................
     212  template <typename T>
     213  T extend         (uint32_t size, T data, bool extend_with_sign, uint32_t nb_bits_keep)
     214  {
     215    if (size < nb_bits_keep)
     216      return data;
     217
     218    if (extend_with_sign and ((data>>(nb_bits_keep-1))&1))
     219      return data | (mask<T>(gen_mask<T>(size),size-1, nb_bits_keep));
     220    else
     221      return data & (mask<T>(gen_mask<T>(size),nb_bits_keep-1, 0));
     222  }
     223
     224  //............................................................................
     225  // duplicate..................................................................
     226  //............................................................................
     227
     228  template <typename T>
     229  T duplicate (uint32_t size, T data_src, uint32_t nb_bits, uint32_t index_min)
     230  {
     231    T data_duplicate = mask<T>((data_src)>>index_min, nb_bits-1, 0);
     232    T data_dest      = 0;
     233   
     234    for (uint32_t i=0; i < size; i+=nb_bits)
     235      data_dest |= (data_duplicate<<i);
     236   
     237    return data_dest;
     238  }
     239
     240  template <typename T>
     241  T duplicate (uint32_t size, T data_src, uint32_t nb_bits)
     242  {
     243    return duplicate<T> (size,data_src,nb_bits,0);
     244  }
     245
     246
    169247}; // end namespace morpheo             
    170248
Note: See TracChangeset for help on using the changeset viewer.