#ifndef _BlackBox_SEM_H_
#define _BlackBox_SEM_H_


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

// Funkcia modulu pre generovanie aproximovaných
// hodnôt exponenciálnej funkcie (S.E.M.)
class BlackBox_SEM : public sc_module 
{
public:

//Definovanie portov modulu
  //Vstupné konštanty
	sc_in<sc_float<E, M> > coef0_sc_fl;
	sc_in<sc_float<E, M> > coef1_sc_fl;
	sc_in<sc_float<E, M> > Uz_sc_fl;
  //Vstupy
	sc_in_clk clk;
	sc_in<bool> rst;
	sc_in<bool> en;
  //Výstupy
	sc_out<sc_float<E, M> > outp;

  //"Handshaking"
		sc_in<bool>		inp_vld;
		sc_out<bool>	inp_rdy;
		sc_in<bool>		outp_rdy;
		sc_out<bool>	outp_vld;

//sc_exp funkcia
#include "sc_exp.inc"

//Funkcia modulu
void expFUNC();

//Konštruktor modulu
SC_HAS_PROCESS( BlackBox_SEM );
BlackBox_SEM(sc_module_name nm): sc_module(nm),
	//Vstupné konštanty
		coef0_sc_fl		("coef0_sc_fl"),	
		coef1_sc_fl		("coef1_sc_fl"),
		Uz_sc_fl		("Uz_sc_fl"),
	//Vstupy
		clk		("clk"),
		rst		("rst"),
		en		("en"),
	//Výstupy
		outp	("outp"),
	//"Handshaking"
		inp_vld		("inp_vld"),
		inp_rdy		("inp_rdy"),
		outp_rdy	("outp_rdy"),
		outp_vld	("outp_vld")
	{
		SC_CTHREAD( expFUNC,  clk.pos());
			reset_signal_is( rst, true );
	}
};//Ukončenie deklarácie modulu

#endif
