Ignore:
Timestamp:
Feb 27, 2009, 7:37:40 PM (15 years ago)
Author:
rosiere
Message:

1) Decod_queue : multi implementation (one_fifo, multi_fifo)
2) Issue_queue : multi implementation (in_order, out_of_order)
3) Direction : Add Meta predictor
4) Context_State : re add Branch_complete, More priority to Load miss (is not speculative)
5) Return_Address_Stack : update reg_PREDICT pointer on decod miss prediction
6) UPT : Fix bug in multi event
7) Prediction_glue : in read_stack case, insert in UPT pc_next
8) Rename select : when rob have an event (need flush), read_r{a,b,c} and write_r{d,e} is set at 0

Location:
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine
Files:
7 added
26 edited

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/include/Commit_unit.h

    r110 r111  
    3131
    3232#include <iostream>
     33#include <fstream>
    3334
    3435namespace morpheo {
     
    275276#endif
    276277
     278#if defined(DEBUG) and defined(DEBUG_Commit_unit) and (DEBUG_Commit_unit == true)
     279  private   : std::ofstream                 * instruction_log_file;
     280#endif
     281
    277282    // -----[ Methods ]---------------------------------------------------
    278283
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/include/Types.h

    r108 r111  
    9696#endif
    9797  public  : Taddress_t         address_next            ;
     98#ifdef DEBUG
     99  public  : double             cycle_rob_in            ;
     100  public  : double             cycle_commit            ;
     101#endif   
    98102
    99 //   public  : entry_t (uint32_t           ptr                     ,
    100 //                   Tcontext_t         front_end_id            ,
    101 //                   Tcontext_t         context_id              ,
    102 //                   Tcontext_t         rename_unit_id          ,
    103 //                   Tdepth_t           depth                   ,
    104 //                   Ttype_t            type                    ,
    105 //                   Toperation_t       operation               ,
    106 //                   Tcontrol_t         is_delay_slot           ,
    107 //                   Tgeneral_data_t    address                 ,
    108 //                   Texception_t       exception               ,
    109 //                   Texception_t       exception_use           ,
    110 //                   Tlsq_ptr_t         store_queue_ptr_write   ,
    111 //                   Tlsq_ptr_t         load_queue_ptr_write    ,
    112 //                   Tcontrol_t         read_ra                 ,
    113 //                   Tgeneral_address_t num_reg_ra_log          ,
    114 //                   Tgeneral_address_t num_reg_ra_phy          ,
    115 //                   Tcontrol_t         read_rb                 ,
    116 //                   Tgeneral_address_t num_reg_rb_log          ,
    117 //                   Tgeneral_address_t num_reg_rb_phy          ,
    118 //                   Tcontrol_t         read_rc                 ,
    119 //                   Tspecial_address_t num_reg_rc_log          ,
    120 //                   Tspecial_address_t num_reg_rc_phy          ,
    121 //                   Tcontrol_t         write_rd                ,
    122 //                   Tgeneral_address_t num_reg_rd_log          ,
    123 //                   Tgeneral_address_t num_reg_rd_phy_old      ,
    124 //                   Tgeneral_address_t num_reg_rd_phy_new      ,
    125 //                   Tcontrol_t         write_re                ,
    126 //                   Tspecial_address_t num_reg_re_log          ,
    127 //                   Tspecial_address_t num_reg_re_phy_old      ,
    128 //                   Tspecial_address_t num_reg_re_phy_new      )
    129 //     {
    130 //       this->ptr                     = ptr                   ;
    131 //       this->front_end_id            = front_end_id          ;
    132 //       this->context_id              = context_id            ;
    133 //       this->rename_unit_id          = rename_unit_id        ;
    134 //       this->depth                   = depth                 ;
    135 //       this->type                    = type                  ;
    136 //       this->operation               = operation             ;
    137 //       this->is_delay_slot           = is_delay_slot         ;
    138 //       this->address                 = address               ;
    139 //       this->exception               = exception             ;
    140 //       this->exception_use           = exception_use         ;
    141 //       this->store_queue_ptr_write   = store_queue_ptr_write ;
    142 //       this->load_queue_ptr_write    = load_queue_ptr_write  ;
    143 //       this->read_ra                 = read_ra               ;
    144 //       this->num_reg_ra_log          = num_reg_ra_log        ;
    145 //       this->num_reg_ra_phy          = num_reg_ra_phy        ;
    146 //       this->read_rb                 = read_rb               ;
    147 //       this->num_reg_rb_log          = num_reg_rb_log        ;
    148 //       this->num_reg_rb_phy          = num_reg_rb_phy        ;
    149 //       this->read_rc                 = read_rc               ;
    150 //       this->num_reg_rc_log          = num_reg_rc_log        ;
    151 //       this->num_reg_rc_phy          = num_reg_rc_phy        ;
    152 //       this->write_rd                = write_rd              ;
    153 //       this->num_reg_rd_log          = num_reg_rd_log        ;
    154 //       this->num_reg_rd_phy_old      = num_reg_rd_phy_old    ;
    155 //       this->num_reg_rd_phy_new      = num_reg_rd_phy_new    ;
    156 //       this->write_re                = write_re              ;
    157 //       this->num_reg_re_log          = num_reg_re_log        ;
    158 //       this->num_reg_re_phy_old      = num_reg_re_phy_old    ;
    159 //       this->num_reg_re_phy_new      = num_reg_re_phy_new    ;
    160 //     }
    161103  };
    162104
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_allocation.cpp

    r109 r111  
    310310#endif
    311311
     312#if defined(DEBUG) and defined(DEBUG_Commit_unit) and (DEBUG_Commit_unit == true)
     313    instruction_log_file = new std::ofstream [_param->_nb_thread];
     314    for (uint32_t i=0; i<_param->_nb_thread; ++i)
     315      if (_param->_have_thread [i])
     316        {
     317          std::string filename = "Instruction_flow-thread_" + toString(i) + ".log";
     318         
     319          instruction_log_file [i] .open(filename.c_str() ,std::ios::out | std::ios::trunc);
     320        }
     321#endif
     322
    312323    log_end(Commit_unit,FUNCTION);
    313324  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_deallocation.cpp

    r109 r111  
    207207    delete _component;
    208208
     209#if defined(DEBUG) and defined(DEBUG_Commit_unit) and (DEBUG_Commit_unit == true)
     210    for (uint32_t i=0; i<_param->_nb_thread; ++i)
     211      if (_param->_have_thread [i])
     212        {
     213          instruction_log_file [i].close();
     214        }
     215#endif
     216
    209217    log_end(Commit_unit,FUNCTION);
    210218  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_statistics_allocation.cpp

    r110 r111  
    5959      std::string sum_nb_inst_retire_ok = "0";
    6060      std::string sum_nb_inst_retire_ko = "0";
    61 
     61      std::string sum_average;
    6262      for (uint32_t i=0; i<_param->_nb_thread; i++)
    6363        if (_param->_have_thread [i])
     
    6868            sum_nb_inst_retire_ok = "+ nb_inst_retire_ok_"+toString(i) + " " +sum_nb_inst_retire_ok;
    6969            sum_nb_inst_retire_ko = "+ nb_inst_retire_ko_"+toString(i) + " " +sum_nb_inst_retire_ko;
     70            sum_average           = "+ average_inst_retire_ok_"+toString(i)+" average_inst_retire_ko_"+toString(i);
     71                       
     72            _stat->create_expr_average_by_cycle("average_inst_retire_ok_"+toString(i),"nb_inst_retire_ok_"+toString(i), "", toString(_("Average instruction retire ok by cycle (thread %d)"),i));
     73            _stat->create_expr_average_by_cycle("average_inst_retire_ko_"+toString(i),"nb_inst_retire_ko_"+toString(i), "", toString(_("Average instruction retire ko (event, miss) by cycle (thread %d)"),i));
    7074           
    71             _stat->create_expr_average_by_cycle("average_inst_retire_ok_"+toString(i), sum_nb_inst_retire_ok, "", toString(_("Average instruction retire ok by cycle (IPC) (thread %d)"),i));
    72             _stat->create_expr_average_by_cycle("average_inst_retire_ko_"+toString(i), sum_nb_inst_retire_ko, "", toString(_("Average instruction retire ko (event, miss) by cycle (thread %d)"),i));
    73            
     75            _stat->create_expr_percent         ("percent_inst_retire_ok_"+toString(i),"average_inst_retire_ok_"+toString(i), sum_average, toString(_("Percent instruction retire ok by cycle (thread %d)"),i));
     76            _stat->create_expr_percent         ("percent_inst_retire_ko_"+toString(i),"average_inst_retire_ko_"+toString(i), sum_average, toString(_("Percent instruction retire ko by cycle (thread %d)"),i));
     77
    7478            _stat->create_expr                 ("IPC_ok_"+toString(i) , "average_inst_retire_ok_"+toString(i), TYPE_COUNTER, "inst/cycle", toString("Instruction Per Cycle (Instruction Ok) (thread %d)",i));
    7579            _stat->create_expr                 ("CPI_ok_"+toString(i) , "/ 1 IPC_ok_"+toString(i)            , TYPE_COUNTER, "cycle/inst", toString("Cycle Per Instruction (Instruction Ok) (thread %d)",i));
     
    8286          }
    8387
     88      _stat->create_expr_average_by_cycle("average_inst_retire_ok", sum_nb_inst_retire_ok, "", _("Average instruction retire ok by cycle (all thread)"));
     89      _stat->create_expr_average_by_cycle("average_inst_retire_ko", sum_nb_inst_retire_ko, "", _("Average instruction retire ko (event, miss) by cycle (all thread)"));
     90     
     91      sum_average = "+ average_inst_retire_ok average_inst_retire_ko";
     92
     93      _stat->create_expr_percent         ("percent_inst_retire_ok","average_inst_retire_ok", sum_average, _("Percent instruction retire ok by cycle (all thread)"));
     94      _stat->create_expr_percent         ("percent_inst_retire_ko","average_inst_retire_ko", sum_average, _("Percent instruction retire ko by cycle (all thread)"));
     95           
    8496      _stat->create_expr                 ("IPC_ok" , "/ "+sum_nb_inst_retire_ok+" cycle", TYPE_COUNTER, "inst/cycle", "Instruction Per Cycle (Instruction Ok)");
    8597      _stat->create_expr                 ("CPI_ok" , "/ 1 IPC_ok"            , TYPE_COUNTER, "cycle/inst", "Cycle Per Instruction (Instruction Ok)");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_transition.cpp

    r110 r111  
    172172#endif
    173173                  entry->address_next            = PORT_READ(in_INSERT_ADDRESS_NEXT          [x][y]);
     174#ifdef DEBUG
     175                  entry->cycle_rob_in            = sc_simulation_time();
     176                  entry->cycle_commit            = sc_simulation_time();
     177#endif
    174178
    175179                  // Test if exception :
     
    340344                        (entry->read_rb))
    341345                    entry->address_next = PORT_READ(in_COMMIT_ADDRESS     [x]);
     346
     347#ifdef DEBUG
     348                  entry->cycle_commit            = sc_simulation_time();
     349#endif
    342350                  }
    343351              }
     
    406414                  }
    407415               
     416#if defined(DEBUG) and defined(DEBUG_Commit_unit) and (DEBUG_Commit_unit == true)
     417                // log file
     418                instruction_log_file [num_thread]
     419                  << "[" << sc_simulation_time() << "] "
     420                  << "{" << ((retire_ok)?" OK ":"!KO!") << "} "
     421                  << std::hex
     422                  << "0x" << entry->address << " (0x" << (entry->address<<2) << ") "
     423                  << std::dec
     424                  << "[" << entry->cycle_rob_in << ", " << entry->cycle_commit << "] "
     425                  << std::endl;
     426#endif
     427
    408428                // Update nb_inst
    409429                reg_NB_INST_COMMIT_ALL [front_end_id][context_id] --;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/SelfTest/config_min.cfg

    r88 r111  
    441       1       *2      # nb_rename_unit         
    551       1       *2      # size_queue             
     60       1       +1      # queue_scheme
    671       1       *2      # nb_bank                 
    780       0       *2      # size_packet             
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/SelfTest/config_mono_rename_unit.cfg

    r88 r111  
    441       1       *2      # nb_rename_unit         
    5516      32      *2      # size_queue             
     60       1       +1      # queue_scheme
    674       16      *2      # nb_bank                 
    780       0       *2      # size_packet             
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/SelfTest/config_multi_rename_unit.cfg

    r88 r111  
    444       4       *2      # nb_rename_unit         
    5564      64      *2      # size_queue             
     60       1       +1      # queue_scheme
    674       16      *2      # nb_bank                 
    780       0       *2      # size_packet             
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/SelfTest/src/main.cpp

    r88 r111  
    88#include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/SelfTest/include/test.h"
    99
    10 #define NB_PARAMS 17
     10#define NB_PARAMS 18
    1111
    1212void usage (int argc, char * argv[])
     
    1414  err (_("<Usage> %s name_instance list_params.\n"),argv[0]);
    1515  err (_("list_params is :\n"));
    16   err (_(" * nb_context                                            (uint32_t         )\n"));
    17   err (_(" * nb_front_end                                          (uint32_t         )\n"));
    18   err (_(" * nb_rename_unit                                        (uint32_t         )\n"));
    19   err (_(" * size_queue                                            (uint32_t         )\n"));
    20   err (_(" * nb_bank                                               (uint32_t         )\n"));
    21   err (_(" * size_packet                                           (uint32_t         )\n"));
    22   err (_(" * size_general_data                                     (uint32_t         )\n"));
    23   err (_(" * size_special_data                                     (uint32_t         )\n"));
    24   err (_(" * size_general_register                                 (uint32_t         )\n"));
    25   err (_(" * size_special_register                                 (uint32_t         )\n"));
    26   err (_(" * size_store_queue_ptr                                  (uint32_t         )\n"));
    27   err (_(" * size_load_queue_ptr                                   (uint32_t         )\n"));
    28   err (_(" * nb_inst_issue                                         (uint32_t         )\n"));
    29   err (_(" * nb_inst_rename        [nb_rename_unit]                (uint32_t         )\n"));
    30   err (_(" * nb_inst_reexecute                                     (uint32_t         )\n"));
    31   err (_(" * nb_rename_unit_select                                 (uint32_t         )\n"));
    32   err (_(" * priority                                              (Tpriority_t      )\n"));
    33   err (_(" * load_balancing                                        (Tload_balancing_t)\n"));
    34   err (_(" * table_routing         [nb_rename_unit][nb_inst_issue] (bool             )\n"));
    35   err (_(" * table_routing         [nb_inst_issue][nb_type]        (bool             )\n"));
     16  err (_(" * nb_context                                            (uint32_t             )\n"));
     17  err (_(" * nb_front_end                                          (uint32_t             )\n"));
     18  err (_(" * nb_rename_unit                                        (uint32_t             )\n"));
     19  err (_(" * size_queue                                            (uint32_t             )\n"));
     20  err (_(" * queue_scheme                                          (Tissue_queue_scheme_t)\n"));
     21  err (_(" * nb_bank                                               (uint32_t             )\n"));
     22  err (_(" * size_packet                                           (uint32_t             )\n"));
     23  err (_(" * size_general_data                                     (uint32_t             )\n"));
     24  err (_(" * size_special_data                                     (uint32_t             )\n"));
     25  err (_(" * size_general_register                                 (uint32_t             )\n"));
     26  err (_(" * size_special_register                                 (uint32_t             )\n"));
     27  err (_(" * size_store_queue_ptr                                  (uint32_t             )\n"));
     28  err (_(" * size_load_queue_ptr                                   (uint32_t             )\n"));
     29  err (_(" * nb_inst_issue                                         (uint32_t             )\n"));
     30  err (_(" * nb_inst_rename        [nb_rename_unit]                (uint32_t             )\n"));
     31  err (_(" * nb_inst_reexecute                                     (uint32_t             )\n"));
     32  err (_(" * nb_rename_unit_select                                 (uint32_t             )\n"));
     33  err (_(" * priority                                              (Tpriority_t          )\n"));
     34  err (_(" * load_balancing                                        (Tload_balancing_t    )\n"));
     35  err (_(" * table_routing         [nb_rename_unit][nb_inst_issue] (bool                 )\n"));
     36  err (_(" * table_routing         [nb_inst_issue][nb_type]        (bool                 )\n"));
    3637  err (_("   * TYPE_ALU    \n"));
    3738  err (_("   * TYPE_SHIFT  \n"));
     
    7172
    7273  uint32_t          _size_queue             = fromString<uint32_t         >(argv[x++]);
     74  Tissue_queue_scheme_t _queue_scheme       = fromString<Tissue_queue_scheme_t>(argv[x++]);
    7375  uint32_t          _nb_bank                = fromString<uint32_t         >(argv[x++]);
    7476  uint32_t          _size_packet            = fromString<uint32_t         >(argv[x++]);
     
    126128         _nb_rename_unit        ,
    127129         _size_queue            ,
     130         _queue_scheme          ,
    128131         _nb_bank               ,
    129132         _size_packet           ,
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/include/Issue_queue.h

    r110 r111  
    139139    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
    140140  private   : generic::priority::Priority   * _priority_in ;
     141
     142    // in_order implementation only
     143    // out_of_order implementation only
     144  private   : generic::priority::Priority   * _priority_reg;
    141145  private   : generic::priority::Priority   * _priority_out;
    142   private   : generic::priority::Priority   * _priority_reg;
    143146
    144147    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
     148    // common implementation
    145149  private   : std::list<entry_t*>           * _issue_queue;
    146150  private   : std::list<entry_t*>             _reexecute_queue;
     151
     152    // in_order implementation only
     153  private   : uint32_t                        reg_NUM_BANK_HEAD;
     154  private   : uint32_t                        reg_NUM_BANK_TAIL;
     155    // out_of_order implementation only
    147156 
    148157    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    149   private   : Tcontrol_t                    * internal_BANK_IN_ACK              ;//[nb_bank]
    150   private   : uint32_t                      * internal_BANK_IN_NUM_RENAME_UNIT  ;//[nb_bank]
    151   private   : uint32_t                      * internal_BANK_IN_NUM_INST         ;//[nb_bank]
    152 
     158    // common implementation
    153159  private   : Tcontrol_t                    * internal_ISSUE_OUT_VAL            ;//[nb_inst_issue]
    154160  private   : Tcontrol_t                    * internal_ISSUE_OUT_FROM_REEXECUTE ;//[nb_inst_issue]
     
    157163
    158164  private   : Tcontrol_t                    * internal_REEXECUTE_ACK            ;//[nb_inst_reexecute]
     165
     166    // in_order implementation only
     167  private   : Tcontrol_t                    * internal_BANK_IN_ACK              ;//[nb_bank]
     168  private   : uint32_t                      * internal_BANK_IN_NUM_RENAME_UNIT  ;//[nb_bank]
     169  private   : uint32_t                      * internal_BANK_IN_NUM_INST         ;//[nb_bank]
     170    // out_of_order implementation only
     171  public    : Tcontrol_t                   ** internal_ISSUE_IN_ACK             ;//[nb_rename_unit][nb_inst_rename]
     172
     173    // function pointer
     174  public    : void (morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::Issue_queue::*function_transition) (void);
     175  public    : void (morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::Issue_queue::*function_genMoore  ) (void);
     176  public    : void (morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::Issue_queue::*function_genMealy_issue_in ) (void);
     177  public    : void (morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::Issue_queue::*function_genMealy_issue_out) (void);
    159178#endif
    160179
     
    189208                                               
    190209#ifdef SYSTEMC                                 
    191   public  : void        transition                (void);
    192   public  : void        genMoore                  (void);
     210  public  : void        transition                          (void);
     211  public  : void        genMoore                            (void);
     212  public  : void        genMealy_issue_in                   (void);
     213  public  : void        genMealy_issue_out                  (void);
     214
     215  public  : void        function_in_order_transition        (void);
     216  public  : void        function_in_order_genMealy_issue_out(void);
     217  public  : void        function_in_order_genMoore          (void);
     218
     219  public  : void        function_out_of_order_transition    (void);
     220  public  : void        function_out_of_order_genMoore      (void);
    193221#endif                                         
    194222
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/include/Parameters.h

    r110 r111  
    2525  {
    2626    //-----[ fields ]------------------------------------------------------------
    27   public : uint32_t          _nb_context              ;
    28   public : uint32_t          _nb_front_end            ;
    29   public : uint32_t          _nb_rename_unit          ;
    30   public : uint32_t          _size_queue              ;
    31   public : uint32_t          _nb_bank                 ;
    32 //public : uint32_t          _size_packet             ;
    33 //public : uint32_t          _size_general_data       ;
    34 //public : uint32_t          _size_special_data       ;
    35 //public : uint32_t          _size_general_register   ;
    36 //public : uint32_t          _size_special_register   ;
    37 //public : uint32_t          _size_store_queue_ptr    ;
    38 //public : uint32_t          _size_load_queue_ptr     ;
    39   public : uint32_t          _nb_inst_issue           ;
    40   public : uint32_t        * _nb_inst_rename          ;//[nb_rename_unit]
    41   public : uint32_t          _nb_inst_reexecute       ;
    42   public : uint32_t          _nb_rename_unit_select   ;
    43   public : Tpriority_t       _priority                ;
    44   public : Tload_balancing_t _load_balancing          ;
    45   public : bool           ** _table_routing           ;//[nb_rename_unit][nb_inst_issue]
    46   public : bool           ** _table_issue_type        ;//[nb_inst_issue][nb_type]
    47   public : uint32_t          _size_reexecute_queue    ;
    48 
    49 //public : uint32_t          _nb_bank_select_out      ;
    50   public : uint32_t          _max_nb_inst_rename      ;
    51 
    52 //public : uint32_t          _size_context_id         ;
    53 //public : uint32_t          _size_front_end_id       ;
    54   public : uint32_t          _size_bank               ;
    55 
    56 //public : bool              _have_port_context_id    ;
    57 //public : bool              _have_port_front_end_id  ;
    58 //public : bool              _have_port_packet_id     ;
    59 //public : bool              _have_port_load_queue_ptr;
     27  public : uint32_t              _nb_context              ;
     28  public : uint32_t              _nb_front_end            ;
     29  public : uint32_t              _nb_rename_unit          ;
     30  public : uint32_t              _size_queue              ;
     31  public : Tissue_queue_scheme_t _queue_scheme            ;
     32  public : uint32_t              _nb_bank                 ;
     33//public : uint32_t              _size_packet             ;
     34//public : uint32_t              _size_general_data       ;
     35//public : uint32_t              _size_special_data       ;
     36//public : uint32_t              _size_general_register   ;
     37//public : uint32_t              _size_special_register   ;
     38//public : uint32_t              _size_store_queue_ptr    ;
     39//public : uint32_t              _size_load_queue_ptr     ;
     40  public : uint32_t              _nb_inst_issue           ;
     41  public : uint32_t            * _nb_inst_rename          ;//[nb_rename_unit]
     42  public : uint32_t              _nb_inst_reexecute       ;
     43  public : uint32_t              _nb_rename_unit_select   ;
     44  public : Tpriority_t           _priority                ;
     45  public : Tload_balancing_t     _load_balancing          ;
     46  public : bool               ** _table_routing           ;//[nb_rename_unit][nb_inst_issue]
     47  public : bool               ** _table_issue_type        ;//[nb_inst_issue][nb_type]
     48  public : uint32_t              _size_reexecute_queue    ;
     49                             
     50//public : uint32_t              _nb_bank_select_out      ;
     51  public : uint32_t              _max_nb_inst_rename      ;
     52                             
     53//public : uint32_t              _size_context_id         ;
     54//public : uint32_t              _size_front_end_id       ;
     55  public : uint32_t              _size_bank               ;
     56                             
     57//public : bool                  _have_port_context_id    ;
     58//public : bool                  _have_port_front_end_id  ;
     59//public : bool                  _have_port_packet_id     ;
     60//public : bool                  _have_port_load_queue_ptr;
    6061
    6162    //-----[ methods ]-----------------------------------------------------------
    62   public : Parameters  (uint32_t          nb_context              ,
    63                         uint32_t          nb_front_end            ,
    64                         uint32_t          nb_rename_unit          ,
    65                         uint32_t          size_queue              ,
    66                         uint32_t          nb_bank                 ,
    67                         uint32_t          size_packet             ,
    68                         uint32_t          size_general_data       ,
    69                         uint32_t          size_special_data       ,
    70                         uint32_t          size_general_register   ,
    71                         uint32_t          size_special_register   ,
    72                         uint32_t          size_store_queue_ptr    ,
    73                         uint32_t          size_load_queue_ptr     ,
    74                         uint32_t          nb_inst_issue           ,
    75                         uint32_t        * nb_inst_rename          ,
    76                         uint32_t          nb_inst_reexecute       ,
    77                         uint32_t          nb_rename_unit_select   ,
    78                         Tpriority_t       priority                ,
    79                         Tload_balancing_t load_balancing          ,
    80                         bool           ** table_routing           ,
    81                         bool           ** table_issue_type        ,
    82                         bool              is_toplevel=false);
     63  public : Parameters  (uint32_t              nb_context              ,
     64                        uint32_t              nb_front_end            ,
     65                        uint32_t              nb_rename_unit          ,
     66                        uint32_t              size_queue              ,
     67                        Tissue_queue_scheme_t queue_scheme            ,
     68                        uint32_t              nb_bank                 ,
     69                        uint32_t              size_packet             ,
     70                        uint32_t              size_general_data       ,
     71                        uint32_t              size_special_data       ,
     72                        uint32_t              size_general_register   ,
     73                        uint32_t              size_special_register   ,
     74                        uint32_t              size_store_queue_ptr    ,
     75                        uint32_t              size_load_queue_ptr     ,
     76                        uint32_t              nb_inst_issue           ,
     77                        uint32_t            * nb_inst_rename          ,
     78                        uint32_t              nb_inst_reexecute       ,
     79                        uint32_t              nb_rename_unit_select   ,
     80                        Tpriority_t           priority                ,
     81                        Tload_balancing_t     load_balancing          ,
     82                        bool               ** table_routing           ,
     83                        bool               ** table_issue_type        ,
     84                        bool                  is_toplevel=false);
    8385
    8486//   public : Parameters  (Parameters & param) ;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/include/Types.h

    r88 r111  
    1717namespace ooo_engine {
    1818namespace issue_queue {
     19
     20  typedef enum
     21    {
     22       ISSUE_QUEUE_SCHEME_IN_ORDER        // Each instruction is issue in of order
     23//       ,ISSUE_QUEUE_SCHEME_IN_BUNDLE_ORDER // Each bundle is issue in order. In bundle, an instruction is issue out of order
     24      ,ISSUE_QUEUE_SCHEME_OUT_OF_ORDER    // Each instruction is issue out of order
     25    } Tissue_queue_scheme_t;
    1926
    2027  class entry_t
     
    8794}; // end namespace core
    8895}; // end namespace behavioural
     96
     97  template<> inline std::string toString<morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::Tissue_queue_scheme_t>(const morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::Tissue_queue_scheme_t& x)
     98  {
     99    switch (x)
     100      {
     101      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::ISSUE_QUEUE_SCHEME_IN_ORDER        : return "in_order"       ; break;
     102//       case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::ISSUE_QUEUE_SCHEME_IN_BUNDLE_ORDER : return "in_bundle_order"; break;
     103      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::ISSUE_QUEUE_SCHEME_OUT_OF_ORDER    : return "out_of_order"   ; break;
     104      default : return ""; break;
     105      }
     106  };
     107
     108  template<> inline morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::Tissue_queue_scheme_t fromString<morpheo::behavioural::core::multi_ooo_engine
     109::ooo_engine::issue_queue::Tissue_queue_scheme_t>(const std::string& x)
     110  {
     111    if ( (x.compare(toString(static_cast<uint32_t>(morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::ISSUE_QUEUE_SCHEME_IN_ORDER))) == 0) or
     112         (x.compare("in_order")        == 0))
     113      return morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::ISSUE_QUEUE_SCHEME_IN_ORDER;
     114//     if ( (x.compare(toString(static_cast<uint32_t>(morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::ISSUE_QUEUE_SCHEME_IN_BUNDLE_ORDER))) == 0) or
     115//          (x.compare("in_bundle_order") == 0))
     116//       return morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::ISSUE_QUEUE_SCHEME_IN_BUNDLE_ORDER;
     117    if ( (x.compare(toString(static_cast<uint32_t>(morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::ISSUE_QUEUE_SCHEME_OUT_OF_ORDER))) == 0) or
     118         (x.compare("out_of_order")    == 0))
     119      return morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::ISSUE_QUEUE_SCHEME_OUT_OF_ORDER;
     120   
     121    throw (ErrorMorpheo ("<fromString> : Unknow string : \""+x+"\""));
     122  };
     123
    89124}; // end namespace morpheo             
    90125
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/src/Issue_queue.cpp

    r110 r111  
    7575    if (usage_is_set(_usage,USE_SYSTEMC))
    7676      {
    77         log_printf(INFO,Issue_queue,FUNCTION,_("<%s> : Method - transition"),_name.c_str());
     77        // Function pointer
     78        switch (_param->_queue_scheme)
     79          {
     80          case ISSUE_QUEUE_SCHEME_IN_ORDER        :
     81            {
     82              function_transition         = &morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::Issue_queue::function_in_order_transition        ;
     83              function_genMoore           = &morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::Issue_queue::function_in_order_genMoore          ;
     84              function_genMealy_issue_in  = NULL;
     85              function_genMealy_issue_out = &morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::Issue_queue::function_in_order_genMealy_issue_out;
     86             
     87              break;
     88            }
     89          case ISSUE_QUEUE_SCHEME_OUT_OF_ORDER    :
     90            {
     91              function_transition         = &morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::Issue_queue::function_out_of_order_transition        ;
     92              function_genMoore           = &morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::Issue_queue::function_out_of_order_genMoore          ;
     93              function_genMealy_issue_in  = NULL;
     94              function_genMealy_issue_out = NULL;
     95             
     96              break;
     97            }
     98          default :
     99            {
     100              break;
     101            }
     102          }
    78103
    79         SC_METHOD (transition);
    80         dont_initialize ();
    81         sensitive << (*(in_CLOCK)).pos();
    82        
     104        if (function_transition != NULL)
     105          {
     106            log_printf(INFO,Issue_queue,FUNCTION,_("<%s> : Method - transition"),_name.c_str());
     107           
     108            SC_METHOD (transition);
     109            dont_initialize ();
     110            sensitive << (*(in_CLOCK)).pos();
     111           
    83112# ifdef SYSTEMCASS_SPECIFIC
    84         // List dependency information
     113            // List dependency information
    85114# endif   
     115          }
    86116
    87         log_printf(INFO,Issue_queue,FUNCTION,_("<%s> : Method - genMoore"),_name.c_str());
     117        if (function_genMoore != NULL)
     118          {
     119            log_printf(INFO,Issue_queue,FUNCTION,_("<%s> : Method - genMoore"),_name.c_str());
     120           
     121            SC_METHOD (genMoore);
     122            dont_initialize ();
     123            sensitive << (*(in_CLOCK)).neg(); // need internal register
     124           
     125# ifdef SYSTEMCASS_SPECIFIC
     126            // List dependency information
     127# endif   
     128          }
    88129
    89         SC_METHOD (genMoore);
    90         dont_initialize ();
    91         sensitive << (*(in_CLOCK)).neg(); // need internal register
    92        
     130        if (function_genMealy_issue_in != NULL)
     131          {
     132            log_printf(INFO,Issue_queue,FUNCTION,_("<%s> : Method - genMealy_issue_in"),_name.c_str());
     133           
     134            SC_METHOD (genMealy_issue_in);
     135            dont_initialize ();
     136            sensitive << (*(in_CLOCK)).neg(); // need internal register
     137           
    93138# ifdef SYSTEMCASS_SPECIFIC
    94         // List dependency information
     139            // List dependency information
    95140# endif   
     141          }
     142
     143        if (function_genMealy_issue_out != NULL)
     144          {
     145            log_printf(INFO,Issue_queue,FUNCTION,_("<%s> : Method - genMealy_issue_out"),_name.c_str());
     146           
     147            SC_METHOD (genMealy_issue_out);
     148            dont_initialize ();
     149            sensitive << (*(in_CLOCK)).neg(); // need internal register
     150
     151            if (_param->_queue_scheme == ISSUE_QUEUE_SCHEME_IN_ORDER)
     152              {
     153                for (uint32_t i=0; i<_param->_nb_inst_issue; ++i)
     154                  sensitive << (*(in_ISSUE_OUT_ACK [i]));
     155              }
     156           
     157# ifdef SYSTEMCASS_SPECIFIC
     158            // List dependency information
     159# endif   
     160          }
    96161
    97162#endif
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/src/Issue_queue_allocation.cpp

    r110 r111  
    154154
    155155    ALLOC1(internal_REEXECUTE_ACK           ,Tcontrol_t,_param->_nb_inst_reexecute);
     156
     157    if (_param->_queue_scheme == ISSUE_QUEUE_SCHEME_OUT_OF_ORDER)
     158      {
     159    ALLOC1(internal_BANK_IN_ACK             ,Tcontrol_t,_param->_nb_bank);
     160    ALLOC1(internal_BANK_IN_NUM_RENAME_UNIT ,uint32_t  ,_param->_nb_bank);
     161    ALLOC1(internal_BANK_IN_NUM_INST        ,uint32_t  ,_param->_nb_bank);
     162      }
     163    if (_param->_queue_scheme == ISSUE_QUEUE_SCHEME_IN_ORDER)
     164      {
     165    ALLOC2(internal_ISSUE_IN_ACK            ,Tcontrol_t,_param->_nb_rename_unit,_param->_nb_inst_rename[it1]);
     166      }
    156167      }
    157168
    158169    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
    159 
    160170    _priority_in  = new generic::priority::Priority (_name+"_priority_in"   ,
    161171                                                     _param->_priority      ,
     
    165175                                                     _param->_nb_rename_unit_select);
    166176
     177    if (_param->_queue_scheme == ISSUE_QUEUE_SCHEME_OUT_OF_ORDER)
     178      {
    167179    _priority_out = new generic::priority::Priority (_name+"_priority_out"  ,
    168180                                                     _param->_priority      ,
     
    174186                                                     _param->_nb_bank,
    175187                                                     _param->_nb_bank);
     188      }
    176189
    177190#ifdef POSITION
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/src/Issue_queue_deallocation.cpp

    r110 r111  
    9898       
    9999        // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    100         DELETE1(internal_BANK_IN_ACK             ,_param->_nb_bank);
    101         DELETE1(internal_BANK_IN_NUM_RENAME_UNIT ,_param->_nb_bank);
    102         DELETE1(internal_BANK_IN_NUM_INST        ,_param->_nb_bank);
    103 
    104100        DELETE1(internal_ISSUE_OUT_VAL           ,_param->_nb_inst_issue);
    105101        DELETE1(internal_ISSUE_OUT_FROM_REEXECUTE,_param->_nb_inst_issue);
     
    108104
    109105        DELETE1(internal_REEXECUTE_ACK           ,_param->_nb_inst_reexecute);
     106
     107        if (_param->_queue_scheme == ISSUE_QUEUE_SCHEME_OUT_OF_ORDER)
     108          {
     109        DELETE1(internal_BANK_IN_ACK             ,_param->_nb_bank);
     110        DELETE1(internal_BANK_IN_NUM_RENAME_UNIT ,_param->_nb_bank);
     111        DELETE1(internal_BANK_IN_NUM_INST        ,_param->_nb_bank);
     112          }
     113        if (_param->_queue_scheme == ISSUE_QUEUE_SCHEME_IN_ORDER)
     114          {
     115        DELETE2(internal_ISSUE_IN_ACK            ,_param->_nb_rename_unit,_param->_nb_inst_rename[it1]);
     116          }
    110117      }
    111118   
     
    113120   
    114121    delete    _priority_in ;
    115     delete    _priority_out;
    116     delete    _priority_reg;
     122    if (_param->_queue_scheme == ISSUE_QUEUE_SCHEME_OUT_OF_ORDER)
     123      {
     124        delete    _priority_out;
     125        delete    _priority_reg;
     126      }
    117127    delete    _component;
    118128
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/src/Issue_queue_genMoore.cpp

    r110 r111  
    3939      }
    4040
    41     // ===================================================================
    42     // =====[ ISSUE_IN ]==================================================
    43     // ===================================================================
    44     {
    45       Tcontrol_t ack [_param->_nb_rename_unit][_param->_max_nb_inst_rename];
    46 
    47       // Initialisation
    48       for (uint32_t i=0; i<_param->_nb_bank; i++)
    49         internal_BANK_IN_ACK  [i] = false;
    50    
    51       for (uint32_t i=0; i<_param->_nb_rename_unit; i++)
    52         for (uint32_t j=0; j<_param->_nb_inst_rename[i]; j++)
    53           ack [i][j] = false;
    54    
    55       std::list<generic::priority::select_t> * select_reg = _priority_reg->select(); // same select for all issue
    56      
    57       // issue_in interface
    58       std::list<generic::priority::select_t> * select_in = _priority_in ->select(); // same select for all issue
    59       for (std::list<generic::priority::select_t>::iterator it=select_in ->begin();
    60            it!=select_in ->end();
    61            it++)
    62         {
    63           // Get num interface
    64           uint32_t num_rename_unit = it->grp;
    65           uint32_t num_inst_rename = it->elt;
    66 
    67           log_printf(TRACE,Issue_queue,FUNCTION,"  * ISSUE_IN [%d][%d]",num_rename_unit,num_inst_rename);
    68          
    69           // scan all bank
    70           for (std::list<generic::priority::select_t>::iterator it=select_reg->begin();
    71                it!=select_reg->end();
    72                it++)
    73             {
    74               uint32_t num_bank  = it->grp;
    75 
    76               log_printf(TRACE,Issue_queue,FUNCTION,"    * BANK [%d]",num_bank);
    77          
    78               // test if bank is not busy (full or previous access)
    79               if (not internal_BANK_IN_ACK [num_bank] and (_issue_queue[num_bank].size() < _param->_size_bank))
    80                 {
    81                   log_printf(TRACE,Issue_queue,FUNCTION,"    * find");
    82 
    83                   // find
    84                   ack [num_rename_unit][num_inst_rename] = true;
    85                   internal_BANK_IN_ACK             [num_bank] = true;
    86                   internal_BANK_IN_NUM_RENAME_UNIT [num_bank] = num_rename_unit;
    87                   internal_BANK_IN_NUM_INST        [num_bank] = num_inst_rename;
    88                  
    89                   break; // Stop scan
    90                 }
    91               else
    92                 log_printf(TRACE,Issue_queue,FUNCTION,"    * not find");
    93             }
    94         }
    95    
    96       for (uint32_t i=0; i<_param->_nb_rename_unit; i++)
    97         for (uint32_t j=0; j<_param->_nb_inst_rename[i]; j++)
    98           PORT_WRITE(out_ISSUE_IN_ACK [i][j],ack [i][j]);
    99     }
    100 
    101     // ===================================================================
    102     // =====[ ISSUE_OUT ]=================================================
    103     // ===================================================================
    104     {
    105       Tcontrol_t val [_param->_nb_inst_issue];
    106 
    107       for (uint32_t i=0; i<_param->_nb_inst_issue; i++)
    108         val [i] = 0;
    109 
    110       // From Reexecute_queue
    111 
    112 //       uint32_t num_reexecute_entry = 0;
    113       for (std::list<entry_t*>::iterator it=_reexecute_queue.begin();
    114            it!=_reexecute_queue.end();
    115            ++it)
    116         {
    117           entry_t* entry = (*it);
    118 
    119           for (uint32_t i=0; i<_param->_nb_inst_issue; i++)
    120             // test if no previous transaction and can accept this type
    121             if ((val[i] == 0) and _param->_table_issue_type [i][entry->_type])
    122               {
    123                 // find a issue port
    124                 val [i] = 1;
    125            
    126                 if (_param->_have_port_context_id)
    127                 PORT_WRITE(out_ISSUE_OUT_CONTEXT_ID            [i], entry->_context_id           );
    128                 if (_param->_have_port_front_end_id)
    129                 PORT_WRITE(out_ISSUE_OUT_FRONT_END_ID          [i], entry->_front_end_id         );
    130                 if (_param->_have_port_rob_ptr  )
    131                 PORT_WRITE(out_ISSUE_OUT_PACKET_ID             [i], entry->_packet_id            );
    132                 PORT_WRITE(out_ISSUE_OUT_OPERATION             [i], entry->_operation            );
    133                 PORT_WRITE(out_ISSUE_OUT_TYPE                  [i], entry->_type                 );
    134                 PORT_WRITE(out_ISSUE_OUT_STORE_QUEUE_PTR_WRITE [i], entry->_store_queue_ptr_write);
    135                 if (_param->_have_port_load_queue_ptr)
    136                 PORT_WRITE(out_ISSUE_OUT_LOAD_QUEUE_PTR_WRITE  [i], entry->_load_queue_ptr_write );
    137                 PORT_WRITE(out_ISSUE_OUT_HAS_IMMEDIAT          [i], entry->_has_immediat         );
    138                 PORT_WRITE(out_ISSUE_OUT_IMMEDIAT              [i], entry->_immediat             );
    139                 PORT_WRITE(out_ISSUE_OUT_READ_RA               [i], entry->_read_ra              );
    140                 PORT_WRITE(out_ISSUE_OUT_NUM_REG_RA            [i], entry->_num_reg_ra           );
    141                 PORT_WRITE(out_ISSUE_OUT_READ_RB               [i], entry->_read_rb              );
    142                 PORT_WRITE(out_ISSUE_OUT_NUM_REG_RB            [i], entry->_num_reg_rb           );
    143                 PORT_WRITE(out_ISSUE_OUT_READ_RC               [i], entry->_read_rc              );
    144                 PORT_WRITE(out_ISSUE_OUT_NUM_REG_RC            [i], entry->_num_reg_rc           );
    145                 PORT_WRITE(out_ISSUE_OUT_WRITE_RD              [i], entry->_write_rd             );
    146                 PORT_WRITE(out_ISSUE_OUT_NUM_REG_RD            [i], entry->_num_reg_rd           );
    147                 PORT_WRITE(out_ISSUE_OUT_WRITE_RE              [i], entry->_write_re             );
    148                 PORT_WRITE(out_ISSUE_OUT_NUM_REG_RE            [i], entry->_num_reg_re           );
    149 
    150                 internal_ISSUE_OUT_FROM_REEXECUTE [i] = true;
    151 //              internal_ISSUE_OUT_NUM_BANK       [i] = num_reexecute_entry;
    152                 internal_ISSUE_OUT_ENTRY          [i] = entry;
    153 
    154                 break; // stop scan
    155               }
    156 //           num_reexecute_entry ++;
    157         }
    158 
    159       // From Issue_queue
    160 
    161       std::list<generic::priority::select_t> * select = _priority_out->select(); // same select for all issue
    162 
    163       for (std::list<generic::priority::select_t>::iterator it=select->begin();
    164            it!=select->end();
    165            it++)
    166         {
    167           uint32_t num_bank=it->grp;
    168 
    169 //        log_printf(TRACE,Issue_queue,Issue_queue,FUNCTION,"    * Bank [%d]",num_bank);
    170 
    171           // Have instruction ?
    172           if (not _issue_queue [num_bank].empty())
    173             {
    174 //            log_printf(TRACE,Issue_queue,Issue_queue,FUNCTION,"      * Not Empty !!!");
    175 
    176               entry_t* entry = _issue_queue [num_bank].front();
    177              
    178               for (uint32_t i=0; i<_param->_nb_inst_issue; i++)
    179                 // test if no previous transaction and can accept this type
    180                 if ((val[i] == 0) and _param->_table_issue_type [i][entry->_type])
    181                   {
    182                     // find a issue port
    183                     val [i] = 1;
    184 
    185                     if (_param->_have_port_context_id)
    186                     PORT_WRITE(out_ISSUE_OUT_CONTEXT_ID            [i], entry->_context_id           );
    187                     if (_param->_have_port_front_end_id)
    188                     PORT_WRITE(out_ISSUE_OUT_FRONT_END_ID          [i], entry->_front_end_id         );
    189                     if (_param->_have_port_rob_ptr  )
    190                     PORT_WRITE(out_ISSUE_OUT_PACKET_ID             [i], entry->_packet_id            );
    191                     PORT_WRITE(out_ISSUE_OUT_OPERATION             [i], entry->_operation            );
    192                     PORT_WRITE(out_ISSUE_OUT_TYPE                  [i], entry->_type                 );
    193                     PORT_WRITE(out_ISSUE_OUT_STORE_QUEUE_PTR_WRITE [i], entry->_store_queue_ptr_write);
    194                     if (_param->_have_port_load_queue_ptr)
    195                     PORT_WRITE(out_ISSUE_OUT_LOAD_QUEUE_PTR_WRITE  [i], entry->_load_queue_ptr_write );
    196                     PORT_WRITE(out_ISSUE_OUT_HAS_IMMEDIAT          [i], entry->_has_immediat         );
    197                     PORT_WRITE(out_ISSUE_OUT_IMMEDIAT              [i], entry->_immediat             );
    198                     PORT_WRITE(out_ISSUE_OUT_READ_RA               [i], entry->_read_ra              );
    199                     PORT_WRITE(out_ISSUE_OUT_NUM_REG_RA            [i], entry->_num_reg_ra           );
    200                     PORT_WRITE(out_ISSUE_OUT_READ_RB               [i], entry->_read_rb              );
    201                     PORT_WRITE(out_ISSUE_OUT_NUM_REG_RB            [i], entry->_num_reg_rb           );
    202                     PORT_WRITE(out_ISSUE_OUT_READ_RC               [i], entry->_read_rc              );
    203                     PORT_WRITE(out_ISSUE_OUT_NUM_REG_RC            [i], entry->_num_reg_rc           );
    204                     PORT_WRITE(out_ISSUE_OUT_WRITE_RD              [i], entry->_write_rd             );
    205                     PORT_WRITE(out_ISSUE_OUT_NUM_REG_RD            [i], entry->_num_reg_rd           );
    206                     PORT_WRITE(out_ISSUE_OUT_WRITE_RE              [i], entry->_write_re             );
    207                     PORT_WRITE(out_ISSUE_OUT_NUM_REG_RE            [i], entry->_num_reg_re           );
    208                    
    209                     internal_ISSUE_OUT_FROM_REEXECUTE [i] = false;
    210                     internal_ISSUE_OUT_NUM_BANK       [i] = num_bank;
    211                     internal_ISSUE_OUT_ENTRY          [i] = entry;
    212 
    213                     break; // stop scan
    214                   }
    215             }
    216         }
    217 
    218       for (uint32_t i=0; i<_param->_nb_inst_issue; i++)
    219         {
    220           internal_ISSUE_OUT_VAL [i] = val [i];
    221           PORT_WRITE(out_ISSUE_OUT_VAL [i], internal_ISSUE_OUT_VAL [i]);
    222         }
    223     }
     41    (this->*function_genMoore) ();
    22442
    22543    log_end(Issue_queue,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/src/Issue_queue_transition.cpp

    r110 r111  
    2727      {
    2828        _priority_in ->reset();
    29         _priority_out->reset();
    30         _priority_reg->reset();
    31        
    32         for (uint32_t i=0; i<_param->_nb_bank; i++)
    33           _issue_queue [i].clear();
    3429        _reexecute_queue.clear();
    3530      }
     
    3732      {
    3833        _priority_in ->transition();
    39         _priority_out->transition();
    40         _priority_reg->transition();
    41 
    42         // ===================================================================
    43         // =====[ ISSUE_IN ]==================================================
    44         // ===================================================================
    45 
    46         for (uint32_t i=0; i<_param->_nb_bank; i++)
    47           if (internal_BANK_IN_ACK [i])
    48             {
    49               uint32_t x = internal_BANK_IN_NUM_RENAME_UNIT [i];
    50               uint32_t y = internal_BANK_IN_NUM_INST [i];
    51              
    52               if (PORT_READ(in_ISSUE_IN_VAL[x][y]))
    53                 {
    54                   log_printf(TRACE,Issue_queue,FUNCTION,"  * ISSUE_IN [%d] - Transaction with ISSUE_IN [%d][%d]",i,x,y);
    55 
    56 #ifdef STATISTICS
    57                   if (usage_is_set(_usage,USE_STATISTICS))
    58                     (*_stat_nb_inst_issue_in [x]) ++;
    59 #endif
    60                   entry_t * entry = new entry_t
    61                     (
    62                      (_param->_have_port_context_id    )?PORT_READ(in_ISSUE_IN_CONTEXT_ID            [x][y]):0,
    63                      (_param->_have_port_front_end_id  )?PORT_READ(in_ISSUE_IN_FRONT_END_ID          [x][y]):0,
    64                      (_param->_have_port_rob_ptr       )?PORT_READ(in_ISSUE_IN_PACKET_ID             [x][y]):0,
    65                                                          PORT_READ(in_ISSUE_IN_OPERATION             [x][y]),
    66                                                          PORT_READ(in_ISSUE_IN_TYPE                  [x][y]),
    67                                                          PORT_READ(in_ISSUE_IN_STORE_QUEUE_PTR_WRITE [x][y]),
    68                      (_param->_have_port_load_queue_ptr)?PORT_READ(in_ISSUE_IN_LOAD_QUEUE_PTR_WRITE  [x][y]):0,
    69                                                          PORT_READ(in_ISSUE_IN_HAS_IMMEDIAT          [x][y]),
    70                                                          PORT_READ(in_ISSUE_IN_IMMEDIAT              [x][y]),
    71                                                          PORT_READ(in_ISSUE_IN_READ_RA               [x][y]),
    72                                                          PORT_READ(in_ISSUE_IN_NUM_REG_RA            [x][y]),
    73                                                          PORT_READ(in_ISSUE_IN_READ_RB               [x][y]),
    74                                                          PORT_READ(in_ISSUE_IN_NUM_REG_RB            [x][y]),
    75                                                          PORT_READ(in_ISSUE_IN_READ_RC               [x][y]),
    76                                                          PORT_READ(in_ISSUE_IN_NUM_REG_RC            [x][y]),
    77                                                          PORT_READ(in_ISSUE_IN_WRITE_RD              [x][y]),
    78                                                          PORT_READ(in_ISSUE_IN_NUM_REG_RD            [x][y]),
    79                                                          PORT_READ(in_ISSUE_IN_WRITE_RE              [x][y]),
    80                                                          PORT_READ(in_ISSUE_IN_NUM_REG_RE            [x][y])
    81                      );
    82 
    83                   _issue_queue [i].push_back(entry);
    84                 }
    85             }
    8634
    8735        // ===================================================================
     
    13078          if (internal_ISSUE_OUT_VAL [i] and PORT_READ(in_ISSUE_OUT_ACK [i]))
    13179            {
    132               entry_t * entry    = internal_ISSUE_OUT_ENTRY    [i];
    133 
     80#ifdef STATISTICS
     81              if (usage_is_set(_usage,USE_STATISTICS))
     82                (*_stat_nb_inst_issue_out ) ++;
     83#endif
    13484              if (internal_ISSUE_OUT_FROM_REEXECUTE [i])
    13585                {
     86                  entry_t * entry = internal_ISSUE_OUT_ENTRY    [i];
     87                 
    13688                  log_printf(TRACE,Issue_queue,FUNCTION,"  * ISSUE_OUT [%d] - From Reexecute_queue",i);
    13789                 
    13890                  _reexecute_queue.remove(entry);
     91                 
     92                  delete entry;
    13993                }
    140               else
    141                 {
    142                   // front ...
    143                   uint32_t  num_bank = internal_ISSUE_OUT_NUM_BANK [i];
    144 
    145                   log_printf(TRACE,Issue_queue,FUNCTION,"  * ISSUE_OUT [%d] - From issue_queue [%d]",i,num_bank);
    146 
    147                   _issue_queue [num_bank].remove(entry);
    148                 }
    149 
    150               delete entry;
    151             }
     94                // else ... in function specific
     95            }
    15296      }
    15397
    154 #if defined(DEBUG) and defined(DEBUG_Issue_queue) and (DEBUG >= DEBUG_TRACE)
     98    // specific implementation
     99    (this->*function_transition) ();
     100
     101    // ===================================================================
     102    // =====[ PRINT ]====================================================
     103    // ===================================================================
     104
     105#if defined(DEBUG) and DEBUG_Issue_queue and (DEBUG >= DEBUG_TRACE)
    155106    log_printf(TRACE,Issue_queue,FUNCTION,"  * Dump Issue_queue");
    156107
     
    245196#endif
    246197
     198
     199
    247200#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
    248201    end_cycle ();
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/src/Parameters.cpp

    r110 r111  
    1919#undef  FUNCTION
    2020#define FUNCTION "Issue_queue::Parameters"
    21   Parameters::Parameters (uint32_t          nb_context              ,
    22                           uint32_t          nb_front_end            ,
    23                           uint32_t          nb_rename_unit          ,
    24                           uint32_t          size_queue              ,
    25                           uint32_t          nb_bank                 ,
    26                           uint32_t          size_packet             ,
    27                           uint32_t          size_general_data       ,
    28                           uint32_t          size_special_data       ,
    29                           uint32_t          size_general_register   ,
    30                           uint32_t          size_special_register   ,
    31                           uint32_t          size_store_queue_ptr    ,
    32                           uint32_t          size_load_queue_ptr     ,
    33                           uint32_t          nb_inst_issue           ,
    34                           uint32_t        * nb_inst_rename          ,
    35                           uint32_t          nb_inst_reexecute       ,
    36                           uint32_t          nb_rename_unit_select   ,
    37                           Tpriority_t       priority                ,
    38                           Tload_balancing_t load_balancing          ,
    39                           bool           ** table_routing           ,
    40                           bool           ** table_issue_type        ,
    41                           bool              is_toplevel             )
     21  Parameters::Parameters (uint32_t              nb_context              ,
     22                          uint32_t              nb_front_end            ,
     23                          uint32_t              nb_rename_unit          ,
     24                          uint32_t              size_queue              ,
     25                          Tissue_queue_scheme_t queue_scheme            ,
     26                          uint32_t              nb_bank                 ,
     27                          uint32_t              size_packet             ,
     28                          uint32_t              size_general_data       ,
     29                          uint32_t              size_special_data       ,
     30                          uint32_t              size_general_register   ,
     31                          uint32_t              size_special_register   ,
     32                          uint32_t              size_store_queue_ptr    ,
     33                          uint32_t              size_load_queue_ptr     ,
     34                          uint32_t              nb_inst_issue           ,
     35                          uint32_t            * nb_inst_rename          ,
     36                          uint32_t              nb_inst_reexecute       ,
     37                          uint32_t              nb_rename_unit_select   ,
     38                          Tpriority_t           priority                ,
     39                          Tload_balancing_t     load_balancing          ,
     40                          bool               ** table_routing           ,
     41                          bool               ** table_issue_type        ,
     42                          bool                  is_toplevel             )
    4243  {
    4344    log_begin(Issue_queue,FUNCTION);
     
    4748    _nb_rename_unit           = nb_rename_unit       ;
    4849    _size_queue               = size_queue           ;
     50    _queue_scheme             = queue_scheme         ;
    4951    _nb_bank                  = nb_bank              ;   
    5052    _nb_inst_issue            = nb_inst_issue        ;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/src/Parameters_msg_error.cpp

    r109 r111  
    2525
    2626    Parameters_test test ("Issue_queue");
     27
     28    switch (_queue_scheme)
     29      {
     30      case ISSUE_QUEUE_SCHEME_IN_ORDER        :
     31      case ISSUE_QUEUE_SCHEME_OUT_OF_ORDER    :
     32        {
     33          // supported
     34          break;
     35        }
     36      default :
     37        {
     38          test.error(toString(_("Issue queue scheme '%s' is not supported. Please wait a next revision.\n"),toString(_queue_scheme).c_str()));
     39          break;
     40        }
     41      }
     42
     43    if (// (_queue_scheme == ISSUE_QUEUE_SCHEME_IN_BUNDLE_ORDER) or
     44        (_queue_scheme == ISSUE_QUEUE_SCHEME_OUT_OF_ORDER   ))
     45      test.warning(toString(_("Can have deadlock with the queue scheme \"%s\".\n"),toString(_queue_scheme).c_str()));
    2746
    2847    if (not is_multiple(_size_queue, _nb_bank))
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_select/src/Rename_select.cpp

    r108 r111  
    123123            }
    124124
    125 //      for (uint32_t i=0; i<_param->_nb_front_end; i++)
    126 //        for (uint32_t j=0; j<_param->_nb_context [i]; j++)
    127 //             sensitive << (*(in_RETIRE_EVENT_STATE [i][j]));
     125        for (uint32_t i=0; i<_param->_nb_front_end; i++)
     126          for (uint32_t j=0; j<_param->_nb_context [i]; j++)
     127            sensitive << (*(in_RETIRE_EVENT_STATE [i][j]));
    128128
    129129        for (uint32_t i=0; i<_param->_nb_inst_rename; i++)
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_select/src/Rename_select_genMealy.cpp

    r110 r111  
    6969               
    7070                Tcontrol_t no_execute   = (PORT_READ(in_RENAME_IN_NO_EXECUTE [x][y]));
    71                 Tcontrol_t read_ra      = (PORT_READ(in_RENAME_IN_READ_RA    [x][y]));
    72                 Tcontrol_t read_rb      = (PORT_READ(in_RENAME_IN_READ_RB    [x][y]));
    73                 Tcontrol_t read_rc      = (PORT_READ(in_RENAME_IN_READ_RC    [x][y]));
    74                 Tcontrol_t write_rd     = (PORT_READ(in_RENAME_IN_WRITE_RD   [x][y]));
    75                 Tcontrol_t write_re     = (PORT_READ(in_RENAME_IN_WRITE_RE   [x][y]));
     71//              Tcontrol_t read_ra      = (PORT_READ(in_RENAME_IN_READ_RA    [x][y]));
     72//              Tcontrol_t read_rb      = (PORT_READ(in_RENAME_IN_READ_RB    [x][y]));
     73//              Tcontrol_t read_rc      = (PORT_READ(in_RENAME_IN_READ_RC    [x][y]));
     74//              Tcontrol_t write_rd     = (PORT_READ(in_RENAME_IN_WRITE_RD   [x][y]));
     75//              Tcontrol_t write_re     = (PORT_READ(in_RENAME_IN_WRITE_RE   [x][y]));
    7676
    77                 // Attention, j'ai enlevé event_state de la liste de sensibilité
    78 //                 Tevent_state_t event_state  = PORT_READ(in_RETIRE_EVENT_STATE [front_end_id][context_id]);
     77                // Test if ROB is Flushed
     78                Tevent_state_t event_state         = PORT_READ(in_RETIRE_EVENT_STATE [front_end_id][context_id]);
     79                Tcontrol_t     can_register_access = (event_state == EVENT_STATE_NO_EVENT);
    7980
    80 //                 Tcontrol_t     no_execute   = (PORT_READ(in_RENAME_IN_NO_EXECUTE [x][y]) or
    81 //                                                // ROB Flush
    82 //                                                ((event_state == EVENT_STATE_EVENT  ) or
    83 //                                                 (event_state == EVENT_STATE_WAITEND)));
    84 
    85 //              Tcontrol_t read_ra  = (PORT_READ(in_RENAME_IN_READ_RA  [x][y]) and not no_execute);
    86 //              Tcontrol_t read_rb  = (PORT_READ(in_RENAME_IN_READ_RB  [x][y]) and not no_execute);
    87 //              Tcontrol_t read_rc  = (PORT_READ(in_RENAME_IN_READ_RC  [x][y]) and not no_execute);
    88 //              Tcontrol_t write_rd = (PORT_READ(in_RENAME_IN_WRITE_RD [x][y]) and not no_execute);
    89 //              Tcontrol_t write_re = (PORT_READ(in_RENAME_IN_WRITE_RE [x][y]) and not no_execute);
     81                Tcontrol_t read_ra  = (PORT_READ(in_RENAME_IN_READ_RA  [x][y]) and can_register_access);
     82                Tcontrol_t read_rb  = (PORT_READ(in_RENAME_IN_READ_RB  [x][y]) and can_register_access);
     83                Tcontrol_t read_rc  = (PORT_READ(in_RENAME_IN_READ_RC  [x][y]) and can_register_access);
     84                Tcontrol_t write_rd = (PORT_READ(in_RENAME_IN_WRITE_RD [x][y]) and can_register_access);
     85                Tcontrol_t write_re = (PORT_READ(in_RENAME_IN_WRITE_RE [x][y]) and can_register_access);
    9086               
    9187                if (_param->_have_port_front_end_id)
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/SelfTest/configuration.cfg

    r110 r111  
    23231       1       +1      # commit_priority                         
    24241       1       +1      # commit_load_balancing                   
    25 1       1       +1      # size_issue_queue                         
     251       1       +1      # size_issue_queue
     260       1       +1      # issue_queue_scheme
    26271       1       +1      # nb_issue_queue_bank                     
    27281       1       +1      # issue_priority                           
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/SelfTest/src/main.cpp

    r110 r111  
    99#include "Behavioural/include/Allocation.h"
    1010
    11 #define NB_PARAMS 23
     11#define NB_PARAMS 24
    1212
    1313void usage (int argc, char * argv[])
     
    1515  err (_("<Usage> %s name_instance list_params.\n"),argv[0]);
    1616  err (_("list_params is :\n"));
    17   err (_(" * nb_front_end                                                            (uint32_t         )\n"));
    18   err (_(" * nb_context                        [nb_front_end]                        (uint32_t         )\n"));
    19   err (_(" * nb_rename_unit                                                          (uint32_t         )\n"));
    20   err (_(" * nb_execute_loop                                                         (uint32_t         )\n"));
    21   err (_(" * nb_inst_decod                     [nb_front_end]                        (uint32_t         )\n"));
    22   err (_(" * nb_inst_insert                    [nb_rename_unit]                      (uint32_t         )\n"));
    23   err (_(" * nb_inst_retire                    [nb_rename_unit]                      (uint32_t         )\n"));
    24   err (_(" * nb_inst_issue                                                           (uint32_t         )\n"));
    25   err (_(" * nb_inst_execute                   [nb_execute_loop]                     (uint32_t         )\n"));
    26   err (_(" * nb_inst_reexecute                                                       (uint32_t         )\n"));
    27   err (_(" * nb_inst_commit                                                          (uint32_t         )\n"));
    28   err (_(" * nb_inst_branch_complete                                                 (uint32_t         )\n"));
    29   err (_(" * nb_branch_speculated              [nb_front_end][nb_context]            (uint32_t         )\n"));
    30   err (_(" * size_nb_inst_decod                                                      (uint32_t         )\n"));
    31   err (_(" * nb_rename_unit_select                                                   (uint32_t         )\n"));
    32   err (_(" * nb_execute_loop_select                                                  (uint32_t         )\n"));
    33   err (_(" * size_general_data                                                       (uint32_t         )\n"));
    34   err (_(" * size_special_data                                                       (uint32_t         )\n"));
    35   err (_(" * link_rename_unit_with_front_end   [nb_front_end]                        (uint32_t         )\n"));
    36   err (_(" * size_re_order_buffer                                                    (uint32_t         )\n"));
    37   err (_(" * nb_re_order_buffer_bank                                                 (uint32_t         )\n"));
    38   err (_(" * commit_priority                                                         (Tpriority_t      )\n"));
    39   err (_(" * commit_load_balancing                                                   (Tload_balancing_t)\n"));
    40   err (_(" * size_issue_queue                                                        (uint32_t         )\n"));
    41   err (_(" * nb_issue_queue_bank                                                     (uint32_t         )\n"));
    42   err (_(" * issue_priority                                                          (Tpriority_t      )\n"));
    43   err (_(" * issue_load_balancing                                                    (Tload_balancing_t)\n"));
    44   err (_(" * table_routing                     [nb_rename_unit][nb_inst_issue]       (bool             )\n"));
    45   err (_(" * table_issue_type                  [nb_inst_issue][nb_type]              (bool             )\n"));
     17  err (_(" * nb_front_end                                                            (uint32_t             )\n"));
     18  err (_(" * nb_context                        [nb_front_end]                        (uint32_t             )\n"));
     19  err (_(" * nb_rename_unit                                                          (uint32_t             )\n"));
     20  err (_(" * nb_execute_loop                                                         (uint32_t             )\n"));
     21  err (_(" * nb_inst_decod                     [nb_front_end]                        (uint32_t             )\n"));
     22  err (_(" * nb_inst_insert                    [nb_rename_unit]                      (uint32_t             )\n"));
     23  err (_(" * nb_inst_retire                    [nb_rename_unit]                      (uint32_t             )\n"));
     24  err (_(" * nb_inst_issue                                                           (uint32_t             )\n"));
     25  err (_(" * nb_inst_execute                   [nb_execute_loop]                     (uint32_t             )\n"));
     26  err (_(" * nb_inst_reexecute                                                       (uint32_t             )\n"));
     27  err (_(" * nb_inst_commit                                                          (uint32_t             )\n"));
     28  err (_(" * nb_inst_branch_complete                                                 (uint32_t             )\n"));
     29  err (_(" * nb_branch_speculated              [nb_front_end][nb_context]            (uint32_t             )\n"));
     30  err (_(" * size_nb_inst_decod                                                      (uint32_t             )\n"));
     31  err (_(" * nb_rename_unit_select                                                   (uint32_t             )\n"));
     32  err (_(" * nb_execute_loop_select                                                  (uint32_t             )\n"));
     33  err (_(" * size_general_data                                                       (uint32_t             )\n"));
     34  err (_(" * size_special_data                                                       (uint32_t             )\n"));
     35  err (_(" * link_rename_unit_with_front_end   [nb_front_end]                        (uint32_t             )\n"));
     36  err (_(" * size_re_order_buffer                                                    (uint32_t             )\n"));
     37  err (_(" * nb_re_order_buffer_bank                                                 (uint32_t             )\n"));
     38  err (_(" * commit_priority                                                         (Tpriority_t          )\n"));
     39  err (_(" * commit_load_balancing                                                   (Tload_balancing_t    )\n"));
     40  err (_(" * size_issue_queue                                                        (uint32_t             )\n"));
     41  err (_(" * issue_queue_scheme                                                      (Tissue_queue_scheme_t)\n"));
     42  err (_(" * nb_issue_queue_bank                                                     (uint32_t             )\n"));
     43  err (_(" * issue_priority                                                          (Tpriority_t          )\n"));
     44  err (_(" * issue_load_balancing                                                    (Tload_balancing_t    )\n"));
     45  err (_(" * table_routing                     [nb_rename_unit][nb_inst_issue]       (bool                 )\n"));
     46  err (_(" * table_issue_type                  [nb_inst_issue][nb_type]              (bool                 )\n"));
    4647  err (_("   * TYPE_ALU    \n"));
    4748  err (_("   * TYPE_SHIFT  \n"));
     
    146147  Tload_balancing_t     _commit_load_balancing             = fromString<Tload_balancing_t>(argv[x++]);
    147148  uint32_t              _size_issue_queue                  = fromString<uint32_t         >(argv[x++]);
     149  issue_queue::Tissue_queue_scheme_t
     150                        _issue_queue_scheme                = fromString<issue_queue::Tissue_queue_scheme_t>(argv[x++]);
    148151  uint32_t              _nb_issue_queue_bank               = fromString<uint32_t         >(argv[x++]);
    149152  Tpriority_t           _issue_priority                    = fromString<Tpriority_t      >(argv[x++]);
     
    308311         _commit_load_balancing            ,
    309312         _size_issue_queue                 ,
     313         _issue_queue_scheme               ,
    310314         _nb_issue_queue_bank              ,
    311315         _issue_priority                   ,
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/include/Parameters.h

    r110 r111  
    5757    // Issue
    5858  public : uint32_t              _size_issue_queue                 ;
     59  public : issue_queue::Tissue_queue_scheme_t
     60                                 _issue_queue_scheme               ;
    5961  public : uint32_t              _nb_issue_queue_bank              ;
    6062  public : Tpriority_t           _issue_priority                   ;
     
    152154                        // Issue
    153155                        uint32_t              size_issue_queue                 ,
     156                        issue_queue::Tissue_queue_scheme_t
     157                                              issue_queue_scheme               ,
    154158                        uint32_t              nb_issue_queue_bank              ,
    155159                        Tpriority_t           issue_priority                   ,
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/src/Parameters.cpp

    r110 r111  
    4444                          // Issue
    4545                          uint32_t              size_issue_queue                 ,
     46                          issue_queue::Tissue_queue_scheme_t
     47                                                issue_queue_scheme               ,
    4648                          uint32_t              nb_issue_queue_bank              ,
    4749                          Tpriority_t           issue_priority                   ,
     
    101103    _commit_load_balancing             = commit_load_balancing            ;
    102104    _size_issue_queue                  = size_issue_queue                 ;
     105    _issue_queue_scheme                = issue_queue_scheme               ;
    103106    _nb_issue_queue_bank               = nb_issue_queue_bank              ;
    104107    _issue_priority                    = issue_priority                   ;
     
    271274       _nb_rename_unit          ,
    272275       _size_issue_queue        ,
     276       _issue_queue_scheme      ,
    273277       _nb_issue_queue_bank     ,
    274278        size_packet_id          ,
Note: See TracChangeset for help on using the changeset viewer.