#ifndef _BLACKBOX_BT_CPP_
#define _BLACKBOX_BT_CPP_

#include <systemc.h>
#include "Precision.h"
#include "sc_float.h"
#include "BlackBox_BT.h"

// Funkcia modulu pre generovanie aproximovaných
// hodnôt exponenciálnej funkcie (B.T.)
void BlackBox_BT::expFUNC()
{
//Definovanie vnútorných premenných
sc_float<E, M> coef[3];
sc_float<E, M> U;
sc_float<E, M> value_Q;
sc_float<E, M> value_D;
bool en_var;


//Reset obvodu
sc_float<E, M> tmp;
tmp = 0.0;
	coef[0] = (0.0);
	coef[1] = (0.0);
	coef[2] = (0.0);
	U = (0.0);
	value_Q = (0.0);
		inp_rdy.write(false);
		outp_vld.write(false);
	outp.write(tmp);
//Ukončenie resetu
wait();


//Vnútorná "nekonečná" slučka - ukončiteľná len resetom obvodu
while(true)
{
//"handshaking" vstupných dát
		inp_rdy.write(true);
		do{
			wait();
		} while(!inp_vld.read());
coef[0] = coef0_sc_fl.read();
coef[1] = coef1_sc_fl.read();
coef[2] = coef2_sc_fl.read();
U = Uz_sc_fl.read();
		inp_rdy.write(false);


//Funkcia pre generáciu aprox. hodnôt exponencionálnej funkcie
	sc_exp_BT(coef, &value_D, &value_Q, U, en.read());


//"handshaking" výstupných dát
		outp_vld.write(true);
		do {
			wait();
		} while (!outp_rdy.read());
outp.write(value_Q);
		outp_vld.write(false);
} //Ukončenie while cyklu
} //Ukončenie expFUNC

#endif
