/*
 * $Id$
 *
 * [ Description ]
 * 
 * Test "RegisterFile"
 */

#ifdef SYSTEMC
#include "systemc.h"
#endif

#include <string>
#include <iostream>
#include <sys/time.h>

#include "Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/include/RegisterFile_Multi_Banked.h"

using namespace std;
using namespace morpheo;
using namespace morpheo::behavioural;
using namespace morpheo::behavioural::generic;
using namespace morpheo::behavioural::generic::registerfile;

using namespace morpheo::behavioural::generic::registerfile::registerfile_multi_banked;

void test    (string name,
	      morpheo::behavioural::generic::registerfile::registerfile_multi_banked::Parameters * param);


class Time 
{
private : timeval time_begin;
// private : timeval time_end;
  
public  : Time ()
  {
    gettimeofday(&time_begin     ,NULL);
  };

public  : ~Time ()
  {
    cout << *this;
  };

public  : friend ostream& operator<< (ostream& output_stream,
				      const Time & x)
  {
    timeval time_end;
    
    gettimeofday(&time_end       ,NULL);
    
    uint32_t nb_cycles = static_cast<uint32_t>(sc_simulation_time());

    double average = static_cast<double>(nb_cycles) / static_cast<double>(time_end.tv_sec-x.time_begin.tv_sec);
    
    output_stream << nb_cycles << "\t(" << average << " cycles / seconds )" << endl;

    return output_stream;
  }
};
