⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 modectrlbak.v

📁 FPGA verilog
💻 V
字号:

module ModeCtrl(
		CLK,
		EN,
		OP_MODE_Set,
		LOSMODE_Set,
		AUTO_MUTE_Set,
		APC_KP_Set,
		APC_KI_Set,
		POUTLIM_Set,
		GLIM_Set,
		PLIM_Set,
		AGC_KP_Set,
		AGC_KI_Set,
		TARGET_GAIN_Set,
		TARGET_PWR_Set,
		EYESAFE_PWR_Set,
		MUTEON_Set,
		PUMPON_Set,	
		Pump_Protect_Alarm,
		Ramp,
		Input_LOS_Alarm,
		Reflection_Alarm,
		Amplifier_Disable_Input,
		Output_Mute_Input,
		OutputPwrAsmW,
		Gain,
		POutsig,
		FeedForwardData,
		OpModeOut,
		PumpDown,
		RampStart,
		Mst,
		Pump_DacData
);
	`include "parameter.v"
	input	CLK;
	input	EN;
	input	Amplifier_Disable_Input;
	input	Output_Mute_Input;
	input	Pump_Protect_Alarm;
	input	Ramp;
	input	Input_LOS_Alarm;
	input	Reflection_Alarm;
	input	AUTO_MUTE_Set;
	input	MUTEON_Set;
	input	PUMPON_Set;	
	input	[1:0]	LOSMODE_Set;
	input	[2:0]	OP_MODE_Set;
	input	[31:0]	APC_KP_Set,
					APC_KI_Set,
					POUTLIM_Set,
					GLIM_Set,
					PLIM_Set,
					AGC_KP_Set,
					AGC_KI_Set,
					TARGET_GAIN_Set,
					TARGET_PWR_Set,
					EYESAFE_PWR_Set;
	
	input	[31:0] 	Gain,
					OutputPwrAsmW,
					POutsig;
	input	[11:0]	FeedForwardData;
					
	output	[2:0] 	OpModeOut;
	output			PumpDown;
	output			RampStart;
	output	[2:0]	Mst;
	output	[11:0] 	Pump_DacData;
			
	reg				PumpDown;
	reg				RampStart;
	reg		[31:0] 	Ki;
	reg		[31:0] 	Kp;
	reg		[31:0] 	NextPoint;
	reg		[31:0] 	Target;
	
	wire			FeedForwardEN;
	wire			Amplifier_Disable_Input_Single;
	wire			Output_Mute_Input_Single;
	
	parameter	LOS_PUMP_OFF=2'd0,
				LOS_PUMP_IDLE=2'd1,	
				LOS_NO_EFFECT = 2'd2;
	
	wire	Lim_Signal,Dis_Signal,Es_Signal;	
	
	reg	[2:0]	OpModeSet_Q0,OpModeSet;
	
	reg [2:0]	OpMode,NextMode,OrgOpMode;

	integer iGain,iGainSet;
	integer				IPlim,IOutput;
	
	reg    GainOver,GainOverReg;
	reg	[8:0]	GlimCounter;	

	reg					POutover;
	reg		[8:0]		PlimCounter;	
	
	reg					PwrOver;
	
	assign	OpModeOut = OpMode;
	
	assign Lim_Signal = POutover|GainOverReg;
	assign Dis_Signal = (OpMode==PD_MODE)|Es_Signal;
	assign Es_Signal =  (OpMode==APR_MODE);
	
	assign Mst = {Dis_Signal,Es_Signal,Lim_Signal};
	
	assign  FeedForwardEN  = (OrgOpMode==AGC_MODE)&(~POutover);
	

	InputFilter Amplifier_Disable_KeyFilter(
				.CLK(CLK),
				.KeyInput(Amplifier_Disable_Input),
				.KeyOutput(Amplifier_Disable_Input_Single));

	InputFilter Output_Mute_KeyFilter(
				.CLK(CLK),
				.KeyInput(Output_Mute_Input),
				.KeyOutput(Output_Mute_Input_Single));

	PIDTune	modePIDTune(
			.EN(EN),
			.Ramp(Ramp),
			.FeedForwardEN(FeedForwardEN),
			.FeedForwardData(FeedForwardData),
			.CLK(CLK),
			.Ki(Ki),
			.Kp(Kp),
			.NextPoint(NextPoint),
			.Target(Target),
			.PIDResult(Pump_DacData));

	always @(GLIM_Set or Gain)
	begin
		iGain = {8'h00,Gain[31:8]};
		iGainSet = GLIM_Set;
		if (iGain>=iGainSet)
			GainOver = 1'b1;
		else
			GainOver = 1'b0;
	end

	always @(posedge CLK) 
	begin
		if (GainOver)
		begin
			if (GlimCounter[8])
				GainOverReg <= 1'b1;
			else
				GlimCounter <= GlimCounter + 1'b1;
		end
		else begin
			GainOverReg <= 1'b0;
			GlimCounter <= 9'b0;
		end
	end

	always @(PLIM_Set or OutputPwrAsmW) //输出功率监视
	begin
		IPlim = PLIM_Set;
		IOutput = OutputPwrAsmW;
		if (IOutput >IPlim)
			PwrOver = 1'b1;
		else
			PwrOver = 1'b0;
	end

	always @(posedge CLK) //输出功率监视
	begin
		if (PwrOver)
		begin
			if (PlimCounter[8])
				POutover <= 1'b1;
			else
				PlimCounter <= PlimCounter + 1'b1;
		end
		else begin
			POutover <= 1'b0;
			PlimCounter <= 9'b0;
		end
	end
	
	always @(posedge CLK)
	begin
		OpModeSet_Q0 <= OP_MODE_Set;
		OpModeSet <= OpModeSet_Q0;
	end
	
	always @(posedge CLK)
	begin
		if (NextMode==PD_MODE)
			PumpDown = 1'b1; 
		else
			PumpDown = 1'b0; 
	end
	
	always @(posedge CLK)
	begin
		if (OpMode == NextMode)
			RampStart <=1'b0;
		else begin
			OpMode <= NextMode;
			if (NextMode!=ACC_MODE)
				OrgOpMode <= NextMode;
			
			RampStart <= 1'b1;
		end
	end
	
    always @(Amplifier_Disable_Input_Single or 
			Output_Mute_Input_Single or 
			PUMPON_Set or 
			Input_LOS_Alarm or 
			LOSMODE_Set or 
			Reflection_Alarm or 
			AUTO_MUTE_Set or 
			MUTEON_Set or 
			OpModeSet or
			Pump_Protect_Alarm) 
	begin
		if (Amplifier_Disable_Input_Single||
			(!PUMPON_Set)||Pump_Protect_Alarm||
			(Input_LOS_Alarm&&(LOSMODE_Set==LOS_PUMP_OFF||OpModeSet==AGC_MODE)))
			NextMode <= PD_MODE;
		else if (Input_LOS_Alarm&&(LOSMODE_Set==LOS_PUMP_IDLE))
				NextMode <= IDLE_MODE;
		else if (Output_Mute_Input_Single||(Reflection_Alarm&&AUTO_MUTE_Set)||MUTEON_Set)
			NextMode <= APR_MODE;
		else
			NextMode <= OpModeSet;
	end

	
	always @(POutover or
			GainOverReg or
			APC_KP_Set or 
			APC_KI_Set or
			POUTLIM_Set or
			OutputPwrAsmW or
			OrgOpMode or
			AGC_KP_Set or
			AGC_KI_Set or
			TARGET_GAIN_Set or
			Gain or
			POutsig or
			TARGET_PWR_Set or
			EYESAFE_PWR_Set or 
			GLIM_Set)
	begin
		if (POutover)
		begin
			Kp = APC_KP_Set;
			Ki = APC_KI_Set;
			Target = POUTLIM_Set;
			NextPoint = OutputPwrAsmW;
		end
		else if (GainOverReg)
		begin
			Kp = AGC_KP_Set;
			Ki = AGC_KI_Set;
			Target = {GLIM_Set[23:0],8'b00000000};//Q7->Q15;
			NextPoint = Gain;
		end
		else
		begin
			case (OrgOpMode)
				AGC_MODE:
					begin
						Kp = AGC_KP_Set;
						Ki = AGC_KI_Set;
						Target = TARGET_GAIN_Set;
						NextPoint = Gain;
					end
				APC_MODE:
					begin
						Kp = APC_KP_Set;
						Ki = APC_KI_Set;
						Target = TARGET_PWR_Set;
						NextPoint = POutsig;
					end
				APR_MODE:
					begin
						Kp = APC_KP_Set;
						Ki = APC_KI_Set;
						Target = EYESAFE_PWR_Set;
						NextPoint = OutputPwrAsmW;
					end	
				default:
					begin
						Kp = 0;
						Ki = 0;
						Target = 0;
						NextPoint = 0;
					end
			endcase
		end
	end
	
endmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -