📄 modectrlbak.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 + -