Ignore:
Timestamp:
Sep 28, 2007, 2:58:08 PM (17 years ago)
Author:
rosiere
Message:
  • VHDL - RegisterFile_Multi_Banked (only partial_crossbar)
  • SystemC - modif Component, interface and co -> ajout du type Tusage_T pour instancier un coposant mais ne demander que le VHDL ou le systemC.
  • Séminaire interne
Location:
trunk/IPs/systemC/processor/Morpheo/Behavioural
Files:
7 added
1 deleted
67 edited
2 moved

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Constant/Constant_OpenRISC.h

    r55 r57  
    1515#define                 _size_instruction_log2        5
    1616
    17   //------------------------------------------------------[ Control ]-----
    18   typedef bool          Tcontrol_t;
    19 
    2017  //----------------------------------------------------[ Operation ]-----
    21   typedef uint8_t       Toperation_t;
    2218// #define                 _nb_operation                 32
    2319// #define                 _size_operation               5
     
    5753
    5854  //--------------------------------------------------[ destination ]-----
    59   typedef uint8_t       Tdestination1_t;
    6055#define                 _size_destination1            4
    6156
     
    6661#define                 mask_DESTINATION1_MAC_UNIT    0x8
    6762 
    68   typedef uint8_t       Tdestination2_t;
    6963#define                 _size_destination2  3
    7064
     
    7569 
    7670  //----------------------------------------------------[ exec_flag ]-----
    77   typedef uint8_t       Texec_flag_t;
    7871#define                 _size_exec_flag               2
    7972
     
    8477
    8578  //---------------------------------------------------[ exec_excep ]-----
    86   typedef bool          Texec_excep_t;
    8779#define                  _size_exec_excep             1
    8880
     
    9183 
    9284  //----------------------------------------------------[ Condition ]-----
    93   typedef uint8_t       Tcondition_t;
    9485#define                 _size_condition               3
    9586   
     
    10293
    10394  //-------------------------------------------------[ branch_state ]-----
    104   typedef uint8_t       Tbranch_state_t;
    105 
    10695#define                 cst_BRANCH_STATE_NONE         0x0           // 0 0
    10796#define                 cst_BRANCH_STATE_NSPEC_TAKE   0x1           // 0 1  -> incondionnal
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/SelfTest/mkf.info

    r55 r57  
    2020target_dep      RegisterFile_Monolithic_3.prj   RegisterFile_Monolithic_3_Pack.vhdl RegisterFile_Monolithic_3.vhdl
    2121
     22# RegisterFile_Monolithic_4
     23target_dep      all     RegisterFile_Monolithic_4.ngc
     24target_dep      RegisterFile_Monolithic_4.ngc   RegisterFile_Monolithic_4.prj
     25target_dep      RegisterFile_Monolithic_4.prj   RegisterFile_Monolithic_4_Pack.vhdl RegisterFile_Monolithic_4.vhdl
     26
     27# RegisterFile_Monolithic_5
     28target_dep      all     RegisterFile_Monolithic_5.ngc
     29target_dep      RegisterFile_Monolithic_5.ngc   RegisterFile_Monolithic_5.prj
     30target_dep      RegisterFile_Monolithic_5.prj   RegisterFile_Monolithic_5_Pack.vhdl RegisterFile_Monolithic_5.vhdl
     31
     32# RegisterFile_Monolithic_6
     33target_dep      all     RegisterFile_Monolithic_6.ngc
     34target_dep      RegisterFile_Monolithic_6.ngc   RegisterFile_Monolithic_6.prj
     35target_dep      RegisterFile_Monolithic_6.prj   RegisterFile_Monolithic_6_Pack.vhdl RegisterFile_Monolithic_6.vhdl
     36
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/SelfTest/src/test.cpp

    r55 r57  
    77 */
    88
    9 #define NB_ITERATION 2
     9#define NB_ITERATION 1
    1010
    1111#include "Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/SelfTest/include/test.h"
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/include/RegisterFile_Monolithic.h

    r55 r57  
    2727#include "Behavioural/include/Vhdl.h"
    2828#endif
     29#include "Behavioural/include/Usage.h"
    2930
    3031using namespace std;
     
    4647    // Parameters
    4748  protected : const string       _name;
     49  protected : const Parameters * _param;
     50  private   : const Tusage_t     _usage;
    4851
    49   protected : const Parameters * _param;
    5052#ifdef STATISTICS
    5153  private   : Statistics                     * _stat;
     
    9597    SC_HAS_PROCESS (RegisterFile_Monolithic);
    9698#endif                                         
    97 
    98   public  :          RegisterFile_Monolithic   (
     99  public  : RegisterFile_Monolithic
     100  (
    99101#ifdef SYSTEMC
    100                                                 sc_module_name                              name,
     102   sc_module_name                              name
    101103#else                                         
    102                                                 string                                      name,
     104   string                                      name
    103105#endif                                         
    104106#ifdef STATISTICS
    105                                                 morpheo::behavioural::Parameters_Statistics * param_statistics,
     107   ,morpheo::behavioural::Parameters_Statistics * param_statistics
    106108#endif
    107                                                 Parameters                                  * param );
     109   ,Parameters                                  * param
     110   ,morpheo::behavioural::Tusage_t                usage=USE_ALL
     111   );
     112
    108113  public  :          ~RegisterFile_Monolithic  (void);
    109114                                               
    110 #ifdef SYSTEMC                                 
    111115  private : void     allocation                (void);
    112116  private : void     deallocation              (void);
    113117                                               
     118#ifdef SYSTEMC                                 
    114119  public  : void     transition                (void);
    115120//public  : void     genMoore                  (void) {/* empty */};
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/include/Types.h

    r53 r57  
    99 */
    1010
    11 #include "Common/include/Types.h"
     11#include "Behavioural/include/Types.h"
    1212
    1313namespace morpheo                    {
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic.cpp

    r55 r57  
    1414namespace registerfile_monolithic    {
    1515
    16   RegisterFile_Monolithic::RegisterFile_Monolithic (
     16  RegisterFile_Monolithic::RegisterFile_Monolithic
     17  (
    1718#ifdef SYSTEMC
    18                                                     sc_module_name name,
     19   sc_module_name name,
    1920#else
    20                                                     string name        ,
     21   string name        ,
    2122#endif
    2223#ifdef STATISTICS
    23                                                     morpheo::behavioural::Parameters_Statistics            * param_statistics,
     24   morpheo::behavioural::Parameters_Statistics            * param_statistics,
    2425#endif
    25                                                     morpheo::behavioural::generic::registerfile::registerfile_monolithic::Parameters * param ):
    26     _name   (name),
    27     _param (param)
     26   morpheo::behavioural::generic::registerfile::registerfile_monolithic::Parameters * param,
     27   morpheo::behavioural::Tusage_t usage
     28   ):
     29    _name  (name),
     30    _param (param),
     31    _usage (usage)
    2832  {
    2933    log_printf(FUNC,RegisterFile_Monolithic,"RegisterFile_Monolithic","Begin");
    3034
    31 #ifdef SYSTEMC
    3235    log_printf(INFO,RegisterFile_Monolithic,"RegisterFile_Monolithic","Allocation");
    33 
    3436    allocation ();
    35 #endif
    3637
    3738#ifdef STATISTICS
     
    4748
    4849#ifdef SYSTEMC
    49     SC_METHOD (transition);
    50     dont_initialize ();
    51     sensitive_pos << *(in_CLOCK);
     50    if (_usage & USE_SYSTEMC)
     51      {
     52        SC_METHOD (transition);
     53        dont_initialize ();
     54        sensitive_pos << *(in_CLOCK);
     55       
     56        SC_METHOD (genMealy_read);
     57        dont_initialize ();
     58        sensitive_neg << *(in_CLOCK);
     59        for (uint32_t i=0; i<_param->_nb_port_read; i++)
     60          sensitive << *(in_READ_VAL     [i])
     61                    << *(in_READ_ADDRESS [i]);
     62        for (uint32_t i=0; i<_param->_nb_port_read_write; i++)
     63          sensitive << *(in_READ_WRITE_VAL     [i])
     64                    << *(in_READ_WRITE_RW      [i])
     65                    << *(in_READ_WRITE_ADDRESS [i]);
     66       
     67#  ifdef SYSTEMCASS_SPECIFIC
     68        // List dependency information
     69        for (uint32_t i=0; i<_param->_nb_port_read; i++)
     70          {
     71            (*(out_READ_DATA  [i])) (*( in_READ_VAL     [i]));
     72            (*(out_READ_DATA  [i])) (*( in_READ_ADDRESS [i]));
     73          }
     74        for (uint32_t i=0; i<_param->_nb_port_read_write; i++)
     75          { 
     76            (*(out_READ_WRITE_RDATA [i])) (*( in_READ_WRITE_VAL     [i]));
     77            (*(out_READ_WRITE_RDATA [i])) (*( in_READ_WRITE_RW      [i]));
     78            (*(out_READ_WRITE_RDATA [i])) (*( in_READ_WRITE_ADDRESS [i]));
     79          }
     80#  endif   
     81       
     82        for (uint32_t i=0; i<_param->_nb_port_read       ; i++)
     83          PORT_WRITE(out_READ_ACK        [i], 1);
     84        for (uint32_t i=0; i<_param->_nb_port_write      ; i++)
     85          PORT_WRITE(out_WRITE_ACK       [i], 1);
     86        for (uint32_t i=0; i<_param->_nb_port_read_write ; i++)
     87          PORT_WRITE(out_READ_WRITE_ACK  [i], 1);
     88      }
     89#endif
    5290   
    53     SC_METHOD (genMealy_read);
    54     dont_initialize ();
    55     sensitive_neg << *(in_CLOCK);
    56     for (uint32_t i=0; i<_param->_nb_port_read; i++)
    57       sensitive << *(in_READ_VAL     [i])
    58                 << *(in_READ_ADDRESS [i]);
    59     for (uint32_t i=0; i<_param->_nb_port_read_write; i++)
    60       sensitive << *(in_READ_WRITE_VAL     [i])
    61                 << *(in_READ_WRITE_RW      [i])
    62                 << *(in_READ_WRITE_ADDRESS [i]);
    63 
    64 #ifdef SYSTEMCASS_SPECIFIC
    65     // List dependency information
    66     for (uint32_t i=0; i<_param->_nb_port_read; i++)
    67       {
    68         (*(out_READ_DATA  [i])) (*( in_READ_VAL     [i]));
    69         (*(out_READ_DATA  [i])) (*( in_READ_ADDRESS [i]));
    70       }
    71     for (uint32_t i=0; i<_param->_nb_port_read_write; i++)
    72       { 
    73         (*(out_READ_WRITE_RDATA [i])) (*( in_READ_WRITE_VAL     [i]));
    74         (*(out_READ_WRITE_RDATA [i])) (*( in_READ_WRITE_RW      [i]));
    75         (*(out_READ_WRITE_RDATA [i])) (*( in_READ_WRITE_ADDRESS [i]));
    76       }
    77 #endif   
    78 
    79     for (uint32_t i=0; i<_param->_nb_port_read       ; i++)
    80       PORT_WRITE(out_READ_ACK        [i], 1);
    81     for (uint32_t i=0; i<_param->_nb_port_write      ; i++)
    82       PORT_WRITE(out_WRITE_ACK       [i], 1);
    83     for (uint32_t i=0; i<_param->_nb_port_read_write ; i++)
    84       PORT_WRITE(out_READ_WRITE_ACK  [i], 1);
    85 #endif
    86 
    8791    log_printf(FUNC,RegisterFile_Monolithic,"RegisterFile_Monolithic","End");
    8892  };
     
    9599#endif
    96100
    97 #ifdef SYSTEMC
    98101    deallocation ();
    99 #endif
    100102  };
    101103
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic_allocation.cpp

    r55 r57  
    1 #ifdef SYSTEMC
    21/*
    32 * $Id$
     
    1716  void RegisterFile_Monolithic::allocation (void)
    1817  {
    19     _component   = new Component ();
     18    _component   = new Component (_usage);
    2019
    2120    Entity * entity = _component->set_entity (_name                   
     
    133132}; // end namespace behavioural         
    134133}; // end namespace morpheo             
    135 #endif
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic_deallocation.cpp

    r55 r57  
    1 #ifdef SYSTEMC
    21/*
    32 * $Id$
     
    1918    delete _component;
    2019
    21     delete    in_CLOCK;
    22     delete    in_NRESET;
    23     // ----- Interface Read
    24     delete []  in_READ_VAL    ;
    25     delete [] out_READ_ACK    ;
    26     delete []  in_READ_ADDRESS;
    27     delete [] out_READ_DATA   ;
    28 
    29     // ----- Interface Write
    30     delete []  in_WRITE_VAL    ;
    31     delete [] out_WRITE_ACK    ;
    32     delete []  in_WRITE_ADDRESS;
    33     delete []  in_WRITE_DATA   ;
    34 
    35     // ----- Interface Read_Write
    36     delete []  in_READ_WRITE_VAL    ;
    37     delete [] out_READ_WRITE_ACK    ;
    38     delete []  in_READ_WRITE_RW     ;
    39     delete []  in_READ_WRITE_ADDRESS;
    40     delete []  in_READ_WRITE_WDATA  ;
    41     delete [] out_READ_WRITE_RDATA  ;
    42 
    43     // ----- Register
    44     delete [] reg_DATA;
     20    if (_usage & USE_SYSTEMC)
     21      {
     22        delete    in_CLOCK;
     23        delete    in_NRESET;
     24        // ----- Interface Read
     25        delete []  in_READ_VAL    ;
     26        delete [] out_READ_ACK    ;
     27        delete []  in_READ_ADDRESS;
     28        delete [] out_READ_DATA   ;
     29       
     30        // ----- Interface Write
     31        delete []  in_WRITE_VAL    ;
     32        delete [] out_WRITE_ACK    ;
     33        delete []  in_WRITE_ADDRESS;
     34        delete []  in_WRITE_DATA   ;
     35       
     36        // ----- Interface Read_Write
     37        delete []  in_READ_WRITE_VAL    ;
     38        delete [] out_READ_WRITE_ACK    ;
     39        delete []  in_READ_WRITE_RW     ;
     40        delete []  in_READ_WRITE_ADDRESS;
     41        delete []  in_READ_WRITE_WDATA  ;
     42        delete [] out_READ_WRITE_RDATA  ;
     43       
     44        // ----- Register
     45        delete [] reg_DATA;
     46      }
    4547  };
    4648
     
    5052}; // end namespace behavioural         
    5153}; // end namespace morpheo             
    52 #endif
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/Makefile.deps

    r53 r57  
    1313include                         $(DIR_MORPHEO)/Behavioural/Makefile.deps
    1414endif
     15ifndef RegisterFile_Monolithic
     16include                         $(DIR_MORPHEO)/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/Makefile.deps
     17endif
     18ifndef Select_Priority_Fixed
     19include                         $(DIR_MORPHEO)/Behavioural/Generic/Select/Select_Priority_Fixed/Makefile.deps
     20endif
    1521
    1622#-----[ Library ]------------------------------------------
    17 RegisterFile_Multi_Banked_LIBRARY               =       -lRegisterFile_Multi_Banked     \
    18                                         $(Behavioural_LIBRARY) 
     23RegisterFile_Multi_Banked_LIBRARY               =       -lRegisterFile_Multi_Banked             \
     24                                                        $(Behavioural_LIBRARY)                  \
     25                                                        $(RegisterFile_Monolithic_LIBRARY)      \
     26                                                        $(Select_Priority_Fixed_LIBRARY)
    1927
    2028RegisterFile_Multi_Banked_DIR_LIBRARY           =       -L$(DIR_MORPHEO)/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/lib \
    21                                         $(Behavioural_DIR_LIBRARY)
     29                                                        $(Behavioural_DIR_LIBRARY)              \
     30                                                        $(RegisterFile_Monolithic_DIR_LIBRARY)  \
     31                                                        $(Select_Priority_Fixed_DIR_LIBRARY)
    2232
    2333#-----[ Rules ]--------------------------------------------
     
    2535RegisterFile_Multi_Banked_library               :
    2636                                @\
    27                                 $(MAKE) Behavioural_library; \
     37                                $(MAKE) Behavioural_library;                    \
     38                                $(MAKE) RegisterFile_Monolithic_library;        \
     39                                $(MAKE) Select_Priority_Fixed_library;          \
    2840                                $(MAKE) --directory=$(DIR_MORPHEO)/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked --makefile=Makefile;
    2941       
    3042RegisterFile_Multi_Banked_library_clean :
    3143                                @\
    32                                 $(MAKE) Behavioural_library_clean; \
     44                                $(MAKE) Behavioural_library_clean;              \
     45                                $(MAKE) RegisterFile_Monolithic_library_clean;  \
     46                                $(MAKE) Select_Priority_Fixed_library_clean;    \
    3347                                $(MAKE) --directory=$(DIR_MORPHEO)/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked --makefile=Makefile clean;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/SelfTest/src/test.cpp

    r53 r57  
    77 */
    88
    9 #define NB_ITERATION  1024
    10 #define CYCLE_MAX     (512*NB_ITERATION)
     9#define NB_ITERATION  1
     10#define CYCLE_MAX     (10240*NB_ITERATION)
    1111
    1212#include "Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/SelfTest/include/test.h"
     
    3434  cout << "<" << name << "> : Simulation SystemC" << endl;
    3535
     36
     37#ifdef STATISTICS
     38  morpheo::behavioural::Parameters_Statistics * _param_stat = new morpheo::behavioural::Parameters_Statistics(5,50);
     39#endif
     40
    3641  RegisterFile_Multi_Banked * _RegisterFile_Multi_Banked = new RegisterFile_Multi_Banked (name.c_str(),
    3742#ifdef STATISTICS
    38                                              morpheo::behavioural::Parameters_Statistics(5,50),
     43                                                                                          _param_stat,
    3944#endif
    40                                              *_param);
     45                                                                                          _param);
    4146 
    4247#ifdef SYSTEMC
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/include/Parameters.h

    r53 r57  
    7373    // A lot of table to the partial crossbar
    7474  public :       uint32_t  * _link_port_read_to_bank_read  ;
    75 //   public :       uint32_t  * _link_port_read_to_num_bank   ;
     75//public :       uint32_t  * _link_port_read_to_num_bank   ;
    7676  public :       uint32_t  * _link_port_write_to_bank_write;
    77 //   public :       uint32_t  * _link_port_write_to_num_bank  ;
     77//public :       uint32_t  * _link_port_write_to_num_bank  ;
    7878
    7979    //-----[ methods ]-----------------------------------------------------------
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/include/RegisterFile_Multi_Banked.h

    r53 r57  
    4343    // -----[ fields ]----------------------------------------------------
    4444    // Parameters
    45   protected : const string     _name;
     45  protected : const string       _name;
    4646
    47   protected : const Parameters _param;
     47  protected : const Parameters * _param;
    4848//#ifdef STATISTICS
    4949//  protected : const morpheo::behavioural::Parameters_Statistics _param_statistics;
     
    9898  public  :          RegisterFile_Multi_Banked              (
    9999#ifdef SYSTEMC
    100                                               sc_module_name                              name,
     100                                              sc_module_name                                name,
    101101#else                                         
    102                                               string                                      name,
     102                                              string                                        name,
    103103#endif                                         
    104104#ifdef STATISTICS
    105                                               morpheo::behavioural::Parameters_Statistics param_statistics,
     105                                              morpheo::behavioural::Parameters_Statistics * param_statistics,
    106106#endif
    107                                               Parameters                                  param );
     107                                              Parameters                                  * param );
    108108                                               
    109   public  :          RegisterFile_Multi_Banked              (Parameters param );
    110109  public  :          ~RegisterFile_Multi_Banked             (void);
    111110                                               
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/include/Statistics.h

    r53 r57  
    2828  {
    2929    // -----[ fields ]----------------------------------------------------
    30   private  : const Parameters                                   _parameters;
     30  private  : const Parameters *                                 _parameters;
    3131
    3232    // -----[ methods ]---------------------------------------------------
    33   public   : Statistics  (string                                      name                       ,
    34                           morpheo::behavioural::Parameters_Statistics parameters_statistics      ,
    35                           Parameters                                  parameters
     33  public   : Statistics  (string                                        name                       ,
     34                          morpheo::behavioural::Parameters_Statistics * parameters_statistics      ,
     35                          Parameters                                  * parameters
    3636                          );
    3737//public   : Statistics  (Statistics & stat);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/include/Types.h

    r53 r57  
    99 */
    1010
    11 #include "Common/include/Types.h"
     11#include "Behavioural/include/Types.h"
    1212
    1313namespace morpheo                    {
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/Parameters.cpp

    r53 r57  
    5353       
    5454        _link_port_read_to_bank_read     = new uint32_t [_nb_port_read ];
    55 //      _link_port_read_to_num_bank      = new uint32_t [_nb_port_read ];
    5655        _link_port_write_to_bank_write   = new uint32_t [_nb_port_write];
    57 //      _link_port_write_to_num_bank     = new uint32_t [_nb_port_write];
    5856
    59 //      uint32_t _nb_port_bank_by_bank_read_port  [_nb_port_read_by_bank ];
    60 //      uint32_t _nb_port_bank_by_bank_write_port [_nb_port_write_by_bank];
    61        
    6257        // init
    63 //      for (uint32_t i=0; i<_nb_port_read_by_bank ;i++)
    64 //        _nb_port_bank_by_bank_read_port  [i] = 0;
    65        
    66         for (uint32_t i=0; i<_nb_port_read         ;i++)
     58        for (uint32_t i=0; i<_nb_port_read ;i++)
    6759          {
    6860            uint32_t x = i%_nb_port_read_by_bank;
    6961            _link_port_read_to_bank_read [i] = x;
    70 //          _link_port_read_to_num_bank  [i] = _nb_port_bank_by_bank_read_port [x];
    71 //          _nb_port_bank_by_bank_read_port    [x] ++;
    7262          }
    73 
    74         // init
    75 //      for (uint32_t i=0; i<_nb_port_write_by_bank ;i++)
    76 //        _nb_port_bank_by_bank_write_port [i] = 0;
    77        
    78         for (uint32_t i=0; i<_nb_port_write         ;i++)
     63        for (uint32_t i=0; i<_nb_port_write;i++)
    7964          {
    8065            uint32_t x = i%_nb_port_write_by_bank;
    8166            _link_port_write_to_bank_write   [i] = x;
    82 //          _link_port_write_to_num_bank     [i] = _nb_port_bank_by_bank_write_port [x];
    83 //          _nb_port_bank_by_bank_write_port       [x] ++;
    8467          }
    8568
     
    8770        log_printf(NONE,RegisterFile_Multi_Banked,"Parameters"," * _link_port_read_to_bank_read");
    8871        for (uint32_t i=0; i<_nb_port_read         ;i++)
     72          {
    8973          log_printf(NONE,RegisterFile_Multi_Banked,"Parameters","   * Read  in  [%d] to out    [%d]",i,_link_port_read_to_bank_read          [i]);
    90 //      log_printf(NONE,RegisterFile_Multi_Banked,"Parameters"," * _link_port_read_to_num_bank  ");
    91 //      for (uint32_t i=0; i<_nb_port_read         ;i++)
    92 //        log_printf(NONE,RegisterFile_Multi_Banked,"Parameters","   * Read  in  [%d] to bank   [%d]",i,_link_port_read_to_num_bank         [i]);
    93 
     74          printf("   * Read  in  [%d] to out    [%d]\n",i,_link_port_read_to_bank_read          [i]);
     75          }
    9476        log_printf(NONE,RegisterFile_Multi_Banked,"Parameters"," * _link_port_write_to_bank_write");
    9577        for (uint32_t i=0; i<_nb_port_write        ;i++)
    96           log_printf(NONE,RegisterFile_Multi_Banked,"Parameters","   * Write in  [%d] to out    [%d]",i,_link_port_write_to_bank_write          [i]);
    97 //      log_printf(NONE,RegisterFile_Multi_Banked,"Parameters"," * _link_port_write_to_num_bank  ");
    98 //      for (uint32_t i=0; i<_nb_port_write        ;i++)
    99 //        log_printf(NONE,RegisterFile_Multi_Banked,"Parameters","   * Write in  [%d] to bank   [%d]",i,_link_port_write_to_num_bank         [i]);
     78          {
     79            log_printf(NONE,RegisterFile_Multi_Banked,"Parameters","   * Write in  [%d] to out    [%d]",i,_link_port_write_to_bank_write          [i]);
     80            printf("   * Write in  [%d] to out    [%d]\n",i,_link_port_write_to_bank_write          [i]);
     81          }
    10082      }
    10183    // else : don't allocate
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked.cpp

    r53 r57  
    2121#endif
    2222#ifdef STATISTICS
    23                               morpheo::behavioural::Parameters_Statistics             param_statistics,
     23                              morpheo::behavioural::Parameters_Statistics * param_statistics,
    2424#endif
    25                               morpheo::behavioural::generic::registerfile::registerfile_multi_banked::Parameters param ):
     25                              morpheo::behavioural::generic::registerfile::registerfile_multi_banked::Parameters * param ):
    2626                              _name              (name)
    2727                              ,_param            (param)
     
    5656#ifdef SYSTEMC
    5757    // Function pointer
    58     if (_param._crossbar == FULL_CROSSBAR)                             
     58    if (_param->_crossbar == FULL_CROSSBAR)                             
    5959      {
    6060        function_transition     = &morpheo::behavioural::generic::registerfile::registerfile_multi_banked::RegisterFile_Multi_Banked::   full_crossbar_transition;
     
    8484    dont_initialize ();
    8585    sensitive_neg << *(in_CLOCK);
    86     for (uint32_t i=0; i<_param._nb_port_read; i++)
     86    for (uint32_t i=0; i<_param->_nb_port_read; i++)
    8787      sensitive << *( in_READ_VAL     [i])
    8888                << *( in_READ_ADDRESS [i]);
     
    9090#ifdef SYSTEMCASS_SPECIFIC
    9191    // List dependency information
    92     for (uint32_t i=0; i<_param._nb_port_read; i++)
     92    for (uint32_t i=0; i<_param->_nb_port_read; i++)
    9393      {
    9494        (*(out_READ_ACK  [i])) (*( in_READ_VAL     [i]));
     
    9797        (*(out_READ_DATA [i])) (*( in_READ_ADDRESS [i]));
    9898      }
     99//     for (uint32_t i=0; i<_param->_nb_port_read_write; i++)
     100//       { 
     101//      (*(out_READ_WRITE_RDATA [i])) (*( in_READ_WRITE_VAL     [i]));
     102//      (*(out_READ_WRITE_RDATA [i])) (*( in_READ_WRITE_RW      [i]));
     103//      (*(out_READ_WRITE_RDATA [i])) (*( in_READ_WRITE_ADDRESS [i]));
     104//       }
    99105#endif   
    100106
     
    102108    dont_initialize ();
    103109    sensitive_neg << *(in_CLOCK);
    104     for (uint32_t i=0; i<_param._nb_port_write; i++)
     110    for (uint32_t i=0; i<_param->_nb_port_write; i++)
    105111      sensitive << *( in_WRITE_VAL     [i])
    106112                << *( in_WRITE_ADDRESS [i])
     
    109115#ifdef SYSTEMCASS_SPECIFIC
    110116    // List dependency information
    111     for (uint32_t i=0; i<_param._nb_port_write; i++)
     117    for (uint32_t i=0; i<_param->_nb_port_write; i++)
    112118      {
    113119        (*(out_WRITE_ACK  [i])) (*( in_WRITE_VAL     [i]));
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_address_xxx.cpp

    r53 r57  
    2020    log_printf(FUNC,RegisterFile_Multi_Banked,"address_bank","Begin");
    2121   
    22     Taddress_t _return = _param._bank_mask & (address >> _param._bank_shift);
     22    Taddress_t _return = _param->_bank_mask & (address >> _param->_bank_shift);
    2323
    2424    log_printf(FUNC,RegisterFile_Multi_Banked,"address_bank","End");
     
    3131    log_printf(FUNC,RegisterFile_Multi_Banked,"address_num_reg","Begin");
    3232
    33     Taddress_t _return = _param._num_reg_mask & (address >> _param._num_reg_shift);
     33    Taddress_t _return = _param->_num_reg_mask & (address >> _param->_num_reg_shift);
    3434   
    3535    log_printf(FUNC,RegisterFile_Multi_Banked,"address_num_reg","End");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_allocation.cpp

    r53 r57  
    4848    // ~~~~~[ Interface : "read" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    4949
    50      in_READ_VAL         = new SC_IN (Tcontrol_t) * [_param._nb_port_read];
    51     out_READ_ACK         = new SC_OUT(Tcontrol_t) * [_param._nb_port_read];
    52      in_READ_ADDRESS     = new SC_IN (Taddress_t) * [_param._nb_port_read];
    53     out_READ_DATA        = new SC_OUT(Tdata_t   ) * [_param._nb_port_read];
     50     in_READ_VAL         = new SC_IN (Tcontrol_t) * [_param->_nb_port_read];
     51    out_READ_ACK         = new SC_OUT(Tcontrol_t) * [_param->_nb_port_read];
     52     in_READ_ADDRESS     = new SC_IN (Taddress_t) * [_param->_nb_port_read];
     53    out_READ_DATA        = new SC_OUT(Tdata_t   ) * [_param->_nb_port_read];
    5454
    55     for (uint32_t i=0; i<_param._nb_port_read; i++)
     55    for (uint32_t i=0; i<_param->_nb_port_read; i++)
    5656      {
    5757        Interface_fifo * interface = _interfaces->set_interface("read_"+toString(i)
     
    6565         in_READ_VAL     [i]  = interface->set_signal_valack_in        ("val"    , VAL);
    6666        out_READ_ACK     [i]  = interface->set_signal_valack_out       ("ack"    , ACK);
    67          in_READ_ADDRESS [i]  = interface->set_signal_in  <Taddress_t> ("address", static_cast<uint32_t>(log2(_param._nb_word)));
    68         out_READ_DATA    [i]  = interface->set_signal_out <Tdata_t   > ("data"   , _param._size_word);
     67         in_READ_ADDRESS [i]  = interface->set_signal_in  <Taddress_t> ("address", static_cast<uint32_t>(log2(_param->_nb_word)));
     68        out_READ_DATA    [i]  = interface->set_signal_out <Tdata_t   > ("data"   , _param->_size_word);
    6969      }
    7070
    7171    // ~~~~~[ Interface : "write" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    7272
    73      in_WRITE_VAL        = new SC_IN (Tcontrol_t) * [_param._nb_port_write];
    74     out_WRITE_ACK        = new SC_OUT(Tcontrol_t) * [_param._nb_port_write];
    75      in_WRITE_ADDRESS    = new SC_IN (Taddress_t) * [_param._nb_port_write];
    76      in_WRITE_DATA       = new SC_IN (Tdata_t   ) * [_param._nb_port_write];
     73     in_WRITE_VAL        = new SC_IN (Tcontrol_t) * [_param->_nb_port_write];
     74    out_WRITE_ACK        = new SC_OUT(Tcontrol_t) * [_param->_nb_port_write];
     75     in_WRITE_ADDRESS    = new SC_IN (Taddress_t) * [_param->_nb_port_write];
     76     in_WRITE_DATA       = new SC_IN (Tdata_t   ) * [_param->_nb_port_write];
    7777   
    78     for (uint32_t i=0; i<_param._nb_port_write; i++)
     78    for (uint32_t i=0; i<_param->_nb_port_write; i++)
    7979      {
    8080        Interface_fifo * interface = _interfaces->set_interface("write_"+toString(i)
     
    8888         in_WRITE_VAL     [i]  = interface->set_signal_valack_in        ("val"    , VAL);
    8989        out_WRITE_ACK     [i]  = interface->set_signal_valack_out       ("ack"    , ACK);
    90          in_WRITE_ADDRESS [i]  = interface->set_signal_in  <Taddress_t> ("address", static_cast<uint32_t>(log2(_param._nb_word)));
    91          in_WRITE_DATA    [i]  = interface->set_signal_in  <Tdata_t   > ("data"   , _param._size_word);
     90         in_WRITE_ADDRESS [i]  = interface->set_signal_in  <Taddress_t> ("address", static_cast<uint32_t>(log2(_param->_nb_word)));
     91         in_WRITE_DATA    [i]  = interface->set_signal_in  <Tdata_t   > ("data"   , _param->_size_word);
    9292      }
    9393
    9494    // ~~~~~[ Registers ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    9595
    96     reg_DATA = new SC_REGISTER (Tdata_t) ** [_param._nb_bank];
     96    reg_DATA = new SC_REGISTER (Tdata_t) ** [_param->_nb_bank];
    9797
    98     for (uint32_t i=0; i<_param._nb_bank; i++)
     98    for (uint32_t i=0; i<_param->_nb_bank; i++)
    9999      {
    100         reg_DATA [i] = new SC_REGISTER (Tdata_t) * [_param._nb_word];
     100        reg_DATA [i] = new SC_REGISTER (Tdata_t) * [_param->_nb_word];
    101101       
    102         for (uint32_t j=0; j<_param._nb_word; j++)
     102        for (uint32_t j=0; j<_param->_nb_word; j++)
    103103          {
    104104            string rename = "reg_DATA_"  + toString(i) + "_"  + toString(j);
     
    108108
    109109    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    110     internal_WRITE_VAL     = new bool       [_param._nb_port_write];
    111     internal_WRITE_BANK    = new Taddress_t [_param._nb_port_write];
    112     internal_WRITE_NUM_REG = new Taddress_t [_param._nb_port_write];
     110    internal_WRITE_VAL     = new bool       [_param->_nb_port_write];
     111    internal_WRITE_BANK    = new Taddress_t [_param->_nb_port_write];
     112    internal_WRITE_NUM_REG = new Taddress_t [_param->_nb_port_write];
    113113
    114114    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_full_crossbar_genMealy_read.cpp

    r53 r57  
    2121    log_printf(FUNC,RegisterFile_Multi_Banked,"full_crossbar_genMealy_read","Begin");
    2222
    23     bool read_port_use [_param._nb_bank][_param._nb_port_read_by_bank];
     23    bool read_port_use [_param->_nb_bank][_param->_nb_port_read_by_bank];
    2424
    25     for (uint32_t i=0; i<_param._nb_bank; i++)
    26       for (uint32_t j=0; j<_param._nb_port_read_by_bank; j++)
     25    for (uint32_t i=0; i<_param->_nb_bank; i++)
     26      for (uint32_t j=0; j<_param->_nb_port_read_by_bank; j++)
    2727        read_port_use [i][j]=false;
    2828
    29     for (uint32_t i=0; i<_param._nb_port_read; i++)
     29    for (uint32_t i=0; i<_param->_nb_port_read; i++)
    3030      {
    3131        bool val = PORT_READ(in_READ_VAL    [i]);
     
    4343
    4444            // Search loop
    45             for (uint32_t j=0; j<_param._nb_port_read_by_bank; j++)
     45            for (uint32_t j=0; j<_param->_nb_port_read_by_bank; j++)
    4646              {
    4747                // find a unbusy port on this bank
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_full_crossbar_genMealy_write.cpp

    r53 r57  
    2121    log_printf(FUNC,RegisterFile_Multi_Banked,"full_crossbar_genMealy_write","Begin");
    2222
    23     bool write_port_use [_param._nb_bank][_param._nb_port_write_by_bank];
     23    bool write_port_use [_param->_nb_bank][_param->_nb_port_write_by_bank];
    2424
    25     for (uint32_t i=0; i<_param._nb_bank; i++)
    26       for (uint32_t j=0; j<_param._nb_port_write_by_bank; j++)
     25    for (uint32_t i=0; i<_param->_nb_bank; i++)
     26      for (uint32_t j=0; j<_param->_nb_port_write_by_bank; j++)
    2727        write_port_use [i][j]=false;
    2828
    29     for (uint32_t i=0; i<_param._nb_port_write; i++)
     29    for (uint32_t i=0; i<_param->_nb_port_write; i++)
    3030      {
    3131        bool val = PORT_READ(in_WRITE_VAL    [i]);
     
    4444
    4545            // Search loop
    46             for (uint32_t j=0; j<_param._nb_port_write_by_bank; j++)
     46            for (uint32_t j=0; j<_param->_nb_port_write_by_bank; j++)
    4747              {
    4848                // find a unbusy port on this bank
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_partial_crossbar_genMealy_read.cpp

    r53 r57  
    2121    log_printf(FUNC,RegisterFile_Multi_Banked,"partial_crossbar_genMealy_read","Begin");
    2222
    23     bool read_port_use [_param._nb_bank][_param._nb_port_read_by_bank];
     23    bool read_port_use [_param->_nb_bank][_param->_nb_port_read_by_bank];
    2424
    25     for (uint32_t i=0; i<_param._nb_bank; i++)
    26       for (uint32_t j=0; j<_param._nb_port_read_by_bank; j++)
     25    for (uint32_t i=0; i<_param->_nb_bank; i++)
     26      for (uint32_t j=0; j<_param->_nb_port_read_by_bank; j++)
    2727        read_port_use [i][j]=false;
    2828
    29     for (uint32_t i=0; i<_param._nb_port_read; i++)
     29    for (uint32_t i=0; i<_param->_nb_port_read; i++)
    3030      {
    3131        bool val = PORT_READ(in_READ_VAL    [i]);
     
    4343
    4444//          // Search loop
    45 //          for (uint32_t j=0; j<_param._nb_port_read_by_bank; j++)
     45//          for (uint32_t j=0; j<_param->_nb_port_read_by_bank; j++)
    4646//            {
    4747           
    48             uint32_t j = _param._link_port_read_to_bank_read [i];
     48            uint32_t j = _param->_link_port_read_to_bank_read [i];
    4949
    5050                // find a unbusy port on this bank
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_partial_crossbar_genMealy_write.cpp

    r53 r57  
    2121    log_printf(FUNC,RegisterFile_Multi_Banked,"partial_crossbar_genMealy_write","Begin");
    2222
    23     bool write_port_use [_param._nb_bank][_param._nb_port_write_by_bank];
    24     for (uint32_t i=0; i<_param._nb_bank; i++)
    25       for (uint32_t j=0; j<_param._nb_port_write_by_bank; j++)
     23    bool write_port_use [_param->_nb_bank][_param->_nb_port_write_by_bank];
     24    for (uint32_t i=0; i<_param->_nb_bank; i++)
     25      for (uint32_t j=0; j<_param->_nb_port_write_by_bank; j++)
    2626        write_port_use [i][j]=false;
    2727
    28     for (uint32_t i=0; i<_param._nb_port_write; i++)
     28    for (uint32_t i=0; i<_param->_nb_port_write; i++)
    2929      {
    3030        bool val = PORT_READ(in_WRITE_VAL    [i]);
     
    4343
    4444//          // Search loop
    45 //          for (uint32_t j=0; j<_param._nb_port_write_by_bank; j++)
     45//          for (uint32_t j=0; j<_param->_nb_port_write_by_bank; j++)
    4646//            {
    47             uint32_t j = _param._link_port_write_to_bank_write [i];
     47            uint32_t j = _param->_link_port_write_to_bank_write [i];
    4848
    4949                // find a unbusy port on this bank
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_transition.cpp

    r53 r57  
    2424//     (this->*function_transition) ();
    2525
    26     for (uint32_t i=0; i<_param._nb_port_write; i++)
     26    for (uint32_t i=0; i<_param->_nb_port_write; i++)
    2727      {
    2828        if (internal_WRITE_VAL [i] == 1)
     
    3434          }
    3535      }
    36 
    37 
    3836
    3937#ifdef STATISTICS
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_vhdl.cpp

    r53 r57  
    88
    99#include "Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/include/RegisterFile_Multi_Banked.h"
     10#include "Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/include/RegisterFile_Monolithic.h"
     11#include "Behavioural/Generic/Select/Select_Priority_Fixed/include/Select_Priority_Fixed.h"
    1012#include "Behavioural/include/Vhdl.h"
    1113
     
    1618namespace registerfile_multi_banked {
    1719
    18 
    1920  void RegisterFile_Multi_Banked::vhdl (void)
    2021  {
    2122    log_printf(FUNC,RegisterFile_Multi_Banked,"vhdl","Begin");
    22 
     23   
     24    //===================================
     25    //===== Component               =====
     26    //===================================
     27
     28    //----- RegisterFile_Monolithic -----
     29
     30    morpheo::behavioural::generic::registerfile::registerfile_monolithic::Parameters * param_bank;
     31    morpheo::behavioural::generic::registerfile::registerfile_monolithic::RegisterFile_Monolithic * bank;
     32   
     33    // Create all bank. All bank is identical
     34    param_bank = new morpheo::behavioural::generic::registerfile::registerfile_monolithic::Parameters
     35      (_param->_nb_port_read_by_bank
     36       ,_param->_nb_port_write_by_bank
     37       ,0 // mixte port
     38       ,_param->_nb_word/_param->_nb_bank
     39       ,_param->_size_word);
     40   
     41    string bank_name = _name + "_bank";
     42    bank = new morpheo::behavioural::generic::registerfile::registerfile_monolithic::RegisterFile_Monolithic
     43      (bank_name.c_str()
     44#ifdef STATISTICS
     45       ,NULL
     46#endif
     47       ,param_bank
     48       ,USE_VHDL);
     49   
     50    _component->set_component(bank->_component
     51#ifdef POSITION
     52                              , 0, 0, 0, 0
     53#endif
     54                              , INSTANCE_LIBRARY
     55                              );
     56   
     57
     58    //----- Select_Priority_Fixed -----
     59
     60    // Create all select_unit :
     61    //  * 4 units : to the read port, "quotient" ports and "rest" ports. Idem to the write port.
     62    //  * for a FULL_CROSSBAR, there are no "rest" ports
     63    uint32_t nb_select_port_1 ;
     64    uint32_t nb_select_port_2 ;
     65    uint32_t nb_select_port_3 ;
     66    uint32_t nb_select_port_4 ;
     67     
     68    if (_param->_crossbar == FULL_CROSSBAR)
     69      {
     70        nb_select_port_1 = _param->_nb_port_read ;
     71        nb_select_port_3 = _param->_nb_port_write;
     72        nb_select_port_2 = nb_select_port_4 = 0;
     73      }
     74    else
     75      {
     76        nb_select_port_2=(_param->_nb_port_read                  )/_param->_nb_port_read_by_bank;
     77        nb_select_port_1=((_param->_nb_port_read%_param->_nb_port_read_by_bank)==0)?0:(nb_select_port_2+1);
     78        nb_select_port_4=(_param->_nb_port_write                 )/_param->_nb_port_write_by_bank;
     79        nb_select_port_3=((_param->_nb_port_write%_param->_nb_port_write_by_bank)==0)?0:(nb_select_port_4+1);
     80      }
     81     
     82//     cout << "nb_select_port_1 : " << nb_select_port_1 << endl;
     83//     cout << "nb_select_port_2 : " << nb_select_port_2 << endl;
     84//     cout << "nb_select_port_3 : " << nb_select_port_3 << endl;
     85//     cout << "nb_select_port_4 : " << nb_select_port_4 << endl;
     86   
     87    morpheo::behavioural::generic::select::select_priority_fixed::Parameters *param_select1 = NULL;
     88    morpheo::behavioural::generic::select::select_priority_fixed::Parameters *param_select2 = NULL;
     89    morpheo::behavioural::generic::select::select_priority_fixed::Parameters *param_select3 = NULL;
     90    morpheo::behavioural::generic::select::select_priority_fixed::Parameters *param_select4 = NULL;
     91
     92    morpheo::behavioural::generic::select::select_priority_fixed::Select_Priority_Fixed *select1 = NULL;
     93    morpheo::behavioural::generic::select::select_priority_fixed::Select_Priority_Fixed *select2 = NULL;
     94    morpheo::behavioural::generic::select::select_priority_fixed::Select_Priority_Fixed *select3 = NULL;
     95    morpheo::behavioural::generic::select::select_priority_fixed::Select_Priority_Fixed *select4 = NULL;
     96
     97    bool have_select1 = ((nb_select_port_1 != 0               ));
     98    bool have_select2 = ((nb_select_port_2 != 0               ) and
     99                         (nb_select_port_2 != nb_select_port_1));
     100    bool have_select3 = ((nb_select_port_3 != 0               ) and
     101                         (nb_select_port_3 != nb_select_port_2) and
     102                         (nb_select_port_3 != nb_select_port_1));
     103    bool have_select4 = ((nb_select_port_4 != 0               ) and
     104                         (nb_select_port_4 != nb_select_port_3) and
     105                         (nb_select_port_4 != nb_select_port_2) and
     106                         (nb_select_port_4 != nb_select_port_1) );
     107
     108    string select_name1;
     109    string select_name2;
     110    string select_name3;
     111    string select_name4;
     112   
     113    if (have_select1)
     114      {
     115        select_name1  = _name+"_select_"+toString(nb_select_port_1)+"_ports";
     116        param_select1 = new morpheo::behavioural::generic::select::select_priority_fixed::Parameters (nb_select_port_1,true, false);
     117        select1       = new morpheo::behavioural::generic::select::select_priority_fixed::Select_Priority_Fixed
     118          (select_name1.c_str()
     119#ifdef STATISTICS
     120           ,NULL
     121#endif
     122           ,param_select1
     123           ,USE_VHDL);
     124
     125        _component->set_component(select1->_component
     126#ifdef POSITION
     127                                  , 0, 0, 0, 0
     128#endif
     129                                  , INSTANCE_LIBRARY
     130                                  );
     131      }
     132
     133    if (have_select2)
     134      {
     135        select_name2  = _name+"_select_"+toString(nb_select_port_2)+"_ports";
     136       
     137        param_select2 = new morpheo::behavioural::generic::select::select_priority_fixed::Parameters (nb_select_port_2,true, false);
     138        select2       = new morpheo::behavioural::generic::select::select_priority_fixed::Select_Priority_Fixed
     139          (select_name2.c_str()
     140#ifdef STATISTICS
     141           ,NULL
     142#endif
     143           ,param_select2
     144           ,USE_VHDL);
     145     
     146        _component->set_component(select2->_component
     147#ifdef POSITION
     148                                  , 0, 0, 0, 0
     149#endif
     150                                  , INSTANCE_LIBRARY
     151                                  );
     152      }
     153
     154    if (have_select3)
     155      {
     156        select_name3  = _name+"_select_"+toString(nb_select_port_3)+"_ports";
     157       
     158        param_select3 = new morpheo::behavioural::generic::select::select_priority_fixed::Parameters (nb_select_port_3,true, false);
     159        select3       = new morpheo::behavioural::generic::select::select_priority_fixed::Select_Priority_Fixed
     160          (select_name3.c_str()
     161#ifdef STATISTICS
     162           ,NULL
     163#endif
     164           ,param_select3
     165           ,USE_VHDL);
     166
     167        _component->set_component(select3->_component
     168#ifdef POSITION
     169                                  , 0, 0, 0, 0
     170#endif
     171                                  , INSTANCE_LIBRARY
     172                                  );
     173      }
     174   
     175    if (have_select4)
     176      {
     177        select_name4  = _name+"_select_"+toString(nb_select_port_4)+"_ports";
     178       
     179        param_select4 = new morpheo::behavioural::generic::select::select_priority_fixed::Parameters (nb_select_port_4,true, false);
     180        select4       = new morpheo::behavioural::generic::select::select_priority_fixed::Select_Priority_Fixed
     181          (select_name4.c_str()
     182#ifdef STATISTICS
     183           ,NULL
     184#endif
     185           ,param_select4
     186           ,USE_VHDL);
     187     
     188        _component->set_component(select4->_component
     189#ifdef POSITION
     190                                  , 0, 0, 0, 0
     191#endif
     192                                  , INSTANCE_LIBRARY
     193                                  );
     194      }
     195   
    23196    Vhdl * vhdl = new Vhdl (_name);
    24197
     
    32205
    33206    delete vhdl;
     207    delete bank;
     208    delete param_bank;
     209    if (have_select1)
     210      {
     211        delete select1;
     212        delete param_select1;
     213      }
     214    if (have_select2)
     215      {
     216        delete select2;
     217        delete param_select2;
     218      }
     219    if (have_select3)
     220      {
     221        delete select3;
     222        delete param_select3;
     223      }
     224    if (have_select4)
     225      {
     226        delete select4;
     227        delete param_select4;
     228      }
    34229
    35230    log_printf(FUNC,RegisterFile_Multi_Banked,"vhdl","End");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_vhdl_body.cpp

    r53 r57  
    2020    log_printf(FUNC,RegisterFile_Multi_Banked,"vhdl_body","Begin");
    2121
     22    uint32_t read_select_limit ;
     23    uint32_t read_nb_select1   ;
     24    uint32_t read_nb_select2   ;
     25    uint32_t write_select_limit;
     26    uint32_t write_nb_select1  ;
     27    uint32_t write_nb_select2  ;
     28   
     29    read_select_limit = _param->_nb_port_read%_param->_nb_port_read_by_bank;
     30    read_nb_select2   = _param->_nb_port_read/_param->_nb_port_read_by_bank;
     31    read_nb_select1   = (read_select_limit==0)?0:(read_nb_select2+1);               
     32 
     33    write_select_limit= _param->_nb_port_write%_param->_nb_port_write_by_bank;
     34    write_nb_select2  = _param->_nb_port_write/_param->_nb_port_write_by_bank;
     35    write_nb_select1  = (write_select_limit==0)?0:(write_nb_select2+1);             
     36
     37    vhdl->set_body("");
     38    vhdl->set_body("-----------------------------------");
     39    vhdl->set_body("-- Instance bank                   ");
     40    vhdl->set_body("-----------------------------------");
     41    vhdl->set_body("");
     42
     43    for (uint32_t i=0; i<_param->_nb_bank; i++)
     44      {
     45        vhdl->set_body(_name+"_bank_"+toString(i)+" : "+_name+"_bank");
     46        vhdl->set_body("port map (");
     47        vhdl->set_body("\t  in_CLOCK \t=>\tin_CLOCK ");
     48        vhdl->set_body("\t, in_NRESET\t=>\tin_NRESET");
     49        for (uint32_t j=0; j<_param->_nb_port_read_by_bank; j++)
     50          {
     51            vhdl->set_body("\t, in_READ_"+toString(j)+"_VAL     \t=>\tinternal_BANK_READ_"+toString(i)+"_"+toString(j)+"_VAL");
     52            vhdl->set_body("\t,out_READ_"+toString(j)+"_ACK     \t=>\tinternal_BANK_READ_"+toString(i)+"_"+toString(j)+"_ACK");
     53            vhdl->set_body("\t, in_READ_"+toString(j)+"_ADDRESS \t=>\tinternal_BANK_READ_"+toString(i)+"_"+toString(j)+"_ADDRESS");
     54            vhdl->set_body("\t,out_READ_"+toString(j)+"_DATA    \t=>\tinternal_BANK_READ_"+toString(i)+"_"+toString(j)+"_DATA");
     55          }
     56        for (uint32_t j=0; j<_param->_nb_port_write_by_bank; j++)
     57          {
     58            vhdl->set_body("\t, in_WRITE_"+toString(j)+"_VAL     \t=>\tinternal_BANK_WRITE_"+toString(i)+"_"+toString(j)+"_VAL");
     59            vhdl->set_body("\t,out_WRITE_"+toString(j)+"_ACK     \t=>\tinternal_BANK_WRITE_"+toString(i)+"_"+toString(j)+"_ACK");
     60            vhdl->set_body("\t, in_WRITE_"+toString(j)+"_ADDRESS \t=>\tinternal_BANK_WRITE_"+toString(i)+"_"+toString(j)+"_ADDRESS");
     61            vhdl->set_body("\t, in_WRITE_"+toString(j)+"_DATA    \t=>\tinternal_BANK_WRITE_"+toString(i)+"_"+toString(j)+"_DATA");
     62          }
     63
     64        vhdl->set_body(");");
     65        vhdl->set_body("");
     66      }
     67
     68    vhdl->set_body("");
     69    vhdl->set_body("-----------------------------------");
     70    vhdl->set_body("-- Instance select");
     71    vhdl->set_body("-- (1 select by port)");
     72    vhdl->set_body("-----------------------------------");
     73    vhdl->set_body("");
     74    for (uint32_t i=0; i<_param->_nb_bank; i++)
     75      {
     76        for (uint32_t j=0; j<_param->_nb_port_read_by_bank; j++)
     77          {
     78            uint32_t nb_port = (_param->_crossbar == FULL_CROSSBAR)?_param->_nb_port_read:((j<read_select_limit)?read_nb_select1:read_nb_select2);
     79
     80            vhdl->set_body(_name+"_read_select_"+toString(i)+"_"+toString(j)+" : "+_name+"_select_"+toString(nb_port)+"_ports");
     81            vhdl->set_body("port map (");
     82            for (uint32_t k=0; k<nb_port; k++)
     83              {
     84                uint32_t num_port  = _param->_nb_port_read_by_bank*k+j;
     85                string   separator = ((k==0)?" ":",");
     86               
     87                vhdl->set_body("\t"+separator+" in_VAL_"+toString(k)+"     \t=>\tinternal_READ_"+toString(i)+"_"+toString(num_port)+"_VAL");
     88                vhdl->set_body("\t,out_ACK_"+toString(k)+"     \t=>\tinternal_SELECT_READ_"+toString(i)+"_"+toString(num_port)+"_VAL");
     89              }
     90            vhdl->set_body(");");
     91            vhdl->set_body("");
     92          }
     93
     94        for (uint32_t j=0; j<_param->_nb_port_write_by_bank; j++)
     95          {
     96            uint32_t nb_port = (_param->_crossbar == FULL_CROSSBAR)?_param->_nb_port_write:((j<write_select_limit)?write_nb_select1:write_nb_select2);
     97
     98            vhdl->set_body(_name+"_write_select_"+toString(i)+"_"+toString(j)+" : "+_name+"_select_"+toString(nb_port)+"_ports");
     99            vhdl->set_body("port map (");
     100            for (uint32_t k=0; k<nb_port; k++)
     101              {
     102                uint32_t num_port  = _param->_nb_port_write_by_bank*k+j;
     103                string   separator = ((k==0)?" ":",");
     104               
     105                vhdl->set_body("\t"+separator+" in_VAL_"+toString(k)+"     \t=>\tinternal_WRITE_"+toString(i)+"_"+toString(num_port)+"_VAL");
     106                vhdl->set_body("\t,out_ACK_"+toString(k)+"     \t=>\tinternal_SELECT_WRITE_"+toString(i)+"_"+toString(num_port)+"_VAL");
     107              }
     108            vhdl->set_body(");");
     109            vhdl->set_body("");
     110          }
     111      }
     112
     113    vhdl->set_body("");
     114    vhdl->set_body("-----------------------------------");
     115    vhdl->set_body("-- Bank Val");
     116    vhdl->set_body("-----------------------------------");
     117    vhdl->set_body("");
     118    for (uint32_t i=0; i<_param->_nb_bank; i++)
     119      {
     120        for (uint32_t j=0; j<_param->_nb_port_read_by_bank; j++)
     121          {
     122            uint32_t nb_port = (_param->_crossbar == FULL_CROSSBAR)?_param->_nb_port_read:((j<read_select_limit)?read_nb_select1:read_nb_select2);
     123
     124            vhdl->set_body("internal_BANK_READ_"+toString(i)+"_"+toString(j)+ "_VAL <= '0'");
     125            for (uint32_t k=0; k<nb_port; k++)
     126              {
     127                uint32_t num_port  = _param->_nb_port_read_by_bank*k+j;
     128
     129                vhdl->set_body("\tor internal_SELECT_READ_"+toString(i)+"_"+toString(num_port)+"_VAL");
     130              }
     131            vhdl->set_body(";");
     132          }
     133        for (uint32_t j=0; j<_param->_nb_port_write_by_bank; j++)
     134          {
     135            uint32_t nb_port = (_param->_crossbar == FULL_CROSSBAR)?_param->_nb_port_write:((j<write_select_limit)?write_nb_select1:write_nb_select2);
     136
     137            vhdl->set_body("internal_BANK_WRITE_"+toString(i)+"_"+toString(j)+ "_VAL <= '0'");
     138            for (uint32_t k=0; k<nb_port; k++)
     139              {
     140                uint32_t num_port  = _param->_nb_port_write_by_bank*k+j;
     141
     142                vhdl->set_body("\tor internal_SELECT_WRITE_"+toString(i)+"_"+toString(num_port)+"_VAL");
     143              }
     144            vhdl->set_body(";");
     145          }
     146      }
     147
     148    vhdl->set_body("");
     149    vhdl->set_body("-----------------------------------");
     150    vhdl->set_body("-- Bank Address");
     151    vhdl->set_body("-----------------------------------");
     152    vhdl->set_body("");
     153    for (uint32_t i=0; i<_param->_nb_bank; i++)
     154      {
     155        for (uint32_t j=0; j<_param->_nb_port_read_by_bank; j++)
     156          {
     157            uint32_t nb_port = (_param->_crossbar == FULL_CROSSBAR)?_param->_nb_port_read:((j<read_select_limit)?read_nb_select1:read_nb_select2);
     158
     159            vhdl->set_body("internal_BANK_READ_"+toString(i)+"_"+toString(j)+ "_ADDRESS <=");
     160            for (uint32_t k=1; k<nb_port; k++)
     161              {
     162                uint32_t num_port  = _param->_nb_port_read_by_bank*k+j;
     163               
     164                vhdl->set_body("\tin_READ_"+toString(num_port)+"_ADDRESS"+std_logic_range(_param->_size_address_by_bank)+" when internal_READ_"+toString(i)+"_"+toString(num_port)+"_VAL='1' else");
     165              }
     166            vhdl->set_body("\tin_READ_"+toString(j)+"_ADDRESS"+std_logic_range(_param->_size_address_by_bank)+";");
     167//          vhdl->set_body("\t"+std_logic_others(_param->_size_word,0)+";");
     168          }
     169        for (uint32_t j=0; j<_param->_nb_port_write_by_bank; j++)
     170          {
     171            uint32_t nb_port = (_param->_crossbar == FULL_CROSSBAR)?_param->_nb_port_write:((j<write_select_limit)?write_nb_select1:write_nb_select2);
     172
     173            vhdl->set_body("internal_BANK_WRITE_"+toString(i)+"_"+toString(j)+ "_ADDRESS <=");
     174            for (uint32_t k=1; k<nb_port; k++)
     175              {
     176                uint32_t num_port  = _param->_nb_port_write_by_bank*k+j;
     177
     178                vhdl->set_body("\tin_WRITE_"+toString(num_port)+"_ADDRESS"+std_logic_range(_param->_size_address_by_bank)+" when internal_WRITE_"+toString(i)+"_"+toString(num_port)+"_VAL='1' else");
     179              }
     180            vhdl->set_body("\tin_WRITE_"+toString(j)+"_ADDRESS"+std_logic_range(_param->_size_address_by_bank)+";");
     181//          vhdl->set_body("\t"+std_logic_others(_param->_size_word,0)+";");
     182          }
     183      }
     184
     185    vhdl->set_body("");
     186    vhdl->set_body("-----------------------------------");
     187    vhdl->set_body("-- Bank Data");
     188    vhdl->set_body("-----------------------------------");
     189    vhdl->set_body("");
     190    for (uint32_t i=0; i<_param->_nb_bank; i++)
     191      {
     192        for (uint32_t j=0; j<_param->_nb_port_write_by_bank; j++)
     193          {
     194            uint32_t nb_port = (_param->_crossbar == FULL_CROSSBAR)?_param->_nb_port_write:((j<write_select_limit)?write_nb_select1:write_nb_select2);
     195
     196            vhdl->set_body("internal_BANK_WRITE_"+toString(i)+"_"+toString(j)+ "_DATA <=");
     197            for (uint32_t k=1; k<nb_port; k++)
     198              {
     199                uint32_t num_port  = _param->_nb_port_write_by_bank*k+j;
     200
     201                vhdl->set_body("\tin_WRITE_"+toString(num_port)+"_DATA when internal_WRITE_"+toString(i)+"_"+toString(num_port)+"_VAL='1' else");
     202              }
     203            vhdl->set_body("\tin_WRITE_"+toString(j)+"_DATA;");
     204//          vhdl->set_body("\t"+std_logic_others(_param->_size_word,0)+";");
     205          }
     206      }
     207
     208    vhdl->set_body("");
     209    vhdl->set_body("-----------------------------------");
     210    vhdl->set_body("-- VAL (to Select)");
     211    vhdl->set_body("-----------------------------------");
     212    vhdl->set_body("");
     213
     214    for (uint32_t i=0; i<_param->_nb_bank; i++)
     215      {
     216        for (uint32_t j=0; j<_param->_nb_port_read; j ++)
     217          {
     218            string address = (_param->_nb_bank==1)?"":("and (in_READ_"+toString(j)+"_ADDRESS"+std_logic_range(_param->_size_address-1,_param->_size_address_by_bank)+"="+std_logic_conv( _param->_size_address-_param->_size_address_by_bank,i)+")");
     219
     220            vhdl->set_body("internal_READ_"+toString(i)+"_"+toString(j)+"_VAL <= '1' when (in_READ_"+toString(j)+"_VAL='1') "+address+"else '0';");
     221          }
     222        for (uint32_t j=0; j<_param->_nb_port_write; j ++)
     223          {
     224            string address = (_param->_nb_bank==1)?"":("and (in_WRITE_"+toString(j)+"_ADDRESS"+std_logic_range(_param->_size_address-1,_param->_size_address_by_bank)+"="+std_logic_conv( _param->_size_address-_param->_size_address_by_bank,i)+")");
     225            vhdl->set_body("internal_WRITE_"+toString(i)+"_"+toString(j)+"_VAL <= '1' when (in_WRITE_"+toString(j)+"_VAL='1') "+address+" else '0';");
     226          }
     227      }
     228
     229    vhdl->set_body("");
     230    vhdl->set_body("-----------------------------------");
     231    vhdl->set_body("-- OUTPUT");
     232    vhdl->set_body("-----------------------------------");
     233    vhdl->set_body("");
     234
     235    if (_param->_crossbar == FULL_CROSSBAR)
     236      {
     237        for (uint32_t i=0; i<_param->_nb_port_read; i ++)
     238          {
     239            vhdl->set_body("out_READ_"+toString(i)+"_ACK <= ");
     240            for (uint32_t j=0; j<_param->_nb_bank; j ++)
     241              {
     242                for (uint32_t k=0; k<_param->_nb_port_read_by_bank; k ++)
     243                  {
     244                    vhdl->set_body("\tinternal_BANK_READ_"+toString(j)+"_"+toString(k)+"_ACK when internal_SELECT_READ_"+toString(j)+"_"+toString(k)+"_VAL = '1' else");
     245                  }
     246              }
     247            vhdl->set_body("\t'0';");
     248            vhdl->set_body("out_READ_"+toString(i)+"_DATA <= ");
     249            for (uint32_t j=0; j<_param->_nb_bank; j ++)
     250              {
     251                for (uint32_t k=0; k<_param->_nb_port_read_by_bank; k ++)
     252                  {
     253                    vhdl->set_body("\tinternal_BANK_READ_"+toString(j)+"_"+toString(k)+"_DATA when internal_SELECT_READ_"+toString(j)+"_"+toString(k)+"_VAL = '1' else");
     254                  }
     255              }
     256            vhdl->set_body("\t"+std_logic_others(_param->_size_word,0)+";");
     257          }
     258        for (uint32_t i=0; i<_param->_nb_port_write; i ++)
     259          {
     260            vhdl->set_body("out_WRITE_"+toString(i)+"_ACK <= ");
     261            for (uint32_t j=0; j<_param->_nb_bank; j ++)
     262              {
     263                for (uint32_t k=0; k<_param->_nb_port_write_by_bank; k ++)
     264                  {
     265                    vhdl->set_body("\tinternal_BANK_WRITE_"+toString(j)+"_"+toString(k)+"_ACK when internal_SELECT_WRITE_"+toString(j)+"_"+toString(k)+"_VAL = '1' else");
     266                  }
     267              }
     268            vhdl->set_body("\t'0';");
     269          }
     270      }
     271    else
     272      {
     273        for (uint32_t i=0; i<_param->_nb_port_read; i ++)
     274          {
     275            uint32_t link = _param->_link_port_read_to_bank_read[i];
     276
     277            vhdl->set_body("out_READ_"+toString(i)+"_ACK <= ");
     278            for (uint32_t j=0; j<_param->_nb_bank; j ++)
     279              {
     280                vhdl->set_body("\tinternal_BANK_READ_"+toString(j)+"_"+toString(link)+"_ACK when internal_SELECT_READ_"+toString(j)+"_"+toString(link)+"_VAL = '1' else");
     281              }
     282//          vhdl->set_body("\tinternal_BANK_READ_"+toString(0)+"_"+toString(link)+"_ACK;");
     283            vhdl->set_body("\t'0';");
     284
     285            vhdl->set_body("out_READ_"+toString(i)+"_DATA <= ");
     286            for (uint32_t j=1; j<_param->_nb_bank; j ++)
     287              {
     288                vhdl->set_body("\tinternal_BANK_READ_"+toString(j)+"_"+toString(link)+"_DATA when internal_SELECT_READ_"+toString(j)+"_"+toString(i)+"_VAL = '1' else");
     289              }
     290            vhdl->set_body("\tinternal_BANK_READ_"+toString(0)+"_"+toString(link)+"_DATA;");
     291//          vhdl->set_body("\t"+std_logic_others(_param->_size_word,0)+";");
     292          }
     293        for (uint32_t i=0; i<_param->_nb_port_write; i ++)
     294          {
     295            uint32_t link = _param->_link_port_write_to_bank_write[i];
     296
     297            vhdl->set_body("out_WRITE_"+toString(i)+"_ACK <= ");
     298            for (uint32_t j=0; j<_param->_nb_bank; j ++)
     299              {
     300                vhdl->set_body("\tinternal_BANK_WRITE_"+toString(j)+"_"+toString(link)+"_ACK when internal_SELECT_WRITE_"+toString(j)+"_"+toString(i)+"_VAL = '1' else");
     301              }
     302//          vhdl->set_body("\tinternal_BANK_WRITE_"+toString(0)+"_"+toString(link)+"_ACK;");
     303            vhdl->set_body("\t'0';");
     304          }
     305      }
     306
    22307    log_printf(FUNC,RegisterFile_Multi_Banked,"vhdl_body","End");
    23308  };
     
    26311}; // end namespace registerfile
    27312}; // end namespace generic
    28 
    29313}; // end namespace behavioural
    30314}; // end namespace morpheo             
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_vhdl_declaration.cpp

    r53 r57  
    2020    log_printf(FUNC,RegisterFile_Multi_Banked,"vhdl_declaration","Begin");
    2121
    22     vhdl->set_type   ("Tregfile", "array (" + toString(_param._nb_word_by_bank-1) + " downto 0) of " + std_logic(_param._size_word));
     22    for (uint32_t i=0; i<_param->_nb_bank; i++)
     23      {
     24        for (uint32_t j=0; j<_param->_nb_port_read; j ++)
     25          {
     26            vhdl->set_signal ("internal_READ_"+toString(i)+"_"+toString(j)+"_VAL" ,1);
     27            vhdl->set_signal ("internal_READ_"+toString(i)+"_"+toString(j)+"_ACK" ,1);
     28            vhdl->set_signal ("internal_SELECT_READ_"+toString(i)+"_"+toString(j)+"_VAL" ,1);
    2329
    24     vhdl->set_type   ("Tbank"   , "array (" + toString(_param._nb_bank)           + " downto 0) of Tregfile");
    25 
    26     vhdl->set_signal ("reg_DATA", "Tbank");
    27 
    28     for (uint32_t i=0; i<_param._nb_bank; i++)
    29       {
    30         for (uint32_t j=0; j<_param._nb_port_read_by_bank; j ++)
     30          }
     31        for (uint32_t j=0; j<_param->_nb_port_read_by_bank; j ++)
    3132          {
    32             vhdl->set_signal ("internal_READ_"+toString(i)+"_"+toString(j)+"_VAL"  ,1);
    33             vhdl->set_signal ("internal_READ_"+toString(i)+"_"+toString(j)+"_PORT" ,static_cast<uint32_t>(ceil(log2(_param._nb_port_read))));
     33            vhdl->set_signal ("internal_BANK_READ_"+toString(i)+"_"+toString(j)+"_VAL" ,1);
     34            vhdl->set_signal ("internal_BANK_READ_"+toString(i)+"_"+toString(j)+"_ACK"    ,1);
     35            vhdl->set_signal ("internal_BANK_READ_"+toString(i)+"_"+toString(j)+"_ADDRESS",_param->_size_address_by_bank);
     36            vhdl->set_signal ("internal_BANK_READ_"+toString(i)+"_"+toString(j)+"_DATA"   ,_param->_size_word);
    3437          }
    35         for (uint32_t j=0; j<_param._nb_port_write_by_bank; j ++)
     38        for (uint32_t j=0; j<_param->_nb_port_write; j ++)
    3639          {
    3740            vhdl->set_signal ("internal_WRITE_"+toString(i)+"_"+toString(j)+"_VAL" ,1);
    38             vhdl->set_signal ("internal_WRITE_"+toString(i)+"_"+toString(j)+"_PORT",static_cast<uint32_t>(ceil(log2(_param._nb_port_write))));
     41            vhdl->set_signal ("internal_WRITE_"+toString(i)+"_"+toString(j)+"_ACK" ,1);
     42            vhdl->set_signal ("internal_SELECT_WRITE_"+toString(i)+"_"+toString(j)+"_VAL"    ,1);
     43          }
     44        for (uint32_t j=0; j<_param->_nb_port_write_by_bank; j ++)
     45          {
     46            vhdl->set_signal ("internal_BANK_WRITE_"+toString(i)+"_"+toString(j)+"_VAL"    ,1);
     47            vhdl->set_signal ("internal_BANK_WRITE_"+toString(i)+"_"+toString(j)+"_ACK"    ,1);
     48            vhdl->set_signal ("internal_BANK_WRITE_"+toString(i)+"_"+toString(j)+"_ADDRESS",_param->_size_address_by_bank);
     49            vhdl->set_signal ("internal_BANK_WRITE_"+toString(i)+"_"+toString(j)+"_DATA"   ,_param->_size_word);
    3950          }
    4051      }
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/Statistics.cpp

    r53 r57  
    1717
    1818  Statistics::Statistics (string                                      name                       ,
    19                           morpheo::behavioural::Parameters_Statistics parameters_statistics      ,
    20                           Parameters                                  parameters
     19                          morpheo::behavioural::Parameters_Statistics * parameters_statistics      ,
     20                          Parameters                                  * parameters
    2121                          ) :
    2222    morpheo::behavioural::Statistics(name                  ,
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Select/Select_Priority_Fixed/SelfTest/config_compact.cfg

    r43 r57  
    11Select_Priority_Fixed
    222       16      *2      # nb_entity
    3 0       1       +1      # encoding_one_hot
     30       0       +1      # encoding_one_hot
    441       1       +1      # encoding_compact
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Select/Select_Priority_Fixed/SelfTest/include/test.h

    r15 r57  
    2525
    2626void test    (string name,
    27               morpheo::behavioural::generic::select::select_priority_fixed::Parameters param);
     27              morpheo::behavioural::generic::select::select_priority_fixed::Parameters * param);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Select/Select_Priority_Fixed/SelfTest/mkf.info

    r15 r57  
    55target_dep      Select_Priority_Fixed_0.prj     Select_Priority_Fixed_0_Pack.vhdl Select_Priority_Fixed_0.vhdl
    66
     7# Select_Priority_Fixed_10
     8target_dep      all     Select_Priority_Fixed_10.ngc
     9target_dep      Select_Priority_Fixed_10.ngc    Select_Priority_Fixed_10.prj
     10target_dep      Select_Priority_Fixed_10.prj    Select_Priority_Fixed_10_Pack.vhdl Select_Priority_Fixed_10.vhdl
     11
     12# Select_Priority_Fixed_11
     13target_dep      all     Select_Priority_Fixed_11.ngc
     14target_dep      Select_Priority_Fixed_11.ngc    Select_Priority_Fixed_11.prj
     15target_dep      Select_Priority_Fixed_11.prj    Select_Priority_Fixed_11_Pack.vhdl Select_Priority_Fixed_11.vhdl
     16
    717# Select_Priority_Fixed_1
    818target_dep      all     Select_Priority_Fixed_1.ngc
    919target_dep      Select_Priority_Fixed_1.ngc     Select_Priority_Fixed_1.prj
    10 target_dep      Select_Priority_Fixed_1.prj     Select_Priority_Fixed_1_Pack.vhdl Select_Priority_Fixed_1.vhdl
     20target_dep      Select_Priority_Fixed_1.prj     Select_Priority_Fixed_10_Pack.vhdl Select_Priority_Fixed_10.vhdl Select_Priority_Fixed_11_Pack.vhdl Select_Priority_Fixed_11.vhdl Select_Priority_Fixed_1_Pack.vhdl Select_Priority_Fixed_1.vhdl
    1121
    1222# Select_Priority_Fixed_2
     
    4050target_dep      Select_Priority_Fixed_7.prj     Select_Priority_Fixed_7_Pack.vhdl Select_Priority_Fixed_7.vhdl
    4151
     52# Select_Priority_Fixed_8
     53target_dep      all     Select_Priority_Fixed_8.ngc
     54target_dep      Select_Priority_Fixed_8.ngc     Select_Priority_Fixed_8.prj
     55target_dep      Select_Priority_Fixed_8.prj     Select_Priority_Fixed_8_Pack.vhdl Select_Priority_Fixed_8.vhdl
     56
     57# Select_Priority_Fixed_9
     58target_dep      all     Select_Priority_Fixed_9.ngc
     59target_dep      Select_Priority_Fixed_9.ngc     Select_Priority_Fixed_9.prj
     60target_dep      Select_Priority_Fixed_9.prj     Select_Priority_Fixed_9_Pack.vhdl Select_Priority_Fixed_9.vhdl
     61
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Select/Select_Priority_Fixed/SelfTest/src/main.cpp

    r15 r57  
    4242  try
    4343    {
    44       morpheo::behavioural::generic::select::select_priority_fixed::Parameters param (nb_entity       ,
    45                                                                                encoding_one_hot,
    46                                                                                encoding_compact);
     44      morpheo::behavioural::generic::select::select_priority_fixed::Parameters * param = new morpheo::behavioural::generic::select::select_priority_fixed::Parameters
     45        (nb_entity       ,
     46         encoding_one_hot,
     47         encoding_compact);
    4748     
    48       cout << param.print(1);
     49      cout << param->print(1);
    4950     
    5051      test (name,param);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Select/Select_Priority_Fixed/SelfTest/src/test.cpp

    r44 r57  
    1313
    1414void test (string name,
    15            morpheo::behavioural::generic::select::select_priority_fixed::Parameters _param)
     15           morpheo::behavioural::generic::select::select_priority_fixed::Parameters * _param)
    1616{
    1717  cout << "<" << name << "> : Simulation SystemC" << endl;
    1818
     19
     20#ifdef STATISTICS
     21  morpheo::behavioural::Parameters_Statistics * _param_stat = new morpheo::behavioural::Parameters_Statistics (5,50);
     22#endif
    1923  Select_Priority_Fixed * _Select_Priority_Fixed = new Select_Priority_Fixed (name.c_str(),
    2024#ifdef STATISTICS
    21                                                                               morpheo::behavioural::Parameters_Statistics(5,50),
     25                                                                              _param_stat,
    2226#endif
    2327                                                                              _param);
     
    3842  CLOCK        = new sc_clock ("clock", 1.0, 0.5);
    3943  NRESET       = new sc_signal<Tcontrol_t> ("NRESET");
    40   VAL          = new sc_signal<Tcontrol_t> * [_param._nb_entity];
    41   ACK          = new sc_signal<Tcontrol_t> * [_param._nb_entity];
     44  VAL          = new sc_signal<Tcontrol_t> * [_param->_nb_entity];
     45  ACK          = new sc_signal<Tcontrol_t> * [_param->_nb_entity];
    4246
    43   for (uint32_t i=0; i<_param._nb_entity; i++)
     47  for (uint32_t i=0; i<_param->_nb_entity; i++)
    4448    {
    4549      rename = "VAL_"+toString(i);
     
    6165  (*(_Select_Priority_Fixed->in_NRESET))       (*(NRESET));
    6266
    63     for (uint32_t i=0; i<_param._nb_entity; i++)
     67    for (uint32_t i=0; i<_param->_nb_entity; i++)
    6468      {
    6569        (*(_Select_Priority_Fixed-> in_VAL [i]))        (*(VAL [i]));
    66         if (_param._encoding_one_hot)
     70        if (_param->_encoding_one_hot)
    6771        (*(_Select_Priority_Fixed->out_ACK [i]))        (*(ACK [i]));
    6872      }
    69     if (_param._encoding_compact)
     73    if (_param->_encoding_compact)
    7074      {
    7175    (*(_Select_Priority_Fixed->out_ENTITY    ))        (*(ENTITY    ));
     
    7882  cout << "<" << name << "> Start Simulation ............" << endl;
    7983
    80   if (_param._nb_entity > (8*sizeof (Tentity_t)))
     84  if (_param->_nb_entity > (8*sizeof (Tentity_t)))
    8185    throw ErrorMorpheo("No Selftest with nb_entity higher at "+toString(8*sizeof (Tentity_t)));
    8286
     
    99103      bool find = false;
    100104     
    101       for (uint32_t i=0; i<_param._nb_entity; i++)
     105      for (uint32_t i=0; i<_param->_nb_entity; i++)
    102106        {
    103107          Tcontrol_t val = rand() % 2;
     
    118122      entity = (find)?entity:0;
    119123
    120       if (_param._encoding_one_hot)
     124      if (_param->_encoding_one_hot)
    121125        TEST(Tcontrol_t, ACK   [entity]->read(), find  );
    122       if (_param._encoding_compact)
     126      if (_param->_encoding_compact)
    123127        {
    124128        TEST(Tentity_t , ENTITY        ->read(), entity); // burk
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Select/Select_Priority_Fixed/include/Select_Priority_Fixed.h

    r44 r57  
    2626#include "Behavioural/include/Vhdl.h"
    2727#endif
     28#include "Behavioural/include/Usage.h"
    2829
    2930using namespace std;
     
    4445    // Parameters
    4546  protected : const string     _name;
    46 
    47   protected : const Parameters _param;
     47  protected : const Parameters * _param;
     48  private   : const Tusage_t     _usage;
    4849//#ifdef STATISTICS
    4950//  protected : const morpheo::behavioural::Parameters_Statistics _param_statistics;
     
    5455#endif
    5556
    56   private   : Component                      * _component;
     57  public    : Component                      * _component;
    5758  private   : Interfaces                     * _interfaces;
    5859
     
    8182    SC_HAS_PROCESS (Select_Priority_Fixed);
    8283#endif
    83   public  :          Select_Priority_Fixed              (
     84  public  :          Select_Priority_Fixed
     85  (
    8486#ifdef SYSTEMC
    85                                               sc_module_name                              name,
     87   sc_module_name                              name,
    8688#else                                         
    87                                               string                                      name,
     89   string                                      name,
    8890#endif                                         
    8991#ifdef STATISTICS
    90                                               morpheo::behavioural::Parameters_Statistics param_statistics,
     92   morpheo::behavioural::Parameters_Statistics * param_statistics,
    9193#endif
    92                                               Parameters                                  param );
    93                                                
    94   public  :          Select_Priority_Fixed              (Parameters param );
     94   Parameters                                  * param ,
     95   morpheo::behavioural::Tusage_t                usage=USE_ALL);
     96   
    9597  public  :          ~Select_Priority_Fixed             (void);
    9698                                               
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Select/Select_Priority_Fixed/include/Statistics.h

    r44 r57  
    2828  {
    2929    // -----[ fields ]----------------------------------------------------
    30   private  : const Parameters                                   _parameters;
     30  private  : const Parameters                                 * _parameters;
    3131
    3232    // -----[ methods ]---------------------------------------------------
    3333  public   : Statistics  (string                                      name                       ,
    34                           morpheo::behavioural::Parameters_Statistics parameters_statistics      ,
    35                           Parameters                                  parameters
     34                          morpheo::behavioural::Parameters_Statistics * parameters_statistics      ,
     35                          Parameters                                  * parameters
    3636                          );
    3737//public   : Statistics  (Statistics & stat);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Select/Select_Priority_Fixed/include/Types.h

    r44 r57  
    99 */
    1010
    11 #include "Common/include/Types.h"
     11#include "Behavioural/include/Types.h"
    1212
    1313namespace morpheo                    {
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Select/Select_Priority_Fixed/src/Select_Priority_Fixed.cpp

    r42 r57  
    1515
    1616
     17  Select_Priority_Fixed::Select_Priority_Fixed
     18  (
    1719#ifdef SYSTEMC
    18   Select_Priority_Fixed::Select_Priority_Fixed (sc_module_name name,
     20   sc_module_name name,
    1921#else
    20   Select_Priority_Fixed::Select_Priority_Fixed (string name,
     22   string name,
    2123#endif
    2224#ifdef STATISTICS
    23                               morpheo::behavioural::Parameters_Statistics             param_statistics,
     25   morpheo::behavioural::Parameters_Statistics           *  param_statistics,
    2426#endif
    25                               morpheo::behavioural::generic::select::select_priority_fixed::Parameters param ):
    26                               _name              (name)
    27                               ,_param            (param)
     27   morpheo::behavioural::generic::select::select_priority_fixed::Parameters * param,
     28   morpheo::behavioural::Tusage_t usage ):
     29    _name              (name),
     30    _param            (param),
     31    _usage            (usage)
    2832// #ifdef STATISTICS
    2933//                            ,_param_statistics (param_statistics)
     
    3236    log_printf(FUNC,Select_Priority_Fixed,"Select_Priority_Fixed","Begin");
    3337
    34 #ifdef SYSTEMC
    3538    log_printf(INFO,Select_Priority_Fixed,"Select_Priority_Fixed","Allocation");
    36 
    3739    allocation ();
    38 #endif
    3940
    4041#ifdef STATISTICS
     
    5556
    5657#ifdef SYSTEMC
    57 #if defined(STATISTICS) or defined(VHDL_TESTBENCH)
    58     log_printf(INFO,Select_Priority_Fixed,"Select_Priority_Fixed","Method - transition");
    59 
    60     SC_METHOD (transition);
    61     dont_initialize ();
    62     sensitive_pos << *(in_CLOCK);
    63 #endif
    64 
    65     log_printf(INFO,Select_Priority_Fixed,"Select_Priority_Fixed","Method - genMealy_entity");
    66 
    67     SC_METHOD (genMealy_entity);
    68     dont_initialize ();
    69     //sensitive_pos << *(in_CLOCK);
    70     for (uint32_t i=0; i<_param._nb_entity; i++)
    71       sensitive << *(in_VAL [i]);
    72 
     58    if (_usage & USE_SYSTEMC)
     59      {
     60#  if defined(STATISTICS) or defined(VHDL_TESTBENCH)
     61        log_printf(INFO,Select_Priority_Fixed,"Select_Priority_Fixed","Method - transition");
     62       
     63        SC_METHOD (transition);
     64        dont_initialize ();
     65        sensitive_pos << *(in_CLOCK);
     66#  endif
     67       
     68        log_printf(INFO,Select_Priority_Fixed,"Select_Priority_Fixed","Method - genMealy_entity");
     69       
     70        SC_METHOD (genMealy_entity);
     71        dont_initialize ();
     72        //sensitive_pos << *(in_CLOCK);
     73        for (uint32_t i=0; i<_param->_nb_entity; i++)
     74          sensitive << *(in_VAL [i]);
     75       
    7376#  ifdef SYSTEMCASS_SPECIFIC
    74     // List dependency information
    75 
    76     for (uint32_t i=0; i<_param._nb_entity; i++)
    77       {
    78         if (_param._encoding_one_hot)
    79           (*(out_ACK    [i])) (*(in_VAL [i]));
    80         if (_param._encoding_compact)
     77        // List dependency information
     78       
     79        for (uint32_t i=0; i<_param->_nb_entity; i++)
    8180          {
    82           (*(out_ENTITY    )) (*(in_VAL [i]));
    83           (*(out_ENTITY_ACK)) (*(in_VAL [i]));
     81            if (_param->_encoding_one_hot)
     82              (*(out_ACK    [i])) (*(in_VAL [i]));
     83            if (_param->_encoding_compact)
     84              {
     85                (*(out_ENTITY    )) (*(in_VAL [i]));
     86                (*(out_ENTITY_ACK)) (*(in_VAL [i]));
     87              }
    8488          }
     89       
     90#  endif
    8591      }
    86    
    87 #  endif   
    8892#endif
    8993    log_printf(FUNC,Select_Priority_Fixed,"Select_Priority_Fixed","End");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Select/Select_Priority_Fixed/src/Select_Priority_Fixed_allocation.cpp

    r42 r57  
    1919    log_printf(FUNC,Select_Priority_Fixed,"allocation","Begin");
    2020
    21     _component   = new Component ();
     21    _component   = new Component (_usage);
    2222
    2323    Entity * entity = _component->set_entity (_name                 
     24                                             ,"Select_Priority_Fixed"
    2425#ifdef POSITION
    25                                              ,"Select_Priority_Fixed"
    2626                                             ,COMBINATORY           
    2727#endif
     
    4141
    4242     in_CLOCK        = interface->set_signal_clk              ("clock" ,1, CLOCK_VHDL_NO);
    43      in_NRESET       = interface->set_signal_in  <Tcontrol_t> ("nreset",1);
    44      in_VAL          = new SC_IN (Tcontrol_t)           * [_param._nb_entity];
    45     if (_param._encoding_one_hot)
    46     out_ACK          = new SC_OUT(Tcontrol_t)           * [_param._nb_entity];
     43     in_NRESET       = interface->set_signal_in  <Tcontrol_t> ("nreset",1, RESET_VHDL_NO);
    4744
    48     for (uint32_t i=0; i<_param._nb_entity; i++)
     45     in_VAL          = new SC_IN (Tcontrol_t)           * [_param->_nb_entity];
     46    if (_param->_encoding_one_hot)
     47    out_ACK          = new SC_OUT(Tcontrol_t)           * [_param->_nb_entity];
     48
     49    for (uint32_t i=0; i<_param->_nb_entity; i++)
    4950      {
    5051         in_VAL [i]    = interface->set_signal_in  <Tcontrol_t> ("val_"+toString(i),1);
    51         if (_param._encoding_one_hot)
     52        if (_param->_encoding_one_hot)
    5253        out_ACK [i]    = interface->set_signal_out <Tcontrol_t> ("ack_"+toString(i),1);
    5354      }
    5455
    55     if (_param._encoding_compact)
     56    if (_param->_encoding_compact)
    5657      {
    57         out_ENTITY     = interface->set_signal_out <Tentity_t > ("entity"    , _param._size_entity);
     58        out_ENTITY     = interface->set_signal_out <Tentity_t > ("entity"    , _param->_size_entity);
    5859        out_ENTITY_ACK = interface->set_signal_out <Tcontrol_t> ("entity_ack", 1);
    5960      }
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Select/Select_Priority_Fixed/src/Select_Priority_Fixed_deallocation.cpp

    r42 r57  
    2020    log_printf(FUNC,Select_Priority_Fixed,"deallocation","Begin");
    2121
    22     delete     in_CLOCK;
    23     delete     in_NRESET;
    24 
    25     delete []  in_VAL;
    26     if (_param._encoding_one_hot)
    27     delete [] out_ACK;
    28 
    29     if (_param._encoding_compact)
     22    if (_usage & USE_SYSTEMC)
    3023      {
    31     delete    out_ENTITY;
    32     delete    out_ENTITY_ACK;
     24        delete     in_CLOCK;
     25        delete     in_NRESET;
     26       
     27        delete []  in_VAL;
     28        if (_param->_encoding_one_hot)
     29          delete [] out_ACK;
     30       
     31        if (_param->_encoding_compact)
     32          {
     33            delete    out_ENTITY;
     34            delete    out_ENTITY_ACK;
     35          }
    3336      }
    3437    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
    35 
     38   
    3639    delete _component;
    3740
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Select/Select_Priority_Fixed/src/Select_Priority_Fixed_genMealy_entity.cpp

    r40 r57  
    2222    // init
    2323     
    24     Tcontrol_t ack [_param._nb_entity];
     24    Tcontrol_t ack [_param->_nb_entity];
    2525    bool       find  = false;
    2626    Tentity_t  entity;
    2727
    28     if (_param._encoding_one_hot)
    29     for (uint32_t i=0; i<_param._nb_entity; i++)
     28    if (_param->_encoding_one_hot)
     29    for (uint32_t i=0; i<_param->_nb_entity; i++)
    3030      ack [i] = 0;
    3131
    3232    log_printf(TRACE,Select_Priority_Fixed,"genMealy_entity","Scearch...");
    33     for (entity=0; entity<_param._nb_entity; entity++)
     33    for (entity=0; entity<_param->_nb_entity; entity++)
    3434      {
    3535        if (PORT_READ(in_VAL [entity]) == 1)
    3636          {
    3737            log_printf(TRACE,Select_Priority_Fixed,"genMealy_entity","Find! entity %d",entity);
    38             if (_param._encoding_one_hot)
     38            if (_param->_encoding_one_hot)
    3939              ack [entity] = 1;
    4040            find = true;
     
    4444     
    4545    // Write port
    46     if (_param._encoding_one_hot)
    47       for (uint32_t i=0; i<_param._nb_entity; i++)
     46    if (_param->_encoding_one_hot)
     47      for (uint32_t i=0; i<_param->_nb_entity; i++)
    4848        PORT_WRITE(out_ACK [i], ack [i]);
    4949
    50     if (_param._encoding_compact)
     50    if (_param->_encoding_compact)
    5151      {
    5252        PORT_WRITE(out_ENTITY    , (find==true)?entity:0); 
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Select/Select_Priority_Fixed/src/Select_Priority_Fixed_vhdl_body.cpp

    r29 r57  
    2222
    2323    vhdl->set_body("internal_entity <=");
    24     for (uint32_t i=0; i<_param._nb_entity; i++)
     24    for (uint32_t i=0; i<_param->_nb_entity; i++)
    2525      {
    26         vhdl->set_body("\t"+std_logic_conv(_param._size_entity+1,i)+" when in_VAL_"+toString(i)+"='1' else");
     26        vhdl->set_body("\t"+std_logic_conv(_param->_size_entity+1,i)+" when in_VAL_"+toString(i)+"='1' else");
    2727      }
    28     vhdl->set_body("\t"+std_logic_conv(_param._size_entity+1,1<<_param._size_entity)+";");
     28    vhdl->set_body("\t"+std_logic_conv(_param->_size_entity+1,1<<_param->_size_entity)+";");
    2929    vhdl->set_body ("");
    3030
    31     if (_param._encoding_one_hot)
     31    if (_param->_encoding_one_hot)
    3232      {
    33         for (uint32_t i=0; i<_param._nb_entity; i++)
    34           vhdl->set_body("out_ACK_"+toString(i)+" <= '1' when internal_entity"+std_logic_range(_param._size_entity+1)+" = "+std_logic_conv(_param._size_entity+1,i)+" else '0';");
     33        for (uint32_t i=0; i<_param->_nb_entity; i++)
     34          vhdl->set_body("out_ACK_"+toString(i)+" <= '1' when internal_entity"+std_logic_range(_param->_size_entity+1)+" = "+std_logic_conv(_param->_size_entity+1,i)+" else '0';");
    3535        vhdl->set_body ("");
    3636      }
    3737
    38     if (_param._encoding_compact)
     38    if (_param->_encoding_compact)
    3939      {
    40         vhdl->set_body ("out_ENTITY     <=     internal_entity"+std_logic_range(_param._size_entity-1,                  0)+";");
    41         vhdl->set_body ("out_ENTITY_ACK <= not internal_entity"+std_logic_range(_param._size_entity  ,_param._size_entity)+";");
     40        vhdl->set_body ("out_ENTITY     <=     internal_entity"+std_logic_range(_param->_size_entity-1,                  0)+";");
     41        vhdl->set_body ("out_ENTITY_ACK <= not internal_entity"+std_logic_range(_param->_size_entity  ,_param->_size_entity)+";");
    4242      }   
    4343   
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Select/Select_Priority_Fixed/src/Select_Priority_Fixed_vhdl_declaration.cpp

    r29 r57  
    2020    log_printf(FUNC,Select_Priority_Fixed,"vhdl_declaration","Begin");
    2121
    22     vhdl->set_signal("internal_entity",_param._size_entity+1);
     22    vhdl->set_signal("internal_entity",_param->_size_entity+1);
    2323
    2424    log_printf(FUNC,Select_Priority_Fixed,"vhdl_declaration","End");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Select/Select_Priority_Fixed/src/Statistics.cpp

    r15 r57  
    1717
    1818  Statistics::Statistics (string                                      name                       ,
    19                           morpheo::behavioural::Parameters_Statistics parameters_statistics      ,
    20                           Parameters                                  parameters
     19                          morpheo::behavioural::Parameters_Statistics * parameters_statistics      ,
     20                          Parameters                                  * parameters
    2121                          ) :
    2222    morpheo::behavioural::Statistics(name                  ,
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Makefile.flags

    r56 r57  
    1515#-----[ Flags ]--------------------------------------------
    1616MORPHEO_FLAGS                   =       -DSYSTEMC               \
     17                                        -DVHDL                  \
     18                                        -DVHDL_TESTBENCH        \
     19                                        -DVHDL_TESTBENCH_ASSERT \
     20                                        -DSTATISTICS            \
    1721                                        -DDEBUG=DEBUG_TRACE
    1822
    19 #                                       -DVHDL                  \
    20 #                                       -DVHDL_TESTBENCH        \
    21 #                                       -DSTATISTICS            \
    22 #                                       -DVHDL_TESTBENCH_ASSERT \
     23
    2324#                                       -DCONFIGURATION         \
    2425#                                       -DPOSITION              \
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Makefile.mkf

    r55 r57  
    33#
    44
    5 all: _Generic/RegisterFile/RegisterFile_Monolithic/SelfTest Generic/Select/Priority_Fixed/SelfTest Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Pattern_History_Table/SelfTest
     5all: _Generic/RegisterFile/RegisterFile_Monolithic/SelfTest _Generic/RegisterFile/RegisterFile_Multi_Banked/SelfTest _Generic/Select/Select_Priority_Fixed/SelfTest
    66
    77_Generic/RegisterFile/RegisterFile_Monolithic/SelfTest:
    88        gmake all -C Generic/RegisterFile/RegisterFile_Monolithic/SelfTest
    99
    10 Generic/Select/Priority_Fixed/SelfTest:
     10_Generic/RegisterFile/RegisterFile_Multi_Banked/SelfTest:
     11        gmake all -C Generic/RegisterFile/RegisterFile_Multi_Banked/SelfTest
    1112
    12 Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Pattern_History_Table/SelfTest:
     13_Generic/Select/Select_Priority_Fixed/SelfTest:
     14        gmake all -C Generic/Select/Select_Priority_Fixed/SelfTest
    1315
    1416clean:
    1517        gmake clean -C Generic/RegisterFile/RegisterFile_Monolithic/SelfTest
     18        gmake clean -C Generic/RegisterFile/RegisterFile_Multi_Banked/SelfTest
     19        gmake clean -C Generic/Select/Select_Priority_Fixed/SelfTest
    1620
    1721re: clean all
     
    1923install:
    2024        gmake install -C Generic/RegisterFile/RegisterFile_Monolithic/SelfTest
     25        gmake install -C Generic/RegisterFile/RegisterFile_Multi_Banked/SelfTest
     26        gmake install -C Generic/Select/Select_Priority_Fixed/SelfTest
    2127
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component/include/New_Component.h

    r53 r57  
    1616#include "Common/include/ToString.h"
    1717#include "Common/include/Debug.h"
     18#include "Behavioural/include/Types.h"
    1819
    1920#include "Behavioural/@DIRECTORY/include/Parameters.h"
    20 #include "Behavioural/@DIRECTORY/include/Types.h"
    2121#ifdef STATISTICS
    2222#include "Behavioural/@DIRECTORY/include/Statistics.h"
     
    2626#include "Behavioural/include/Vhdl.h"
    2727#endif
     28#include "Behavioural/include/Usage.h"
    2829
    2930using namespace std;
     
    3132namespace morpheo {
    3233namespace behavioural {
     34
    3335@NAMESPACE_BEGIN
    3436
     
    4143    // Parameters
    4244  protected : const string       _name;
     45  protected : const Parameters * _param;
     46  private   : const Tusage_t     _usage;
    4347
    44   protected : const Parameters * _param;
    4548//#ifdef STATISTICS
    4649//  protected : const morpheo::behavioural::Parameters_Statistics * _param_statistics;
     
    7275    SC_HAS_PROCESS (@COMPONENT);
    7376#endif
    74   public  :          @COMPONENT              (
     77  public  :          @COMPONENT             
     78  (
    7579#ifdef SYSTEMC
    76                                               sc_module_name                                name,
     80   sc_module_name                                name,
    7781#else                                         
    78                                               string                                        name,
     82   string                                        name,
    7983#endif                                         
    8084#ifdef STATISTICS
    81                                               morpheo::behavioural::Parameters_Statistics * param_statistics,
     85   morpheo::behavioural::Parameters_Statistics * param_statistics,
    8286#endif
    83                                               Parameters                                  * param );
     87   Parameters                                  * param,
     88   morpheo::behavioural::Tusage_t                usage=USE_ALL
     89   );
    8490  public  :          ~@COMPONENT             (void);
    8591                                               
    86 #ifdef SYSTEMC                                 
    8792  private : void     allocation                (void);
    8893  private : void     deallocation              (void);
    8994                                               
     95#ifdef SYSTEMC                                 
    9096//#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
    9197  public  : void     transition                (void);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component/src/New_Component.cpp

    r53 r57  
    1414#undef  FUNCTION
    1515#define FUNCTION "@COMPONENT::@COMPONENT"
     16  @COMPONENT::@COMPONENT
     17  (
    1618#ifdef SYSTEMC
    17   @COMPONENT::@COMPONENT (sc_module_name name,
     19   sc_module_name name,
    1820#else
    19   @COMPONENT::@COMPONENT (string name,
     21   string name,
    2022#endif
    2123#ifdef STATISTICS
    22                           morpheo::behavioural::Parameters_Statistics * param_statistics,
     24   morpheo::behavioural::Parameters_Statistics * param_statistics,
    2325#endif
    24                           morpheo::behavioural::@NAMESPACE_USE::Parameters * param ):
    25                               _name              (name)
    26                               ,_param            (param)
     26   morpheo::behavioural::@NAMESPACE_USE::Parameters * param,
     27   morpheo::behavioural::Tusage_t usage
     28   ):
     29    _name              (name)
     30    ,_param            (param)
     31    ,_usage            (usage)
    2732// #ifdef STATISTICS
    2833//                            ,_param_statistics (param_statistics)
     
    3136    log_printf(FUNC,@COMPONENT,FUNCTION,"Begin");
    3237
    33 #ifdef SYSTEMC
    3438    log_printf(INFO,@COMPONENT,FUNCTION,"Allocation");
    35 
    3639    allocation ();
    37 #endif
    3840
    3941#ifdef STATISTICS
     
    8082
    8183    _stat->generate_file(statistics(0));
    82    
    8384    delete _stat;
    8485#endif
    8586
    86 #ifdef SYSTEMC
    8787    log_printf(INFO,@COMPONENT,FUNCTION,"Deallocation");
    88 
    8988    deallocation ();
    90 #endif
    9189
    9290    log_printf(FUNC,@COMPONENT,FUNCTION,"End");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component/src/New_Component_allocation.cpp

    r53 r57  
    1 #ifdef SYSTEMC
    21/*
    32 * $Id$
     
    5857}; // end namespace behavioural
    5958}; // end namespace morpheo             
    60 #endif
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component/src/New_Component_deallocation.cpp

    r53 r57  
    1 #undef  FUNCTION
    2 #define FUNCTION "@COMPONENT::"
    3 
    4 #ifdef SYSTEMC
    51/*
    62 * $Id$
     
    3733}; // end namespace behavioural
    3834}; // end namespace morpheo             
    39 #endif
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component/src/Parameters_msg_error.cpp

    r53 r57  
    66 */
    77
     8#include "Behavioural/include/Types.h"
    89#include "Behavioural/@DIRECTORY/include/Parameters.h"
    9 #include "Behavioural/@DIRECTORY/include/Types.h"
    1010#include <sstream>
    1111using namespace std;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Component.h

    r44 r57  
    2020#include "Common/include/ToString.h"
    2121#include "Common/include/Debug.h"
     22#include "Behavioural/include/Usage.h"
    2223
    2324using namespace std;
     
    2627namespace behavioural          {
    2728
     29  typedef uint8_t Tinstance_t;
     30
     31#define INSTANCE_NONE         0x0
     32#define INSTANCE_LIBRARY      0x1
     33#define INSTANCE_COMPONENT    0x2
     34#define INSTANCE_POSITION     0x4
     35#define INSTANCE_ALL          0x7
     36
     37  typedef struct
     38  {
     39    public : Tinstance_t _instance;
     40    public : Entity         * _entity  ;
     41  } Tcomponent_t;   
     42 
    2843  class Component
    2944  {
    3045    // -----[ fields ]----------------------------------------------------
     46  private   : const Tusage_t        _usage;
    3147  private   : Entity              * _entity        ;
    32   private   : list<Entity *>      * _list_component;
    33    
     48  private   : list<Tcomponent_t*> * _list_component;
     49
    3450    // -----[ methods ]---------------------------------------------------
    35   public    :                       Component         (void);
     51  public    :                       Component         (Tusage_t usage=USE_ALL);
    3652  public    :                       Component         (const Component & component);
    3753  public    :                       ~Component        ();
     
    5268                                                       ,uint32_t   size_y
    5369#endif
     70                                                       ,Tinstance_t instance=INSTANCE_ALL
    5471                                                       );
    5572
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Entity.h

    r44 r57  
    1818#include "Common/include/ToString.h"
    1919#include "Common/include/Debug.h"
     20#include "Behavioural/include/Usage.h"
    2021
    2122using namespace std;
     
    3233  private   : const schema_t        _schema       ;
    3334#endif
     35  private   : const Tusage_t        _usage;
     36
    3437  private   : Interfaces          * _interfaces   ;
    3538
     
    5053                                                       ,schema_t      schema
    5154#endif
     55                                                        ,Tusage_t       usage=USE_ALL
    5256                                                        );
    5357  public    :                        Entity           (const Entity & entity);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Interface.h

    r44 r57  
    2525#include "Common/include/ErrorMorpheo.h"
    2626#include "Common/include/Debug.h"
     27#include "Behavioural/include/Usage.h"
    2728
    2829using namespace std;
     
    3839  protected : const direction_t     _direction    ;
    3940  protected : const localisation_t  _localisation ;
     41#endif
     42  protected : const Tusage_t        _usage;
     43
     44#ifdef POSITION
    4045  protected :       string          _comment      ;
    4146#endif
     
    5964                                                          ,localisation_t localisation
    6065#endif
     66                                                          ,Tusage_t       usage=USE_ALL
    6167                                                          );
    6268
     
    97103
    98104      Signal    * sig  = set_signal (name, IN , size, presence_port);
    99       sc_in_clk * port = new sc_in_clk (sig->_name.c_str());
    100 
    101       sig->alloc<bool> (static_cast<void *>(port));
     105      sc_in_clk * port;
     106
     107      if (_usage & USE_SYSTEMC)
     108        {
     109          port = new sc_in_clk (sig->_name.c_str());
     110          sig->alloc<bool> (static_cast<void *>(port));
     111        }
     112      else
     113        {
     114          port = NULL;
     115        }
    102116
    103117      log_printf(FUNC,Behavioural,"set_signal_clk","End");
     
    118132
    119133      Signal    * sig  = set_signal (name, IN , size, presence_port);
    120       sc_in <T> * port = new sc_in <T> (sig->_name.c_str());
    121 
    122       sig->alloc<T> (static_cast<void *>(port));
     134      sc_in <T> * port;
     135
     136      if (_usage & USE_SYSTEMC)
     137        {
     138          port = new sc_in <T> (sig->_name.c_str());
     139          sig->alloc<T> (static_cast<void *>(port));
     140        }
     141      else
     142        {
     143          port = NULL;
     144        }
    123145
    124146      log_printf(FUNC,Behavioural,"set_signal_in","End");
     
    139161
    140162      Signal * sig = set_signal (name, OUT , size, presence_port);
    141       sc_out <T> * port = new sc_out <T> (sig->_name.c_str());
    142 
    143       sig->alloc<T> (static_cast<void *>(port));
     163      sc_out <T> * port;
     164
     165      if (_usage & USE_SYSTEMC)
     166        {
     167          port = new sc_out <T> (sig->_name.c_str());
     168          sig->alloc<T> (static_cast<void *>(port));
     169        }
     170      else
     171        {
     172          port = NULL;
     173        }
    144174
    145175      log_printf(FUNC,Behavioural,"set_signal_out","End");
     
    155185
    156186      Signal * sig = set_signal (name, INTERNAL , size, PORT_VHDL_NO_TESTBENCH_NO);
    157       sc_signal <T> * port = new sc_signal <T> (sig->_name.c_str());
    158 
    159       sig->alloc<T> (static_cast<void *>(port));
     187      sc_signal <T> * port;
     188
     189      if (_usage & USE_SYSTEMC)
     190        {
     191          port = new sc_signal <T> (sig->_name.c_str());
     192          sig->alloc<T> (static_cast<void *>(port));
     193        }
     194      else
     195        {
     196          port = NULL;
     197        }
    160198
    161199      log_printf(FUNC,Behavioural,"set_signal_internal","End");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Interface_fifo.h

    r55 r57  
    4545                                                          ,localisation_t localisation
    4646#endif
     47                                                          ,Tusage_t       usage=USE_ALL
    4748                                                          );
    4849   
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Interfaces.h

    r44 r57  
    1818#include "Behavioural/include/Vhdl.h"
    1919#endif
     20#include "Behavioural/include/Usage.h"
    2021
    2122using namespace std;
     
    2829    // -----[ fields ]----------------------------------------------------
    2930  private   : const string               _name;
     31  private   : const Tusage_t             _usage;
    3032  private   : list<Interface_fifo*>    * _list_interface;
    3133
    3234    // -----[ methods ]---------------------------------------------------
    33   public    :                       Interfaces            (string name);
     35  public    :                       Interfaces            (string name,
     36                                                           Tusage_t usage=USE_ALL);
    3437  public    :                       Interfaces            (const Interfaces & interfaces);
    3538  public    :                       ~Interfaces           ();
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/mkf.info

    r42 r57  
    1515
    1616# build src directory content
    17 #target_dep             all             Generic/Counter/SelfTest
    1817target_dep              all             Generic/RegisterFile/RegisterFile_Monolithic/SelfTest
    19 #target_dep             all             Generic/Shifter/SelfTest
    20 target_dep              all             Generic/Select/Priority_Fixed/SelfTest
    21 #target_dep             all             Generic/Victim/Pseudo_LRU/SelfTest
    22 #target_dep             all             Stage_1_Ifetch/Predictor/Meta_Predictor/SelfTest
    23 #target_dep             all             Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/SelfTest
    24 #target_dep             all             Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/SelfTest
    25 #target_dep             all             Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Two_Level_Branch_Predictor_Glue/SelfTest
    26 #target_dep             all             Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Branch_History_Table/SelfTest
    27 target_dep              all             Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Pattern_History_Table/SelfTest
    28 #target_dep             all             Stage_5_Execute/Execution_cluster/Execution_group/Execution_unit/SelfTest
     18target_dep              all             Generic/RegisterFile/RegisterFile_Multi_Banked/SelfTest
     19target_dep              all             Generic/Select/Select_Priority_Fixed/SelfTest
    2920
    3021# mkf include path
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component.cpp

    r43 r57  
    1111namespace behavioural          {
    1212
    13   Component::Component  (void)
     13  Component::Component  (Tusage_t usage):
     14    _usage (usage)
    1415  {
    1516    log_printf(FUNC,Behavioural,"Component::Component","Begin");
    16     _list_component = new list<Entity *>;
     17    _list_component = new list<Tcomponent_t *>;
    1718    log_printf(FUNC,Behavioural,"Component::Component","End");
    1819  };
    1920
    20   Component::Component  (const Component & component)
     21  Component::Component  (const Component & component):
     22    _usage (component._usage)
    2123  {
    2224    log_printf(FUNC,Behavioural,"Component::Component (copy)","Begin");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_find_entity.cpp

    r43 r57  
    2222      if (_list_component->empty()== false)
    2323        {
    24           list<Entity *>::iterator i = _list_component->begin();
     24          list<Tcomponent_t *>::iterator i = _list_component->begin();
    2525         
    2626          while (i != _list_component->end())
    2727            {
    28               if ((*i)->get_name() == name)
     28              Entity * entity = (*i)->_entity;
     29
     30              if (entity->get_name() == name)
    2931                {
    30                   _return = *i;
     32                  _return = entity;
    3133                  break;
    3234                }
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_get_component.cpp

    r43 r57  
    2222    bool                   last_separator = false;
    2323
    24     list<Entity *>::iterator  i  = _list_component->begin();
     24    list<Tcomponent_t *>::iterator  i  = _list_component->begin();
    2525    bool                   empty = _list_component->empty();
    2626
     
    3333        if (i != _list_component->end())
    3434          {
    35             text << tab << **i;
     35            text << tab << *((*i)->_entity);
    3636            ++i;
    3737          }
     
    4040          {
    4141            text << separator;
    42             text << tab << **i;
     42            text << tab << *((*i)->_entity);
    4343            ++i;
    4444          }
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_set_component.cpp

    r43 r57  
    1515  void Component::set_component (Component * component
    1616#ifdef POSITION
    17                                 ,uint32_t   pos_x 
    18                                 ,uint32_t   pos_y 
    19                                 ,uint32_t   size_x
    20                                 ,uint32_t   size_y
     17                                 ,uint32_t   pos_x 
     18                                 ,uint32_t   pos_y 
     19                                 ,uint32_t   size_x
     20                                 ,uint32_t   size_y
    2121#endif
     22                                 ,Tinstance_t instance
    2223                                 )
    2324  {
     
    2627    Entity * entity = component->_entity;
    2728
    28     _list_component->push_back(entity);
     29    Tcomponent_t * entry = new Tcomponent_t;
     30   
     31    entry->_instance = instance;
     32    entry->_entity   = entity;
     33
     34    _list_component->push_back(entry);
    2935
    3036#ifdef POSITION
    31     entity->mapping( pos_x, pos_y, size_x, size_y);
     37    if (instance & INSTANCE_POSITION)
     38      entity->mapping( pos_x, pos_y, size_x, size_y);
    3239#endif
    3340
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_set_entity.cpp

    r43 r57  
    2727                                  ,schema
    2828#endif
     29                                  ,_usage
    2930                                  );
    3031    _entity = entity;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_toXML.cpp

    r43 r57  
    2727    if (_list_component->empty()== false)
    2828      {
    29         list<Entity *>::iterator i = _list_component->begin();
     29        list<Tcomponent_t *>::iterator i = _list_component->begin();
    3030
    3131        while (i != _list_component->end())
    3232          {
    33             xml.insert_XML ((*i)->toXML_mapping());
     33            xml.insert_XML ((*i)->_entity->toXML_mapping());
    3434            ++i;
    3535          }
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_vhdl_instance.cpp

    r44 r57  
    7575
    7676    // for each entity
    77     list<Entity *>         * list_component = _list_component;
    78     list<Entity *>::iterator i              = list_component->begin();
     77    list<Tcomponent_t *>         * list_component = _list_component;
     78    list<Tcomponent_t *>::iterator i              = list_component->begin();
    7979    if (not list_component->empty())
    8080      {
    8181        while (i != list_component->end())
    8282          {
    83             vhdl->set_library_work ((*i)->get_name() + "_Pack");
     83            Entity *    entity   = (*i)->_entity;
     84            Tinstance_t instance = (*i)->_instance;
     85           
     86            if (instance & INSTANCE_LIBRARY)
     87              vhdl->set_library_work (entity->get_name() + "_Pack");
    8488
    85             list<string> list_port_map;
    86            
    87             // for each interface
    88             list<Interface_fifo *>         * list_interface = (*i)->get_interfaces_list()->get_interface_list();
    89             list<Interface_fifo *>::iterator j              = list_interface->begin();
    90             if (not list_interface->empty())
    91               {
    92                 while (j != list_interface->end())
    93                   {
    94                     // for each signal
    95                     list<Signal *>         * list_signal = (*j)->get_signal_list();
    96                     list<Signal *>::iterator k           = list_signal->begin();
    97                     if (not list_signal->empty())
    98                       {
    99                         while (k != list_signal->end())
    100                           {
    101                             // test if is connect with external interface or with an another component.
    102                             Signal * signal_src  = (*k);
    103 
    104                             if (signal_src->presence_vhdl () == true)
    105                               {
    106                                 Signal * signal_dest = signal_src->get_connect_to_signal();
    107                                 string   name_src    = signal_src->get_name();
    108                                 string   name_dest;
    109                                
     89            if (instance & INSTANCE_COMPONENT)
     90            {
     91              list<string> list_port_map;
     92             
     93              // for each interface
     94              list<Interface_fifo *>         * list_interface = entity->get_interfaces_list()->get_interface_list();
     95              list<Interface_fifo *>::iterator j              = list_interface->begin();
     96              if (not list_interface->empty())
     97                {
     98                  while (j != list_interface->end())
     99                    {
     100                      // for each signal
     101                      list<Signal *>         * list_signal = (*j)->get_signal_list();
     102                      list<Signal *>::iterator k           = list_signal->begin();
     103                      if (not list_signal->empty())
     104                        {
     105                          while (k != list_signal->end())
     106                            {
     107                              // test if is connect with external interface or with an another component.
     108                              Signal * signal_src  = (*k);
     109                             
     110                              if (signal_src->presence_vhdl () == true)
     111                                {
     112                                  Signal * signal_dest = signal_src->get_connect_to_signal();
     113                                  string   name_src    = signal_src->get_name();
     114                                  string   name_dest;
     115                                 
    110116//                              // Test if destination signal is a interface port ?
    111117//                              if (_entity->find_signal(signal_dest) == false)
    112118//                                {
    113                                     // find if signal is already link
    114                                     map<Signal *,string>::iterator it = tab.find(signal_dest);
    115                                     if (tab.find(signal_dest) == tab.end())
    116                                       {
    117                                         // Create name
    118                                         name_dest = "signal_"+toString(cpt++);
    119                                        
    120                                         tab [signal_src ] = name_dest;
    121                                         tab [signal_dest] = name_dest;
    122                                        
    123                                         // Add a new signal
    124                                         vhdl->set_signal (name_dest, signal_src->get_size());
    125                                       }
    126                                     else
    127                                       {
    128                                         // find !!!!
    129                                         name_dest = (*it).second;
    130                                         tab [signal_src ] = name_dest;
    131                                       }
     119                                  // find if signal is already link
     120                                  map<Signal *,string>::iterator it = tab.find(signal_dest);
     121                                  if (tab.find(signal_dest) == tab.end())
     122                                    {
     123                                      // Create name
     124                                      name_dest = "signal_"+toString(cpt++);
     125                                     
     126                                      tab [signal_src ] = name_dest;
     127                                      tab [signal_dest] = name_dest;
     128                                     
     129                                      // Add a new signal
     130                                      vhdl->set_signal (name_dest, signal_src->get_size());
     131                                    }
     132                                  else
     133                                    {
     134                                      // find !!!!
     135                                      name_dest = (*it).second;
     136                                      tab [signal_src ] = name_dest;
     137                                    }
    132138//                                }
    133139//                              else
     
    150156//                                }
    151157                               
    152                                 vhdl->set_body_component_port_map (list_port_map, name_src, name_dest);
    153                               }
    154                             ++k;
    155                           }
    156                       }
    157                     ++j;
    158                   }
    159               }
    160             vhdl->set_body_component ("instance_"+(*i)->get_name(),(*i)->get_name(),list_port_map);
     158                                  vhdl->set_body_component_port_map (list_port_map, name_src, name_dest);
     159                                }
     160                              ++k;
     161                            }
     162                        }
     163                      ++j;
     164                    }
     165                }
     166              vhdl->set_body_component ("instance_"+entity->get_name(),entity->get_name(),list_port_map);
     167             
     168            }
    161169            ++i;
    162170          }
     
    164172    log_printf(FUNC,Behavioural,FUNCTION,"End");
    165173  };
    166 
     174 
    167175}; // end namespace behavioural
    168176}; // end namespace morpheo
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Entity.cpp

    r42 r57  
    1616                   ,schema_t     schema
    1717#endif
     18                    ,Tusage_t      usage
    1819                    ):
    1920     _name       (name      )
     
    2223    ,_schema     (schema    )
    2324#endif
     25     ,_usage      (usage     )
    2426  {
    2527    log_printf(FUNC,Behavioural,"Entity","Begin");
    26     _interfaces = new Interfaces (name);
     28    _interfaces = new Interfaces (name, usage);
    2729#ifdef POSITION
    2830    _is_map     = false;
     
    3739    ,_schema     (entity._schema    )
    3840#endif
     41    ,_usage      (entity._usage     )
    3942  {
    4043    log_printf(FUNC,Behavioural,"Entity (copy)","Begin");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interface.cpp

    r42 r57  
    1616                         ,localisation_t        localisation
    1717#endif
     18                         ,Tusage_t             usage
    1819                         ):
    1920    _name         (name        )
     
    2223    ,_localisation (localisation)
    2324#endif
     25    ,_usage        (usage)
    2426  {
    2527    log_printf(FUNC,Behavioural,"Interface","Begin");
     
    4749    ,_localisation (interface._localisation)
    4850#endif
     51    ,_usage        (interface._usage)
    4952  {
    5053    log_printf(FUNC,Behavioural,"Interface (copy)","Begin");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interface_fifo.cpp

    r42 r57  
    1616                                   ,localisation_t localisation
    1717#endif
     18                                   ,Tusage_t       usage
    1819                                   ):
    1920    Interface (name         
     
    2223               ,localisation
    2324#endif
     25               ,usage
    2426               )
    2527  {
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interfaces.cpp

    r41 r57  
    1111namespace behavioural          {
    1212
    13   Interfaces::Interfaces  (string name):
    14     _name (name)
     13  Interfaces::Interfaces  (string   name,
     14                           Tusage_t usage):
     15    _name  (name),
     16    _usage (usage)
    1517  {
    1618    log_printf(FUNC,Behavioural,"Interfaces","Begin");
     
    2022
    2123  Interfaces::Interfaces  (const Interfaces & interfaces) :
    22     _name (interfaces._name)
     24    _name  (interfaces._name),
     25    _usage (interfaces._usage)
    2326  {
    2427    log_printf(FUNC,Behavioural,"Interfaces (copy)","Begin");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interfaces_set_interface.cpp

    r43 r57  
    2727                                                     ,localisation
    2828#endif
    29                                                      );
     29                                                     ,_usage);
    3030   
    3131    _list_interface->push_back (interface);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Vhdl_std_logic.cpp

    r43 r57  
    6666    string type;
    6767
    68     if (max == min)
    69       type = "("+toString(max)+")";
     68    if (max == 0)
     69      type = "";
    7070    else
    71       type = "("+toString(max)+" downto "+toString(min)+")";
     71      if (max == min)
     72        type = "("+toString(max)+")";
     73      else
     74        type = "("+toString(max)+" downto "+toString(min)+")";
    7275
    7376    log_printf(FUNC,Behavioural,FUNCTION,"End");
Note: See TracChangeset for help on using the changeset viewer.