Ignore:
Timestamp:
Feb 16, 2010, 1:35:48 PM (14 years ago)
Author:
rosiere
Message:

Various modif (add test, and vhdl)

Location:
trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile
Files:
14 added
15 edited

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/include/Parameters.h

    r101 r137  
    2121  class Parameters : public morpheo::behavioural::Parameters
    2222  {
    23   public : const uint32_t    _nb_port_read ;
    24   public : const uint32_t    _nb_port_write;
    25   public : const uint32_t    _nb_port_read_write;
    26   public : const uint32_t    _nb_word      ;
    27   public : const uint32_t    _size_word    ;
    28   public : const uint32_t    _size_address ;
    29   public : const bool        _have_port_address;
    30   public : const bool        _have_init_value;
    31   public : const std::string _init_value;
     23  public : uint32_t    _nb_port_read ;
     24  public : uint32_t    _nb_port_write;
     25  public : uint32_t    _nb_port_read_write;
     26  public : uint32_t    _nb_word      ;
     27  public : uint32_t    _size_word    ;
     28  public : std::string _init_value   ;
     29
     30  public : uint32_t    _size_address ;
     31  public : bool        _have_port_address;
     32  public : bool        _have_init_value;
    3233
    3334  public : Parameters (uint32_t    nb_port_read ,
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/Parameters.cpp

    r101 r137  
    77
    88#include "Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/include/Parameters.h"
     9#include "Common/include/Log2.h"
    910
    1011namespace morpheo                    {
     
    2021                          uint32_t    size_word    ,
    2122                          std::string init_value
    22                           ) :
    23     _nb_port_read      (nb_port_read ),
    24     _nb_port_write     (nb_port_write),
    25     _nb_port_read_write(nb_port_read_write),
    26     _nb_word           (nb_word      ),
    27     _size_word         (size_word    ),
    28     _size_address      (static_cast<uint32_t>(log2(_nb_word))),
    29     _have_port_address (_size_address != 0),
    30     _have_init_value   (init_value != ""),
    31     _init_value        (init_value)
     23                          )
    3224  {
     25    _nb_port_read       = nb_port_read ;
     26    _nb_port_write      = nb_port_write;
     27    _nb_port_read_write = nb_port_read_write;
     28    _nb_word            = nb_word      ;
     29    _size_word          = size_word    ;
     30    _init_value         = init_value   ;
     31
     32    _size_address       = log2(_nb_word);
     33    _have_port_address  = _size_address != 0;
     34    _have_init_value    = init_value != "";
     35
    3336    test();
    3437  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/include/Parameters.h

    r124 r137  
    2424  {
    2525    //-----[ fields ]------------------------------------------------------------
    26   public : const uint32_t    _nb_port_read         ; // Global read  port
    27   public : const uint32_t    _nb_port_write        ; // Global write port
    28   public : const uint32_t    _nb_word              ;
    29   public : const uint32_t    _size_word            ;
    30   public : const uint32_t    _nb_bank              ; // Number of bank (All bank is identical)
    31   public : const uint32_t    _nb_port_read_by_bank ; // Local  read  port
    32   public : const uint32_t    _nb_port_write_by_bank; // Local  write port
    33   public : const Tcrossbar_t _crossbar             ;
    34   public : const bool        _have_init_value;
    35   public : const std::string _init_value;
     26  public : uint32_t    _nb_port_read         ; // Global read  port
     27  public : uint32_t    _nb_port_write        ; // Global write port
     28  public : uint32_t    _nb_word              ;
     29  public : uint32_t    _size_word            ;
     30  public : uint32_t    _nb_bank              ; // Number of bank (All bank is identical)
     31  public : uint32_t    _nb_port_read_by_bank ; // Local  read  port
     32  public : uint32_t    _nb_port_write_by_bank; // Local  write port
     33  public : Tcrossbar_t _crossbar             ;
     34  public : std::string _init_value           ;
    3635
    37   public : const uint32_t    _size_address         ;
    38   public : const uint32_t    _size_address_by_bank ;
     36  public : uint32_t    _size_address         ;
     37  public : uint32_t    _size_address_by_bank ;
    3938
    40   public : const uint32_t    _bank_shift           ;
    41   public : const Taddress_t  _bank_mask            ;
    42   public : const uint32_t    _num_reg_shift        ;
    43   public : const Taddress_t  _num_reg_mask         ;
     39  public : uint32_t    _bank_shift           ;
     40  public : Taddress_t  _bank_mask            ;
     41  public : uint32_t    _num_reg_shift        ;
     42  public : Taddress_t  _num_reg_mask         ;
    4443
    45   public : const uint32_t    _nb_word_by_bank      ;
     44  public : uint32_t    _nb_word_by_bank      ;
    4645
    47   public : const bool        _have_port_address     ;
    48   public : const bool        _have_bank_port_address;
     46  public : bool        _have_port_address     ;
     47  public : bool        _have_bank_port_address;
     48  public : bool        _have_init_value       ;
    4949
    5050    // A lot of table to the partial crossbar
    51   public :       uint32_t  * _link_port_read_to_bank_read  ;
    52 //public :       uint32_t  * _link_port_read_to_num_bank   ;
    53   public :       uint32_t  * _link_port_write_to_bank_write;
    54 //public :       uint32_t  * _link_port_write_to_num_bank  ;
     51  public : uint32_t  * _link_port_read_to_bank_read  ;
     52//public : uint32_t  * _link_port_read_to_num_bank   ;
     53  public : uint32_t  * _link_port_write_to_bank_write;
     54//public : uint32_t  * _link_port_write_to_num_bank  ;
    5555
    5656    //-----[ methods ]-----------------------------------------------------------
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/include/RegisterFile_Multi_Banked.h

    r88 r137  
    4848#ifdef STATISTICS
    4949  public    : Stat                           * _stat;
     50
     51  private   : counter_t                      * _stat_nb_read;
     52  private   : counter_t                      * _stat_nb_write;
     53  private   : counter_t                      * _stat_nb_conflict_on_read;
     54  private   : counter_t                      * _stat_nb_conflict_on_write;
    5055#endif
    5156
     
    8085  private   : Taddress_t                    * internal_WRITE_BANK;
    8186  private   : Taddress_t                    * internal_WRITE_NUM_REG;
     87
     88#ifdef STATISTICS
     89  private   : bool                          * internal_READ_VAL;
     90//private   : Taddress_t                    * internal_READ_BANK;
     91#endif
    8292
    8393        // function pointer
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/Parameters.cpp

    r124 r137  
    88#include "Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/include/Parameters.h"
    99#include "Common/include/BitManipulation.h"
     10#include "Common/include/Log2.h"
    1011
    1112namespace morpheo {
     
    2526                          Tcrossbar_t crossbar             ,
    2627                          std::string init_value
    27                           ):
    28     _nb_port_read          (nb_port_read         ),
    29     _nb_port_write         (nb_port_write        ),
    30     _nb_word               (nb_word              ),
    31     _size_word             (size_word            ),
    32     _nb_bank               (nb_bank              ),
    33     _nb_port_read_by_bank  (nb_port_read_by_bank ),
    34     _nb_port_write_by_bank (nb_port_write_by_bank),
    35     _crossbar              (crossbar             ),
    36     _have_init_value       (init_value != ""     ),
    37     _init_value            (init_value           ),
    38     _size_address          (static_cast<uint32_t>(ceil(log2(_nb_word)))),
    39     _size_address_by_bank  (_size_address - static_cast<uint32_t>(ceil(log2(_nb_bank)))),
     28                          )
     29  {
     30    log_printf(FUNC,RegisterFile_Multi_Banked,"Parameters","Begin");
     31
     32    _nb_port_read           = nb_port_read         ;
     33    _nb_port_write          = nb_port_write        ;
     34    _nb_word                = nb_word              ;
     35    _size_word              = size_word            ;
     36    _nb_bank                = nb_bank              ;
     37    _nb_port_read_by_bank   = nb_port_read_by_bank ;
     38    _nb_port_write_by_bank  = nb_port_write_by_bank;
     39    _crossbar               = crossbar             ;
     40    _init_value             = init_value           ;
     41
     42    _size_address           = log2(_nb_word);
     43    _size_address_by_bank   = _size_address - log2(_nb_bank);
    4044
    4145    // Address : [....................]  [size_address-1:0]
    4246    // Bank    : [....]                  [size_address-1:size_address-1-log2(nb_bank)]
    4347    // num_reg :      ]...............]  [size_address-2-log2(nb_bank):0]
    44     _bank_shift            (_size_address_by_bank),
    45     _bank_mask             (gen_mask<Taddress_t>(static_cast<Taddress_t>(ceil(log2(_nb_bank))))),
    46     _num_reg_shift         (0),
    47     _num_reg_mask          (gen_mask<Taddress_t>(_size_address_by_bank)),
    48     _nb_word_by_bank       (_nb_word / _nb_bank),
    49     _have_port_address     (_size_address         != 0),
    50     _have_bank_port_address(_size_address_by_bank != 0)
    51   {
    52     log_printf(FUNC,RegisterFile_Multi_Banked,"Parameters","Begin");
     48    _bank_shift             = _size_address_by_bank;
     49    _bank_mask              = gen_mask<Taddress_t>(log2(_nb_bank));
     50    _num_reg_shift          = 0;
     51    _num_reg_mask           = gen_mask<Taddress_t>(_size_address_by_bank);
     52    _nb_word_by_bank        = _nb_word / _nb_bank;
     53    _have_port_address      = _size_address         != 0;
     54    _have_bank_port_address = _size_address_by_bank != 0;
     55    _have_init_value        = init_value != ""     ;
    5356
    5457    if (_crossbar == PARTIAL_CROSSBAR)
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_allocation.cpp

    r112 r137  
    7777        ALLOC1(internal_WRITE_BANK   ,Taddress_t,_param->_nb_port_write);
    7878        ALLOC1(internal_WRITE_NUM_REG,Taddress_t,_param->_nb_port_write);
     79
     80#ifdef STATISTICS
     81        ALLOC1(internal_READ_VAL     ,bool      ,_param->_nb_port_read);
     82#endif
    7983      }
    8084
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_deallocation.cpp

    r112 r137  
    4040        DELETE1(internal_WRITE_BANK     ,_param->_nb_port_write);
    4141        DELETE1(internal_WRITE_NUM_REG  ,_param->_nb_port_write);
     42
     43#ifdef STATISTICS
     44        DELETE1(internal_READ_VAL       ,_param->_nb_port_read);
     45#endif
     46
    4247      }       
    4348
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_full_crossbar_genMealy_read.cpp

    r123 r137  
    3838        bool ack = false;
    3939
     40#ifdef STATISTICS
     41        internal_READ_VAL  [i] = false;
     42#endif
     43
    4044        log_printf(TRACE,RegisterFile_Multi_Banked,FUNCTION,"  * read [%d] : %d",i,val);
    4145
     
    7276                    log_printf(TRACE,RegisterFile_Multi_Banked,FUNCTION,"    * data      : %d",data);
    7377
     78#ifdef STATISTICS
     79                    internal_READ_VAL  [i] = true;
     80#endif
    7481                    PORT_WRITE(out_READ_DATA [i], data);
    7582
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_partial_crossbar_genMealy_read.cpp

    r123 r137  
    3737        bool ack = false;
    3838
     39#ifdef STATISTICS
     40        internal_READ_VAL  [i] = false;
     41#endif
     42
    3943        log_printf(TRACE,RegisterFile_Multi_Banked,FUNCTION,"  * read [%d] : %d",i,val);
    4044
     
    7377                    log_printf(TRACE,RegisterFile_Multi_Banked,FUNCTION,"    * data      : %d",data);
    7478
     79#ifdef STATISTICS
     80                    internal_READ_VAL  [i] = true;
     81#endif
     82
    7583                    PORT_WRITE(out_READ_DATA [i], data);
    7684
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_statistics_declaration.cpp

    r81 r137  
    2424                      "RegisterFile_Multi_Banked",
    2525                      param_statistics);
     26
     27//     _stat_nb_read              = _stat->create_variable("nb_read" );
     28//     _stat_nb_write             = _stat->create_variable("nb_write");
     29//     _stat_nb_conflict_on_read  = _stat->create_variable("nb_conflict_on_read" );
     30//     _stat_nb_conflict_on_write = _stat->create_variable("nb_conflict_on_write");
     31
     32    _stat_nb_read              = _stat->create_counter("nb_read"             ,"","");
     33    _stat_nb_write             = _stat->create_counter("nb_write"            ,"","");
     34    _stat_nb_conflict_on_read  = _stat->create_counter("nb_conflict_on_read" ,"","");
     35    _stat_nb_conflict_on_write = _stat->create_counter("nb_conflict_on_write","","");
     36
     37    _stat->create_expr_average_by_cycle("average_read" , "nb_read" , "", _("Average read by cycle" ));
     38    _stat->create_expr_average_by_cycle("average_write", "nb_write", "", _("Average write by cycle"));
     39
     40    _stat->create_expr_percent         ("percent_conflict_on_read" , "nb_conflict_on_read" , "+ nb_read  nb_conflict_on_read" , _("Percent conflit on read port" ));
     41    _stat->create_expr_percent         ("percent_conflict_on_write", "nb_conflict_on_write", "+ nb_write nb_conflict_on_write", _("Percent conflit on write port"));
    2642   
    2743    log_printf(FUNC,RegisterFile_Multi_Banked,FUNCTION,"End");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_transition.cpp

    r128 r137  
    5151                reg_DATA[internal_WRITE_BANK[i]][internal_WRITE_NUM_REG[i]] = data;
    5252              }
     53
     54#ifdef STATISTICS
     55            if (usage_is_set(_usage,USE_STATISTICS))
     56              if (PORT_READ(in_WRITE_VAL [i]))
     57                {
     58                  if (internal_WRITE_VAL [i] == 1)
     59                    (*_stat_nb_write) ++;
     60                  else
     61                    (*_stat_nb_conflict_on_write) ++;
     62                }                 
     63#endif   
    5364          }
     65
     66#ifdef STATISTICS
     67        if (usage_is_set(_usage,USE_STATISTICS))
     68          for (uint32_t i=0; i<_param->_nb_port_read; i++)
     69            if (PORT_READ(in_READ_VAL [i]))
     70              {
     71                if (internal_READ_VAL [i] == 1)
     72                  (*_stat_nb_read) ++;
     73                else
     74                  (*_stat_nb_conflict_on_read) ++;
     75              }           
     76#endif   
     77
    5478      }
    5579
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_vhdl_body.cpp

    r81 r137  
    8888                std::string   index     = (_param->_crossbar == FULL_CROSSBAR)?("_"+toString(j)):"";
    8989
    90                 vhdl->set_body("\t"+separator+" in_VAL_"+toString(k)+"     \t=>\tinternal_READ_"+toString(i)+"_"+toString(num_port)+index+"_VAL");
    91                 vhdl->set_body("\t,out_ACK_"+toString(k)+"     \t=>\tinternal_SELECT_READ_"+toString(i)+"_"+toString(num_port)+index+"_VAL");
     90                vhdl->set_body("\t"+separator+" in_"+toString(k)+"_VAL     \t=>\tinternal_READ_"+toString(i)+"_"+toString(num_port)+index+"_VAL");
     91                vhdl->set_body("\t,out_"+toString(k)+"_ACK     \t=>\tinternal_SELECT_READ_"+toString(i)+"_"+toString(num_port)+index+"_VAL");
    9292              }
    9393            vhdl->set_body(");");
     
    107107                std::string   index     = (_param->_crossbar == FULL_CROSSBAR)?("_"+toString(j)):"";
    108108               
    109                 vhdl->set_body("\t"+separator+" in_VAL_"+toString(k)+"     \t=>\tinternal_WRITE_"+toString(i)+"_"+toString(num_port)+index+"_VAL");
    110                 vhdl->set_body("\t,out_ACK_"+toString(k)+"     \t=>\tinternal_SELECT_WRITE_"+toString(i)+"_"+toString(num_port)+index+"_VAL");
     109                vhdl->set_body("\t"+separator+" in_"+toString(k)+"_VAL     \t=>\tinternal_WRITE_"+toString(i)+"_"+toString(num_port)+index+"_VAL");
     110                vhdl->set_body("\t,out_"+toString(k)+"_ACK     \t=>\tinternal_SELECT_WRITE_"+toString(i)+"_"+toString(num_port)+index+"_VAL");
    111111              }
    112112            vhdl->set_body(");");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/SelfTest/src/test.cpp

    r131 r137  
    2626  Tusage_t _usage = USE_ALL;
    2727
    28 //   _usage = usage_unset(_usage,USE_SYSTEMC              );
     28  _usage = usage_unset(_usage,USE_SYSTEMC              );
    2929//   _usage = usage_unset(_usage,USE_VHDL                 );
    3030//   _usage = usage_unset(_usage,USE_VHDL_TESTBENCH       );
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/include/Parameters.h

    r88 r137  
    2626  {
    2727    //-----[ fields ]------------------------------------------------------------
    28   public : const Tinstance_t _instance;
    29   public : const uint32_t    _nb_port_read ;
    30   public : const uint32_t    _nb_port_write;
    31   public : const uint32_t    _nb_word      ;
    32   public : const uint32_t    _size_word    ;
    33   public : const uint32_t    _size_address ;
    34   public : const bool        _have_port_address;
     28  public : Tinstance_t _instance;
     29  public : uint32_t    _nb_port_read ;
     30  public : uint32_t    _nb_port_write;
     31  public : uint32_t    _nb_word      ;
     32  public : uint32_t    _size_word    ;
     33  public : uint32_t    _size_address ;
     34  public : bool        _have_port_address;
    3535
    3636  public : morpheo::behavioural::generic::registerfile::registerfile_monolithic  ::Parameters * _param_registerfile_monolithic;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/Parameters.cpp

    r88 r137  
    1414
    1515
    16   Parameters::Parameters (morpheo::behavioural::generic::registerfile::registerfile_monolithic  ::Parameters * param) :
    17     _instance          (instance_RegisterFile_Monolithic),
    18     _nb_port_read      (param->_nb_port_read ),
    19     _nb_port_write     (param->_nb_port_write),
    20     _nb_word           (param->_nb_word      ),
    21     _size_word         (param->_size_word    ),
    22     _size_address      (param->_size_address ),
    23     _have_port_address (param->_have_port_address)
     16  Parameters::Parameters (morpheo::behavioural::generic::registerfile::registerfile_monolithic  ::Parameters * param)
    2417  {
    2518    log_printf(FUNC,RegisterFile,"Parameters","Begin");
     19
     20    _instance          = instance_RegisterFile_Monolithic;
     21    _nb_port_read      = param->_nb_port_read ;
     22    _nb_port_write     = param->_nb_port_write;
     23    _nb_word           = param->_nb_word      ;
     24    _size_word         = param->_size_word    ;
     25    _size_address      = param->_size_address ;
     26    _have_port_address = param->_have_port_address;
    2627
    2728    _param_registerfile_monolithic   = param;
Note: See TracChangeset for help on using the changeset viewer.