//******************************************************************************
//TriggerManager	-	Module to handle oscilloscope triggering
//						Settings
//							Ch1Pos - Trigger on positive edge of channel 1
//							Ch1Neg - Trigger on negative edge of channel 1
//							Ch2Pos - Trigger on positive edge of channel 2
//							Ch2Neg - Trigger on negative edge of channel 2
//						Any combination of triggering can be obtained by setting
//							a combination of the setting pins. If all setting
//							pins are low, the module will trigger uncondition-
//							ally unless the reset pin is high.
//						The module will remain triggered until reset externally.
//
//By				-	Yi Yao			http://yyao.ca/
//Date				-	2006-01-01
//******************************************************************************


module TriggerManager(Ch1Pos, Ch1Neg, Ch2Pos, Ch2Neg, Ch1Comp, Ch2Comp,
		Reset, Trig);
	input	Ch1Pos, Ch1Neg, Ch1Comp;
	input	Ch2Pos, Ch2Neg, Ch2Comp;
	input	Reset;
	output	Trig;

	reg	TrigCh1P;
	reg	TrigCh1N;
	reg	TrigCh2P;
	reg	TrigCh2N;

	always @ (posedge Ch1Comp or posedge Reset) begin
		if (Reset) begin
			TrigCh1P <= 1'b0;
		end else begin
			if (Ch1Pos)	TrigCh1P <= 1'b1;
			else		TrigCh1P <= TrigCh1P;
		end
	end

	always @ (negedge Ch1Comp or posedge Reset) begin
		if (Reset) begin
			TrigCh1N <= 1'b0;
		end else begin
			if (Ch1Neg)	TrigCh1N <= 1'b1;
			else		TrigCh1N <= TrigCh1N;
		end
	end

	always @ (posedge Ch2Comp or posedge Reset) begin
		if (Reset) begin
			TrigCh2P <= 1'b0;
		end else begin
			if (Ch2Pos)	TrigCh2P <= 1'b1;
			else 		TrigCh2P <= TrigCh2P;
		end
	end

	always @ (negedge Ch2Comp or posedge Reset) begin
		if (Reset) begin
			TrigCh2N <= 1'b0;
		end else begin
			if (Ch2Neg)	TrigCh2N <= 1'b1;
			else		TrigCh2N <= TrigCh2N;
		end
	end

	assign Trig =	(TrigCh1P | TrigCh1N | TrigCh2P | TrigCh2N) |
					~(Ch1Pos | Ch1Neg | Ch2Pos | Ch2Neg | Reset);
endmodule
