Ignore:
Timestamp:
Jun 3, 2009, 10:15:51 AM (15 years ago)
Author:
rosiere
Message:

Modif for performance :
1) Load Store Unit : store send request to valid exeception
2) Commit_unit : retire can bypass store
3) Commit_unit : add stat to manage store instruction
4) Load Store Unit and Load Store Pointer Manager : add store_queue_ptr_read
5) Fix lot of bug

Location:
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop
Files:
32 edited

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Functionnal_unit.h

    r118 r122  
    8585  public    : SC_IN (Ttype_t           )    *  in_EXECUTE_IN_TYPE           ;
    8686  public    : SC_IN (Tlsq_ptr_t        )    *  in_EXECUTE_IN_STORE_QUEUE_PTR_WRITE;
     87  public    : SC_IN (Tlsq_ptr_t        )    *  in_EXECUTE_IN_STORE_QUEUE_PTR_READ ;
     88  public    : SC_IN (Tcontrol_t        )    *  in_EXECUTE_IN_STORE_QUEUE_EMPTY    ;
    8789  public    : SC_IN (Tlsq_ptr_t        )    *  in_EXECUTE_IN_LOAD_QUEUE_PTR_WRITE;
    8890  public    : SC_IN (Tcontrol_t        )    *  in_EXECUTE_IN_HAS_IMMEDIAT   ;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_allocation.cpp

    r118 r122  
    6363      ALLOC0_SIGNAL_IN ( in_EXECUTE_IN_TYPE                  ,"type"                 ,Ttype_t           , _param->_size_type         );
    6464      ALLOC0_SIGNAL_IN ( in_EXECUTE_IN_STORE_QUEUE_PTR_WRITE ,"store_queue_ptr_write",Tlsq_ptr_t        ,_param->_size_store_queue_ptr);
     65      ALLOC0_SIGNAL_IN ( in_EXECUTE_IN_STORE_QUEUE_PTR_READ  ,"store_queue_ptr_read" ,Tlsq_ptr_t        ,_param->_size_store_queue_ptr);
     66      ALLOC0_SIGNAL_IN ( in_EXECUTE_IN_STORE_QUEUE_EMPTY     ,"store_queue_empty"    ,Tcontrol_t        , 1);
    6567      ALLOC0_SIGNAL_IN ( in_EXECUTE_IN_LOAD_QUEUE_PTR_WRITE  ,"load_queue_ptr_write" ,Tlsq_ptr_t        ,_param->_size_load_queue_ptr);
    6668      ALLOC0_SIGNAL_IN ( in_EXECUTE_IN_HAS_IMMEDIAT          ,"has_immediat"         ,Tcontrol_t        , 1);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_deallocation.cpp

    r118 r122  
    3939        DELETE0_SIGNAL( in_EXECUTE_IN_TYPE                  , _param->_size_type         );
    4040        DELETE0_SIGNAL( in_EXECUTE_IN_STORE_QUEUE_PTR_WRITE ,_param->_size_store_queue_ptr);
     41        DELETE0_SIGNAL( in_EXECUTE_IN_STORE_QUEUE_PTR_READ  ,_param->_size_store_queue_ptr);
     42        DELETE0_SIGNAL( in_EXECUTE_IN_STORE_QUEUE_EMPTY     , 1);
    4143        DELETE0_SIGNAL( in_EXECUTE_IN_LOAD_QUEUE_PTR_WRITE  ,_param->_size_load_queue_ptr);
    4244        DELETE0_SIGNAL( in_EXECUTE_IN_HAS_IMMEDIAT          , 1);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/include/Load_store_unit.h

    r117 r122  
    103103  public    : SC_IN (Ttype_t           )   **  in_MEMORY_IN_TYPE                 ;//[nb_inst_memory]
    104104  public    : SC_IN (Tlsq_ptr_t        )   **  in_MEMORY_IN_STORE_QUEUE_PTR_WRITE;//[nb_inst_memory]
     105  public    : SC_IN (Tlsq_ptr_t        )   **  in_MEMORY_IN_STORE_QUEUE_PTR_READ ;//[nb_inst_memory]
     106  public    : SC_IN (Tcontrol_t        )   **  in_MEMORY_IN_STORE_QUEUE_EMPTY    ;//[nb_inst_memory]
    105107  public    : SC_IN (Tlsq_ptr_t        )   **  in_MEMORY_IN_LOAD_QUEUE_PTR_WRITE ;//[nb_inst_memory]
    106108  public    : SC_IN (Tcontrol_t        )   **  in_MEMORY_IN_HAS_IMMEDIAT         ;//[nb_inst_memory]
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/include/Types.h

    r119 r122  
    7373//public    : Tgeneral_address_t   _num_reg_rd          ;
    7474  public    : Texception_t         _exception           ;
     75  public    : bool                 _send_commit         ;
    7576
    7677    friend std::ostream & operator << (std::ostream& os, const Tstore_queue_entry_t & x)
     
    112113  public    : Tlsq_ptr_t                         _load_queue_ptr_write ;
    113114  public    : Tlsq_ptr_t                         _store_queue_ptr_write;
     115  public    : Tlsq_ptr_t                         _store_queue_ptr_read ;
     116  public    : Tcontrol_t                         _store_queue_empty    ;
    114117  public    : Tdcache_address_t                  _address              ;
    115118  public    : Tcontrol_t                         _write_rd             ;
     
    123126                << "   * context, front_end, ooo_engine_id : " << toString(x._context_id) << " - " << toString(x._front_end_id) << " - " << toString(x._ooo_engine_id) << std::endl
    124127                << "   * operation                         : " << toString(x._operation) << std::endl
    125                 << "   * load, store ptr_write             : " << toString(x._load_queue_ptr_write) << " - " << toString(x._store_queue_ptr_write) << std::endl
     128                << "   * load, store ptr_(write/read) empty: " << toString(x._load_queue_ptr_write) << " - " << toString(x._store_queue_ptr_write) << " - " << toString(x._store_queue_ptr_read) << " - " << toString(x._store_queue_empty) << std::endl
    126129                << "   * exception                         : " << toString(x._exception) << std::endl
    127130                << std::hex
     
    166169  public    : Toperation_t         _operation        ;
    167170  public    : Tlsq_ptr_t           _store_queue_ptr_write;
     171  public    : Tlsq_ptr_t           _store_queue_ptr_read ;
     172  public    : Tcontrol_t           _store_queue_empty    ;
    168173  public    : Tdcache_address_t    _address          ;
    169174  public    : Tdcache_address_t    _check_hit_byte   ;
     
    183188                << "   * context, front_end, ooo_engine_id : " << toString(x._context_id) << " - " << toString(x._front_end_id) << " - " << toString(x._ooo_engine_id) << std::endl
    184189                << "   * operation                         : " << toString(x._operation) << std::endl
    185                 << "   * store_queue_ptr_write             : " << toString(x._store_queue_ptr_write) << std::endl
     190                << "   * store_queue ptr_(write,read) empty: " << toString(x._store_queue_ptr_write) << " - " << toString(x._store_queue_ptr_read) << " - " << toString(x._store_queue_empty) <<std::endl
    186191                << "   * exception                         : " << toString(x._exception) << std::endl
    187192                << "   * check_hit, check_hit_byte         : " << toString(x._check_hit) << " - " << toString(x._check_hit_byte) << std::endl
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/src/Load_store_unit_allocation.cpp

    r117 r122  
    6565      ALLOC1_SIGNAL_IN ( in_MEMORY_IN_TYPE                 ,"type"                 ,Ttype_t           ,_param->_size_type                 );
    6666      ALLOC1_SIGNAL_IN ( in_MEMORY_IN_STORE_QUEUE_PTR_WRITE,"store_queue_ptr_write",Tlsq_ptr_t        ,_param->_size_store_queue_ptr      );
     67      ALLOC1_SIGNAL_IN ( in_MEMORY_IN_STORE_QUEUE_PTR_READ ,"store_queue_ptr_read" ,Tlsq_ptr_t        ,_param->_size_store_queue_ptr      );
     68      ALLOC1_SIGNAL_IN ( in_MEMORY_IN_STORE_QUEUE_EMPTY    ,"store_queue_empty"    ,Tcontrol_t        ,1);
    6769      ALLOC1_SIGNAL_IN ( in_MEMORY_IN_LOAD_QUEUE_PTR_WRITE ,"load_queue_ptr_write" ,Tlsq_ptr_t        ,_param->_size_load_queue_ptr       );
    6870      ALLOC1_SIGNAL_IN ( in_MEMORY_IN_HAS_IMMEDIAT         ,"has_immediat"         ,Tcontrol_t        ,1                                  );
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/src/Load_store_unit_deallocation.cpp

    r117 r122  
    4545    DELETE1_SIGNAL( in_MEMORY_IN_TYPE                 ,_param->_nb_inst_memory,_param->_size_type                 );
    4646    DELETE1_SIGNAL( in_MEMORY_IN_STORE_QUEUE_PTR_WRITE,_param->_nb_inst_memory,_param->_size_store_queue_ptr      );
     47    DELETE1_SIGNAL( in_MEMORY_IN_STORE_QUEUE_PTR_READ ,_param->_nb_inst_memory,_param->_size_store_queue_ptr      );
     48    DELETE1_SIGNAL( in_MEMORY_IN_STORE_QUEUE_EMPTY    ,_param->_nb_inst_memory,1);
    4749    DELETE1_SIGNAL( in_MEMORY_IN_LOAD_QUEUE_PTR_WRITE ,_param->_nb_inst_memory,_param->_size_load_queue_ptr       );
    4850    DELETE1_SIGNAL( in_MEMORY_IN_HAS_IMMEDIAT         ,_param->_nb_inst_memory,1                                  );
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/src/Load_store_unit_function_speculative_load_commit_genMoore.cpp

    r117 r122  
    3939//  Tspecial_address_t memory_out_num_reg_re    = 0;
    4040//  Tspecial_data_t    memory_out_data_re       = 0;
     41    Tcontrol_t         memory_out_no_sequence   = 0;
    4142    Texception_t       memory_out_exception     = 0;
    4243
     
    9899      {
    99100        log_printf(TRACE,Load_store_unit,FUNCTION,"    * Store queue");
    100         // Can retire an store instruction if :
    101         //  * state is commit
    102         //  * none load must check this store
    103         if ((_store_queue [reg_STORE_QUEUE_PTR_READ]._state == STORE_QUEUE_COMMIT) and
    104             (reg_STORE_QUEUE_NB_CHECK [reg_STORE_QUEUE_PTR_READ] == 0))
    105           {
    106             log_printf(TRACE,Load_store_unit,FUNCTION,"    * find : %d",reg_STORE_QUEUE_PTR_READ);
    107 
    108             internal_MEMORY_OUT_VAL          = 1;
    109             internal_MEMORY_OUT_SELECT_QUEUE = SELECT_STORE_QUEUE;
    110            
    111             memory_out_context_id    = _store_queue [reg_STORE_QUEUE_PTR_READ]._context_id;
    112             memory_out_front_end_id  = _store_queue [reg_STORE_QUEUE_PTR_READ]._front_end_id;
    113             memory_out_ooo_engine_id = _store_queue [reg_STORE_QUEUE_PTR_READ]._ooo_engine_id;
    114             memory_out_packet_id     = _store_queue [reg_STORE_QUEUE_PTR_READ]._packet_id ;
    115 //          memory_out_write_rd         
    116 //          memory_out_num_reg_rd       
    117             memory_out_data_rd       = _store_queue [reg_STORE_QUEUE_PTR_READ]._address; // to the exception
    118             memory_out_exception     = _store_queue [reg_STORE_QUEUE_PTR_READ]._exception;
    119           }
    120       }
     101
     102        for (uint32_t i=0; i<_param->_size_store_queue; ++i)
     103          {
     104            internal_MEMORY_OUT_PTR = (reg_STORE_QUEUE_PTR_READ+i)%_param->_size_store_queue;
     105            // Can retire an store instruction if :
     106            //  * state is commit
     107            //  * none load must check this store
     108
     109
     110            bool val_head = ((i==0) and
     111                             (_store_queue [internal_MEMORY_OUT_PTR]._state       == STORE_QUEUE_COMMIT) and
     112                             (_store_queue [internal_MEMORY_OUT_PTR]._send_commit == true) and
     113                             (reg_STORE_QUEUE_NB_CHECK [internal_MEMORY_OUT_PTR] == 0)
     114                             );
     115
     116            bool val_commit = ((_store_queue [internal_MEMORY_OUT_PTR]._state       != STORE_QUEUE_EMPTY) and
     117                               (_store_queue [internal_MEMORY_OUT_PTR]._send_commit == false));
     118
     119            if (val_head or val_commit)
     120              {
     121                log_printf(TRACE,Load_store_unit,FUNCTION,"    * find : %d",internal_MEMORY_OUT_PTR);
     122               
     123                internal_MEMORY_OUT_VAL          = 1;
     124                internal_MEMORY_OUT_SELECT_QUEUE = SELECT_STORE_QUEUE;
     125               
     126                memory_out_context_id    = _store_queue [internal_MEMORY_OUT_PTR]._context_id;
     127                memory_out_front_end_id  = _store_queue [internal_MEMORY_OUT_PTR]._front_end_id;
     128                memory_out_ooo_engine_id = _store_queue [internal_MEMORY_OUT_PTR]._ooo_engine_id;
     129                memory_out_packet_id     = _store_queue [internal_MEMORY_OUT_PTR]._packet_id ;
     130//              memory_out_write_rd     
     131//              memory_out_num_reg_rd   
     132                memory_out_data_rd       = _store_queue [internal_MEMORY_OUT_PTR]._address; // to the exception
     133                memory_out_exception     = _store_queue [internal_MEMORY_OUT_PTR]._exception;
     134                memory_out_no_sequence   = val_commit;
     135                break; // find an entry
     136              }
     137
     138          }
     139      }
     140
    121141    // write output
    122142    PORT_WRITE(out_MEMORY_OUT_VAL          [0], internal_MEMORY_OUT_VAL);
     
    142162    PORT_WRITE(out_MEMORY_OUT_DATA_RE      [0], 0);
    143163    PORT_WRITE(out_MEMORY_OUT_EXCEPTION    [0], memory_out_exception    );
    144     PORT_WRITE(out_MEMORY_OUT_NO_SEQUENCE  [0], 0);
     164    PORT_WRITE(out_MEMORY_OUT_NO_SEQUENCE  [0], memory_out_no_sequence  );// hack
     165#ifdef DEBUG
     166    PORT_WRITE(out_MEMORY_OUT_ADDRESS      [0], memory_out_data_rd);
     167#else
    145168    PORT_WRITE(out_MEMORY_OUT_ADDRESS      [0], 0);
     169#endif
    146170
    147171    // ~~~~~[ Interface "dache_req" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/src/Load_store_unit_function_speculative_load_commit_transition.cpp

    r119 r122  
    275275                  // =======================
    276276                 
    277                   log_printf(TRACE,Load_store_unit,FUNCTION,"    * store_queue [%d]",reg_STORE_QUEUE_PTR_READ);
     277                  log_printf(TRACE,Load_store_unit,FUNCTION,"    * store_queue [%d]",internal_MEMORY_OUT_PTR);
    278278           
    279279                  // Entry flush and increase the read pointer
    280                   _store_queue [reg_STORE_QUEUE_PTR_READ]._state = STORE_QUEUE_EMPTY;
    281                  
    282                   reg_STORE_QUEUE_PTR_READ = (reg_STORE_QUEUE_PTR_READ+1)%_param->_size_store_queue;
     280                  if (_store_queue [internal_MEMORY_OUT_PTR]._send_commit)
     281                    {
     282                      _store_queue [internal_MEMORY_OUT_PTR]._state = STORE_QUEUE_EMPTY;
     283                      reg_STORE_QUEUE_PTR_READ = (reg_STORE_QUEUE_PTR_READ+1)%_param->_size_store_queue;
     284                    }
     285                  else
     286                    _store_queue [internal_MEMORY_OUT_PTR]._send_commit = true;
    283287
    284288                  break;
     
    339343          {
    340344            // Get an index from load queue
    341             uint32_t index_load = (i + reg_LOAD_QUEUE_CHECK_PRIORITY)%_param->_size_load_queue;
     345            uint32_t index_load_queue = (i + reg_LOAD_QUEUE_CHECK_PRIORITY)%_param->_size_load_queue;
    342346
    343347            // Test if this load must ckecked store queue
    344             if (((_load_queue[index_load]._state == LOAD_QUEUE_WAIT_CHECK) or
    345                  (_load_queue[index_load]._state == LOAD_QUEUE_COMMIT_CHECK) or
    346                  (_load_queue[index_load]._state == LOAD_QUEUE_CHECK)) and
    347                 is_operation_memory_load(_load_queue[index_load]._operation))
     348            if (((_load_queue[index_load_queue]._state == LOAD_QUEUE_WAIT_CHECK) or
     349                 (_load_queue[index_load_queue]._state == LOAD_QUEUE_COMMIT_CHECK) or
     350                 (_load_queue[index_load_queue]._state == LOAD_QUEUE_CHECK)) and
     351                is_operation_memory_load(_load_queue[index_load_queue]._operation))
    348352              {
    349                 log_printf(TRACE,Load_store_unit,FUNCTION,"    * Find a load : %d",index_load);
     353                log_printf(TRACE,Load_store_unit,FUNCTION,"    * Find a load : %d",index_load_queue);
    350354
    351355                nb_check++; // use one port
    352356
    353357                // find a entry that it need a check
    354                 Tlsq_ptr_t index_store     = _load_queue[index_load]._store_queue_ptr_write;
    355 //              Tlsq_ptr_t index_store_old = index_store;
     358                Tlsq_ptr_t store_queue_ptr_write = _load_queue[index_load_queue]._store_queue_ptr_write;
     359                Tlsq_ptr_t store_queue_ptr_read  = _load_queue[index_load_queue]._store_queue_ptr_read ;
     360                Tlsq_ptr_t store_queue_empty     = _load_queue[index_load_queue]._store_queue_empty    ;
     361//              Tlsq_ptr_t store_queue_ptr_write_old = store_queue_ptr_write;
    356362
    357363                // Init variable
     
    365371                //  * when a store is out of store queue, also it was in head of re order buffer. Also, they are none previous load.
    366372
    367                 log_printf(TRACE,Load_store_unit,FUNCTION,"    * index_store : %d",index_store);
    368                 log_printf(TRACE,Load_store_unit,FUNCTION,"    * ptr_read    : %d",reg_STORE_QUEUE_PTR_READ);
    369 
    370                 if (index_store == reg_STORE_QUEUE_PTR_READ)
     373                log_printf(TRACE,Load_store_unit,FUNCTION,"    * store_queue_ptr_write    : %d",store_queue_ptr_write);
     374                log_printf(TRACE,Load_store_unit,FUNCTION,"    * store_queue_ptr_read     : %d",store_queue_ptr_read );
     375//              log_printf(TRACE,Load_store_unit,FUNCTION,"    * store_queue_empty        : %d",store_queue_empty );
     376                log_printf(TRACE,Load_store_unit,FUNCTION,"    * reg_STORE_QUEUE_PTR_READ : %d",reg_STORE_QUEUE_PTR_READ);
     377
     378                if ((store_queue_ptr_write ==     store_queue_ptr_read) or
     379                    (store_queue_ptr_write == reg_STORE_QUEUE_PTR_READ))
     380//              if (store_queue_empty)
    371381                  {
    372                     log_printf(TRACE,Load_store_unit,FUNCTION,"      * index_store == reg_STORE_QUEUE_PTR_READ");
     382                    log_printf(TRACE,Load_store_unit,FUNCTION,"      * store_queue_ptr_write == store_queue_ptr_read");
    373383                    end_check    = true;
    374384                    change_state = true;
     
    376386                else
    377387                  {
    378                     log_printf(TRACE,Load_store_unit,FUNCTION,"      * index_store != reg_STORE_QUEUE_PTR_READ");
    379 
    380                     index_store = (index_store-1)%(_param->_size_store_queue); // store_queue_ptr_write target the next slot to write, also the slot is not significatif when the load is renaming
    381 
    382                     log_printf(TRACE,Load_store_unit,FUNCTION,"      * index_store : %d",index_store);
     388                    log_printf(TRACE,Load_store_unit,FUNCTION,"      * store_queue_ptr_write != store_queue_ptr_read");
     389
     390                    store_queue_ptr_write = (store_queue_ptr_write-1)%(_param->_size_store_queue); // store_queue_ptr_write target the next slot to write, also the slot is not significatif when the load is renaming
     391
     392                    log_printf(TRACE,Load_store_unit,FUNCTION,"      * store_queue_ptr_write : %d",store_queue_ptr_write);
    383393                   
    384394                    // switch on store_queue state
    385                     switch (_store_queue[index_store]._state)
     395                    switch (_store_queue[store_queue_ptr_write]._state)
    386396                      {
    387397                      case STORE_QUEUE_VALID_NO_SPECULATIVE :
     
    397407                          // Test thread id
    398408                          if (_param->_have_port_context_id)
    399                             test_thread_id &= (_load_queue[index_load]._context_id    == _store_queue[index_store]._context_id);
     409                            test_thread_id &= (_load_queue[index_load_queue]._context_id    == _store_queue[store_queue_ptr_write]._context_id);
    400410                          if (_param->_have_port_front_end_id)
    401                             test_thread_id &= (_load_queue[index_load]._front_end_id  == _store_queue[index_store]._front_end_id);
     411                            test_thread_id &= (_load_queue[index_load_queue]._front_end_id  == _store_queue[store_queue_ptr_write]._front_end_id);
    402412                          if (_param->_have_port_ooo_engine_id)
    403                             test_thread_id &= (_load_queue[index_load]._ooo_engine_id == _store_queue[index_store]._ooo_engine_id);
     413                            test_thread_id &= (_load_queue[index_load_queue]._ooo_engine_id == _store_queue[store_queue_ptr_write]._ooo_engine_id);
    404414                         
    405415                          if (test_thread_id)
     
    408418
    409419                              log_printf(TRACE,Load_store_unit,FUNCTION,"        * load and store is the same thread.");
    410                               Tdcache_address_t load_addr  = _load_queue [index_load ]._address;
    411                               Tdcache_address_t store_addr = _store_queue[index_store]._address;
     420                              Tdcache_address_t load_addr  = _load_queue [index_load_queue ]._address;
     421                              Tdcache_address_t store_addr = _store_queue[store_queue_ptr_write]._address;
    412422                             
    413423                              log_printf(TRACE,Load_store_unit,FUNCTION,"          * load_addr                     : %.8x.",load_addr );
     
    435445                                  bool is_big_endian = true;
    436446
    437                                   Tgeneral_data_t   load_data      = _load_queue [index_load ]._rdata  ;
    438                                   Tgeneral_data_t   store_data     = _store_queue[index_store]._wdata  ;
    439                                   Tdcache_address_t check_hit_byte = _load_queue [index_load ]._check_hit_byte;
    440                                   Tcontrol_t        check_hit      = _load_queue [index_load ]._check_hit;
    441                                   uint32_t          load_size_access  = memory_size(_load_queue [index_load ]._operation)>>3;
    442                                   uint32_t          store_size_access = memory_size(_store_queue[index_store]._operation)>>3;
     447                                  Tgeneral_data_t   load_data      = _load_queue [index_load_queue ]._rdata  ;
     448                                  Tgeneral_data_t   store_data     = _store_queue[store_queue_ptr_write]._wdata  ;
     449                                  Tdcache_address_t check_hit_byte = _load_queue [index_load_queue ]._check_hit_byte;
     450                                  Tcontrol_t        check_hit      = _load_queue [index_load_queue ]._check_hit;
     451                                  uint32_t          load_size_access  = memory_size(_load_queue [index_load_queue ]._operation)>>3;
     452                                  uint32_t          store_size_access = memory_size(_store_queue[store_queue_ptr_write]._operation)>>3;
    443453
    444454                                  log_printf(TRACE,Load_store_unit,FUNCTION,"            * is_big_endian           : %d",is_big_endian);
     
    464474                                    }
    465475
    466                                   uint32_t store_nb_byte     = (1<<memory_access(_store_queue[index_store]._operation));
     476                                  uint32_t store_nb_byte     = (1<<memory_access(_store_queue[store_queue_ptr_write]._operation));
    467477
    468478                                  // Take interval to the store
     
    473483                                  log_printf(TRACE,Load_store_unit,FUNCTION,"            * store_num_byte_max      : %d",store_num_byte_max);
    474484
    475 //                                   uint32_t load_nb_byte      = (1<<memory_access(_load_queue[index_load]._operation));
     485//                                   uint32_t load_nb_byte      = (1<<memory_access(_load_queue[index_load_queue]._operation));
    476486
    477487//                                uint32_t load_num_byte_min = (load_addr & _param->_mask_address_lsb);
     
    517527
    518528//                                           // store duplicate = all store access can be see as full size_data store
    519 // //                                           uint32_t load_nb_byte = (1<<memory_access(_load_queue [index_load ]._operation));
     529// //                                           uint32_t load_nb_byte = (1<<memory_access(_load_queue [index_load_queue ]._operation));
    520530
    521531// //                                           int32_t diff = ((_param->_size_general_data>>3)+load_nb_byte-2*load_nb_byte*((num_store_byte/load_nb_byte)+1));
     
    597607                                    }
    598608
    599                                   _load_queue[index_load]._rdata          = load_data;
    600                                   _load_queue[index_load]._check_hit_byte = check_hit_byte;
    601                                   _load_queue[index_load]._check_hit      = check_hit;
     609                                  _load_queue[index_load_queue]._rdata          = load_data;
     610                                  _load_queue[index_load_queue]._check_hit_byte = check_hit_byte;
     611                                  _load_queue[index_load_queue]._check_hit      = check_hit;
    602612
    603613                                  log_printf(TRACE,Load_store_unit,FUNCTION,"            * load_data  (after) : 0x%.8x",load_data);
     
    609619                                  log_printf(TRACE,Load_store_unit,FUNCTION,"            * mask_check_hit_byte: %x",_param->_mask_check_hit_byte);
    610620                                  // The check is finish if all bit is set
    611                                   end_check = (_load_queue[index_load]._check_hit_byte == _param->_mask_check_hit_byte);
     621                                  end_check = (_load_queue[index_load_queue]._check_hit_byte == _param->_mask_check_hit_byte);
    612622
    613623                                }
     
    629639                  {
    630640                    log_printf(TRACE,Load_store_unit,FUNCTION,"              * next");
    631                     log_printf(TRACE,Load_store_unit,FUNCTION,"                * new store_queue_ptr_write : %d",index_store);
     641                    log_printf(TRACE,Load_store_unit,FUNCTION,"                * new store_queue_ptr_write : %d",store_queue_ptr_write);
    632642
    633643                    log_printf(TRACE,Load_store_unit,FUNCTION,"              * update reg_STORE_QUEUE_NB_CHECK");
    634644#ifdef DEBUG
    635                     if (reg_STORE_QUEUE_NB_CHECK [index_store] == 0)
     645                    if (reg_STORE_QUEUE_NB_CHECK [store_queue_ptr_write] == 0)
    636646                      throw ERRORMORPHEO(FUNCTION,_("reg_STORE_QUEUE_NB_CHECK must be > 0\n"));
    637647#endif
    638                     reg_STORE_QUEUE_NB_CHECK [index_store] --;
    639 
    640 //                  if (_load_queue[index_load]._store_queue_ptr_write == 0)
    641 //                    _load_queue[index_load]._store_queue_ptr_write = _param->_size_store_queue-1;
     648
     649                    reg_STORE_QUEUE_NB_CHECK [store_queue_ptr_write] --;
     650
     651                    log_printf(TRACE,Load_store_unit,FUNCTION,"              * reg_STORE_QUEUE_NB_CHECK 1 [%d] <- %d", store_queue_ptr_write,reg_STORE_QUEUE_NB_CHECK [store_queue_ptr_write]);
     652
     653                    if ((store_queue_ptr_write ==     store_queue_ptr_read) or
     654                        (store_queue_ptr_write == reg_STORE_QUEUE_PTR_READ))
     655                      {
     656//                      store_queue_empty = true;
     657                        end_check         = true;
     658                        change_state      = true;
     659                      }
     660
     661//                  if (_load_queue[index_load_queue]._store_queue_ptr_write == 0)
     662//                    _load_queue[index_load_queue]._store_queue_ptr_write = _param->_size_store_queue-1;
    642663//                  else
    643 //                    _load_queue[index_load]._store_queue_ptr_write --;
    644                     _load_queue[index_load]._store_queue_ptr_write = index_store; // because the index store have be decrease
    645 
    646                     // FIXME : peut n'est pas obliger de faire cette comparaison. Au prochain cycle on le détectera que les pointeur sont égaux. Ceci évitera d'avoir deux comparateurs avec le registre "reg_STORE_QUEUE_PTR_READ"
    647                     if (index_store == reg_STORE_QUEUE_PTR_READ)
    648                       {
    649                         end_check    = true;
    650                         change_state = true;
    651                       }
     664//                    _load_queue[index_load_queue]._store_queue_ptr_write --;
     665                    _load_queue[index_load_queue]._store_queue_ptr_write = store_queue_ptr_write; // because the index store have be decrease
     666                    _load_queue[index_load_queue]._store_queue_empty     = store_queue_empty; // because the index store have be decrease
     667
     668                    // FIXME : peut n'est pas obliger de faire cette comparaison. Au prochain cycle on le détectera que les pointeur sont égaux. Ceci évitera d'avoir deux comparateurs avec le registre "store_queue_ptr_read"
    652669                  }
    653670
     
    657674                    log_printf(TRACE,Load_store_unit,FUNCTION,"              * end_check : %d",end_check);
    658675
    659                     log_printf(TRACE,Load_store_unit,FUNCTION,"                * state old : %s",toString(_load_queue[index_load]._state).c_str());
    660 
    661                     switch (_load_queue[index_load]._state)
     676                    log_printf(TRACE,Load_store_unit,FUNCTION,"                * state old : %s",toString(_load_queue[index_load_queue]._state).c_str());
     677
     678                    switch (_load_queue[index_load_queue]._state)
    662679                      {
    663680                      case LOAD_QUEUE_WAIT_CHECK   :
    664681                        {
    665682                          if (end_check)
    666                             _load_queue[index_load]._state = LOAD_QUEUE_WAIT  ;
     683                            _load_queue[index_load_queue]._state = LOAD_QUEUE_WAIT  ;
    667684                          break;
    668685                        }
     
    670687                        {
    671688                          if (end_check)
    672                             _load_queue[index_load]._state = LOAD_QUEUE_COMMIT;
     689                            _load_queue[index_load_queue]._state = LOAD_QUEUE_COMMIT;
    673690                          else
    674                             _load_queue[index_load]._state = LOAD_QUEUE_CHECK; // No commit : check hit and no end
     691                            _load_queue[index_load_queue]._state = LOAD_QUEUE_CHECK; // No commit : check hit and no end
    675692                          break;
    676693                        }
     
    678695                        {
    679696                          if (end_check)
    680                             _load_queue[index_load]._state     = LOAD_QUEUE_COMMIT;
     697                            _load_queue[index_load_queue]._state     = LOAD_QUEUE_COMMIT;
    681698
    682699                          // check find a bypass. A speculative load have been committed : report a speculation miss.
    683                           if ((_load_queue[index_load]._check_hit != 0) and
    684                               (_load_queue[index_load]._write_rd  == 0) // is commit
     700                          if ((_load_queue[index_load_queue]._check_hit != 0) and
     701                              (_load_queue[index_load_queue]._write_rd  == 0) // is commit
    685702                              )
    686703                            {
    687                               _load_queue[index_load]._exception = EXCEPTION_MEMORY_MISS_SPECULATION;
    688                               _load_queue[index_load]._write_rd  = 1; // write the good result
     704                              _load_queue[index_load_queue]._exception = EXCEPTION_MEMORY_MISS_SPECULATION;
     705                              _load_queue[index_load_queue]._write_rd  = 1; // write the good result
    689706
    690707#ifdef STATISTICS
     
    698715                      default : break;
    699716                      }
    700                     log_printf(TRACE,Load_store_unit,FUNCTION,"                * state new : %s",toString(_load_queue[index_load]._state).c_str());
    701                     log_printf(TRACE,Load_store_unit,FUNCTION,"                * exception : %d",_load_queue[index_load]._exception);
    702 
    703                     if (end_check)
     717                    log_printf(TRACE,Load_store_unit,FUNCTION,"                * state new : %s",toString(_load_queue[index_load_queue]._state).c_str());
     718                    log_printf(TRACE,Load_store_unit,FUNCTION,"                * exception : %d",_load_queue[index_load_queue]._exception);
     719
     720                    if (end_check//  and not store_queue_empty
     721                        )
    704722                      {
    705723                        log_printf(TRACE,Load_store_unit,FUNCTION,"                * end check, decrease all nb_check");
    706724                       
    707                         uint32_t i=index_store;
    708                         while (i!=reg_STORE_QUEUE_PTR_READ)
     725                        uint32_t i=store_queue_ptr_write;
     726                        while (i!=store_queue_ptr_read)
    709727                          {
    710728                            i=((i==0)?_param->_size_store_queue:i)-1;
     
    714732                              throw ERRORMORPHEO(FUNCTION,_("reg_STORE_QUEUE_NB_CHECK must be > 0\n"));
    715733#endif
    716                            
     734                           
    717735                            reg_STORE_QUEUE_NB_CHECK [i] --;
     736
     737                            log_printf(TRACE,Load_store_unit,FUNCTION,"              * reg_STORE_QUEUE_NB_CHECK 2 [%d] <- %d", i,reg_STORE_QUEUE_NB_CHECK [i]);
     738
    718739                            //i=(i+1)%_param->_size_store_queue;
    719740                          }
     741                       
     742                        _load_queue[index_load_queue]._store_queue_empty = true; // end of check
    720743                      }
    721744                  }
     
    856879                    _store_queue [index]._load_queue_ptr_write = (not _param->_have_port_load_queue_ptr)?0:PORT_READ(in_MEMORY_IN_LOAD_QUEUE_PTR_WRITE[internal_MEMORY_IN_PORT]);
    857880                    _store_queue [index]._address              = address;
     881                    _store_queue [index]._send_commit          = false;
    858882
    859883                    // reordering data
     
    895919                _speculative_access_queue [index]._load_queue_ptr_write = (not _param->_have_port_load_queue_ptr)?0:PORT_READ(in_MEMORY_IN_LOAD_QUEUE_PTR_WRITE[internal_MEMORY_IN_PORT]);
    896920                _speculative_access_queue [index]._store_queue_ptr_write= PORT_READ(in_MEMORY_IN_STORE_QUEUE_PTR_WRITE[internal_MEMORY_IN_PORT]);
     921                _speculative_access_queue [index]._store_queue_ptr_read = PORT_READ(in_MEMORY_IN_STORE_QUEUE_PTR_READ [internal_MEMORY_IN_PORT]);
     922                _speculative_access_queue [index]._store_queue_empty    = PORT_READ(in_MEMORY_IN_STORE_QUEUE_EMPTY    [internal_MEMORY_IN_PORT]);
    897923                _speculative_access_queue [index]._address              = address;
    898924                // NOTE : is operation is a load, then they are a result and must write in the register file
     
    954980            bool         have_exception = (exception != EXCEPTION_MEMORY_NONE);
    955981            bool         need_check= false;
     982            Tlsq_ptr_t        store_queue_ptr_write = _speculative_access_queue [internal_SPECULATIVE_ACCESS_QUEUE_PTR_READ]._store_queue_ptr_write;
     983            Tlsq_ptr_t        store_queue_ptr_read  = _speculative_access_queue [internal_SPECULATIVE_ACCESS_QUEUE_PTR_READ]._store_queue_ptr_read ;
     984            Tcontrol_t        store_queue_empty     = _speculative_access_queue [internal_SPECULATIVE_ACCESS_QUEUE_PTR_READ]._store_queue_empty    ;
    956985           
    957986            if (have_exception)
     
    962991                  {
    963992                    // load and synchronisation
    964                     if (must_check(operation))
     993                    if (must_check(operation) and not store_queue_empty)
    965994                      {
    966995                        // load
    967996                        need_check = true;
     997                       
    968998                        _load_queue [ptr_write]._state = LOAD_QUEUE_WAIT_CHECK;
    969999                      }
     
    9841014            Tdcache_address_t address_lsb    = (address & _param->_mask_address_lsb);
    9851015            Tdcache_address_t check_hit_byte = gen_mask_not<Tdcache_address_t>(address_lsb+(memory_size(operation)>>3)-1,address_lsb) & _param->_mask_check_hit_byte;
    986             Tlsq_ptr_t        store_queue_ptr_write = _speculative_access_queue [internal_SPECULATIVE_ACCESS_QUEUE_PTR_READ]._store_queue_ptr_write;
    9871016
    9881017            log_printf(TRACE,Load_store_unit,FUNCTION,"    * address                 : 0x%.8x", address);
     
    9981027            _load_queue [ptr_write]._operation             = operation;
    9991028            _load_queue [ptr_write]._store_queue_ptr_write = store_queue_ptr_write;
     1029            _load_queue [ptr_write]._store_queue_ptr_read  = store_queue_ptr_read ;
     1030            _load_queue [ptr_write]._store_queue_empty     = store_queue_empty    ;
    10001031            _load_queue [ptr_write]._address               = address;
    10011032            _load_queue [ptr_write]._check_hit_byte        = check_hit_byte;
     
    10231054
    10241055            // Only load need check
    1025             if (need_check)
     1056            if (need_check//  and not store_queue_empty
     1057                )
    10261058//             if (is_operation_memory_load(_load_queue [ptr_write]._operation))
    10271059              {
    10281060                log_printf(TRACE,Load_store_unit,FUNCTION,"    * update nb_check");
    10291061                log_printf(TRACE,Load_store_unit,FUNCTION,"      *     store_queue_ptr_write : %d",store_queue_ptr_write);
     1062                log_printf(TRACE,Load_store_unit,FUNCTION,"      *     store_queue_ptr_read  : %d",store_queue_ptr_read );
     1063                log_printf(TRACE,Load_store_unit,FUNCTION,"      *     store_queue_empty     : %d",store_queue_empty    );
    10301064                log_printf(TRACE,Load_store_unit,FUNCTION,"      * reg_STORE_QUEUE_PTR_READ  : %d",reg_STORE_QUEUE_PTR_READ);
    10311065               
    10321066                uint32_t i=store_queue_ptr_write;
    1033                 while (i!=reg_STORE_QUEUE_PTR_READ)
     1067                while (i!=store_queue_ptr_read)
    10341068                  {
    10351069                    i=((i==0)?_param->_size_store_queue:i)-1;
     
    10381072                   
    10391073                    reg_STORE_QUEUE_NB_CHECK [i] ++;
     1074
     1075                    log_printf(TRACE,Load_store_unit,FUNCTION,"              * reg_STORE_QUEUE_NB_CHECK 3 [%d] <- %d", i,reg_STORE_QUEUE_NB_CHECK [i]);
    10401076                  }
    10411077              }
     
    10971133
    10981134                   
    1099                     uint32_t i=_load_queue[packet_id]._store_queue_ptr_write;
    1100                     while (i!=reg_STORE_QUEUE_PTR_READ)
    1101                       {
    1102                         i=((i==0)?_param->_size_store_queue:i)-1;
    1103                        
     1135                    log_printf(TRACE,Load_store_unit,FUNCTION,"      * store_queue_ptr_write : %d", _load_queue[packet_id]._store_queue_ptr_write);
     1136                    log_printf(TRACE,Load_store_unit,FUNCTION,"      * store_queue_ptr_read  : %d", _load_queue[packet_id]._store_queue_ptr_read );
     1137                    log_printf(TRACE,Load_store_unit,FUNCTION,"      * store_queue_empty     : %d", _load_queue[packet_id]._store_queue_empty    );
     1138
     1139                    if (not _load_queue[packet_id]._store_queue_empty)
     1140                      {
     1141                        uint32_t i=_load_queue[packet_id]._store_queue_ptr_write;
     1142                       
     1143                        while (i!=_load_queue[packet_id]._store_queue_ptr_read)
     1144                          {
     1145                            i=((i==0)?_param->_size_store_queue:i)-1;
     1146                           
    11041147#ifdef DEBUG
    1105                         if (reg_STORE_QUEUE_NB_CHECK [i] == 0)
    1106                           throw ERRORMORPHEO(FUNCTION,_("reg_STORE_QUEUE_NB_CHECK must be > 0\n"));
     1148                            if (reg_STORE_QUEUE_NB_CHECK [i] == 0)
     1149                              throw ERRORMORPHEO(FUNCTION,_("reg_STORE_QUEUE_NB_CHECK must be > 0\n"));
    11071150#endif
    1108                        
    1109                         reg_STORE_QUEUE_NB_CHECK [i] --;
    1110                         //i=(i+1)%_param->_size_store_queue;
    1111                       }
     1151                           
     1152                            reg_STORE_QUEUE_NB_CHECK [i] --;
     1153
     1154                            log_printf(TRACE,Load_store_unit,FUNCTION,"              * reg_STORE_QUEUE_NB_CHECK 4 [%d] <- %d", i,reg_STORE_QUEUE_NB_CHECK [i]);
     1155
     1156                            //i=(i+1)%_param->_size_store_queue;
     1157                          }
     1158                        _load_queue[packet_id]._store_queue_empty = true; // end of check
     1159
     1160                      }
    11121161                  }
    11131162                else
     
    11501199            uint32_t j = (reg_STORE_QUEUE_PTR_READ+i)%_param->_size_store_queue;
    11511200
    1152             log_printf(TRACE,Load_store_unit,FUNCTION,"    [%.4d] %.4d %.4d %.4d, %.4d, %.4d, %.4d, %.8x %.8x, %.2d, %.2d %s",
     1201            log_printf(TRACE,Load_store_unit,FUNCTION,"    [%.4d] %.4d %.4d %.4d, %.4d, %.4d, %.4d, %.8x %.8x, %.2d %.1d, %.2d %s",
    11531202                       j,
    11541203                       _store_queue[j]._context_id          ,
     
    11631212                     //_store_queue[j]._num_reg_rd          ,
    11641213                       _store_queue[j]._exception           ,
     1214                       _store_queue[j]._send_commit         ,
    11651215                       reg_STORE_QUEUE_NB_CHECK  [j]        ,
    11661216                       toString(_store_queue[j]._state).c_str());
     
    11741224            uint32_t j = (*_speculative_access_queue_control)[i];
    11751225
    1176             log_printf(TRACE,Load_store_unit,FUNCTION,"    [%.4d] %.4d %.4d %.4d, %.4d, %.4d, %.4d %.4d, %.8x, %.1d %.4d, %.2d, %s",
     1226            log_printf(TRACE,Load_store_unit,FUNCTION,"    [%.4d] %.4d %.4d %.4d, %.4d, %.4d, %.4d %.4d %.4d %.1d, %.8x, %.1d %.4d, %.2d, %s",
    11771227                       j,
    11781228                       _speculative_access_queue[j]._context_id          ,
     
    11831233                       _speculative_access_queue[j]._load_queue_ptr_write,
    11841234                       _speculative_access_queue[j]._store_queue_ptr_write,
     1235                       _speculative_access_queue[j]._store_queue_ptr_read ,
     1236                       _speculative_access_queue[j]._store_queue_empty    ,
    11851237                       _speculative_access_queue[j]._address             ,
    11861238                       _speculative_access_queue[j]._write_rd            ,
     
    11981250            uint32_t j = i;
    11991251
    1200             log_printf(TRACE,Load_store_unit,FUNCTION,"    [%.4d] %.4d %.4d %.4d, %.4d, %.4d, %.4d, %.8x %.1x %.1d %.2d %.1d %.2d, %.8x, %.1d %.4d, %.2d, %s",
     1252            log_printf(TRACE,Load_store_unit,FUNCTION,"    [%.4d] %.4d %.4d %.4d, %.4d, %.4d, %.4d %.4d %.1d, %.8x %.1x %.1d %.2d %.1d %.2d, %.8x, %.1d %.4d, %.2d, %s",
    12011253                       j,
    12021254                       _load_queue[j]._context_id          ,
     
    12061258                       _load_queue[j]._operation           ,
    12071259                       _load_queue[j]._store_queue_ptr_write,
     1260                       _load_queue[j]._store_queue_ptr_read ,
     1261                       _load_queue[j]._store_queue_empty    ,
    12081262                       _load_queue[j]._address             ,
    12091263                       _load_queue[j]._check_hit_byte      ,
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/include/Read_queue.h

    r88 r122  
    7373  public    : SC_IN (Ttype_t           )    *  in_READ_QUEUE_IN_TYPE                 ;
    7474  public    : SC_IN (Tlsq_ptr_t        )    *  in_READ_QUEUE_IN_STORE_QUEUE_PTR_WRITE;
     75  public    : SC_IN (Tlsq_ptr_t        )    *  in_READ_QUEUE_IN_STORE_QUEUE_PTR_READ ;
     76  public    : SC_IN (Tcontrol_t        )    *  in_READ_QUEUE_IN_STORE_QUEUE_EMPTY    ;
    7577  public    : SC_IN (Tlsq_ptr_t        )    *  in_READ_QUEUE_IN_LOAD_QUEUE_PTR_WRITE ;
    7678  public    : SC_IN (Tcontrol_t        )    *  in_READ_QUEUE_IN_HAS_IMMEDIAT         ;
     
    98100  public    : SC_OUT(Ttype_t           )    * out_READ_QUEUE_OUT_TYPE                 ;
    99101  public    : SC_OUT(Tlsq_ptr_t        )    * out_READ_QUEUE_OUT_STORE_QUEUE_PTR_WRITE;
     102  public    : SC_OUT(Tlsq_ptr_t        )    * out_READ_QUEUE_OUT_STORE_QUEUE_PTR_READ ;
     103  public    : SC_OUT(Tcontrol_t        )    * out_READ_QUEUE_OUT_STORE_QUEUE_EMPTY    ;
    100104  public    : SC_OUT(Tlsq_ptr_t        )    * out_READ_QUEUE_OUT_LOAD_QUEUE_PTR_WRITE ;
    101105  public    : SC_OUT(Tcontrol_t        )    * out_READ_QUEUE_OUT_HAS_IMMEDIAT         ;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/include/Types.h

    r117 r122  
    2929  public    : Ttype_t            _type         ;
    3030  public    : Tlsq_ptr_t         _store_queue_ptr_write;
     31  public    : Tlsq_ptr_t         _store_queue_ptr_read ;
     32  public    : Tcontrol_t         _store_queue_empty    ;
    3133  public    : Tlsq_ptr_t         _load_queue_ptr_write;
    3234  public    : Tcontrol_t         _has_immediat ;
     
    5355                    << " * _type                  : " << toString(x._type         ) << std::endl
    5456                    << " * _store_queue_ptr_write : " << toString(x._store_queue_ptr_write) << std::endl
     57                    << " * _store_queue_ptr_read  : " << toString(x._store_queue_ptr_read ) << std::endl
     58                    << " * _store_queue_empty     : " << toString(x._store_queue_empty    ) << std::endl
    5559                    << " * _load_queue_ptr_write  : " << toString(x._load_queue_ptr_write ) << std::endl
    5660                    << " * _has_immediat          : " << toString(x._has_immediat ) << std::endl
     
    8185  public    : Ttype_t            _type         ;
    8286  public    : Tlsq_ptr_t         _store_queue_ptr_write;
     87  public    : Tlsq_ptr_t         _store_queue_ptr_read ;
     88  public    : Tcontrol_t         _store_queue_empty    ;
    8389  public    : Tlsq_ptr_t         _load_queue_ptr_write;
    8490  public    : Tcontrol_t         _has_immediat ;
     
    117123      _type                  = x._type         ;
    118124      _store_queue_ptr_write = x._store_queue_ptr_write;
     125      _store_queue_ptr_read  = x._store_queue_ptr_read ;
     126      _store_queue_empty     = x._store_queue_empty    ;
    119127      _load_queue_ptr_write  = x._load_queue_ptr_write ;
    120128      _has_immediat          = x._has_immediat ;
     
    157165                    << " * _type                  : " << x._type         << std::endl
    158166                    << " * _store_queue_ptr_write : " << toString(x._store_queue_ptr_write) << std::endl
     167                    << " * _store_queue_ptr_read  : " << toString(x._store_queue_ptr_read ) << std::endl
     168                    << " * _store_queue_empty     : " << toString(x._store_queue_empty    ) << std::endl
    159169                    << " * _load_queue_ptr_write  : " << toString(x._load_queue_ptr_write ) << std::endl
    160170                    << " * _has_immediat          : " << x._has_immediat << std::endl
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/src/Read_queue_allocation.cpp

    r112 r122  
    6262      ALLOC0_SIGNAL_IN ( in_READ_QUEUE_IN_TYPE                 ,"type"                 ,Ttype_t           ,_param->_size_type            );
    6363      ALLOC0_SIGNAL_IN ( in_READ_QUEUE_IN_STORE_QUEUE_PTR_WRITE,"store_queue_ptr_write",Tlsq_ptr_t        ,_param->_size_store_queue_ptr);
     64      ALLOC0_SIGNAL_IN ( in_READ_QUEUE_IN_STORE_QUEUE_PTR_READ ,"store_queue_ptr_read" ,Tlsq_ptr_t        ,_param->_size_store_queue_ptr);
     65      ALLOC0_SIGNAL_IN ( in_READ_QUEUE_IN_STORE_QUEUE_EMPTY    ,"store_queue_empty"    ,Tcontrol_t        ,1);
    6466      ALLOC0_SIGNAL_IN ( in_READ_QUEUE_IN_LOAD_QUEUE_PTR_WRITE ,"load_queue_ptr_write" ,Tlsq_ptr_t        ,_param->_size_load_queue_ptr);
    6567      ALLOC0_SIGNAL_IN ( in_READ_QUEUE_IN_HAS_IMMEDIAT         ,"has_immediat"         ,Tcontrol_t        ,1                             );
     
    9294      ALLOC0_SIGNAL_OUT(out_READ_QUEUE_OUT_TYPE                  ,"type"                 ,Ttype_t           ,_param->_size_type             );
    9395      ALLOC0_SIGNAL_OUT(out_READ_QUEUE_OUT_STORE_QUEUE_PTR_WRITE ,"store_queue_ptr_write",Tlsq_ptr_t        , _param->_size_store_queue_ptr );
     96      ALLOC0_SIGNAL_OUT(out_READ_QUEUE_OUT_STORE_QUEUE_PTR_READ  ,"store_queue_ptr_read" ,Tlsq_ptr_t        , _param->_size_store_queue_ptr );
     97      ALLOC0_SIGNAL_OUT(out_READ_QUEUE_OUT_STORE_QUEUE_EMPTY     ,"store_queue_empty"    ,Tcontrol_t        ,1                              );
    9498      ALLOC0_SIGNAL_OUT(out_READ_QUEUE_OUT_LOAD_QUEUE_PTR_WRITE  ,"load_queue_ptr_write" ,Tlsq_ptr_t        , _param->_size_load_queue_ptr  );
    9599      ALLOC0_SIGNAL_OUT(out_READ_QUEUE_OUT_HAS_IMMEDIAT          ,"has_immediat"         ,Tcontrol_t        ,1                              );
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/src/Read_queue_deallocation.cpp

    r112 r122  
    3838        DELETE0_SIGNAL( in_READ_QUEUE_IN_TYPE                  ,_param->_size_type            );
    3939        DELETE0_SIGNAL( in_READ_QUEUE_IN_STORE_QUEUE_PTR_WRITE ,_param->_size_store_queue_ptr );
     40        DELETE0_SIGNAL( in_READ_QUEUE_IN_STORE_QUEUE_PTR_READ  ,_param->_size_store_queue_ptr );
     41        DELETE0_SIGNAL( in_READ_QUEUE_IN_STORE_QUEUE_EMPTY     ,1                             );
    4042        DELETE0_SIGNAL( in_READ_QUEUE_IN_LOAD_QUEUE_PTR_WRITE  ,_param->_size_load_queue_ptr  );
    4143        DELETE0_SIGNAL( in_READ_QUEUE_IN_HAS_IMMEDIAT          ,1                             );
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/src/Read_queue_genMoore.cpp

    r111 r122  
    4545    PORT_WRITE (out_READ_QUEUE_OUT_TYPE        , _queue_head->_type        );
    4646    PORT_WRITE (out_READ_QUEUE_OUT_STORE_QUEUE_PTR_WRITE, _queue_head->_store_queue_ptr_write);
     47    PORT_WRITE (out_READ_QUEUE_OUT_STORE_QUEUE_PTR_READ , _queue_head->_store_queue_ptr_read );
     48    PORT_WRITE (out_READ_QUEUE_OUT_STORE_QUEUE_EMPTY    , _queue_head->_store_queue_empty    );
    4749    if (_param->_have_port_load_queue_ptr)
    4850    PORT_WRITE (out_READ_QUEUE_OUT_LOAD_QUEUE_PTR_WRITE , _queue_head->_load_queue_ptr_write );
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/src/Read_queue_transition.cpp

    r117 r122  
    7575            entry->_type         = PORT_READ(in_READ_QUEUE_IN_TYPE        );
    7676            entry->_store_queue_ptr_write = PORT_READ(in_READ_QUEUE_IN_STORE_QUEUE_PTR_WRITE);
     77            entry->_store_queue_ptr_read  = PORT_READ(in_READ_QUEUE_IN_STORE_QUEUE_PTR_READ );
     78            entry->_store_queue_empty     = PORT_READ(in_READ_QUEUE_IN_STORE_QUEUE_EMPTY    );
    7779            if (_param->_have_port_load_queue_ptr)
    7880            entry->_load_queue_ptr_write  = PORT_READ(in_READ_QUEUE_IN_LOAD_QUEUE_PTR_WRITE );
     
    151153        if (_queue->size()>0)
    152154          {
    153             log_printf(TRACE,Read_queue,FUNCTION,"    * [%.4d] %.2d %.2d %.2d %.4d, %.2d %.3d, %.2d %.2d, %.1d %.8x, %.1d %.1d %.4d %.1d %.8x, %.1d %.1d %.4d %.1d %.8x, %.1d %.1d %.4d %.1d %.2x, %.1d %.4d, %.1d %.4d (%s)",
     155            log_printf(TRACE,Read_queue,FUNCTION,"    * [%.4d] %.2d %.2d %.2d %.4d, %.2d %.3d, %.2d %.2d %.1d %.2d, %.1d %.8x, %.1d %.1d %.4d %.1d %.8x, %.1d %.1d %.4d %.1d %.8x, %.1d %.1d %.4d %.1d %.2x, %.1d %.4d, %.1d %.4d (%s)",
    154156                       0,
    155157
     
    163165
    164166                       _queue_head->_store_queue_ptr_write,
     167                       _queue_head->_store_queue_ptr_read ,
     168                       _queue_head->_store_queue_empty    ,
    165169                       _queue_head->_load_queue_ptr_write ,
    166170
     
    201205            for (;it!=_queue->end(); ++it)
    202206              {
    203                 log_printf(TRACE,Read_queue,FUNCTION,"    * [%.4d] %.2d %.2d %.2d %.4d, %.2d %.3d, %.2d %.2d, %.1d %.8x, %.1d   %.4d           , %.1d   %.4d           , %.1d   %.4d     , %.1d %.4d, %.1d %.4d (%s)",
     207                log_printf(TRACE,Read_queue,FUNCTION,"    * [%.4d] %.2d %.2d %.2d %.4d, %.2d %.3d, %.2d %.2d %.1d %.2d, %.1d %.8x, %.1d   %.4d           , %.1d   %.4d           , %.1d   %.4d     , %.1d %.4d, %.1d %.4d (%s)",
    204208                           i,
    205209                           
     
    213217                           
    214218                           (*it)->_store_queue_ptr_write,
     219                           (*it)->_store_queue_ptr_read ,
     220                           (*it)->_store_queue_empty    ,
    215221                           (*it)->_load_queue_ptr_write ,
    216222                           
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Reservation_station/include/Reservation_station.h

    r82 r122  
    7474  public    : SC_IN (Ttype_t           )    *  in_INSERT_TYPE           ;
    7575  public    : SC_IN (Tlsq_ptr_t        )    *  in_INSERT_STORE_QUEUE_PTR_WRITE;
     76  public    : SC_IN (Tlsq_ptr_t        )    *  in_INSERT_STORE_QUEUE_PTR_READ ;
     77  public    : SC_IN (Tcontrol_t        )    *  in_INSERT_STORE_QUEUE_EMPTY    ;
    7678  public    : SC_IN (Tlsq_ptr_t        )    *  in_INSERT_LOAD_QUEUE_PTR_WRITE ;
    7779  public    : SC_IN (Tcontrol_t        )    *  in_INSERT_HAS_IMMEDIAT   ;
     
    104106  public    : SC_OUT(Ttype_t           )   ** out_RETIRE_TYPE           ;
    105107  public    : SC_OUT(Tlsq_ptr_t        )   ** out_RETIRE_STORE_QUEUE_PTR_WRITE;
     108  public    : SC_OUT(Tlsq_ptr_t        )   ** out_RETIRE_STORE_QUEUE_PTR_READ ;
     109  public    : SC_OUT(Tcontrol_t        )   ** out_RETIRE_STORE_QUEUE_EMPTY    ;
    106110  public    : SC_OUT(Tlsq_ptr_t        )   ** out_RETIRE_LOAD_QUEUE_PTR_WRITE ;
    107111  public    : SC_OUT(Tcontrol_t        )   ** out_RETIRE_HAS_IMMEDIAT   ;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Reservation_station/include/Types.h

    r82 r122  
    2929  public    : Ttype_t            _type        ;
    3030  public    : Tlsq_ptr_t         _store_queue_ptr_write;
     31  public    : Tlsq_ptr_t         _store_queue_ptr_read ;
     32  public    : Tcontrol_t         _store_queue_empty    ;
    3133  public    : Tlsq_ptr_t         _load_queue_ptr_write ;
    3234  public    : Tcontrol_t         _has_immediat;
     
    5961                    << " * _type                  : " << toString(x._type           ) << std::endl
    6062                    << " * _store_queue_ptr_write : " << toString(x._store_queue_ptr_write) << std::endl
     63                    << " * _store_queue_ptr_read  : " << toString(x._store_queue_ptr_read ) << std::endl
     64                    << " * _store_queue_empty     : " << toString(x._store_queue_empty    ) << std::endl
    6165                    << " * _load_queue_ptr_write  : " << toString(x._load_queue_ptr_write ) << std::endl
    6266                    << " * _has_immediat          : " << toString(x._has_immediat   ) << std::endl
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Reservation_station/src/Reservation_station_allocation.cpp

    r112 r122  
    6464       ALLOC0_SIGNAL_IN ( in_INSERT_TYPE                 ,"type"                 ,Ttype_t           ,_param->_size_type            );
    6565       ALLOC0_SIGNAL_IN ( in_INSERT_STORE_QUEUE_PTR_WRITE,"store_queue_ptr_write",Tlsq_ptr_t        ,_param->_size_store_queue_ptr );
     66       ALLOC0_SIGNAL_IN ( in_INSERT_STORE_QUEUE_PTR_READ ,"store_queue_ptr_read" ,Tlsq_ptr_t        ,_param->_size_store_queue_ptr );
     67       ALLOC0_SIGNAL_IN ( in_INSERT_STORE_QUEUE_EMPTY    ,"store_queue_empty"    ,Tcontrol_t        ,1                             );
    6668       ALLOC0_SIGNAL_IN ( in_INSERT_LOAD_QUEUE_PTR_WRITE ,"load_queue_ptr_write" ,Tlsq_ptr_t        ,_param->_size_load_queue_ptr  );
    6769       ALLOC0_SIGNAL_IN ( in_INSERT_HAS_IMMEDIAT         ,"has_immediat"         ,Tcontrol_t        ,1                             );
     
    100102       ALLOC1_SIGNAL_OUT(out_RETIRE_TYPE                 ,"type"                 ,Ttype_t           ,_param->_size_type);
    101103       ALLOC1_SIGNAL_OUT(out_RETIRE_STORE_QUEUE_PTR_WRITE,"store_queue_ptr_write",Tlsq_ptr_t        ,_param->_size_store_queue_ptr);
     104       ALLOC1_SIGNAL_OUT(out_RETIRE_STORE_QUEUE_PTR_READ ,"store_queue_ptr_read" ,Tlsq_ptr_t        ,_param->_size_store_queue_ptr);
     105       ALLOC1_SIGNAL_OUT(out_RETIRE_STORE_QUEUE_EMPTY    ,"store_queue_empty"    ,Tcontrol_t        ,1);
    102106       ALLOC1_SIGNAL_OUT(out_RETIRE_LOAD_QUEUE_PTR_WRITE ,"load_queue_ptr_write" ,Tlsq_ptr_t        ,_param->_size_load_queue_ptr );
    103107       ALLOC1_SIGNAL_OUT(out_RETIRE_HAS_IMMEDIAT         ,"has_immediat"         ,Tcontrol_t        ,1);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Reservation_station/src/Reservation_station_deallocation.cpp

    r112 r122  
    4343        DELETE0_SIGNAL( in_INSERT_TYPE                 ,_param->_size_type            );
    4444        DELETE0_SIGNAL( in_INSERT_STORE_QUEUE_PTR_WRITE,_param->_size_store_queue_ptr );
     45        DELETE0_SIGNAL( in_INSERT_STORE_QUEUE_PTR_READ ,_param->_size_store_queue_ptr );
     46        DELETE0_SIGNAL( in_INSERT_STORE_QUEUE_EMPTY    ,1);
    4547        DELETE0_SIGNAL( in_INSERT_LOAD_QUEUE_PTR_WRITE ,_param->_size_load_queue_ptr  );
    4648        DELETE0_SIGNAL( in_INSERT_HAS_IMMEDIAT         ,1                             );
     
    7274        DELETE1_SIGNAL(out_RETIRE_TYPE                 ,_param->_nb_inst_retire,_param->_size_type);
    7375        DELETE1_SIGNAL(out_RETIRE_STORE_QUEUE_PTR_WRITE,_param->_nb_inst_retire,_param->_size_store_queue_ptr);
     76        DELETE1_SIGNAL(out_RETIRE_STORE_QUEUE_PTR_READ ,_param->_nb_inst_retire,_param->_size_store_queue_ptr);
     77        DELETE1_SIGNAL(out_RETIRE_STORE_QUEUE_EMPTY    ,_param->_nb_inst_retire,1);
    7478        DELETE1_SIGNAL(out_RETIRE_LOAD_QUEUE_PTR_WRITE ,_param->_nb_inst_retire,_param->_size_load_queue_ptr );
    7579        DELETE1_SIGNAL(out_RETIRE_HAS_IMMEDIAT         ,_param->_nb_inst_retire,1);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Reservation_station/src/Reservation_station_genMoore.cpp

    r110 r122  
    113113            PORT_WRITE(out_RETIRE_TYPE          [i],_queue[index_find]._type);
    114114            PORT_WRITE(out_RETIRE_STORE_QUEUE_PTR_WRITE [i],_queue[index_find]._store_queue_ptr_write);
     115            PORT_WRITE(out_RETIRE_STORE_QUEUE_PTR_READ  [i],_queue[index_find]._store_queue_ptr_read );
     116            PORT_WRITE(out_RETIRE_STORE_QUEUE_EMPTY     [i],_queue[index_find]._store_queue_empty    );
    115117            if (_param->_have_port_load_queue_ptr)
    116118            PORT_WRITE(out_RETIRE_LOAD_QUEUE_PTR_WRITE  [i],_queue[index_find]._load_queue_ptr_write );
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Reservation_station/src/Reservation_station_transition.cpp

    r118 r122  
    2626      for (uint32_t it_dump=0;it_dump<_param->_size_queue; it_dump++)   \
    2727        if (_queue_valid [it_dump])                                     \
    28           log_printf(TRACE,Reservation_station,FUNCTION,"    * [%.4d] %.2d %.2d %.2d %.4d, %.2d %.3d, %.2d %.2d, %.1d %.8x, %.4d %.1d %.8x, %.4d %.1d %.8x, %.4d %.1d %.2x, %.1d %.4d, %.1d %.4d (%s)", \
     28          log_printf(TRACE,Reservation_station,FUNCTION,"    * [%.4d] %.2d %.2d %.2d %.4d, %.2d %.3d, %.2d %.2d %.1d %.2d, %.1d %.8x, %.4d %.1d %.8x, %.4d %.1d %.8x, %.4d %.1d %.2x, %.1d %.4d, %.1d %.4d (%s)", \
    2929                     it_dump,                                           \
    3030                     _queue[it_dump]._context_id           ,            \
     
    3535                     _queue[it_dump]._operation            ,            \
    3636                     _queue[it_dump]._store_queue_ptr_write,            \
     37                     _queue[it_dump]._store_queue_ptr_read ,            \
     38                     _queue[it_dump]._store_queue_empty    ,            \
    3739                     _queue[it_dump]._load_queue_ptr_write ,            \
    3840                     _queue[it_dump]._has_immediat         ,            \
     
    6163      for (uint32_t it_dump=0;it_dump<_param->_size_queue; it_dump++)   \
    6264        if (it_dump < _queue_control->nb_elt())                         \
    63           log_printf(TRACE,Reservation_station,FUNCTION,"    * [%.4d] %.2d %.2d %.2d %.4d, %.2d %.3d, %.2d %.2d, %.1d %.8x, %.4d %.1d %.8x, %.4d %.1d %.8x, %.4d %.1d %.2x, %.1d %.4d, %.1d %.4d (%s)", \
     65          log_printf(TRACE,Reservation_station,FUNCTION,"    * [%.4d] %.2d %.2d %.2d %.4d, %.2d %.3d, %.2d %.2d %.1d %.2d, %.1d %.8x, %.4d %.1d %.8x, %.4d %.1d %.8x, %.4d %.1d %.2x, %.1d %.4d, %.1d %.4d (%s)", \
    6466                     (*_queue_control)[it_dump],                        \
    6567                     _queue[(*_queue_control)[it_dump]]._context_id           , \
     
    7072                     _queue[(*_queue_control)[it_dump]]._operation            , \
    7173                     _queue[(*_queue_control)[it_dump]]._store_queue_ptr_write, \
     74                     _queue[(*_queue_control)[it_dump]]._store_queue_ptr_read , \
     75                     _queue[(*_queue_control)[it_dump]]._store_queue_empty    , \
    7276                     _queue[(*_queue_control)[it_dump]]._load_queue_ptr_write , \
    7377                     _queue[(*_queue_control)[it_dump]]._has_immediat         , \
     
    292296            _queue[index]._type            = PORT_READ(in_INSERT_TYPE           );
    293297            _queue[index]._store_queue_ptr_write = PORT_READ(in_INSERT_STORE_QUEUE_PTR_WRITE);
     298            _queue[index]._store_queue_ptr_read  = PORT_READ(in_INSERT_STORE_QUEUE_PTR_READ );
     299            _queue[index]._store_queue_empty     = PORT_READ(in_INSERT_STORE_QUEUE_EMPTY    );
    294300            if (_param->_have_port_load_queue_ptr)
    295301            _queue[index]._load_queue_ptr_write  = PORT_READ(in_INSERT_LOAD_QUEUE_PTR_WRITE );
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/include/Read_unit.h

    r82 r122  
    7474  public    : SC_IN (Ttype_t           )    *  in_READ_UNIT_IN_TYPE                 ;
    7575  public    : SC_IN (Tlsq_ptr_t        )    *  in_READ_UNIT_IN_STORE_QUEUE_PTR_WRITE;
     76  public    : SC_IN (Tlsq_ptr_t        )    *  in_READ_UNIT_IN_STORE_QUEUE_PTR_READ ;
     77  public    : SC_IN (Tcontrol_t        )    *  in_READ_UNIT_IN_STORE_QUEUE_EMPTY    ;
    7678  public    : SC_IN (Tlsq_ptr_t        )    *  in_READ_UNIT_IN_LOAD_QUEUE_PTR_WRITE ;
    7779  public    : SC_IN (Tcontrol_t        )    *  in_READ_UNIT_IN_HAS_IMMEDIAT         ;
     
    98100  public    : SC_OUT(Ttype_t           )   ** out_READ_UNIT_OUT_TYPE                 ;
    99101  public    : SC_OUT(Tlsq_ptr_t        )   ** out_READ_UNIT_OUT_STORE_QUEUE_PTR_WRITE;
     102  public    : SC_OUT(Tlsq_ptr_t        )   ** out_READ_UNIT_OUT_STORE_QUEUE_PTR_READ ;
     103  public    : SC_OUT(Tcontrol_t        )   ** out_READ_UNIT_OUT_STORE_QUEUE_EMPTY    ;
    100104  public    : SC_OUT(Tlsq_ptr_t        )   ** out_READ_UNIT_OUT_LOAD_QUEUE_PTR_WRITE ;
    101105  public    : SC_OUT(Tcontrol_t        )   ** out_READ_UNIT_OUT_HAS_IMMEDIAT         ;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/src/Read_unit_allocation.cpp

    r112 r122  
    6868       ALLOC0_SIGNAL_IN ( in_READ_UNIT_IN_TYPE                 ,"type"                 ,Ttype_t           ,_param->_size_type         );
    6969       ALLOC0_SIGNAL_IN ( in_READ_UNIT_IN_STORE_QUEUE_PTR_WRITE,"store_queue_ptr_write",Tlsq_ptr_t        ,_param->_size_store_queue_ptr);
     70       ALLOC0_SIGNAL_IN ( in_READ_UNIT_IN_STORE_QUEUE_PTR_READ ,"store_queue_ptr_read" ,Tlsq_ptr_t        ,_param->_size_store_queue_ptr);
     71       ALLOC0_SIGNAL_IN ( in_READ_UNIT_IN_STORE_QUEUE_EMPTY    ,"store_queue_empty"    ,Tcontrol_t        ,1);
    7072       ALLOC0_SIGNAL_IN ( in_READ_UNIT_IN_LOAD_QUEUE_PTR_WRITE ,"load_queue_ptr_write" ,Tlsq_ptr_t        ,_param->_size_load_queue_ptr);
    7173       ALLOC0_SIGNAL_IN ( in_READ_UNIT_IN_HAS_IMMEDIAT         ,"has_immediat"         ,Tcontrol_t        ,1);
     
    98100       ALLOC1_SIGNAL_OUT(out_READ_UNIT_OUT_TYPE                 ,"type"                 ,Ttype_t           ,_param->_size_type            );
    99101       ALLOC1_SIGNAL_OUT(out_READ_UNIT_OUT_STORE_QUEUE_PTR_WRITE,"store_queue_ptr_write",Tlsq_ptr_t        ,_param->_size_store_queue_ptr);
     102       ALLOC1_SIGNAL_OUT(out_READ_UNIT_OUT_STORE_QUEUE_PTR_READ ,"store_queue_ptr_read" ,Tlsq_ptr_t        ,_param->_size_store_queue_ptr);
     103       ALLOC1_SIGNAL_OUT(out_READ_UNIT_OUT_STORE_QUEUE_EMPTY    ,"store_queue_empty"    ,Tcontrol_t        ,1);
    100104       ALLOC1_SIGNAL_OUT(out_READ_UNIT_OUT_LOAD_QUEUE_PTR_WRITE ,"load_queue_ptr_write" ,Tlsq_ptr_t        ,_param->_size_load_queue_ptr);
    101105       ALLOC1_SIGNAL_OUT(out_READ_UNIT_OUT_HAS_IMMEDIAT         ,"has_immediat"         ,Tcontrol_t        ,1                             );
     
    268272         _component->port_map(name, "in_READ_QUEUE_IN_TYPE"                 ,dest, "in_READ_UNIT_IN_TYPE"                 );
    269273         _component->port_map(name, "in_READ_QUEUE_IN_STORE_QUEUE_PTR_WRITE",dest, "in_READ_UNIT_IN_STORE_QUEUE_PTR_WRITE");
     274         _component->port_map(name, "in_READ_QUEUE_IN_STORE_QUEUE_PTR_READ" ,dest, "in_READ_UNIT_IN_STORE_QUEUE_PTR_READ" );
     275         _component->port_map(name, "in_READ_QUEUE_IN_STORE_QUEUE_EMPTY"    ,dest, "in_READ_UNIT_IN_STORE_QUEUE_EMPTY"    );
    270276         if (_param->_have_port_load_queue_ptr)
    271277         _component->port_map(name, "in_READ_QUEUE_IN_LOAD_QUEUE_PTR_WRITE" ,dest, "in_READ_UNIT_IN_LOAD_QUEUE_PTR_WRITE" );
     
    305311         _component->port_map(name,"out_READ_QUEUE_OUT_TYPE"                 ,dest, "in_INSERT_TYPE"                 );
    306312         _component->port_map(name,"out_READ_QUEUE_OUT_STORE_QUEUE_PTR_WRITE",dest, "in_INSERT_STORE_QUEUE_PTR_WRITE");
     313         _component->port_map(name,"out_READ_QUEUE_OUT_STORE_QUEUE_PTR_READ" ,dest, "in_INSERT_STORE_QUEUE_PTR_READ" );
     314         _component->port_map(name,"out_READ_QUEUE_OUT_STORE_QUEUE_EMPTY"    ,dest, "in_INSERT_STORE_QUEUE_EMPTY"    );
    307315         if (_param->_have_port_load_queue_ptr)
    308316         _component->port_map(name,"out_READ_QUEUE_OUT_LOAD_QUEUE_PTR_WRITE" ,dest, "in_INSERT_LOAD_QUEUE_PTR_WRITE" );
     
    429437         _component->port_map(name, "in_INSERT_TYPE"                 ,dest,"out_READ_QUEUE_OUT_TYPE"                 );
    430438         _component->port_map(name, "in_INSERT_STORE_QUEUE_PTR_WRITE",dest,"out_READ_QUEUE_OUT_STORE_QUEUE_PTR_WRITE");
     439         _component->port_map(name, "in_INSERT_STORE_QUEUE_PTR_READ" ,dest,"out_READ_QUEUE_OUT_STORE_QUEUE_PTR_READ" );
     440         _component->port_map(name, "in_INSERT_STORE_QUEUE_EMPTY"    ,dest,"out_READ_QUEUE_OUT_STORE_QUEUE_EMPTY"    );
    431441         if (_param->_have_port_load_queue_ptr)
    432442         _component->port_map(name, "in_INSERT_LOAD_QUEUE_PTR_WRITE" ,dest,"out_READ_QUEUE_OUT_LOAD_QUEUE_PTR_WRITE" );
     
    474484           _component->port_map(name,"out_RETIRE_"+toString(i)+"_TYPE"                 ,dest,"out_READ_UNIT_OUT_"+toString(i)+"_TYPE"                 );
    475485           _component->port_map(name,"out_RETIRE_"+toString(i)+"_STORE_QUEUE_PTR_WRITE",dest,"out_READ_UNIT_OUT_"+toString(i)+"_STORE_QUEUE_PTR_WRITE");
     486           _component->port_map(name,"out_RETIRE_"+toString(i)+"_STORE_QUEUE_PTR_READ" ,dest,"out_READ_UNIT_OUT_"+toString(i)+"_STORE_QUEUE_PTR_READ" );
     487           _component->port_map(name,"out_RETIRE_"+toString(i)+"_STORE_QUEUE_EMPTY"    ,dest,"out_READ_UNIT_OUT_"+toString(i)+"_STORE_QUEUE_EMPTY"    );
    476488           if (_param->_have_port_load_queue_ptr)
    477489           _component->port_map(name,"out_RETIRE_"+toString(i)+"_LOAD_QUEUE_PTR_WRITE" ,dest,"out_READ_UNIT_OUT_"+toString(i)+"_LOAD_QUEUE_PTR_WRITE" );
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Read_unit_to_Execution_unit/include/Read_unit_to_Execution_unit.h

    r88 r122  
    8585  public    : SC_IN (Ttype_t           )  ***  in_READ_UNIT_OUT_TYPE                   ;//[nb_read_unit][nb_read_unit_port]
    8686  public    : SC_IN (Tlsq_ptr_t        )  ***  in_READ_UNIT_OUT_STORE_QUEUE_PTR_WRITE  ;//[nb_read_unit][nb_read_unit_port]
     87  public    : SC_IN (Tlsq_ptr_t        )  ***  in_READ_UNIT_OUT_STORE_QUEUE_PTR_READ   ;//[nb_read_unit][nb_read_unit_port]
     88  public    : SC_IN (Tcontrol_t        )  ***  in_READ_UNIT_OUT_STORE_QUEUE_EMPTY      ;//[nb_read_unit][nb_read_unit_port]
    8789  public    : SC_IN (Tlsq_ptr_t        )  ***  in_READ_UNIT_OUT_LOAD_QUEUE_PTR_WRITE   ;//[nb_read_unit][nb_read_unit_port]
    8890  public    : SC_IN (Tcontrol_t        )  ***  in_READ_UNIT_OUT_HAS_IMMEDIAT           ;//[nb_read_unit][nb_read_unit_port]
     
    106108  public    : SC_OUT(Ttype_t           )  *** out_EXECUTE_UNIT_IN_TYPE                 ;//[nb_execute_unit][nb_execute_unit_port]
    107109  public    : SC_OUT(Tlsq_ptr_t        )  *** out_EXECUTE_UNIT_IN_STORE_QUEUE_PTR_WRITE;//[nb_execute_unit][nb_execute_unit_port]
     110  public    : SC_OUT(Tlsq_ptr_t        )  *** out_EXECUTE_UNIT_IN_STORE_QUEUE_PTR_READ ;//[nb_execute_unit][nb_execute_unit_port]
     111  public    : SC_OUT(Tcontrol_t        )  *** out_EXECUTE_UNIT_IN_STORE_QUEUE_EMPTY    ;//[nb_execute_unit][nb_execute_unit_port]
    108112  public    : SC_OUT(Tlsq_ptr_t        )  *** out_EXECUTE_UNIT_IN_LOAD_QUEUE_PTR_WRITE ;//[nb_execute_unit][nb_execute_unit_port]
    109113  public    : SC_OUT(Tcontrol_t        )  *** out_EXECUTE_UNIT_IN_HAS_IMMEDIAT         ;//[nb_execute_unit][nb_execute_unit_port]
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Read_unit_to_Execution_unit/src/Parameters.cpp

    r120 r122  
    5959    _num_thread_valid        = num_thread_valid    ;
    6060
     61    _nb_thread               = get_nb_thread (nb_context, nb_front_end, nb_ooo_engine);
     62
    6163    log_printf(TRACE,Read_unit_to_Execution_unit,FUNCTION,"  * table_routing [nb_read_unit][nb_execute_unit][nb_execute_unit_port]");
    6264    for (uint32_t i=0; i<_nb_read_unit; ++i)
     
    8183    _max_nb_execute_unit_port= max<uint32_t>(_nb_execute_unit_port, _nb_execute_unit);
    8284
    83     _nb_thread               = get_nb_thread (nb_context, nb_front_end, nb_ooo_engine);
    8485    _nb_load_store_unit      = 0;
    8586
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Read_unit_to_Execution_unit/src/Parameters_msg_error.cpp

    r120 r122  
    6666      if (not is_type_valid(j))
    6767        for (uint32_t i=0; i<_nb_thread; i++)
    68           if (_num_thread_valid [j] and
     68          if (_num_thread_valid [i] and
    6969              (type_present [i][j]))
    7070            test.error(toString(_("The thread '%d' can execute the type's operation '%s' but this type is invalid.\n"),i,toString(j).c_str()));
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Read_unit_to_Execution_unit/src/Read_unit_to_Execution_unit_allocation.cpp

    r115 r122  
    6868       _ALLOC2_SIGNAL_IN ( in_READ_UNIT_OUT_TYPE                 ,"TYPE"                 ,Ttype_t           ,_param->_size_type             ,_param->_nb_read_unit,_param->_nb_read_unit_port[it1]);
    6969       _ALLOC2_SIGNAL_IN ( in_READ_UNIT_OUT_STORE_QUEUE_PTR_WRITE,"STORE_QUEUE_PTR_WRITE",Tlsq_ptr_t        ,_param->_size_store_queue_ptr  ,_param->_nb_read_unit,_param->_nb_read_unit_port[it1]);
     70       _ALLOC2_SIGNAL_IN ( in_READ_UNIT_OUT_STORE_QUEUE_PTR_READ ,"STORE_QUEUE_PTR_READ" ,Tlsq_ptr_t        ,_param->_size_store_queue_ptr  ,_param->_nb_read_unit,_param->_nb_read_unit_port[it1]);
     71       _ALLOC2_SIGNAL_IN ( in_READ_UNIT_OUT_STORE_QUEUE_EMPTY    ,"STORE_QUEUE_EMPTY"    ,Tcontrol_t        ,1                              ,_param->_nb_read_unit,_param->_nb_read_unit_port[it1]);
    7072       _ALLOC2_SIGNAL_IN ( in_READ_UNIT_OUT_LOAD_QUEUE_PTR_WRITE ,"LOAD_QUEUE_PTR_WRITE" ,Tlsq_ptr_t        ,_param->_size_load_queue_ptr   ,_param->_nb_read_unit,_param->_nb_read_unit_port[it1]);
    7173       _ALLOC2_SIGNAL_IN ( in_READ_UNIT_OUT_HAS_IMMEDIAT         ,"HAS_IMMEDIAT"         ,Tcontrol_t        ,1                              ,_param->_nb_read_unit,_param->_nb_read_unit_port[it1]);
     
    99101       _ALLOC2_SIGNAL_OUT(out_EXECUTE_UNIT_IN_NUM_REG_RE           ,"NUM_REG_RE"           ,Tspecial_address_t,_param->_size_special_register , _param->_nb_execute_unit, _param->_nb_execute_unit_port [it1]);
    100102       _ALLOC2_SIGNAL_OUT(out_EXECUTE_UNIT_IN_STORE_QUEUE_PTR_WRITE,"STORE_QUEUE_PTR_WRITE",Tlsq_ptr_t        ,_param->_size_store_queue_ptr  , _param->_nb_execute_unit, _param->_nb_execute_unit_port [it1]);
     103       _ALLOC2_SIGNAL_OUT(out_EXECUTE_UNIT_IN_STORE_QUEUE_PTR_READ ,"STORE_QUEUE_PTR_READ" ,Tlsq_ptr_t        ,_param->_size_store_queue_ptr  , _param->_nb_execute_unit, _param->_nb_execute_unit_port [it1]);
     104       _ALLOC2_SIGNAL_OUT(out_EXECUTE_UNIT_IN_STORE_QUEUE_EMPTY    ,"STORE_QUEUE_EMPTY"    ,Tcontrol_t        ,1                              , _param->_nb_execute_unit, _param->_nb_execute_unit_port [it1]);
    101105       _ALLOC2_SIGNAL_OUT(out_EXECUTE_UNIT_IN_LOAD_QUEUE_PTR_WRITE ,"LOAD_QUEUE_PTR_WRITE" ,Tlsq_ptr_t        ,_param->_size_load_queue_ptr   , _param->_nb_execute_unit, _param->_nb_execute_unit_port [it1]);
    102106       _ALLOC2_SIGNAL_OUT(out_EXECUTE_UNIT_IN_IMMEDIAT             ,"IMMEDIAT"             ,Tgeneral_data_t   ,_param->_size_general_data     , _param->_nb_execute_unit, _param->_nb_execute_unit_port [it1]);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Read_unit_to_Execution_unit/src/Read_unit_to_Execution_unit_genMealy.cpp

    r117 r122  
    8989                      PORT_WRITE(out_EXECUTE_UNIT_IN_NUM_REG_RE            [dest][port], PORT_READ(in_READ_UNIT_OUT_NUM_REG_RE            [i][j]));
    9090                      PORT_WRITE(out_EXECUTE_UNIT_IN_STORE_QUEUE_PTR_WRITE [dest][port], PORT_READ(in_READ_UNIT_OUT_STORE_QUEUE_PTR_WRITE [i][j]));
     91                      PORT_WRITE(out_EXECUTE_UNIT_IN_STORE_QUEUE_PTR_READ  [dest][port], PORT_READ(in_READ_UNIT_OUT_STORE_QUEUE_PTR_READ  [i][j]));
     92                      PORT_WRITE(out_EXECUTE_UNIT_IN_STORE_QUEUE_EMPTY     [dest][port], PORT_READ(in_READ_UNIT_OUT_STORE_QUEUE_EMPTY     [i][j]));
    9193                      if (_param->_have_port_load_queue_ptr)
    9294                      PORT_WRITE(out_EXECUTE_UNIT_IN_LOAD_QUEUE_PTR_WRITE  [dest][port], PORT_READ(in_READ_UNIT_OUT_LOAD_QUEUE_PTR_WRITE  [i][j]));
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/include/Execute_loop.h

    r97 r122  
    8181  public    : SC_IN (Ttype_t           )   **  in_EXECUTE_LOOP_IN_TYPE                 ;//[nb_read_unit]
    8282  public    : SC_IN (Tlsq_ptr_t        )   **  in_EXECUTE_LOOP_IN_STORE_QUEUE_PTR_WRITE;//[nb_read_unit]
     83  public    : SC_IN (Tlsq_ptr_t        )   **  in_EXECUTE_LOOP_IN_STORE_QUEUE_PTR_READ ;//[nb_read_unit]
     84  public    : SC_IN (Tcontrol_t        )   **  in_EXECUTE_LOOP_IN_STORE_QUEUE_EMPTY    ;//[nb_read_unit]
    8385  public    : SC_IN (Tlsq_ptr_t        )   **  in_EXECUTE_LOOP_IN_LOAD_QUEUE_PTR_WRITE ;//[nb_read_unit]
    8486  public    : SC_IN (Tcontrol_t        )   **  in_EXECUTE_LOOP_IN_HAS_IMMEDIAT         ;//[nb_read_unit]
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/src/Execute_loop_allocation.cpp

    r112 r122  
    6666       ALLOC1_SIGNAL_IN ( in_EXECUTE_LOOP_IN_TYPE                 ,"type"                 ,Ttype_t           ,_param->_size_type);         
    6767       ALLOC1_SIGNAL_IN ( in_EXECUTE_LOOP_IN_STORE_QUEUE_PTR_WRITE,"store_queue_ptr_write",Tlsq_ptr_t        ,_param->_size_store_queue_ptr);
     68       ALLOC1_SIGNAL_IN ( in_EXECUTE_LOOP_IN_STORE_QUEUE_PTR_READ ,"store_queue_ptr_read" ,Tlsq_ptr_t        ,_param->_size_store_queue_ptr);
     69       ALLOC1_SIGNAL_IN ( in_EXECUTE_LOOP_IN_STORE_QUEUE_EMPTY    ,"store_queue_empty"    ,Tcontrol_t        ,1);
    6870       ALLOC1_SIGNAL_IN ( in_EXECUTE_LOOP_IN_LOAD_QUEUE_PTR_WRITE ,"load_queue_ptr_write" ,Tlsq_ptr_t        ,_param->_size_load_queue_ptr);
    6971       ALLOC1_SIGNAL_IN ( in_EXECUTE_LOOP_IN_HAS_IMMEDIAT         ,"has_immediat"         ,Tcontrol_t        ,1);
     
    483485             PORT_MAP(_component ,src , "in_READ_UNIT_IN_TYPE"                 ,dest , "in_EXECUTE_LOOP_IN_"+toString(i)+"_TYPE"                 );
    484486             PORT_MAP(_component ,src , "in_READ_UNIT_IN_STORE_QUEUE_PTR_WRITE",dest , "in_EXECUTE_LOOP_IN_"+toString(i)+"_STORE_QUEUE_PTR_WRITE");
     487             PORT_MAP(_component ,src , "in_READ_UNIT_IN_STORE_QUEUE_PTR_READ" ,dest , "in_EXECUTE_LOOP_IN_"+toString(i)+"_STORE_QUEUE_PTR_READ" );
     488             PORT_MAP(_component ,src , "in_READ_UNIT_IN_STORE_QUEUE_EMPTY"    ,dest , "in_EXECUTE_LOOP_IN_"+toString(i)+"_STORE_QUEUE_EMPTY"    );
    485489             if (_param->_have_port_load_queue_ptr)
    486490             PORT_MAP(_component ,src , "in_READ_UNIT_IN_LOAD_QUEUE_PTR_WRITE" ,dest , "in_EXECUTE_LOOP_IN_"+toString(i)+"_LOAD_QUEUE_PTR_WRITE" );
     
    531535               COMPONENT_MAP(_component ,src ,"out_READ_UNIT_OUT_"+toString(j               )+"_STORE_QUEUE_PTR_WRITE",
    532536                                         dest, "in_READ_UNIT_OUT_"+toString(it_read_unit_out)+"_"+toString(j)+"_STORE_QUEUE_PTR_WRITE");
     537               COMPONENT_MAP(_component ,src ,"out_READ_UNIT_OUT_"+toString(j               )+"_STORE_QUEUE_PTR_READ" ,
     538                                         dest, "in_READ_UNIT_OUT_"+toString(it_read_unit_out)+"_"+toString(j)+"_STORE_QUEUE_PTR_READ" );
     539               COMPONENT_MAP(_component ,src ,"out_READ_UNIT_OUT_"+toString(j               )+"_STORE_QUEUE_EMPTY"    ,
     540                                         dest, "in_READ_UNIT_OUT_"+toString(it_read_unit_out)+"_"+toString(j)+"_STORE_QUEUE_EMPTY"    );
    533541               if (_param->_have_port_load_queue_ptr)
    534542               COMPONENT_MAP(_component ,src ,"out_READ_UNIT_OUT_"+toString(j               )+"_LOAD_QUEUE_PTR_WRITE" ,
     
    812820               COMPONENT_MAP(_component ,src , "in_EXECUTE_IN_STORE_QUEUE_PTR_WRITE",
    813821                                         dest,"out_EXECUTE_UNIT_IN_"+toString(i)+"_0_STORE_QUEUE_PTR_WRITE");
     822               COMPONENT_MAP(_component ,src , "in_EXECUTE_IN_STORE_QUEUE_PTR_READ" ,
     823                                         dest,"out_EXECUTE_UNIT_IN_"+toString(i)+"_0_STORE_QUEUE_PTR_READ" );
     824               COMPONENT_MAP(_component ,src , "in_EXECUTE_IN_STORE_QUEUE_EMPTY"    ,
     825                                         dest,"out_EXECUTE_UNIT_IN_"+toString(i)+"_0_STORE_QUEUE_EMPTY"    );
    814826               if (_param->_have_port_load_queue_ptr)
    815827               COMPONENT_MAP(_component ,src , "in_EXECUTE_IN_LOAD_QUEUE_PTR_WRITE" ,
     
    936948                 COMPONENT_MAP(_component ,src , "in_MEMORY_IN_"+toString(j)+"_STORE_QUEUE_PTR_WRITE",
    937949                                           dest,"out_EXECUTE_UNIT_IN_"+toString(i)+"_"+toString(j)+"_STORE_QUEUE_PTR_WRITE");
     950                 COMPONENT_MAP(_component ,src , "in_MEMORY_IN_"+toString(j)+"_STORE_QUEUE_PTR_READ",
     951                                           dest,"out_EXECUTE_UNIT_IN_"+toString(i)+"_"+toString(j)+"_STORE_QUEUE_PTR_READ" );
     952                 COMPONENT_MAP(_component ,src , "in_MEMORY_IN_"+toString(j)+"_STORE_QUEUE_EMPTY"    ,
     953                                           dest,"out_EXECUTE_UNIT_IN_"+toString(i)+"_"+toString(j)+"_STORE_QUEUE_EMPTY"    );
    938954                 if (_param->_have_port_load_queue_ptr)
    939955                 COMPONENT_MAP(_component ,src , "in_MEMORY_IN_"+toString(j)+"_LOAD_QUEUE_PTR_WRITE" ,
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/src/Execute_loop_deallocation.cpp

    r88 r122  
    3636        DELETE1_SIGNAL( in_EXECUTE_LOOP_IN_TYPE                 ,_param->_nb_read_unit,_param->_size_type);         
    3737        DELETE1_SIGNAL( in_EXECUTE_LOOP_IN_STORE_QUEUE_PTR_WRITE,_param->_nb_read_unit,_param->_size_store_queue_ptr);
     38        DELETE1_SIGNAL( in_EXECUTE_LOOP_IN_STORE_QUEUE_PTR_READ ,_param->_nb_read_unit,_param->_size_store_queue_ptr);
     39        DELETE1_SIGNAL( in_EXECUTE_LOOP_IN_STORE_QUEUE_EMPTY    ,_param->_nb_read_unit,1);
    3840        DELETE1_SIGNAL( in_EXECUTE_LOOP_IN_LOAD_QUEUE_PTR_WRITE ,_param->_nb_read_unit,_param->_size_load_queue_ptr);
    3941        DELETE1_SIGNAL( in_EXECUTE_LOOP_IN_HAS_IMMEDIAT         ,_param->_nb_read_unit,1);
     
    99101
    100102    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
    101     delete    _component;
    102103    delete    _component_glue                        ;
     104    for (uint32_t i=0; i<_param->_nb_read_unit; i++)
     105    delete    _component_read_unit [i]               ;
    103106    delete [] _component_read_unit                   ;
     107    for (uint32_t i=0; i<_param->_nb_functionnal_unit; i++)
     108    delete    _component_functionnal_unit [i]        ;
    104109    delete [] _component_functionnal_unit            ;
     110    for (uint32_t i=0; i<_param->_nb_load_store_unit; i++)
     111    delete    _component_load_store_unit [i]         ;
    105112    delete [] _component_load_store_unit             ;
     113    for (uint32_t i=0; i<_param->_nb_write_unit; i++)
     114    delete    _component_write_unit [i]              ;
    106115    delete [] _component_write_unit                  ;
    107116    delete    _component_read_unit_to_execution_unit ;
    108117    delete    _component_execution_unit_to_write_unit;
    109118    delete    _component_register_unit               ;
     119
     120    delete    _component;
    110121   
    111122    log_printf(FUNC,Execute_loop,FUNCTION,"End");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/src/Parameters.cpp

    r120 r122  
    590590    delete    _param_glue;
    591591    for (uint32_t i=0; i<_nb_read_unit; i++)
    592       delete _param_read_unit [i];
     592    delete    _param_read_unit [i];
    593593    delete [] _param_read_unit;
    594594
     
    605605    delete [] _param_load_store_unit;
    606606    for (uint32_t i=0; i<_nb_write_unit; i++)
    607       delete _param_write_unit [i];
     607    delete    _param_write_unit [i];
    608608    delete [] _param_write_unit;
    609609    delete    _param_read_unit_to_execution_unit;
Note: See TracChangeset for help on using the changeset viewer.