#ifndef morpheo_behavioural_core_multi_execute_loop_execute_loop_multi_read_unit_read_unit_reservation_station_Parameters_h
#define morpheo_behavioural_core_multi_execute_loop_execute_loop_multi_read_unit_read_unit_reservation_station_Parameters_h

/*
 * $Id$
 *
 * [ Description ]
 * 
 */

#include "Common/include/Debug.h"
#include "Behavioural/include/Parameters.h"
#include <math.h>

namespace morpheo {
namespace behavioural {
namespace core {
namespace multi_execute_loop {
namespace execute_loop {
namespace multi_read_unit {
namespace read_unit {
namespace reservation_station {


  class Parameters : public morpheo::behavioural::Parameters
  {
    //-----[ fields ]------------------------------------------------------------
  public : const uint32_t    _size_queue           ;
  public : const uint32_t    _nb_inst_retire       ;
  public : const uint32_t    _nb_context           ;
  public : const uint32_t    _nb_front_end         ;
  public : const uint32_t    _nb_ooo_engine        ;
  public : const uint32_t    _nb_packet            ;
  public : const uint32_t    _size_general_data    ;
  public : const uint32_t    _size_special_data    ;
  public : const uint32_t    _nb_general_register  ;
  public : const uint32_t    _nb_special_register  ;
  public : const uint32_t    _nb_gpr_write         ;
  public : const uint32_t    _nb_spr_write         ;
  public : const uint32_t    _nb_bypass_write      ;//if nb_bypass=0, then bypass is desactivated
  public : const uint32_t    _nb_bypass_memory     ;//if nb_bypass=0, then bypass is desactivated
  public : const uint32_t    _size_store_queue     ;
  public : const uint32_t    _size_load_queue      ;

    /*
  public : const bool        _have_immediat        ;
  public : const bool        _have_gpr_ra          ;
  public : const bool        _have_gpr_rb          ;
  public : const bool        _have_spr_rc          ;
  public : const bool        _have_gpr_rd          ;
  public : const bool        _have_spr_re          ;
    */
  public : const uint32_t    _size_context_id      ;
  public : const uint32_t    _size_front_end_id    ;
  public : const uint32_t    _size_ooo_engine_id   ;
  public : const uint32_t    _size_rob_id          ;
  public : const uint32_t    _size_general_register;
  public : const uint32_t    _size_special_register;

  public : const bool        _have_port_context_id   ;
  public : const bool        _have_port_front_end_id ;
  public : const bool        _have_port_ooo_engine_id;
  public : const bool        _have_port_rob_id       ;
  public : const bool        _have_port_load_queue_ptr;

    //-----[ methods ]-----------------------------------------------------------
  public : Parameters  (uint32_t size_queue         ,
			uint32_t nb_inst_retire     ,
			uint32_t nb_context         ,
			uint32_t nb_front_end       ,
			uint32_t nb_ooo_engine      ,
			uint32_t nb_packet          ,
			uint32_t size_general_data  ,
			uint32_t size_special_data  ,
			uint32_t nb_general_register,
			uint32_t nb_special_register,
			uint32_t nb_gpr_write       ,
			uint32_t nb_spr_write       ,
			uint32_t nb_bypass_write    ,
			uint32_t nb_bypass_memory   ,
			uint32_t size_store_queue   ,
			uint32_t size_load_queue    );

  public : Parameters  (Parameters & param) ;
  public : ~Parameters () ;

  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_execute_loop::execute_loop::multi_read_unit::read_unit::reservation_station::Parameters & x);
  };

}; // end namespace reservation_station
}; // end namespace read_unit
}; // end namespace multi_read_unit
}; // end namespace execute_loop
}; // end namespace multi_execute_loop
}; // end namespace core

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

#endif
