#ifndef _BlackBox_SEM_CPP_
#define _BlackBox_SEM_CPP_

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


void BlackBox_SEM::expFUNC()
{
//Definovanie vnútorných premenných
sc_float<E, M> coef[2];
sc_float<E, M> U;
sc_float<E, M> value_Q;
sc_float<E, M> value_D;


//Reset obvodu
sc_float<E, M> tmp;
tmp = 0.0;
	coef[0] = (0.0);
	coef[1] = (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();
U = Uz_sc_fl.read();
		inp_rdy.write(false);


//Funkcia pre generáciu aprox. hodnôt exponencionálnej funkcie
	sc_exp_SEM(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 deklarácie modulu
		
#endif
