#ifndef MODMUL_H
#define MODMUL_H

/*
Ein Modulares Hardwaremodul in SystemC, welches die modulare Multiplikation zweier Zahlen realisieren soll.
*/

#include <systemc.h>

SC_MODULE(ModMulModule){

	/// Eingänge

	// Erster Operand
	sc_in<sc_biguint<160> > x;

	// Zweiter Operand
	sc_in<sc_biguint<160> > y;

	// Modulo value
	sc_in<sc_biguint<160> > m;

	// enable
	sc_in<bool> en;

	// clock
	sc_in<bool> clk;


	/// Ausgänge

	// Berechneter Wert
	sc_out<sc_biguint<160> > out;

	// Berechnung abgeschlossen
	sc_out<bool> done;

	// SystemC Prozess
	void exe();

	int mode;
	SC_HAS_PROCESS(ModMulModule);
	ModMulModule(sc_module_name name, int mode): sc_module(name){
		this->mode = mode;
		SC_THREAD(exe);
		sensitive << clk;
	}
};

#endif