Ignore:
Timestamp:
Jun 8, 2009, 10:43:30 PM (16 years ago)
Author:
rosiere
Message:

1) Fix performance
2) add auto generation to SPECINT2000
3) add reset in genMoore and genMealy

Location:
trunk/IPs/systemC/processor/Morpheo/Behavioural
Files:
2 added
235 edited

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/src/Core_Glue.cpp

    r122 r123  
    3737    usage_environment(_usage);
    3838
    39 #if DEBUG_Core_Glue == true
    40     log_printf(INFO,Core_Glue,FUNCTION,_("<%s> Parameters"),_name.c_str());
    41 
    42     std::cout << *param << std::endl;
    43 #endif   
     39// #if DEBUG_Core_Glue == true
     40//     log_printf(INFO,Core_Glue,FUNCTION,_("<%s> Parameters"),_name.c_str());
     41
     42//     std::cout << *param << std::endl;
     43// #endif   
    4444
    4545    log_printf(INFO,Core_Glue,FUNCTION,_("<%s> : Allocation"),_name.c_str());
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/src/Core_Glue_genMealy_branch_complete.cpp

    r98 r123  
    3333        BRANCH_COMPLETE_OOO_ENGINE_ACK [i][j] = 0;
    3434
     35    if (PORT_READ(in_NRESET))
     36      {
    3537    for (uint32_t i=0; i<_param->_nb_ooo_engine; ++i)
    3638      for (uint32_t j=0; j<_param->_ooo_engine_nb_inst_branch_complete[i]; ++j)
     
    5456          PORT_WRITE(out_BRANCH_COMPLETE_OOO_ENGINE_MISS_PREDICTION [i][j], PORT_READ(in_BRANCH_COMPLETE_FRONT_END_MISS_PREDICTION [num_front_end][j]));
    5557        }
     58      }
    5659
    5760    for (uint32_t i=0; i<_param->_nb_front_end; ++i)
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/src/Core_Glue_genMealy_commit_event.cpp

    r105 r123  
    3232      COMMIT_EVENT_OOO_ENGINE_ACK [i] = 0;
    3333
     34    if (PORT_READ(in_NRESET))
     35      {
    3436     for (uint32_t i=0; i<_param->_nb_ooo_engine; ++i)
    3537       {
     
    5759       }
    5860
     61      }
     62
    5963    for (uint32_t i=0; i<_param->_nb_front_end; ++i)
    6064      PORT_WRITE(out_COMMIT_EVENT_FRONT_END_VAL [i], COMMIT_EVENT_FRONT_END_VAL [i]);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/src/Core_Glue_genMealy_execute.cpp

    r88 r123  
    3434        EXECUTE_EXECUTE_LOOP_ACK [i][j] = 0;
    3535   
     36    if (PORT_READ(in_NRESET))
     37      {
    3638
    3739    for (uint32_t i=0; i<_param->_nb_execute_loop; ++i)
     
    6062          PORT_WRITE(out_EXECUTE_OOO_ENGINE_DATA         [num_ooo_engine][num_execute_loop][j], PORT_READ(in_EXECUTE_EXECUTE_LOOP_DATA         [i][j]));
    6163        }
     64      }
    6265
    6366    for (uint32_t i=0; i<_param->_nb_ooo_engine; ++i)
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/src/Core_Glue_genMealy_insert.cpp

    r109 r123  
    2222    log_function(Core_Glue,FUNCTION,_name.c_str());
    2323
     24    if (PORT_READ(in_NRESET))
     25      {
    2426    for (uint32_t i=0; i<_param->_nb_execute_loop; ++i)
    2527      for (uint32_t j=0; j<_param->_execute_loop_nb_ooo_engine[i]; ++j)
     
    5052            }
    5153        }
     54      }
     55    else
     56      {
     57        for (uint32_t i=0; i<_param->_nb_execute_loop; ++i)
     58          for (uint32_t j=0; j<_param->_execute_loop_nb_ooo_engine[i]; ++j)
     59            {
     60              Tcontext_t num_ooo_engine   = _param->_translate_execute_loop_num_ooo_engine [i][j];
     61             
     62              for (uint32_t k=0; k<_param->_execute_loop_nb_inst_insert[i][j]; ++k)
     63                {
     64                  PORT_WRITE(out_INSERT_OOO_ENGINE_ACK  [num_ooo_engine][k],0);
     65                 PORT_WRITE(out_INSERT_EXECUTE_LOOP_VAL [i][j][k],0);
     66                }
     67            }
     68      }
    5269
    5370    log_end(Core_Glue,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/src/Core_Glue_genMealy_issue.cpp

    r122 r123  
    6464    Tcontrol_t ISSUE_OOO_ENGINE_ACK   [_param->_nb_ooo_engine  ][_param->_max_nb_inst_issue_queue];
    6565    Tcontrol_t ISSUE_EXECUTE_LOOP_VAL [_param->_nb_execute_loop][_param->_max_nb_read_unit];
     66
     67    for (uint32_t i=0; i<_param->_nb_ooo_engine; ++i)
     68      for (uint32_t j=0; j<_param->_nb_inst_issue_queue[i]; ++j)
     69        ISSUE_OOO_ENGINE_ACK [i][j] = 0;
     70    for (uint32_t i=0; i<_param->_nb_execute_loop; ++i)
     71      for (uint32_t j=0; j<_param->_nb_read_unit[i]; ++j)
     72        ISSUE_EXECUTE_LOOP_VAL [i][j] = 0;
     73   
     74    if (PORT_READ(in_NRESET))
     75      {
    6676    Tcontrol_t READ_UNIT_ENABLE       [_param->_nb_execute_loop][_param->_max_nb_read_unit];
    6777    Tcontrol_t SLOT_ENABLE            [_param->_nb_ooo_engine  ][_param->_max_nb_inst_issue_slot];
     
    6979    // Init -> all at 0
    7080    for (uint32_t i=0; i<_param->_nb_ooo_engine; ++i)
    71       {
    72         for (uint32_t j=0; j<_param->_nb_inst_issue_queue[i]; ++j)
    73           ISSUE_OOO_ENGINE_ACK [i][j] = 0;
    74         for (uint32_t j=0; j<_param->_nb_inst_issue_slot[i]; ++j)
    75           SLOT_ENABLE [i][j] = 1;         
    76       }
     81      for (uint32_t j=0; j<_param->_nb_inst_issue_slot[i]; ++j)
     82        SLOT_ENABLE [i][j] = 1;         
    7783
    7884    for (uint32_t i=0; i<_param->_nb_execute_loop; ++i)
    7985      for (uint32_t j=0; j<_param->_nb_read_unit[i]; ++j)
    8086        {
    81           ISSUE_EXECUTE_LOOP_VAL [i][j] = 0;
    82 
    8387          // Read unit is enable is signal ack is set
    8488          READ_UNIT_ENABLE       [i][j] = (PORT_READ(in_ISSUE_EXECUTE_LOOP_ACK [i][j]) == 1);
     
    236240      }
    237241
     242      }
     243
    238244    // Write output
    239245    for (uint32_t i=0; i<_param->_nb_ooo_engine; ++i)
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Dcache_Access/src/Dcache_Access.cpp

    r88 r123  
    3737    usage_environment(_usage);
    3838
    39 #if DEBUG_Dcache_Access == true
    40     log_printf(INFO,Dcache_Access,FUNCTION,_("<%s> Parameters"),_name.c_str());
     39// #if DEBUG_Dcache_Access == true
     40//     log_printf(INFO,Dcache_Access,FUNCTION,_("<%s> Parameters"),_name.c_str());
    4141
    42     std::cout << *param << std::endl;
    43 #endif   
     42//     std::cout << *param << std::endl;
     43// #endif   
    4444
    4545    log_printf(INFO,Dcache_Access,FUNCTION,_("<%s> : Allocation"),_name.c_str());
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Dcache_Access/src/Dcache_Access_genMealy_req.cpp

    r117 r123  
    2121    log_begin(Dcache_Access,FUNCTION);
    2222
     23    if (PORT_READ(in_NRESET))
     24      {
    2325    Tcontrol_t dcache_req_val [_param->_nb_dcache_port];
    2426    for (uint32_t i=0; i<_param->_nb_dcache_port; ++i)
     
    105107        for (uint32_t k=0; k<_param->_nb_cache_access [i][j]; ++k)
    106108          PORT_WRITE(out_LSQ_REQ_ACK [i][j][k], lsq_req_ack [i][j][k]);
     109      }
     110
     111    else
     112      {
     113        for (uint32_t i=0; i<_param->_nb_dcache_port; ++i)
     114          PORT_WRITE(out_DCACHE_REQ_VAL [i], 0);
     115       
     116        for (uint32_t i=0; i<_param->_nb_execute_loop; ++i)
     117          for (uint32_t j=0; j<_param->_nb_load_store_unit[i]; ++j)
     118            for (uint32_t k=0; k<_param->_nb_cache_access [i][j]; ++k)
     119              PORT_WRITE(out_LSQ_REQ_ACK [i][j][k], 0);
     120      }
    107121
    108122    log_end(Dcache_Access,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Dcache_Access/src/Dcache_Access_genMealy_rsp.cpp

    r94 r123  
    2121    log_begin(Dcache_Access,FUNCTION);
    2222
     23    if (PORT_READ(in_NRESET))
     24      {
    2325    Tcontrol_t lsq_rsp_val [_param->_nb_execute_loop][_param->_max_nb_load_store_unit][_param->_max_nb_cache_access];
    2426    for (uint32_t i=0; i<_param->_nb_execute_loop; ++i)
     
    8789        for (uint32_t k=0; k<_param->_nb_cache_access [i][j]; ++k)
    8890          PORT_WRITE(out_LSQ_RSP_VAL [i][j][k], lsq_rsp_val [i][j][k]);
     91      }
     92    else
     93      {
     94        for (uint32_t i=0; i<_param->_nb_dcache_port; ++i)
     95          PORT_WRITE(out_DCACHE_RSP_ACK [i],0);
     96
     97        for (uint32_t i=0; i<_param->_nb_execute_loop; ++i)
     98          for (uint32_t j=0; j<_param->_nb_load_store_unit[i]; ++j)
     99            for (uint32_t k=0; k<_param->_nb_cache_access [i][j]; ++k)
     100              PORT_WRITE(out_LSQ_RSP_VAL [i][j][k], 0);
     101      }
    89102
    90103    log_end(Dcache_Access,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Icache_Access/src/Icache_Access.cpp

    r88 r123  
    3737    usage_environment(_usage);
    3838
    39 #if DEBUG_Core == true
    40     log_printf(INFO,Core,FUNCTION,_("<%s> Parameters"),_name.c_str());
    41 
    42     std::cout << *param << std::endl;
    43 #endif   
     39// #if DEBUG_Core == true
     40//     log_printf(INFO,Core,FUNCTION,_("<%s> Parameters"),_name.c_str());
     41
     42//     std::cout << *param << std::endl;
     43// #endif   
    4444
    4545    log_printf(INFO,Icache_Access,FUNCTION,_("<%s> : Allocation"),_name.c_str());
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Icache_Access/src/Icache_Access_genMealy_req.cpp

    r119 r123  
    2323    Tcontrol_t icache_req_val [_param->_nb_icache_port];
    2424    for (uint32_t i=0; i<_param->_nb_icache_port; ++i)
     25      icache_req_val [i] = 0;
     26    Tcontrol_t context_req_ack [_param->_nb_front_end][_param->_max_nb_context];
     27    for (uint32_t i=0; i<_param->_nb_front_end; ++i)
     28      for (uint32_t j=0; j<_param->_nb_context[i]; ++j)
     29        context_req_ack [i][j] = 0;
     30
     31    if (PORT_READ(in_NRESET))
    2532      {
    26         icache_req_val [i] = 0;
    27 
     33    for (uint32_t i=0; i<_param->_nb_icache_port; ++i)
     34      {
    2835#ifdef STATISTICS
    2936        _internal_ICACHE_REQ_NB_ACCESS         [i] = 0;
     
    3239      }
    3340   
    34     Tcontrol_t context_req_ack [_param->_nb_front_end][_param->_max_nb_context];
    35     for (uint32_t i=0; i<_param->_nb_front_end; ++i)
    36       for (uint32_t j=0; j<_param->_nb_context[i]; ++j)
    37         context_req_ack [i][j] = 0;
    38        
    3941    std::list<generic::priority::select_t> * select = _priority ->select();
    4042    for (std::list<generic::priority::select_t>::iterator it=select ->begin();
     
    8587          }
    8688      }
     89      }
     90
    8791
    8892    for (uint32_t i=0; i<_param->_nb_icache_port; ++i)
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Icache_Access/src/Icache_Access_genMealy_rsp.cpp

    r88 r123  
    2626        context_rsp_val [i][j] = 0;
    2727
     28    if (PORT_READ(in_NRESET))
     29      {
    2830    for (uint32_t i=0; i<_param->_nb_icache_port; ++i)
    2931      {
     
    7577      }
    7678
     79      }
     80    else
     81      for (uint32_t i=0; i<_param->_nb_icache_port; ++i)
     82        PORT_WRITE(out_ICACHE_RSP_ACK [i],0);
     83
    7784    for (uint32_t i=0; i<_param->_nb_front_end; ++i)
    7885      for (uint32_t j=0; j<_param->_nb_context[i]; ++j)
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Execute_loop_Glue/src/Execute_loop_Glue.cpp

    r88 r123  
    3939    usage_environment(_usage);
    4040
    41 #if DEBUG_Execute_loop_Glue == true
    42     log_printf(INFO,Execute_loop_Glue,FUNCTION,_("<%s> Parameters"),_name.c_str());
     41// #if DEBUG_Execute_loop_Glue == true
     42//     log_printf(INFO,Execute_loop_Glue,FUNCTION,_("<%s> Parameters"),_name.c_str());
    4343
    44     std::cout << *param << std::endl;
    45 #endif   
     44//     std::cout << *param << std::endl;
     45// #endif   
    4646
    4747    log_printf(INFO,Execute_loop_Glue,FUNCTION,_("<%s> : Allocation"),_name.c_str());
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Execute_loop_Glue/src/Execute_loop_Glue_genMealy_gpr_write.cpp

    r88 r123  
    2323    log_begin(Execute_loop_Glue,FUNCTION);
    2424
     25    if (PORT_READ(in_NRESET))
     26      {
    2527    for (uint32_t i=0; i<_param->_nb_gpr_write; i++)
    2628      {
     
    4547        PORT_WRITE(out_GPR_WRITE_READ_UNIT_DATA               [i],data         );
    4648      }
     49      }
     50    else
     51      {
     52        for (uint32_t i=0; i<_param->_nb_gpr_write; i++)
     53          {
     54            PORT_WRITE(out_GPR_WRITE_WRITE_UNIT_ACK               [i],0);
     55            PORT_WRITE(out_GPR_WRITE_REGISTER_FILE_VAL            [i],0);
     56            PORT_WRITE(out_GPR_WRITE_READ_UNIT_VAL                [i],0);
     57          }
     58      }
    4759
    4860    log_end(Execute_loop_Glue,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Execute_loop_Glue/src/Execute_loop_Glue_genMealy_spr_write.cpp

    r88 r123  
    2323    log_begin(Execute_loop_Glue,FUNCTION);
    2424
     25    if (PORT_READ(in_NRESET))
     26      {
    2527    for (uint32_t i=0; i<_param->_nb_spr_write; i++)
    2628      {
     
    4547        PORT_WRITE(out_SPR_WRITE_READ_UNIT_DATA               [i],data         );
    4648      }
     49      }
     50    else
     51      {
     52        for (uint32_t i=0; i<_param->_nb_spr_write; i++)
     53          {
     54            PORT_WRITE(out_SPR_WRITE_WRITE_UNIT_ACK               [i],0);
     55            PORT_WRITE(out_SPR_WRITE_REGISTER_FILE_VAL            [i],0);
     56            PORT_WRITE(out_SPR_WRITE_READ_UNIT_VAL                [i],0);
     57          }
     58      }
    4759
    4860    log_end(Execute_loop_Glue,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit.cpp

    r116 r123  
    4242    allocation ();
    4343
    44 #if DEBUG_Functionnal_unit == true
    45     log_printf(INFO,Functionnal_unit,FUNCTION,_("<%s> Parameters"),_name.c_str());
     44// #if DEBUG_Functionnal_unit == true
     45//     log_printf(INFO,Functionnal_unit,FUNCTION,_("<%s> Parameters"),_name.c_str());
    4646
    47     std::cout << *param << std::endl;
    48 #endif   
     47//     std::cout << *param << std::endl;
     48// #endif   
    4949
    5050#ifdef STATISTICS
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_genMealy.cpp

    r118 r123  
    3131          // Can out if : have an instruction and is finish (latence == 0)
    3232          internal_EXECUTE_OUT_VAL = (reg_BUSY_OUT and (_execute_operation_out->_timing._latence == 0));
    33          
    34           PORT_WRITE(out_EXECUTE_OUT_VAL, internal_EXECUTE_OUT_VAL);
    3533        }
    3634       
     
    5048                                     (internal_EXECUTE_OUT_VAL and PORT_READ(in_EXECUTE_OUT_ACK)));
    5149            }
    52 
    53           PORT_WRITE(out_EXECUTE_IN_ACK , internal_EXECUTE_IN_ACK);
    5450        }
    5551      }
     52    else
     53      {
     54        // RESET
     55        internal_EXECUTE_IN_ACK = 0;
     56        internal_EXECUTE_OUT_VAL = 0;
     57      }
     58
     59    // Write Output
     60    PORT_WRITE(out_EXECUTE_IN_ACK , internal_EXECUTE_IN_ACK);
     61    PORT_WRITE(out_EXECUTE_OUT_VAL, internal_EXECUTE_OUT_VAL);
    5662
    5763    log_end(Functionnal_unit,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_genMoore.cpp

    r116 r123  
    2626    log_function(Functionnal_unit,FUNCTION,_name.c_str());
    2727
     28    if (PORT_READ(in_NRESET))
    2829    {
    2930      if (_param->_have_port_context_id)
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/src/Load_store_unit.cpp

    r111 r123  
    3939    log_printf(FUNC,Load_store_unit,FUNCTION,"Begin");
    4040
    41 #if DEBUG_Load_store_unit == true
    42     log_printf(INFO,Load_store_unit,FUNCTION,_("<%s> Parameters"),_name.c_str());
    43 
    44     std::cout << *param << std::endl;
    45 #endif   
     41// #if DEBUG_Load_store_unit == true
     42//     log_printf(INFO,Load_store_unit,FUNCTION,_("<%s> Parameters"),_name.c_str());
     43
     44//     std::cout << *param << std::endl;
     45// #endif   
    4646
    4747#ifdef SYSTEMC
  • 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_genMealy_insert.cpp

    r101 r123  
    3535      ack [i] = 0;
    3636
     37    if (PORT_READ(in_NRESET))
     38      {
    3739    // find first valid entry
    3840    // store queue is never full (pointer is manage by rename stage)
     
    4951            }
    5052        }
     53      }
     54    else
     55      {
     56        internal_MEMORY_IN_ACK = 0;
     57//         internal_MEMORY_IN_PORT = i;
     58      }
    5159
    5260    for (uint32_t i=0; i<_param->_nb_inst_memory; i++)
  • 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

    r122 r123  
    2727    log_function(Load_store_unit,FUNCTION,_name.c_str());
    2828
     29    if (PORT_READ(in_NRESET))
     30      {
    2931    // ~~~~~[ Interface "memory_out" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    3032
     
    140142
    141143    // write output
    142     PORT_WRITE(out_MEMORY_OUT_VAL          [0], internal_MEMORY_OUT_VAL);
    143 
    144144    if (_param->_have_port_context_id)
    145145    PORT_WRITE(out_MEMORY_OUT_CONTEXT_ID   [0], memory_out_context_id   );
     
    171171    // ~~~~~[ Interface "dache_req" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    172172
    173     Tcontext_t        dcache_req_context_id;
    174     Tpacket_t         dcache_req_packet_id ;
    175     Tdcache_address_t dcache_req_address   ;
    176     Tdcache_type_t    dcache_req_type      ;
    177     Tdcache_data_t    dcache_req_wdata     ;
     173    Tcontext_t        dcache_req_context_id = 0;
     174    Tpacket_t         dcache_req_packet_id  = 0;
     175    Tdcache_address_t dcache_req_address    = 0;
     176    Tdcache_type_t    dcache_req_type       = 0;
     177    Tdcache_data_t    dcache_req_wdata      = 0;
    178178
    179179    log_printf(TRACE,Load_store_unit,FUNCTION,"  * Test DCACHE_REQ");
     
    241241      }
    242242
    243     PORT_WRITE(out_DCACHE_REQ_VAL       [0], internal_DCACHE_REQ_VAL);
    244243    if (_param->_have_port_dcache_context_id)
    245244    PORT_WRITE(out_DCACHE_REQ_CONTEXT_ID[0], dcache_req_context_id);
     
    248247    PORT_WRITE(out_DCACHE_REQ_TYPE      [0], dcache_req_type      );
    249248    PORT_WRITE(out_DCACHE_REQ_WDATA     [0], dcache_req_wdata     );
    250    
     249      }
     250    else
     251      {
     252        // Reset
     253    internal_MEMORY_OUT_VAL = 0;
     254//  internal_MEMORY_OUT_PTR =0
     255//  internal_MEMORY_OUT_SELECT_QUEUE = SELECT_STORE_QUEUE;
     256
     257    internal_DCACHE_REQ_VAL = 0;
     258    internal_SPECULATIVE_ACCESS_QUEUE_PTR_READ = 0;
     259//  internal_DCACHE_REQ_SELECT_QUEUE = SELECT_LOAD_QUEUE_SPECULATIVE;
     260      }
     261
     262    // Write output
     263    PORT_WRITE(out_MEMORY_OUT_VAL [0], internal_MEMORY_OUT_VAL);
     264    PORT_WRITE(out_DCACHE_REQ_VAL [0], internal_DCACHE_REQ_VAL);
     265
     266
    251267    log_end(Load_store_unit,FUNCTION);
    252268  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/src/Load_store_unit_genMoore.cpp

    r81 r123  
    2626    log_printf(FUNC,Load_store_unit,FUNCTION,"Begin");
    2727
     28//     if (PORT_READ(in_NRESET))
    2829    (this->*function_genMoore) ();
    2930   
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/src/Read_queue.cpp

    r88 r123  
    3636    log_printf(FUNC,Read_queue,"Read_queue","Begin");
    3737
    38 #if DEBUG_Read_queue == true
    39     log_printf(INFO,Read_queue,FUNCTION,_("<%s> Parameters"),_name.c_str());
    40 
    41     std::cout << *param << std::endl;
    42 #endif   
     38// #if DEBUG_Read_queue == true
     39//     log_printf(INFO,Read_queue,FUNCTION,_("<%s> Parameters"),_name.c_str());
     40
     41//     std::cout << *param << std::endl;
     42// #endif   
    4343
    4444#ifdef SYSTEMC
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/src/Read_queue_genMealy_read_queue_out_gpr.cpp

    r88 r123  
    2525    log_function(Read_queue,FUNCTION,_name.c_str());
    2626
     27    if (PORT_READ(in_NRESET))
     28      {
    2729    internal_READ_QUEUE_OUT_DATA_RA_VAL = (// Previous value
    2830                                           _queue_head->_data_ra_val or
     
    102104
    103105    // Affectation out port
     106    PORT_WRITE(out_READ_QUEUE_OUT_DATA_RA    ,internal_READ_QUEUE_OUT_DATA_RA    );
     107    PORT_WRITE(out_READ_QUEUE_OUT_DATA_RB    ,internal_READ_QUEUE_OUT_DATA_RB    );
     108      }
     109    else
     110      {
     111        internal_READ_QUEUE_OUT_DATA_RA_VAL = 0;
     112        internal_READ_QUEUE_OUT_DATA_RB_VAL = 0;
     113//         internal_READ_QUEUE_OUT_DATA_RA = 0;
     114//         internal_READ_QUEUE_OUT_DATA_RB = 0;
     115      }
     116
    104117    PORT_WRITE(out_READ_QUEUE_OUT_DATA_RA_VAL,internal_READ_QUEUE_OUT_DATA_RA_VAL);
    105118    PORT_WRITE(out_READ_QUEUE_OUT_DATA_RB_VAL,internal_READ_QUEUE_OUT_DATA_RB_VAL);
    106     PORT_WRITE(out_READ_QUEUE_OUT_DATA_RA    ,internal_READ_QUEUE_OUT_DATA_RA    );
    107     PORT_WRITE(out_READ_QUEUE_OUT_DATA_RB    ,internal_READ_QUEUE_OUT_DATA_RB    );
    108119
    109120    log_end(Read_queue,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/src/Read_queue_genMealy_read_queue_out_spr.cpp

    r88 r123  
    2525    log_function(Read_queue,FUNCTION,_name.c_str());
    2626
     27    if (PORT_READ(in_NRESET))
     28      {
    2729    internal_READ_QUEUE_OUT_DATA_RC_VAL = (// Previous value
    2830                                           _queue_head->_data_rc_val or
     
    7274
    7375    // Affectation out port
     76    PORT_WRITE(out_READ_QUEUE_OUT_DATA_RC    ,internal_READ_QUEUE_OUT_DATA_RC    );
     77      }
     78    else
     79      {
     80        internal_READ_QUEUE_OUT_DATA_RC_VAL = 0;
     81//         internal_READ_QUEUE_OUT_DATA_RC
     82      }
     83
    7484    PORT_WRITE(out_READ_QUEUE_OUT_DATA_RC_VAL,internal_READ_QUEUE_OUT_DATA_RC_VAL);
    75     PORT_WRITE(out_READ_QUEUE_OUT_DATA_RC    ,internal_READ_QUEUE_OUT_DATA_RC    );
    7685
    7786    log_end(Read_queue,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/src/Read_queue_genMealy_read_queue_out_val.cpp

    r88 r123  
    2525    log_function(Read_queue,FUNCTION,_name.c_str());
    2626
     27    if (PORT_READ(in_NRESET))
     28      {
    2729    internal_READ_QUEUE_OUT_READ_RA_VAL = (// Previous value
    2830                                           _queue_head->_read_ra_val  and
     
    98100
    99101
    100     PORT_WRITE(out_READ_QUEUE_OUT_VAL, internal_READ_QUEUE_OUT_VAL);
    101 
    102102    log_printf(TRACE,Read_queue,FUNCTION,"  * internal_READ_QUEUE_OUT_VAL           : %d",internal_READ_QUEUE_OUT_VAL);
    103103    log_printf(TRACE,Read_queue,FUNCTION,"    * _queue->empty()                     : %d",_queue->empty());
     
    111111    log_printf(TRACE,Read_queue,FUNCTION,"      * _queue_head->_read_rc_val         : %d",_queue_head->_read_rc_val);
    112112    log_printf(TRACE,Read_queue,FUNCTION,"      * in_SPR_READ_ACK      [0]          : %d",PORT_READ(in_SPR_READ_ACK      [0]));
     113      }
     114    else
     115      {
     116        internal_READ_QUEUE_OUT_VAL = 0;
     117      }
     118
     119    PORT_WRITE(out_READ_QUEUE_OUT_VAL, internal_READ_QUEUE_OUT_VAL);
    113120
    114121    log_end(Read_queue,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/src/Read_queue_genMoore.cpp

    r122 r123  
    2525    log_function(Read_queue,FUNCTION,_name.c_str());
    2626
     27    if (PORT_READ(in_NRESET))
     28      {
    2729    bool not_full  = _queue->size() < _param->_size_queue;
    2830    bool not_empty = not _queue->empty();
     
    8486    PORT_WRITE (out_SPR_READ_OOO_ENGINE_ID [0],               _queue_head->_ooo_engine_id);
    8587    PORT_WRITE (out_SPR_READ_NUM_REG       [0],               _queue_head->_num_reg_rc);
    86                    
     88      }
     89    else
     90      {
     91        // Reset
     92
     93    PORT_WRITE (out_READ_QUEUE_IN_ACK , 0);
     94    PORT_WRITE (out_GPR_READ_VAL   [0], 0);
     95    PORT_WRITE (out_GPR_READ_VAL   [1], 0);
     96    PORT_WRITE (out_SPR_READ_VAL   [0], 0);
     97
     98      }
     99   
    87100    log_end(Read_queue,FUNCTION);
    88101  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/src/Read_queue_transition.cpp

    r122 r123  
    4343        // Init, else error in registerfile
    4444        _queue_head->_ooo_engine_id = 0;
     45        // not necessary
     46        _queue_head->_read_ra_val = false;
     47        _queue_head->_read_rb_val = false;
     48        _queue_head->_read_rc_val = false;
     49
     50        _queue_head->_data_ra_val = false;
     51        _queue_head->_data_rb_val = false;
     52        _queue_head->_data_rc_val = false;
     53
     54        _queue_head->_num_reg_ra  = 0;
     55        _queue_head->_num_reg_rb  = 0;
     56        _queue_head->_num_reg_rc  = 0;
    4557      }
    4658    else
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Reservation_station/src/Reservation_station.cpp

    r88 r123  
    3939    log_printf(FUNC,Reservation_station,FUNCTION,"Begin");
    4040
    41 #if DEBUG_Reservation_station == true
    42     log_printf(INFO,Reservation_station,FUNCTION,_("<%s> Parameters"),_name.c_str());
     41// #if DEBUG_Reservation_station == true
     42//     log_printf(INFO,Reservation_station,FUNCTION,_("<%s> Parameters"),_name.c_str());
    4343
    44     std::cout << *param << std::endl;
    45 #endif   
     44//     std::cout << *param << std::endl;
     45// #endif   
    4646
    4747#ifdef SYSTEMC
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Reservation_station/src/Reservation_station_genMoore.cpp

    r122 r123  
    2727    log_function(Reservation_station,FUNCTION,_name.c_str());
    2828
     29    if (PORT_READ(in_NRESET))
     30      {
    2931    // ~~~~~[ Interface "insert" ]~~~~~~~~~~~~~~~~~~~~~~~~
    3032   
     
    3638    internal_INSERT_ACK = not _queue_control->full();
    3739#endif   
    38     PORT_WRITE(out_INSERT_ACK, internal_INSERT_ACK);
    3940
    4041    // ~~~~~[ Interface "retire" ]~~~~~~~~~~~~~~~~~~~~~~~
     
    9293
    9394        internal_RETIRE_VAL [i] = val;
    94         PORT_WRITE(out_RETIRE_VAL [i], val);
    9595
    9696        if (val)
     
    128128          }
    129129      }
     130      }
     131    else
     132      {
     133        // Reset
     134        internal_INSERT_ACK = 0;
     135        // internal_INSERT_SLOT
     136       
     137        for (uint32_t i=0; i<_param->_nb_inst_retire; i++)
     138          {
     139            internal_RETIRE_VAL [i] = 0;
     140            // internal_RETIRE_SLOT [i];
     141          }
     142      }
     143
     144    // Write Output
     145    PORT_WRITE(out_INSERT_ACK    , internal_INSERT_ACK);
     146    for (uint32_t i=0; i<_param->_nb_inst_retire; i++)
     147    PORT_WRITE(out_RETIRE_VAL [i], internal_RETIRE_VAL [i]);
    130148
    131149    log_end(Reservation_station,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/src/Read_unit.cpp

    r88 r123  
    3838    log_printf(FUNC,Read_unit,FUNCTION,"Begin");
    3939
    40 #if DEBUG_Read_unit == true
    41     log_printf(INFO,Read_unit,FUNCTION,_("<%s> Parameters"),_name.c_str());
     40// #if DEBUG_Read_unit == true
     41//     log_printf(INFO,Read_unit,FUNCTION,_("<%s> Parameters"),_name.c_str());
    4242
    43     std::cout << *param << std::endl;
    44 #endif   
     43//     std::cout << *param << std::endl;
     44// #endif   
    4545
    4646    log_printf(INFO,Read_unit,FUNCTION,"Allocation");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Execute_queue/src/Execute_queue_genMoore.cpp

    r101 r123  
    2626    log_function(Execute_queue,FUNCTION,_name.c_str());
    2727
     28    if (PORT_READ(in_NRESET))
     29      {
    2830    // -----[ Interface "execute_queue_in" ]--------------------------------
    2931    {
    3032      internal_EXECUTE_QUEUE_IN_ACK = _queue->size() < _param->_size_queue;
    31      
    32       PORT_WRITE(out_EXECUTE_QUEUE_IN_ACK, internal_EXECUTE_QUEUE_IN_ACK);
    3333    }
    3434
    3535    // -----[ Interface "execute_queue_out" ]--------------------------------
    3636    {
    37       // TODO : make a genMealy version
    3837      internal_EXECUTE_QUEUE_OUT_VAL = (not _queue->empty());
    3938     
    40       PORT_WRITE(out_EXECUTE_QUEUE_OUT_VAL, internal_EXECUTE_QUEUE_OUT_VAL);
    41 
    4239      if (internal_EXECUTE_QUEUE_OUT_VAL)
    4340        {
     
    5956        }
    6057    }
     58      }
     59    else
     60      {
     61        // Reset
     62      internal_EXECUTE_QUEUE_IN_ACK  = 0;
     63      internal_EXECUTE_QUEUE_OUT_VAL = 0;
     64      }
     65
     66    // Write output
     67    PORT_WRITE(out_EXECUTE_QUEUE_IN_ACK , internal_EXECUTE_QUEUE_IN_ACK);
     68    PORT_WRITE(out_EXECUTE_QUEUE_OUT_VAL, internal_EXECUTE_QUEUE_OUT_VAL);
    6169
    6270    log_end(Execute_queue,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Write_queue/src/Write_queue_genMealy_bypass.cpp

    r118 r123  
    2626    log_function(Write_queue,FUNCTION,_name.c_str());
    2727
     28    if (PORT_READ(in_NRESET))
     29      {
    2830    Tcontrol_t val = PORT_READ(in_WRITE_QUEUE_IN_VAL);
    2931
     
    3638    PORT_WRITE(out_BYPASS_WRITE_SPR_NUM_REG   [0], PORT_READ(in_WRITE_QUEUE_IN_NUM_REG_RE   )); // RE
    3739    PORT_WRITE(out_BYPASS_WRITE_SPR_DATA      [0], PORT_READ(in_WRITE_QUEUE_IN_DATA_RE      ));
    38    
    39     // -----[ Interface "bypass_write" ]----------------------------------
     40      }
     41    else
     42      {
     43    PORT_WRITE(out_BYPASS_WRITE_GPR_VAL       [0], 0);
     44    PORT_WRITE(out_BYPASS_WRITE_SPR_VAL       [0], 0);
     45      }
    4046
    4147    log_end(Write_queue,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Write_queue/src/Write_queue_genMealy_write.cpp

    r118 r123  
    2626    log_function(Write_queue,FUNCTION,_name.c_str());
    2727   
     28    if (PORT_READ(in_NRESET))
     29      {
    2830    // -----[ Interface "bypass_write" ]----------------------------------
    2931    // in genMoore
     
    9193        }
    9294    }
     95      }
     96    else
     97      {
     98        internal_WRITE_QUEUE_OUT_VAL = 0;
     99      }
     100   
     101    PORT_WRITE(out_WRITE_QUEUE_OUT_VAL, internal_WRITE_QUEUE_OUT_VAL);
    93102
    94103    log_end(Write_queue,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Write_queue/src/Write_queue_genMoore.cpp

    r118 r123  
    2626    log_function(Write_queue,FUNCTION,_name.c_str());
    2727   
     28    if (PORT_READ(in_NRESET))
     29      {
    2830    // -----[ Interface "bypass_write" ]----------------------------------
    2931    {
     
    7173    {
    7274      internal_WRITE_QUEUE_IN_ACK = _queue->size() < _param->_size_queue;
    73      
    74       PORT_WRITE(out_WRITE_QUEUE_IN_ACK, internal_WRITE_QUEUE_IN_ACK);
    7575    }
    7676
     
    8585      internal_SPR_WRITE_VAL = val and _queue->front()->_write_re;
    8686     
    87       PORT_WRITE(out_GPR_WRITE_VAL [0], internal_GPR_WRITE_VAL);
    88       PORT_WRITE(out_SPR_WRITE_VAL [0], internal_SPR_WRITE_VAL);
    89 
    9087      if (val)
    9188        {
     
    110107                                      );
    111108     
    112       PORT_WRITE(out_WRITE_QUEUE_OUT_VAL, internal_WRITE_QUEUE_OUT_VAL);
    113 
    114109      if (internal_WRITE_QUEUE_OUT_VAL)
    115110        {
     
    133128
    134129      } // end WRITE_QUEUE_SCHEME_MOORE
     130      }
     131    else
     132      {
     133        // Reset
     134        internal_WRITE_QUEUE_IN_ACK  = 0;
     135        internal_WRITE_QUEUE_OUT_VAL = 0;
     136        internal_GPR_WRITE_VAL = 0;
     137        internal_SPR_WRITE_VAL = 0;
     138
     139      }
     140
     141    // Write output
     142    PORT_WRITE(out_WRITE_QUEUE_IN_ACK , internal_WRITE_QUEUE_IN_ACK);
     143    PORT_WRITE(out_WRITE_QUEUE_OUT_VAL, internal_WRITE_QUEUE_OUT_VAL);
     144
     145    PORT_WRITE(out_GPR_WRITE_VAL [0]  , internal_GPR_WRITE_VAL);
     146    PORT_WRITE(out_SPR_WRITE_VAL [0]  , internal_SPR_WRITE_VAL);
     147
    135148    log_end(Write_queue,FUNCTION);
    136149  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/src/Execution_unit_to_Write_unit.cpp

    r88 r123  
    3838    log_printf(FUNC,Execution_unit_to_Write_unit,FUNCTION,"Begin");
    3939
    40 #if DEBUG_Execution_unit_to_Write_unit == true
    41     log_printf(INFO,Execution_unit_to_Write_unit,FUNCTION,_("<%s> Parameters"),_name.c_str());
    42 
    43     std::cout << *param << std::endl;
    44 #endif   
     40// #if DEBUG_Execution_unit_to_Write_unit == true
     41//     log_printf(INFO,Execution_unit_to_Write_unit,FUNCTION,_("<%s> Parameters"),_name.c_str());
     42
     43//     std::cout << *param << std::endl;
     44// #endif   
    4545
    4646    log_printf(INFO,Execution_unit_to_Write_unit,FUNCTION,"Allocation");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/src/Execution_unit_to_Write_unit_genMealy.cpp

    r97 r123  
    2424    log_printf(FUNC,Execution_unit_to_Write_unit,FUNCTION,"Begin");
    2525
     26    if (PORT_READ(in_NRESET))
     27      {
    2628    bool write_unit_use [_param->_nb_write_unit];
    2729
     
    9698        PORT_WRITE(out_WRITE_UNIT_IN_VAL[i], write_unit_use[i]); 
    9799      }
     100      }
     101    else
     102      {
     103        for (uint32_t i=0; i<_param->_nb_execute_unit; i++)
     104          for (uint32_t j=0; j<_param->_nb_execute_unit_port[i]; j++)
     105            PORT_WRITE(out_EXECUTE_UNIT_OUT_ACK [i][j], 0);
     106       
     107        for (uint32_t i=0; i<_param->_nb_write_unit; i++)
     108          PORT_WRITE(out_WRITE_UNIT_IN_VAL[i], 0); 
     109      }
    98110
    99111    log_printf(FUNC,Execution_unit_to_Write_unit,FUNCTION,"End");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Read_unit_to_Execution_unit/src/Read_unit_to_Execution_unit.cpp

    r88 r123  
    3838    log_printf(FUNC,Read_unit_to_Execution_unit,FUNCTION,"Begin");
    3939
    40 #if DEBUG_Read_unit_to_Execution_unit == true
    41     log_printf(INFO,Read_unit_to_Execution_unit,FUNCTION,_("<%s> Parameters"),_name.c_str());
    42 
    43     std::cout << *param << std::endl;
    44 #endif   
     40// #if DEBUG_Read_unit_to_Execution_unit == true
     41//     log_printf(INFO,Read_unit_to_Execution_unit,FUNCTION,_("<%s> Parameters"),_name.c_str());
     42
     43//     std::cout << *param << std::endl;
     44// #endif   
    4545
    4646    log_printf(INFO,Read_unit_to_Execution_unit,FUNCTION,"Allocation");
  • 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

    r122 r123  
    2525    log_function(Read_unit_to_Execution_unit,FUNCTION,_name.c_str());
    2626
     27    if (PORT_READ(in_NRESET))
     28      {
    2729    bool execute_unit_use [_param->_nb_execute_unit][_param->_max_nb_execute_unit_port];
    2830
     
    106108      for (uint32_t j=0; j<_param->_nb_execute_unit_port[i]; j++)
    107109        PORT_WRITE(out_EXECUTE_UNIT_IN_VAL[i][j], execute_unit_use[i][j]);
     110      }
     111    else
     112      {
    108113
     114        for (uint32_t i=0; i<_param->_nb_read_unit; i++)
     115          for (uint32_t j=0; j<_param->_nb_read_unit_port[i]; j++)
     116            PORT_WRITE(out_READ_UNIT_OUT_ACK [i][j], 0);
     117
     118        for (uint32_t i=0; i<_param->_nb_execute_unit; i++)
     119          for (uint32_t j=0; j<_param->_nb_execute_unit_port[i]; j++)
     120            PORT_WRITE(out_EXECUTE_UNIT_IN_VAL[i][j], 0);
     121
     122      }
     123   
    109124    log_end(Read_unit_to_Execution_unit,FUNCTION);
    110125  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue.cpp

    r88 r123  
    3838    log_printf(FUNC,Register_unit_Glue,FUNCTION,"Begin");
    3939
    40 #if DEBUG_Register_unit_Glue == true
    41     log_printf(INFO,Register_unit_Glue,FUNCTION,_("<%s> Parameters"),_name.c_str());
    42 
    43     std::cout << *param << std::endl;
    44 #endif   
     40// #if DEBUG_Register_unit_Glue == true
     41//     log_printf(INFO,Register_unit_Glue,FUNCTION,_("<%s> Parameters"),_name.c_str());
     42
     43//     std::cout << *param << std::endl;
     44// #endif   
    4545
    4646    log_printf(INFO,Register_unit_Glue,FUNCTION,"Allocation");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_genMealy_gpr_read.cpp

    r88 r123  
    2626    log_function(Register_unit_Glue,FUNCTION,_name.c_str());
    2727
    28 //     if (not PORT_READ(in_NRESET))
    29 //       {
    30 //      for (uint32_t j=0; j<_param->_nb_gpr_read; j++)
    31 //        PORT_WRITE(out_GPR_READ_ACK      [j], 0);
    32 //       }
    33 //     else
     28    if (PORT_READ(in_NRESET))
    3429      {
    3530        for (uint32_t j=0; j<_param->_nb_gpr_read; j++)
     
    4439            PORT_WRITE(out_GPR_READ_DATA_VAL [j], PORT_READ(in_GPR_READ_STATUS_DATA_VAL  [ooo_engine_id][j]));
    4540          }
     41      }
     42    else
     43      {
     44        for (uint32_t j=0; j<_param->_nb_gpr_read; j++)
     45          PORT_WRITE(out_GPR_READ_ACK      [j], 0);
    4646      }
    4747
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_genMealy_gpr_read_registerfile.cpp

    r88 r123  
    2626    log_function(Register_unit_Glue,FUNCTION,_name.c_str());
    2727
    28 //     if (not PORT_READ(in_NRESET))
    29 //       {
    30 //      for (uint32_t j=0; j<_param->_nb_gpr_read; j++)
    31 //        for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
    32 //          PORT_WRITE(out_GPR_READ_REGISTERFILE_VAL [i][j],0);
    33 //       }
    34 //     else
     28    if (PORT_READ(in_NRESET))
    3529      {
    3630        for (uint32_t j=0; j<_param->_nb_gpr_read; j++)
     
    4943          }
    5044      }
     45    else
     46      {
     47        for (uint32_t j=0; j<_param->_nb_gpr_read; j++)
     48          for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
     49            PORT_WRITE(out_GPR_READ_REGISTERFILE_VAL [i][j],0);
     50      }
    5151
    5252    log_end(Register_unit_Glue,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_genMealy_gpr_read_status.cpp

    r88 r123  
    2626    log_function(Register_unit_Glue,FUNCTION,_name.c_str());
    2727
    28 //     if (not PORT_READ(in_NRESET))
    29 //       {
    30 //      for (uint32_t j=0; j<_param->_nb_gpr_read; j++)
    31 //        for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
    32 //          PORT_WRITE(out_GPR_READ_STATUS_VAL       [i][j], 0);
    33 //       }
    34 //     else
     28    if (PORT_READ(in_NRESET))
    3529      {
    3630        for (uint32_t j=0; j<_param->_nb_gpr_read; j++)
     
    4943          }
    5044      }
     45    else
     46      {
     47        for (uint32_t j=0; j<_param->_nb_gpr_read; j++)
     48          for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
     49            PORT_WRITE(out_GPR_READ_STATUS_VAL       [i][j], 0);
     50      }
    5151
    5252    log_end(Register_unit_Glue,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_genMealy_gpr_registerfile.cpp

    r88 r123  
    2626    log_function(Register_unit_Glue,FUNCTION,_name.c_str());
    2727
    28 //     if (not PORT_READ(in_NRESET))
    29 //       {
    30 //      for (uint32_t j=0; j<_param->_nb_gpr_write; j++)
    31 //        for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
    32 //          PORT_WRITE(out_GPR_WRITE_REGISTERFILE_VAL [i][j], 0);
    33 //       }
    34 //     else
     28    if (PORT_READ(in_NRESET))
    3529      {
    3630        for (uint32_t j=0; j<_param->_nb_gpr_write; j++)
     
    4842          }
    4943      }
     44    else
     45      {
     46        for (uint32_t j=0; j<_param->_nb_gpr_write; j++)
     47          for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
     48            PORT_WRITE(out_GPR_WRITE_REGISTERFILE_VAL [i][j], 0);
     49      }
    5050
    5151    log_end(Register_unit_Glue,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_genMealy_gpr_write.cpp

    r88 r123  
    2525    log_begin(Register_unit_Glue,FUNCTION);
    2626    log_function(Register_unit_Glue,FUNCTION,_name.c_str());
    27 //     if (not PORT_READ(in_NRESET))
    28 //       {
    29 //      for (uint32_t j=0; j<_param->_nb_gpr_write; j++)
    30 //        for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
    31 //          PORT_WRITE(out_GPR_WRITE_ACK [j], 0);
    32 //       }
    33 //     else
     27
     28
     29    if (PORT_READ(in_NRESET))
    3430      {
    3531        for (uint32_t j=0; j<_param->_nb_gpr_write; j++)
     
    4238            PORT_WRITE(out_GPR_WRITE_ACK [j],registerfile_ack and status_ack);
    4339          }
     40      }
     41    else
     42      {
     43        for (uint32_t j=0; j<_param->_nb_gpr_write; j++)
     44          for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
     45            PORT_WRITE(out_GPR_WRITE_ACK [j], 0);
    4446      }
    4547   
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_genMealy_gpr_write_status.cpp

    r88 r123  
    2626    log_function(Register_unit_Glue,FUNCTION,_name.c_str());
    2727
    28 //     if (not PORT_READ(in_NRESET))
    29 //       {
    30 //      for (uint32_t j=0; j<_param->_nb_gpr_write; j++)
    31 //        for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
    32 //          PORT_WRITE(out_GPR_WRITE_STATUS_VAL       [i][j], 0);
    33 //       }
    34 //     else
     28    if (PORT_READ(in_NRESET))
    3529      {
    3630        for (uint32_t j=0; j<_param->_nb_gpr_write; j++)
     
    4842          }
    4943      }
     44    else
     45      {
     46        for (uint32_t j=0; j<_param->_nb_gpr_write; j++)
     47          for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
     48            PORT_WRITE(out_GPR_WRITE_STATUS_VAL       [i][j], 0);
     49      }
     50
    5051
    5152    log_end(Register_unit_Glue,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_genMealy_insert.cpp

    r88 r123  
    2626    log_function(Register_unit_Glue,FUNCTION,_name.c_str());
    2727
     28    if (PORT_READ(in_NRESET))
     29      {
    2830    for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
    2931      for (uint32_t j=0; j<_param->_nb_inst_insert_rob [i]; j++)
     
    5961
    6062        }
     63      }
     64    else
     65      {
     66        for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
     67          for (uint32_t j=0; j<_param->_nb_inst_insert_rob [i]; j++)
     68            {
     69              PORT_WRITE(out_INSERT_ROB_ACK            [i][j], 0);
     70              PORT_WRITE(out_INSERT_ROB_GPR_STATUS_VAL [i][j], 0);
     71              PORT_WRITE(out_INSERT_ROB_SPR_STATUS_VAL [i][j], 0);
     72            }
     73      }
    6174
    6275    log_end(Register_unit_Glue,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_genMealy_retire.cpp

    r88 r123  
    2727    log_function(Register_unit_Glue,FUNCTION,_name.c_str());
    2828
     29    if (PORT_READ(in_NRESET))
     30      {
    2931    for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
    3032      {
     
    5860          }
    5961      }
    60 
     62}
    6163    log_end(Register_unit_Glue,FUNCTION);
    6264  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_genMealy_spr_read.cpp

    r88 r123  
    2626    log_function(Register_unit_Glue,FUNCTION,_name.c_str());
    2727
    28 //     if (not PORT_READ(in_NRESET))
    29 //       {
    30 //      for (uint32_t j=0; j<_param->_nb_spr_read; j++)
    31 //        PORT_WRITE(out_SPR_READ_ACK      [j], 0);
    32 //       }
    33 //     else
     28    if (PORT_READ(in_NRESET))
    3429      {
    3530        for (uint32_t j=0; j<_param->_nb_spr_read; j++)
     
    4439            PORT_WRITE(out_SPR_READ_DATA_VAL [j], PORT_READ(in_SPR_READ_STATUS_DATA_VAL  [ooo_engine_id][j]));
    4540          }
     41      }
     42    else
     43      {
     44        for (uint32_t j=0; j<_param->_nb_spr_read; j++)
     45          PORT_WRITE(out_SPR_READ_ACK      [j], 0);
    4646      }
    4747
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_genMealy_spr_read_registerfile.cpp

    r88 r123  
    2626    log_function(Register_unit_Glue,FUNCTION,_name.c_str());
    2727
    28 //     if (not PORT_READ(in_NRESET))
    29 //       {
    30 //      for (uint32_t j=0; j<_param->_nb_spr_read; j++)
    31 //        for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
    32 //          PORT_WRITE(out_SPR_READ_REGISTERFILE_VAL [i][j],0);
    33 //       }
    34 //     else
     28    if (PORT_READ(in_NRESET))
    3529      {
    3630        for (uint32_t j=0; j<_param->_nb_spr_read; j++)
     
    4842          }
    4943      }
     44    else
     45      {
     46        for (uint32_t j=0; j<_param->_nb_spr_read; j++)
     47          for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
     48            PORT_WRITE(out_SPR_READ_REGISTERFILE_VAL [i][j],0);
     49      }
    5050
    5151    log_end(Register_unit_Glue,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_genMealy_spr_read_status.cpp

    r88 r123  
    2626    log_function(Register_unit_Glue,FUNCTION,_name.c_str());
    2727
    28 //     if (not PORT_READ(in_NRESET))
    29 //       {
    30 //      for (uint32_t j=0; j<_param->_nb_spr_read; j++)
    31 //        for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
    32 //          PORT_WRITE(out_SPR_READ_STATUS_VAL       [i][j], 0);
    33 //       }
    34 //     else
     28    if (PORT_READ(in_NRESET))
    3529      {
    3630        for (uint32_t j=0; j<_param->_nb_spr_read; j++)
     
    4842          }
    4943      }
     44    else
     45      {
     46        for (uint32_t j=0; j<_param->_nb_spr_read; j++)
     47          for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
     48            PORT_WRITE(out_SPR_READ_STATUS_VAL       [i][j], 0);
     49      }
    5050
    5151    log_end(Register_unit_Glue,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_genMealy_spr_registerfile.cpp

    r88 r123  
    2626    log_function(Register_unit_Glue,FUNCTION,_name.c_str());
    2727
    28 //     if (not PORT_READ(in_NRESET))
    29 //       {
    30 //      for (uint32_t j=0; j<_param->_nb_spr_write; j++)
    31 //        for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
    32 //          PORT_WRITE(out_SPR_WRITE_REGISTERFILE_VAL [i][j], 0);
    33 //       }
    34 //     else
     28    if (PORT_READ(in_NRESET))
    3529      {
    3630        for (uint32_t j=0; j<_param->_nb_spr_write; j++)
     
    4842          }
    4943      }
     44    else
     45      {
     46        for (uint32_t j=0; j<_param->_nb_spr_write; j++)
     47          for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
     48            PORT_WRITE(out_SPR_WRITE_REGISTERFILE_VAL [i][j], 0);
     49      }
    5050
    5151    log_end(Register_unit_Glue,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_genMealy_spr_write.cpp

    r88 r123  
    2626    log_function(Register_unit_Glue,FUNCTION,_name.c_str());
    2727
    28 //     if (not PORT_READ(in_NRESET))
    29 //       {
    30 //      for (uint32_t j=0; j<_param->_nb_spr_write; j++)
    31 //        for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
    32 //          PORT_WRITE(out_SPR_WRITE_ACK [j], 0);
    33 //       }
    34 //     else
     28    if (PORT_READ(in_NRESET))
    3529      {
    3630        for (uint32_t j=0; j<_param->_nb_spr_write; j++)
     
    4337            PORT_WRITE(out_SPR_WRITE_ACK [j],registerfile_ack and status_ack);
    4438          }
     39      }
     40    else
     41      {
     42        for (uint32_t j=0; j<_param->_nb_spr_write; j++)
     43          for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
     44            PORT_WRITE(out_SPR_WRITE_ACK [j], 0);
    4545      }
    4646
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_genMealy_spr_write_status.cpp

    r88 r123  
    2626    log_function(Register_unit_Glue,FUNCTION,_name.c_str());
    2727
    28 //     if (not PORT_READ(in_NRESET))
    29 //       {
    30 //      for (uint32_t j=0; j<_param->_nb_spr_write; j++)
    31 //        for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
    32 //          PORT_WRITE(out_SPR_WRITE_STATUS_VAL       [i][j], 0);
    33 //       }
    34 //     else
     28    if (PORT_READ(in_NRESET))
    3529      {
    3630        for (uint32_t j=0; j<_param->_nb_spr_write; j++)
     
    4842          }
    4943      }
     44    else
     45      {
     46        for (uint32_t j=0; j<_param->_nb_spr_write; j++)
     47          for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
     48            PORT_WRITE(out_SPR_WRITE_STATUS_VAL       [i][j], 0);
     49      }
    5050
    5151    log_end(Register_unit_Glue,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Register_unit.cpp

    r88 r123  
    3737    log_printf(FUNC,Register_unit,FUNCTION,"Begin");
    3838
    39 #if DEBUG_Register_unit == true
    40     log_printf(INFO,Register_unit,FUNCTION,_("<%s> Parameters"),_name.c_str());
     39// #if DEBUG_Register_unit == true
     40//     log_printf(INFO,Register_unit,FUNCTION,_("<%s> Parameters"),_name.c_str());
    4141
    42     std::cout << *param << std::endl;
    43 #endif   
     42//     std::cout << *param << std::endl;
     43// #endif   
    4444
    4545    log_printf(INFO,Register_unit,FUNCTION,"Allocation");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/src/Execute_loop.cpp

    r88 r123  
    3636    log_printf(FUNC,Execute_loop,FUNCTION,"Begin");
    3737
    38 #if DEBUG_Execute_loop == true
    39     log_printf(INFO,Execute_loop,FUNCTION,_("<%s> Parameters"),_name.c_str());
     38// #if DEBUG_Execute_loop == true
     39//     log_printf(INFO,Execute_loop,FUNCTION,_("<%s> Parameters"),_name.c_str());
    4040
    41     std::cout << *param << std::endl;
    42 #endif   
     41//     std::cout << *param << std::endl;
     42// #endif   
    4343
    4444    log_printf(INFO,Execute_loop,FUNCTION,"Allocation");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/src/Parameters_msg_error.cpp

    r88 r123  
    99#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/include/Parameters.h"
    1010#include <sstream>
     11#include <set>
    1112
    1213namespace morpheo                    {
     
    2930        test.error(toString(_("Functionnal_unit [%d] must treat once instruction.\n"),i));
    3031
     32    std::set<uint32_t> link_load_store_unit_and_write_unit [_nb_load_store_unit];
     33    for (uint32_t i=0; i<_nb_load_store_unit; ++i)
     34      link_load_store_unit_and_write_unit[i].clear();
     35
     36    for (uint32_t i=0; i<_nb_execute_unit; i++)
     37      if (_is_load_store_unit [i])
     38        {
     39          uint32_t lsq = _translate_num_execute_unit[i];
     40
     41          for (uint32_t j=0; j<_nb_execute_unit_port[i]; j++)
     42            for (uint32_t k=0; k<_nb_write_unit; k++)
     43              if (_execution_unit_to_write_unit_table_routing [i][j][k])
     44                {
     45                  if (link_load_store_unit_and_write_unit[lsq].find(k) != link_load_store_unit_and_write_unit[lsq].end())
     46                    {
     47                      if (link_load_store_unit_and_write_unit[lsq].size() != 0)
     48                        test.error(toString(_("Can't connect Load Store Unit [%d] (port %d) with Write unit [%d], because it's already connected with Write unit [%d]"),lsq,j,k,*(link_load_store_unit_and_write_unit[lsq].begin())));
     49
     50                      link_load_store_unit_and_write_unit[lsq].insert(link_load_store_unit_and_write_unit[lsq].end(),k);
     51                    }
     52                }
     53        }
    3154    log_printf(FUNC,Execute_loop,FUNCTION,"End");
    3255
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/include/Context_State.h

    r120 r123  
    143143    // ~~~~~[ Interface : "context" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    144144  public    : SC_OUT(Tcontrol_t         )  ** out_CONTEXT_DECOD_ENABLE               ;//[nb_context]
     145  public    : SC_OUT(Tcontrol_t         )  ** out_CONTEXT_EVENT                      ;//[nb_context]
    145146
    146147    // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     
    211212  public  : void        genMoore                  (void);
    212213  public  : void        genMealy_decod_event      (void);
     214  public  : void        genMealy_context_event    (void);
    213215#endif                                         
    214216
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/src/Context_State.cpp

    r101 r123  
    3939    usage_environment(_usage);
    4040
    41 #if DEBUG_Context_State == true
    42     log_printf(INFO,Context_State,FUNCTION,_("<%s> Parameters"),_name.c_str());
     41// #if DEBUG_Context_State == true
     42//     log_printf(INFO,Context_State,FUNCTION,_("<%s> Parameters"),_name.c_str());
    4343
    44     std::cout << *param << std::endl;
    45 #endif   
     44//     std::cout << *param << std::endl;
     45// #endif   
    4646
    4747    log_printf(INFO,Context_State,FUNCTION,_("Allocation"));
     
    139139        // List dependency information
    140140# endif   
     141
     142        log_printf(INFO,Context_State,FUNCTION,_("Method - genMealy_context_event"));
     143
     144        SC_METHOD (genMealy_context_event);
     145        dont_initialize ();
     146//      sensitive << (*(in_CLOCK)).neg(); // use internal register
     147        sensitive << (*(in_COMMIT_EVENT_VAL             ));
     148        if (_param->_have_port_context_id)                                     
     149        sensitive << (*(in_COMMIT_EVENT_CONTEXT_ID      ));
     150        for (uint32_t i=0; i<_param->_nb_inst_branch_complete; ++i)
     151          {
     152            sensitive << (*(in_BRANCH_COMPLETE_VAL             [i]))
     153                      << (*(in_BRANCH_COMPLETE_MISS_PREDICTION [i]));
     154            if (_param->_have_port_context_id)                                 
     155            sensitive << (*(in_BRANCH_COMPLETE_CONTEXT_ID      [i]));
     156          }
     157       
     158# ifdef SYSTEMCASS_SPECIFIC
     159        // List dependency information
     160# endif   
    141161       
    142162#endif
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/src/Context_State_allocation.cpp

    r119 r123  
    172172     
    173173      ALLOC1_SIGNAL_OUT(out_CONTEXT_DECOD_ENABLE               ,"decod_enable",Tcontrol_t,1);
     174      ALLOC1_SIGNAL_OUT(out_CONTEXT_EVENT                      ,"event"       ,Tcontrol_t,1);
    174175
    175176      ALLOC1_INTERFACE_END(_param->_nb_context);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/src/Context_State_deallocation.cpp

    r119 r123  
    9191       
    9292        DELETE1_SIGNAL(out_CONTEXT_DECOD_ENABLE               ,_param->_nb_context,1);
     93        DELETE1_SIGNAL(out_CONTEXT_EVENT                      ,_param->_nb_context,1);
    9394
    9495        DELETE1_SIGNAL( in_DEPTH_MIN                          ,_param->_nb_context,_param->_size_depth);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/src/Context_State_genMealy_decod_event.cpp

    r102 r123  
    2424    log_function(Context_State,FUNCTION,_name.c_str());
    2525
     26    if (PORT_READ(in_NRESET))
     27      {
    2628    for (uint32_t i=0; i<_param->_nb_decod_unit; i++)
    2729      {
     
    4951
    5052        internal_DECOD_EVENT_ACK [i] = ack;
    51         PORT_WRITE(out_DECOD_EVENT_ACK [i], internal_DECOD_EVENT_ACK [i]);
    5253      }
     54      }
     55    else
     56      {
     57        for (uint32_t i=0; i<_param->_nb_decod_unit; i++)
     58          internal_DECOD_EVENT_ACK [i] = 0;
     59      }
     60
     61    for (uint32_t i=0; i<_param->_nb_decod_unit; i++)
     62      PORT_WRITE(out_DECOD_EVENT_ACK [i], internal_DECOD_EVENT_ACK [i]);
    5363
    5464    log_end(Context_State,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/src/Context_State_genMoore.cpp

    r119 r123  
    2424    log_function(Context_State,FUNCTION,_name.c_str());
    2525
     26    if (PORT_READ(in_NRESET))
     27      {
    2628    // -------------------------------------------------------------------
    2729    // -----[ EVENT ]-----------------------------------------------------
     
    6769
    6870        internal_EVENT_VAL [i] = val;
    69         PORT_WRITE(out_EVENT_VAL              [i], val);
    7071        PORT_WRITE(out_EVENT_ADDRESS          [i], address);
    7172        PORT_WRITE(out_EVENT_ADDRESS_NEXT     [i], address_next);
     
    9798        internal_SPR_EVENT_VAL [i] = (state == CONTEXT_STATE_KO_EXCEP_SPR  );
    9899
    99         PORT_WRITE(out_SPR_EVENT_VAL       [i], internal_SPR_EVENT_VAL     [i]);
    100100        PORT_WRITE(out_SPR_EVENT_EPCR      [i], reg_EVENT_ADDRESS_EPCR     [i]);
    101101        PORT_WRITE(out_SPR_EVENT_EEAR      [i], reg_EVENT_ADDRESS_EEAR     [i]);
     
    117117        PORT_WRITE(out_CONTEXT_DECOD_ENABLE [i], (state==CONTEXT_STATE_OK));
    118118      }
     119      }
     120    else
     121      {
     122        for (uint32_t i=0; i<_param->_nb_context; i++)
     123          {
     124            internal_EVENT_VAL     [i] = 0;
     125            internal_SPR_EVENT_VAL [i] = 0;
     126
     127            PORT_WRITE(out_CONTEXT_DECOD_ENABLE [i], 0);
     128          }
     129      }
     130
     131    // Write output
     132    for (uint32_t i=0; i<_param->_nb_context; i++)
     133      {
     134        PORT_WRITE(out_EVENT_VAL     [i], internal_EVENT_VAL     [i]);
     135        PORT_WRITE(out_SPR_EVENT_VAL [i], internal_SPR_EVENT_VAL [i]);
     136      }
    119137
    120138    log_end(Context_State,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/src/Context_State_transition.cpp

    r122 r123  
    1616namespace context_state {
    1717
    18 #define MISS_FAST
     18// #define MANAGE_EVENT MANAGE_EVENT_WAIT_ALL
     19// #define MANAGE_EVENT MANAGE_EVENT_WAIT_DECODE
     20#define MANAGE_EVENT MANAGE_EVENT_NO_WAIT
    1921
    2022#define get_priority(x) \
    2123  (((state == CONTEXT_STATE_KO_MISS_LOAD_ADDR                  ) or  \
     24    (state == CONTEXT_STATE_KO_MISS_LOAD_WAITEND               ) or  \
    2225    (state == CONTEXT_STATE_KO_MISS_LOAD_AND_BRANCH_ADDR       ) or  \
    23     (state == CONTEXT_STATE_KO_MISS_LOAD_WAITEND               ) or  \
    2426    (state == CONTEXT_STATE_KO_MISS_LOAD_AND_BRANCH_WAITEND    ) or  \
    2527    (state == CONTEXT_STATE_KO_MISS_LOAD_AND_BRANCH_WAIT_UPDATE))?3: \
     
    4345            reg_STATE            [i] = CONTEXT_STATE_OK;
    4446            reg_INTERRUPT_ENABLE [i] = 0;
     47            reg_EVENT_DEPTH      [i] = 0; // unacessary
    4548          }
    4649      }
     
    5962            Tcounter_t inst_all        = inst_commit_all + inst_decod_all;
    6063//          Tcounter_t inst_mem        = inst_commit_mem + inst_decod_all;
     64            bool       condition       = ( (MANAGE_EVENT == MANAGE_EVENT_WAIT_ALL   )?(inst_all       == 0):
     65                                          ((MANAGE_EVENT == MANAGE_EVENT_WAIT_DECODE)?(inst_decod_all == 0):
     66                                            true));
    6167
    6268            context_state_t state = reg_STATE [i];
     
    8995              case CONTEXT_STATE_KO_MISS_BRANCH_WAITEND :
    9096                {
    91                   // Wait end of all instruction
    92 //                if (inst_all == 0)
    93                   if (
    94 #ifdef  MISS_FAST
    95                       inst_decod_all ==
    96 #else
    97                       inst_all ==
    98 #endif
    99                       0)
    100                    
     97                  if (condition)
    10198//                  state = CONTEXT_STATE_OK;
    10299                    state = CONTEXT_STATE_KO_MISS_BRANCH_ADDR;
     
    106103                {
    107104                  // Wait end of all instruction
    108 //                if (inst_all == 0)
    109                   if (
    110 #ifdef  MISS_FAST
    111                       inst_decod_all ==
    112 #else
    113                       inst_all ==
    114 #endif
    115                       0)
     105                  if (condition)
    116106                    state = CONTEXT_STATE_KO_MISS_LOAD_ADDR;
    117107
     
    146136                {
    147137                  // Wait end of all instruction
    148 //                if (inst_all == 0)
    149                   if (
    150 #ifdef  MISS_FAST
    151                       inst_decod_all ==
    152 #else
    153                       inst_all ==
    154 #endif
    155                       0)
     138                  if (condition)
    156139//                  state = CONTEXT_STATE_OK; // @@@ TODO : make MISS fast (miss decod)
    157140                    state = CONTEXT_STATE_KO_MISS_LOAD_AND_BRANCH_ADDR;
     
    333316#endif
    334317
     318              log_printf(TRACE,Context_State,FUNCTION,"    * state     : %s",toString(state).c_str());
    335319              log_printf(TRACE,Context_State,FUNCTION,"    * depth     : %d",depth     );
    336320              log_printf(TRACE,Context_State,FUNCTION,"    * depth_cur : %d",depth_cur );
     
    648632                          }
    649633                        }
     634
     635                      depth = (depth+1)%_param->_nb_inst_branch_speculated[context];
     636
    650637                      break;
    651638                    }
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/src/Decod.cpp

    r101 r123  
    3838    log_printf(FUNC,Decod,FUNCTION,"Begin");
    3939
    40 #if DEBUG_Decod == true
    41     log_printf(INFO,Decod,FUNCTION,_("<%s> Parameters"),_name.c_str());
    42 
    43     std::cout << *param << std::endl;
    44 #endif   
     40// #if DEBUG_Decod == true
     41//     log_printf(INFO,Decod,FUNCTION,_("<%s> Parameters"),_name.c_str());
     42
     43//     std::cout << *param << std::endl;
     44// #endif   
    4545
    4646    log_printf(INFO,Decod,FUNCTION,"Allocation");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/src/Decod_genMealy.cpp

    r120 r123  
    2525    log_function(Decod,FUNCTION,_name.c_str());
    2626
     27    if (PORT_READ(in_NRESET))
     28      {
    2729    //-----------------------------------
    2830    // Initialization
     
    280282#endif
    281283      }
     284      }
     285    else
     286      {
     287    for (uint32_t i=0; i<_param->_nb_context; i++)
     288      {
     289        internal_CONTEXT_HAVE_TRANSACTION [i] = false;
     290//      internal_CONTEXT_ADDRESS_PREVIOUS [i] = reg_CONTEXT_ADDRESS_PREVIOUS [i];
     291//      internal_CONTEXT_IS_DELAY_SLOT    [i] = reg_CONTEXT_IS_DELAY_SLOT    [i];
     292      for (uint32_t j=0; j<_param->_nb_inst_fetch[i]; j++)
     293        PORT_WRITE(out_IFETCH_ACK [i][j], 0);
     294      }
     295
     296    PORT_WRITE(out_CONTEXT_EVENT_VAL, 0);
     297
     298    for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
     299      {
     300        PORT_WRITE(out_PREDICT_VAL [i], 0);
     301        PORT_WRITE(out_DECOD_VAL   [i], 0);
     302
     303#ifdef STATISTICS
     304        internal_DECOD_VAL [i] = 0;
     305#endif
     306      }
     307      }
    282308
    283309    log_end(Decod,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/include/Decod_queue.h

    r111 r123  
    106106  public    : SC_OUT(Toperation_t       )  ** out_DECOD_OUT_OPERATION     ;//[nb_inst_decod]
    107107  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_OUT_NO_EXECUTE    ;//[nb_inst_decod]
     108//public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_OUT_HAVE_EVENT    ;//[nb_inst_decod]
     109  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_OUT_LAST_EVENT    ;//[nb_inst_decod]
    108110  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_OUT_IS_DELAY_SLOT ;//[nb_inst_decod]
    109111#ifdef DEBUG
     
    134136  public    : SC_OUT(Tcounter_t         )  ** out_NB_INST_ALL             ;//[nb_context]
    135137
     138    // ~~~~~[ Interface : "context" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     139  public    : SC_IN (Tcontrol_t         )  **  in_CONTEXT_EVENT           ;//[nb_context]
     140
    136141    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
    137142
     
    141146  private   : std::list<decod_queue_entry_t*> * reg_QUEUE                  ;
    142147  private   : uint32_t                        * reg_NB_INST                ;//[nb_context]
     148  private   : uint32_t                        * reg_NB_INST_EVENT          ;//[nb_context]
     149
    143150    // implementation : one_fifo only
    144151  private   : uint32_t                          reg_LAST_SLOT              ;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue.cpp

    r111 r123  
    4040    usage_environment(_usage);
    4141
    42 #if DEBUG_Decod_queue == true
    43     log_printf(INFO,Decod_queue,FUNCTION,_("<%s> Parameters"),_name.c_str());
     42// #if DEBUG_Decod_queue == true
     43//     log_printf(INFO,Decod_queue,FUNCTION,_("<%s> Parameters"),_name.c_str());
    4444
    45     std::cout << *param << std::endl;
    46 #endif   
     45//     std::cout << *param << std::endl;
     46// #endif   
    4747
    4848    log_printf(INFO,Decod_queue,FUNCTION,_("Allocation"));
     
    129129        for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
    130130          sensitive << (*(in_DECOD_OUT_ACK [i]));
    131           for (uint32_t i=0; i<_param->_nb_context; i++)
    132             {
    133               if (_param->_have_port_depth)
    134                 {
    135               sensitive << (*(in_DEPTH_MIN [i]));
    136               sensitive << (*(in_DEPTH_MAX [i]));
    137                 }
    138               sensitive << (*(in_DEPTH_FULL[i]));
    139             }
     131//         for (uint32_t i=0; i<_param->_nb_context; i++)
     132//           {
     133//             if (_param->_have_port_depth)
     134//               {
     135//                 sensitive << (*(in_DEPTH_MIN [i]));
     136//                 sensitive << (*(in_DEPTH_MAX [i]));
     137//               }
     138//             sensitive << (*(in_DEPTH_FULL[i]));
     139//           }
    140140
    141141# ifdef SYSTEMCASS_SPECIFIC
    142         // List dependency information
    143         for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
    144           {
    145             (*(out_DECOD_OUT_VAL [i])) (*(in_DECOD_OUT_ACK [i]));
    146             for (uint32_t j=0; j<_param->_nb_context; j++)
    147               {
    148                 if (_param->_have_port_depth)
    149                   {
    150                 (*(out_DECOD_OUT_VAL [i])) (*(in_DEPTH_MIN [j]));
    151                 (*(out_DECOD_OUT_VAL [i])) (*(in_DEPTH_MAX [j]));
    152                   }
    153               }
    154           }
     142//      // List dependency information
     143//      for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
     144//        {
     145//          (*(out_DECOD_OUT_VAL [i])) (*(in_DECOD_OUT_ACK [i]));
     146//             for (uint32_t j=0; j<_param->_nb_context; j++)
     147//               {
     148//                 if (_param->_have_port_depth)
     149//                   {
     150//                 (*(out_DECOD_OUT_VAL [i])) (*(in_DEPTH_MIN [j]));
     151//                 (*(out_DECOD_OUT_VAL [i])) (*(in_DEPTH_MAX [j]));
     152//                   }
     153//               }
     154//        }
    155155# endif   
    156156       
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_allocation.cpp

    r118 r123  
    100100      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_OPERATION      ,"operation"    ,Toperation_t       ,_param->_size_operation             );
    101101      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_NO_EXECUTE     ,"no_execute"   ,Tcontrol_t         ,1                                   );
     102//    ALLOC1_SIGNAL_OUT(out_DECOD_OUT_HAVE_EVENT     ,"have_event"   ,Tcontrol_t         ,1                                   );
     103      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_LAST_EVENT     ,"last_event"   ,Tcontrol_t         ,1                                   );
    102104      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_IS_DELAY_SLOT  ,"is_delay_slot",Tcontrol_t         ,1                                   );
    103105#ifdef DEBUG
     
    143145    }
    144146
     147    // ~~~~~[ Interface : "context" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~           
     148    {
     149      ALLOC1_INTERFACE_BEGIN("context",IN ,NORTH,_("Context"), _param->_nb_context);
     150
     151      ALLOC1_SIGNAL_IN ( in_CONTEXT_EVENT  ,"event"    ,Tcontrol_t         ,1);
     152
     153      ALLOC1_INTERFACE_END(_param->_nb_context);
     154    }
     155
    145156    if (usage_is_set(_usage,USE_SYSTEMC))
    146157      {
     
    152163      }
    153164
    154     ALLOC1(reg_NB_INST,uint32_t,_param->_nb_context);
     165    ALLOC1(reg_NB_INST           ,uint32_t,_param->_nb_context);
     166    ALLOC1(reg_NB_INST_EVENT     ,uint32_t,_param->_nb_context);
    155167
    156168    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_deallocation.cpp

    r115 r123  
    6262        DELETE1_SIGNAL(out_DECOD_OUT_TYPE          ,_param->_nb_inst_decod,_param->_size_type                  );
    6363        DELETE1_SIGNAL(out_DECOD_OUT_OPERATION     ,_param->_nb_inst_decod,_param->_size_operation             );
    64         DELETE1_SIGNAL(out_DECOD_OUT_NO_EXECUTE    ,_param->_nb_inst_decod,1                                   );
     64        DELETE1_SIGNAL(out_DECOD_OUT_NO_EXECUTE    ,_param->_nb_inst_decod,1                                   );
     65//      DELETE1_SIGNAL(out_DECOD_OUT_HAVE_EVENT    ,_param->_nb_inst_decod,1                                   );
     66        DELETE1_SIGNAL(out_DECOD_OUT_LAST_EVENT    ,_param->_nb_inst_decod,1                                   );
    6567        DELETE1_SIGNAL(out_DECOD_OUT_IS_DELAY_SLOT ,_param->_nb_inst_decod,1                                   );
    6668#ifdef DEBUG
     
    8890
    8991        DELETE1_SIGNAL(out_NB_INST_ALL             ,_param->_nb_context,_param->_size_nb_inst_decod);
     92
     93        DELETE1_SIGNAL( in_CONTEXT_EVENT           ,_param->_nb_context,1);
    9094
    9195        // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
     
    117121          }
    118122
    119         DELETE1(reg_NB_INST ,_param->_nb_context);
     123        DELETE1(reg_NB_INST           ,_param->_nb_context);
     124        DELETE1(reg_NB_INST_EVENT     ,_param->_nb_context);
    120125       
    121126        // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_function_multi_fifo_genMealy_decod_out.cpp

    r115 r123  
    2424    log_begin(Decod_queue,FUNCTION);
    2525    log_function(Decod_queue,FUNCTION,_name.c_str());
    26    
    27     Tcontrol_t val [_param->_nb_inst_decod];
     26
     27    if (PORT_READ(in_NRESET))
     28      {
     29    bool       context_val   [_param->_nb_context];
     30    uint32_t   nb_inst_event [_param->_nb_context];
     31    for (uint32_t i=0; i<_param->_nb_context; i++)
     32      {
     33        context_val   [i] = true;
     34        nb_inst_event [i] = reg_NB_INST_EVENT [i];
     35      }
     36
     37    Tcontrol_t val         [_param->_nb_inst_decod];
    2838    for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
    2939      {
     
    4454           
    4555            Tcontext_t context         = reg_QUEUE[num_bank].front()->_context_id    [0];
    46             Tdepth_t   depth           = reg_QUEUE[num_bank].front()->_depth         [0];
    47             Tdepth_t   depth_min       = (_param->_have_port_depth)?PORT_READ(in_DEPTH_MIN [context]):0;
    48             Tdepth_t   depth_max       = (_param->_have_port_depth)?PORT_READ(in_DEPTH_MAX [context]):0;
    49             Tcontrol_t depth_full      = PORT_READ(in_DEPTH_FULL[context]);
    5056
    51             // is a valid instruction ?
    52             // If DEPTH_CURRENT :
    53             // equal at     DEPTH_MIN            -> not speculative
    54             // not include ]DEPTH_MIN:DEPTH_MAX] -> previous branch miss
    55             //     include ]DEPTH_MIN:DEPTH_MAX] -> speculative
    56            
    57             // All case
    58             // ....... min ...X... max ....... OK
    59             // ....... min ....... max ...X... KO
    60             // ...X... min ....... max ....... KO
    61             // ....... max ....... min ...X... OK
    62             // ...X... max ....... min ....... OK
    63             // ....... max ...X... min ....... KO
    64            
    65             Tcontrol_t is_valid = true;
     57            log_printf(TRACE,Decod_queue,FUNCTION,"      * context      : %d",context);
    6658
    67 //             Tcontrol_t   is_valid      = ((depth == depth_min) or
    68 //                                           depth_full or
    69 //                                           ((depth_min <= depth_max)?
    70 //                                            ((depth >= depth_min) and (depth <=depth_max)):
    71 //                                            ((depth >= depth_min) or  (depth <=depth_max))));
    72             //Tcontrol_t is_valid        = ((depth == depth_min) or
    73             //                              ((depth_min < depth_max)?
    74             //                               (depth<=depth_max):
    75             //                               ((depth > depth_min) or (depth <= depth_max))));
    76             //Tcontrol_t is_valid        = depth <= depth_max;
    77            
    78             log_printf(TRACE,Decod_queue,FUNCTION,"    * is_valid : %d",is_valid);
    79             log_printf(TRACE,Decod_queue,FUNCTION,"      * context      : %d",context);
    80             log_printf(TRACE,Decod_queue,FUNCTION,"      * depth        : %d",depth);
    81             log_printf(TRACE,Decod_queue,FUNCTION,"      * depth_min    : %d",depth_min);
    82             log_printf(TRACE,Decod_queue,FUNCTION,"      * depth_max    : %d",depth_max);
    83             log_printf(TRACE,Decod_queue,FUNCTION,"      * depth_full   : %d",depth_full);
    84 #ifdef DEBUG
    85             log_printf(TRACE,Decod_queue,FUNCTION,"      * address      : 0x%x (0x%x)",reg_QUEUE[num_bank].front()->_address     [0],reg_QUEUE[num_bank].front()->_address     [0]<<2);
    86 #endif
    87             log_printf(TRACE,Decod_queue,FUNCTION,"      * address_next : 0x%x (0x%x)",reg_QUEUE[num_bank].front()->_address_next[0],reg_QUEUE[num_bank].front()->_address_next[0]<<2);
     59            if (context_val [context])
     60              {
    8861
    89             internal_DECOD_OUT_VAL [i] = 1; // in all case, val is set (entry is not empty, and instruction is valid)
    90             if (is_valid)
    91               {
    92                 val                    [i] = 1;
    93                 internal_DECOD_OUT_ACK [i] = PORT_READ(in_DECOD_OUT_ACK [i]);
    94               }
    95             else
    96               {
    97                 // Consume the instruction (to erase)
    98                 internal_DECOD_OUT_ACK [i] = 1;
     62//                 Tdepth_t   depth           = reg_QUEUE[num_bank].front()->_depth         [0];
     63//                 Tdepth_t   depth_min       = (_param->_have_port_depth)?PORT_READ(in_DEPTH_MIN [context]):0;
     64//                 Tdepth_t   depth_max       = (_param->_have_port_depth)?PORT_READ(in_DEPTH_MAX [context]):0;
     65//                 Tcontrol_t depth_full      = PORT_READ(in_DEPTH_FULL[context]);
     66               
     67                    // is a valid instruction ?
     68                // If DEPTH_CURRENT :
     69                // equal at     DEPTH_MIN            -> not speculative
     70                // not include ]DEPTH_MIN:DEPTH_MAX] -> previous branch miss
     71                //     include ]DEPTH_MIN:DEPTH_MAX] -> speculative
     72               
     73                // All case
     74                // ....... min ...X... max ....... OK
     75                // ....... min ....... max ...X... KO
     76                // ...X... min ....... max ....... KO
     77                // ....... max ....... min ...X... OK
     78                // ...X... max ....... min ....... OK
     79                // ....... max ...X... min ....... KO
     80               
     81                Tcontrol_t is_valid = (nb_inst_event [context] == 0);
     82               
     83//                 Tcontrol_t   is_valid      = ((depth == depth_min) or
     84//                                               depth_full or
     85//                                               ((depth_min <= depth_max)?
     86//                                                ((depth >= depth_min) and (depth <=depth_max)):
     87//                                                ((depth >= depth_min) or  (depth <=depth_max))));
     88               
     89                log_printf(TRACE,Decod_queue,FUNCTION,"    * is_valid : %d",is_valid);
     90                log_printf(TRACE,Decod_queue,FUNCTION,"      * context_val  : %d",context_val   [context]);
     91                log_printf(TRACE,Decod_queue,FUNCTION,"      * nb_inst_event: %d",nb_inst_event [context]);
     92//              log_printf(TRACE,Decod_queue,FUNCTION,"      * depth        : %d",depth);
     93//              log_printf(TRACE,Decod_queue,FUNCTION,"      * depth_min    : %d",depth_min);
     94//              log_printf(TRACE,Decod_queue,FUNCTION,"      * depth_max    : %d",depth_max);
     95//              log_printf(TRACE,Decod_queue,FUNCTION,"      * depth_full   : %d",depth_full);
     96#ifdef DEBUG   
     97                log_printf(TRACE,Decod_queue,FUNCTION,"      * address      : 0x%x (0x%x)",reg_QUEUE[num_bank].front()->_address     [0],reg_QUEUE[num_bank].front()->_address     [0]<<2);
     98#endif         
     99                log_printf(TRACE,Decod_queue,FUNCTION,"      * address_next : 0x%x (0x%x)",reg_QUEUE[num_bank].front()->_address_next[0],reg_QUEUE[num_bank].front()->_address_next[0]<<2);
     100               
     101                internal_DECOD_OUT_VAL [i] = 1; // in all case, val is set (entry is not empty, and instruction is valid)
     102               
     103                if (is_valid)
     104                  {
     105                    val                    [i] = 1;
     106                    internal_DECOD_OUT_ACK [i] = PORT_READ(in_DECOD_OUT_ACK [i]);
     107               
     108                  }
     109                else
     110                  {
     111                    // Consume the instruction (to erase)
     112                    internal_DECOD_OUT_ACK [i] = 1;
     113
     114                    // Have event ?
     115                    if (nb_inst_event [context] > 0)
     116                      {
     117                        nb_inst_event [context] --;
     118                       
     119                        // Last event ?
     120                        if (nb_inst_event [context] == 0)
     121                          {
     122                            context_val [context] = false;
     123                          }
     124                      }
     125                  }
    99126              }
    100127          }
     
    107134       
    108135        PORT_WRITE(out_DECOD_OUT_VAL [i],val [i]);
     136      }
     137      }
     138    else
     139      {
     140        // Reset
     141        for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
     142          {
     143            internal_DECOD_OUT_VAL [i] = 0;
     144            internal_DECOD_OUT_ACK [i] = 0;
     145            PORT_WRITE(out_DECOD_OUT_VAL [i],0);
     146          }
    109147      }
    110148
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_function_multi_fifo_genMoore.cpp

    r111 r123  
    2525    log_function(Decod_queue,FUNCTION,_name.c_str());
    2626
     27    if (PORT_READ(in_NRESET))
     28      {
    2729    //--------------------------------------------------------------------
    2830    //-----[ DECOD_IN ]---------------------------------------------------
     
    3436        {
    3537          internal_DECOD_IN_ACK [i] = (reg_QUEUE[num_bank].size() < _param->_size_queue);
    36           PORT_WRITE(out_DECOD_IN_ACK [i],internal_DECOD_IN_ACK [i]);
    3738
    3839          num_bank = (num_bank+1)%_param->_nb_bank;
     
    5758                PORT_WRITE(out_DECOD_OUT_OPERATION     [i],reg_QUEUE[num_bank].front()->_operation     [0]);
    5859                PORT_WRITE(out_DECOD_OUT_NO_EXECUTE    [i],reg_QUEUE[num_bank].front()->_no_execute    [0]);
     60//              PORT_WRITE(out_DECOD_OUT_HAVE_EVENT    [i],0);
     61                PORT_WRITE(out_DECOD_OUT_LAST_EVENT    [i],0);
    5962                PORT_WRITE(out_DECOD_OUT_IS_DELAY_SLOT [i],reg_QUEUE[num_bank].front()->_is_delay_slot [0]);
    6063#ifdef DEBUG
     
    8689    for (uint32_t i=0; i<_param->_nb_context; i++)
    8790      PORT_WRITE(out_NB_INST_ALL [i], reg_NB_INST [i]);
     91      }
     92    else
     93      {
     94        for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
     95          {
     96            internal_DECOD_IN_ACK [i] = 0;
     97          }
     98        for (uint32_t i=0; i<_param->_nb_context; i++)
     99          PORT_WRITE(out_NB_INST_ALL [i], 0);
     100      }
     101
     102
     103    // Write output
     104    for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
     105      {
     106        PORT_WRITE(out_DECOD_IN_ACK [i],internal_DECOD_IN_ACK [i]);
     107      }
     108
    88109
    89110    log_end(Decod_queue,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_function_multi_fifo_transition.cpp

    r112 r123  
    3535
    3636        for (uint32_t i=0; i<_param->_nb_context; i++)
    37           reg_NB_INST [i]=0;
     37          {
     38            reg_NB_INST       [i]=0;
     39            reg_NB_INST_EVENT [i]=0;
     40          }
    3841
    3942        reg_NUM_BANK_HEAD = 0;
     
    131134                // Update pointer
    132135                reg_NUM_BANK_HEAD = (reg_NUM_BANK_HEAD+1)%_param->_nb_bank;
    133                 reg_NB_INST [context] --;
     136               
     137                reg_NB_INST       [context] --;
     138                if (reg_NB_INST_EVENT [context] > 0)
     139                reg_NB_INST_EVENT [context] --;
    134140              }
    135141        }
    136142
    137143        //--------------------------------------------------------------------
     144        //-----[ CONTEXT_EVENT ]----------------------------------------------
     145        //--------------------------------------------------------------------
     146        for (uint32_t i=0; i<_param->_nb_context; i++)
     147          if (PORT_READ(in_CONTEXT_EVENT [i]))
     148            reg_NB_INST_EVENT [i] = reg_NB_INST [i];
     149
     150        //--------------------------------------------------------------------
    138151        //-----[ OTHERS ]-----------------------------------------------------
    139152        //--------------------------------------------------------------------
     
    141154#if defined(DEBUG) and defined(DEBUG_Decod_queue) and (DEBUG >= DEBUG_TRACE)
    142155    log_printf(TRACE,Decod_queue,FUNCTION,"  * Dump decod_queue");
    143     log_printf(TRACE,Decod_queue,FUNCTION,"    * reg_NUM_BANK_HEAD : %d",reg_NUM_BANK_HEAD);
    144     log_printf(TRACE,Decod_queue,FUNCTION,"    * reg_NUM_BANK_TAIL : %d",reg_NUM_BANK_TAIL);
     156    log_printf(TRACE,Decod_queue,FUNCTION,"    * reg_NUM_BANK_HEAD     : %d",reg_NUM_BANK_HEAD);
     157    log_printf(TRACE,Decod_queue,FUNCTION,"    * reg_NUM_BANK_TAIL     : %d",reg_NUM_BANK_TAIL);
    145158    for (uint32_t i=0; i<_param->_nb_context; i++)
    146       log_printf(TRACE,Decod_queue,FUNCTION,"    * reg_NB_INST [%d] : %d",i,reg_NB_INST [i]);
    147 
     159      {
     160    log_printf(TRACE,Decod_queue,FUNCTION,"    * reg_NB_INST       [%d] : %d",i,reg_NB_INST [i]);
     161    log_printf(TRACE,Decod_queue,FUNCTION,"    * reg_NB_INST_EVENT [%d] : %d",i,reg_NB_INST_EVENT [i]);
     162      }
    148163    for (uint32_t i=0; i<_param->_nb_bank; ++i)
    149164      {
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_function_one_fifo_genMealy_decod_out.cpp

    r115 r123  
    2525    log_function(Decod_queue,FUNCTION,_name.c_str());
    2626
     27    if (PORT_READ(in_NRESET))
     28      {
     29    bool       context_val   [_param->_nb_context];
     30    uint32_t   nb_inst_event [_param->_nb_context];
     31    for (uint32_t i=0; i<_param->_nb_context; i++)
     32      {
     33        context_val   [i] = true;
     34        nb_inst_event [i] = reg_NB_INST_EVENT [i];
     35      }
     36
    2737    Tcontrol_t val [_param->_nb_inst_decod];
    2838    for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
     
    4757             
    4858              Tcontext_t context         = reg_QUEUE->front()->_context_id    [index];
    49               Tdepth_t   depth           = reg_QUEUE->front()->_depth         [index];
    50               Tdepth_t   depth_min       = (_param->_have_port_depth)?PORT_READ(in_DEPTH_MIN [context]):0;
    51               Tdepth_t   depth_max       = (_param->_have_port_depth)?PORT_READ(in_DEPTH_MAX [context]):0;
    52               Tcontrol_t depth_full      = PORT_READ(in_DEPTH_FULL[context]);
    5359
    54               // is a valid instruction ?
    55               // If DEPTH_CURRENT :
    56               // equal at     DEPTH_MIN            -> not speculative
    57               // not include ]DEPTH_MIN:DEPTH_MAX] -> previous branch miss
    58               //     include ]DEPTH_MIN:DEPTH_MAX] -> speculative
    59              
    60               // All case
    61               // ....... min ...X... max ....... OK
    62               // ....... min ....... max ...X... KO
    63               // ...X... min ....... max ....... KO
    64               // ....... max ....... min ...X... OK
    65               // ...X... max ....... min ....... OK
    66               // ....... max ...X... min ....... KO
    67              
    68               Tcontrol_t is_valid = true;
    69 //               Tcontrol_t   is_valid      = ((depth == depth_min) or
    70 //                                             depth_full or
    71 //                                             ((depth_min <= depth_max)?
    72 //                                              ((depth >= depth_min) and (depth <=depth_max)):
    73 //                                              ((depth >= depth_min) or  (depth <=depth_max))));
    74               //Tcontrol_t is_valid        = ((depth == depth_min) or
    75               //                              ((depth_min < depth_max)?
    76               //                               (depth<=depth_max):
    77               //                               ((depth > depth_min) or (depth <= depth_max))));
    78               //Tcontrol_t is_valid        = depth <= depth_max;
     60              log_printf(TRACE,Decod_queue,FUNCTION,"      * context      : %d",context);
    7961
    80               log_printf(TRACE,Decod_queue,FUNCTION,"    * is_valid : %d",is_valid);
    81               log_printf(TRACE,Decod_queue,FUNCTION,"      * context      : %d",context);
    82               log_printf(TRACE,Decod_queue,FUNCTION,"      * depth        : %d",depth);
    83               log_printf(TRACE,Decod_queue,FUNCTION,"      * depth_min    : %d",depth_min);
    84               log_printf(TRACE,Decod_queue,FUNCTION,"      * depth_max    : %d",depth_max);
    85               log_printf(TRACE,Decod_queue,FUNCTION,"      * depth_full   : %d",depth_full);
    86 #ifdef DEBUG
    87               log_printf(TRACE,Decod_queue,FUNCTION,"      * address      : 0x%x (0x%x)",reg_QUEUE->front()->_address     [index],reg_QUEUE->front()->_address     [index]<<2);
    88 #endif
    89               log_printf(TRACE,Decod_queue,FUNCTION,"      * address_next : 0x%x (0x%x)",reg_QUEUE->front()->_address_next[index],reg_QUEUE->front()->_address_next[index]<<2);
    90               internal_DECOD_OUT_VAL [index] = 1; // in all case, val is set (entry is not empty, and instruction is valid)
    91               if (is_valid)
     62              if (context_val [context])
    9263                {
    93                   val                    [i]     = 1;
    94                   internal_DECOD_OUT_ACK [index] = PORT_READ(in_DECOD_OUT_ACK [i]);
    95                 }
    96               else
    97                 {
    98                   // Consume the instruction (to erase)
    99                   internal_DECOD_OUT_ACK [index] = 1;
     64
     65//               Tdepth_t   depth           = reg_QUEUE->front()->_depth         [index];
     66//               Tdepth_t   depth_min       = (_param->_have_port_depth)?PORT_READ(in_DEPTH_MIN [context]):0;
     67//               Tdepth_t   depth_max       = (_param->_have_port_depth)?PORT_READ(in_DEPTH_MAX [context]):0;
     68//               Tcontrol_t depth_full      = PORT_READ(in_DEPTH_FULL[context]);
     69
     70                  // is a valid instruction ?
     71                  // If DEPTH_CURRENT :
     72                  // equal at     DEPTH_MIN            -> not speculative
     73                  // not include ]DEPTH_MIN:DEPTH_MAX] -> previous branch miss
     74                  //     include ]DEPTH_MIN:DEPTH_MAX] -> speculative
     75                 
     76                  // All case
     77                  // ....... min ...X... max ....... OK
     78                  // ....... min ....... max ...X... KO
     79                  // ...X... min ....... max ....... KO
     80                  // ....... max ....... min ...X... OK
     81                  // ...X... max ....... min ....... OK
     82                  // ....... max ...X... min ....... KO
     83                 
     84                  Tcontrol_t is_valid = (nb_inst_event [context] == 0);
     85
     86//                   Tcontrol_t   is_valid      = ((depth == depth_min) or
     87//                                                 depth_full or
     88//                                                 ((depth_min <= depth_max)?
     89//                                                  ((depth >= depth_min) and (depth <=depth_max)):
     90//                                                  ((depth >= depth_min) or  (depth <=depth_max))));
     91                 
     92                  log_printf(TRACE,Decod_queue,FUNCTION,"    * is_valid : %d",is_valid);
     93                  log_printf(TRACE,Decod_queue,FUNCTION,"      * context_val  : %d",context_val   [context]);
     94                  log_printf(TRACE,Decod_queue,FUNCTION,"      * nb_inst_event: %d",nb_inst_event [context]);
     95//                   log_printf(TRACE,Decod_queue,FUNCTION,"      * depth        : %d",depth);
     96//                   log_printf(TRACE,Decod_queue,FUNCTION,"      * depth_min    : %d",depth_min);
     97//                   log_printf(TRACE,Decod_queue,FUNCTION,"      * depth_max    : %d",depth_max);
     98//                   log_printf(TRACE,Decod_queue,FUNCTION,"      * depth_full   : %d",depth_full);
     99#ifdef DEBUG     
     100                  log_printf(TRACE,Decod_queue,FUNCTION,"      * address      : 0x%x (0x%x)",reg_QUEUE->front()->_address     [index],reg_QUEUE->front()->_address     [index]<<2);
     101#endif           
     102                  log_printf(TRACE,Decod_queue,FUNCTION,"      * address_next : 0x%x (0x%x)",reg_QUEUE->front()->_address_next[index],reg_QUEUE->front()->_address_next[index]<<2);
     103                  internal_DECOD_OUT_VAL [index] = 1; // in all case, val is set (entry is not empty, and instruction is valid)
     104                 
     105                  if (is_valid)
     106                    {
     107                      val                    [i]     = 1;
     108                      internal_DECOD_OUT_ACK [index] = PORT_READ(in_DECOD_OUT_ACK [i]);
     109                    }
     110                  else
     111                    {
     112                      // Consume the instruction (to erase)
     113                      internal_DECOD_OUT_ACK [index] = 1;
     114
     115                      // Have event ?
     116                      if (nb_inst_event [context] > 0)
     117                        {
     118                          nb_inst_event [context] --;
     119                         
     120                          // Last event ?
     121                          if (nb_inst_event [context] == 0)
     122                            {
     123                              context_val [context] = false;
     124                            }
     125                        }
     126                    }
    100127                }
    101128            }
     
    107134       
    108135        PORT_WRITE(out_DECOD_OUT_VAL [i],val [i]);
     136      }
     137      }
     138    else
     139      {
     140        // Reset
     141        for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
     142          {
     143            internal_DECOD_OUT_VAL [i] = 0;
     144            internal_DECOD_OUT_ACK [i] = 0;
     145            PORT_WRITE(out_DECOD_OUT_VAL [i],0);
     146          }
    109147      }
    110148
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_function_one_fifo_genMoore.cpp

    r111 r123  
    2525    log_function(Decod_queue,FUNCTION,_name.c_str());
    2626
     27    if (PORT_READ(in_NRESET))
     28      {
    2729    //--------------------------------------------------------------------
    2830    //-----[ DECOD_IN ]---------------------------------------------------
     
    3436        {
    3537          internal_DECOD_IN_ACK [i] = ack;
    36           PORT_WRITE(out_DECOD_IN_ACK [i],ack);
    3738        }
    3839    }
     
    5758          PORT_WRITE(out_DECOD_OUT_OPERATION     [i],reg_QUEUE->front()->_operation     [index]);
    5859          PORT_WRITE(out_DECOD_OUT_NO_EXECUTE    [i],reg_QUEUE->front()->_no_execute    [index]);
     60//        PORT_WRITE(out_DECOD_OUT_HAVE_EVENT    [i],0);
     61          PORT_WRITE(out_DECOD_OUT_LAST_EVENT    [i],0);
    5962          PORT_WRITE(out_DECOD_OUT_IS_DELAY_SLOT [i],reg_QUEUE->front()->_is_delay_slot [index]);
    6063#ifdef DEBUG
     
    8386    for (uint32_t i=0; i<_param->_nb_context; i++)
    8487      PORT_WRITE(out_NB_INST_ALL [i], reg_NB_INST [i]);
     88      }
     89    else
     90      {
     91        for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
     92          {
     93            internal_DECOD_IN_ACK [i] = 0;
     94          }
     95        for (uint32_t i=0; i<_param->_nb_context; i++)
     96          PORT_WRITE(out_NB_INST_ALL [i], 0);
     97      }
     98     
     99    // Write output
     100    for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
     101      {
     102        PORT_WRITE(out_DECOD_IN_ACK [i],internal_DECOD_IN_ACK [i]);
     103      }
     104
    85105
    86106    log_end(Decod_queue,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_function_one_fifo_transition.cpp

    r112 r123  
    3434
    3535        for (uint32_t i=0; i<_param->_nb_context; i++)
    36           reg_NB_INST [i]=0;
     36          {
     37            reg_NB_INST       [i]=0;
     38            reg_NB_INST_EVENT [i]=0;
     39          }
    3740
    3841        reg_LAST_SLOT = 0;
     
    130133                    log_printf(TRACE,Decod_queue,FUNCTION,_("    * context : %d"),context);
    131134                   
    132                     reg_NB_INST [context] --;
     135                    reg_NB_INST       [context] --;
     136                    if (reg_NB_INST_EVENT [context] > 0)
     137                    reg_NB_INST_EVENT [context] --;
     138
    133139                    log_printf(TRACE,Decod_queue,FUNCTION,_("    * nb_inst : %d"),reg_NB_INST [context]);
    134140                  }
     
    149155              }
    150156          }
     157
     158        //--------------------------------------------------------------------
     159        //-----[ CONTEXT_EVENT ]----------------------------------------------
     160        //--------------------------------------------------------------------
     161        for (uint32_t i=0; i<_param->_nb_context; i++)
     162          if (PORT_READ(in_CONTEXT_EVENT [i]))
     163            reg_NB_INST_EVENT [i] = reg_NB_INST [i];
    151164      }
    152165
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_genMealy_decod_out.cpp

    r111 r123  
    2525    log_function(Decod_queue,FUNCTION,_name.c_str());
    2626
     27//     if (PORT_READ(in_NRESET))
    2728    (this->*function_genMealy_decod_out) ();
    2829
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/include/Decod_unit.h

    r118 r123  
    8686  public    : SC_OUT(Toperation_t       )  ** out_DECOD_OPERATION                    ;//[nb_inst_decod]
    8787  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_NO_EXECUTE                   ;//[nb_inst_decod]
     88//public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_HAVE_EVENT                   ;//[nb_inst_decod]
     89  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_LAST_EVENT                   ;//[nb_inst_decod]
    8890  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_IS_DELAY_SLOT                ;//[nb_inst_decod]
    8991#ifdef DEBUG
     
    130132    // ~~~~~[ Interface : "context" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    131133  public    : SC_IN (Tcontrol_t         )  **  in_CONTEXT_DECOD_ENABLE               ;//[nb_context]
     134  public    : SC_IN (Tcontrol_t         )  **  in_CONTEXT_EVENT                      ;//[nb_context]
    132135  public    : SC_IN (Tcontrol_t         )  **  in_CONTEXT_DEPTH_VAL                  ;//[nb_context]
    133136  public    : SC_IN (Tdepth_t           )  **  in_CONTEXT_DEPTH                      ;//[nb_context]
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/src/Decod_unit.cpp

    r88 r123  
    3939    usage_environment(_usage);
    4040
    41 #if DEBUG_Decod_unit == true
    42     log_printf(INFO,Decod_unit,FUNCTION,_("<%s> Parameters"),_name.c_str());
     41// #if DEBUG_Decod_unit == true
     42//     log_printf(INFO,Decod_unit,FUNCTION,_("<%s> Parameters"),_name.c_str());
    4343
    44     std::cout << *param << std::endl;
    45 #endif   
     44//     std::cout << *param << std::endl;
     45// #endif   
    4646
    4747    log_printf(INFO,Decod_unit,FUNCTION,_("Allocation"));
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/src/Decod_unit_allocation.cpp

    r118 r123  
    9191      ALLOC1_SIGNAL_OUT(out_DECOD_OPERATION    ,"operation"    ,Toperation_t      ,_param->_size_operation             );
    9292      ALLOC1_SIGNAL_OUT(out_DECOD_NO_EXECUTE   ,"no_execute"   ,Tcontrol_t        ,1                                   );
     93//    ALLOC1_SIGNAL_OUT(out_DECOD_HAVE_EVENT   ,"have_event"   ,Tcontrol_t        ,1                                   );
     94      ALLOC1_SIGNAL_OUT(out_DECOD_LAST_EVENT   ,"last_event"   ,Tcontrol_t        ,1                                   );
    9395      ALLOC1_SIGNAL_OUT(out_DECOD_IS_DELAY_SLOT,"is_delay_slot",Tcontrol_t        ,1                                   );
    9496#ifdef DEBUG
     
    159161
    160162      ALLOC1_SIGNAL_IN (in_CONTEXT_DECOD_ENABLE,"decod_enable",Tcontrol_t,1);
     163      ALLOC1_SIGNAL_IN (in_CONTEXT_EVENT       ,"event"       ,Tcontrol_t,1);
    161164      ALLOC1_SIGNAL_IN (in_CONTEXT_DEPTH_VAL   ,"depth_val"   ,Tcontrol_t,1);
    162165      ALLOC1_SIGNAL_IN (in_CONTEXT_DEPTH       ,"depth"       ,Tdepth_t  ,_param->_size_depth);
     
    499502          PORT_MAP(_component,src ,"out_DECOD_OUT_"+toString(i)+"_NO_EXECUTE"   ,
    500503                              dest,"out_DECOD_"    +toString(i)+"_NO_EXECUTE"   );
     504//        PORT_MAP(_component,src ,"out_DECOD_OUT_"+toString(i)+"_HAVE_EVENT"   ,
     505//                            dest,"out_DECOD_"    +toString(i)+"_HAVE_EVENT"   );
     506          PORT_MAP(_component,src ,"out_DECOD_OUT_"+toString(i)+"_LAST_EVENT"   ,
     507                              dest,"out_DECOD_"    +toString(i)+"_LAST_EVENT"   );
    501508          PORT_MAP(_component,src ,"out_DECOD_OUT_"+toString(i)+"_IS_DELAY_SLOT",
    502509                              dest,"out_DECOD_"    +toString(i)+"_IS_DELAY_SLOT");
     
    569576                              dest,"out_NB_INST_"+toString(i)+"_DECOD_ALL");
    570577        }
     578
     579
     580
     581      for (uint32_t i=0; i<_param->_nb_context; i++)
     582        {
     583          dest = _name;
     584
     585#ifdef POSITION
     586          _component->interface_map (src ,"context_"+toString(i),
     587                                     dest,"context_"+toString(i));
     588#endif
     589         
     590          PORT_MAP(_component,src , "in_CONTEXT_"+toString(i)+"_EVENT"       ,
     591                              dest, "in_CONTEXT_"+toString(i)+"_EVENT"       );
     592
     593        }
    571594    }
    572595    // ~~~~~[ Others ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/src/Decod_unit_deallocation.cpp

    r112 r123  
    4747        DELETE1_SIGNAL(out_DECOD_OPERATION                    ,_param->_nb_inst_decod,_param->_size_operation             );
    4848        DELETE1_SIGNAL(out_DECOD_NO_EXECUTE                   ,_param->_nb_inst_decod,1                                   );
     49//      DELETE1_SIGNAL(out_DECOD_HAVE_EVENT                   ,_param->_nb_inst_decod,1                                   );
     50        DELETE1_SIGNAL(out_DECOD_LAST_EVENT                   ,_param->_nb_inst_decod,1                                   );
    4951        DELETE1_SIGNAL(out_DECOD_IS_DELAY_SLOT                ,_param->_nb_inst_decod,1                                   );
    5052#ifdef DEBUG
     
    8789       
    8890        DELETE1_SIGNAL(in_CONTEXT_DECOD_ENABLE                ,_param->_nb_context,1);
     91        DELETE1_SIGNAL(in_CONTEXT_EVENT                       ,_param->_nb_context,1);
    8992        DELETE1_SIGNAL(in_CONTEXT_DEPTH                       ,_param->_nb_context,_param->_size_depth);
    9093       
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Front_end_Glue/src/Front_end_Glue.cpp

    r119 r123  
    3939    usage_environment(_usage);
    4040
    41 #if DEBUG_Front_end_Glue == true
    42     log_printf(INFO,Front_end_Glue,FUNCTION,_("<%s> Parameters"),_name.c_str());
    43 
    44     std::cout << *param << std::endl;
    45 #endif   
     41// #if DEBUG_Front_end_Glue == true
     42//     log_printf(INFO,Front_end_Glue,FUNCTION,_("<%s> Parameters"),_name.c_str());
     43
     44//     std::cout << *param << std::endl;
     45// #endif   
    4646
    4747    log_printf(INFO,Front_end_Glue,FUNCTION,_("<%s> : Allocation"),_name.c_str());
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Front_end_Glue/src/Front_end_Glue_genMealy_branch_complete.cpp

    r88 r123  
    2222    log_begin(Front_end_Glue,FUNCTION);
    2323
     24    if (PORT_READ(in_NRESET))
     25      {
    2426    for (uint32_t i=0; i<_param->_nb_inst_branch_complete; ++i)
    2527      {
     
    3638        PORT_WRITE(out_BRANCH_COMPLETE_ACK [i],ack);     
    3739      }
     40      }
     41    else
     42      {
     43        // RESET
     44        for (uint32_t i=0; i<_param->_nb_inst_branch_complete; ++i)
     45          {
     46            PORT_WRITE(out_BRANCH_COMPLETE_PREDICTION_UNIT_VAL [i],0);
     47            PORT_WRITE(out_BRANCH_COMPLETE_CONTEXT_STATE_VAL   [i],0);
     48            PORT_WRITE(out_BRANCH_COMPLETE_ACK                 [i],0);     
     49          }
     50      }
    3851
    3952    log_end(Front_end_Glue,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Front_end_Glue/src/Front_end_Glue_genMealy_decod.cpp

    r88 r123  
    2424    // Warning : this function is an sc_method if _have_port_context_id
    2525
     26    if (PORT_READ(in_NRESET))
     27      {
    2628    for (uint32_t i=0; i<_param->_nb_decod_unit; ++i)
    2729      for (uint32_t j=0; j<_param->_nb_inst_decod[i]; ++j)
    2830        PORT_WRITE(out_DECOD_CONTEXT_ID [i][j],_param->_translate_context_id_from_decod_unit[i][PORT_READ(in_DECOD_DECOD_UNIT_CONTEXT_ID [i][j])]);
     31      }
    2932
    3033    log_end(Front_end_Glue,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Front_end_Glue/src/Front_end_Glue_genMealy_depth.cpp

    r101 r123  
    2222    log_begin(Front_end_Glue,FUNCTION);
    2323
     24    if (PORT_READ(in_NRESET))
     25      {
    2426    for (uint32_t i=0; i<_param->_nb_context; ++i)
    2527      {
     
    4850          PORT_WRITE(out_DEPTH_DECOD_UNIT_FULL        [i][j], PORT_READ(in_DEPTH_PREDICTION_UNIT_FULL    [num_context]));
    4951        }
     52      }
    5053
    5154    log_end(Front_end_Glue,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Front_end_Glue/src/Front_end_Glue_genMealy_event.cpp

    r119 r123  
    2323    log_function(Front_end_Glue,FUNCTION,_name.c_str());
    2424
     25    if (PORT_READ(in_NRESET))
     26      {
    2527    for (uint32_t i=0; i<_param->_nb_context; ++i)
    2628      {
     
    124126#endif
    125127      }
     128      }
     129    else
     130      {
     131        // Reset
     132        for (uint32_t i=0; i<_param->_nb_context; ++i)
     133          {
     134            PORT_WRITE(out_EVENT_VAL                 [i], 0);
     135            PORT_WRITE(out_EVENT_IFETCH_UNIT_VAL     [i], 0);
     136            PORT_WRITE(out_EVENT_PREDICTION_UNIT_VAL [i], 0);
     137            PORT_WRITE(out_EVENT_CONTEXT_STATE_ACK   [i], 0);
     138          }
     139      }
    126140
    127141    log_end(Front_end_Glue,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Front_end_Glue/src/Front_end_Glue_genMealy_nb_inst.cpp

    r108 r123  
    2222    log_begin(Front_end_Glue,FUNCTION);
    2323
     24    if (PORT_READ(in_NRESET))
     25      {
    2426    for (uint32_t i=0; i<_param->_nb_context; ++i)
    2527      {
     
    2830        PORT_WRITE(out_NB_INST_DECOD_ALL               [i], nb_inst);
    2931        PORT_WRITE(out_NB_INST_CONTEXT_STATE_DECOD_ALL [i], nb_inst);
     32      }
    3033      }
    3134
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Address_management/src/Address_management.cpp

    r88 r123  
    3838    log_printf(FUNC,Address_management,FUNCTION,"Begin");
    3939
    40 #if DEBUG_Address_management == true
    41     log_printf(INFO,Address_management,FUNCTION,_("<%s> Parameters"),_name.c_str());
     40// #if DEBUG_Address_management == true
     41//     log_printf(INFO,Address_management,FUNCTION,_("<%s> Parameters"),_name.c_str());
    4242
    43     std::cout << *param << std::endl;
    44 #endif   
     43//     std::cout << *param << std::endl;
     44// #endif   
    4545
    4646    log_printf(INFO,Address_management,FUNCTION,"Allocation");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Address_management/src/Address_management_genMoore.cpp

    r107 r123  
    2424    log_printf(FUNC,Address_management,FUNCTION,"Begin");
    2525
     26    if (PORT_READ(in_NRESET))
     27      {
    2628    // =========================================
    2729    // ===== ADDRESS ===========================
     
    3032    internal_ADDRESS_VAL = reg_PC_ACCESS_VAL;
    3133
    32     PORT_WRITE(out_ADDRESS_VAL                        ,internal_ADDRESS_VAL                     );
    3334    // Align pc on instruction packet address.
    3435    PORT_WRITE(out_ADDRESS_INSTRUCTION_ADDRESS        ,reg_PC_ACCESS - (reg_PC_ACCESS%_param->_nb_instruction));
     
    4849    internal_PREDICT_VAL = not reg_PC_NEXT_NEXT_VAL;
    4950
    50     PORT_WRITE(out_PREDICT_VAL                  ,internal_PREDICT_VAL);
    5151    PORT_WRITE(out_PREDICT_PC_PREVIOUS          ,reg_PC_CURRENT        );
    5252    PORT_WRITE(out_PREDICT_PC_CURRENT           ,reg_PC_NEXT           );
    5353    PORT_WRITE(out_PREDICT_PC_CURRENT_IS_DS_TAKE,reg_PC_NEXT_IS_DS_TAKE);
    54    
     54      }
     55    else
     56      {
     57    internal_ADDRESS_VAL = 0;
     58    internal_PREDICT_VAL = 0;
     59      }
     60
     61    PORT_WRITE(out_ADDRESS_VAL,internal_ADDRESS_VAL);
     62    PORT_WRITE(out_PREDICT_VAL,internal_PREDICT_VAL);
     63
    5564    log_printf(FUNC,Address_management,FUNCTION,"End");
    5665  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Address_management/src/Address_management_transition.cpp

    r119 r123  
    222222      std::string instruction_enable;
    223223      for (uint32_t i=0; i<_param->_nb_instruction; ++i)
    224         instruction_enable += toString(reg_PC_ACCESS_INSTRUCTION_ENABLE [i])+ " ";
     224        instruction_enable += ((reg_PC_ACCESS_VAL)?(toString(reg_PC_ACCESS_INSTRUCTION_ENABLE [i])):"X") + " ";
    225225
    226226      log_printf(TRACE,Address_management,FUNCTION,"    * Access    : %d %d 0x%.8x (%.8x) - %.2d %.2d %.2d - %s",
     
    238238      std::string instruction_enable;
    239239      for (uint32_t i=0; i<_param->_nb_instruction; ++i)
    240         instruction_enable += toString(reg_PC_CURRENT_INSTRUCTION_ENABLE [i])+ " ";
     240        instruction_enable += ((reg_PC_CURRENT_VAL)?(toString(reg_PC_CURRENT_INSTRUCTION_ENABLE [i])):"X") + " ";
    241241
    242242      log_printf(TRACE,Address_management,FUNCTION,"    * Current   : %d %d 0x%.8x (%.8x) - %.2d %.2d %.2d - %s",
     
    254254      std::string instruction_enable;
    255255      for (uint32_t i=0; i<_param->_nb_instruction; ++i)
    256         instruction_enable += toString(reg_PC_NEXT_INSTRUCTION_ENABLE [i])+ " ";
     256        instruction_enable += ((reg_PC_NEXT_VAL)?(toString(reg_PC_NEXT_INSTRUCTION_ENABLE [i])):"X") + " ";
    257257
    258258      log_printf(TRACE,Address_management,FUNCTION,"    * Next      : %d %d 0x%.8x (%.8x) - %.2d %.2d %.2d - %s",
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Ifetch_queue/src/Ifetch_queue.cpp

    r88 r123  
    3838    log_printf(FUNC,Ifetch_queue,FUNCTION,"Begin");
    3939
    40 #if DEBUG_Ifetch_queue == true
    41     log_printf(INFO,Ifetch_queue,FUNCTION,_("<%s> Parameters"),_name.c_str());
     40// #if DEBUG_Ifetch_queue == true
     41//     log_printf(INFO,Ifetch_queue,FUNCTION,_("<%s> Parameters"),_name.c_str());
    4242
    43     std::cout << *param << std::endl;
    44 #endif   
     43//     std::cout << *param << std::endl;
     44// #endif   
    4545
    4646    log_printf(INFO,Ifetch_queue,FUNCTION,_("<%s> Allocation"),_name.c_str());
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Ifetch_queue/src/Ifetch_queue_deallocation.cpp

    r112 r123  
    3636        DELETE0_SIGNAL( in_ADDRESS_BRANCH_UPDATE_PREDICTION_ID,_param->_size_depth          );
    3737        DELETE0_SIGNAL(out_ADDRESS_IFETCH_QUEUE_ID            ,_param->_size_ifetch_queue_ptr);
    38         DELETE1_SIGNAL( in_ADDRESS_INSTRUCTION_ENABLE         ,1,_param->_nb_instruction);
     38        DELETE1_SIGNAL( in_ADDRESS_INSTRUCTION_ENABLE         ,_param->_nb_instruction,1);
    3939     
    40         DELETE1_SIGNAL(out_DECOD_VAL                        ,1,_param->_nb_instruction);
    41         DELETE1_SIGNAL( in_DECOD_ACK                        ,1,_param->_nb_instruction);
    42         DELETE1_SIGNAL(out_DECOD_INSTRUCTION                ,_param->_size_instruction,_param->_nb_instruction);
     40        DELETE1_SIGNAL(out_DECOD_VAL                        ,_param->_nb_instruction,1);
     41        DELETE1_SIGNAL( in_DECOD_ACK                        ,_param->_nb_instruction,1);
     42        DELETE1_SIGNAL(out_DECOD_INSTRUCTION                ,_param->_nb_instruction,_param->_size_instruction);
    4343        DELETE0_SIGNAL(out_DECOD_ADDRESS                    ,_param->_size_instruction_address);
    4444        DELETE0_SIGNAL(out_DECOD_INST_IFETCH_PTR            ,_param->_size_inst_ifetch_ptr );
     
    5151        DELETE0_SIGNAL( in_ICACHE_RSP_PACKET_ID  ,_param->_size_ifetch_queue_ptr);
    5252        DELETE0_SIGNAL( in_ICACHE_RSP_ERROR      ,_param->_size_icache_error);
    53         DELETE1_SIGNAL( in_ICACHE_RSP_INSTRUCTION,_param->_size_instruction,_param->_nb_instruction);
     53        DELETE1_SIGNAL( in_ICACHE_RSP_INSTRUCTION,_param->_nb_instruction,_param->_size_instruction);
    5454
    5555        DELETE0_SIGNAL( in_EVENT_RESET_VAL,1);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Ifetch_queue/src/Ifetch_queue_genMoore.cpp

    r119 r123  
    2323    log_printf(FUNC,Ifetch_queue,FUNCTION,"Begin");
    2424
     25    if (PORT_READ(in_NRESET))
     26      {
    2527    // ==========================================================
    2628    // =====[ ADDRESS ]==========================================
     
    2931      internal_ADDRESS_ACK = (_queue[reg_PTR_WRITE]->_state == IFETCH_QUEUE_STATE_EMPTY);
    3032     
    31       PORT_WRITE(out_ADDRESS_ACK            , internal_ADDRESS_ACK);
    3233      if (_param->_have_port_ifetch_queue_ptr)
    3334      PORT_WRITE(out_ADDRESS_IFETCH_QUEUE_ID, reg_PTR_WRITE);
     
    4344        {
    4445          internal_DECOD_VAL [i] = ack and _queue[reg_PTR_READ]->_instruction_enable [i];
    45           PORT_WRITE(out_DECOD_VAL         [i], internal_DECOD_VAL [i]);
    4646          PORT_WRITE(out_DECOD_INSTRUCTION [i],         _queue[reg_PTR_READ]->_instruction        [i]);
    4747        }
     
    5555      PORT_WRITE(out_DECOD_EXCEPTION                  , _queue[reg_PTR_READ]->_exception                  );
    5656    }
     57      }
     58    else
     59      {
     60        // Reset
     61        internal_ADDRESS_ACK = 0;
     62        for (uint32_t i=0; i<_param->_nb_instruction; i++)
     63          internal_DECOD_VAL [i] = 0;
     64       
     65      }
     66
     67    // Write Output
     68    PORT_WRITE(out_ADDRESS_ACK  , internal_ADDRESS_ACK);
     69    for (uint32_t i=0; i<_param->_nb_instruction; i++)
     70    PORT_WRITE(out_DECOD_VAL [i], internal_DECOD_VAL [i]);
    5771
    5872    log_printf(FUNC,Ifetch_queue,FUNCTION,"End");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Ifetch_unit_Glue/src/Ifetch_unit_Glue.cpp

    r88 r123  
    3838    log_printf(FUNC,Ifetch_unit_Glue,FUNCTION,"Begin");
    3939
    40 #if DEBUG_Ifetch_unit_Glue == true
    41     log_printf(INFO,Ifetch_unit_Glue,FUNCTION,_("<%s> Parameters"),_name.c_str());
     40// #if DEBUG_Ifetch_unit_Glue == true
     41//     log_printf(INFO,Ifetch_unit_Glue,FUNCTION,_("<%s> Parameters"),_name.c_str());
    4242
    43     std::cout << *param << std::endl;
    44 #endif   
     43//     std::cout << *param << std::endl;
     44// #endif   
    4545
    4646    log_printf(INFO,Ifetch_unit_Glue,FUNCTION,"Allocation");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Ifetch_unit_Glue/src/Ifetch_unit_Glue_genMealy_event.cpp

    r81 r123  
    2424    log_printf(FUNC,Ifetch_unit_Glue,FUNCTION,"Begin");
    2525
     26    if (PORT_READ(in_NRESET))
     27      {
    2628    Tcontrol_t address_ack = PORT_READ(in_EVENT_ADDRESS_ACK);
    2729    Tcontrol_t queue_ack   = PORT_READ(in_EVENT_QUEUE_ACK  );
     
    3133    PORT_WRITE(out_EVENT_ADDRESS_VAL, val         and queue_ack);
    3234    PORT_WRITE(out_EVENT_QUEUE_VAL  , address_ack and val);
    33    
     35      }
     36    else
     37      {
     38    PORT_WRITE(out_EVENT_ACK        , 0);
     39    PORT_WRITE(out_EVENT_ADDRESS_VAL, 0);
     40    PORT_WRITE(out_EVENT_QUEUE_VAL  , 0);
     41      }
     42
    3443    log_printf(FUNC,Ifetch_unit_Glue,FUNCTION,"End");
    3544  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Ifetch_unit_Glue/src/Ifetch_unit_Glue_genMealy_icache_req.cpp

    r85 r123  
    2424    log_printf(FUNC,Ifetch_unit_Glue,FUNCTION,"Begin");
    2525
     26    if (PORT_READ(in_NRESET))
     27      {
    2628    Tcontrol_t address_val = PORT_READ(in_ICACHE_REQ_ADDRESS_VAL);
    2729    Tcontrol_t queue_ack   = PORT_READ(in_ICACHE_REQ_QUEUE_ACK  );
     
    3537    PORT_WRITE(out_ICACHE_REQ_ADDRESS      ,address);
    3638    PORT_WRITE(out_ICACHE_REQ_QUEUE_ADDRESS,address);
     39      }
     40    else
     41      {
     42        // RESET
     43        PORT_WRITE(out_ICACHE_REQ_VAL        , 0);
     44        PORT_WRITE(out_ICACHE_REQ_ADDRESS_ACK, 0);
     45        PORT_WRITE(out_ICACHE_REQ_QUEUE_VAL  , 0);
     46      }
    3747   
    3848    log_printf(FUNC,Ifetch_unit_Glue,FUNCTION,"End");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/src/Ifetch_unit.cpp

    r88 r123  
    3737    log_printf(FUNC,Ifetch_unit,FUNCTION,"Begin");
    3838
    39 #if DEBUG_Ifetch_unit == true
    40     log_printf(INFO,Ifetch_unit,FUNCTION,_("<%s> Parameters"),_name.c_str());
     39// #if DEBUG_Ifetch_unit == true
     40//     log_printf(INFO,Ifetch_unit,FUNCTION,_("<%s> Parameters"),_name.c_str());
    4141
    42     std::cout << *param << std::endl;
    43 #endif   
     42//     std::cout << *param << std::endl;
     43// #endif   
    4444
    4545    log_printf(INFO,Ifetch_unit,FUNCTION,"Allocation");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/src/Ifetch_unit_deallocation.cpp

    r112 r123  
    4040        DELETE0_SIGNAL( in_ICACHE_RSP_PACKET_ID  ,_param->_size_ifetch_queue_ptr   );
    4141        DELETE0_SIGNAL( in_ICACHE_RSP_ERROR      ,_param->_size_icache_error);
    42         DELETE1_SIGNAL( in_ICACHE_RSP_INSTRUCTION,_param->_size_instruction,_param->_nb_instruction);
     42        DELETE1_SIGNAL( in_ICACHE_RSP_INSTRUCTION,_param->_nb_instruction, _param->_size_instruction);
    4343
    4444        DELETE0_SIGNAL(out_PREDICT_VAL                        ,1);
     
    5252        DELETE0_SIGNAL( in_PREDICT_BRANCH_STATE               ,_param->_size_branch_state);
    5353        DELETE0_SIGNAL( in_PREDICT_BRANCH_UPDATE_PREDICTION_ID,_param->_size_depth);
    54         DELETE1_SIGNAL( in_PREDICT_INSTRUCTION_ENABLE         ,1,_param->_nb_instruction);
     54        DELETE1_SIGNAL( in_PREDICT_INSTRUCTION_ENABLE         ,_param->_nb_instruction,1);
    5555
    5656    //  DELETE0_SIGNAL(out_DECOD_CONTEXT_ID                 ,_param->_size_context_id);
     
    6262        DELETE1_SIGNAL(out_DECOD_VAL                        ,1,_param->_nb_instruction);
    6363        DELETE1_SIGNAL( in_DECOD_ACK                        ,1,_param->_nb_instruction);
    64         DELETE1_SIGNAL(out_DECOD_INSTRUCTION                ,_param->_size_instruction,_param->_nb_instruction);
     64        DELETE1_SIGNAL(out_DECOD_INSTRUCTION                ,_param->_nb_instruction,_param->_size_instruction);
    6565
    6666        DELETE0_SIGNAL( in_EVENT_VAL              ,1);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Glue/src/Branch_Target_Buffer_Glue.cpp

    r88 r123  
    3939    log_printf(FUNC,Branch_Target_Buffer_Glue,FUNCTION,"Begin");
    4040
    41 #if DEBUG_Branch_Target_Buffer_Glue == true
    42     log_printf(INFO,Branch_Target_Buffer_Glue,FUNCTION,_("<%s> Parameters"),_name.c_str());
    43 
    44     std::cout << *param << std::endl;
    45 #endif   
     41// #if DEBUG_Branch_Target_Buffer_Glue == true
     42//     log_printf(INFO,Branch_Target_Buffer_Glue,FUNCTION,_("<%s> Parameters"),_name.c_str());
     43
     44//     std::cout << *param << std::endl;
     45// #endif   
    4646
    4747    log_printf(INFO,Branch_Target_Buffer_Glue,FUNCTION,"Allocation");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Glue/src/Branch_Target_Buffer_Glue_genMealy_decod.cpp

    r98 r123  
    2525    log_function(Branch_Target_Buffer_Glue,FUNCTION,_name.c_str());
    2626
     27    if (PORT_READ(in_NRESET))
     28      {
    2729    for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
    2830      {
     
    6264          }
    6365      }
     66      }
     67    else
     68      {
     69        for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
     70          {
     71            PORT_WRITE(out_DECOD_ACK            [i], 0);
     72            PORT_WRITE(out_DECOD_REGISTER_VAL   [i], 0);
     73            if (_param->_have_port_victim)
     74            PORT_WRITE(out_DECOD_VICTIM_VAL     [i], 0);
     75          }
     76      }
    6477
    6578    log_end(Branch_Target_Buffer_Glue,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Glue/src/Branch_Target_Buffer_Glue_genMealy_predict.cpp

    r108 r123  
    2525    log_function(Branch_Target_Buffer_Glue,FUNCTION,_name.c_str());
    2626
     27    if (PORT_READ(in_NRESET))
     28      {
    2729    for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
    2830      {
     
    8385          }
    8486      }
     87      }
     88    else
     89      {
     90        for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
     91          {
     92            PORT_WRITE(out_PREDICT_ACK            [i], 0);
     93            PORT_WRITE(out_PREDICT_REGISTER_VAL   [i], 0);
     94            if (_param->_have_port_victim)
     95            PORT_WRITE(out_PREDICT_VICTIM_VAL     [i], 0);
     96          }
     97      }
    8598
    8699    log_end(Branch_Target_Buffer_Glue,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Glue/src/Branch_Target_Buffer_Glue_genMealy_update.cpp

    r98 r123  
    2525    log_function(Branch_Target_Buffer_Glue,FUNCTION,_name.c_str());
    2626
     27    if (PORT_READ(in_NRESET))
     28      {
    2729    for (uint32_t i=0; i<_param->_nb_inst_update; i++)
    2830      {
     
    5254          }
    5355      }
     56      }
     57    else
     58      {
     59        for (uint32_t i=0; i<_param->_nb_inst_update; i++)
     60          {
     61            PORT_WRITE(out_UPDATE_ACK            [i], 0);
     62            PORT_WRITE(out_UPDATE_REGISTER_VAL   [i], 0);
     63            if (_param->_have_port_victim)
     64            PORT_WRITE(out_UPDATE_VICTIM_VAL     [i], 0);
     65          }
     66      }
    5467
    5568    log_end(Branch_Target_Buffer_Glue,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/src/Branch_Target_Buffer_Register.cpp

    r113 r123  
    3838    log_printf(FUNC,Branch_Target_Buffer_Register,FUNCTION,"Begin");
    3939
    40 #if DEBUG_Branch_Target_Buffer_Register == true
    41     log_printf(INFO,Branch_Target_Buffer_Register,FUNCTION,_("<%s> Parameters"),_name.c_str());
    42 
    43     std::cout << *param << std::endl;
    44 #endif   
     40// #if DEBUG_Branch_Target_Buffer_Register == true
     41//     log_printf(INFO,Branch_Target_Buffer_Register,FUNCTION,_("<%s> Parameters"),_name.c_str());
     42
     43//     std::cout << *param << std::endl;
     44// #endif   
    4545
    4646    log_printf(INFO,Branch_Target_Buffer_Register,FUNCTION,"Allocation");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/src/Branch_Target_Buffer_Register_genMealy_decod.cpp

    r88 r123  
    2525    log_function(Branch_Target_Buffer_Register,FUNCTION,_name.c_str());
    2626
     27    if (PORT_READ(in_NRESET))
     28      {
    2729    for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
    2830      {
     
    5557          }
    5658      }
    57 
     59      }
     60    else
     61      {
     62//      internal_DECOD_HIT       [i] = hit      ;
     63//      internal_DECOD_NUM_BANK  [i] = num_bank ;
     64//      internal_DECOD_NUM_ENTRY [i] = num_entry;
     65      }
     66   
    5867    log_end(Branch_Target_Buffer_Register,FUNCTION);
    5968  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/src/Branch_Target_Buffer_Register_genMealy_predict.cpp

    r108 r123  
    2525    log_function(Branch_Target_Buffer_Register,FUNCTION,_name.c_str());
    2626   
     27    if (PORT_READ(in_NRESET))
     28      {
    2729    for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
    2830      {
     
    6466          }
    6567      }
     68      }
     69//     else
     70//       {
     71//       }
    6672
    6773    log_end(Branch_Target_Buffer_Register,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/src/Branch_Target_Buffer_Register_genMealy_update.cpp

    r88 r123  
    2525    log_function(Branch_Target_Buffer_Register,FUNCTION,_name.c_str());
    2626
     27    if (PORT_READ(in_NRESET))
     28      {
    2729    for (uint32_t i=0; i<_param->_nb_inst_update; i++)
    2830      {
     
    5557          }
    5658      }
     59      }
     60//     else
     61//       {
     62//      internal_UPDATE_HIT       [i] = hit      ;
     63//      internal_UPDATE_NUM_BANK  [i] = num_bank ;
     64//      internal_UPDATE_NUM_ENTRY [i] = num_entry;
     65//       }
    5766
    5867    log_end(Branch_Target_Buffer_Register,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/src/Branch_Target_Buffer.cpp

    r88 r123  
    4040    log_printf(INFO,Branch_Target_Buffer,FUNCTION,"Allocation");
    4141
    42 #if DEBUG_Branch_Target_Buffer == true
    43     log_printf(INFO,Branch_Target_Buffer,FUNCTION,_("<%s> Parameters"),_name.c_str());
     42// #if DEBUG_Branch_Target_Buffer == true
     43//     log_printf(INFO,Branch_Target_Buffer,FUNCTION,_("<%s> Parameters"),_name.c_str());
    4444
    45     std::cout << *param << std::endl;
    46 #endif   
     45//     std::cout << *param << std::endl;
     46// #endif   
    4747
    4848    allocation (
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Direction_Glue/src/Direction_Glue.cpp

    r112 r123  
    4040
    4141
    42 #if DEBUG_Direction_Glue == true
    43     log_printf(INFO,Direction_Glue,FUNCTION,_("<%s> Parameters"),_name.c_str());
    44 
    45     std::cout << *param << std::endl;
    46 #endif   
     42// #if DEBUG_Direction_Glue == true
     43//     log_printf(INFO,Direction_Glue,FUNCTION,_("<%s> Parameters"),_name.c_str());
     44
     45//     std::cout << *param << std::endl;
     46// #endif   
    4747
    4848    log_printf(INFO,Direction_Glue,FUNCTION,"Allocation");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Direction_Glue/src/Direction_Glue_genMealy_predict.cpp

    r107 r123  
    2626    log_function(Direction_Glue,FUNCTION,_name.c_str());
    2727
     28    if (PORT_READ(in_NRESET))
     29      {
     30//         std::cout << "Kane (before) " << std::endl;
     31//         std::cout << _param << std::endl;
     32//         std::cout << _param->_nb_inst_update << std::endl;
     33//         std::cout << _param->_nb_inst_predict<< std::endl;
     34//         std::cout << "Kane (end) " << std::endl;
     35
     36
    2837    // constant direction : never / always
    2938    for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
     
    3140        log_printf(TRACE,Direction_Glue,FUNCTION,"  * PREDICT [%d]",i);
    3241
    33         Tcontrol_t direction;
     42        Tcontrol_t direction = false;
    3443
    3544        switch (_param->_predictor_scheme)
     
    8695        PORT_WRITE(out_PREDICT_DIRECTION   [i], direction);
    8796      }
     97      }
     98    else
     99      {
     100        //RESET
     101        for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
     102          {
     103            if (_param->_have_component_meta_predictor)
     104              {
     105            PORT_WRITE(out_PREDICT_PREDICTOR_VAL [i], 0);
     106            PORT_WRITE(out_PREDICT_ACK           [i], 0);
     107              }
     108          }
     109      }
    88110
    89111    log_end(Direction_Glue,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Direction_Glue/src/Direction_Glue_genMealy_update.cpp

    r112 r123  
    2626    log_function(Direction_Glue,FUNCTION,_name.c_str());
    2727
     28    if (PORT_READ(in_NRESET))
     29      {
    2830    for (uint32_t i=0; i<_param->_nb_inst_update; i++)
    2931      {
     
    3537        PORT_WRITE(out_UPDATE_PREDICTOR_PREDICTION_IFETCH [i], PORT_READ(in_UPDATE_PREDICTION_IFETCH [i]));
    3638      }
    37    
     39      }
     40    else
     41      {
     42        // RESET
     43        for (uint32_t i=0; i<_param->_nb_inst_update; i++)
     44          {
     45            PORT_WRITE(out_UPDATE_PREDICTOR_VAL [i], 0);
     46            PORT_WRITE(out_UPDATE_ACK           [i], 0);
     47          }
     48      }
     49
    3850    log_end(Direction_Glue,FUNCTION);
    3951  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_genMealy_predict.cpp

    r111 r123  
    2727    log_function(Meta_Predictor_Glue,FUNCTION,_name.c_str());
    2828
     29    if (PORT_READ(in_NRESET))
     30      {
    2931    for (uint32_t i=0; i<_param->_nb_inst_predict; ++i)
    3032      {
     
    8991        PORT_WRITE(out_PREDICT_DIRECTION [i],direction);
    9092      }
     93      }
     94//     else
     95//       {
     96//       }
    9197
    9298    log_end(Meta_Predictor_Glue,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_genMealy_predict_valack.cpp

    r111 r123  
    2727    log_function(Meta_Predictor_Glue,FUNCTION,_name.c_str());
    2828
     29    if (PORT_READ(in_NRESET))
     30      {
    2931    for (uint32_t i=0; i<_param->_nb_inst_predict; ++i)
    3032      {
     
    4042
    4143        PORT_WRITE(out_PREDICT_ACK [i],ack);
     44      }
     45      }
     46    else
     47      {
     48        // Reset
     49        for (uint32_t i=0; i<_param->_nb_inst_predict; ++i)
     50          {
     51            for (uint32_t j=0; j<_param->_nb_predictor; ++j)
     52              PORT_WRITE(out_PREDICT_PREDICTOR_VAL [j][i],0);
     53            PORT_WRITE(out_PREDICT_ACK [i],0);
     54          }
    4255      }
    4356
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_genMealy_update.cpp

    r112 r123  
    2727    log_function(Meta_Predictor_Glue,FUNCTION,_name.c_str());
    2828
     29    if (PORT_READ(in_NRESET))
     30      {
    2931    for (uint32_t i=0; i<_param->_nb_inst_update; ++i)
    3032      {
     
    112114          }
    113115      }
     116      }
     117//     else
     118//       {
     119//         // RESET
     120//       }
    114121
    115122    log_end(Meta_Predictor_Glue,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_genMealy_update_valack.cpp

    r111 r123  
    2727    log_function(Meta_Predictor_Glue,FUNCTION,_name.c_str());
    2828
     29    if (PORT_READ(in_NRESET))
     30      {
    2931    for (uint32_t i=0; i<_param->_nb_inst_update; ++i)
    3032      {
     
    4042
    4143        PORT_WRITE(out_UPDATE_ACK [i],ack);
     44      }
     45      }
     46    else
     47      {
     48        // RESET
     49        for (uint32_t i=0; i<_param->_nb_inst_update; ++i)
     50          {
     51            for (uint32_t j=0; j<_param->_nb_predictor; ++j)
     52              PORT_WRITE(out_UPDATE_PREDICTOR_VAL [j][i],0);
     53            PORT_WRITE(out_UPDATE_ACK [i],0);
     54          }
    4255      }
    4356
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Two_Level_Branch_Predictor/src/Two_Level_Branch_Predictor_genMealy_predict.cpp

    r119 r123  
    2929    log_function(Two_Level_Branch_Predictor,FUNCTION,_name.c_str());
    3030
     31    if (PORT_READ(in_NRESET))
     32      {
    3133    // ===================================================================
    3234    // =====[ PREDICT ]===================================================
     
    9597          PORT_WRITE(out_PREDICT_HISTORY   [i],history  );
    9698        }
     99      }
    97100
    98101    log_end(Two_Level_Branch_Predictor,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/src/Direction.cpp

    r88 r123  
    3838    log_printf(FUNC,Direction,FUNCTION,"Begin");
    3939
    40 #if DEBUG_Direction == true
    41     log_printf(INFO,Direction,FUNCTION,_("<%s> Parameters"),_name.c_str());
     40// #if DEBUG_Direction == true
     41//     log_printf(INFO,Direction,FUNCTION,_("<%s> Parameters"),_name.c_str());
    4242
    43     std::cout << *param << std::endl;
    44 #endif
     43//     std::cout << *param << std::endl;
     44// #endif
    4545
    4646    log_printf(INFO,Direction,FUNCTION,"Allocation");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/src/Prediction_unit_Glue.cpp

    r110 r123  
    4040    usage_environment(_usage);
    4141
    42 #if DEBUG_Prediction_unit_Glue == true
    43     log_printf(INFO,Prediction_unit_Glue,FUNCTION,_("<%s> Parameters"),_name.c_str());
    44 
    45     std::cout << *param << std::endl;
    46 #endif   
     42// #if DEBUG_Prediction_unit_Glue == true
     43//     log_printf(INFO,Prediction_unit_Glue,FUNCTION,_("<%s> Parameters"),_name.c_str());
     44
     45//     std::cout << *param << std::endl;
     46// #endif   
    4747
    4848    log_printf(INFO,Prediction_unit_Glue,FUNCTION,"Allocation");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/src/Prediction_unit_Glue_genMealy_decod.cpp

    r110 r123  
    290290          PORT_WRITE(out_DECOD_ACK [i][j], ack[j]);
    291291      }
     292    else
     293      {
     294        // Reset
     295        for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++)
     296          {
     297            PORT_WRITE(out_DECOD_BTB_VAL [i], 0);
     298            PORT_WRITE(out_DECOD_RAS_VAL [i], 0);
     299            PORT_WRITE(out_DECOD_UPT_VAL [i], 0);
     300          }
     301       
     302        for (uint32_t i=0; i<_param->_nb_decod_unit; i++)
     303          for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++)
     304            PORT_WRITE(out_DECOD_ACK [i][j], 0);
     305      }
    292306    log_end(Prediction_unit_Glue,FUNCTION);
    293307  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/src/Prediction_unit_Glue_genMealy_predict.cpp

    r111 r123  
    420420      PORT_WRITE(out_PREDICT_ACK[i],ack[i]);
    421421      }
     422    else
     423      {
     424        // RESET
     425        for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++)
     426          {
     427            PORT_WRITE(out_PREDICT_BTB_VAL [i], 0);
     428            PORT_WRITE(out_PREDICT_DIR_VAL [i], 0);
     429            PORT_WRITE(out_PREDICT_RAS_VAL [i], 0);
     430            PORT_WRITE(out_PREDICT_UPT_VAL [i], 0);
     431          }
     432        for (uint32_t i=0; i<_param->_nb_context; i++)
     433          PORT_WRITE(out_PREDICT_ACK[i],0);
     434      }
    422435
    423436    log_end(Prediction_unit_Glue,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/src/Prediction_unit_Glue_genMealy_update.cpp

    r98 r123  
    2525    log_function(Prediction_unit_Glue,FUNCTION,_name.c_str());
    2626
     27    if (PORT_READ(in_NRESET))
     28      {
    2729    for (uint32_t i=0; i<_param->_nb_inst_branch_update; i++)
    2830      {
     
    8890        PORT_WRITE(out_UPDATE_UPT_ACK [i], upt_ack);
    8991      }
     92      }
     93    else
     94      {
     95        // RESET
     96        for (uint32_t i=0; i<_param->_nb_inst_branch_update; i++)
     97          {
     98            PORT_WRITE(out_UPDATE_BTB_VAL [i], 0);
     99            PORT_WRITE(out_UPDATE_DIR_VAL [i], 0);
     100            PORT_WRITE(out_UPDATE_RAS_VAL [i], 0);
     101            PORT_WRITE(out_UPDATE_UPT_ACK [i], 0);
     102          }
     103      }
    90104
    91105    log_end(Prediction_unit_Glue,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/src/Return_Address_Stack.cpp

    r88 r123  
    3838    log_printf(FUNC,Return_Address_Stack,FUNCTION,"Begin");
    3939
    40 #if DEBUG_Return_Address_Stac == true
    41     log_printf(INFO,Return_Address_Stac,FUNCTION,_("<%s> Parameters"),_name.c_str());
     40// #if DEBUG_Return_Address_Stac == true
     41//     log_printf(INFO,Return_Address_Stac,FUNCTION,_("<%s> Parameters"),_name.c_str());
    4242
    43     std::cout << *param << std::endl;
    44 #endif   
     43//     std::cout << *param << std::endl;
     44// #endif   
    4545
    4646    log_printf(INFO,Return_Address_Stack,FUNCTION,"Allocation");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/src/Return_Address_Stack_genMealy_decod.cpp

    r118 r123  
    6666      }
    6767      }
     68    else
     69      {
     70//      internal_DECOD_HIT [i] = (push or (reg_NB_ELT[context]>0));
     71      }
     72
    6873    log_end(Return_Address_Stack,FUNCTION);
    6974  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/src/Return_Address_Stack_genMealy_predict.cpp

    r118 r123  
    2525    log_function(Return_Address_Stack,FUNCTION,_name.c_str());
    2626
    27     if (PORT_READ(in_NRESET) == 1)
     27    if (PORT_READ(in_NRESET))
    2828      {
    2929#ifdef DEBUG_TEST
     
    6969      }
    7070      }
     71    else
     72      {
     73//     for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
     74//      internal_PREDICT_HIT [i] = (push or (reg_PREDICT_NB_ELT[context]>0));
     75
     76      }
    7177
    7278    log_end(Return_Address_Stack,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Types.h

    r122 r123  
    5454      UPT_EVENT_STATE_KO_DECODE_WAIT_END_EVENT        , // prediction unit is ok, wait the end of event (send by Context State)
    5555      UPT_EVENT_STATE_KO_COMMIT_UPDATE_CONTEXT        , // prediction unit is update, send signal to context manager
    56       UPT_EVENT_STATE_KO_COMMIT_WAIT_END_EVENT          // prediction unit is ok, wait the end of event (send by Context State)
     56      UPT_EVENT_STATE_KO_COMMIT_WAIT_END_EVENT        , // prediction unit is ok, wait the end of event (send by Context State)
     57      UPT_EVENT_STATE_KO_COMMIT_WAIT_END_UPDATE         // prediction unit is ok, wait the end of event (send by Context State)
    5758    } upt_event_state_t;
    5859
     
    226227      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPT_EVENT_STATE_KO_COMMIT_UPDATE_CONTEXT  : return "UPT_EVENT_STATE_KO_COMMIT_UPDATE_CONTEXT"  ; break;
    227228      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPT_EVENT_STATE_KO_COMMIT_WAIT_END_EVENT  : return "UPT_EVENT_STATE_KO_COMMIT_WAIT_END_EVENT"  ; break;
     229      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPT_EVENT_STATE_KO_COMMIT_WAIT_END_UPDATE : return "UPT_EVENT_STATE_KO_COMMIT_WAIT_END_UPDATE" ; break;
    228230      default    : return ""; break;
    229231      }
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table.cpp

    r111 r123  
    4040    usage_environment(_usage);
    4141
    42 #if DEBUG_Update_Prediction_Table == true
    43     log_printf(INFO,Update_Prediction_Table,FUNCTION,_("<%s> Parameters"),_name.c_str());
    44 
    45     std::cout << *param << std::endl;
    46 #endif   
     42// #if DEBUG_Update_Prediction_Table == true
     43//     log_printf(INFO,Update_Prediction_Table,FUNCTION,_("<%s> Parameters"),_name.c_str());
     44
     45//     std::cout << *param << std::endl;
     46// #endif   
    4747
    4848    log_printf(INFO,Update_Prediction_Table,FUNCTION,"Allocation");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMealy_branch_complete.cpp

    r122 r123  
    2424    log_begin(Update_Prediction_Table,FUNCTION);
    2525    log_function(Update_Prediction_Table,FUNCTION,_name.c_str());
    26    
     26
     27    if (PORT_READ(in_NRESET))
     28      {
    2729    for (uint32_t i=0; i<_param->_nb_inst_branch_complete; i++)
    2830#ifdef DEBUG_TEST
     
    129131//      PORT_WRITE(out_BRANCH_COMPLETE_ADDRESS_DEST    [i], internal_BRANCH_COMPLETE_ADDRESS_DEST    [i]);
    130132      }
    131 
     133      }
    132134    log_end(Update_Prediction_Table,FUNCTION);
    133135  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMealy_decod.cpp

    r122 r123  
    6868      }
    6969      }
     70    else
     71      {
     72        // RESET
     73        for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
     74          PORT_WRITE(out_DECOD_ACK          [i], 0);
     75      }
     76
    7077    log_end(Update_Prediction_Table,FUNCTION);
    7178  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMealy_predict.cpp

    r122 r123  
    5757        log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * ACK         : %d",internal_PREDICT_ACK [i]);
    5858
    59         PORT_WRITE(out_PREDICT_ACK                  [i], internal_PREDICT_ACK                  [i]);
    6059        if (_param->_have_port_depth)
    6160        PORT_WRITE(out_PREDICT_UPDATE_PREDICTION_ID [i], internal_PREDICT_UPDATE_PREDICTION_ID [i]);
     
    6362
    6463      }//don't reset
     64    else
     65      {
     66        for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
     67          {
     68            internal_PREDICT_ACK [i] = 0;
     69//          internal_PREDICT_UPDATE_PREDICTION_ID [i] = top;
     70          }
     71      }
     72
     73    for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
     74      PORT_WRITE(out_PREDICT_ACK [i], internal_PREDICT_ACK [i]);
    6575
    6676    log_end(Update_Prediction_Table,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMoore.cpp

    r122 r123  
    248248        internal_UPDATE_CONTEXT_ID      [i] = context;
    249249
    250         PORT_WRITE(out_UPDATE_VAL                   [i],internal_UPDATE_VAL [i]);
    251250        if (val)
    252251          {
     
    282281        Tcontrol_t val = ((reg_UPT_EVENT_STATE [i] == UPT_EVENT_STATE_KO_DECODE_UPDATE_CONTEXT) or
    283282                          (reg_UPT_EVENT_STATE [i] == UPT_EVENT_STATE_KO_COMMIT_UPDATE_CONTEXT));
    284         PORT_WRITE(out_BRANCH_EVENT_VAL              [i],val);
    285283        if (_param->_have_port_depth)
    286284        PORT_WRITE(out_BRANCH_EVENT_DEPTH            [i],reg_EVENT_DEPTH            [i]);
     
    301299            internal_UPDATE_VAL             [i] = 0;
    302300            internal_UPDATE_VAL_WITHOUT_ACK [i] = 0;
     301            internal_UPDATE_CONTEXT_ID      [i] = 0;
     302       
    303303          }
    304304        for (uint32_t i=0; i<_param->_nb_context; i++)
     
    308308      }
    309309
     310    // Write output
     311    for (uint32_t i=0; i<_param->_nb_inst_update; i++)
     312      PORT_WRITE(out_UPDATE_VAL       [i],internal_UPDATE_VAL [i]);
     313    for (uint32_t i=0; i<_param->_nb_context; i++)
     314      PORT_WRITE(out_BRANCH_EVENT_VAL [i],internal_BRANCH_EVENT_VAL [i]);
    310315
    311316    log_end(Update_Prediction_Table,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_transition.cpp

    r122 r123  
    545545                        }
    546546                     
     547                      // Test if freeing the branch with no accurate ?
     548                      if ((reg_UPDATE_PREDICTION_TABLE [context][depth]._is_accurate == false) and not ko)
     549                        reg_IS_ACCURATE [context] = true;
     550
    547551                      // Update pointer
    548552                      //  * if update RAS : update pointer is decreaste until it equal at top pointer
     
    577581                                }
    578582                             
    579                               reg_UPT_EVENT_STATE [context] = upt_event_state;
    580583                            }
    581584                          else
     
    593596                        }
    594597                     
    595                       // Test if freeing the branch with no accurate ?
    596                       if ((reg_UPDATE_PREDICTION_TABLE [context][depth]._is_accurate == false) and not ko)
    597                         reg_IS_ACCURATE [context] = true;
     598                      // special case :
     599                      if ((upt_event_state == UPT_EVENT_STATE_KO_COMMIT_WAIT_END_UPDATE) and
     600                          (reg_UPT_UPDATE [context] == reg_EVENT_UPT_PTR [context]))
     601                        {
     602                          reg_UPT_TOP     [context] = reg_UPT_TOP_EVENT [context];
     603                          reg_UPT_UPDATE  [context] = reg_UPT_TOP_EVENT [context];
     604                          reg_IS_ACCURATE [context] = true;
     605
     606                          upt_event_state = UPT_EVENT_STATE_OK;
     607                        }
     608
     609                      reg_UPT_EVENT_STATE [context] = upt_event_state;
    598610
    599611                      log_printf(TRACE,Update_Prediction_Table,FUNCTION,"      * reg_UPT_UPDATE (after ) : %d",reg_UPT_UPDATE[context]);
     
    654666                       
    655667                        Taddress_t        address_src         = reg_UPDATE_PREDICTION_TABLE [context][depth]._address_src;
    656                         upt_state_t       event_top           = reg_UPDATE_PREDICTION_TABLE [context][top]._state;
     668                        upt_state_t       top_state           = reg_UPDATE_PREDICTION_TABLE [context][top]._state;
    657669                       
    658670                        log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * upt_event_state     : %s",toString(upt_event_state).c_str());
    659                         log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * event_top           : %s",toString(event_top).c_str());
     671                        log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * top_state           : %s",toString(top_state).c_str());
    660672                       
    661673                        bool              previous_ufpt_event = (reg_UFPT_EVENT_STATE [i] == UFPT_EVENT_STATE_KO_FLUSH);
     
    667679                                                                 or (upt_event_state == UPT_EVENT_STATE_KO_EVENT_WAIT_UFPT)
    668680                                                                 or (upt_event_state == UPT_EVENT_STATE_KO_EVENT_FLUSH_UPT)
    669                                                                  or (event_top       == UPDATE_PREDICTION_STATE_END_KO    )
    670                                                                  or (event_top       == UPDATE_PREDICTION_STATE_KO        )
     681                                                                 or (upt_event_state == UPT_EVENT_STATE_KO_COMMIT_WAIT_END_UPDATE)
     682                                                                 or (top_state       == UPDATE_PREDICTION_STATE_END_KO    )
     683                                                                 or (top_state       == UPDATE_PREDICTION_STATE_KO        )
    671684                                                                 );
    672685                       
     
    706719                                reg_UPDATE_PREDICTION_TABLE [context][top]._retire_ok = false;
    707720                               
    708                                 switch (event_top)
     721                                switch (top_state)
    709722                                  {
    710723                                  case UPDATE_PREDICTION_STATE_END_KO :
     724                                  case UPDATE_PREDICTION_STATE_END    :
    711725                                    {
    712726                                      // Have already update predictor
     
    867881                      case UPT_EVENT_STATE_KO_COMMIT_WAIT_END_EVENT :
    868882                        {
    869                           Tdepth_t depth = reg_EVENT_UPT_PTR [i];
     883                          Tdepth_t depth  = reg_EVENT_UPT_PTR [i];
     884                          Tdepth_t update = reg_UPT_UPDATE    [i];
    870885                         
    871886                          log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * depth : %d",depth);
     
    878893                            }
    879894
    880                             reg_UPT_TOP    [i] = reg_UPT_TOP_EVENT [i];
    881                             reg_UPT_UPDATE [i] = reg_UPT_TOP_EVENT [i];
    882 
    883                           // break; continue
     895                          // Special case : branch_complete a speculative branch and the context_state signal the end of this event before the complete of previous branch
     896                          if (depth != update)
     897                            {
     898                              log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * EVENT [%d] <- EVENT_STATE_COMMIT_WAIT_END_UPDATE (event)",i);
     899                              upt_event_state = UPT_EVENT_STATE_KO_COMMIT_WAIT_END_UPDATE;
     900
     901                              break; // stop here
     902                             }
     903
     904                          reg_UPT_TOP    [i] = reg_UPT_TOP_EVENT [i];
     905                          reg_UPT_UPDATE [i] = reg_UPT_TOP_EVENT [i];
     906
     907//                             break; continue
    884908                        }
    885909                      case UPT_EVENT_STATE_KO_DECODE_WAIT_END_EVENT :
     
    906930                    // Flush UPFT
    907931                    flush_UFPT [i] = true;
     932
     933                    if (upt_event_state == UPT_EVENT_STATE_KO_COMMIT_WAIT_END_UPDATE)
     934                      {
     935                        reg_UPT_TOP     [i] = reg_UPT_TOP_EVENT [i];
     936                        reg_UPT_UPDATE  [i] = reg_UPT_TOP_EVENT [i];
     937                        reg_IS_ACCURATE [i] = true;
     938                       
     939                        upt_event_state = UPT_EVENT_STATE_OK;
     940                      }
    908941                   
    909942                    // Flush UPT
     
    9781011                    reg_EVENT_UPT_PTR         [i] = top;
    9791012                    reg_EVENT_UPT_FULL        [i] = (not empty and (bottom == reg_UPT_TOP [i]));
     1013//                  reg_EVENT_DEPTH           [i] = PORT_READ(in_EVENT_DEPTH [i]);//(top+1)%_param->_size_upt_queue[i];
    9801014                    reg_EVENT_DEPTH           [i] = top;
     1015
    9811016//                  reg_EVENT_ADDRESS_SRC     [i] = address_src; // delay_slot is compute in I_State
    9821017//                  reg_EVENT_ADDRESS_DEST_VAL[i] = good_take;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/src/Prediction_unit.cpp

    r88 r123  
    3737    log_printf(FUNC,Prediction_unit,FUNCTION,"Begin");
    3838
    39 #if DEBUG_Prediction_unit == true
    40     log_printf(INFO,Prediction_unit,FUNCTION,_("<%s> Parameters"),_name.c_str());
     39// #if DEBUG_Prediction_unit == true
     40//     log_printf(INFO,Prediction_unit,FUNCTION,_("<%s> Parameters"),_name.c_str());
    4141
    42     std::cout << *param << std::endl;
    43 #endif   
     42//     std::cout << *param << std::endl;
     43// #endif   
    4444
    4545    log_printf(INFO,Prediction_unit,FUNCTION,"Allocation");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/include/Front_end.h

    r108 r123  
    9393  public    : SC_OUT(Toperation_t         ) ** out_DECOD_OPERATION                 ;//[sum_inst_decod]
    9494  public    : SC_OUT(Tcontrol_t           ) ** out_DECOD_NO_EXECUTE                ;//[sum_inst_decod]
     95//public    : SC_OUT(Tcontrol_t           ) ** out_DECOD_HAVE_EVENT                ;//[sum_inst_decod]
     96  public    : SC_OUT(Tcontrol_t           ) ** out_DECOD_LAST_EVENT                ;//[sum_inst_decod]
    9597  public    : SC_OUT(Tcontrol_t           ) ** out_DECOD_IS_DELAY_SLOT             ;//[sum_inst_decod]
    9698#ifdef DEBUG
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/src/Front_end.cpp

    r88 r123  
    3838    usage_environment(_usage);
    3939
    40 #if DEBUG_Core == true
    41     log_printf(INFO,Core,FUNCTION,_("<%s> Parameters"),_name.c_str());
     40// #if DEBUG_Core == true
     41//     log_printf(INFO,Core,FUNCTION,_("<%s> Parameters"),_name.c_str());
    4242
    43     std::cout << *param << std::endl;
    44 #endif   
     43//     std::cout << *param << std::endl;
     44// #endif   
    4545
    4646    log_printf(INFO,Front_end,FUNCTION,_("<%s> : Allocation"),_name.c_str());
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/src/Front_end_allocation.cpp

    r119 r123  
    101101      ALLOC1_SIGNAL_OUT (out_DECOD_OPERATION                  ,"OPERATION"        ,Toperation_t         ,_param->_size_operation             );
    102102      ALLOC1_SIGNAL_OUT (out_DECOD_NO_EXECUTE                 ,"NO_EXECUTE"       ,Tcontrol_t           ,1                                   );
     103//    ALLOC1_SIGNAL_OUT (out_DECOD_HAVE_EVENT                 ,"HAVE_EVENT"       ,Tcontrol_t           ,1                                   );
     104      ALLOC1_SIGNAL_OUT (out_DECOD_LAST_EVENT                 ,"LAST_EVENT"       ,Tcontrol_t           ,1                                   );
    103105      ALLOC1_SIGNAL_OUT (out_DECOD_IS_DELAY_SLOT              ,"IS_DELAY_SLOT"    ,Tcontrol_t           ,1                                   );
    104106#ifdef DEBUG
     
    726728          PORT_MAP(_component,src ,"out_DECOD_"+toString(j)+"_NO_EXECUTE"   ,
    727729                              dest,"out_DECOD_"+toString(x)+"_NO_EXECUTE"   );
     730//           PORT_MAP(_component,src ,"out_DECOD_"+toString(j)+"_HAVE_EVENT"   ,
     731//                               dest,"out_DECOD_"+toString(x)+"_HAVE_EVENT"   );
     732          PORT_MAP(_component,src ,"out_DECOD_"+toString(j)+"_LAST_EVENT"   ,
     733                              dest,"out_DECOD_"+toString(x)+"_LAST_EVENT"   );
    728734          PORT_MAP(_component,src ,"out_DECOD_"+toString(j)+"_IS_DELAY_SLOT",
    729735                              dest,"out_DECOD_"+toString(x)+"_IS_DELAY_SLOT");
     
    865871          COMPONENT_MAP(_component,src , "in_CONTEXT_"+toString(j)+"_DECOD_ENABLE",
    866872                                   dest,"out_CONTEXT_"+toString(y)+"_DECOD_ENABLE");
     873          COMPONENT_MAP(_component,src , "in_CONTEXT_"+toString(j)+"_EVENT",
     874                                   dest,"out_CONTEXT_"+toString(y)+"_EVENT");
    867875
    868876          dest = _name+"_glue";
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/src/Front_end_deallocation.cpp

    r122 r123  
    4747        DELETE1_SIGNAL(out_DECOD_TYPE                       ,_param->_sum_inst_decod,_param->_size_type                  );
    4848        DELETE1_SIGNAL(out_DECOD_OPERATION                  ,_param->_sum_inst_decod,_param->_size_operation             );
    49         DELETE1_SIGNAL(out_DECOD_NO_EXECUTE                 ,_param->_sum_inst_decod,1                                   );
     49        DELETE1_SIGNAL(out_DECOD_NO_EXECUTE                 ,_param->_sum_inst_decod,1                                   );
     50//      DELETE1_SIGNAL(out_DECOD_HAVE_EVENT                 ,_param->_sum_inst_decod,1                                   );
     51        DELETE1_SIGNAL(out_DECOD_LAST_EVENT                 ,_param->_sum_inst_decod,1                                   );
    5052        DELETE1_SIGNAL(out_DECOD_IS_DELAY_SLOT              ,_param->_sum_inst_decod,1                                   );
    5153#ifdef DEBUG
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/include/Commit_unit.h

    r122 r123  
    8585  public    : SC_IN (Toperation_t       ) ***  in_INSERT_OPERATION                 ;//[nb_rename_unit][nb_inst_insert]
    8686  public    : SC_IN (Tcontrol_t         ) ***  in_INSERT_NO_EXECUTE                ;//[nb_rename_unit][nb_inst_insert]
     87  public    : SC_IN (Tcontrol_t         ) ***  in_INSERT_LAST_EVENT                ;//[nb_rename_unit][nb_inst_insert]
    8788  public    : SC_IN (Tcontrol_t         ) ***  in_INSERT_IS_DELAY_SLOT             ;//[nb_rename_unit][nb_inst_insert]
    8889#ifdef DEBUG
     
    143144  public    : SC_IN (Tcontrol_t         ) ***  in_RETIRE_EVENT_ACK                 ;//[nb_front_end][nb_context]
    144145  public    : SC_OUT(Tevent_state_t     ) *** out_RETIRE_EVENT_STATE               ;//[nb_front_end][nb_context]
    145   public    : SC_OUT(Tcontrol_t         ) *** out_RETIRE_EVENT_FLUSH               ;//[nb_front_end][nb_context]
     146//public    : SC_OUT(Tcontrol_t         ) *** out_RETIRE_EVENT_FLUSH               ;//[nb_front_end][nb_context]
    146147  public    : SC_OUT(Tcontrol_t         ) *** out_RETIRE_EVENT_STOP                ;//[nb_front_end][nb_context]
    147148                                                                                   
     
    225226  public    : SC_OUT(Tcontrol_t         ) *** out_SPR_WRITE_SR_OV                  ;//[nb_front_end][nb_context]
    226227
     228    // ~~~~~[ interface : "info" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     229#ifdef DEBUG_TEST
     230  public    : SC_OUT(bool               )   * out_INFO_ROB_EMPTY                   ;
     231#endif
     232
    227233    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~         
    228234  private   : generic::priority::Priority   * _priority_insert                     ;
     
    243249  private   : Tcommit_event_state_t        ** reg_EVENT_STATE                      ;//[nb_front_end][nb_context]
    244250//private   : bool                         ** reg_EVENT_FLUSH                      ;//[nb_front_end][nb_context]
    245   private   : bool                         ** reg_EVENT_STOP                       ;//[nb_front_end][nb_context]
     251//private   : bool                         ** reg_EVENT_STOP                       ;//[nb_front_end][nb_context]
    246252  private   : uint32_t                     ** reg_EVENT_NUM_BANK                   ;//[nb_front_end][nb_context]
    247253  private   : uint32_t                     ** reg_EVENT_NUM_PTR                    ;//[nb_front_end][nb_context]
    248   private   : bool                         ** reg_EVENT_CAN_RESTART                ;//[nb_front_end][nb_context]
     254//private   : bool                         ** reg_EVENT_CAN_RESTART                ;//[nb_front_end][nb_context]
    249255  private   : uint32_t                     ** reg_EVENT_PACKET                     ;//[nb_front_end][nb_context]
    250256  private   : bool                         ** reg_EVENT_LAST                       ;//[nb_front_end][nb_context]
    251257  private   : uint32_t                     ** reg_EVENT_LAST_NUM_BANK              ;//[nb_front_end][nb_context]
    252258  private   : uint32_t                     ** reg_EVENT_LAST_NUM_PTR               ;//[nb_front_end][nb_context]
     259
     260  private   : bool                         ** reg_EVENT_NEXT_STOP                  ;//[nb_front_end][nb_context]
     261  private   : uint32_t                     ** reg_EVENT_NEXT_PACKET                ;//[nb_front_end][nb_context]
    253262
    254263//private   : Taddress_t                   ** reg_PC_PREVIOUS                      ;//[nb_front_end][nb_context]
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/include/Types.h

    r122 r123  
    6262  typedef enum
    6363    {
    64       COMMIT_EVENT_STATE_NO_EVENT  ,
    65       COMMIT_EVENT_STATE_EVENT     ,
    66       COMMIT_EVENT_STATE_WAIT_DECOD,
    67       COMMIT_EVENT_STATE_WAIT_END  ,
     64      COMMIT_EVENT_STATE_NO_EVENT     ,
     65      COMMIT_EVENT_STATE_NOT_YET_EVENT,
     66      COMMIT_EVENT_STATE_EVENT        ,
     67//    COMMIT_EVENT_STATE_WAIT_DECOD   ,
     68      COMMIT_EVENT_STATE_WAIT_END     ,
    6869      COMMIT_EVENT_STATE_END     
    6970    } Tcommit_event_state_t;
    7071
    71 #define commit_event_state_to_event_state(x) ((x==COMMIT_EVENT_STATE_EVENT)?EVENT_STATE_EVENT:((x==COMMIT_EVENT_STATE_WAIT_DECOD)?EVENT_STATE_WAITEND:((x==COMMIT_EVENT_STATE_WAIT_END)?EVENT_STATE_WAITEND:((x==COMMIT_EVENT_STATE_END)?EVENT_STATE_END:EVENT_STATE_NO_EVENT))))
     72#define commit_event_state_to_event_state(x) ((x==COMMIT_EVENT_STATE_EVENT)?EVENT_STATE_EVENT:((x==COMMIT_EVENT_STATE_WAIT_END)?EVENT_STATE_WAITEND:((x==COMMIT_EVENT_STATE_END)?EVENT_STATE_END:EVENT_STATE_NO_EVENT)))
     73// #define commit_event_state_to_event_state(x) ((x==COMMIT_EVENT_STATE_EVENT)?EVENT_STATE_EVENT:((x==COMMIT_EVENT_STATE_WAIT_DECOD)?EVENT_STATE_WAITEND:((x==COMMIT_EVENT_STATE_WAIT_END)?EVENT_STATE_WAITEND:((x==COMMIT_EVENT_STATE_END)?EVENT_STATE_END:EVENT_STATE_NO_EVENT))))
    7274
    7375
     
    147149      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_STORE_OK_WAIT_END          : return "ROB_STORE_OK_WAIT_END"           ; break;
    148150      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_STORE_KO_WAIT_END          : return "ROB_STORE_KO_WAIT_END"           ; break;
     151      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_STORE_EVENT                : return "ROB_STORE_EVENT"                 ; break;
    149152      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_OTHER_WAIT_END             : return "ROB_OTHER_WAIT_END"              ; break;
    150153      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::commit_unit::ROB_EVENT_WAIT_END             : return "ROB_EVENT_WAIT_END"              ; break;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit.cpp

    r121 r123  
    4040    usage_environment(_usage);
    4141
    42 #if DEBUG_Commit_unit == true
    43     log_printf(TRACE,Commit_unit,FUNCTION,_("<%s> Parameters"),_name.c_str());
    44 
    45     std::cout << *param << std::endl;
    46 #endif
     42// #if DEBUG_Commit_unit == true
     43//     log_printf(TRACE,Commit_unit,FUNCTION,_("<%s> Parameters"),_name.c_str());
     44
     45//     std::cout << *param << std::endl;
     46// #endif
    4747
    4848    log_printf(INFO,Commit_unit,FUNCTION,_("<%s> Allocation"),_name.c_str());
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_allocation.cpp

    r122 r123  
    7171      _ALLOC2_SIGNAL_IN ( in_INSERT_OPERATION               ,"operation"            ,Toperation_t      ,_param->_size_operation             ,_param->_nb_rename_unit,_param->_nb_inst_insert[it1]);
    7272      _ALLOC2_SIGNAL_IN ( in_INSERT_NO_EXECUTE              ,"no_execute"           ,Tcontrol_t        ,1                                   ,_param->_nb_rename_unit,_param->_nb_inst_insert[it1]);
     73      _ALLOC2_SIGNAL_IN ( in_INSERT_LAST_EVENT              ,"last_event"           ,Tcontrol_t        ,1                                   ,_param->_nb_rename_unit,_param->_nb_inst_insert[it1]);
    7374      _ALLOC2_SIGNAL_IN ( in_INSERT_IS_DELAY_SLOT           ,"is_delay_slot"        ,Tcontrol_t        ,1                                   ,_param->_nb_rename_unit,_param->_nb_inst_insert[it1]);
    7475#ifdef DEBUG
     
    141142      _ALLOC2_VALACK_IN ( in_RETIRE_EVENT_ACK               ,ACK,_param->_nb_front_end,_param->_nb_context[it1]);
    142143      _ALLOC2_SIGNAL_OUT(out_RETIRE_EVENT_STATE             ,"state"                ,Tevent_state_t    ,_param->_size_event_state           ,_param->_nb_front_end,_param->_nb_context[it1]);
    143       _ALLOC2_SIGNAL_OUT(out_RETIRE_EVENT_FLUSH             ,"flush"                ,Tcontrol_t        ,1                                   ,_param->_nb_front_end,_param->_nb_context[it1]);
     144//    _ALLOC2_SIGNAL_OUT(out_RETIRE_EVENT_FLUSH             ,"flush"                ,Tcontrol_t        ,1                                   ,_param->_nb_front_end,_param->_nb_context[it1]);
    144145      _ALLOC2_SIGNAL_OUT(out_RETIRE_EVENT_STOP              ,"stop"                 ,Tcontrol_t        ,1                                   ,_param->_nb_front_end,_param->_nb_context[it1]);
    145146
     
    282283    }
    283284
     285#ifdef DEBUG_TEST
     286    {
     287      ALLOC0_INTERFACE_BEGIN("info",OUT,EAST,_("Information."));
     288      ALLOC0_SIGNAL_OUT(out_INFO_ROB_EMPTY                   ,"rob_empty"   ,bool               ,1);
     289      ALLOC0_INTERFACE_END();
     290    }
     291#endif
     292
    284293    if (usage_is_set(_usage,USE_SYSTEMC))
    285294      {
     
    318327    ALLOC2(reg_EVENT_STATE          ,Tcommit_event_state_t,_param->_nb_front_end,_param->_nb_context [it1]);
    319328//  ALLOC2(reg_EVENT_FLUSH          ,bool                 ,_param->_nb_front_end,_param->_nb_context [it1]);
    320     ALLOC2(reg_EVENT_STOP           ,bool                 ,_param->_nb_front_end,_param->_nb_context [it1]);
     329//  ALLOC2(reg_EVENT_STOP           ,bool                 ,_param->_nb_front_end,_param->_nb_context [it1]);
    321330    ALLOC2(reg_EVENT_NUM_BANK       ,uint32_t             ,_param->_nb_front_end,_param->_nb_context [it1]);
    322331    ALLOC2(reg_EVENT_NUM_PTR        ,uint32_t             ,_param->_nb_front_end,_param->_nb_context [it1]);
    323     ALLOC2(reg_EVENT_CAN_RESTART    ,bool                 ,_param->_nb_front_end,_param->_nb_context [it1]);
     332//  ALLOC2(reg_EVENT_CAN_RESTART    ,bool                 ,_param->_nb_front_end,_param->_nb_context [it1]);
    324333    ALLOC2(reg_EVENT_PACKET         ,uint32_t             ,_param->_nb_front_end,_param->_nb_context [it1]);
    325334    ALLOC2(reg_EVENT_LAST           ,bool                 ,_param->_nb_front_end,_param->_nb_context [it1]);
    326335    ALLOC2(reg_EVENT_LAST_NUM_BANK  ,uint32_t             ,_param->_nb_front_end,_param->_nb_context [it1]);
    327336    ALLOC2(reg_EVENT_LAST_NUM_PTR   ,uint32_t             ,_param->_nb_front_end,_param->_nb_context [it1]);
     337
     338    ALLOC2(reg_EVENT_NEXT_STOP      ,bool                 ,_param->_nb_front_end,_param->_nb_context [it1]);
     339    ALLOC2(reg_EVENT_NEXT_PACKET    ,uint32_t             ,_param->_nb_front_end,_param->_nb_context [it1]);
    328340                                                         
    329341//  ALLOC2(reg_PC_PREVIOUS          ,Taddress_t           ,_param->_nb_front_end,_param->_nb_context [it1]);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_deallocation.cpp

    r122 r123  
    3838        DELETE2_SIGNAL( in_INSERT_OPERATION               ,_param->_nb_rename_unit,_param->_nb_inst_insert[it1],_param->_size_operation             );
    3939        DELETE2_SIGNAL( in_INSERT_NO_EXECUTE              ,_param->_nb_rename_unit,_param->_nb_inst_insert[it1],1                                   );
     40        DELETE2_SIGNAL( in_INSERT_LAST_EVENT              ,_param->_nb_rename_unit,_param->_nb_inst_insert[it1],1                                   );
    4041        DELETE2_SIGNAL( in_INSERT_IS_DELAY_SLOT           ,_param->_nb_rename_unit,_param->_nb_inst_insert[it1],1                                   );
    4142#ifdef DEBUG
     
    9495        DELETE2_SIGNAL( in_RETIRE_EVENT_ACK               ,_param->_nb_front_end,_param->_nb_context[it1],1);
    9596        DELETE2_SIGNAL(out_RETIRE_EVENT_STATE             ,_param->_nb_front_end,_param->_nb_context[it1],_param->_size_event_state);
    96         DELETE2_SIGNAL(out_RETIRE_EVENT_FLUSH             ,_param->_nb_front_end,_param->_nb_context[it1],1);
     97//      DELETE2_SIGNAL(out_RETIRE_EVENT_FLUSH             ,_param->_nb_front_end,_param->_nb_context[it1],1);
    9798        DELETE2_SIGNAL(out_RETIRE_EVENT_STOP              ,_param->_nb_front_end,_param->_nb_context[it1],1);
    9899
     
    167168        DELETE2_SIGNAL(out_SPR_WRITE_SR_OV                ,_param->_nb_front_end, _param->_nb_context[it1],1);
    168169
     170        DELETE0_SIGNAL(out_INFO_ROB_EMPTY                 ,1);
     171
    169172        // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~     
    170173        DELETE1(internal_BANK_INSERT_VAL             ,_param->_nb_bank);
     
    207210        DELETE2(reg_EVENT_STATE          ,_param->_nb_front_end,_param->_nb_context [it1]);
    208211//      DELETE2(reg_EVENT_FLUSH          ,_param->_nb_front_end,_param->_nb_context [it1]);
    209         DELETE2(reg_EVENT_STOP           ,_param->_nb_front_end,_param->_nb_context [it1]);
     212//      DELETE2(reg_EVENT_STOP           ,_param->_nb_front_end,_param->_nb_context [it1]);
    210213        DELETE2(reg_EVENT_NUM_BANK       ,_param->_nb_front_end,_param->_nb_context [it1]);
    211214        DELETE2(reg_EVENT_NUM_PTR        ,_param->_nb_front_end,_param->_nb_context [it1]);
    212         DELETE2(reg_EVENT_CAN_RESTART    ,_param->_nb_front_end,_param->_nb_context [it1]);
     215//         DELETE2(reg_EVENT_CAN_RESTART    ,_param->_nb_front_end,_param->_nb_context [it1]);
    213216        DELETE2(reg_EVENT_PACKET         ,_param->_nb_front_end,_param->_nb_context [it1]);
    214217        DELETE2(reg_EVENT_LAST           ,_param->_nb_front_end,_param->_nb_context [it1]);
    215218        DELETE2(reg_EVENT_LAST_NUM_BANK  ,_param->_nb_front_end,_param->_nb_context [it1]);
    216219        DELETE2(reg_EVENT_LAST_NUM_PTR   ,_param->_nb_front_end,_param->_nb_context [it1]);
     220
     221        DELETE2(reg_EVENT_NEXT_STOP      ,_param->_nb_front_end,_param->_nb_context [it1]);
     222        DELETE2(reg_EVENT_NEXT_PACKET    ,_param->_nb_front_end,_param->_nb_context [it1]);
    217223
    218224//      DELETE2(reg_PC_PREVIOUS          ,_param->_nb_front_end,_param->_nb_context [it1]);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_genMealy_commit.cpp

    r119 r123  
    2323    log_begin(Commit_unit,FUNCTION);
    2424    log_function(Commit_unit,FUNCTION,_name.c_str());
     25
     26    if (PORT_READ(in_NRESET))
     27      {
    2528
    2629#ifdef STATISTICS
     
    9699    for (uint32_t i=0; i<_param->_nb_inst_commit; i++)
    97100      PORT_WRITE(out_COMMIT_ACK [i],commit_ack [i]);
     101      }
     102    else
     103      {
     104        for (uint32_t i=0; i<_param->_nb_inst_commit; i++)
     105          PORT_WRITE(out_COMMIT_ACK [i],0);
     106      }
    98107   
    99108    log_end(Commit_unit,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_genMealy_insert.cpp

    r122 r123  
    2424    log_function(Commit_unit,FUNCTION,_name.c_str());
    2525
     26    if (PORT_READ(in_NRESET))
     27      {
    2628    Tcontrol_t bank_full         [_param->_nb_bank];
    2729    Tcontrol_t insert_ack        [_param->_nb_rename_unit][_param->_max_nb_inst_insert];
     
    136138#endif
    137139        }
    138    
     140      }   
     141    else
     142      {
     143        for (uint32_t i=0; i<_param->_nb_bank; i++)
     144          internal_BANK_INSERT_VAL  [i] = false;
     145        for (uint32_t i=0; i<_param->_nb_rename_unit; i++)
     146          for (uint32_t j=0; j<_param->_nb_inst_insert[i]; j++)
     147            PORT_WRITE(out_INSERT_ACK       [i][j],0);
     148
     149      }
     150
    139151    log_end(Commit_unit,FUNCTION);
    140152  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_genMealy_retire.cpp

    r122 r123  
    2424    log_function(Commit_unit,FUNCTION,_name.c_str());
    2525
     26    if (PORT_READ(in_NRESET))
     27      {
    2628    Tcontrol_t retire_val          [_param->_nb_rename_unit][_param->_max_nb_inst_retire];
    2729    uint32_t   num_inst_retire     [_param->_nb_rename_unit];
     
    186188
    187189                  // if future event, don't update after this event
    188                   if (reg_EVENT_STOP [front_end_id][context_id] and
    189                       (reg_EVENT_PACKET [entry->front_end_id][entry->context_id]  == packet))
     190                  if ((reg_EVENT_STATE  [entry->front_end_id][entry->context_id] == COMMIT_EVENT_STATE_NOT_YET_EVENT) and
     191                      (reg_EVENT_PACKET [entry->front_end_id][entry->context_id] == packet))
    190192                    bypass = false;
    191193              }
     
    211213          PORT_WRITE(out_SPR_WRITE_SR_OV     [i][j], spr_write_sr_ov     [i][j]);
    212214        }
     215      }
     216    else
     217      {
     218        for (uint32_t i=0; i<_param->_nb_rename_unit; i++)
     219          for (uint32_t j=0; j<_param->_nb_inst_retire[i]; j++)
     220            PORT_WRITE(out_RETIRE_VAL [i][j],0);
     221      }
    213222
    214223    log_end(Commit_unit,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_genMoore.cpp

    r122 r123  
    2424    log_function(Commit_unit,FUNCTION,_name.c_str());
    2525
     26    if (PORT_READ(in_NRESET))
     27      {
    2628    // ===================================================================
    2729    // =====[ REEXECUTE ]=================================================
     
    105107
    106108          internal_REEXECUTE_VAL      [i] = val;
    107           PORT_WRITE(out_REEXECUTE_VAL[i], internal_REEXECUTE_VAL [i]);
    108109        }
    109110    }
     
    148149
    149150                  // don't complete a branch when rob manage an present event
    150                   if ((reg_EVENT_STATE [front_end_id][context_id] == COMMIT_EVENT_STATE_NO_EVENT) and
     151                  if (((reg_EVENT_STATE [front_end_id][context_id] == COMMIT_EVENT_STATE_NO_EVENT) or
     152                       (reg_EVENT_STATE [front_end_id][context_id] == COMMIT_EVENT_STATE_NOT_YET_EVENT)) and
    151153                      (state == ROB_BRANCH_COMPLETE))
    152154                    {
     
    154156
    155157                      // test if have a future event (stop is set)
    156                       log_printf(TRACE,Commit_unit,FUNCTION,"      * reg_EVENT_STOP   : %d",reg_EVENT_STOP [front_end_id][context_id]);
    157 
    158                       if (reg_EVENT_STOP [front_end_id][context_id])
     158//                       log_printf(TRACE,Commit_unit,FUNCTION,"      * reg_EVENT_STOP   : %d",reg_EVENT_STOP [front_end_id][context_id]);
     159
     160                      if (reg_EVENT_STATE [front_end_id][context_id] == COMMIT_EVENT_STATE_NOT_YET_EVENT)
    159161                        {
    160162                          // Have future event, can complete the branch if the event is most speculative than this branchement
     
    204206
    205207          internal_BRANCH_COMPLETE_VAL [i] = val;
    206           PORT_WRITE(out_BRANCH_COMPLETE_VAL [i], internal_BRANCH_COMPLETE_VAL [i]);
    207208        }
    208209    }
     
    275276        }
    276277     
    277       PORT_WRITE(out_UPDATE_VAL, internal_UPDATE_VAL);
    278 
    279278      log_printf(TRACE,Commit_unit,FUNCTION,"  * UPDATE (end)");
    280279    }
     
    283282    // =====[ NB_INST ]===================================================
    284283    // ===================================================================
    285     for (uint32_t i=0; i<_param->_nb_front_end; i++)
    286       for (uint32_t j=0; j<_param->_nb_context [i]; j++)
    287         {
    288           PORT_WRITE(out_NB_INST_COMMIT_ALL [i][j], reg_NB_INST_COMMIT_ALL [i][j]);
    289           PORT_WRITE(out_NB_INST_COMMIT_MEM [i][j], reg_NB_INST_COMMIT_MEM [i][j]);
    290         }
     284    {
     285#ifdef DEBUG_TEST
     286      bool empty = true;
     287#endif
     288      for (uint32_t i=0; i<_param->_nb_front_end; i++)
     289        for (uint32_t j=0; j<_param->_nb_context [i]; j++)
     290          {
     291#ifdef DEBUG_TEST
     292            empty &= (reg_NB_INST_COMMIT_ALL [i][j] == 0);
     293#endif
     294            PORT_WRITE(out_NB_INST_COMMIT_ALL [i][j], reg_NB_INST_COMMIT_ALL [i][j]);
     295            PORT_WRITE(out_NB_INST_COMMIT_MEM [i][j], reg_NB_INST_COMMIT_MEM [i][j]);
     296          }
     297#ifdef DEBUG_TEST
     298      PORT_WRITE(out_INFO_ROB_EMPTY,empty);
     299#endif
     300    }
     301
    291302
    292303    // ===================================================================
     
    296307      for (uint32_t j=0; j<_param->_nb_context [i]; j++)
    297308        {
    298 //        bool flush = reg_EVENT_FLUSH [i][j];
    299           bool flush = (((reg_EVENT_STATE [i][j] == COMMIT_EVENT_STATE_EVENT) or
    300                          (reg_EVENT_STATE [i][j] == COMMIT_EVENT_STATE_WAIT_DECOD)) and
    301                         not reg_EVENT_CAN_RESTART[i][j]);
     309//           bool flush = (((reg_EVENT_STATE [i][j] == COMMIT_EVENT_STATE_EVENT) or
     310//                          (reg_EVENT_STATE [i][j] == COMMIT_EVENT_STATE_WAIT_DECOD)) and
     311//                         not reg_EVENT_CAN_RESTART[i][j]);
    302312
    303313          PORT_WRITE(out_RETIRE_EVENT_STATE [i][j], commit_event_state_to_event_state(reg_EVENT_STATE[i][j]));
    304           PORT_WRITE(out_RETIRE_EVENT_FLUSH [i][j], flush);
    305           PORT_WRITE(out_RETIRE_EVENT_STOP  [i][j], reg_EVENT_STOP [i][j]);
     314//        PORT_WRITE(out_RETIRE_EVENT_FLUSH [i][j], flush);
     315//        PORT_WRITE(out_RETIRE_EVENT_STOP  [i][j], reg_EVENT_STOP [i][j]);
     316          PORT_WRITE(out_RETIRE_EVENT_STOP  [i][j], ((reg_EVENT_STATE [i][j] == COMMIT_EVENT_STATE_NOT_YET_EVENT) or
     317                                                     reg_EVENT_NEXT_STOP [i][j]));
    306318        }
    307 
     319      }
     320    else
     321      {
     322        for (uint32_t i=0; i<_param->_nb_inst_reexecute; ++i)
     323          {
     324            internal_REEXECUTE_VAL      [i] = 0;
     325//             internal_REEXECUTE_NUM_BANK [i] = num_bank;
     326          }
     327
     328        for (uint32_t i=0; i<_param->_nb_inst_branch_complete; i++)
     329          {
     330            internal_BRANCH_COMPLETE_VAL [i] = 0;
     331//             internal_BRANCH_COMPLETE_NUM_BANK           [i] = num_bank;
     332          }
     333
     334        internal_UPDATE_VAL = 0;
     335//       internal_UPDATE_NUM_BANK = reg_NUM_BANK_HEAD;
     336
     337
     338        for (uint32_t i=0; i<_param->_nb_front_end; i++)
     339          for (uint32_t j=0; j<_param->_nb_context [i]; j++)
     340            {
     341              PORT_WRITE(out_RETIRE_EVENT_STATE [i][j], commit_event_state_to_event_state(COMMIT_EVENT_STATE_NO_EVENT));
     342//            PORT_WRITE(out_RETIRE_EVENT_FLUSH [i][j], flush);
     343//            PORT_WRITE(out_RETIRE_EVENT_STOP  [i][j], reg_EVENT_STOP [i][j]);
     344              PORT_WRITE(out_RETIRE_EVENT_STOP  [i][j], true);
     345            }
     346      }
     347
     348      for (uint32_t i=0; i<_param->_nb_inst_reexecute; ++i)
     349        PORT_WRITE(out_REEXECUTE_VAL[i], internal_REEXECUTE_VAL [i]);
     350      for (uint32_t i=0; i<_param->_nb_inst_branch_complete; i++)
     351        PORT_WRITE(out_BRANCH_COMPLETE_VAL [i], internal_BRANCH_COMPLETE_VAL [i]);
     352      PORT_WRITE(out_UPDATE_VAL, internal_UPDATE_VAL);
     353       
    308354    log_end(Commit_unit,FUNCTION);
    309355  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_transition.cpp

    r122 r123  
    5353              reg_EVENT_STATE           [i][j] = COMMIT_EVENT_STATE_NO_EVENT;
    5454//            reg_EVENT_FLUSH           [i][j] = false;
    55               reg_EVENT_STOP            [i][j] = false;
     55//            reg_EVENT_STOP            [i][j] = false;
    5656              reg_EVENT_LAST            [i][j] = false;
     57
     58              reg_EVENT_NEXT_STOP       [i][j] = false;
    5759
    5860//            reg_PC_PREVIOUS           [i][j] = (0x100-4)>>2;
     
    8688              //   * and decod_queue is empty
    8789              //   * and have an event or have a futur event
    88               if (not reg_EVENT_CAN_RESTART [i][j] and
    89                    (PORT_READ(in_NB_INST_DECOD_ALL [i][j]) == 0) and
    90                    (reg_EVENT_STOP [i][j] or (reg_EVENT_STATE [i][j] != COMMIT_EVENT_STATE_NO_EVENT)))
    91                 reg_EVENT_CAN_RESTART [i][j] = true;
     90//               if (not reg_EVENT_CAN_RESTART [i][j] and
     91//                    (PORT_READ(in_NB_INST_DECOD_ALL [i][j]) == 0) and
     92//                    (reg_EVENT_STOP [i][j] or (reg_EVENT_STATE [i][j] != COMMIT_EVENT_STATE_NO_EVENT)))
     93//                 reg_EVENT_CAN_RESTART [i][j] = true;
    9294
    9395              // Test event state
     
    100102                      {
    101103                        // A minor optimisation : test if wait_decod is previously empty.
    102                         if (not reg_EVENT_CAN_RESTART [i][j])
    103                           reg_EVENT_STATE [i][j] = COMMIT_EVENT_STATE_WAIT_DECOD;
    104                         else
     104//                         if (not reg_EVENT_CAN_RESTART [i][j])
     105//                           reg_EVENT_STATE [i][j] = COMMIT_EVENT_STATE_WAIT_DECOD;
     106//                         else
    105107                          reg_EVENT_STATE [i][j] = COMMIT_EVENT_STATE_WAIT_END;
    106108                      }
     
    108110                    break;
    109111                  }
    110                 case COMMIT_EVENT_STATE_WAIT_DECOD :
    111                   {
    112                     // Wait flush of decod_queue.
    113                     // Test if can restart now
    114                     if (reg_EVENT_CAN_RESTART [i][j])
    115                       {
    116                         //reg_EVENT_FLUSH [i][j] = false;
    117 
    118                         // A minor optimisation : test if the last element is already retire
    119                         if (not reg_EVENT_LAST [i][j])
    120                           reg_EVENT_STATE [i][j] = COMMIT_EVENT_STATE_WAIT_END;
    121                         else
    122                           reg_EVENT_STATE [i][j] = COMMIT_EVENT_STATE_END;
    123                       }
    124                     break;
    125                   }
     112//                 case COMMIT_EVENT_STATE_WAIT_DECOD :
     113//                   {
     114//                     // Wait flush of decod_queue.
     115//                     // Test if can restart now
     116//                     if (reg_EVENT_CAN_RESTART [i][j])
     117//                       {
     118//                         //reg_EVENT_FLUSH [i][j] = false;
     119
     120//                         // A minor optimisation : test if the last element is already retire
     121//                         if (not reg_EVENT_LAST [i][j])
     122//                           reg_EVENT_STATE [i][j] = COMMIT_EVENT_STATE_WAIT_END;
     123//                         else
     124//                           reg_EVENT_STATE [i][j] = COMMIT_EVENT_STATE_END;
     125//                       }
     126//                     break;
     127//                   }
    126128                case COMMIT_EVENT_STATE_WAIT_END :
    127129                  {
     
    138140                   
    139141                    // flush of re order buffer is finish
    140                     reg_EVENT_STATE [i][j] = COMMIT_EVENT_STATE_NO_EVENT;
    141142                    reg_EVENT_LAST  [i][j] = false;
     143
     144                    if (not reg_EVENT_NEXT_STOP [i][j])
     145                      reg_EVENT_STATE [i][j] = COMMIT_EVENT_STATE_NO_EVENT;
     146                    else
     147                      {
     148                        reg_EVENT_NEXT_STOP [i][j] = false;
     149                        reg_EVENT_PACKET [i][j] = reg_EVENT_NEXT_PACKET [i][j];
     150                        reg_EVENT_STATE         [i][j] = COMMIT_EVENT_STATE_NOT_YET_EVENT;
     151//                      reg_EVENT_STOP          [i][j] = true;
     152                        reg_EVENT_LAST_NUM_BANK [i][j] = ((reg_NUM_BANK_TAIL==0)?_param->_nb_bank:reg_NUM_BANK_TAIL)-1;
     153                        reg_EVENT_LAST_NUM_PTR  [i][j] = reg_NUM_PTR_TAIL;
     154                      }
     155
    142156                    break;
    143157                  }
    144158                  //case COMMIT_EVENT_STATE_NO_EVENT :
     159                  //case COMMIT_EVENT_STATE_NOT_YET_EVENT :
    145160                default : break;
    146161                }
     
    296311                      //     * or present_event
    297312                      //   * and not can_restart (previous empty decod queue), because between the event_stop (branch_complete) and the state event (miss in head), many cycle is occured.
    298                       bool flush = ((// present event
    299                                      ((reg_EVENT_STATE [front_end_id][context_id] == COMMIT_EVENT_STATE_EVENT) or
    300                                       (reg_EVENT_STATE [front_end_id][context_id] == COMMIT_EVENT_STATE_WAIT_DECOD)) or
    301                                      // futur event
    302                                      reg_EVENT_STOP [front_end_id][context_id])
    303                                     // can't restart
    304                                     and not reg_EVENT_CAN_RESTART[front_end_id][context_id]
    305                                     );
    306 
    307                       if (flush)
    308                         {
    309                           // A new invalid instruction is push in rob -> new last instruction
    310                           reg_EVENT_LAST          [front_end_id][context_id] = false;
    311                           reg_EVENT_LAST_NUM_BANK [front_end_id][context_id] = num_bank;
    312                           reg_EVENT_LAST_NUM_PTR  [front_end_id][context_id] = ptr;
    313                         }
     313//                       bool flush = ((// present event
     314//                                      ((reg_EVENT_STATE [front_end_id][context_id] == COMMIT_EVENT_STATE_EVENT) or
     315//                                       (reg_EVENT_STATE [front_end_id][context_id] == COMMIT_EVENT_STATE_WAIT_DECOD)
     316//                                       ) or
     317//                                      futur event
     318//                                      reg_EVENT_STOP [front_end_id][context_id])
     319//                                     // can't restart
     320//                                     and not reg_EVENT_CAN_RESTART[front_end_id][context_id]
     321//                                     );
     322
     323//                       if (flush)
     324//                         {
     325//                           // A new invalid instruction is push in rob -> new last instruction
     326//                           reg_EVENT_LAST          [front_end_id][context_id] = false;
     327//                           reg_EVENT_LAST_NUM_BANK [front_end_id][context_id] = num_bank;
     328//                           reg_EVENT_LAST_NUM_PTR  [front_end_id][context_id] = ptr;
     329//                         }
    314330                     
    315331                      // Update pointer
     
    359375                    // find the good entry !!!
    360376                    entry_t *       entry        = internal_BANK_COMMIT_ENTRY [i][j];
     377
     378                    log_printf(TRACE,Commit_unit,FUNCTION,"    * ptr        : %d",entry->ptr);
    361379                                                 
    362380                  //Toperation_t    operation    = PORT_READ(in_COMMIT_OPERATION   [x]);
     
    480498
    481499                    // Commit an instruction ...
    482                     // Test if have an event (miss_speculation or exception) and not manage a previous event
    483                     // if yes, this instruction would modify state machine. Also stop Re Order Buffer
    484 
    485 //                  bool flush = reg_EVENT_FLUSH [entry->front_end_id][entry->context_id];
    486                     bool flush = ((reg_EVENT_STATE [entry->front_end_id][entry->context_id] == COMMIT_EVENT_STATE_EVENT) or
    487                                   (reg_EVENT_STATE [entry->front_end_id][entry->context_id] == COMMIT_EVENT_STATE_WAIT_DECOD) or
    488                                   (reg_EVENT_STATE [entry->front_end_id][entry->context_id] == COMMIT_EVENT_STATE_WAIT_END));
    489                    
    490                     if ((have_exception or have_miss_speculation) and (not flush))
     500                    // Test if have an event (miss_speculation or exception)
     501
     502                    if (have_exception or have_miss_speculation)
    491503                      {
     504                        // Two case :
     505                        // if no previous manage event -> generate an event
     506                        // if    previous manage event -> next generate an event
     507
     508//                      bool flush = reg_EVENT_FLUSH [front_end_id][context_id];
     509                        bool flush = ((reg_EVENT_STATE [front_end_id][context_id] == COMMIT_EVENT_STATE_EVENT) or
     510//                                    (reg_EVENT_STATE [front_end_id][context_id] == COMMIT_EVENT_STATE_WAIT_DECOD) or
     511                                      (reg_EVENT_STATE [front_end_id][context_id] == COMMIT_EVENT_STATE_WAIT_END) or
     512                                      (reg_EVENT_STATE [front_end_id][context_id] == COMMIT_EVENT_STATE_END)
     513                                      );
     514                       
    492515                        uint32_t packet = ((entry->ptr << _param->_shift_num_slot) | i);
    493                        
    494                         // test have a previous event detected (event_stop = 1)
    495                         // if yes, test if the actual event if "before (in order)" that the previous event
    496                         if (reg_EVENT_STOP [entry->front_end_id][entry->context_id])
     516                        uint32_t _top   = ((_rob[ reg_NUM_BANK_HEAD].front()->ptr << _param->_shift_num_slot) | reg_NUM_BANK_HEAD);
     517                           
     518                        if (not flush)
    497519                          {
    498                             // Compare packet_id (by construction instruction is insert in order by increase packet_id)
    499 
    500                             uint32_t _top = ((_rob[ reg_NUM_BANK_HEAD].front()->ptr << _param->_shift_num_slot) | reg_NUM_BANK_HEAD);
    501                             uint32_t _old = reg_EVENT_PACKET [entry->front_end_id][entry->context_id];
    502                             uint32_t _new = packet;
    503                             if (_old < _top) _old = _old+_param->_size_queue;
    504                             if (_new < _top) _new = _new+_param->_size_queue;
    505                             if (_new < _old) reg_EVENT_PACKET [entry->front_end_id][entry->context_id] = packet;
     520                            bool     can    = true;
     521                            // test have a previous event detected (event_stop = 1)
     522                            // if yes, test if the actual event if "before (in order)" that the previous event
     523                            if (reg_EVENT_STATE [front_end_id][context_id] == COMMIT_EVENT_STATE_NOT_YET_EVENT)
     524                              {
     525                                // Compare packet_id (by construction instruction is insert in order by increase packet_id)
     526                               
     527                                uint32_t _old = reg_EVENT_PACKET [front_end_id][context_id];
     528                                uint32_t _new = packet;
     529                                if (_old < _top) _old = _old+_param->_size_queue;
     530                                if (_new < _top) _new = _new+_param->_size_queue;
     531                                if (_new < _old) reg_EVENT_PACKET [front_end_id][context_id] = packet;
     532                                else can = false;
     533                              }
     534                            else
     535                              reg_EVENT_PACKET [front_end_id][context_id] = packet;
     536                           
     537                            if (can)
     538                              {
     539                                // have an error, stop issue instruction
     540                                reg_EVENT_STATE         [front_end_id][context_id] = COMMIT_EVENT_STATE_NOT_YET_EVENT;
     541                                //                      reg_EVENT_STOP          [front_end_id][context_id] = true;
     542                               
     543                                reg_EVENT_LAST_NUM_BANK [front_end_id][context_id] = ((reg_NUM_BANK_TAIL==0)?_param->_nb_bank:reg_NUM_BANK_TAIL)-1;
     544                                reg_EVENT_LAST_NUM_PTR  [front_end_id][context_id] = reg_NUM_PTR_TAIL;
     545                              }
    506546                          }
    507547                        else
    508                           reg_EVENT_PACKET [entry->front_end_id][entry->context_id] = packet;
    509                        
    510                         // have an error, stop issue instruction
    511                         reg_EVENT_STOP          [entry->front_end_id][entry->context_id] = true;
    512 //                         reg_EVENT_NUM_BANK      [entry->front_end_id][entry->context_id] = i;
    513 //                         reg_EVENT_NUM_PTR       [entry->front_end_id][entry->context_id] = entry->ptr;
    514 
    515 //                      reg_EVENT_CAN_RESTART   [entry->front_end_id][entry->context_id] = false;
    516                         reg_EVENT_LAST_NUM_BANK [entry->front_end_id][entry->context_id] = ((reg_NUM_BANK_TAIL==0)?_param->_nb_bank:reg_NUM_BANK_TAIL)-1;
    517                         reg_EVENT_LAST_NUM_PTR  [entry->front_end_id][entry->context_id] = reg_NUM_PTR_TAIL;
     548                          {
     549                            bool find = true;
     550
     551                            // already manage an event.
     552                            if (reg_EVENT_NEXT_STOP [front_end_id][context_id])
     553                              {
     554                                // after last ?
     555                                uint32_t _old = reg_EVENT_NEXT_PACKET [front_end_id][context_id];
     556                                uint32_t _new = packet;
     557                                if (_old < _top) _old = _old+_param->_size_queue;
     558                                if (_new < _top) _new = _new+_param->_size_queue;
     559                                if (_new > _old) reg_EVENT_NEXT_PACKET [front_end_id][context_id] = packet;
     560                                find = false;
     561                              }
     562                            else
     563                              {
     564                                // after last ?
     565                                uint32_t _old = ((reg_EVENT_LAST_NUM_PTR [front_end_id][context_id] << _param->_shift_num_slot) | reg_EVENT_LAST_NUM_BANK [front_end_id][context_id]);
     566                                uint32_t _new = packet;
     567                                if (_old < _top) _old = _old+_param->_size_queue;
     568                                if (_new < _top) _new = _new+_param->_size_queue;
     569                                if (_new > _old) reg_EVENT_NEXT_PACKET [front_end_id][context_id] = packet;
     570                                find = false;
     571                              }
     572
     573                            if (find)
     574                            reg_EVENT_NEXT_STOP [front_end_id][context_id] = true; // in all case : need stop
     575                          }
    518576                      }
    519                    
     577
    520578                    // Update Re Order Buffer
    521579                    entry->state        = state;
     
    633691                      {
    634692                          reg_EVENT_STATE         [front_end_id][context_id] = COMMIT_EVENT_STATE_EVENT;
    635 //                        reg_EVENT_FLUSH         [front_end_id][context_id] = true;
    636                           reg_EVENT_STOP          [front_end_id][context_id] = false; // instruction flow can continue
    637 //                        reg_EVENT_CAN_RESTART   [front_end_id][context_id] = false;
     693//                        reg_EVENT_STOP          [front_end_id][context_id] = false; // instruction flow can continue
    638694                          reg_EVENT_LAST          [front_end_id][context_id] = false;
    639695                          // it the head !
    640696                          reg_EVENT_PACKET        [front_end_id][context_id] = packet_id;
    641697                   
    642                           // If event is an load_miss, many instruction can be inserted.
    643                           // -> new last instruction
    644                           if (state == ROB_END_LOAD_MISS)
    645                             {
    646                             reg_EVENT_CAN_RESTART   [front_end_id][context_id] = false;
     698//                           // If event is an load_miss, many instruction can be inserted.
     699//                           // -> new last instruction
     700//                           if (state == ROB_END_LOAD_MISS)
     701//                             {
     702// //                             reg_EVENT_CAN_RESTART   [front_end_id][context_id] = false;
    647703                           
    648                             reg_EVENT_LAST_NUM_BANK [front_end_id][context_id] = ((reg_NUM_BANK_TAIL==0)?_param->_nb_bank:reg_NUM_BANK_TAIL)-1;
    649                             reg_EVENT_LAST_NUM_PTR  [front_end_id][context_id] = reg_NUM_PTR_TAIL;
    650                             }
     704//                             reg_EVENT_LAST_NUM_BANK [front_end_id][context_id] = ((reg_NUM_BANK_TAIL==0)?_param->_nb_bank:reg_NUM_BANK_TAIL)-1;
     705//                             reg_EVENT_LAST_NUM_PTR  [front_end_id][context_id] = reg_NUM_PTR_TAIL;
     706//                             }
    651707                        }
    652708                   
     
    654710                    //   * need event
    655711                    //   * packet id = last packet id
    656                     if ((reg_EVENT_STATE         [front_end_id][context_id] != COMMIT_EVENT_STATE_NO_EVENT) and
     712                    if (((reg_EVENT_STATE         [front_end_id][context_id] != COMMIT_EVENT_STATE_NO_EVENT     ) and
     713                         (reg_EVENT_STATE         [front_end_id][context_id] != COMMIT_EVENT_STATE_NOT_YET_EVENT)) and
    657714                        (reg_EVENT_LAST_NUM_BANK [front_end_id][context_id] == num_bank            ) and
    658715                        (reg_EVENT_LAST_NUM_PTR  [front_end_id][context_id] == entry->ptr          ))
     
    666723                    // Update pointer
    667724                    reg_NUM_BANK_HEAD = (num_bank+1)%_param->_nb_bank;
    668                    
    669                     // Remove entry
    670                     delete entry;
    671                     _rob [num_bank].pop_front();
    672725                   
    673726                    // Reset watch dog timer because have transaction on retire interface
     
    708761                    }
    709762#endif     
     763
     764                    // Remove entry
     765                    delete entry;
     766                    _rob [num_bank].pop_front();
    710767                  }
    711768              }
     
    775832              if (miss)
    776833                {
     834                  bool     can    = true;
    777835                  uint32_t packet = ((entry->ptr << _param->_shift_num_slot) | num_bank);
    778836                     
    779837                  // test if this packet is before previous event
    780                   if (reg_EVENT_STOP [entry->front_end_id][entry->context_id])
     838                  if (reg_EVENT_STATE [entry->front_end_id][entry->context_id] == COMMIT_EVENT_STATE_NOT_YET_EVENT)
    781839                    {
    782840                      uint32_t _top = ((_rob[ reg_NUM_BANK_HEAD].front()->ptr << _param->_shift_num_slot) | reg_NUM_BANK_HEAD);
     
    786844                      if (_new < _top) _new = _new+_param->_size_queue;
    787845                      if (_new < _old) reg_EVENT_PACKET [entry->front_end_id][entry->context_id] = packet;
     846                      else can = false;
    788847                    }
    789848                  else
    790849                    reg_EVENT_PACKET [entry->front_end_id][entry->context_id] = packet;
    791850
    792                   // In all case, stop instruction flow
    793                   reg_EVENT_STOP          [entry->front_end_id][entry->context_id] = true;
    794 //                   reg_EVENT_NUM_BANK      [entry->front_end_id][entry->context_id] = num_bank;
    795 //                   reg_EVENT_NUM_PTR       [entry->front_end_id][entry->context_id] = entry->ptr;
    796 
    797                   reg_EVENT_CAN_RESTART   [entry->front_end_id][entry->context_id] = false;
    798 
    799                   reg_EVENT_LAST_NUM_BANK [entry->front_end_id][entry->context_id] = ((reg_NUM_BANK_TAIL==0)?_param->_nb_bank:reg_NUM_BANK_TAIL)-1;
    800                   reg_EVENT_LAST_NUM_PTR  [entry->front_end_id][entry->context_id] = reg_NUM_PTR_TAIL;
     851                  if (can)
     852                    {
     853                      // In all case, stop instruction flow
     854                      reg_EVENT_STATE         [entry->front_end_id][entry->context_id] = COMMIT_EVENT_STATE_NOT_YET_EVENT;
     855//                    reg_EVENT_STOP          [entry->front_end_id][entry->context_id] = true;
     856
     857//                    reg_EVENT_CAN_RESTART   [entry->front_end_id][entry->context_id] = false;
     858
     859                      reg_EVENT_LAST_NUM_BANK [entry->front_end_id][entry->context_id] = ((reg_NUM_BANK_TAIL==0)?_param->_nb_bank:reg_NUM_BANK_TAIL)-1;
     860                      reg_EVENT_LAST_NUM_PTR  [entry->front_end_id][entry->context_id] = reg_NUM_PTR_TAIL;
     861                    }
    801862                }
    802863            }
     
    902963                     
    903964                      bool         flush         = ((reg_EVENT_STATE [front_end_id][context_id] == COMMIT_EVENT_STATE_EVENT) or
    904                                                     (reg_EVENT_STATE [front_end_id][context_id] == COMMIT_EVENT_STATE_WAIT_DECOD) or
     965//                                                  (reg_EVENT_STATE [front_end_id][context_id] == COMMIT_EVENT_STATE_WAIT_DECOD) or
    905966                                                    (reg_EVENT_STATE [front_end_id][context_id] == COMMIT_EVENT_STATE_WAIT_END));
    906967                      bool         speculative   = entry->speculative and not (depth == depth_min);
     
    10051066                     
    10061067                      // Test if this instruction is the last of event
    1007                       if ((reg_EVENT_STATE         [front_end_id][context_id] != COMMIT_EVENT_STATE_NO_EVENT) and
     1068                      if (((reg_EVENT_STATE         [front_end_id][context_id] != COMMIT_EVENT_STATE_NO_EVENT) and
     1069                           (reg_EVENT_STATE         [front_end_id][context_id] != COMMIT_EVENT_STATE_NOT_YET_EVENT)) and
    10081070                          (reg_EVENT_LAST_NUM_BANK [front_end_id][context_id] == num_bank            ) and
    10091071                          (reg_EVENT_LAST_NUM_PTR  [front_end_id][context_id] == entry->ptr          ))
     
    10441106            log_printf(TRACE,Commit_unit,FUNCTION,"      * EVENT_STATE       : %s - %s",toString(reg_EVENT_STATE [i][j]).c_str(),toString(commit_event_state_to_event_state(reg_EVENT_STATE [i][j])).c_str());
    10451107//          log_printf(TRACE,Commit_unit,FUNCTION,"      * EVENT_FLUSH       : %d",reg_EVENT_FLUSH [i][j]);
    1046             log_printf(TRACE,Commit_unit,FUNCTION,"      * EVENT_STOP        : %d",reg_EVENT_STOP  [i][j]);
    1047 //             log_printf(TRACE,Commit_unit,FUNCTION,"      * EVENT             : %d (bank %d, ptr %d)",((reg_EVENT_NUM_PTR [i][j] << _param->_shift_num_slot) | reg_EVENT_NUM_BANK [i][j]), reg_EVENT_NUM_BANK [i][j],reg_EVENT_NUM_PTR [i][j]);
    1048             log_printf(TRACE,Commit_unit,FUNCTION,"      * EVENT_CAN_RESTART : %d",reg_EVENT_CAN_RESTART [i][j]);
     1108//          log_printf(TRACE,Commit_unit,FUNCTION,"      * EVENT_STOP        : %d",reg_EVENT_STOP  [i][j]);
     1109//          log_printf(TRACE,Commit_unit,FUNCTION,"      * EVENT             : %d (bank %d, ptr %d)",((reg_EVENT_NUM_PTR [i][j] << _param->_shift_num_slot) | reg_EVENT_NUM_BANK [i][j]), reg_EVENT_NUM_BANK [i][j],reg_EVENT_NUM_PTR [i][j]);
     1110//          log_printf(TRACE,Commit_unit,FUNCTION,"      * EVENT_CAN_RESTART : %d",reg_EVENT_CAN_RESTART [i][j]);
    10491111            log_printf(TRACE,Commit_unit,FUNCTION,"      * EVENT_PACKET      : %d",reg_EVENT_PACKET[i][j]);
    10501112            log_printf(TRACE,Commit_unit,FUNCTION,"      * EVENT_LAST        : %d",reg_EVENT_LAST [i][j]);
    10511113            log_printf(TRACE,Commit_unit,FUNCTION,"      * EVENT_LAST        : %d (bank %d, ptr %d)",((reg_EVENT_LAST_NUM_PTR [i][j] << _param->_shift_num_slot) | reg_EVENT_LAST_NUM_BANK [i][j]), reg_EVENT_LAST_NUM_BANK [i][j],reg_EVENT_LAST_NUM_PTR [i][j]);
     1114            log_printf(TRACE,Commit_unit,FUNCTION,"      * EVENT_NEXT_STOP   : %d",reg_EVENT_NEXT_STOP  [i][j]);
     1115            log_printf(TRACE,Commit_unit,FUNCTION,"      * EVENT_NEXT_PACKET : %d",reg_EVENT_NEXT_PACKET[i][j]);
    10521116            log_printf(TRACE,Commit_unit,FUNCTION,"      * NB_INST_ALL       : %d",reg_NB_INST_COMMIT_ALL[i][j]);
    10531117            log_printf(TRACE,Commit_unit,FUNCTION,"      * NB_INST_MEM       : %d",reg_NB_INST_COMMIT_MEM[i][j]);
     
    10651129        }
    10661130
    1067       bool all_empty = false;
     1131      bool     all_empty   = false;
     1132      uint32_t nb_write_rd = 0;
     1133      uint32_t nb_write_re = 0;
     1134
    10681135      while (not all_empty)
    10691136        {
     
    10781145                {
    10791146                  all_empty = false;
     1147
     1148                  nb_write_rd += ((*it)->write_rd)?1:0;
     1149                  nb_write_re += ((*it)->write_re)?1:0;
    10801150
    10811151                  log_printf(TRACE,Commit_unit,FUNCTION,"        [%.4d][%.4d] (%.4d) %.4d %.4d %.4d %.4d, %.3d %.3d, %.1d, %.1d %.4d, %.1d %.4d, %s",
     
    11301200            }
    11311201        }
     1202
     1203      log_printf(TRACE,Commit_unit,FUNCTION,"    * nb_write_rd   : %d",nb_write_rd);
     1204      log_printf(TRACE,Commit_unit,FUNCTION,"    * nb_write_re   : %d",nb_write_re);
    11321205    }
    11331206#endif
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/src/Issue_queue.cpp

    r111 r123  
    3939    usage_environment(_usage);
    4040
    41 #if DEBUG_Issue_queue == true
    42     log_printf(INFO,Issue_queue,FUNCTION,_("<%s> Parameters"),_name.c_str());
     41// #if DEBUG_Issue_queue == true
     42//     log_printf(INFO,Issue_queue,FUNCTION,_("<%s> Parameters"),_name.c_str());
    4343
    44     std::cout << *param << std::endl;
    45 #endif   
     44//     std::cout << *param << std::endl;
     45// #endif   
    4646
    4747    log_printf(INFO,Issue_queue,FUNCTION,_("<%s> : Allocation"),_name.c_str());
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/src/Issue_queue_function_in_order_genMealy_issue_out.cpp

    r122 r123  
    2424    log_function(Issue_queue,FUNCTION,_name.c_str());
    2525
     26    if (PORT_READ(in_NRESET))
    2627    // ===================================================================
    2728    // =====[ ISSUE_OUT ]=================================================
    2829    // ===================================================================
    29     {
     30      {
    3031      Tcontrol_t val [_param->_nb_inst_issue];
    3132
     
    175176        }
    176177    }
     178    else
     179      {
     180      for (uint32_t i=0; i<_param->_nb_inst_issue; i++)
     181        internal_ISSUE_OUT_VAL [i] = 0;
     182      }
     183
     184    for (uint32_t i=0; i<_param->_nb_inst_issue; i++)
     185      PORT_WRITE(out_ISSUE_OUT_VAL [i], internal_ISSUE_OUT_VAL [i]);
    177186
    178187    log_end(Issue_queue,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/src/Issue_queue_function_in_order_genMoore.cpp

    r111 r123  
    3838          internal_ISSUE_IN_ACK [i][j] = false;
    3939
     40      if (PORT_READ(in_NRESET))
     41        {
    4042      std::list<generic::priority::select_t> * select_in = _priority_in ->select(); // same select for all issue
    4143      std::list<generic::priority::select_t>::iterator it=select_in ->begin();
     
    6264          nb_insert ++;
    6365        }
    64      
     66        }
     67
    6568      for (uint32_t i=0; i<_param->_nb_rename_unit; i++)
    6669        for (uint32_t j=0; j<_param->_nb_inst_rename[i]; j++)
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/src/Issue_queue_function_out_of_order_genMoore.cpp

    r122 r123  
    2424    log_function(Issue_queue,FUNCTION,_name.c_str());
    2525
     26    if (PORT_READ(in_NRESET))
     27      {
    2628    // ===================================================================
    2729    // =====[ REEXECUTE_UNIT ]============================================
     
    217219        {
    218220          internal_ISSUE_OUT_VAL [i] = val [i];
     221        }
     222    }
     223      }
     224    else
     225      {
     226        // Reset
     227        for (uint32_t i=0; i<_param->_nb_bank; i++)
     228          {
     229            internal_BANK_IN_ACK  [i] = 0;
     230//             internal_BANK_IN_NUM_RENAME_UNIT [num_bank] = num_rename_unit;
     231//             internal_BANK_IN_NUM_INST        [num_bank] = num_inst_rename;
     232          }
     233        for (uint32_t i=0; i<_param->_nb_rename_unit; i++)
     234          for (uint32_t j=0; j<_param->_nb_inst_rename[i]; j++)
     235            PORT_WRITE(out_ISSUE_IN_ACK [i][j],0);
     236
     237          for (uint32_t i=0; i<_param->_nb_inst_issue; i++)
     238            {
     239              internal_ISSUE_OUT_VAL [i] = 0;
     240//            internal_ISSUE_OUT_FROM_REEXECUTE [i] = true;
     241//            internal_ISSUE_OUT_NUM_BANK       [i] = num_bank;
     242//            internal_ISSUE_OUT_ENTRY          [i] = entry;
     243            }
     244      }
     245
     246    // Write output
     247      for (uint32_t i=0; i<_param->_nb_inst_issue; i++)
     248        {
    219249          PORT_WRITE(out_ISSUE_OUT_VAL [i], internal_ISSUE_OUT_VAL [i]);
    220250        }
    221     }
    222251
    223252    log_end(Issue_queue,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/src/Issue_queue_genMoore.cpp

    r111 r123  
    2424    log_function(Issue_queue,FUNCTION,_name.c_str());
    2525
     26    if (PORT_READ(in_NRESET))
     27      {
    2628    // ===================================================================
    2729    // =====[ REEXECUTE_UNIT ]============================================
     
    3537
    3638        log_printf(TRACE,Issue_queue,FUNCTION,"    * ACK : %d",internal_REEXECUTE_ACK [i]);
     39      }
    3740
    38         PORT_WRITE(out_REEXECUTE_ACK [i], internal_REEXECUTE_ACK [i]);
    3941      }
     42    else
     43      {
     44        // Reset
     45        for (uint32_t i=0; i<_param->_nb_inst_reexecute; ++i)
     46          internal_REEXECUTE_ACK [i] = 0;
     47      }
     48
     49    // Write Output
     50    for (uint32_t i=0; i<_param->_nb_inst_reexecute; ++i)
     51      PORT_WRITE(out_REEXECUTE_ACK [i], internal_REEXECUTE_ACK [i]);
    4052
    4153    (this->*function_genMoore) ();
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/OOO_Engine_Glue/src/OOO_Engine_Glue.cpp

    r122 r123  
    3939    usage_environment(_usage);
    4040
    41 #if DEBUG_OOO_Engine_Glue == true
    42     log_printf(INFO,OOO_Engine_Glue,FUNCTION,_("<%s> Parameters"),_name.c_str());
    43 
    44     std::cout << *param << std::endl;
    45 #endif   
     41// #if DEBUG_OOO_Engine_Glue == true
     42//     log_printf(INFO,OOO_Engine_Glue,FUNCTION,_("<%s> Parameters"),_name.c_str());
     43
     44//     std::cout << *param << std::endl;
     45// #endif   
    4646
    4747    log_printf(INFO,OOO_Engine_Glue,FUNCTION,_("<%s> : Allocation"),_name.c_str());
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/OOO_Engine_Glue/src/OOO_Engine_Glue_genMealy_insert.cpp

    r122 r123  
    2424    log_function(OOO_Engine_Glue,FUNCTION,_name.c_str());
    2525
     26    if (PORT_READ(in_NRESET))
     27      {
    2628    uint32_t x=0;
    2729    for (uint32_t i=0; i<_param->_nb_rename_unit; ++i)
     
    112114          x ++;
    113115        }
     116      }
     117//     else
     118//       {
     119//       }
    114120
    115121    log_end(OOO_Engine_Glue,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/OOO_Engine_Glue/src/OOO_Engine_Glue_genMealy_insert_valack.cpp

    r110 r123  
    2424    log_function(OOO_Engine_Glue,FUNCTION,_name.c_str());
    2525
     26    if (PORT_READ(in_NRESET))
     27      {
    2628    uint32_t x=0;
    2729    for (uint32_t i=0; i<_param->_nb_rename_unit; ++i)
     
    7981          }
    8082      }
     83      }
     84    else
     85      {
     86        uint32_t x=0;
     87        for (uint32_t i=0; i<_param->_nb_rename_unit; ++i)
     88          for (uint32_t j=0; j<_param->_nb_inst_insert[i]; ++j)
     89            {
     90              PORT_WRITE(out_INSERT_VAL             [x]   ,0);
     91              PORT_WRITE(out_INSERT_RENAME_UNIT_ACK [i][j],0);
     92              PORT_WRITE(out_INSERT_COMMIT_UNIT_VAL [i][j],0);
     93              PORT_WRITE(out_INSERT_ISSUE_QUEUE_VAL [i][j],0);
     94              x ++;
     95            }
     96      }
    8197   
    8298    log_end(OOO_Engine_Glue,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/OOO_Engine_Glue/src/OOO_Engine_Glue_genMealy_rename.cpp

    r120 r123  
    2424    log_function(OOO_Engine_Glue,FUNCTION,_name.c_str());
    2525
     26    if (PORT_READ(in_NRESET))
     27      {
    2628    for (uint32_t i=0; i<_param->_nb_front_end; ++i)
    2729      for (uint32_t j=0; j<_param->_nb_inst_decod[i]; ++j)
     
    3032          PORT_WRITE(out_RENAME_RENAME_UNIT_FRONT_END_ID [i][j],_param->_translate_front_end_id_to_rename_unit [PORT_READ(in_RENAME_FRONT_END_ID [i][j])]);
    3133        }
     34      }
    3235
    3336    log_end(OOO_Engine_Glue,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/OOO_Engine_Glue/src/OOO_Engine_Glue_genMealy_retire.cpp

    r88 r123  
    2424    log_function(OOO_Engine_Glue,FUNCTION,_name.c_str());
    2525
     26    if (PORT_READ(in_NRESET))
     27      {
    2628    uint32_t x=0;
    2729    for (uint32_t i=0; i<_param->_nb_rename_unit; ++i)
     
    6163          x ++;
    6264        }
    63 
     65}
    6466    log_end(OOO_Engine_Glue,FUNCTION);
    6567  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/OOO_Engine_Glue/src/OOO_Engine_Glue_genMealy_retire_valack.cpp

    r88 r123  
    2424    log_function(OOO_Engine_Glue,FUNCTION,_name.c_str());
    2525
     26    if (PORT_READ(in_NRESET))
     27      {
    2628    uint32_t x=0;
    2729    for (uint32_t i=0; i<_param->_nb_rename_unit; ++i)
     
    4749          x ++;
    4850        }
    49    
     51}   
    5052    log_end(OOO_Engine_Glue,FUNCTION);
    5153  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/OOO_Engine_Glue/src/OOO_Engine_Glue_genMealy_spr.cpp

    r88 r123  
    2424    log_begin(OOO_Engine_Glue,FUNCTION);
    2525
     26//     if (PORT_READ(in_NRESET))
     27      {
    2628    for (uint32_t i=0; i<_param->_nb_front_end; ++i)
    2729      for (uint32_t j=0; j<_param->_nb_context[i]; ++j)
     
    3840          delete sr;
    3941        }
     42      }
    4043
    4144    log_end(OOO_Engine_Glue,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Reexecute_unit/src/Reexecute_unit.cpp

    r88 r123  
    3939    usage_environment(_usage);
    4040
    41 #if DEBUG_Reexecute_unit == true
    42     log_printf(INFO,Reexecute_unit,FUNCTION,_("<%s> Parameters"),_name.c_str());
     41// #if DEBUG_Reexecute_unit == true
     42//     log_printf(INFO,Reexecute_unit,FUNCTION,_("<%s> Parameters"),_name.c_str());
    4343
    44     std::cout << *param << std::endl;
    45 #endif   
     44//     std::cout << *param << std::endl;
     45// #endif   
    4646
    4747    log_printf(INFO,Reexecute_unit,FUNCTION,_("<%s> : Allocation"),_name.c_str());
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Reexecute_unit/src/Reexecute_unit_genMealy_commit.cpp

    r117 r123  
    2323    log_function(Reexecute_unit,FUNCTION,_name.c_str());
    2424
     25    if (PORT_READ(in_NRESET))
     26      {
    2527    // Initialisation
    2628    Tcontrol_t execute_loop_ack [_param->_nb_execute_loop][_param->_max_nb_inst_execute];
     
    126128      for (uint32_t j=0; j<_param->_nb_inst_execute [i]; ++j)
    127129        PORT_WRITE(out_EXECUTE_LOOP_ACK [i][j], execute_loop_ack [i][j]);
     130      }
     131    else
     132      {
     133#ifdef STATISTICS
     134        for (uint32_t i=0; i<_param->_nb_inst_commit; ++i)
     135          internal_COMMIT_VAL [i] = 0;
     136#endif
     137        for (uint32_t i=0; i<_param->_nb_execute_loop; ++i)
     138          for (uint32_t j=0; j<_param->_nb_inst_execute [i]; ++j)
     139            PORT_WRITE(out_EXECUTE_LOOP_ACK [i][j], 0);
     140      }
    128141
    129142    log_end(Reexecute_unit,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Reexecute_unit/src/Reexecute_unit_genMealy_reexecute.cpp

    r122 r123  
    2424    log_function(Reexecute_unit,FUNCTION,_name.c_str());
    2525
     26    if (PORT_READ(in_NRESET))
     27      {
    2628    // ===================================================================
    2729    // =====[ REEXECUTE ]=================================================
     
    9496        internal_REEXECUTE_VAL     [i] = val;
    9597        internal_REEXECUTE_ROB_ACK [i] = ack;
     98      }
     99      }
     100    else
     101      {
     102        for (uint32_t i=0; i<_param->_nb_inst_reexecute; i++)
     103          {
     104            internal_REEXECUTE_VAL     [i] = 0;
     105            internal_REEXECUTE_ROB_ACK [i] = 0;
     106          }
     107      }
    96108
     109    for (uint32_t i=0; i<_param->_nb_inst_reexecute; i++)
     110      {
    97111        PORT_WRITE(out_REEXECUTE_VAL     [i], internal_REEXECUTE_VAL     [i]);
    98112        PORT_WRITE(out_REEXECUTE_ROB_ACK [i], internal_REEXECUTE_ROB_ACK [i]);
    99113      }
    100 
    101114    log_end(Reexecute_unit,FUNCTION);
    102115  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Reexecute_unit/src/Reexecute_unit_genMoore.cpp

    r98 r123  
    2424    log_function(Reexecute_unit,FUNCTION,_name.c_str());
    2525
     26    if (PORT_READ(in_NRESET))
     27      {
    2628    // ===================================================================
    2729    // =====[ SPR ]=======================================================
     
    4749
    4850        internal_SPR_VAL [i] = val;
     51      }
     52      }
     53    else
     54      {
     55        //Reset
     56        for (uint32_t i=0; i<_param->_nb_inst_reexecute; i++)
     57          internal_SPR_VAL [i] = 0;
     58      }
     59
     60    // Write output
     61    for (uint32_t i=0; i<_param->_nb_inst_reexecute; i++)
     62      {
    4963        PORT_WRITE(out_SPR_VAL [i], internal_SPR_VAL [i]);
    5064      }
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Load_Store_pointer_unit/src/Load_Store_pointer_unit.cpp

    r122 r123  
    3838    log_printf(FUNC,Load_Store_pointer_unit,FUNCTION,"Begin");
    3939
    40 #if DEBUG_Load_Store_pointer_unit == true
    41     log_printf(INFO,Load_Store_pointer_unit,FUNCTION,_("<%s> Parameters"),_name.c_str());
    42 
    43     std::cout << *param << std::endl;
    44 #endif   
     40// #if DEBUG_Load_Store_pointer_unit == true
     41//     log_printf(INFO,Load_Store_pointer_unit,FUNCTION,_("<%s> Parameters"),_name.c_str());
     42
     43//     std::cout << *param << std::endl;
     44// #endif   
    4545
    4646    log_printf(INFO,Load_Store_pointer_unit,FUNCTION,"Allocation");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Load_Store_pointer_unit/src/Load_Store_pointer_unit_genMealy_insert.cpp

    r122 r123  
    2525    log_function(Load_Store_pointer_unit,FUNCTION,_name.c_str());
    2626
     27    if (PORT_READ(in_NRESET))
     28      {
    2729    // TODO : limité à nb_inst_memory le nombre d'accès par lsq !!!
    2830
     
    134136        // Write output
    135137        internal_INSERT_ACK [i] = ack;
    136         PORT_WRITE(out_INSERT_ACK                   [i], ack);
    137138      }
     139      }
     140    else
     141      {
     142        for (uint32_t i=0; i<_param->_nb_inst_insert; i++)
     143          internal_INSERT_ACK [i] = 0;
     144
     145      }
     146   
     147    for (uint32_t i=0; i<_param->_nb_inst_insert; i++)
     148      PORT_WRITE(out_INSERT_ACK [i], internal_INSERT_ACK [i]);
    138149
    139150    log_end(Load_Store_pointer_unit,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Load_Store_pointer_unit/src/Load_Store_pointer_unit_genMealy_retire.cpp

    r110 r123  
    2424    log_printf(FUNC,Load_Store_pointer_unit,FUNCTION,"Begin");
    2525   
     26    if (PORT_READ(in_NRESET))
     27      {
    2628//     bool use_lsq [_param->_nb_load_store_queue];
    2729//     for (uint32_t i=0; i<_param->_nb_load_store_queue; i++)
     
    7779        // Write output
    7880        internal_RETIRE_ACK [i] = ack;
    79         PORT_WRITE(out_RETIRE_ACK                   [i], ack);
    8081      }
     82      }
     83    else
     84      {
     85        for (uint32_t i=0; i<_param->_nb_inst_retire; i++)
     86          internal_RETIRE_ACK [i] = 0;
     87      }
     88
     89    for (uint32_t i=0; i<_param->_nb_inst_retire; i++)
     90      PORT_WRITE(out_RETIRE_ACK [i], internal_RETIRE_ACK [i]);
     91
    8192   
    8293    log_printf(FUNC,Load_Store_pointer_unit,FUNCTION,"End");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Dependency_checking_unit/src/Dependency_checking_unit.cpp

    r121 r123  
    3939    log_printf(FUNC,Dependency_checking_unit,FUNCTION,"Begin");
    4040
    41 #if DEBUG_Dependency_checking_unit == true
    42     log_printf(INFO,Dependency_checking_unit,FUNCTION,_("<%s> Parameters"),_name.c_str());
    43 
    44     std::cout << *param << std::endl;
    45 #endif   
     41// #if DEBUG_Dependency_checking_unit == true
     42//     log_printf(INFO,Dependency_checking_unit,FUNCTION,_("<%s> Parameters"),_name.c_str());
     43
     44//     std::cout << *param << std::endl;
     45// #endif   
    4646
    4747    log_printf(INFO,Dependency_checking_unit,FUNCTION,"Allocation");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Dependency_checking_unit/src/Dependency_checking_unit_genMealy.cpp

    r121 r123  
    2626    log_function(Dependency_checking_unit,FUNCTION,_name.c_str());
    2727
     28    if (PORT_READ(in_NRESET))
     29      {
    2830//     Tcontrol_t         val                [_param->_nb_inst_insert];
    2931//     Tcontrol_t         ack                [_param->_nb_inst_insert];
     
    223225        PORT_WRITE(out_RENAME_OUT_NUM_REG_RE_PHY_NEW [i], num_reg_re_phy_new [i]);
    224226      }
     227      }
    225228
    226229    log_end(Dependency_checking_unit,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/include/Free_List_unit.h

    r110 r123  
    9191  public    : SC_IN (Tspecial_address_t)   **  in_PUSH_SPR_NUM_REG;
    9292
     93    // ~~~~~[ interface : "info" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     94#ifdef DEBUG_TEST
     95  public    : SC_OUT(uint32_t  )            * out_INFO_NB_GPR_FREE;
     96  public    : SC_OUT(uint32_t  )            * out_INFO_NB_SPR_FREE;
     97#endif
     98
    9399    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
    94100  private   : generic::priority::Priority   * _priority_gpr;
     
    141147#ifdef SYSTEMC                                 
    142148  public  : void        transition                (void);
     149#ifdef DEBUG_TEST
     150  public  : void        genMoore                  (void);
     151#endif
    143152  public  : void        genMealy_pop              (void);
    144153  public  : void        genMealy_push_gpr         (void);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/src/Free_List_unit.cpp

    r110 r123  
    3939    log_printf(FUNC,Free_List_unit,FUNCTION,"Begin");
    4040
    41 #if DEBUG_Free_List_unit == true
    42     log_printf(INFO,Free_List_unit,FUNCTION,_("<%s> Parameters"),_name.c_str());
     41// #if DEBUG_Free_List_unit == true
     42//     log_printf(INFO,Free_List_unit,FUNCTION,_("<%s> Parameters"),_name.c_str());
    4343
    44     std::cout << *param << std::endl;
    45 #endif   
     44//     std::cout << *param << std::endl;
     45// #endif   
    4646
    4747    log_printf(INFO,Free_List_unit,FUNCTION,"Allocation");
     
    8585# endif   
    8686
     87#ifdef DEBUG_TEST
     88        log_printf(INFO,Free_List_unit,FUNCTION,"Method - genMoore");
     89
     90        SC_METHOD (genMoore);
     91        dont_initialize ();
     92        sensitive << (*(in_CLOCK)).neg();
     93       
     94# ifdef SYSTEMCASS_SPECIFIC
     95        // List dependency information
     96# endif   
     97#endif
    8798        log_printf(INFO,Free_List_unit,FUNCTION,"Method - genMealy_pop");
    8899
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/src/Free_List_unit_allocation.cpp

    r112 r123  
    9292     }
    9393
     94    // ~~~~~[ interface : "info" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     95#ifdef DEBUG_TEST
     96     {
     97       ALLOC0_INTERFACE_BEGIN("info",OUT, NORTH, _("Information"));
     98
     99       ALLOC0_SIGNAL_OUT(out_INFO_NB_GPR_FREE,"nb_gpr_free",uint32_t,_param->_size_general_register+1);
     100       ALLOC0_SIGNAL_OUT(out_INFO_NB_SPR_FREE,"nb_spr_free",uint32_t,_param->_size_special_register+1);
     101
     102       ALLOC0_INTERFACE_END();
     103     }
     104#endif
     105
    94106     if (usage_is_set(_usage,USE_SYSTEMC))
    95107       {
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/src/Free_List_unit_deallocation.cpp

    r112 r123  
    4545        DELETE1_SIGNAL( in_PUSH_SPR_NUM_REG,_param->_nb_push,_param->_size_special_register);
    4646
     47#ifdef DEBUG_TEST
     48        DELETE0_SIGNAL(out_INFO_NB_GPR_FREE,_param->_size_general_register+1);
     49        DELETE0_SIGNAL(out_INFO_NB_SPR_FREE,_param->_size_special_register+1);
     50#endif
     51
    4752        DELETE1(_gpr_list             ,_param->_nb_bank);
    4853        DELETE1(_spr_list             ,_param->_nb_bank);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/src/Free_List_unit_genMealy_pop.cpp

    r109 r123  
    2626    log_function(Free_List_unit,FUNCTION,_name.c_str());
    2727
     28    if (PORT_READ(in_NRESET))
     29      {
    2830    std::list<generic::priority::select_t> * select_gpr = _priority_gpr->select();
    2931    std::list<generic::priority::select_t>::iterator it_gpr=select_gpr->begin();
     
    3234    std::list<generic::priority::select_t>::iterator it_spr=select_spr->begin();
    3335
    34     for (uint32_t i=0; i<_param->_nb_pop; i++)
     36     for (uint32_t i=0; i<_param->_nb_pop; i++)
    3537      {
    3638        log_printf(TRACE,Free_List_unit,FUNCTION,"  * POP [%d]",i);
     
    104106
    105107        internal_POP_ACK [i] = gpr_ack and spr_ack;
    106         PORT_WRITE(out_POP_ACK [i], internal_POP_ACK [i]);
    107108      }
    108109
     
    177178//      PORT_WRITE(out_POP_ACK [i], internal_POP_ACK [i]);
    178179//       }
    179    
     180      }   
     181    else
     182      {
     183        for (uint32_t i=0; i<_param->_nb_pop; i++)
     184          internal_POP_ACK [i] = 0;
     185      }
     186
     187    for (uint32_t i=0; i<_param->_nb_pop; i++)
     188      PORT_WRITE(out_POP_ACK [i], internal_POP_ACK [i]);
     189
    180190
    181191    log_end(Free_List_unit,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/src/Free_List_unit_genMealy_push_gpr.cpp

    r108 r123  
    2626    log_function(Free_List_unit,FUNCTION,_name.c_str());
    2727
     28    if (PORT_READ(in_NRESET))
     29      {
    2830    // bank conflit
    2931    bool bank_use [_param->_nb_bank];
     
    5961
    6062        internal_PUSH_GPR_ACK [i] = gpr_ack;
    61         PORT_WRITE(out_PUSH_GPR_ACK [i], internal_PUSH_GPR_ACK [i]);
    6263      }
     64      }
     65    else
     66      {
     67        for (uint32_t i=0; i<_param->_nb_push; i++)
     68          internal_PUSH_GPR_ACK [i] = 0;
     69      }
     70
     71    for (uint32_t i=0; i<_param->_nb_push; i++)
     72      PORT_WRITE(out_PUSH_GPR_ACK [i], internal_PUSH_GPR_ACK [i]);
    6373   
    6474    log_end(Free_List_unit,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/src/Free_List_unit_genMealy_push_spr.cpp

    r108 r123  
    2626    log_function(Free_List_unit,FUNCTION,_name.c_str());
    2727
     28    if (PORT_READ(in_NRESET))
     29      {
    2830    bool bank_use [_param->_nb_bank];
    2931    for (uint32_t i=0; i<_param->_nb_bank; i++)
     
    5153
    5254        internal_PUSH_SPR_ACK [i] = spr_ack;
    53         PORT_WRITE(out_PUSH_SPR_ACK [i], internal_PUSH_SPR_ACK [i]);
    5455      }
    55    
     56      }
     57    else
     58      {
     59        for (uint32_t i=0; i<_param->_nb_push; i++)
     60          internal_PUSH_SPR_ACK [i] = 0;
     61      }
     62
     63    for (uint32_t i=0; i<_param->_nb_push; i++)
     64      PORT_WRITE(out_PUSH_SPR_ACK [i], internal_PUSH_SPR_ACK [i]);
     65
    5666    log_end(Free_List_unit,FUNCTION);
    5767  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_Address_Translation_unit/src/Register_Address_Translation_unit.cpp

    r122 r123  
    3939    log_printf(FUNC,Register_Address_Translation_unit,FUNCTION,"Begin");
    4040
    41 #if DEBUG_Register_Address_Translation_unit == true
    42     log_printf(INFO,Register_Address_Translation_unit,FUNCTION,_("<%s> Parameters"),_name.c_str());
    43 
    44     std::cout << *param << std::endl;
    45 #endif   
     41// #if DEBUG_Register_Address_Translation_unit == true
     42//     log_printf(INFO,Register_Address_Translation_unit,FUNCTION,_("<%s> Parameters"),_name.c_str());
     43
     44//     std::cout << *param << std::endl;
     45// #endif   
    4646
    4747    log_printf(INFO,Register_Address_Translation_unit,FUNCTION,"Allocation");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_Address_Translation_unit/src/Register_Address_Translation_unit_genMealy_rename.cpp

    r122 r123  
    2929    for (uint32_t i=0; i<_param->_nb_inst_insert; i++)
    3030      if (PORT_READ(in_RENAME_VAL [i])) // not in sensitive list : it's to have valide value to array access
    31       {
     31        {
    3232        log_printf(TRACE,Register_Address_Translation_unit,FUNCTION,"  * RENAME [%d]",i);
    3333
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_Address_Translation_unit/src/Register_Address_Translation_unit_transition.cpp

    r122 r123  
    4040                {
    4141                  rat_gpr_not_speculative    [i][j][k] = gpr++;
    42 //                rat_gpr_speculative        [i][j][k] = gpr++;
    4342                  rat_gpr_speculative_valid  [i][j][k] = false;
    44 //                rat_gpr_update_table       [i][j][k] = false;
     43                  rat_gpr_speculative        [i][j][k] = 0    ; // not necessary
     44                  rat_gpr_update_table       [i][j][k] = false; // not necessary
    4545                }
    4646              for (uint32_t k=0; k<_param->_nb_special_register_logic; k++)
    4747                {
    4848                  rat_spr_not_speculative    [i][j][k] = spr++;
    49 //                rat_spr_speculative        [i][j][k] = spr++;
    5049                  rat_spr_speculative_valid  [i][j][k] = false;
    51 //                rat_spr_update_table       [i][j][k] = false;
     50                  rat_spr_speculative        [i][j][k] = 0    ; // not necessary
     51                  rat_spr_update_table       [i][j][k] = false; // not necessary
    5252                }
    5353            }
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_translation_unit_Glue/src/Register_translation_unit_Glue.cpp

    r110 r123  
    3939    log_printf(FUNC,Register_translation_unit_Glue,FUNCTION,"Begin");
    4040
    41 #if DEBUG_Register_translation_unit_Glue == true
    42     log_printf(INFO,Register_translation_unit_Glue,FUNCTION,_("<%s> Parameters"),_name.c_str());
    43 
    44     std::cout << *param << std::endl;
    45 #endif   
     41// #if DEBUG_Register_translation_unit_Glue == true
     42//     log_printf(INFO,Register_translation_unit_Glue,FUNCTION,_("<%s> Parameters"),_name.c_str());
     43
     44//     std::cout << *param << std::endl;
     45// #endif   
    4646
    4747    log_printf(INFO,Register_translation_unit_Glue,FUNCTION,"Allocation");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_translation_unit_Glue/src/Register_translation_unit_Glue_genMealy_insert.cpp

    r117 r123  
    2626    log_function(Register_translation_unit_Glue,FUNCTION,_name.c_str());
    2727
     28    if (PORT_READ(in_NRESET))
     29      {
    2830    for (uint32_t i=0; i<_param->_nb_inst_insert; i++)
    2931      {
     
    8486        PORT_WRITE(out_INSERT_NUM_REG_RE_PHY_NEW           [i], NUM_REG_RE_PHY_NEW);
    8587      }
     88      }
     89//     else
     90//       {
     91//       }
    8692
    8793    log_end(Register_translation_unit_Glue,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_translation_unit_Glue/src/Register_translation_unit_Glue_genMealy_insert_valack.cpp

    r110 r123  
    2525    log_begin(Register_translation_unit_Glue,FUNCTION);
    2626    log_function(Register_translation_unit_Glue,FUNCTION,_name.c_str());
     27
     28    if (PORT_READ(in_NRESET))
     29      {
    2730    for (uint32_t i=0; i<_param->_nb_inst_insert; i++)
    2831      {
     
    8689
    8790      }
     91      }
     92    else
     93      {
     94        for (uint32_t i=0; i<_param->_nb_inst_insert; i++)
     95          {
     96#ifdef STATISTICS
     97            internal_INSERT_RENAME_ACK [i] = 0;
     98#endif
     99           
     100            PORT_WRITE(out_INSERT_RENAME_ACK     [i], 0);
     101            PORT_WRITE(out_INSERT_INSERT_VAL     [i], 0);
     102            PORT_WRITE(out_INSERT_RAT_INSERT_VAL [i], 0);
     103            PORT_WRITE(out_INSERT_FREE_LIST_VAL  [i], 0);
     104            PORT_WRITE(out_INSERT_STAT_LIST_VAL  [i], 0);
     105          }
     106      }
    88107
    89108    log_end(Register_translation_unit_Glue,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_translation_unit_Glue/src/Register_translation_unit_Glue_genMealy_retire.cpp

    r110 r123  
    2626    log_function(Register_translation_unit_Glue,FUNCTION,_name.c_str());
    2727
     28    if (PORT_READ(in_NRESET))
     29      {
    2830    for (uint32_t i=0; i<_param->_nb_inst_retire; i++)
    2931      {
     
    6062        log_printf(TRACE,Register_translation_unit_Glue,FUNCTION,"    * stat_list_ack  (r): %d",stat_list_ack );
    6163      }
     64      }
     65    else
     66      {
     67        for (uint32_t i=0; i<_param->_nb_inst_retire; i++)
     68          {
     69            PORT_WRITE(out_RETIRE_ACK           [i], 0);
     70            PORT_WRITE(out_RETIRE_RAT_VAL       [i], 0);
     71            PORT_WRITE(out_RETIRE_STAT_LIST_VAL [i], 0);
     72          }
     73      }
    6274
    6375    log_end(Register_translation_unit_Glue,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/include/Stat_List_unit.h

    r121 r123  
    8282  public    : SC_OUT(Tcontrol_t        )   ** out_RETIRE_ACK               ;//[nb_inst_retire]
    8383  public    : SC_IN (Tcontrol_t        )   **  in_RETIRE_RESTORE           ;//[nb_inst_retire]
    84 //   public    : SC_IN (Tcontrol_t        )   **  in_RETIRE_READ_RA           ;//[nb_inst_retire]
    85 //   public    : SC_IN (Tgeneral_address_t)   **  in_RETIRE_NUM_REG_RA_PHY    ;//[nb_inst_retire]
    86 //   public    : SC_IN (Tcontrol_t        )   **  in_RETIRE_READ_RB           ;//[nb_inst_retire]
    87 //   public    : SC_IN (Tgeneral_address_t)   **  in_RETIRE_NUM_REG_RB_PHY    ;//[nb_inst_retire]
    88 //   public    : SC_IN (Tcontrol_t        )   **  in_RETIRE_READ_RC           ;//[nb_inst_retire]
    89 //   public    : SC_IN (Tspecial_address_t)   **  in_RETIRE_NUM_REG_RC_PHY    ;//[nb_inst_retire]
     84//public    : SC_IN (Tcontrol_t        )   **  in_RETIRE_READ_RA           ;//[nb_inst_retire]
     85//public    : SC_IN (Tgeneral_address_t)   **  in_RETIRE_NUM_REG_RA_PHY    ;//[nb_inst_retire]
     86//public    : SC_IN (Tcontrol_t        )   **  in_RETIRE_READ_RB           ;//[nb_inst_retire]
     87//public    : SC_IN (Tgeneral_address_t)   **  in_RETIRE_NUM_REG_RB_PHY    ;//[nb_inst_retire]
     88//public    : SC_IN (Tcontrol_t        )   **  in_RETIRE_READ_RC           ;//[nb_inst_retire]
     89//public    : SC_IN (Tspecial_address_t)   **  in_RETIRE_NUM_REG_RC_PHY    ;//[nb_inst_retire]
    9090  public    : SC_IN (Tcontrol_t        )   **  in_RETIRE_WRITE_RD          ;//[nb_inst_retire]
    9191  public    : SC_IN (Tcontrol_t        )   **  in_RETIRE_RESTORE_RD_PHY_OLD;//[nb_inst_retire]
     
    106106  public    : SC_IN (Tcontrol_t)           **  in_PUSH_SPR_ACK             ;//[nb_reg_free]
    107107  public    : SC_OUT(Tspecial_address_t)   ** out_PUSH_SPR_NUM_REG         ;//[nb_reg_free]
     108
     109    // ~~~~~[ interface : "info" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     110#ifdef DEBUG_TEST
     111  public    : SC_IN (bool      )            *  in_INFO_ROB_EMPTY  ;
     112  public    : SC_IN (uint32_t  )            *  in_INFO_NB_GPR_FREE;
     113  public    : SC_IN (uint32_t  )            *  in_INFO_NB_SPR_FREE;
     114#endif
    108115
    109116    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/include/Types.h

    r117 r123  
    6666      else
    6767        {
    68 //        _is_link = 0; // already unset
     68          _is_link = 0;
    6969          _is_use  = 0;
    7070        }
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/src/Stat_List_unit.cpp

    r112 r123  
    3838    log_printf(FUNC,Stat_List_unit,FUNCTION,"Begin");
    3939
    40 #if DEBUG_Stat_List_unit == true
    41     log_printf(INFO,Stat_List_unit,FUNCTION,_("<%s> Parameters"),_name.c_str());
     40// #if DEBUG_Stat_List_unit == true
     41//     log_printf(INFO,Stat_List_unit,FUNCTION,_("<%s> Parameters"),_name.c_str());
    4242
    43     std::cout << *param << std::endl;
    44 #endif   
     43//     std::cout << *param << std::endl;
     44// #endif   
    4545
    4646    log_printf(INFO,Stat_List_unit,FUNCTION,"Allocation");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/src/Stat_List_unit_allocation.cpp

    r121 r123  
    125125     }
    126126
     127    // ~~~~~[ interface : "info" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     128#ifdef DEBUG_TEST
     129     {
     130       ALLOC0_INTERFACE_BEGIN("info",IN, NORTH, _("Information"));
     131
     132       ALLOC0_SIGNAL_IN ( in_INFO_ROB_EMPTY  ,"rob_empty"  ,bool    ,1);
     133       ALLOC0_SIGNAL_IN ( in_INFO_NB_GPR_FREE,"nb_gpr_free",uint32_t,_param->_size_general_register+1);
     134       ALLOC0_SIGNAL_IN ( in_INFO_NB_SPR_FREE,"nb_spr_free",uint32_t,_param->_size_special_register+1);
     135
     136       ALLOC0_INTERFACE_END();
     137     }
     138#endif
     139
    127140    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
    128141    if (usage_is_set(_usage,USE_SYSTEMC))
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/src/Stat_List_unit_deallocation.cpp

    r121 r123  
    7171        DELETE1_SIGNAL(out_PUSH_SPR_NUM_REG,_param->_nb_reg_free,_param->_size_special_register);
    7272
     73#ifdef DEBUG_TEST
     74        DELETE0_SIGNAL( in_INFO_ROB_EMPTY  ,1);
     75        DELETE0_SIGNAL( in_INFO_NB_GPR_FREE,_param->_size_general_register+1);
     76        DELETE0_SIGNAL( in_INFO_NB_SPR_FREE,_param->_size_special_register+1);
     77#endif
     78
    7379        DELETE2(gpr_stat_list             ,_param->_nb_bank,_param->_nb_general_register_by_bank);
    7480        DELETE2(spr_stat_list             ,_param->_nb_bank,_param->_nb_special_register_by_bank);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/src/Stat_List_unit_genMoore.cpp

    r118 r123  
    2828    log_function(Stat_List_unit,FUNCTION,_name.c_str());
    2929
     30    if (PORT_READ(in_NRESET))
     31      {
    3032    uint32_t  gpr_ptr = reg_GPR_PTR_FREE;
    3133    uint32_t  spr_ptr = reg_SPR_PTR_FREE;
     
    8183          internal_PUSH_GPR_NUM_REG  [i] = gpr_ptr ;
    8284
    83           PORT_WRITE(out_PUSH_GPR_VAL [i], val);
    8485          if (val)
    8586            PORT_WRITE(out_PUSH_GPR_NUM_REG[i], ((bank_gpr<<_param->_shift_gpr) | gpr_ptr));
     
    126127          internal_PUSH_SPR_NUM_REG  [i] = spr_ptr ;
    127128
    128           PORT_WRITE(out_PUSH_SPR_VAL [i], val);
    129129          if (val)
    130130            PORT_WRITE(out_PUSH_SPR_NUM_REG[i], ((bank_spr<<_param->_shift_spr) | spr_ptr));
     
    133133
    134134      }
    135    
     135      }
     136    else
     137      {
     138        for (uint32_t i=0; i<_param->_nb_reg_free; i++)
     139          {
     140            internal_PUSH_GPR_VAL      [i] = 0;
     141//          internal_PUSH_GPR_NUM_BANK [i] = bank_gpr;
     142//          internal_PUSH_GPR_NUM_REG  [i] = gpr_ptr ;
     143            internal_PUSH_SPR_VAL      [i] = 0;
     144//          internal_PUSH_SPR_NUM_BANK [i] = bank_spr;
     145//          internal_PUSH_SPR_NUM_REG  [i] = spr_ptr ;
     146          }
     147      }
     148
     149    for (uint32_t i=0; i<_param->_nb_reg_free; i++)
     150      {
     151        PORT_WRITE(out_PUSH_GPR_VAL [i], internal_PUSH_GPR_VAL      [i]);
     152        PORT_WRITE(out_PUSH_SPR_VAL [i], internal_PUSH_SPR_VAL      [i]);
     153      }
     154 
    136155    log_end(Stat_List_unit,FUNCTION);
    137156  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/src/Stat_List_unit_transition.cpp

    r118 r123  
    4343    else
    4444      {
     45#ifdef DEBUG_TEST
     46        {
     47          uint32_t free_list_nb_gpr_free     = PORT_READ(in_INFO_NB_GPR_FREE);
     48          uint32_t free_list_nb_spr_free     = PORT_READ(in_INFO_NB_SPR_FREE);
     49          uint32_t stat_list_nb_gpr_free     = 0;
     50          uint32_t stat_list_nb_spr_free     = 0;
     51          uint32_t stat_list_nb_gpr_can_free = 0;
     52          uint32_t stat_list_nb_spr_can_free = 0;
     53          uint32_t stat_list_nb_gpr_link     = 0;
     54          uint32_t stat_list_nb_spr_link     = 0;
     55          uint32_t stat_list_nb_gpr_use      = 0;
     56          uint32_t stat_list_nb_spr_use      = 0;
     57
     58          for (uint32_t i=0; i<_param->_nb_bank; i++)
     59            {
     60              for (uint32_t j=0; j<_param->_nb_general_register_by_bank; j++)
     61                {
     62                  if (gpr_stat_list [i][j]._is_free)
     63                    stat_list_nb_gpr_free ++;
     64                  if (gpr_stat_list [i][j]._is_link)
     65                    stat_list_nb_gpr_link ++;
     66                  if (gpr_stat_list [i][j]._is_use)
     67                    stat_list_nb_gpr_use ++;
     68                  if (gpr_stat_list [i][j].can_free())
     69                    stat_list_nb_gpr_can_free ++;
     70                }
     71              for (uint32_t j=0; j<_param->_nb_special_register_by_bank; j++)
     72                {
     73                  if (spr_stat_list [i][j]._is_free)
     74                    stat_list_nb_spr_free ++;
     75                  if (spr_stat_list [i][j]._is_link)
     76                    stat_list_nb_spr_link ++;
     77                  if (spr_stat_list [i][j]._is_use)
     78                    stat_list_nb_spr_use ++;
     79                  if (spr_stat_list [i][j].can_free())
     80                    stat_list_nb_spr_can_free ++;
     81                }
     82            }
     83
     84          uint32_t  nb_gpr_free = stat_list_nb_gpr_free+stat_list_nb_gpr_can_free;
     85          uint32_t  nb_spr_free = stat_list_nb_spr_free+stat_list_nb_spr_can_free;
     86          uint32_t _nb_gpr_free = (_param->_nb_general_register - _param->_nb_gpr_use_init);
     87          uint32_t _nb_spr_free = (_param->_nb_special_register - _param->_nb_spr_use_init);
     88          uint32_t  nb_gpr_link = stat_list_nb_gpr_link - _param->_nb_gpr_use_init;
     89          uint32_t  nb_spr_link = stat_list_nb_spr_link - _param->_nb_spr_use_init;
     90          uint32_t  nb_gpr_use  = stat_list_nb_gpr_use - _param->_nb_gpr_use_init;
     91          uint32_t  nb_spr_use  = stat_list_nb_spr_use - _param->_nb_spr_use_init;
     92
     93          log_printf(TRACE,Stat_List_unit,FUNCTION,"  * nb_gpr_free : stat_list %d - free_list %d - free %d, link %d (%d), use %d (%d)",stat_list_nb_gpr_free,free_list_nb_gpr_free,nb_gpr_free,nb_gpr_link,stat_list_nb_gpr_link,nb_gpr_use,stat_list_nb_gpr_use);
     94          log_printf(TRACE,Stat_List_unit,FUNCTION,"  * nb_spr_free : stat_list %d - free_list %d - free %d, link %d (%d), use %d (%d)",stat_list_nb_spr_free,free_list_nb_spr_free,nb_spr_free,nb_spr_link,stat_list_nb_spr_link,nb_spr_use,stat_list_nb_spr_use);
     95
     96          if (free_list_nb_gpr_free != stat_list_nb_gpr_free)
     97            throw ERRORMORPHEO(FUNCTION,toString(_("Number of free general register is not valid. %d in Stat_List and %d in Free_list.\n"),stat_list_nb_gpr_free,free_list_nb_gpr_free));
     98          if (free_list_nb_spr_free != stat_list_nb_spr_free)
     99            throw ERRORMORPHEO(FUNCTION,toString(_("Number of free general register is not valid. %d in Stat_List and %d in Free_list.\n"),stat_list_nb_spr_free,free_list_nb_spr_free));
     100
     101          if (PORT_READ(in_INFO_ROB_EMPTY) and (nb_gpr_free != _nb_gpr_free))
     102            throw ERRORMORPHEO(FUNCTION,toString(_("Rob is empty but they have %d general registers free or can_free and must be %d registers."),nb_gpr_free,_nb_gpr_free));
     103
     104          if (PORT_READ(in_INFO_ROB_EMPTY) and (nb_spr_free != _nb_spr_free))
     105            throw ERRORMORPHEO(FUNCTION,toString(_("Rob is empty but they have %d special registers free or can_free and must be %d registers."),nb_spr_free,_nb_spr_free));
     106        }
     107#endif
     108
    45109        // =====================================================
    46110        // =====[ INSERT ]======================================
     
    256320      for (uint32_t i=0; i<_param->_nb_bank; i++)
    257321        for (uint32_t j=0; j<_param->_nb_general_register_by_bank; j++)
    258           log_printf(TRACE,Stat_List_unit,FUNCTION,"    * GPR[%.4d][%.5d] (%.5d) - free %.1d, link %.1d",
     322          log_printf(TRACE,Stat_List_unit,FUNCTION,"    * GPR[%.4d][%.5d] (%.5d) - free %.1d, link %.1d, use %.1d",
    259323                     i,
    260324                     j,
    261325                     (i<<_param->_shift_gpr)|j,
    262326                     gpr_stat_list[i][j]._is_free,
    263                      gpr_stat_list[i][j]._is_link// ,
     327                     gpr_stat_list[i][j]._is_link,
     328                     gpr_stat_list[i][j]._is_use// ,
    264329//                      gpr_stat_list[i][j]._is_valid,
    265330//                      gpr_stat_list[i][j]._counter
     
    267332      for (uint32_t i=0; i<_param->_nb_bank; i++)
    268333        for (uint32_t j=0; j<_param->_nb_special_register_by_bank; j++)
    269           log_printf(TRACE,Stat_List_unit,FUNCTION,"    * SPR[%.4d][%.5d] (%.5d) - free %.1d, link %.1d",
     334          log_printf(TRACE,Stat_List_unit,FUNCTION,"    * SPR[%.4d][%.5d] (%.5d) - free %.1d, link %.1d, use %.1d",
    270335                     i,
    271336                     j,
    272337                     (i<<_param->_shift_spr)|j,
    273338                     spr_stat_list[i][j]._is_free,
    274                      spr_stat_list[i][j]._is_link// ,
     339                     spr_stat_list[i][j]._is_link,
     340                     spr_stat_list[i][j]._is_use// ,
    275341//                      spr_stat_list[i][j]._is_valid,
    276342//                      spr_stat_list[i][j]._counter
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/include/Register_translation_unit.h

    r121 r123  
    137137  public    : SC_IN (Tevent_state_t    )  ***  in_RETIRE_EVENT_STATE       ;//[nb_front_end][nb_context]
    138138
     139    // ~~~~~[ interface : "info" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     140#ifdef DEBUG_TEST
     141  public    : SC_IN (bool      )            *  in_INFO_ROB_EMPTY  ;
     142#endif
     143
    139144    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
    140145  public : morpheo::behavioural::core::multi_ooo_engine::ooo_engine::rename_unit::register_translation_unit::dependency_checking_unit::Dependency_checking_unit                   * _component_dependency_checking_unit;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/src/Register_translation_unit.cpp

    r88 r123  
    3838    log_printf(FUNC,Register_translation_unit,FUNCTION,"Begin");
    3939
    40 #if DEBUG_Register_translation_unit == true
    41     log_printf(INFO,Register_translation_unit,FUNCTION,_("<%s> Parameters"),_name.c_str());
     40// #if DEBUG_Register_translation_unit == true
     41//     log_printf(INFO,Register_translation_unit,FUNCTION,_("<%s> Parameters"),_name.c_str());
    4242
    43     std::cout << *param << std::endl;
    44 #endif   
     43//     std::cout << *param << std::endl;
     44// #endif   
    4545
    4646    log_printf(INFO,Register_translation_unit,FUNCTION,"Allocation");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/src/Register_translation_unit_allocation.cpp

    r122 r123  
    149149      ALLOC2_INTERFACE_END(_param->_nb_front_end, _param->_nb_context[it1]);
    150150    }
     151
     152    // ~~~~~[ interface : "info" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     153#ifdef DEBUG_TEST
     154     {
     155       ALLOC0_INTERFACE_BEGIN("info",IN, NORTH, _("Information"));
     156
     157       ALLOC0_SIGNAL_IN ( in_INFO_ROB_EMPTY  ,"rob_empty"  ,bool    ,1);
     158
     159       ALLOC0_INTERFACE_END();
     160     }
     161#endif
    151162
    152163    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
     
    472483                                   dest,"out_PUSH_SPR_"+toString(i)+"_NUM_REG");
    473484        }
     485
     486    // ~~~~~[ interface : "info" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     487#ifdef DEBUG_TEST
     488      {
     489        dest = _name+"_stat_list_unit";
     490#ifdef POSITION
     491        _component->interface_map (src ,"info"
     492                                   dest,"info");
     493#endif
     494       
     495        COMPONENT_MAP(_component,src ,"out_INFO_NB_GPR_FREE",
     496                                 dest, "in_INFO_NB_GPR_FREE");
     497        COMPONENT_MAP(_component,src ,"out_INFO_NB_SPR_FREE",
     498                                 dest, "in_INFO_NB_SPR_FREE");
     499      }
     500#endif
    474501    }
    475 
    476502
    477503    // ===================================================================
     
    726752          //out_PUSH_SPR_NUM_REG - free_list_unit
    727753        }
     754
     755#ifdef DEBUG_TEST
     756      {
     757        dest = _name;
     758#ifdef POSITION
     759        _component->interface_map (src ,"info"
     760                                   dest,"info");
     761#endif
     762       
     763        PORT_MAP(_component,src , "in_INFO_ROB_EMPTY",
     764                            dest, "in_INFO_ROB_EMPTY");
     765      }
     766#endif
     767
    728768    }
    729769
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/src/Register_translation_unit_deallocation.cpp

    r121 r123  
    9494        DELETE2_SIGNAL(out_RETIRE_EVENT_ACK            ,_param->_nb_front_end, _param->_nb_context[it1],1);
    9595        DELETE2_SIGNAL( in_RETIRE_EVENT_STATE          ,_param->_nb_front_end, _param->_nb_context[it1],_param->_size_event_state);
     96
     97#ifdef DEBUG_TEST
     98        DELETE0_SIGNAL( in_INFO_ROB_EMPTY  ,1);
     99#endif
    96100      }
    97101
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_select/include/Rename_select.h

    r122 r123  
    7575  public    : SC_IN (Toperation_t      )  ***  in_RENAME_IN_OPERATION     ;//[nb_front_end][nb_inst_decod]
    7676  public    : SC_IN (Tcontrol_t        )  ***  in_RENAME_IN_NO_EXECUTE    ;//[nb_front_end][nb_inst_decod]
     77//public    : SC_IN (Tcontrol_t        )  ***  in_RENAME_IN_HAVE_EVENT    ;//[nb_front_end][nb_inst_decod]
     78  public    : SC_IN (Tcontrol_t        )  ***  in_RENAME_IN_LAST_EVENT    ;//[nb_front_end][nb_inst_decod]
    7779  public    : SC_IN (Tcontrol_t        )  ***  in_RENAME_IN_IS_DELAY_SLOT ;//[nb_front_end][nb_inst_decod]
    7880#ifdef DEBUG
     
    104106  public    : SC_OUT(Toperation_t      )   ** out_RENAME_OUT_OPERATION    ;//[nb_inst_rename]
    105107  public    : SC_OUT(Tcontrol_t        )   ** out_RENAME_OUT_NO_EXECUTE   ;//[nb_inst_rename]
     108  public    : SC_OUT(Tcontrol_t        )   ** out_RENAME_OUT_LAST_EVENT   ;//[nb_inst_rename]
    106109  public    : SC_OUT(Tcontrol_t        )   ** out_RENAME_OUT_IS_DELAY_SLOT;//[nb_inst_rename]
    107110#ifdef DEBUG
     
    125128
    126129    // ~~~~~[ Interface "retire_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    127   public    : SC_IN (Tcontrol_t        )  ***  in_RETIRE_EVENT_FLUSH      ;//[nb_front_end][nb_context]
     130//   public    : SC_IN (Tcontrol_t        )  ***  in_RETIRE_EVENT_FLUSH      ;//[nb_front_end][nb_context]
    128131  public    : SC_IN (Tcontrol_t        )  ***  in_RETIRE_EVENT_STOP       ;//[nb_front_end][nb_context]
    129132
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_select/src/Rename_select.cpp

    r122 r123  
    3838    log_printf(FUNC,Rename_select,FUNCTION,"Begin");
    3939
    40 #if DEBUG_Core == true
    41     log_printf(INFO,Core,FUNCTION,_("<%s> Parameters"),_name.c_str());
    42 
    43     std::cout << *param << std::endl;
    44 #endif   
     40// #if DEBUG_Core == true
     41//     log_printf(INFO,Core,FUNCTION,_("<%s> Parameters"),_name.c_str());
     42
     43//     std::cout << *param << std::endl;
     44// #endif   
    4545
    4646    log_printf(INFO,Rename_select,FUNCTION,"Allocation");
     
    9696                        << (*(in_RENAME_IN_OPERATION     [i][j]))
    9797                        << (*(in_RENAME_IN_NO_EXECUTE    [i][j]))
     98//                      << (*(in_RENAME_IN_HAVE_EVENT    [i][j]))
     99                        << (*(in_RENAME_IN_LAST_EVENT    [i][j]))
    98100                        << (*(in_RENAME_IN_IS_DELAY_SLOT [i][j]))
    99101#ifdef DEBUG
     
    125127        for (uint32_t i=0; i<_param->_nb_front_end; i++)
    126128          for (uint32_t j=0; j<_param->_nb_context [i]; j++)
    127             sensitive << (*(in_RETIRE_EVENT_FLUSH [i][j]))
     129            sensitive // << (*(in_RETIRE_EVENT_FLUSH [i][j]))
    128130                      << (*(in_RETIRE_EVENT_STOP  [i][j]));
    129131
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_select/src/Rename_select_allocation.cpp

    r122 r123  
    6868      _ALLOC2_SIGNAL_IN ( in_RENAME_IN_OPERATION     ,"operation"    ,Toperation_t      ,_param->_size_operation             , _param->_nb_front_end, _param->_nb_inst_decod[it1]);
    6969      _ALLOC2_SIGNAL_IN ( in_RENAME_IN_NO_EXECUTE    ,"no_execute"   ,Tcontrol_t        ,1                                   , _param->_nb_front_end, _param->_nb_inst_decod[it1]);
     70//    _ALLOC2_SIGNAL_IN ( in_RENAME_IN_HAVE_EVENT    ,"have_event"   ,Tcontrol_t        ,1                                   , _param->_nb_front_end, _param->_nb_inst_decod[it1]);
     71      _ALLOC2_SIGNAL_IN ( in_RENAME_IN_LAST_EVENT    ,"last_event"   ,Tcontrol_t        ,1                                   , _param->_nb_front_end, _param->_nb_inst_decod[it1]);
    7072      _ALLOC2_SIGNAL_IN ( in_RENAME_IN_IS_DELAY_SLOT ,"is_delay_slot",Tcontrol_t        ,1                                   , _param->_nb_front_end, _param->_nb_inst_decod[it1]);
    7173#ifdef DEBUG
     
    103105      ALLOC1_SIGNAL_OUT(out_RENAME_OUT_OPERATION     ,"operation"    ,Toperation_t      ,_param->_size_operation             );
    104106      ALLOC1_SIGNAL_OUT(out_RENAME_OUT_NO_EXECUTE    ,"no_execute"   ,Tcontrol_t        ,1                                   );
     107      ALLOC1_SIGNAL_OUT(out_RENAME_OUT_LAST_EVENT    ,"last_event"   ,Tcontrol_t        ,1                                   );
    105108      ALLOC1_SIGNAL_OUT(out_RENAME_OUT_IS_DELAY_SLOT ,"is_delay_slot",Tcontrol_t        ,1                                   );
    106109#ifdef DEBUG
     
    130133      ALLOC2_INTERFACE_BEGIN("retire_event", IN,NORTH, _("Retire event"), _param->_nb_front_end, _param->_nb_context[it1]);
    131134
    132       _ALLOC2_SIGNAL_IN ( in_RETIRE_EVENT_FLUSH         ,"flush"                ,Tcontrol_t        ,1                        , _param->_nb_front_end, _param->_nb_context[it1]);
     135//       _ALLOC2_SIGNAL_IN ( in_RETIRE_EVENT_FLUSH         ,"flush"                ,Tcontrol_t        ,1                        , _param->_nb_front_end, _param->_nb_context[it1]);
    133136      _ALLOC2_SIGNAL_IN ( in_RETIRE_EVENT_STOP          ,"stop"                 ,Tcontrol_t        ,1                        , _param->_nb_front_end, _param->_nb_context[it1]);
    134137
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_select/src/Rename_select_deallocation.cpp

    r122 r123  
    3737        DELETE2_SIGNAL( in_RENAME_IN_OPERATION     ,_param->_nb_front_end, _param->_nb_inst_decod[it1],_param->_size_operation             );
    3838        DELETE2_SIGNAL( in_RENAME_IN_NO_EXECUTE    ,_param->_nb_front_end, _param->_nb_inst_decod[it1],1                                   );
     39//      DELETE2_SIGNAL( in_RENAME_IN_HAVE_EVENT    ,_param->_nb_front_end, _param->_nb_inst_decod[it1],1                                   );
     40        DELETE2_SIGNAL( in_RENAME_IN_LAST_EVENT    ,_param->_nb_front_end, _param->_nb_inst_decod[it1],1                                   );
    3941        DELETE2_SIGNAL( in_RENAME_IN_IS_DELAY_SLOT ,_param->_nb_front_end, _param->_nb_inst_decod[it1],1                                   );
    4042#ifdef DEBUG
     
    6567        DELETE1_SIGNAL(out_RENAME_OUT_OPERATION     ,_param->_nb_inst_rename,_param->_size_operation             );
    6668        DELETE1_SIGNAL(out_RENAME_OUT_NO_EXECUTE    ,_param->_nb_inst_rename,1                                   );
     69        DELETE1_SIGNAL(out_RENAME_OUT_LAST_EVENT    ,_param->_nb_inst_rename,1                                   );
    6770        DELETE1_SIGNAL(out_RENAME_OUT_IS_DELAY_SLOT ,_param->_nb_inst_rename,1                                   );
    6871#ifdef DEBUG
     
    8588        DELETE1_SIGNAL(out_RENAME_OUT_EXCEPTION     ,_param->_nb_inst_rename,_param->_size_exception             );
    8689
    87         DELETE2_SIGNAL( in_RETIRE_EVENT_FLUSH       ,_param->_nb_front_end, _param->_nb_context[it1],1);
     90//         DELETE2_SIGNAL( in_RETIRE_EVENT_FLUSH       ,_param->_nb_front_end, _param->_nb_context[it1],1);
    8891        DELETE2_SIGNAL( in_RETIRE_EVENT_STOP        ,_param->_nb_front_end, _param->_nb_context[it1],1);
    8992      }
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_select/src/Rename_select_genMealy.cpp

    r122 r123  
    1717namespace rename_select {
    1818
    19 // #define CONTINUE_ON_EVENT_STOP
    20 
    2119#undef  FUNCTION
    2220#define FUNCTION "Rename_select::genMealy"
     
    2826    Tcontrol_t val                  [_param->_nb_inst_rename];
    2927    Tcontrol_t ack                  [_param->_nb_front_end][_param->_max_nb_inst_decod];
    30     Tcontrol_t previous_transaction [_param->_nb_front_end];
    3128
    3229    for (uint32_t i=0; i<_param->_nb_inst_rename; ++i)
    3330      val [i] = false;
    3431    for (uint32_t i=0; i<_param->_nb_front_end; i++)
     32      for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++)
     33        ack [i][j] = false;
     34   
     35    if (PORT_READ(in_NRESET))
    3536      {
    36         previous_transaction [i] = true;
    37         for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++)
    38           ack [i][j] = false;
    39       }
     37        Tcontrol_t previous_transaction [_param->_nb_front_end];
     38        for (uint32_t i=0; i<_param->_nb_front_end; i++)
     39          previous_transaction [i] = true;
    4040
    4141    std::list<generic::priority::select_t> * select = _priority->select();
     
    7171               
    7272                // Test if ROB is Flushed
    73 #ifndef CONTINUE_ON_EVENT_STOP
    7473                if (not stop)
    75 #endif
    7674                  {
    7775                    // Find !!!
     
    7977                    ack [x][y] = PORT_READ(in_RENAME_OUT_ACK [i]);
    8078                   
    81                     Tcontrol_t     have_event          = (PORT_READ(in_RETIRE_EVENT_FLUSH [x][context_id])
    82 #ifdef CONTINUE_ON_EVENT_STOP
    83                                                           or stop
    84 #endif
    85                                                           );
    86                     Tcontrol_t     can_register_access = not have_event;
    87                     Tcontrol_t     no_execute          = (PORT_READ(in_RENAME_IN_NO_EXECUTE [x][y]) or have_event);
    88                     Tcontrol_t     read_ra             = (PORT_READ(in_RENAME_IN_READ_RA    [x][y]) and can_register_access);
    89                     Tcontrol_t     read_rb             = (PORT_READ(in_RENAME_IN_READ_RB    [x][y]) and can_register_access);
    90                     Tcontrol_t     read_rc             = (PORT_READ(in_RENAME_IN_READ_RC    [x][y]) and can_register_access);
    91                     Tcontrol_t     write_rd            = (PORT_READ(in_RENAME_IN_WRITE_RD   [x][y]) and can_register_access);
    92                     Tcontrol_t     write_re            = (PORT_READ(in_RENAME_IN_WRITE_RE   [x][y]) and can_register_access);
    93 //                  Tcontrol_t     read_ra             = (PORT_READ(in_RENAME_IN_READ_RA    [x][y]));
    94 //                  Tcontrol_t     read_rb             = (PORT_READ(in_RENAME_IN_READ_RB    [x][y]));
    95 //                  Tcontrol_t     read_rc             = (PORT_READ(in_RENAME_IN_READ_RC    [x][y]));
    96 //                  Tcontrol_t     write_rd            = (PORT_READ(in_RENAME_IN_WRITE_RD   [x][y]));
    97 //                  Tcontrol_t     write_re            = (PORT_READ(in_RENAME_IN_WRITE_RE   [x][y]));
     79//                  Tcontrol_t     have_event          = (PORT_READ(in_RETIRE_EVENT_FLUSH [x][context_id]) // or
     80//                                                           );
     81//                  log_printf(TRACE,Rename_select,FUNCTION,"      * have_event           : %d",have_event);
     82
     83//                  Tcontrol_t     can_register_access = not have_event;
     84//                  Tcontrol_t     no_execute          = (PORT_READ(in_RENAME_IN_NO_EXECUTE [x][y]) or have_event);
     85//                  Tcontrol_t     read_ra             = (PORT_READ(in_RENAME_IN_READ_RA    [x][y]) and can_register_access);
     86//                  Tcontrol_t     read_rb             = (PORT_READ(in_RENAME_IN_READ_RB    [x][y]) and can_register_access);
     87//                  Tcontrol_t     read_rc             = (PORT_READ(in_RENAME_IN_READ_RC    [x][y]) and can_register_access);
     88//                  Tcontrol_t     write_rd            = (PORT_READ(in_RENAME_IN_WRITE_RD   [x][y]) and can_register_access);
     89//                  Tcontrol_t     write_re            = (PORT_READ(in_RENAME_IN_WRITE_RE   [x][y]) and can_register_access);
     90                    Tcontrol_t     no_execute          = (PORT_READ(in_RENAME_IN_NO_EXECUTE [x][y]));
     91                    Tcontrol_t     read_ra             = (PORT_READ(in_RENAME_IN_READ_RA    [x][y]));
     92                    Tcontrol_t     read_rb             = (PORT_READ(in_RENAME_IN_READ_RB    [x][y]));
     93                    Tcontrol_t     read_rc             = (PORT_READ(in_RENAME_IN_READ_RC    [x][y]));
     94                    Tcontrol_t     write_rd            = (PORT_READ(in_RENAME_IN_WRITE_RD   [x][y]));
     95                    Tcontrol_t     write_re            = (PORT_READ(in_RENAME_IN_WRITE_RE   [x][y]));
    9896                   
    99                     log_printf(TRACE,Rename_select,FUNCTION,"      * have_event           : %d",have_event);
    100                     log_printf(TRACE,Rename_select,FUNCTION,"      * no_execute (before)  : %d",PORT_READ(in_RENAME_IN_NO_EXECUTE [x][y]));
    101                     log_printf(TRACE,Rename_select,FUNCTION,"      * no_execute (after)   : %d",no_execute);
     97                    log_printf(TRACE,Rename_select,FUNCTION,"      * no_execute           : %d",no_execute);
    10298                   
    10399                    if (_param->_have_port_front_end_id)
     
    110106                    PORT_WRITE(out_RENAME_OUT_OPERATION    [i],PORT_READ(in_RENAME_IN_OPERATION     [x][y]));
    111107                    PORT_WRITE(out_RENAME_OUT_NO_EXECUTE   [i],no_execute);
     108                    PORT_WRITE(out_RENAME_OUT_LAST_EVENT   [i],PORT_READ(in_RENAME_IN_LAST_EVENT    [x][y]));
    112109                    PORT_WRITE(out_RENAME_OUT_IS_DELAY_SLOT[i],PORT_READ(in_RENAME_IN_IS_DELAY_SLOT [x][y]));
    113110#ifdef DEBUG       
     
    140137      }
    141138
     139      }
     140//     else
     141//       {
     142//       }
     143
    142144    for (uint32_t i=0; i<_param->_nb_inst_rename; ++i)
    143145      PORT_WRITE(out_RENAME_OUT_VAL [i], val [i]);
     
    146148      for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++)
    147149        PORT_WRITE(out_RENAME_IN_ACK [i][j], ack [i][j]);
     150
    148151
    149152    log_end(Rename_select,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_unit_Glue/src/Rename_unit_Glue.cpp

    r122 r123  
    4040    usage_environment(_usage);
    4141
    42 #if DEBUG_Rename_unit_Glue == true
    43     log_printf(INFO,Rename_unit_Glue,FUNCTION,_("<%s> Parameters"),_name.c_str());
    44 
    45     std::cout << *param << std::endl;
    46 #endif   
     42// #if DEBUG_Rename_unit_Glue == true
     43//     log_printf(INFO,Rename_unit_Glue,FUNCTION,_("<%s> Parameters"),_name.c_str());
     44
     45//     std::cout << *param << std::endl;
     46// #endif   
    4747
    4848    log_printf(INFO,Rename_unit_Glue,FUNCTION,_("<%s> : Allocation"),_name.c_str());
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_unit_Glue/src/Rename_unit_Glue_genMealy_insert.cpp

    r88 r123  
    2525    log_function(Rename_unit_Glue,FUNCTION,_name.c_str());
    2626
     27    if (PORT_READ(in_NRESET))
     28      {
    2729    for (uint32_t i=0; i<_param->_nb_inst_insert; i++)
    2830      {
     
    104106        PORT_WRITE(out_INSERT_LOAD_STORE_QUEUE_POINTER_OPERATION    [i],OPERATION         );
    105107      }
     108      }
    106109
    107110    log_end(Rename_unit_Glue,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_unit_Glue/src/Rename_unit_Glue_genMealy_insert_valack.cpp

    r115 r123  
    2525    log_function(Rename_unit_Glue,FUNCTION,_name.c_str());
    2626
     27    if (PORT_READ(in_NRESET))
     28      {
    2729//     // Transaction must be in-order - made in rename_select
    2830//     Tcontrol_t previous_transaction = true;
     
    7577//      previous_transaction = RENAME_SELECT_VAL and RENAME_SELECT_ACK;
    7678      }
     79      }
     80    else
     81      {
     82        for (uint32_t i=0; i<_param->_nb_inst_insert; i++)
     83          {
     84//      PORT_WRITE(out_INSERT_VAL                          [i], 0);
     85        PORT_WRITE(out_INSERT_RENAME_SELECT_ACK            [i], 0);
     86        PORT_WRITE(out_INSERT_REGISTER_TRANSLATION_VAL     [i], 0);
     87        PORT_WRITE(out_INSERT_LOAD_STORE_QUEUE_POINTER_VAL [i], 0);
     88          }
     89      }
    7790
    7891    log_end(Rename_unit_Glue,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_unit_Glue/src/Rename_unit_Glue_genMealy_retire_event_valack.cpp

    r122 r123  
    2525    log_function(Rename_unit_Glue,FUNCTION,_name.c_str());
    2626
     27    if (PORT_READ(in_NRESET))
     28      {
    2729    for (uint32_t i=0; i<_param->_nb_front_end; i++)
    2830      for (uint32_t j=0; j<_param->_nb_context[i]; j++)
     
    5961          log_printf(TRACE,Rename_unit_Glue,FUNCTION,"    * load_store_queue_pointer_ack (r) : %d",LOAD_STORE_QUEUE_POINTER_ACK);
    6062        }
    61    
     63      }
     64    else
     65      {
     66        for (uint32_t i=0; i<_param->_nb_front_end; i++)
     67          for (uint32_t j=0; j<_param->_nb_context[i]; j++)
     68            {
     69              PORT_WRITE(out_RETIRE_EVENT_ACK                          [i][j], 0);
     70              PORT_WRITE(out_RETIRE_EVENT_LOAD_STORE_QUEUE_POINTER_VAL [i][j], 0);
     71              PORT_WRITE(out_RETIRE_EVENT_REGISTER_TRANSLATION_VAL     [i][j], 0);
     72            }
     73      }
     74
    6275    log_end(Rename_unit_Glue,FUNCTION);
    6376  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_unit_Glue/src/Rename_unit_Glue_genMealy_retire_valack.cpp

    r110 r123  
    2525    log_function(Rename_unit_Glue,FUNCTION,_name.c_str());
    2626
     27    if (PORT_READ(in_NRESET))
     28      {
    2729    // Transaction must be in-order - made in commit_unit
    2830//     Tcontrol_t previous_transaction = true;
     
    5860        log_printf(TRACE,Rename_unit_Glue,FUNCTION,"    * load_store_queue_pointer_ack (r) : %d",LOAD_STORE_QUEUE_POINTER_ACK);
    5961      }
    60 
     62      }
     63    else
     64      {
     65        for (uint32_t i=0; i<_param->_nb_inst_retire; i++)
     66          {
     67        PORT_WRITE(out_RETIRE_ACK                          [i], 0);
     68        PORT_WRITE(out_RETIRE_LOAD_STORE_QUEUE_POINTER_VAL [i], 0);
     69        PORT_WRITE(out_RETIRE_REGISTER_TRANSLATION_VAL     [i], 0);
     70          }
     71      }
    6172    log_end(Rename_unit_Glue,FUNCTION);
    6273  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/include/Rename_unit.h

    r122 r123  
    7777  public    : SC_IN (Toperation_t      )  ***  in_RENAME_IN_OPERATION         ;//[nb_front_end][nb_inst_decod]
    7878  public    : SC_IN (Tcontrol_t        )  ***  in_RENAME_IN_NO_EXECUTE        ;//[nb_front_end][nb_inst_decod]
     79//public    : SC_IN (Tcontrol_t        )  ***  in_RENAME_IN_HAVE_EVENT        ;//[nb_front_end][nb_inst_decod]
     80  public    : SC_IN (Tcontrol_t        )  ***  in_RENAME_IN_LAST_EVENT        ;//[nb_front_end][nb_inst_decod]
    7981  public    : SC_IN (Tcontrol_t        )  ***  in_RENAME_IN_IS_DELAY_SLOT     ;//[nb_front_end][nb_inst_decod]
    8082#ifdef DEBUG
     
    106108  public    : SC_OUT(Toperation_t      )   ** out_INSERT_OPERATION            ;//[nb_inst_insert]
    107109  public    : SC_OUT(Tcontrol_t        )   ** out_INSERT_NO_EXECUTE           ;//[nb_inst_insert]
     110  public    : SC_OUT(Tcontrol_t        )   ** out_INSERT_LAST_EVENT           ;//[nb_inst_insert]
    108111  public    : SC_OUT(Tcontrol_t        )   ** out_INSERT_IS_DELAY_SLOT        ;//[nb_inst_insert]
    109112#ifdef DEBUG
     
    173176  public    : SC_OUT(Tcontrol_t        )  *** out_RETIRE_EVENT_ACK            ;//[nb_front_end][nb_context]
    174177  public    : SC_IN (Tevent_state_t    )  ***  in_RETIRE_EVENT_STATE          ;//[nb_front_end][nb_context]
    175   public    : SC_IN (Tcontrol_t        )  ***  in_RETIRE_EVENT_FLUSH          ;//[nb_front_end][nb_context]
     178//public    : SC_IN (Tcontrol_t        )  ***  in_RETIRE_EVENT_FLUSH          ;//[nb_front_end][nb_context]
    176179  public    : SC_IN (Tcontrol_t        )  ***  in_RETIRE_EVENT_STOP           ;//[nb_front_end][nb_context]
    177180
    178181    // ~~~~~[ Interface : "spr_read" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    179182  public    : SC_IN (Tspr_t            )  ***  in_SPR_READ_SR                 ;//[nb_front_end][nb_context]
     183
     184    // ~~~~~[ interface : "info" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     185#ifdef DEBUG_TEST
     186  public    : SC_IN (bool      )            *  in_INFO_ROB_EMPTY  ;
     187#endif
    180188
    181189    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/src/Rename_unit.cpp

    r88 r123  
    3939    usage_environment(_usage);
    4040
    41 #if DEBUG_Rename_unit == true
    42     log_printf(INFO,Rename_unit,FUNCTION,_("<%s> Parameters"),_name.c_str());
     41// #if DEBUG_Rename_unit == true
     42//     log_printf(INFO,Rename_unit,FUNCTION,_("<%s> Parameters"),_name.c_str());
    4343
    44     std::cout << *param << std::endl;
    45 #endif   
     44//     std::cout << *param << std::endl;
     45// #endif   
    4646
    4747    log_printf(INFO,Rename_unit,FUNCTION,_("<%s> : Allocation"),_name.c_str());
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/src/Rename_unit_allocation.cpp

    r122 r123  
    6868      _ALLOC2_SIGNAL_IN ( in_RENAME_IN_OPERATION     ,"operation"    ,Toperation_t      ,_param->_size_operation             , _param->_nb_front_end, _param->_nb_inst_decod[it1]);
    6969      _ALLOC2_SIGNAL_IN ( in_RENAME_IN_NO_EXECUTE    ,"no_execute"   ,Tcontrol_t        ,1                                   , _param->_nb_front_end, _param->_nb_inst_decod[it1]);
     70//    _ALLOC2_SIGNAL_IN ( in_RENAME_IN_HAVE_EVENT    ,"have_event"   ,Tcontrol_t        ,1                                   , _param->_nb_front_end, _param->_nb_inst_decod[it1]);
     71      _ALLOC2_SIGNAL_IN ( in_RENAME_IN_LAST_EVENT    ,"last_event"   ,Tcontrol_t        ,1                                   , _param->_nb_front_end, _param->_nb_inst_decod[it1]);
    7072      _ALLOC2_SIGNAL_IN ( in_RENAME_IN_IS_DELAY_SLOT ,"is_delay_slot",Tcontrol_t        ,1                                   , _param->_nb_front_end, _param->_nb_inst_decod[it1]);
    7173#ifdef DEBUG
     
    103105      ALLOC1_SIGNAL_OUT(out_INSERT_OPERATION            ,"operation"            ,Toperation_t      ,_param->_size_operation             );
    104106      ALLOC1_SIGNAL_OUT(out_INSERT_NO_EXECUTE           ,"no_execute"           ,Tcontrol_t        ,1                                   );
     107      ALLOC1_SIGNAL_OUT(out_INSERT_LAST_EVENT           ,"last_event"           ,Tcontrol_t        ,1                                   );
    105108      ALLOC1_SIGNAL_OUT(out_INSERT_IS_DELAY_SLOT        ,"is_delay_slot"        ,Tcontrol_t        ,1                                   );
    106109#ifdef DEBUG
     
    182185      _ALLOC2_VALACK_OUT(out_RETIRE_EVENT_ACK           ,ACK,_param->_nb_front_end, _param->_nb_context[it1]);
    183186      _ALLOC2_SIGNAL_IN ( in_RETIRE_EVENT_STATE         ,"state"                ,Tevent_state_t    ,_param->_size_event_state, _param->_nb_front_end, _param->_nb_context[it1]);
    184       _ALLOC2_SIGNAL_IN ( in_RETIRE_EVENT_FLUSH         ,"flush"                ,Tcontrol_t        ,1                        , _param->_nb_front_end, _param->_nb_context[it1]);
     187//       _ALLOC2_SIGNAL_IN ( in_RETIRE_EVENT_FLUSH         ,"flush"                ,Tcontrol_t        ,1                        , _param->_nb_front_end, _param->_nb_context[it1]);
    185188      _ALLOC2_SIGNAL_IN ( in_RETIRE_EVENT_STOP          ,"stop"                 ,Tcontrol_t        ,1                        , _param->_nb_front_end, _param->_nb_context[it1]);
    186189
     
    196199      ALLOC2_INTERFACE_END(_param->_nb_front_end, _param->_nb_context[it1]);
    197200    }
     201
     202    // ~~~~~[ interface : "info" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     203#ifdef DEBUG_TEST
     204     {
     205       ALLOC0_INTERFACE_BEGIN("info",IN, NORTH, _("Information"));
     206
     207       ALLOC0_SIGNAL_IN ( in_INFO_ROB_EMPTY  ,"rob_empty"  ,bool    ,1);
     208
     209       ALLOC0_INTERFACE_END();
     210     }
     211#endif
    198212
    199213    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     
    325339            PORT_MAP(_component,src , "in_RENAME_IN_"+toString(i)+"_"+toString(j)+"_NO_EXECUTE"   ,
    326340                                dest, "in_RENAME_IN_"+toString(i)+"_"+toString(j)+"_NO_EXECUTE"   );
     341//          PORT_MAP(_component,src , "in_RENAME_IN_"+toString(i)+"_"+toString(j)+"_HAVE_EVENT"   ,
     342//                              dest, "in_RENAME_IN_"+toString(i)+"_"+toString(j)+"_HAVE_EVENT"   );
     343            PORT_MAP(_component,src , "in_RENAME_IN_"+toString(i)+"_"+toString(j)+"_LAST_EVENT"   ,
     344                                dest, "in_RENAME_IN_"+toString(i)+"_"+toString(j)+"_LAST_EVENT"   );
    327345            PORT_MAP(_component,src , "in_RENAME_IN_"+toString(i)+"_"+toString(j)+"_IS_DELAY_SLOT",
    328346                                dest, "in_RENAME_IN_"+toString(i)+"_"+toString(j)+"_IS_DELAY_SLOT");
     
    387405          PORT_MAP(_component,src ,"out_RENAME_OUT_"+toString(i)+"_EXCEPTION_USE",
    388406                              dest,"out_INSERT_"    +toString(i)+"_EXCEPTION_USE");
     407          PORT_MAP(_component,src ,"out_RENAME_OUT_"+toString(i)+"_LAST_EVENT",
     408                              dest,"out_INSERT_"    +toString(i)+"_LAST_EVENT");
    389409
    390410          dest = _name+"_register_translation_unit";
     
    456476                                       dest,"retire_event_"+toString(i)+"_"+toString(j));
    457477#endif     
    458             PORT_MAP(_component,src , "in_RETIRE_EVENT_"+toString(i)+"_"+toString(j)+"_FLUSH",
    459                                 dest, "in_RETIRE_EVENT_"+toString(i)+"_"+toString(j)+"_FLUSH");
     478//          PORT_MAP(_component,src , "in_RETIRE_EVENT_"+toString(i)+"_"+toString(j)+"_FLUSH",
     479//                                 dest, "in_RETIRE_EVENT_"+toString(i)+"_"+toString(j)+"_FLUSH");
    460480            PORT_MAP(_component,src , "in_RETIRE_EVENT_"+toString(i)+"_"+toString(j)+"_STOP",
    461481                                dest, "in_RETIRE_EVENT_"+toString(i)+"_"+toString(j)+"_STOP");
     
    663683                                dest, "in_RETIRE_EVENT_"+toString(i)+"_"+toString(j)+"_STATE");
    664684          }
     685
     686
     687#ifdef DEBUG_TEST
     688      {
     689        dest = _name;
     690#ifdef POSITION
     691        _component->interface_map (src ,"info"
     692                                   dest,"info");
     693#endif
     694       
     695        PORT_MAP(_component,src , "in_INFO_ROB_EMPTY",
     696                            dest, "in_INFO_ROB_EMPTY");
     697      }
     698#endif
    665699    }
    666700
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/src/Rename_unit_deallocation.cpp

    r122 r123  
    3636        DELETE2_SIGNAL( in_RENAME_IN_OPERATION         ,_param->_nb_front_end, _param->_nb_inst_decod[it1],_param->_size_operation             );
    3737        DELETE2_SIGNAL( in_RENAME_IN_NO_EXECUTE        ,_param->_nb_front_end, _param->_nb_inst_decod[it1],1                                   );
     38//      DELETE2_SIGNAL( in_RENAME_IN_HAVE_EVENT        ,_param->_nb_front_end, _param->_nb_inst_decod[it1],1                                   );
     39        DELETE2_SIGNAL( in_RENAME_IN_LAST_EVENT        ,_param->_nb_front_end, _param->_nb_inst_decod[it1],1                                   );
    3840        DELETE2_SIGNAL( in_RENAME_IN_IS_DELAY_SLOT     ,_param->_nb_front_end, _param->_nb_inst_decod[it1],1                                   );
    3941#ifdef DEBUG
     
    6466        DELETE1_SIGNAL(out_INSERT_OPERATION            ,_param->_nb_inst_insert,_param->_size_operation             );
    6567        DELETE1_SIGNAL(out_INSERT_NO_EXECUTE           ,_param->_nb_inst_insert,1                                   );
     68        DELETE1_SIGNAL(out_INSERT_LAST_EVENT           ,_param->_nb_inst_insert,1                                   );
    6669        DELETE1_SIGNAL(out_INSERT_IS_DELAY_SLOT        ,_param->_nb_inst_insert,1                                   );
    6770#ifdef DEBUG
     
    129132        DELETE2_SIGNAL(out_RETIRE_EVENT_ACK            ,_param->_nb_front_end, _param->_nb_context[it1],1);
    130133        DELETE2_SIGNAL( in_RETIRE_EVENT_STATE          ,_param->_nb_front_end, _param->_nb_context[it1],_param->_size_event_state);
    131         DELETE2_SIGNAL( in_RETIRE_EVENT_FLUSH          ,_param->_nb_front_end, _param->_nb_context[it1],1);
     134//         DELETE2_SIGNAL( in_RETIRE_EVENT_FLUSH          ,_param->_nb_front_end, _param->_nb_context[it1],1);
    132135        DELETE2_SIGNAL( in_RETIRE_EVENT_STOP           ,_param->_nb_front_end, _param->_nb_context[it1],1);
    133136       
    134137        DELETE2_SIGNAL(in_SPR_READ_SR                  ,_param->_nb_front_end, _param->_nb_context[it1],_param->_size_spr);
     138
     139#ifdef DEBUG_TEST
     140        DELETE0_SIGNAL( in_INFO_ROB_EMPTY  ,1);
     141#endif
    135142      }
    136143    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Special_Register_unit/src/Special_Register_unit.cpp

    r88 r123  
    3939    usage_environment(_usage);
    4040
    41 #if DEBUG_Core == true
    42     log_printf(INFO,Core,FUNCTION,_("<%s> Parameters"),_name.c_str());
     41// #if DEBUG_Core == true
     42//     log_printf(INFO,Core,FUNCTION,_("<%s> Parameters"),_name.c_str());
    4343
    44     std::cout << *param << std::endl;
    45 #endif   
     44//     std::cout << *param << std::endl;
     45// #endif   
    4646
    4747    log_printf(INFO,Special_Register_unit,FUNCTION,_("<%s> : Allocation"),_name.c_str());
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Special_Register_unit/src/Special_Register_unit_genMealy_spr_access.cpp

    r98 r123  
    2424    log_function(Special_Register_unit,FUNCTION,_name.c_str());
    2525
     26    if (PORT_READ(in_NRESET))
     27      {
    2628    // ===================================================================
    2729    // =====[ SPR_ACCESS ]================================================
     
    7274          PORT_WRITE(out_SPR_ACCESS_INVALID [i], not valid);
    7375        }
     76      }
     77//     else
     78//       {
     79
     80//       }
    7481   
    7582    log_end(Special_Register_unit,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Special_Register_unit/src/Special_Register_unit_genMoore.cpp

    r98 r123  
    2424    log_function(Special_Register_unit,FUNCTION,_name.c_str());
    2525
     26//     if (PORT_READ(in_NRESET))
     27      {
    2628    // ===================================================================
    2729    // =====[ SPR_READ ]==================================================
     
    3436//        PORT_WRITE(out_SPR_READ_SR [i][j],sr->read());
    3537//      }
     38      }
    3639
    3740    log_end(Special_Register_unit,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/include/OOO_Engine.h

    r122 r123  
    7676  public    : SC_IN (Toperation_t      )  ***  in_RENAME_OPERATION                 ;//[nb_front_end][nb_inst_decod]
    7777  public    : SC_IN (Tcontrol_t        )  ***  in_RENAME_NO_EXECUTE                ;//[nb_front_end][nb_inst_decod]
     78//public    : SC_IN (Tcontrol_t        )  ***  in_RENAME_HAVE_EVENT                ;//[nb_front_end][nb_inst_decod]
     79  public    : SC_IN (Tcontrol_t        )  ***  in_RENAME_LAST_EVENT                ;//[nb_front_end][nb_inst_decod]
    7880  public    : SC_IN (Tcontrol_t        )  ***  in_RENAME_IS_DELAY_SLOT             ;//[nb_front_end][nb_inst_decod]
    7981#ifdef DEBUG
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/src/OOO_Engine.cpp

    r88 r123  
    3838    usage_environment(_usage);
    3939
    40 #if DEBUG_OOO_Engine == true
    41     log_printf(TRACE,OOO_Engine,FUNCTION,_("<%s> Parameters"),_name.c_str());
     40// #if DEBUG_OOO_Engine == true
     41//     log_printf(TRACE,OOO_Engine,FUNCTION,_("<%s> Parameters"),_name.c_str());
    4242
    43     std::cout << *param << std::endl;
    44 #endif
     43//     std::cout << *param << std::endl;
     44// #endif
    4545
    4646    log_printf(INFO,OOO_Engine,FUNCTION,_("<%s> Allocation"),_name.c_str());
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/src/OOO_Engine_allocation.cpp

    r122 r123  
    6565      _ALLOC2_SIGNAL_IN ( in_RENAME_OPERATION                 ,"OPERATION"                 ,Toperation_t      ,_param->_size_operation              ,_param->_nb_front_end,_param->_nb_inst_decod[it1]);
    6666      _ALLOC2_SIGNAL_IN ( in_RENAME_NO_EXECUTE                ,"NO_EXECUTE"                ,Tcontrol_t        ,1                                    ,_param->_nb_front_end,_param->_nb_inst_decod[it1]);
     67//    _ALLOC2_SIGNAL_IN ( in_RENAME_HAVE_EVENT                ,"HAVE_EVENT"                ,Tcontrol_t        ,1                                    ,_param->_nb_front_end,_param->_nb_inst_decod[it1]);
     68      _ALLOC2_SIGNAL_IN ( in_RENAME_LAST_EVENT                ,"LAST_EVENT"                ,Tcontrol_t        ,1                                    ,_param->_nb_front_end,_param->_nb_inst_decod[it1]);
    6769      _ALLOC2_SIGNAL_IN ( in_RENAME_IS_DELAY_SLOT             ,"IS_DELAY_SLOT"             ,Tcontrol_t        ,1                                    ,_param->_nb_front_end,_param->_nb_inst_decod[it1]);
    6870#ifdef DEBUG
     
    441443                    PORT_MAP(_component,src , "in_RENAME_IN_"+toString(x)+"_"+toString(k)+"_NO_EXECUTE"   ,
    442444                                        dest, "in_RENAME_"   +toString(j)+"_"+toString(k)+"_NO_EXECUTE"   );
     445//                     PORT_MAP(_component,src , "in_RENAME_IN_"+toString(x)+"_"+toString(k)+"_HAVE_EVENT"   ,
     446//                                         dest, "in_RENAME_"   +toString(j)+"_"+toString(k)+"_HAVE_EVENT"   );
     447                    PORT_MAP(_component,src , "in_RENAME_IN_"+toString(x)+"_"+toString(k)+"_LAST_EVENT"   ,
     448                                        dest, "in_RENAME_"   +toString(j)+"_"+toString(k)+"_LAST_EVENT"   );
    443449                    PORT_MAP(_component,src , "in_RENAME_IN_"+toString(x)+"_"+toString(k)+"_IS_DELAY_SLOT",
    444450                                        dest, "in_RENAME_"   +toString(j)+"_"+toString(k)+"_IS_DELAY_SLOT");
     
    511517            COMPONENT_MAP(_component,src ,"out_INSERT_"+toString(j)                +"_IS_DELAY_SLOT" ,
    512518                                     dest, "in_INSERT_"+toString(i)+"_"+toString(j)+"_IS_DELAY_SLOT" );
     519//             COMPONENT_MAP(_component,src ,"out_INSERT_"+toString(j)                +"_HAVE_EVENT"    ,
     520//                                      dest, "in_INSERT_"+toString(i)+"_"+toString(j)+"_HAVE_EVENT"    );
     521            COMPONENT_MAP(_component,src ,"out_INSERT_"+toString(j)                +"_LAST_EVENT"    ,
     522                                     dest, "in_INSERT_"+toString(i)+"_"+toString(j)+"_LAST_EVENT"    );
    513523#ifdef DEBUG
    514524            COMPONENT_MAP(_component,src ,"out_INSERT_"+toString(j)                +"_ADDRESS"       ,
     
    682692                    COMPONENT_MAP(_component,src , "in_RETIRE_EVENT_"+toString(x)+"_"+toString(k)+"_STATE",
    683693                                             dest,"out_RETIRE_EVENT_"+toString(j)+"_"+toString(k)+"_STATE");
    684                     COMPONENT_MAP(_component,src , "in_RETIRE_EVENT_"+toString(x)+"_"+toString(k)+"_FLUSH",
    685                                              dest,"out_RETIRE_EVENT_"+toString(j)+"_"+toString(k)+"_FLUSH");
     694//                     COMPONENT_MAP(_component,src , "in_RETIRE_EVENT_"+toString(x)+"_"+toString(k)+"_FLUSH",
     695//                                              dest,"out_RETIRE_EVENT_"+toString(j)+"_"+toString(k)+"_FLUSH");
    686696                    COMPONENT_MAP(_component,src , "in_RETIRE_EVENT_"+toString(x)+"_"+toString(k)+"_STOP",
    687697                                             dest,"out_RETIRE_EVENT_"+toString(j)+"_"+toString(k)+"_STOP");
     
    715725              }
    716726        }
     727
     728        // ~~~~~[ Interface : "info" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     729#ifdef DEBUG_TEST
     730        {
     731          dest = _name+"_commit_unit";
     732                   
     733#ifdef POSITION
     734          _component->interface_map (src ,"info",
     735                                     dest,"info");
     736#endif
     737          COMPONENT_MAP(_component,src , "in_INFO_ROB_EMPTY",
     738                                   dest,"out_INFO_ROB_EMPTY");
     739        }
     740#endif
    717741      }
    718742
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/src/OOO_Engine_deallocation.cpp

    r122 r123  
    3535        DELETE2_SIGNAL( in_RENAME_OPERATION                 ,_param->_nb_front_end,_param->_nb_inst_decod[it1],_param->_size_operation              );
    3636        DELETE2_SIGNAL( in_RENAME_NO_EXECUTE                ,_param->_nb_front_end,_param->_nb_inst_decod[it1],1                                    );
     37//      DELETE2_SIGNAL( in_RENAME_HAVE_EVENT                ,_param->_nb_front_end,_param->_nb_inst_decod[it1],1                                    );
     38        DELETE2_SIGNAL( in_RENAME_LAST_EVENT                ,_param->_nb_front_end,_param->_nb_inst_decod[it1],1                                    );
    3739        DELETE2_SIGNAL( in_RENAME_IS_DELAY_SLOT             ,_param->_nb_front_end,_param->_nb_inst_decod[it1],1                                    );
    3840#ifdef DEBUG
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/src/Core.cpp

    r88 r123  
    3636    usage_environment(_usage);
    3737
    38 #if DEBUG_Core == true
    39     log_printf(INFO,Core,FUNCTION,_("<%s> Parameters"),_name.c_str());
     38// #if DEBUG_Core == true
     39//     log_printf(INFO,Core,FUNCTION,_("<%s> Parameters"),_name.c_str());
    4040
    41     std::cout << *param << std::endl;
    42 #endif   
     41//     std::cout << *param << std::endl;
     42// #endif   
    4343
    4444    log_printf(INFO,Core,FUNCTION,_("<%s> Allocation"),_name.c_str());
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/src/Core_allocation.cpp

    r122 r123  
    468468              COMPONENT_MAP(_component,src , "in_RENAME_"+toString(j)+"_"+toString(k)+"_NO_EXECUTE"   ,
    469469                                       dest,"out_DECOD_"                 +toString(k)+"_NO_EXECUTE"   );
     470//               COMPONENT_MAP(_component,src , "in_RENAME_"+toString(j)+"_"+toString(k)+"_HAVE_EVENT"   ,
     471//                                        dest,"out_DECOD_"                 +toString(k)+"_HAVE_EVENT"   );
     472              COMPONENT_MAP(_component,src , "in_RENAME_"+toString(j)+"_"+toString(k)+"_LAST_EVENT"   ,
     473                                       dest,"out_DECOD_"                 +toString(k)+"_LAST_EVENT"   );
    470474              COMPONENT_MAP(_component,src , "in_RENAME_"+toString(j)+"_"+toString(k)+"_IS_DELAY_SLOT",
    471475                                       dest,"out_DECOD_"                 +toString(k)+"_IS_DELAY_SLOT");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/src/Core_deallocation.cpp

    r122 r123  
    5959    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
    6060
    61     delete    _component_glue;
    62     delete    _component_dcache_access;
    63     delete    _component_icache_access;
    64     for (uint32_t i=0; i<_param->_nb_execute_loop; ++i)
    65     delete    _component_execute_loop [i];
    66     delete [] _component_execute_loop;
    67     for (uint32_t i=0; i<_param->_nb_ooo_engine; ++i)
    68     delete    _component_ooo_engine [i];
    69     delete [] _component_ooo_engine;
    70     for (uint32_t i=0; i<_param->_nb_front_end; ++i)
    71     delete    _component_front_end [i];
    72     delete [] _component_front_end;
     61    delete _component;
    7362
    74     delete _component;
     63//     delete    _component_glue;
     64//     delete    _component_dcache_access;
     65//     delete    _component_icache_access;
     66//     for (uint32_t i=0; i<_param->_nb_execute_loop; ++i)
     67//     delete    _component_execute_loop [i];
     68//     delete [] _component_execute_loop;
     69//     for (uint32_t i=0; i<_param->_nb_ooo_engine; ++i)
     70//     delete    _component_ooo_engine [i];
     71//     delete [] _component_ooo_engine;
     72//     for (uint32_t i=0; i<_param->_nb_front_end; ++i)
     73//     delete    _component_front_end [i];
     74//     delete [] _component_front_end;
    7575
    7676    log_end(Core,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/src/Parameters.cpp

    r122 r123  
    21812181    log_begin(Core,FUNCTION);
    21822182
    2183     for (uint32_t i=0; i<_nb_front_end; ++i)
    2184     delete    _param_front_end [i];
    2185     delete [] _param_front_end;
    2186     for (uint32_t i=0; i<_nb_ooo_engine; ++i)
    2187     delete    _param_ooo_engine [i];
    2188     delete [] _param_ooo_engine;
    2189     for (uint32_t i=0; i<_nb_execute_loop; ++i)
    2190     delete    _param_execute_loop [i];
    2191     delete [] _param_execute_loop;
    2192     delete    _param_icache_access;
    2193     delete    _param_dcache_access;
    2194     delete    _param_glue;
     2183//     for (uint32_t i=0; i<_nb_front_end; ++i)
     2184//     delete    _param_front_end [i];
     2185//     delete [] _param_front_end;
     2186//     for (uint32_t i=0; i<_nb_ooo_engine; ++i)
     2187//     delete    _param_ooo_engine [i];
     2188//     delete [] _param_ooo_engine;
     2189//     for (uint32_t i=0; i<_nb_execute_loop; ++i)
     2190//     delete    _param_execute_loop [i];
     2191//     delete [] _param_execute_loop;
     2192//     delete    _param_icache_access;
     2193//     delete    _param_dcache_access;
     2194//     delete    _param_glue;
    21952195
    21962196    DELETE3(_dcache_access_translate_load_store_unit_to_thread      ,_nb_execute_loop,_execute_loop_nb_load_store_unit[it1],_dcache_access_nb_context[it1]);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Comparator/src/Comparator_genMealy.cpp

    r113 r123  
    2121    log_begin(Comparator,FUNCTION);
    2222
     23    if (PORT_READ(in_NRESET))
     24      {
    2325    Tcontrol_t test;
    2426    Tdata_t data_0 = PORT_READ(in_COMPARE_DATA_0);
     
    7173
    7274    PORT_WRITE(out_COMPARE_TEST,test);
     75      }
    7376
    7477    log_end(Comparator,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Counter/src/Counter_genMealy.cpp

    r113 r123  
    1818    log_printf(FUNC,Counter,"genMealy","Begin");
    1919
     20    if (PORT_READ(in_NRESET))
    2021    for (uint32_t i=0; i<_param->_nb_port; i++)
    2122      {
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/src/Queue_genMoore.cpp

    r101 r123  
    2020    log_printf(FUNC,Queue,FUNCTION,"Begin");
    2121
     22    if (PORT_READ(in_NRESET))
     23      {
    2224    //---------------------------------------------
    2325    // Output
     
    2628    internal_RETIRE_VAL = not _queue_control->empty();
    2729   
    28     PORT_WRITE(out_INSERT_ACK , internal_INSERT_ACK);
    29     PORT_WRITE(out_RETIRE_VAL , internal_RETIRE_VAL);
    3030    PORT_WRITE(out_RETIRE_DATA,_queue_data[(*_queue_control)[0]]);
    3131
     
    4949    if (_param->_have_port_ptr_read )
    5050    PORT_WRITE(out_PTR_READ , _queue_control->ptr_pop ());
     51      }
     52    else
     53      {
     54        // Reset
     55        internal_INSERT_ACK = 0;
     56        internal_RETIRE_VAL = 0;
     57
     58        for (uint32_t i=0; i<_param->_nb_port_slot; ++i)
     59          PORT_WRITE(out_SLOT_VAL  [i], 0);
     60      }
     61
     62    // Write output
     63    PORT_WRITE(out_INSERT_ACK , internal_INSERT_ACK);
     64    PORT_WRITE(out_RETIRE_VAL , internal_RETIRE_VAL);
     65
    5166
    5267    log_printf(FUNC,Queue,FUNCTION,"End");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic.cpp

    r98 r123  
    3333    log_printf(FUNC,RegisterFile_Monolithic,"RegisterFile_Monolithic","Begin");
    3434
    35 #if DEBUG_RegisterFile_Monolithic == true
    36     log_printf(INFO,RegisterFile_Monolithic,FUNCTION,_("<%s> Parameters"),_name.c_str());
     35// #if DEBUG_RegisterFile_Monolithic == true
     36//     log_printf(INFO,RegisterFile_Monolithic,FUNCTION,_("<%s> Parameters"),_name.c_str());
    3737
    38     std::cout << *param << std::endl;
    39 #endif   
     38//     std::cout << *param << std::endl;
     39// #endif   
    4040
    4141    log_printf(INFO,RegisterFile_Monolithic,"RegisterFile_Monolithic","Allocation");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic_genMealy_read.cpp

    r106 r123  
    2222    log_function(RegisterFile_Monolithic,FUNCTION,_name.c_str());
    2323
     24    if (PORT_READ(in_NRESET))
     25      {
    2426    for (uint32_t i=0; i<_param->_nb_port_read; i++)
    2527      {
     
    7375        PORT_WRITE(out_READ_WRITE_RDATA[i],data);
    7476      }
     77      }
    7578
    7679    log_end(RegisterFile_Monolithic,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked.cpp

    r88 r123  
    3434    log_printf(FUNC,RegisterFile_Multi_Banked,FUNCTION,"Begin");
    3535
    36 #if DEBUG_RegisterFile_Multi_Banked == true
    37     log_printf(INFO,RegisterFile_Multi_Banked,FUNCTION,_("<%s> Parameters"),_name.c_str());
     36// #if DEBUG_RegisterFile_Multi_Banked == true
     37//     log_printf(INFO,RegisterFile_Multi_Banked,FUNCTION,_("<%s> Parameters"),_name.c_str());
    3838
    39     std::cout << *param << std::endl;
    40 #endif   
     39//     std::cout << *param << std::endl;
     40// #endif   
    4141
    4242    log_printf(INFO,RegisterFile_Multi_Banked,FUNCTION,"Allocation");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_full_crossbar_genMealy_read.cpp

    r106 r123  
    2323    log_begin(RegisterFile_Multi_Banked,FUNCTION);
    2424    log_function(RegisterFile_Multi_Banked,FUNCTION,_name.c_str());
     25
     26    if (PORT_READ(in_NRESET))
     27      {
    2528
    2629    bool read_port_use [_param->_nb_bank][_param->_nb_port_read_by_bank];
     
    7982        PORT_WRITE(out_READ_ACK [i], ack);
    8083      }
     84      }
     85    else
     86      for (uint32_t i=0; i<_param->_nb_port_read; i++)
     87        PORT_WRITE(out_READ_ACK [i], false);
    8188
    8289    log_end(RegisterFile_Multi_Banked,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_full_crossbar_genMealy_write.cpp

    r106 r123  
    2424    log_function(RegisterFile_Multi_Banked,FUNCTION,_name.c_str());
    2525
     26    if (PORT_READ(in_NRESET))
     27      {
    2628    bool write_port_use [_param->_nb_bank][_param->_nb_port_write_by_bank];
    2729
     
    7981        PORT_WRITE(out_WRITE_ACK [i], ack);
    8082      }
     83      }
     84    else
     85      {
     86        for (uint32_t i=0; i<_param->_nb_port_write; i++)
     87          {
     88            internal_WRITE_VAL [i] = 0;
     89            PORT_WRITE(out_WRITE_ACK [i], 0);
     90          }
     91      }
    8192
    8293    log_end(RegisterFile_Multi_Banked,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_partial_crossbar_genMealy_read.cpp

    r106 r123  
    2424    log_function(RegisterFile_Multi_Banked,FUNCTION,_name.c_str());
    2525
     26    if (PORT_READ(in_NRESET))
     27      {
    2628    bool read_port_use [_param->_nb_bank][_param->_nb_port_read_by_bank];
    2729
     
    8183        PORT_WRITE(out_READ_ACK [i], ack);
    8284      }
    83 
     85      }
     86    else
     87      {
     88        for (uint32_t i=0; i<_param->_nb_port_read; i++)
     89          PORT_WRITE(out_READ_ACK [i],0);
     90      }
    8491    log_end(RegisterFile_Multi_Banked,FUNCTION);
    8592  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_partial_crossbar_genMealy_write.cpp

    r106 r123  
    2424    log_function(RegisterFile_Multi_Banked,FUNCTION,_name.c_str());
    2525
     26    if (PORT_READ(in_NRESET))
     27      {
    2628    bool write_port_use [_param->_nb_bank][_param->_nb_port_write_by_bank];
    2729    for (uint32_t i=0; i<_param->_nb_bank; i++)
     
    8183        PORT_WRITE(out_WRITE_ACK [i], ack);
    8284      }
     85      }
     86    else
     87      {
     88        for (uint32_t i=0; i<_param->_nb_port_write; i++)
     89          {
     90            internal_WRITE_VAL [i] = 0;
     91            PORT_WRITE(out_WRITE_ACK [i], 0);
     92          }
     93      }
    8394
    8495    log_end(RegisterFile_Multi_Banked,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter.cpp

    r88 r123  
    3232  {
    3333
    34 #if DEBUG_Shifter == true
    35     log_printf(INFO,Shifter,FUNCTION,_("<%s> Parameters"),_name.c_str());
     34// #if DEBUG_Shifter == true
     35//     log_printf(INFO,Shifter,FUNCTION,_("<%s> Parameters"),_name.c_str());
    3636
    37     std::cout << *param << std::endl;
    38 #endif   
     37//     std::cout << *param << std::endl;
     38// #endif   
    3939
    4040    allocation ();
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_genMealy_shift.cpp

    r82 r123  
    1818  void Shifter::genMealy_shift (void)
    1919  {
     20    if (PORT_READ(in_NRESET))
    2021    for (uint32_t i=0; i<_param->_nb_port; i++)
    2122      {
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Sort/src/Sort.cpp

    r88 r123  
    3535    log_printf(FUNC,Sort,FUNCTION,"Begin");
    3636
    37 #if DEBUG_Sort == true
    38     log_printf(INFO,Sort,FUNCTION,_("<%s> Parameters"),_name.c_str());
     37// #if DEBUG_Sort == true
     38//     log_printf(INFO,Sort,FUNCTION,_("<%s> Parameters"),_name.c_str());
    3939
    40     std::cout << *param << std::endl;
    41 #endif   
     40//     std::cout << *param << std::endl;
     41// #endif   
    4242
    4343    log_printf(INFO,Sort,FUNCTION,"Allocation");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Sort/src/Sort_genMealy.cpp

    r81 r123  
    2121    log_printf(FUNC,Sort,FUNCTION,"Begin");
    2222
     23    if (PORT_READ(in_NRESET))
     24      {
    2325    sort_t array [_param->_nb_input];
    2426
     
    4446        PORT_WRITE (out_OUTPUT_DATA  [i],array[i].data );
    4547      }
     48      }
    4649
    4750    log_printf(FUNC,Sort,FUNCTION,"End");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Victim/Victim_Pseudo_LRU/src/Victim_Pseudo_LRU.cpp

    r88 r123  
    3232    log_printf(FUNC,Victim_Pseudo_LRU,"Victim_Pseudo_LRU","Begin");
    3333
    34 #if DEBUG_Victim_Pseudo_LRU == true
    35     log_printf(INFO,Victim_Pseudo_LRU,FUNCTION,_("<%s> Parameters"),_name.c_str());
     34// #if DEBUG_Victim_Pseudo_LRU == true
     35//     log_printf(INFO,Victim_Pseudo_LRU,FUNCTION,_("<%s> Parameters"),_name.c_str());
    3636
    37     std::cout << *param << std::endl;
    38 #endif   
     37//     std::cout << *param << std::endl;
     38// #endif   
    3939
    4040    log_printf(TRACE,Victim_Pseudo_LRU,"Victim_Pseudo_LRU","Allocation");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Victim/Victim_Pseudo_LRU/src/Victim_Pseudo_LRU_genMealy.cpp

    r88 r123  
    1717  void Victim_Pseudo_LRU::genMealy (void)
    1818  {
     19    if (PORT_READ(in_NRESET))
    1920    for (uint32_t i=0; i<_param->_nb_access; i++)
    2021      {
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Victim/Victim_Pseudo_LRU/src/Victim_Pseudo_LRU_transition.cpp

    r81 r123  
    2222          {
    2323            Taddress_t address = (_param->_size_table>1)?PORT_READ(in_ACCESS_ADDRESS[i]):0;
    24             Tentity_t  entity;
     24            Tentity_t  entity  = 0;
    2525
    2626            if (PORT_READ(in_ACCESS_HIT [i]))
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Types.h

    r118 r123  
    112112      PREDICTOR_CUSTOM            // Not predefined scheme
    113113    } Tpredictor_t;
     114
     115  typedef enum
     116    {
     117      MANAGE_EVENT_WAIT_ALL,
     118      MANAGE_EVENT_WAIT_DECODE,
     119      MANAGE_EVENT_NO_WAIT
     120    } Tmanage_event_t;
    114121
    115122  //--------------------------------------------------[ instruction ]-----
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Version.h

    r122 r123  
    1010#define MORPHEO_MAJOR_VERSION "0"
    1111#define MORPHEO_MINOR_VERSION "2"
    12 #define MORPHEO_REVISION      "122"
     12#define MORPHEO_REVISION      "123"
    1313#define MORPHEO_CODENAME      "Castor"
    1414
    15 #define MORPHEO_DATE_DAY      "03
     15#define MORPHEO_DATE_DAY      "08
    1616#define MORPHEO_DATE_MONTH    "06"
    1717#define MORPHEO_DATE_YEAR     "2009"
Note: See TracChangeset for help on using the changeset viewer.