#ifndef MODINV_H
#define MODINV_H

#include <systemc.h>

/*
Ein Modulares Hardwaremodul in SystemC, welches die Inverse einer Zahl bezüglich der modularen Multiplikation berechnet.
Wird benötigt, um die Modulare Division zurückzuführen auf die Modulare Multiplikation. 
*/

SC_MODULE(ModInvModule){

	/// Eingänge

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

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

	// Berechnung ausführen
	sc_in<bool> en;

	// clock
	sc_in<bool> clk;


	/// Ausgänge

	// Ausgabewert
	sc_out<sc_biguint<160> > out;

	// Berechnung abgeschlossen
	sc_out<bool> done;

	// Simulation processes
	void exe();


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

#endif