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

📄 modectrlnew.v

📁 FPGA verilog
💻 V
字号:

module ModeCtrl(
		CLK,
		EN,
		OP_MODE_Set,
		LOSMODE_Set,
		AUTO_MUTE_Set,
		APC_KP_Set,
		APC_KI_Set,
		PLIM_Set,
		GLIM_Set,
		AGC_KP_Set,
		AGC_KI_Set,
		OFG_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,
		InputPwrAsmW,
		Gain,
		A,
		B,
		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,
					PLIM_Set,
					GLIM_Set,
					AGC_KP_Set,
					AGC_KI_Set,
					OFG_Set,
					A,
					B,
					TARGET_GAIN_Set,
					TARGET_PWR_Set,
					EYESAFE_PWR_Set;
	
	input	[31:0] 	Gain,
					OutputPwrAsmW,
					InputPwrAsmW,
					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;
	
	wire	Lim_Signal,Dis_Signal,Es_Signal;	
	
	reg	[2:0]	OpModeSet_Q0,OpModeSet;
	
	reg [2:0]	OpMode,NextMode,OrgOpMode;

	wire	[55:0]	MaxPSigSignal;
	wire	[31:0]	POutSignal;
	reg		[31:0]	POutSignalReg;
	reg		[31:0]	MaxPSigSignalReg;

	wire	[31:0]	PwrSet;

	reg	   POutOver,GainOver;
	reg    POutOverReg,GainOverReg;

	wire		OverFlag,Idled,isAGCMode,isAPCMode;
	
	assign	OpModeOut = OpMode;

	assign Idled = Input_LOS_Alarm&(LOSMODE_Set==LM_AGC_IDLE)&(OpModeSet==AGC_MODE);
	
	assign Lim_Signal = POutOverReg|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  = (isAGCMode)&(~POutOverReg);
	assign 	isAGCMode = OrgOpMode==AGC_MODE;
	assign  isAPCMode = OrgOpMode==APC_MODE;

	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&(!Idled)),
			.Ramp(Ramp),
			.FeedForwardEN(FeedForwardEN),
			.FeedForwardData(FeedForwardData),
			.CLK(CLK),
			.Ki(Ki),
			.Kp(Kp),
			.NextPoint(NextPoint),
			.Target(Target),
			.PIDResult(Pump_DacData));

	wire 	[23:0]	Pin_A;
	wire	[55:0]	Gain_Pin_A;
	
	lpm_add_signed_24	b2v_add2(.dataa(InputPwrAsmW[23:0]),
						.datab(A[23:0]),
						.result(Pin_A));					
    lpm_mult_unsigned_24x32_hard	b2v_inst7(.dataa(Pin_A),
					.datab(TARGET_GAIN_Set),
					.result(Gain_Pin_A)); 
	lpm_sub_signed_32	b2v_sub1(.dataa(Gain_Pin_A[46:15]),
						.datab(B),
						.result(POutSignal)); //总功率					

    lpm_mult_unsigned_24x32_hard	b2v_inst8(.dataa(InputPwrAsmW[23:0]),
					.datab(GLIM_Set),
					.result(MaxPSigSignal)); 

	assign	PwrSet = isAGCMode?POutSignalReg:(isAPCMode?TARGET_PWR_Set:EYESAFE_PWR_Set);
	assign  OverFlag = {5'b00000,PwrSet[31:5]}>MaxPSigSignalReg;
	
	always @(GLIM_Set or TARGET_GAIN_Set or PwrSet or OverFlag or isAGCMode)
	begin
		if ((TARGET_GAIN_Set>GLIM_Set)&&isAGCMode||OverFlag&&(!isAGCMode))
			GainOver = 1'b1;
		else
			GainOver = 1'b0;
	end

	always @(PLIM_Set or PwrSet)
	begin
		if (PwrSet>PLIM_Set)
			POutOver = 1'b1;
		else
			POutOver = 1'b0;
	end

	always @(posedge CLK)
	begin
		POutSignalReg <= POutSignal;
		MaxPSigSignalReg <= MaxPSigSignal[51:20];
	  	GainOverReg <= GainOver;
	    POutOverReg <= POutOver;
	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&&((OpModeSet==AGC_MODE)?(LOSMODE_Set==LM_AGC_DIS):(LOSMODE_Set!=LM__NO_EFFECT))))
			NextMode <= PD_MODE;
		else if (Output_Mute_Input_Single||(Reflection_Alarm&&AUTO_MUTE_Set)||MUTEON_Set)
			NextMode <= APR_MODE;
		else
			NextMode <= OpModeSet;
	end

	
	always @(POutOverReg or
			GainOverReg or
			APC_KP_Set or 
			APC_KI_Set or
			PLIM_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 or 
			MaxPSigSignalReg)
	begin
		/*if (POutOverReg&&(({5'b00000,PLIM_Set[31:5]}<=MaxPSigSignalReg)))
		begin
			Kp = APC_KP_Set;
			Ki = APC_KI_Set;
			Target = PLIM_Set;
			NextPoint = OutputPwrAsmW;
		end
		else if (GainOverReg)
		begin
			Kp = AGC_KP_Set;
			Ki = AGC_KI_Set;
			Target = GLIM_Set;
			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 + -