#ifndef _OSC_BT_H_
#define _OSC_BT_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 Osc_BT : 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> > coef2_sc_fl;
	sc_in<sc_float<E, M> > Uz_sc_fl;
	sc_in<sc_float<E, M> > komp_value;
  //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 oscFUNC();

//Konštruktor modulu
SC_HAS_PROCESS(Osc_BT);
Osc_BT(sc_module_name nm): sc_module(nm),
	//Vstupné konštanty
		coef0_sc_fl		("coef0_sc_fl"),	
		coef1_sc_fl		("coef1_sc_fl"),
		coef2_sc_fl		("coef2_sc_fl"),
		Uz_sc_fl		("Uz_sc_fl"),
		komp_value		("komp_value"),
	//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(oscFUNC,  clk.pos());
			reset_signal_is( rst, true );
	}
};//Ukončenie deklarácie modulu

#endif
