#ifndef morpheo_behavioural_core_multi_ooo_engine_ooo_engine_rename_unit_Parameters_h
#define morpheo_behavioural_core_multi_ooo_engine_ooo_engine_rename_unit_Parameters_h

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

#include "Behavioural/include/Parameters.h"
#include "Common/include/Debug.h"

#include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_select/include/Parameters.h"
#include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/include/Parameters.h"
#include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Load_Store_pointer_unit/include/Parameters.h"
#include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_unit_Glue/include/Parameters.h"

namespace morpheo {
namespace behavioural {
namespace core {
namespace multi_ooo_engine {
namespace ooo_engine {
namespace rename_unit {


  class Parameters : public morpheo::behavioural::Parameters
  {
    //-----[ fields ]------------------------------------------------------------
  public : uint32_t             _nb_front_end                     ;
  public : uint32_t           * _nb_context                       ;//[nb_front_end]
  public : uint32_t           * _nb_inst_decod                    ;//[nb_front_end]
  public : uint32_t             _nb_inst_insert                   ;
  public : uint32_t             _nb_inst_retire                   ;
  public : uint32_t             _nb_load_store_queue              ;
  public : uint32_t           * _size_store_queue                 ;//[nb_load_store_queue]
  public : uint32_t           * _size_load_queue                  ;//[nb_load_store_queue]
  public : uint32_t          ** _link_load_store_unit_with_thread ;//[nb_front_end][nb_context]
  public : Tpriority_t          _rename_select_priority           ;
  public : Tload_balancing_t    _rename_select_load_balancing     ;
  public : uint32_t             _rename_select_nb_front_end_select;
  public : uint32_t             _max_branch_speculated            ;
//public : uint32_t             _size_general_data                ;
  public : uint32_t             _nb_general_register              ;
  public : uint32_t             _nb_special_register              ;
  public : uint32_t             _nb_reg_free                      ;
  public : uint32_t             _nb_bank                          ;
  public : uint32_t             _size_read_counter                ;
								  
//public : uint32_t             _size_front_end_id                ;
//public : uint32_t             _size_context_id                  ;    
//public : uint32_t             _size_store_queue_ptr             ;
//public : uint32_t             _size_load_queue_ptr              ;
//public : uint32_t             _size_general_register            ;
//public : uint32_t             _size_special_register            ;
//public : uint32_t             _size_depth                       ;

//public : uint32_t             _have_port_front_end_id           ;
//public : uint32_t             _have_port_context_id             ;
//public : uint32_t             _have_port_load_queue_ptr         ;
//public : bool                 _have_port_depth                  ;

  public : morpheo::behavioural::core::multi_ooo_engine::ooo_engine::rename_unit::rename_select            ::Parameters * _param_rename_select            ;
  public : morpheo::behavioural::core::multi_ooo_engine::ooo_engine::rename_unit::register_translation_unit::Parameters * _param_register_translation_unit;
  public : morpheo::behavioural::core::multi_ooo_engine::ooo_engine::rename_unit::load_store_pointer_unit  ::Parameters * _param_load_store_pointer_unit  ;
  public : morpheo::behavioural::core::multi_ooo_engine::ooo_engine::rename_unit::rename_unit_glue         ::Parameters * _param_glue                     ;

    //-----[ methods ]-----------------------------------------------------------
  public : Parameters  (uint32_t             nb_front_end                     ,
			uint32_t           * nb_context                       ,
			uint32_t           * nb_inst_decod                    ,
			uint32_t             nb_inst_insert                   ,
			uint32_t             nb_inst_retire                   ,
			uint32_t             nb_load_store_queue              ,
			uint32_t           * size_store_queue                 ,
			uint32_t           * size_load_queue                  ,
			uint32_t          ** link_load_store_unit_with_thread ,
			Tpriority_t          rename_select_priority           ,
			Tload_balancing_t    rename_select_load_balancing     ,
			uint32_t             rename_select_nb_front_end_select,
			uint32_t             max_branch_speculated            ,
			uint32_t             size_general_data                ,
			uint32_t             nb_general_register              ,
			uint32_t             nb_special_register              ,
			uint32_t             nb_reg_free                      ,
			uint32_t             nb_bank                          ,
			uint32_t             size_read_counter                ,
                        bool                 is_toplevel=false
                        );
//   public : Parameters  (Parameters & param) ;
  public : ~Parameters () ;

  public :        void            copy       (void);

  public :        Parameters_test msg_error  (void);

  public :        std::string     print      (uint32_t depth);
  public : friend std::ostream&   operator<< (std::ostream& output_stream,
					      morpheo::behavioural::core::multi_ooo_engine::ooo_engine::rename_unit::Parameters & x);
  };

}; // end namespace rename_unit
}; // end namespace ooo_engine
}; // end namespace multi_ooo_engine
}; // end namespace core

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

#endif
