Changeset 57 for trunk/IPs


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
Files:
36 added
14 deleted
79 edited
3 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");
  • trunk/IPs/systemC/processor/Morpheo/Documentation/Source/Documents/presentation-internal_seminary_overview/fr/root.tex

    r52 r57  
    11\section{Motivations}
    2 
    3 %\ContentsCurrent
    4 
    5 \slidetitle{Problématique}
    6            {
    7              On désire une plateforme de confiance totale :
    8              \begin{itemize}
    9              \item La plateforme-matérielle est composée de processeur(s) généraliste(s).
    10              \item La plateforme-logicielle est composée de plusieurs applications qui peuvent être cryptographique.
    11              \end{itemize}
    12 
    13              Notre travail consiste à faire le processeur pour un tel système.
    14            }
    15            {
    16            }
    17 
    18 \slidetitle{Ancienne tendance}
     2\ContentsCurrent
     3
     4\slidetitle{Cadre de la thèse}
     5           {
     6             \begin{itemize}
     7             \item {\it Cadre :}\newline
     8               Collaboration avec Bull sur le projet PFC\newline
     9               (Plate-forme de confiance totale)
     10             \item {\it Notre contribution :}\newline
     11               Réalisation d'un générateur de processeur ouvert.
     12             \end{itemize}
     13           }
     14           {
     15             Expliquer PFC
     16           }
     17
     18\slidetitle{Approche actuelle fondée sur le secret}
    1919           {
    2020             \begin{itemize}
    2121             \item Composants fermés.
    22              \item Label de sécurité.
     22             \item Consortium de certification
    2323               \begin{itemize}
    2424               \item Trusted Computing Platform Alliance
    25                \item Next-Generation Secure Computing Base
    26                \end{itemize}
    27              \item Plateforme multi-chip.
    28              \end{itemize}
    29            }
    30            {
     25%                \begin{itemize}
     26%                \item Next-Generation Secure Computing Base
     27%                \item Intel Trusted Execution Technology
     28%                \end{itemize}
     29               \end{itemize}
     30             \end{itemize}
     31
     32             \printgraph{Logo-trusted_computing_group}{0.8}
     33
     34             Limite de l'approche :
     35
     36             \begin{itemize}
     37             \item Pas de confiance :
     38               \begin{itemize}
     39                 \item Chevaux de troie
     40               \end{itemize}
     41             \item Pas de pérennité :
     42               \begin{itemize}
     43                 \item Arrêt de production
     44                 \item Changement de protocole
     45               \end{itemize}
     46             \end{itemize}
     47           }
     48           {
     49             Consortium : intel, amd, ibm, microsoft ...
     50
     51             Le principe du TCG :
     52
     53             \begin{itemize}
     54               \item Assigner une signature à chaque objet informatique (logiciel, par extension matériel).
     55               \item Déléguer à un {\it tiers de confiance} la tâche de vérifier si l'objet manipulé est autorisé à être utilisé sur le système local.
     56             \end{itemize}
     57
     58             Enjeux commerciaux != Ouvert et Pérennité.
     59           }
     60
     61\slidetitle{Nouvelle approche}
     62           {
     63             \begin{itemize}
     64             \item Composants ouverts
     65               \begin{itemize}
     66               \item Pas de fonctionnalités cachées.
     67               \item Pas de secret à conserver.
     68               \end{itemize}
     69             \item Intégration :
     70               \begin{itemize}
     71               \item Field-Programmable Gate Array (FPGA).
     72               \item System On Chip (SOC).
     73               \end{itemize}
     74             \end{itemize}
     75
     76             \begin{center}
     77               \begin{minipage}{.4\textwidth}
     78                 \printgraph{Logo-opencores}{0.8}
     79               \end{minipage}
     80               \begin{minipage}{.4\textwidth}
     81                 \printgraph{Logo-soclib}{0.8}
     82               \end{minipage}
     83             \end{center}
     84           }
     85           {
     86             Composant matériel ouvert = code source disponible = FPGA = prototypage = SOC.
     87           }
     88
     89\section{Cahier des charges}
     90\ContentsCurrent
     91
     92\slidetitle{Besoins : Cahier des charges}
     93           {
     94             Il faut une architecture :
    3195             \begin{description}
    32              \item[Trusted Computing Platform Alliance   :] Le Trusted Computing Group (TCG, nommé jusqu'en 2003 TCPA pour Trusted Computing Platform Alliance) est une consortium d'entreprises d'informatique (Compaq, HP, IBM, Intel, Microsoft, AMD, etc.) visant à sécuriser les équipements et communications informatiques.
    33              \item[Next-generation secure computing base :] Le Next-Generation Secure Computing Base (NGSCB, littéralement : Base d'information sécurisée de nouvelle génération) ou ordinateur sécurisé de la prochaine génération fait partie de la nouvelle architecture de Microsoft pour l'informatique de confiance. Ce projet était connu sous le nom de Palladium.
     96             \item [Ouverte :] Évite les fonctionnalités cachées.
     97             \item [Pérenne :] Évite les problèmes d'approvisionnements.
     98             \item [Paramétrable :] S'adapte aux critères de l'application.
     99             \item [Performante :] Applications nécessitant de la puissance de calculs.
    34100             \end{description}
    35101           }
    36 
    37 \slidetitle{Nouvelle tendance}
    38            {
    39              \begin{itemize}
    40              \item Utilisation de composants ouvert.   \\Evite les fonctionnalités cachés
    41              \item Intégration de System On Chip (SOC).\\Réduit la vunérabilité des communications entre deux chips.
    42              \end{itemize}
    43            }
    44            {
    45            }
    46 
    47 \section{Besoins}
    48 \slidetitle{Besoins}
    49            {
     102           {
     103             Concevoir un cpu pour PFC :
     104             
     105             ouverte, pérenne, paramétrable, performante.
     106
     107             Applications cibles : cryptographique.
     108           }
     109
     110\subsection{Architecture Ouverte}
     111\slidetitle{Architecture Ouverte}
     112           {
     113             \begin{itemize}
     114             \item Instruction Set Architecture gratuite.
     115            %\item Présence d'une communauté autour de l'architecture logicielle.
     116             \item Chaîne de compilation disponible et ouverte.
     117             \item Modèle disponible :
     118               \begin{itemize}
     119                 \item Modèle systemC-CABA
     120                 \item Modèle VHDL-RTL
     121               \end{itemize}
     122             \end{itemize}
     123           }
     124           {
     125             Chaîne de compilation $\Rightarrow$ présence d'une communauté, espère une pérennité des logicielles.
     126
     127             VHDL = FPGA
     128
     129             SystemC = dévellopement
     130           }
     131
     132\subsection{Architecture Pérenne}
     133\slidetitle{Architecture Pérenne}
     134           {
     135             \begin{itemize}
     136             \item Instruction Set Architecture gratuite.
     137            %\item Présence d'une communauté autour de l'architecture logicielle.
     138             \item Chaîne de compilation disponible et ouverte.
     139             \item Technologie cible flexible : FPGA.
     140             \end{itemize}
     141           }
     142           {
     143             ISA et Modèle disponible = implémentation possible.
     144           }
     145
     146\subsection{Architecture Paramétrable}
     147\slidetitle{Architecture Paramétrable}
     148           {
     149             S'adapter aux critères de l'application :
     150             \begin{itemize}
     151             \item Performance
     152             \item Surface
     153             \item Consommation
     154             \item Temps réel
     155             \item \dots
     156             \end{itemize}
     157
     158             Pas un processeur mais plusieurs processeurs.\\
     159             \begin{itemize}
     160               \item[$\Rightarrow$] Générateur d'architecture.
     161               \item[$\Rightarrow$] Technologie cible : FPGA.
     162             \end{itemize}
     163           }
     164           {
     165             Aucune connaissance à priori des besoins des applications. Peuvent avoir des critères variés ...
     166
     167             Pas 1CPU mais plusieurs CPU = ASIC trop onéreux
     168           }
     169
     170\subsection{Architecture Performante}
     171\slidetitle{Architecture Performante}
     172           {
     173             \begin{center}
     174               {\it Exécution de plusieurs instructions simultanément}
     175             \end{center}
     176
     177             Exploitation de toutes les formes de parallélisme.
     178
    50179             \begin{description}
    51              \item [Open         :] Absence de fonctionnalités cachées. (Cheval de troie)
    52              \item [Configurable :] Adaptable aux besoins des applications.
    53              \item [Performance  :] Application cryptographique.
     180             \item[ILP :] Instruction Level Parallelism
     181             \item[TLP :] Thread      Level Parallelism
     182             \item[DLP :] Data        Level Parallelism
    54183             \end{description}
    55184           }
     
    57186           }
    58187
    59 \slidetitle{Besoins : Open}
    60            {
    61              \begin{itemize}
    62              \item Instruction Set Architecture libre. (Implémentation possible)
    63              \item Tools Chains présente et libre.
    64              \item Implémentation sur FPGA (Pérennité).       
    65              \item Présence d'une communauté autour de l'architecture logicielle.
    66              \end{itemize}
    67            }
    68            {
    69            }
    70 
    71 \slidetitle{Besoins : Configurable}
    72            {
    73              \begin{itemize}
    74              \item Pas de connaissance préalable du besoin des applications.
    75              \item Toutes les applications non pas les mêmes besoins de Performance / Surface.
    76              \end{itemize}
    77            }
    78            {
    79            }
    80 
    81 \slidetitle{Besoins : Performance}
    82            {
    83              Exploitation de toutes les formes de parrallélisme.
     188%\subsubsection{ILP}
     189\slidetitle{Instruction Level Paralelism}
     190           {
     191             \begin{center}
     192               {\it Exécution simultanée de plusieurs instructions provenant d'un même flux.}
     193             \end{center}
     194             \printgraph{GENERAL_ILP}{1  }
     195           }
     196           {
     197           }
     198%\slide
     199%          {
     200%            \begin{description}
     201%            \item[Avantages     :]~
     202%              \begin{itemize}
     203%              \item Exploitation implicite du point de vue logicielle.
     204%              \end{itemize}
     205%            \item[Inconvénients :]~
     206%              \begin{itemize}
     207%              \item Coût quadratique du contrôle.
     208%              \end{itemize}
     209%            \end{description}
     210%          }
     211%          {
     212%          }
     213
     214
     215%\subsubsection{TLP}
     216\slidetitle{Thread Level Paralelism}
     217           {
     218             \begin{center}
     219               {\it Exécution simultanée de plusieurs instructions provenant de différents flux.}
     220             \end{center}
     221
     222             \printgraph{GENERAL_TLP}{1  }
     223           }
     224           {
     225           }
     226
     227%\slide
     228%          {
     229%            \begin{description}
     230%            \item[Avantages     :]~
     231%              \begin{itemize}
     232%              \item Implantation très simple : duplication des coeurs
     233%              \item Ressources dédiés aux threads exécutés sur le coeur
     234%              \end{itemize}
     235%            \item[Inconvénients :]~
     236%              \begin{itemize}
     237%              \item Il doit avoir plus de thread que de coeurs afin d'éviter l'oisiveté des coeurs
     238%              \end{itemize}
     239%            \end{description}
     240%          }
     241%          {
     242%          }
     243%
     244%\slidetitle{TLP - Simulatenous Multi Threading (SMT)}
     245%          {
     246%            \printgraph{GENERAL_TLP-SMT}{1  }
     247%          }
     248%          {
     249%          }
     250%
     251%\slide
     252%          {
     253%            \begin{description}
     254%            \item[Avantages     :]~
     255%              \begin{itemize}
     256%              \item Implantation très simple et peu coûteuse en surface.
     257%              \item Meilleur exploitation des ressources
     258%              \end{itemize}
     259%            \item[Inconvénients :]~
     260%              \begin{itemize}
     261%              \item Dimensionner le nombre de threads proportionnellement à l'ILP exploitable.
     262%              \end{itemize}
     263%            \end{description}
     264%          }
     265%          {
     266%          }
     267
     268%\subsubsection{DLP}
     269\slidetitle{Data Level Paralelism}
     270           {
     271             \begin{center}
     272               {\it Exécution d'instructions avec plusieurs données. (SIMD)}
     273             \end{center}
     274
     275             \printgraph{GENERAL_DLP}{1  }
     276           }
     277           {
     278             Matrice 3x3 + 10
     279           }
     280%\slide
     281%          {
     282%            \begin{description}
     283%            \item[Avantages     :]~
     284%              \begin{itemize}
     285%              \item Une instruction SIMD est équivalente à beaucoup d'instructions SISD.
     286%              \end{itemize}
     287%            \item[Inconvénients :]~
     288%              \begin{itemize}
     289%              \item Pas adapter pour les applications qui n'exploite pas le DLP.
     290%              \item Exploitation explicite par le programmeur.
     291%              \end{itemize}
     292%            \end{description}
     293%          }
     294%          {
     295%          }
     296%
     297
     298\slidetitle{Implémentation matérielle}
     299           {
     300             \printgraph{GENERAL_hardware}{.98}
     301           }
     302           {
     303             Streaming SIMD Extensions, généralement abrégé SSE, est un jeu de 70 instructions supplémentaires pour microprocesseurs x86, apparu sur le Pentium III. Le fonctionnement est de type SIMD.
     304
     305
     306             AltiVec est un ensemble d'instructions SIMD d'opérations en virgule flottante conçu par, et propriété de, Apple, IBM et Motorola (l'AIM alliance), et mis en application sur des versions du PowerPC telle le G4 de Motorola et le G5 d'IBM.
     307           }
     308
     309\slide
     310           {
    84311             \begin{description}
    85              \item [ILP :] Instruction Level Paralelism
    86              \item [TLP :] Thread      Level Paralelism
    87              \item [DLP :] Data        Level Paralelism
     312             \item[ILP]
     313               \begin{itemize}
     314               \item Super Scalaire\\
     315               \item \sout{VLIW}
     316                 \begin{itemize}
     317                   \item[$\Rightarrow$] Compilateur spécialisé.
     318                   \item[$\Rightarrow$] Pas scalable
     319                 \end{itemize}
     320               \end{itemize}
     321             \item[TLP]
     322               \begin{itemize}
     323               \item CMP
     324                 \begin{itemize}
     325                   \item[$\Rightarrow$] Scalable mais sous utilisation des ressources.
     326                 \end{itemize}
     327               \item SMT
     328                 \begin{itemize}
     329                   \item[$\Rightarrow$] Utilisation optimale des ressources mais peu scalable.
     330                 \end{itemize}
     331               \item Mixte
     332               \end{itemize}
     333             \item[DLP]
     334               \begin{itemize}
     335               \item Extension SIMD\\
     336               \end{itemize}
    88337             \end{description}
    89338           }
    90339           {
    91            }
    92 
    93 \slidetitle{ILP}
    94            {
     340             Mixte : tirer partie du CMP et SMT
     341           }
     342
     343\section{État actuel}
     344\ContentsCurrent
     345
     346\slidetitle{Processeurs libres existants}
     347           {
     348             \begin{tabular}{l|ccccc}
     349               
     350               {\it Processeur}    & {\it Date} & {\it ISA}            & \multicolumn{2}{c}{{\it Support}} \\
     351                             &      &                & {\it ASIC} & {\it FPGA}                 \\
     352               
     353               \hline
     354               OpenRISC 1200 & 2001 & or1000-ORBIS32 & X & X\\ %&Mono-core, Scalaire 5 étages, 32 bits\\
     355               LEON2         & 2003 & SPARC-V8       & X & X\\ %&Mono-core, Scalaire 5 étages, 32 bits\\
     356               LEON3         & 2005 & SPARC-V8e      & X & X\\ %&Mono-core, Scalaire 7 étages, 32 bits\\
     357               OpenSparcT1   & 2005 & UltraSPARC-V9  & X & X\\
     358               MANIK         & 2006 & MANIK          &   & X\\
     359               aeMB          & 2007 & Xilinx EDK 3.2 &   & X\\ %&Mono-core, Scalaire 3 étages, 32 bits\\
     360               OpenFIRE      & 2007 & Xilinx EDK 6.3 &   & X\\ %&Mono-core, Scalaire 3 étages, 32 bits\\
     361               OpenSparcS1   & 2007 & UltraSPARC-V9  & X & X\\
     362               OpenSparcT2   &$>$2007 & UltraSPARC-V9  &   &  \\
     363             \end{tabular}
     364           }
     365           {
     366             Xilinx EDK 3.2 : 2003
     367
     368             Xilinx EDK 6.3 : 2004
     369
     370             \begin{tabular}{l|cccc}
     371               
     372               {\it Processeur}    & FPGA & taille & freq (Mhz) & remarque\\
     373               
     374               \hline
     375               OpenRISC 1200 &  statix 2 & 3000 & 33 & sans cache\\
     376               LEON2         &  virtex 2 & 5000 + RAM & 80 & \\
     377               LEON3         &  ? & 3500 & 125 & \\
     378               MANIK         &  &  & & \\
     379               aeMB          &  &  & & \\
     380               OpenFIRE      &  virtex 2 & 641 & 100\\
     381             \end{tabular}
     382
     383             
     384             Xilinx XC4VLX200   SPARC   FPU     CCX
     385             LUTs       134,973         13,863  25,090
     386             
     387             
     388             With FPGA\_SYN, FPGA\_SYN\_1THREAD, and FPGA\_SYN\_NO\_SPU options:
     389             Xilinx XC4VFX100   SPARC   FPU     CCX
     390             LUTs       40,613  9,398   26,051
     391             
     392             
     393             
     394             With FPGA\_SYN and FPGA\_SYN\_NO\_SPU options (4 threaded core):
     395             Xilinx XC4VFX100   SPARC   FPU     CCX
     396             LUTs       68,476  9,398   26,051
     397           }
     398           
     399\slidetitle{État actuel}
     400           {
     401             Il existe plusieurs processeurs libres, mais :
     402
     403             \begin{itemize}
     404             \item Aucun processeur n'exploite l'ILP.
     405             \item Les paramètres concernent principalement le cache.
     406             \item Seuls les modèles de l'OpenSPARC exploitent le TLP.
     407             \end{itemize}
     408           }
     409           {
     410           }
     411
     412%\slidetitle{Fonction de coûts}
     413%          {
     414%            Comparaison de deux instances du générateur :
     415%
     416%            \begin{itemize}
     417%            \item Soit : obtenir le meilleur compromis Performance / Complexité.
     418%              \begin{itemize}
     419%              \item Performance : nombre de cycles nécessaire pour exécuter les Benchmarks.
     420%              \item Complexité  : surface occupée du FPGA.
     421%              \end{itemize}
     422%            \item Soit : obtenir le meilleur partage des ressources entre les contextes matériels. (Gain Performance / Coût surface).
     423%              \begin{itemize}
     424%              \item Gain en performance : rapport entre la performance MT sur la performance ST.
     425%              \item Coût en surface     : rapport entre la surface     MT sur la surface     ST.
     426%              \end{itemize}
     427%            \end{itemize}
     428%          }
     429%          {
     430%            benchmark : SPECINT2k, Dhrystone
     431%
     432%           
     433%          }
     434
     435\section{Morpheo}
     436\ContentsCurrent
     437
     438%\slidetitle{Morpheo}
     439%          {
     440%            \printgraph{MORPHEO_service}{0.75}
     441%          }
     442%          {
     443%          }
     444
     445\subsection{Paramètres}
     446\slidetitle{Paramètres}
     447           {
     448             3 types :
    95449             \begin{description}
    96              \item[Avantages     :]~
    97                \begin{itemize}
    98                \item Exploitation implicite.           
    99                \end{itemize}
    100              \item[Inconvénients :]~
    101                \begin{itemize}
    102                \item Coût quadratique du contrôle.
    103                \end{itemize}
     450             \item [Global]
     451               \begin{itemize}
     452                 \item Occurrence de chaque entité [1:8]
     453                 \item Nombre d'instructions pour chaque entité [1:8]
     454               \end{itemize}
     455             \item [Local]
     456               \begin{itemize}
     457                 \item Présence/Absence du réseau de bypass
     458                 \item Nombre de registres physiques [32:512]
     459                 \item Nombre de ports du banc de registres [2:16]
     460                 \item Taille des files d'attente (fetch\_queue, \dots) [2:8]
     461                 \item Taille des structures internes (BTB, RAS, \dots)
     462                 \item Type et taille du prédicteur de branchement
     463                 \item Type des unités d'exécution
     464               \end{itemize}
     465             \item [Routage]
     466               \begin{itemize}
     467                 \item Entre les différentes entités
     468               \end{itemize}   
    104469             \end{description}
    105470           }
     
    107472           }
    108473
    109 \slidetitle{TLP - Chip Multi Processor (CMP)}
    110            {
    111              \begin{description}
    112              \item[Avantages     :]~
    113                \begin{itemize}
    114                \item Implémentation très simple : duplication des cores
    115                \item Ressources dédiés au thread executé sur le core
    116                \end{itemize}
    117              \item[Inconvénients :]~
    118                \begin{itemize}
    119                \item Il doit avoir plus de thread que de core afin d'éviter l'oisiveté des cores.
    120                \end{itemize}
    121              \end{description}
    122            }
    123            {
    124            }
    125 
    126 \slidetitle{TLP - Simulatenous Multi Threading (SMT)}
    127            {
    128              \begin{description}
    129              \item[Avantages     :]~
    130                \begin{itemize}
    131                \item Implémentation très simple et peu coûteuse en surface.
    132                \item Meilleur exploitation des ressources
    133                \end{itemize}
    134              \item[Inconvénients :]~
    135                \begin{itemize}
    136                \item Dimensionnement du nombre de thread proportionnel à l'ILP exploitable.
    137                \end{itemize}
    138              \end{description}
    139            }
    140            {
    141            }
    142 
    143 \slidetitle{DLP}
    144            {
    145              \begin{description}
    146              \item[Avantages     :]~
    147                \begin{itemize}
    148                \item Une instruction SIMD est équivalente à beaucoup d'instructions SISD.
    149                \end{itemize}
    150              \item[Inconvénients :]~
    151                \begin{itemize}
    152                \item Pas adapter pour les applications qui n'exploite pas le DLP.
    153                \item Exploitation explicite par le programmeur.
    154                \end{itemize}
    155              \end{description}
    156            }
    157            {
    158            }
    159 
    160            
    161 \slidetitle{Etat de l'art}
    162            {
    163              \begin{description}
    164              \item [sofcore :]~
    165                \begin{description}
    166                \item [Commercial :] Nios, MicroBlaze, ...
    167                \item [Libre      :] OpenRISC 1200, Leon 2/3, OpenSPARC T1/S1
    168                \end{description}
    169                {\it Non : Peu configurable, faible exploitation du paralélisme d'instruction}
    170              \item [Simulateur :] SimpleScalar, SMTSim, ...\\
    171                {\it Non : Simulateur non prévut pour avoir une synthèse}
    172              \item [Hardcore :] POWER5, Intel Pentium 3/4, MIPS R10000, ...\\
    173                {\it Non : ISA non libre}
    174              \end{description}
    175            }
    176            {
    177            }
    178 
    179 \slidetitle{Objectif}
    180            {
    181            }
    182            {
    183            }
    184 
    185 \slidetitle{Service offert}
    186            {
    187              \printgraph{MORPHEO_service}{0.75}
    188            }
    189            {
    190            }
    191 
    192 \slidetitle{Fonction de coûts}
    193            {
    194            }
    195            {
    196            }
    197 
    198 \section{Morpheo}
    199 %\ContentsCurrent
    200 
    201 \subsection{Micro Architecture}
    202 \slidetitle{Micro Architecture : Overview}
     474\subsection{Architecture interne}
     475\slidetitle{Architecture interne}
    203476           {
    204477             \printgraph{MORPHEO_micro_architecture-overview}{0.48}
     
    207480             3 grandes parties :
    208481             \begin{description}
    209              \item[Front end :] Amène des paquets d'instructions en séquence, et les décodes. Calcules les addresses suivantes (spéculation) et maintiens l'état des threads (idle, wait, run ...)
    210              \item[Out Of Order Engine :] Renome les registres (annulations des dépendances RAW, WAW et WAR). Re Order Buffer : mettre à jour l'état du contexte dans l'ordre d'arrivé des threads.
    211              \item[Execution Loop :] Boucle ``Read, execute, Write''. Ainsi que les bypass. Instructions peuvent ce lancer dans le désordres.
     482             \item[Front end           :] Amène des paquets d'instructions en séquence, et les décodes. Calcules les adresses suivantes (spéculation) et maintiens l'état des threads (idle, wait, run ...)
     483             \item[Out Of Order Engine :] Renomme les registres (annulations des dépendances RAW, WAW et WAR). Re Order Buffer : mettre à jour l'état du contexte dans l'ordre d'arriver des threads.
     484             \item[Execution Loop      :] Boucle ``Read, execute, Write''. Ainsi que les bypass. Instructions peuvent ce lancer dans le désordres.
    212485             \end{description}
    213486           }
    214487
    215 \slidetitle{Micro Architecture : Front end}
    216            {
    217              \printgraph{MORPHEO_micro_architecture-front_end}{0.7}
    218            }
    219            {
    220            }
    221 
    222 \slidetitle{Micro Architecture : Out Of Order Engine}
    223            {
    224              \printgraph{MORPHEO_micro_architecture-out_of_order_engine}{0.7}
    225            }
    226            {
    227            }
    228 
    229 \slidetitle{Micro Architecture : Execution Loop}
    230            {
    231              \printgraph{MORPHEO_micro_architecture-execute_loop}{0.7}
    232            }
    233            {
    234            }
    235 
     488\slide
     489           {
     490             \printgraph{MORPHEO_micro_architecture-ex01}{0.48}
     491           }
     492           {
     493             Hypothèse de départ
     494
     495             SMT 2
     496           }
     497
     498\slide
     499           {
     500             \printgraph{MORPHEO_micro_architecture-ex02}{0.48}
     501           }
     502           {
     503             contexte x4 prédicteur dédié
     504           }
     505
     506\slide
     507           {
     508             \printgraph{MORPHEO_micro_architecture-ex03}{0.48}
     509           }
     510           {
     511             Select ...
     512           }
     513
     514\slide
     515           {
     516             \printgraph{MORPHEO_micro_architecture-ex04}{0.48}
     517           }
     518           {
     519             possibilité de CMP
     520           }
     521
     522
     523%\slidetitle{Micro Architecture : Front end}
     524%          {
     525%            \printgraph{MORPHEO_micro_architecture-front_end}{0.7}
     526%          }
     527%          {
     528%          }
     529%
     530%\slidetitle{Micro Architecture : Out Of Order Engine}
     531%          {
     532%            \printgraph{MORPHEO_micro_architecture-out_of_order_engine}{0.7}
     533%          }
     534%          {
     535%          }
     536%
     537%\slidetitle{Micro Architecture : Execution Loop}
     538%          {
     539%            \printgraph{MORPHEO_micro_architecture-execute_loop}{0.7}
     540%          }
     541%          {
     542%          }
     543%
     544\section{Validation fonctionnelle}
     545\ContentsCurrent
     546
     547\subsection{Validation du modèle systemC/CABA}
    236548
    237549\slidetitle{Environnement de simulation}
    238550           {
     551             \begin{itemize}
     552             \item Benchmark SPECINT2k.
     553               \begin{tabular}{ll}
     554                 164.gzip   & Compression.                          \\
     555                 175.vpr    & Placement et routage de circuit FPGA. \\
     556                 181.mcf    & Optimisation combinatoire.            \\
     557                 255.vortex & Object-oriented Database.             \\
     558                 256.bzip2  & Compression.                          \\
     559                 300.twolf  & Simulateur de placement et de routage.\\
     560               \end{tabular}
     561             \item Appel système : librairie {\it newlib}.
     562             \item Plate-forme matérielle ``custom''
     563               \begin{itemize}
     564                 \item Gestion de l'endienness.
     565                 \item Pont entre la simulation et le système hôte.
     566               \end{itemize}
     567             \end{itemize}
     568           }
     569           {
     570             sim2os :
     571             \begin{itemize}
     572             \item SERVICE\_OPEN
     573             \item SERVICE\_CLOSE
     574             \item SERVICE\_READ
     575             \item SERVICE\_WRITE
     576             \item SERVICE\_TIME
     577             \item SERVICE\_CLOCK
     578             \item SERVICE\_LSEEK
     579             \end{itemize}
     580           }
     581
     582\slidetitle{Hypothèse de travail}
     583           {
     584             Architecture de références
     585             \begin{itemize}
     586               \item 4 Threads
     587               \item 8 Unités d'exécutions
     588               \item 8 Instructions lancées par cycle
     589             \end{itemize}
     590             
     591             Variation de l'architecture
     592             \begin{itemize}
     593             \item Nombre de cache de premier niveau
     594             \item Nombre d'unité de lancement (Front\_End et OoO\_Engine)
     595             \item Nombre de contexte matériel
     596             \item Partage des unités fonctionnelles
     597             \end{itemize}
    239598           }
    240599           {
     
    243602\slidetitle{Résultats}
    244603           {
    245            }
    246            {
    247            }
    248 
    249 \slidetitle{Morpheo on FPGA}
    250            {
    251            }
    252            {
    253            }
    254 
    255 
    256 
    257 %\section{Besoins}
    258 %
    259 %\ContentsCurrent
    260 %
    261 %\slidetitle{Besoins}
    262 %          {Besoins pour les processeurs embarquées :
    263 %           
    264 %            \begin{itemize}
    265 %            \item Maîtrise du système
    266 %            \item Souplesse
    267 %            \item Performance
    268 %            \end{itemize}
    269 %          }
    270 %          {
    271 %            Où : téléphone portable, baladeur mp3/vidéo, automobile ...
    272 %
    273 %            \begin{description}
    274 %            \item[Maitrise du système :] Les processeurs généralistes sont utilisés dans un vaste échantillon d'application. Ceci touche également la sécurité.
    275 %            \item[Souplesse           :] Pour un concepteur de système embarqués : bien dimensionner son système
    276 %            \item[Performance         :] Application cible de plus en plus gourmande en ressources : beaucoup de threads avec des impératifs de rapidité.
    277 %            \end{description}
    278 %          }
    279 %
    280 %\subsection{Maîtrise du système}
    281 %\slidetitle{Besoin de la Maîtrise du système}
    282 %          {
    283 %            {\bf Plate-forme de confiance totale}
    284 %
    285 %            \begin{itemize}
    286 %            \item Projet Open
    287 %            \item ISA Open
    288 %            \item Instructions customisables
    289 %            \end{itemize}
    290 %          }
    291 %          {
    292 %            Morpheo s'inscrit dans le cadre du projet plate-forme de confiance totale.
    293 %
    294 %            Instructions customisables : possibilité à l'utilisateur de rajouter de nouvelles instructions. Comme par exemple pour le chiffrement ou le déchiffrement ...
    295 %%           On doit supposer que la mémoire d'instruction et de donnée ce trouve en milieu accéssible par les pirates. Leur chiffrement en devient obligatoire.
    296 %%
    297 %%           En hard dans le proc? cache? interconnect? I/O?
    298 %          }
    299 %
    300 %
    301 %\subsection{Souplesse}
    302 %\slidetitle{Besoin de Souplesse}
    303 %          {
    304 %            {\bf Adapation aux besoins des concepteurs}
    305 %
    306 %            \begin{itemize}
    307 %            \item Processeur hautement paramètrables
    308 %            \item Ressources internes hétérogènes
    309 %            \item FPGA
    310 %            \end{itemize}
    311 %          }
    312 %          {
    313 %            Souplesse : s'adapter aux besoins des concepteur de SoC.
    314 %
    315 %            \begin{description}
    316 %            \item[Paramètrables :] Fournir un grand jeu de paramètres afin de satisfaire les contraintes du concepteur
    317 %            \item[Hétérogènes :] En découle des paramètres
    318 %            \item[FPGA :] Cible de + en + utilisé, Si mappage possible sur les ressources limités d'un FPGA, alors possible également sur un ASIC
    319 %            \end{description}
    320 %          }
    321 %
    322 %\subsection{Performance}
    323 %\slidetitle{Besoin de Performance (1) - ILP vs TLP}
    324 %          {
    325 %            {\bf Exploitation des différentes formes de parallélisme}
    326 %           
    327 %            Paquet d'instruction pouvant s'éxecuter en parallèle :
    328 %            \begin{itemize}
    329 %            \item {\it Intra flot} : exploitation de l'ILP\newline limitation intrasèque au soft (3-5 instructions)
    330 %            \item {\it Inter flot} : exploitation du TLP  \newline limitation intrasèque au système cible
    331 %            \end{itemize}
    332 %          }
    333 %          {
    334 %            \begin{itemize}
    335 %            \item ILP : superscalaire, OutOfOrder, Spéculation
    336 %            \item TLP : CMP, SMT
    337 %            \end{itemize}
    338 %          }
    339 %
    340 %\slidetitle{Besoin de Performance (2) - CMP vs SMT}
    341 %          {
    342 %            \printgraph{GENERAL_type_of_multi_thread}{0.5}
    343 %           
    344 %%           (schéma)
    345 %%           
    346 %%           Comparaison théorique de 5 types d'architectures :
    347 %%           ||Mono Coeur           ||Mono Contexte           ||Largeur infini||Idéal       ||
    348 %%           ||Mono Coeur           ||Mono Contexte           ||Largeur 4     ||Monolithique||
    349 %%           ||Multi Coeur d'ordre 4||Mono Contexte           ||Largeur 1     ||CMP         ||
    350 %%           ||Mono Coeur           ||Multi Contexte d'ordre 4||Largeur 4     ||SMT         ||
    351 %%           ||Multi coeur d'ordre 2||Multi Contexte d'ordre 2||Largeur 2     ||CMP de SMT  ||
    352 %          }
    353 %          {
    354 %            \begin{itemize}
    355 %            \item A et B : 17 instructions en 7 UT idéale
    356 %            \item (1) : 14 UT
    357 %            \item (2) : 17 UT, 34 slot vide, occupation 50\%
    358 %            \item (3) : 12 UT, 14 slot vide, occupation 70\%
    359 %            \item (4) : 11 UT, 10 slot vide, occupation 77\%
    360 %            \end{itemize}
    361 %          }
    362 %\slidetitle{Besoin de Performance (3) - Entre le CMP et le SMT}
    363 %          {
    364 %            \begin{description}
    365 %            \item[CMP :] L'intégralité des ressources d'un coeur sont dédiées   à un contexte.
    366 %            \item[SMT :] L'intégralité des ressources d'un coeur sont partagées entre tous les contextes.
    367 %            \item[Hybride :] Multitude de possibilité de partage des ressources internes.\\
    368 %              Une ressource est soit dédiée à un contexte soit partagée entre un certain nombre de contextes.
    369 %            \end{description}
    370 %          }
    371 %          {
    372 %            Définir ce qu'est une ressource : ALU, predicteur de branchement, cache ...
    373 %          }
    374 %
    375 %
    376 %\section{Solution}
    377 %\ContentsCurrent
    378 %\subsection{Initiatives actuelles}
    379 %\slidetitle{Initiatives actuelles}
    380 %          {
    381 %            Tous les processeurs sont des RISC scalaires.
    382 %
    383 %            \begin{description}
    384 %            \item[OpenRISC 1200 :] 32 bits, 5 étages. Jusqu'à 8 contextes.
    385 %            \item[Leon 2        :] 32 bits, 5 étages.
    386 %            \item[Leon 3        :] Leon 2 en 7 étages.
    387 %            \item[OpenSparcS1   :] 1 coeur 64bits, 6 étages et CMT 4.
    388 %            \item[OpenSparcT1   :] OpenSparcS1 avec 8 coeurs. Version OpenSource du Niagara.
    389 %            \item[Micro32       :] 32 bits, 6 étages.
    390 %            \item[OpenFire      :] 32 bits, 3 étages. Dérivés du MicroBlaze
    391 %            \item[aeMB          :] 32 bits, 3 étages. Dérivés du MicroBlaze
    392 %            \end{description}
    393 %          }
    394 %          {
    395 %            \begin{description}
    396 %            \item[OpenRISC 1200 :] Présence icache, dcache, immu, dmmu. Taille des caches, des opérandes, du banc de registres. Matériel spécifique : div, rotate, mul, mac.
    397 %            \item[Leon 2 et 3   :] Présence de div, mul, mac, floating point. Taille du banc de registres . Nombre de load delai. Configuration avancé du cache et de la MMU (fetch, decod, execute, memory, write) (fetch, decod, register access, execute, memory, exception, write)
    398 %            \item[OpenSparc     :] Présence de la Stream Processing Unit (cryptographie), 1 seul thread par coeur.
    399 %            \item[Micro32       :] Présence icache, dcache, debug. Taille des caches. Matériel spécifique : div, rotate, mul pipeline, extension de signes.
    400 %            \item[OpenFire      :] 3 étages (Fetch, Decod, Execute). Faiblement configurable (largeur des données, espace d'addressage, presence de mul et de cmp). Aucun support de caches
    401 %            \item[aeMB          :] 3 étages (Fetch, Decod, Execute). Support de caches. Pas configurable (Juste la largeur de l'espace d'addressage)
    402 %            \end{description}
    403 %          }
    404 %
    405 %\slide     {
    406 %            \printgraph{GENERAL_Art_of_State-Comparaison}{0.8}
    407 %          }
    408 %          {
    409 %          }
    410 %\subsection{Solution proposée}
    411 %\slidetitle{Solution proposée}
    412 %          {
    413 %            \begin{itemize}
    414 %            \item Partir d'une micro-architecture HighPerf.
    415 %            \item Ajout de la gestion du multi-thread.
    416 %            \item Rendre paramétrable les ressources internes.
    417 %            \item Mappage des instances de ce générateur de processeur sur les ressources limitées d'un FPGA.
    418 %            \end{itemize}
    419 %          }
    420 %          {
    421 %            Pentium 4, MipsR10000, Power5
    422 %          }
    423 %         
    424 %\subsection{Métrique}
    425 %\slidetitle{Métrique}
    426 %          {
    427 %            \begin{itemize}
    428 %            \item Obtenir le meilleur compromis Performance / Complexité.
    429 %              \begin{itemize}
    430 %              \item Performance : nombre de cycles nécessaire pour éxecuter les Benchmarks.
    431 %              \item Compléxité  : surface occupée du FPGA.
    432 %              \end{itemize}
    433 %            \item Obtenir le meilleur partage des ressources entre les contextes matériels. (Gain Performance / Coût surface).
    434 %              \begin{itemize}
    435 %              \item Gain en performance : rapport entre la performance MT sur la performance ST.
    436 %              \item Coût en surface     : rapport entre la surface     MT sur la surface     ST.
    437 %              \end{itemize}
    438 %            \end{itemize}
    439 %          }
    440 %          {
    441 %            benchmark : SPECINT2k, Dhrystone
    442 %
    443 %            FPGA : virtex5LX 330
    444 %          }
    445 %
    446 %\section{Morpheo}
    447 %\ContentsCurrent
    448 %
    449 %\subsection{Micro Architecture}
    450 %\slidetitle{Micro Architecture : Overview}
    451 %          {
    452 %            \printgraph{MORPHEO_micro_architecture-overview}{0.48}
    453 %          }
    454 %          {
    455 %            3 grandes parties :
    456 %            \begin{description}
    457 %            \item[Front end :] Amène des paquets d'instructions en séquence, et les décodes. Calcules les addresses suivantes (spéculation) et maintiens l'état des threads (idle, wait, run ...)
    458 %            \item[Out Of Order Engine :] Renome les registres (annulations des dépendances RAW, WAW et WAR). Re Order Buffer : mettre à jour l'état du contexte dans l'ordre d'arrivé des threads.
    459 %            \item[Execution Loop :] Boucle ``Read, execute, Write''. Ainsi que les bypass. Instructions peuvent ce lancer dans le désordres.
    460 %            \end{description}
    461 %          }
    462 %
    463 %\slidetitle{Micro Architecture : Front end}
    464 %          {
    465 %            \printgraph{MORPHEO_micro_architecture-front_end}{0.7}
    466 %          }
    467 %          {
    468 %          }
    469 %
    470 %\slidetitle{Micro Architecture : Out Of Order Engine}
    471 %          {
    472 %            \printgraph{MORPHEO_micro_architecture-out_of_order_engine}{0.7}
    473 %          }
    474 %          {
    475 %          }
    476 %
    477 %\slidetitle{Micro Architecture : Execution Loop}
    478 %          {
    479 %            \printgraph{MORPHEO_micro_architecture-execute_loop}{0.7}
    480 %          }
    481 %          {
    482 %          }
    483 %
    484 %\subsection{Méthodologie}
    485 %\slidetitle{Service proposé}
    486 %          {
    487 %            \printgraph{MORPHEO_service}{0.75}
    488 %          }
    489 %          {
    490 %            libMorpheo :
    491 %            \begin{itemize}
    492 %            \item Simulation systemC
    493 %              \begin{itemize}
    494 %              \item TestBench Vhdl
    495 %              \item Statistiques lors de la simulation
    496 %              \end{itemize}
    497 %            \item Vhdl : synthétisable sur FPGA
    498 %            \item Positions: Point d'entrée d'un outil de visualisation architectural (Stage M1)
    499 %            \end{itemize}
    500 %          }
    501 %   
    502 %\slidetitle{Méthodologie - Boucle d'Iteration}
    503 %          {
    504 %            \printgraph{MORPHEO_methodologie}{0.3}
    505 %          }
    506 %          {
    507 %            \begin{enumerate}
    508 %            \item SystemC
    509 %              \begin{enumerate}
    510 %              \item Ecriture du modèle systemC
    511 %              \item Ecriture d'un TestBench pour le systemc - goto 1.1
    512 %              \end{enumerate}
    513 %            \item VHDL
    514 %              \begin{enumerate}
    515 %              \item Ecriture du vhdl
    516 %              \item Validation de la stricte compatibilité entre le systemC et le Vhdl - goto 2.1 ou 1.1
    517 %              \end{enumerate}
    518 %            \item FPGA
    519 %              \begin{enumerate}
    520 %              \item Synthèse sur FPGA - goto 2.1, 1.1
    521 %              \item Mappage sur FPGA
    522 %              \end{enumerate}
    523 %            \end{enumerate}
    524 %          }
    525 %
    526 %\subsection{Perspective}
    527 %\slidetitle{Comment remplir nos journées?}
    528 %          {
    529 %            Il "reste" à faire ...
    530 %          }
    531 %          {
    532 %          }
    533 
    534 \slide{}{}
     604             \begin{center}
     605               Variation du partage des ressources entre les contextes matérielles.
     606             \end{center}
     607             %Rapport entre la performance MT sur la performance ST.
     608
     609             \printgraph{simulation_performance}{0.7}       
     610           }
     611           {
     612             DIRE : ST / MT.
     613
     614             MT = exécution parallèle des benchmarks
     615
     616             ST = exécution séquentielle des benchmarks
     617
     618
     619             ordonnée : IPC
     620
     621             abscisse : degré de partage
     622           }
     623
     624\slide
     625           {
     626             %Rapport entre la performance MT sur la performance ST.
     627
     628             \printgraph{simulation_surface}{0.7}           
     629           }
     630           {
     631           }
     632
     633\subsection{Méthodologie pour le modèle VHDL/RTL}
     634
     635\slidetitle{Méthodologie pour l'écriture du générateur VHDL}
     636           {
     637             \printgraph{VHDL_methodologie}{0.7}
     638           }
     639           {
     640             FPGA : virtex5LX 330
     641           }
     642
     643\slidetitle{Exemple : Banc de registres 512x32 bits}
     644           {
     645             \printgraph{synthese_FPGA-registerfile}{0.7}
     646           }
     647           {
     648           }
     649
     650\slidetitle{Planning}
     651           {
     652             \begin{itemize}
     653             \item Optimisation du modèle SytemC/CABA
     654             \item Écriture du générateur de VHDL/RTL
     655             \item Réalisation d'un démonstrateur :
     656               \begin{itemize}
     657               \item synthèse sur un FPGA d'une instance du générateur.
     658               \item exécution d'une application de test
     659               \end{itemize}
     660             \end{itemize}
     661           }
     662           {
     663           }
     664
     665\slidetitle{Conclusion}
     666           {
     667             \begin{itemize}
     668               \item Définition d'un processeur ouvert, haute performance, paramétrable et pérenne.
     669               \item Disposer d'un outil d'aide à l'exploration architecturale
     670             \end{itemize}
     671           }
     672           {
     673           }
  • trunk/IPs/systemC/processor/Morpheo/Documentation/Source/Graph/simulation_all.p

    r23 r57  
    88
    99set data style boxes
    10 set boxwidth 0.5
     10set boxwidth 2
    1111set style fill solid 1.000000 border -1
    12 
     12   
    1313set grid
    1414set xlabel "Architecture"
    15 set ylabel "Speed Up MT/ST"
    16 set yrange [0:4]
     15set ylabel "Ratio MT/ST"
     16   set yrange [0:4.5]
    1717   
    18 set xtics rotate by -25 ('X4-1_1_4-8'  0 , \
    19                          'X4-1_2_2-8'  1 , \
    20                          'X4-1_2_2-4'  2 , \
    21                          'X4-1_4_1-8'  3 , \
    22                          'X4-1_4_1-2'  4 , \
    23                          'X4-2_1_2-8'  5 , \
    24                          'X4-2_1_2-4'  6 , \
    25                          'X4-2_2_1-8'  7 , \
    26                          'X4-2_2_1-4'  8 , \
    27                          'X4-2_2_1-2'  9 , \
    28                          'X4-4_1_1-8'  10, \
    29                          'X4-4_1_1-4'  11, \
    30                          'X4-4_1_1-2'  12  )
     18set xtics rotate by -25 ('X4-1_1_4-8'  0  , \
     19                         'X4-1_2_2-8'  10 , \
     20                         'X4-1_2_2-4'  20 , \
     21                         'X4-2_1_2-8'  30 , \
     22                         'X4-2_1_2-4'  40 , \
     23                         'X4-1_4_1-8'  50 , \
     24                         'X4-1_4_1-2'  60 , \
     25                         'X4-2_2_1-8'  70 , \
     26                         'X4-2_2_1-4'  80 , \
     27                         'X4-2_2_1-2'  90 , \
     28                         'X4-4_1_1-8'  100, \
     29                         'X4-4_1_1-4'  110, \
     30                         'X4-4_1_1-2'  120  )
    3131
    32 plot "simulation_all.dat" notitle
    33      
     32
     33plot "simulation_all_perf.dat"    title "Gain de performance",\
     34     "simulation_all_surface.dat" title "Augmentation surface"
  • trunk/IPs/systemC/processor/Morpheo/Documentation/Source/Graph/simulation_all_perf.dat

    r52 r57  
    1 1.46 # x04_w08-01_e08-01  X4-1_1_4-8
    2 2.37 # x04_w08-04_e08-01  X4-1_2_2-8
    3 2.37 # x04_w08-04_e08-07  X4-1_2_2-4
    4 2.94 # x04_w08-07_e08-01  X4-1_4_1-8
    5 3.27 # x04_w08-07_e08-15  X4-1_4_1-2
    6 2.51 # x04_w08-08_e08-01  X4-2_1_2-8
    7 2.4  # x04_w08-08_e08-07  X4-2_1_2-4
    8 3.38 # x04_w08-11_e08-01  X4-2_2_1-8
    9 3.41 # x04_w08-11_e08-07b X4-2_2_1-4
    10 3.63 # x04_w08-11_e08-15  X4-2_2_1-2
    11 3.94 # x04_w08-15_e08-01  X4-4_1_1-8
    12 3.88 # x04_w08-15_e08-07  X4-4_1_1-4
    13 3.92 # x04_w08-15_e08-15  X4-4_1_1-2
     10   1.46 # x04_w08-01_e08-01  X4-1_1_4-8
     210  2.37 # x04_w08-04_e08-01  X4-1_2_2-8
     320  2.37 # x04_w08-04_e08-07  X4-1_2_2-4
     430  2.51 # x04_w08-08_e08-01  X4-2_1_2-8
     540  2.4  # x04_w08-08_e08-07  X4-2_1_2-4
     650  2.94 # x04_w08-07_e08-01  X4-1_4_1-8
     760  3.27 # x04_w08-07_e08-15  X4-1_4_1-2
     870  3.38 # x04_w08-11_e08-01  X4-2_2_1-8
     980  3.41 # x04_w08-11_e08-07b X4-2_2_1-4
     1090  3.63 # x04_w08-11_e08-15  X4-2_2_1-2
     11100 3.94 # x04_w08-15_e08-01  X4-4_1_1-8
     12110 3.88 # x04_w08-15_e08-07  X4-4_1_1-4
     13120 3.92 # x04_w08-15_e08-15  X4-4_1_1-2
  • trunk/IPs/systemC/processor/Morpheo/Documentation/Source/Include/ppt-file_source.sed

    r51 r57  
    1 \documentclass{beamer}
    2 
    31\def\lang{@LANG}
    42\def\file{@FILE}
     
    97\def\dirroot{\dirdoc/\lang}
    108
     9% Package de variables d'environnement : Titre, command etc ...
    1110
    12 % Package de variables d'environnement : Titre, command etc ...
     11\include{\dirpackage/\file}
    1312\usepackage{Include/ppt-style}
    14 \include{\dirpackage/\file}
    1513\usepackage{\dirpackage/\file}
    1614
  • trunk/IPs/systemC/processor/Morpheo/Documentation/Source/Include/ppt-file_source.tex

    r2 r57  
     1%\documentclass{article}
     2\documentclass{beamer}
     3
    14\usepackage{beamerthemetree}
    25
  • trunk/IPs/systemC/processor/Morpheo/Documentation/Source/Include/ppt-style.sty

    r42 r57  
    11\typeout{Fichier de style `ppt-style.sty'.}
    22
     3\usepackage{beamerarticle}
    34\usepackage{graphicx}
    45\usepackage{tabularx}
     
    910\usepackage{pgf,pgfarrows,pgfheaps,pgfnodes,pgfpages,pgfshade}
    1011\usepackage{openbib}
     12\usepackage{ulem}
    1113\bibliographystyle{plain}
    1214
    13 %\useoutertheme{infolines}
     15\addtobeamertemplate{footline}{\insertframenumber/\inserttotalframenumber}
     16
     17\setbeameroption{show notes on second screen}
     18
     19%\useoutertheme{splitbarsbackground}
    1420%\usetheme{Darmstadt}
    1521%\usetheme{Malmoe}
  • trunk/IPs/systemC/processor/Morpheo/Documentation/Source/Info/presentation-internal_seminary_overview.sty

    r52 r57  
    1 \def\review{2007/09/21}
     1\def\review{2007/09/28}
    22%\def\review{\number\day/\number\month/\number\year\xspace}
    33
    4 \title{Séminaire interne :\newline Processeur libre, haute performance et paramètrable}
     4\title{MORPHEO :\newline Processeur ouvert, haute performance, paramétrable et pérenne pour plate-forme de confiance.}
    55
    6 \institute{Département ALSOC - Laboratoire d'informatique de Paris VI - France}
     6\institute{Département SOC - Laboratoire d'informatique de Paris VI - France}
    77 
    8 \author{Mathieu Rosière\\
    9   encadrement :\\
    10   Nathalie Drach-Temam\\
    11   Jean-Lou Desbarbieux\\
    12   Franck Wajsbürt
    13 }
     8\author{Mathieu Rosière\newline
     9  encadrement :\newline
     10  Nathalie Drach-Temam\newline
     11  Jean-Lou Desbarbieux\newline
     12  Franck Wajsbürt}
    1413
    1514\date{\review}
  • trunk/IPs/systemC/processor/Morpheo/Documentation/Source/Info/presentation-internal_seminary_overview.tex

    r51 r57  
     1%\documentclass[10pt,a4paper,onecolumn]{article}
     2\documentclass{beamer}
    13\usepackage{beamerthemetree}
    24
    3 %\setbeameroption{show notes on second screen}
     5
     6
     7
     8
  • trunk/IPs/systemC/processor/Morpheo/Documentation/Source/Makefile

    r53 r57  
    9494%.pdf                   : %.ps
    9595                        @\
    96                         $(ECHO) "Génération du fichier $*.pdf";                                                 \
    97                         $(PS2PDF) $< $@;                                                                        \
     96                        $(ECHO) "Génération du fichier $*.pdf";         \
     97                        $(PS2PDF) $< $@;                                \
    9898                        $(CP) $@ $(DIR_DOCUMENTATION);
    9999
    100100%.ps                    : %.dvi
    101101                        @\
    102                         $(ECHO) "Génération du fichier $*.ps";                                                  \
     102                        $(ECHO) "Génération du fichier $*.ps";          \
    103103                        $(DVIPS) -o $@ $<;
    104104
     
    106106%.dvi                   : $(DIR_TEX)/%.tex
    107107                        @\
    108                         $(ECHO) "Génération du fichier $*.dvi";                                                 \
    109                         $(LATEX_WITH_ENV) $<;                                                                   \
    110                         $(LATEX_WITH_ENV) $< > /dev/null;                                                       \
    111                         citation=`$(GREP) "citation" $*.aux`;                                                   \
    112                          if $(TEST) -n "$$citation" ; then                                                      \
    113                           $(BIBTEX) $* ;                                                                        \
    114                         fi;                                                                                     \
    115                         $(LATEX_WITH_ENV) $< > /dev/null;                                                       \
    116                         $(LATEX_WITH_ENV) $< > /dev/null;
     108                        $(ECHO) "Génération du fichier $*.dvi";         \
     109                        $(LATEX_WITH_ENV) $<;                           \
     110                        if $(TEST) $? -eq 0; then                       \
     111                                $(LATEX_WITH_ENV) $< > /dev/null;       \
     112                                citation=`$(GREP) "citation" $*.aux`;   \
     113                                if $(TEST) -n "$$citation" ; then       \
     114                                        $(BIBTEX) $* ;                  \
     115                                fi;                                     \
     116                                $(LATEX_WITH_ENV) $< > /dev/null;       \
     117                                $(LATEX_WITH_ENV) $< > /dev/null;       \
     118                        fi;
    117119
    118120#--------------------------------------------------------------------------------
     
    348350                        declare -a VIEWER;                                                                      \
    349351                                                                                                                \
    350                         FORMAT=("pdf"         "pdf"      "ps"     "dvi");                                       \
    351                         VIEWER=($(VIEWPDF_FS) $(VIEWPDF) $(VIEWPS) $(VIEWDVI));                                 \
     352                        FORMAT=("pdf"           "pdf"        "ps"        "dvi");                                \
     353                        VIEWER=("$(VIEWPDF_FS)" "$(VIEWPDF)" "$(VIEWPS)" "$(VIEWDVI)");                         \
    352354                                                                                                                \
    353355                        CPT=0;                                                                                  \
     
    378380$(DIR_SCHEMA_EPS)       :
    379381                        @\
    380                         $(ECHO) "Make directory       : $@";                                                    \
     382                        $(ECHO) "Make directory       : $@";            \
    381383                        $(MKDIR) $@;
    382384
    383385$(DIR_SCHEMA_PNG)       :
    384386                        @\
    385                         $(ECHO) "Make directory       : $@";                                                    \
     387                        $(ECHO) "Make directory       : $@";            \
    386388                        $(MKDIR) $@;
    387389
    388390$(DIR_TEX)              :
    389391                        @\
    390                         $(ECHO) "Make directory       : $@";                                                    \
     392                        $(ECHO) "Make directory       : $@";            \
    391393                        $(MKDIR) $@;
    392394
    393395$(DIR_SCHEMA_PNG)/%.png : $(DIR_SCHEMA_EPS)/%.eps $(DIR_SCHEMA_PNG)
    394396                        @\
    395                         $(ECHO) "Generate   files     : $*.png";                                                \
     397                        $(ECHO) "Generate   files     : $*.png";        \
    396398                        $(EPS2PNG) $< $@;
    397399
    398400$(DIR_SCHEMA_EPS)/%.eps : $(DIR_SCHEMA)/%.eps $(DIR_SCHEMA_EPS)
    399401                        @\
    400                         $(ECHO) "Generate   files     : $*.eps";                                                \
     402                        $(ECHO) "Generate   files     : $*.eps";        \
    401403                        $(CP) $(DIR_SCHEMA)/$*.eps $(DIR_SCHEMA_EPS);
    402404
    403405$(DIR_SCHEMA_EPS)/%.eps : $(DIR_SCHEMA)/%.fig $(DIR_SCHEMA_EPS)
    404406                        @\
    405                         $(ECHO) "Generate   files     : $*.eps";                                                \
     407                        $(ECHO) "Generate   files     : $*.eps";        \
    406408                        $(FIG2EPS) $< $@;
    407409
    408410$(DIR_SCHEMA_EPS)/%.eps : $(DIR_GRAPH)/%.p    $(DIR_SCHEMA_EPS)
    409411                        @\
    410                         $(ECHO) "Generate   files     : $*.eps";                                                \
     412                        $(ECHO) "Generate   files     : $*.eps";        \
    411413                        $(CD) $(DIR_GRAPH); $(GNUPLOT) $*.p;
    412414
  • trunk/IPs/systemC/processor/Morpheo/Documentation/Source/Schema/MORPHEO_micro_architecture-front_end.fig

    r17 r57  
    1 #FIG 3.2  Produced by xfig version 3.2.5-alpha5
     1#FIG 3.2
    22Landscape
    33Center
     
    3636         3330 6930 2610 6930 2610 6480 3330 6480 3330 6930
    37374 1 0 50 -1 -1 10 0.0000 4 105 315 2970 6660 fetch\001
    38 4 1 0 50 -1 -1 10 0.0000 4 120 345 2970 6840 queue\001
     384 1 0 50 -1 -1 10 0.0000 4 105 345 2970 6840 queue\001
    3939-6
    40406 2610 5670 3330 6120
     
    43434 1 0 50 -1 -1 10 0.0000 4 105 450 2970 5850 address\001
    44444 1 0 50 -1 -1 10 0.0000 4 120 585 2970 6030 generator\001
    45 -6
    46 6 1710 6075 2430 6525
    47 2 4 0 1 0 31 50 -1 20 4.000 0 0 7 0 0 5
    48          2430 6525 1710 6525 1710 6075 2430 6075 2430 6525
    49 4 1 0 50 -1 -1 10 0.0000 4 105 240 2070 6255 inst\001
    50 4 1 0 50 -1 -1 10 0.0000 4 105 360 2070 6435 ROM\001
    5145-6
    52461 3 0 1 0 0 50 -1 20 0.000 1 0.0000 5040 5221 24 24 5040 5221 5064 5217
     
    102962 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
    10397        3 0 1.00 60.00 120.00
    104          2610 5895 1350 5895
     98         2610 5895 2250 5895
    105992 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 1
    106100         2250 5895
     
    1091032 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
    110104        3 0 1.00 60.00 120.00
    111          2070 5895 2070 6075
    112 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
    113         3 0 1.00 60.00 120.00
    114          1350 6705 2610 6705
    115 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
    116         3 0 1.00 60.00 120.00
    117          2070 6525 2070 6705
    118 2 2 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 5
    119          3510 5490 1530 5490 1530 7110 3510 7110 3510 5490
     105         2250 6705 2610 6705
    1201062 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
    121107        3 0 1.00 60.00 120.00
     
    1271132 4 0 1 0 31 50 -1 20 4.000 0 0 7 0 0 5
    128114         5310 6930 4590 6930 4590 6480 5310 6480 5310 6930
    129 4 2 0 50 -1 -1 10 0.0000 4 150 435 2880 4320 predict\001
     1152 2 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 5
     116         3510 5490 2430 5490 2430 7110 3510 7110 3510 5490
     1174 2 0 50 -1 -1 10 0.0000 4 135 435 2880 4320 predict\001
    1301184 1 0 50 -1 -1 10 0.0000 4 105 315 4005 6660 fetch\001
    1311194 0 0 50 -1 -1 10 0.0000 4 150 825 5085 6435 decod_branch\001
    1321204 1 0 50 -1 -1 10 0.0000 4 105 360 3600 5805 Event\001
    1331214 1 0 50 -1 -1 10 0.0000 4 105 345 4950 4995 Table\001
    134 4 1 0 50 -1 -1 10 0.0000 4 150 450 4950 4815 Update\001
     1224 1 0 50 -1 -1 10 0.0000 4 135 450 4950 4815 Update\001
    1351234 1 0 50 -1 -1 10 0.0000 4 105 420 4950 4635 Branch\001
    1361244 2 0 50 -1 -1 10 0.0000 4 150 690 4815 6435 decod_sync\001
    137 4 2 0 50 -1 -1 10 0.0000 4 150 405 6705 5715 update\001
     1254 2 0 50 -1 -1 10 0.0000 4 135 405 6705 5715 update\001
    1381264 0 0 50 -1 -1 10 0.0000 4 105 315 3060 6345 alloc\001
    139 4 0 0 50 -1 -1 10 0.0000 4 150 645 1395 5805 Icache_req\001
    140 4 0 0 50 -1 -1 10 0.0000 4 150 645 1395 6885 Icache_rsp\001
    1411274 2 0 50 -1 -1 10 0.0000 4 105 345 6750 7065 decod\001
    1421284 1 0 50 -1 -1 10 0.0000 4 105 345 4950 6750 decod\001
    1431294 1 0 50 -1 -1 10 0.0000 4 105 345 6030 6660 decod\001
    144 4 1 0 50 -1 -1 10 0.0000 4 120 345 6030 6840 queue\001
     1304 1 0 50 -1 -1 10 0.0000 4 105 345 6030 6840 queue\001
     1314 2 0 50 -1 -1 10 0.0000 4 150 645 2340 5805 Icache_req\001
     1324 2 0 50 -1 -1 10 0.0000 4 150 645 2340 6885 Icache_rsp\001
  • trunk/IPs/systemC/processor/Morpheo/Documentation/Source/Schema/MORPHEO_micro_architecture-overview.fig

    r17 r57  
    1 #FIG 3.2  Produced by xfig version 3.2.5-alpha5
     1#FIG 3.2
    22Landscape
    33Center
     
    11112 4 0 1 0 11 50 -1 20 4.000 0 0 7 0 0 5
    1212         5490 4140 4770 4140 4770 3690 5490 3690 5490 4140
    13 4 1 0 50 -1 -1 12 0.0000 4 135 495 5130 3960 decod\001
     134 1 0 50 -1 -1 12 0.0000 4 135 450 5130 3960 decod\001
    1414-6
    15156 4770 3240 5490 3690
    16162 4 0 1 0 11 50 -1 20 4.000 0 0 7 0 0 5
    1717         5490 3690 4770 3690 4770 3240 5490 3240 5490 3690
    18 4 1 0 50 -1 -1 12 0.0000 4 120 615 5130 3420 context\001
    19 4 1 0 50 -1 -1 12 0.0000 4 120 375 5130 3600 state\001
     184 1 0 50 -1 -1 12 0.0000 4 105 570 5130 3420 context\001
     194 1 0 50 -1 -1 12 0.0000 4 105 390 5130 3600 state\001
    2020-6
    21216 5850 3690 6570 4140
    22222 4 0 1 0 11 50 -1 20 4.000 0 0 7 0 0 5
    2323         6570 4140 5850 4140 5850 3690 6570 3690 6570 4140
    24 4 1 0 50 -1 -1 12 0.0000 4 90 585 6210 3960 rename\001
     244 1 0 50 -1 -1 12 0.0000 4 90 555 6210 3960 rename\001
    2525-6
    26266 8370 3690 9090 4140
    27272 4 0 1 0 11 50 -1 20 4.000 0 0 7 0 0 5
    2828         9090 4140 8370 4140 8370 3690 9090 3690 9090 4140
    29 4 1 0 50 -1 -1 12 0.0000 4 135 345 8730 3960 read\001
     294 1 0 50 -1 -1 12 0.0000 4 135 330 8730 3960 read\001
    3030-6
    31316 11250 3690 11970 4140
    32322 4 0 1 0 11 50 -1 20 4.000 0 0 7 0 0 5
    3333         11970 4140 11250 4140 11250 3690 11970 3690 11970 4140
    34 4 1 0 50 -1 -1 12 0.0000 4 135 405 11610 3960 write\001
    35 -6
    36 6 9810 3420 10530 3870
    37 2 4 0 1 0 31 50 -1 20 4.000 0 0 7 0 0 5
    38          10530 3870 9810 3870 9810 3420 10530 3420 10530 3870
    39 4 1 0 50 -1 -1 12 0.0000 4 135 660 10170 3690 memory\001
    40 -6
    41 6 9810 3960 10530 4410
    42 2 4 0 1 0 11 50 -1 20 4.000 0 0 7 0 0 5
    43          10530 4410 9810 4410 9810 3960 10530 3960 10530 4410
    44 4 1 0 50 -1 -1 12 0.0000 4 120 630 10170 4230 execute\001
     344 1 0 50 -1 -1 12 0.0000 4 135 390 11610 3960 write\001
    4535-6
    46366 9810 2475 10530 2925
    47372 4 0 1 0 11 50 -1 20 4.000 0 0 7 0 0 5
    4838         10530 2925 9810 2925 9810 2475 10530 2475 10530 2925
    49 4 1 0 50 -1 -1 12 0.0000 4 165 330 10170 2835 port\001
    50 4 1 0 50 -1 -1 12 0.0000 4 135 570 10170 2655 dcache\001
     394 1 0 50 -1 -1 12 0.0000 4 150 300 10170 2835 port\001
     404 1 0 50 -1 -1 12 0.0000 4 135 540 10170 2655 dcache\001
    5141-6
    52426 6570 3015 7290 3465
    53432 4 0 1 0 31 50 -1 20 4.000 0 0 7 0 0 5
    5444         7290 3465 6570 3465 6570 3015 7290 3015 7290 3465
    55 4 1 0 50 -1 -1 12 0.0000 4 135 615 6930 3285 commit\001
     454 1 0 50 -1 -1 12 0.0000 4 135 555 6930 3285 commit\001
    5646-6
    57476 3825 3060 4635 3510
    58482 4 0 1 0 31 50 -1 20 4.000 0 0 7 0 0 5
    5949         4590 3510 3870 3510 3870 3060 4590 3060 4590 3510
    60 4 1 0 50 -1 -1 12 0.0000 4 180 735 4230 3330 predictor\001
     504 1 0 50 -1 -1 12 0.0000 4 180 675 4230 3330 predictor\001
    6151-6
    62526 2970 3690 3690 4140
    63532 4 0 1 0 11 50 -1 20 4.000 0 0 7 0 0 5
    6454         3690 4140 2970 4140 2970 3690 3690 3690 3690 4140
    65 4 1 0 50 -1 -1 12 0.0000 4 135 405 3330 3960 fetch\001
     554 1 0 50 -1 -1 12 0.0000 4 135 390 3330 3960 fetch\001
    6656-6
    67576 1890 3690 2610 4140
    68582 4 0 1 0 11 50 -1 20 4.000 0 0 7 0 0 5
    6959         2610 4140 1890 4140 1890 3690 2610 3690 2610 4140
    70 4 1 0 50 -1 -1 12 0.0000 4 165 330 2250 4050 port\001
    71 4 1 0 50 -1 -1 12 0.0000 4 135 525 2250 3870 icache\001
     604 1 0 50 -1 -1 12 0.0000 4 150 300 2250 4050 port\001
     614 1 0 50 -1 -1 12 0.0000 4 135 495 2250 3870 icache\001
    7262-6
    73636 1800 4590 5265 5355
     
    78682 4 0 1 0 31 50 -1 20 4.000 0 0 7 0 0 5
    7969         2160 5310 1800 5310 1800 5130 2160 5130 2160 5310
    80 4 0 0 50 -1 -1 12 0.0000 4 180 600 2340 4770 Groupe\001
    81 4 0 0 50 -1 -1 12 0.0000 4 180 2430 2340 5310 Une occurence dans le groupe\001
    82 4 0 0 50 -1 -1 12 0.0000 4 180 2910 2340 5040 Plusieurs occurences dans le groupe\001
     704 0 0 50 -1 -1 12 0.0000 4 180 555 2340 4770 Groupe\001
     714 0 0 50 -1 -1 12 0.0000 4 180 2280 2340 5310 Une occurence dans le groupe\001
     724 0 0 50 -1 -1 12 0.0000 4 180 2760 2340 5040 Plusieurs occurences dans le groupe\001
    8373-6
    84742 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 1 0 4
     
    1761662 4 0 1 0 7 50 -1 20 3.000 0 0 8 0 0 5
    177167         8010 2880 8010 4320 7650 4320 7650 2880 8010 2880
    178 4 1 0 50 -1 -1 12 0.0000 4 180 600 10170 4905 register\001
     1682 4 0 1 0 11 50 -1 20 4.000 0 0 7 0 0 5
     169         10530 4410 9810 4410 9810 3960 10530 3960 10530 4410
     1702 4 0 1 0 11 50 -1 20 4.000 0 0 7 0 0 5
     171         10530 3870 9810 3870 9810 3420 10530 3420 10530 3870
     1724 1 0 50 -1 -1 12 0.0000 4 180 585 10170 4905 register\001
    1791734 1 0 50 -1 -1 12 1.5708 4 135 465 10935 3915 select\001
    1801744 1 0 50 -1 -1 12 1.5708 4 135 465 9495 3915 select\001
    181 4 0 1 50 -1 -1 12 0.0000 4 135 390 1710 2205 Core\001
    182 4 0 1 50 -1 -1 12 0.0000 4 135 810 2790 2790 Front End\001
    183 4 0 1 50 -1 -1 12 0.0000 4 180 1320 8190 3015 Execution Loop\001
    184 4 0 1 50 -1 -1 12 0.0000 4 180 1665 5760 2520 Out Of Order Engine\001
     1754 0 1 50 -1 -1 12 0.0000 4 135 360 1710 2205 Core\001
     1764 0 1 50 -1 -1 12 0.0000 4 135 750 2790 2790 Front End\001
     1774 0 1 50 -1 -1 12 0.0000 4 180 1185 8190 3015 Execution Loop\001
     1784 0 1 50 -1 -1 12 0.0000 4 180 1575 5760 2520 Out Of Order Engine\001
    1851794 1 0 50 -1 -1 12 1.5708 4 135 465 7875 3600 select\001
     1804 1 0 50 -1 -1 12 0.0000 4 105 600 10170 4230 execute\001
     1814 1 0 50 -1 -1 12 0.0000 4 135 600 10170 3690 memory\001
  • trunk/IPs/systemC/processor/Morpheo/Documentation/Source/Schema/MORPHEO_service.fig

    r23 r57  
    88-2
    991200 2
    10 5 1 0 1 0 29 50 -1 20 0.000 0 1 0 0 4575.000 2100.000 4350 2400 4575 2475 4800 2400
    11 5 1 0 1 0 2 48 -1 40 0.000 0 0 0 0 5025.000 2700.000 4800 2400 5025 2325 5250 2400
     105 1 0 1 0 29 50 -1 20 0.000 0 1 0 0 5850.000 2100.000 5625 2400 5850 2475 6075 2400
     115 1 0 1 0 2 48 -1 40 0.000 0 0 0 0 6300.000 2700.000 6075 2400 6300 2325 6525 2400
     125 1 0 1 0 2 49 -1 40 0.000 0 0 0 0 6825.000 4800.000 6600 4500 6825 4425 7050 4500
     135 1 0 1 0 2 49 -1 40 0.000 0 0 0 0 6225.000 5850.000 6000 5550 6225 5475 6450 5550
     145 1 0 1 0 29 50 -1 20 0.000 0 1 0 0 6375.000 4200.000 6150 4500 6375 4575 6600 4500
     155 1 0 1 0 29 50 -1 20 0.000 0 1 0 0 5775.000 5250.000 5550 5550 5775 5625 6000 5550
    12166 3675 4050 4725 4650
    13175 1 0 1 0 2 50 -1 20 0.000 0 1 0 0 3975.000 4200.000 3750 4500 3975 4575 4200 4500
     
    2226         4350 5550 4350 5100 5250 5100 5250 5550
    2327-6
    24 6 5475 5100 6525 5700
    25 5 1 0 1 0 2 49 -1 40 0.000 0 0 0 0 6225.000 5850.000 6000 5550 6225 5475 6450 5550
    26 5 1 0 1 0 31 50 -1 20 0.000 0 1 0 0 5775.000 5250.000 5550 5550 5775 5625 6000 5550
    27 2 1 0 1 0 31 50 -1 20 0.000 0 0 7 0 0 4
    28          5550 5550 5550 5100 6450 5100 6450 5550
     286 4950 3000 5850 3450
     292 4 0 1 0 11 50 -1 20 0.000 0 0 7 0 0 5
     30         5850 3450 5850 3000 4950 3000 4950 3450 5850 3450
     314 1 0 50 -1 -1 10 0.0000 4 105 615 5400 3225 Generator\001
    2932-6
    30 6 6075 4050 7125 4650
    31 5 1 0 1 0 2 49 -1 40 0.000 0 0 0 0 6825.000 4800.000 6600 4500 6825 4425 7050 4500
    32 5 1 0 1 0 31 50 -1 20 0.000 0 1 0 0 6375.000 4200.000 6150 4500 6375 4575 6600 4500
    33 2 1 0 1 0 31 50 -1 20 0.000 0 0 7 0 0 4
    34          6150 4500 6150 4050 7050 4050 7050 4500
     336 6600 1950 7650 2550
     345 1 0 1 0 29 50 -1 20 0.000 0 1 0 0 6900.000 2100.000 6675 2400 6900 2475 7125 2400
     355 1 0 1 0 2 48 -1 40 0.000 0 0 0 0 7350.000 2700.000 7125 2400 7350 2325 7575 2400
     362 1 0 1 0 29 50 -1 20 0.000 0 0 7 0 0 4
     37         6675 2400 6675 1950 7575 1950 7575 2400
     384 1 0 50 -1 -1 10 0.0000 4 135 240 7125 2325 .cfg\001
     394 1 0 50 -1 -1 10 0.0000 4 135 885 7125 2100 Configuration\001
    3540-6
    36 6 5550 1950 6450 2550
    37 5 1 0 1 0 29 50 -1 20 0.000 0 1 0 0 5775.000 2100.000 5550 2400 5775 2475 6000 2400
    38 5 1 0 1 0 2 48 -1 40 0.000 0 0 0 0 6225.000 2700.000 6000 2400 6225 2325 6450 2400
    39 2 1 0 1 0 29 50 -1 20 0.000 0 0 7 0 0 4
    40          5550 2400 5550 1950 6450 1950 6450 2400
    41 4 1 0 50 -1 -1 10 0.0000 4 135 240 6000 2325 .cfg\001
    42 4 1 0 50 -1 -1 10 0.0000 4 135 885 6000 2100 Configuration\001
     416 7350 3000 8250 3450
     422 4 0 1 0 11 50 -1 20 0.000 0 0 7 0 0 5
     43         8250 3450 8250 3000 7350 3000 7350 3450 8250 3450
     444 1 0 50 -1 -1 10 0.0000 4 105 465 7800 3225 Viewer\001
    4345-6
    44462 1 0 1 0 26 50 -1 -1 0.000 0 0 -1 1 0 2
     
    5759        3 0 1.00 60.00 120.00
    5860         5400 4500 4800 5100
    59 2 1 0 1 0 26 50 -1 -1 0.000 0 0 -1 1 0 2
    60         3 0 1.00 60.00 120.00
    61          4800 2400 5100 3000
    62 2 1 0 1 0 26 50 -1 -1 0.000 0 0 -1 1 0 2
    63         3 0 1.00 60.00 120.00
    64          6000 2400 5700 3000
    65 2 4 0 1 0 11 50 -1 20 0.000 0 0 7 0 0 5
    66          7950 3450 7950 3000 7050 3000 7050 3450 7950 3450
    67 2 4 0 1 0 11 50 -1 20 0.000 0 0 7 0 0 5
    68          5850 3450 5850 3000 4950 3000 4950 3450 5850 3450
    69612 1 0 1 0 26 50 -1 -1 0.000 0 0 -1 0 1 2
    7062        3 0 1.00 60.00 120.00
    7163         7500 3450 6600 4050
    72 2 1 0 1 0 29 50 -1 -1 0.000 0 0 -1 1 0 4
    73         3 0 1.00 60.00 120.00
    74          4800 1950 4800 1350 7650 1350 7650 3000
    75 2 1 0 1 0 29 50 -1 -1 0.000 0 0 7 0 1 4
    76         3 0 1.00 60.00 120.00
    77          7200 3000 7200 1650 6075 1650 6075 1950
    78 2 1 0 1 0 29 50 -1 -1 0.000 0 0 7 1 0 4
    79         3 0 1.00 60.00 120.00
    80          7350 3000 7350 1500 5925 1500 5925 1950
    81642 4 0 1 0 4 50 -1 20 0.000 0 0 7 0 0 5
    8265         5850 4050 4950 4050 4950 4500 5850 4500 5850 4050
     662 1 0 1 0 11 50 -1 -1 3.000 0 0 -1 1 1 4
     67        3 0 1.00 60.00 120.00
     68        3 0 1.00 60.00 120.00
     69         5550 3000 5550 2850 7650 2850 7650 3000
     702 1 0 1 0 11 50 -1 -1 3.000 0 0 -1 1 1 4
     71        3 0 1.00 60.00 120.00
     72        3 0 1.00 60.00 120.00
     73         5250 3000 5250 2775 7950 2775 7950 3000
     742 1 0 1 0 11 50 -1 -1 3.000 0 0 -1 0 0 2
     75         6075 2400 6075 2850
     762 1 0 1 0 11 50 -1 -1 3.000 0 0 -1 0 0 2
     77         7125 2400 7125 2775
     782 1 0 1 0 11 50 -1 -1 3.000 0 0 -1 1 0 4
     79        3 0 1.00 60.00 120.00
     80         8100 3000 8100 1650 7125 1650 7125 1950
     812 4 2 1 0 6 51 -1 20 3.000 0 0 7 0 0 5
     82         8550 2700 4650 2700 4650 3750 8550 3750 8550 2700
    83832 1 0 1 0 29 50 -1 20 0.000 0 0 7 0 0 4
    84          4350 2400 4350 1950 5250 1950 5250 2400
    85 4 1 0 50 -1 -1 10 0.0000 4 135 570 5400 3225 Morpheo\001
     84         5625 2400 5625 1950 6525 1950 6525 2400
     852 1 0 1 0 29 50 -1 20 0.000 0 0 7 0 0 4
     86         5550 5550 5550 5100 6450 5100 6450 5550
     872 1 0 1 0 29 50 -1 20 0.000 0 0 7 0 0 4
     88         6150 4500 6150 4050 7050 4050 7050 4500
    86894 1 0 50 -1 -1 10 0.0000 4 105 435 4200 4275 VHDL\001
    87904 1 0 50 -1 -1 10 0.0000 4 105 435 4800 5475 VHDL\001
     
    90934 1 0 50 -1 -1 10 0.0000 4 105 585 6600 4200 Positions\001
    91944 1 0 50 -1 -1 10 0.0000 4 105 255 6600 4425 .pos\001
    92 4 1 0 50 -1 -1 10 0.0000 4 105 465 7500 3225 Viewer\001
    93954 1 0 50 -1 -1 10 0.0000 4 135 555 5400 4275 SystemC\001
    94 4 1 0 50 -1 -1 10 0.0000 4 105 255 4800 2325 .gen\001
    95 4 1 0 50 -1 -1 10 0.0000 4 105 615 4800 2100 Generator\001
     964 1 0 50 -1 2 12 0.0000 0 180 735 6600 3300 Morpheo\001
     974 1 0 50 -1 -1 10 0.0000 4 105 255 6075 2325 .gen\001
     984 1 0 50 -1 -1 10 0.0000 4 105 420 6075 2100 Limits\001
  • trunk/IPs/systemC/processor/Morpheo/Script/range.sh

    r2 r57  
    1919    declare step=$3;
    2020
    21     while test $a -le $b; do
     21    while test $a -lt $b; do
    2222        echo $a;
    2323        a=$(($a $step));
    24     done   
     24    done
     25
     26    if test $a -eq $b; then
     27        echo $a;
     28    fi;
    2529}
    2630
     
    3337    declare iter=$4;
    3438
    35     while test $a -le $b -a $iter -gt 1; do
     39    while test $a -lt $b -a $iter -gt 1; do
    3640        a=$(($a $step));
    3741        iter=$(($iter-1));
    3842    done;
     43
     44    if test $a -eq $b; then
     45        echo $a;
     46    fi;
    3947
    4048    if test $iter -eq 1; then
Note: See TracChangeset for help on using the changeset viewer.