/*
 * $Id: Parameters.cpp 88 2008-12-10 18:31:39Z rosiere $
 *
 * [ Description ]
 * 
 */

#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/include/Parameters.h"

namespace morpheo {
namespace behavioural {
namespace core {
namespace multi_execute_loop {
namespace execute_loop {
namespace register_unit {
namespace register_unit_glue {


#undef  FUNCTION
#define FUNCTION "Register_unit_Glue::Parameters"
  Parameters::Parameters (uint32_t   nb_ooo_engine        ,
			  uint32_t   size_general_data    ,
			  uint32_t   size_special_data    ,
			  uint32_t   nb_gpr_read          ,
			  uint32_t   nb_spr_read          ,    
			  uint32_t   nb_gpr_write         ,
			  uint32_t   nb_spr_write         ,
			  uint32_t * nb_inst_insert_rob   ,
			  uint32_t * nb_inst_retire_rob   ,
                          bool       is_toplevel          )
  {
    log_printf(FUNC,Register_unit_Glue,FUNCTION,"Begin");
    
    _nb_ooo_engine           = nb_ooo_engine     ;
    _nb_gpr_read             = nb_gpr_read       ;
    _nb_spr_read             = nb_spr_read       ;    
    _nb_gpr_write            = nb_gpr_write      ;
    _nb_spr_write            = nb_spr_write      ;
    _nb_inst_insert_rob      = nb_inst_insert_rob;
    _nb_inst_retire_rob      = nb_inst_retire_rob;

    test();

    if (is_toplevel)
      {
        _size_ooo_engine_id      = log2(nb_ooo_engine);
        _size_general_data       = size_general_data ;
        _size_special_data       = size_special_data ;
        
        _have_port_ooo_engine_id = _size_ooo_engine_id > 0;

        copy();
      }

    log_printf(FUNC,Register_unit_Glue,FUNCTION,"End");
  };
  
// #undef  FUNCTION
// #define FUNCTION "Register_unit_Glue::Parameters (copy)"
//   Parameters::Parameters (Parameters & param):
//     _nb_ooo_engine        (param._nb_ooo_engine    ),
//     _size_general_data    (param._size_general_data),
//     _size_special_data    (param._size_special_data),
//     _nb_gpr_read          (param._nb_gpr_read      ),
//     _nb_spr_read          (param._nb_spr_read      ),    
//     _nb_gpr_write         (param._nb_gpr_write     ),
//     _nb_spr_write         (param._nb_spr_write     ),
//     _nb_inst_insert_rob   (param._nb_inst_insert_rob),
//     _nb_inst_retire_rob   (param._nb_inst_retire_rob),
//     _have_port_ooo_engine_id (param._have_port_ooo_engine_id)
//   {
//     log_printf(FUNC,Register_unit_Glue,FUNCTION,"Begin");
//     test();
//     log_printf(FUNC,Register_unit_Glue,FUNCTION,"End");
//   };

#undef  FUNCTION
#define FUNCTION "Register_unit_Glue::~Parameters"
  Parameters::~Parameters (void) 
  {
    log_printf(FUNC,Register_unit_Glue,FUNCTION,"Begin");
    log_printf(FUNC,Register_unit_Glue,FUNCTION,"End");
  };

#undef  FUNCTION
#define FUNCTION "Register_unit_Glue::copy"
  void Parameters::copy (void) 
  {
    log_printf(FUNC,Register_unit_Glue,FUNCTION,"Begin");
    log_printf(FUNC,Register_unit_Glue,FUNCTION,"End");
  };

}; // end namespace register_unit_glue
}; // end namespace register_unit
}; // end namespace execute_loop
}; // end namespace multi_execute_loop
}; // end namespace core

}; // end namespace behavioural
}; // end namespace morpheo              
