📄 top.v
字号:
module Top(
SYS_CLKIN0, //系统主时钟输入
SYS_CLKIN1, //DAC0时钟输入
SYS_CLKIN2, //DAC1时钟输入
SYS_CLKIN3, //DAC1时钟输入
WR, //MCU写使能输入
RD, //MCU读使能输入
AddrBus, //MCU地址总线输入
DataBus, //MCU数据总线,双向总线
InputPwrAD, //输入光功率AD输入数据总线
OutputPwrAD, //输出光功率AD输入数据总线
VOAInputAD, //VOA输入光功率AD数据输入总线
VOAOutputAD, //VOA输出光功率AD数据输入总线
RFLAD,
PumpSwitch,
Module_Temperature_Alarm_Output, //模块温度报警输出
Pump_Current_Alarm_Output, //泵浦电流报警输出
Pump_Temperature_Alarm_Output, //泵浦温度报警输出
Input_LOS_Alarm_Output, //输入光无报警输出
Output_LOP_Alarm_Output, //增益/功率偏差报警输出
Pump_DacOut, //泵浦DAC数据输出总线
Pump_Dac_CLKOUT,
VOA_DacOut, //VOA DAC数据输出总线
VOA_Dac_CLKOUT
);
`include "Parameter.v"
input SYS_CLKIN0;
input SYS_CLKIN1;
input SYS_CLKIN2;
input SYS_CLKIN3;
input WR;
input RD;
inout [7:0] DataBus;
input [15:0] AddrBus;
input [AD_WIDTH-1:0] InputPwrAD;
input [AD_WIDTH-1:0] OutputPwrAD;
input [AD_WIDTH-1:0] VOAInputAD;
input [AD_WIDTH-1:0] VOAOutputAD;
input [AD_WIDTH-1:0] RFLAD;
output Module_Temperature_Alarm_Output;
output Pump_Current_Alarm_Output;
output Pump_Temperature_Alarm_Output;
output Input_LOS_Alarm_Output;
output Output_LOP_Alarm_Output;
output Pump_Dac_CLKOUT;
output VOA_Dac_CLKOUT;
output [DA_WIDTH-1:0] Pump_DacOut;
output [DA_WIDTH-1:0] VOA_DacOut;
output PumpSwitch;
/*************** SYSTEM PARAMETERS START *******************/
reg [31:0] DEBOUNCE_TIME_Set;
reg [11:0] CURR_SET_Set;
reg [1:0] LOSMODE_Set;
reg AUTO_MUTE_Set;
reg ASTM_Set;
reg [31:0] PLIM_Set,
GAIN_SET_Set,
PWR_SET_Set,
EYESAFE_PWR_Set,
VOA_SET_Set,
RAMP_TIME_Set,
LOS_THR_Set,
MTH_THR_Set,
MTL_THR_Set,
RFL_THR_Set,
TMP_THR_Set,
ILD_THR_Set,
LOS_HYS_Set,
MTH_HYS_Set,
MTL_HYS_Set,
RFL_HYS_Set,
TMP_HYS_Set,
ILD_HYS_Set,
LOP_THR_HI_Set,
LOP_THR_LO_Set,
LOP_HYS_HI_Set,
LOP_HYS_LO_Set,
CT_THR_Set,
CT_HYS_Set,
PIN_K_Set,
PIN_B_Set,
POUT_K_Set,
POUT_B_Set,
VOA_INPUT_K_Set,
VOA_INPUT_B_Set,
VOA_OUTPUT_K_Set,
VOA_OUTPUT_B_Set,
RFL_K_Set,
RFL_B_Set,
VOA_KP_Set,
VOA_KI_Set,
AGC_KP_Set,
AGC_KI_Set,
APC_KP_Set,
APC_KI_Set,
FEED_K_Set,
FEED_B_Set,
VOA_TARGET_Set,
GAIN_A_Set,
GAIN_B_Set,
OFG_Set,
GLIM_Set;
reg [1:0] INPUT_KEY_Set;
reg [7:0] SYS_CTRL_Set;
reg [1:0] OP_MODE_Set;
reg [9:0] RAMP_STEPS_Set;
wire [11:0] PIN_AD_Reg,
POUT_AD_Reg,
VOA_INPUT_AD_Reg,
VOA_OUTPUT_AD_Reg,
RFL_AD_Reg,
PumpDac_Reg;
reg ISP_AUTO_Set;
reg [11:0] VOA_DAC_Reg;
reg [AD_WIDTH-2:0] INPUTSAMPSTART_Set,
OUTPUTSAMPSTART_Set;
reg MUTEON_Set,
PUMPON_Set;
/**************** SYSTEM PARAMETERS END ********************/
reg [31:0] PUMP_ILD_Reg,
PUMP_TMP_Reg,
MT_Reg,
CT_Reg;
wire [31:0] PIN_Reg,
POUT_Reg,
VOA_INPUT_Reg,
VOA_OUTPUT_Reg,
VOA_Reg,
POUTSIG_Reg,
GAIN_Reg,
Hrs_Reg,
Ildm_Reg,
RFL_Reg;
wire [31:0] Hrs,
Ildm;
wire SYS_RUN;
wire SYS_CLK;
wire PUMP_DAC_CLK;
wire VOA_DAC_CLK;
wire SYS_SAMP_CLK;
wire [DA_WIDTH-1:0] Pump_DacData;
wire [DA_WIDTH-1:0] VOA_DacData;
wire [31:0] MCUFullData;
reg [7:0] McuOutputReg;
reg [31:0] McuReadReg;
reg [23:0] McuWriteReg;
wire [1:0] OpMode;
wire [31:0] Gain_Disp;
wire [31:0] POutsig_Disp;
wire [31:0] InputPwrAsmW,
OutputPwrAsmW,
OutputPwr,
InputPwr,
VOAInputPwr,
VOAOutputPwr,
RFLPwr,
POutsig,
Gain,
VOAAtt;
wire [11:0] FeedForwardData;
wire Ramp;
wire Module_Temperature_High_Alarm; //模块温度报警输出
wire Module_Temperature_Low_Alarm; //模块温度报警输出
wire Pump_Current_Alarm; //泵浦电流报警输出
wire Pump_Temperature_Alarm; //泵浦温度报警输出
wire Input_LOS_Alarm; //输入光无报警输出
wire Output_LOP_Alarm; //增益/功率偏差报警输出
wire Reflection_Alarm;
wire CT_Low_Alarm;
wire Pump_Protect_Alarm;
wire MT_Protect_Alarm;
wire OutputLim;
reg Module_Temperature_High_Alarm_SST; //模块温度报警输出
reg Module_Temperature_Low_Alarm_SST; //模块温度报警输出
reg Pump_Current_Alarm_SST; //泵浦电流报警输出
reg Pump_Temperature_Alarm_SST; //泵浦温度报警输出
reg Input_LOS_Alarm_SST; //输入光无报警输出
reg Output_LOP_Alarm_SST; //增益/功率偏差报警输出
reg Reflection_Alarm_SST;
reg CT_Low_Alarm_SST;
wire Coil_Temperature_Alarm_Output;
wire Reflection_Alarm_Output;
wire Amplifier_Disable_Input; //硬件关泵使能输入
wire Output_Mute_Input; //硬件APR模式使能输入
wire [2:0] Mst;
wire AlarmEN;
wire PumpDown;
wire PumpDownSignal;
wire RampStart;
wire [11:0] InputPwrAD_Signal;
wire [11:0] OutputPwrAD_Signal;
wire [11:0] VOAInputAD_Signal;
wire [11:0] VOAOutputAD_Signal;
wire [11:0] RFLAD_Signal;
reg MTHClearReg,MTHClear;
reg MTLClearReg,MTLClear;
reg ILDClearReg,ILDClear;
reg TMPClearReg,TMPClear;
reg LOSClearReg,LOSClear;
reg ReflectionClearReg,ReflectionClear;
reg LOPClearReg,LOPClear;
reg CTClearReg,CTClear;
assign Module_Temperature_Alarm_Output = ASTM_Set?(Module_Temperature_High_Alarm_SST|Module_Temperature_Low_Alarm_SST):(Module_Temperature_High_Alarm | Module_Temperature_Low_Alarm);
assign Pump_Current_Alarm_Output = ASTM_Set?Pump_Current_Alarm_SST:Pump_Current_Alarm;
assign Pump_Temperature_Alarm_Output = ASTM_Set?Pump_Temperature_Alarm_SST:Pump_Temperature_Alarm;
assign Input_LOS_Alarm_Output =ASTM_Set?Input_LOS_Alarm_SST:Input_LOS_Alarm;
assign Output_LOP_Alarm_Output =ASTM_Set?Output_LOP_Alarm_SST:Output_LOP_Alarm;
assign Reflection_Alarm_Output =ASTM_Set?Reflection_Alarm_SST:Reflection_Alarm;
assign Pump_Protect_Alarm = MT_Protect_Alarm|Pump_Temperature_Alarm;
assign Coil_Temperature_Alarm_Output = ASTM_Set?CT_Low_Alarm_SST:CT_Low_Alarm;
assign Pump_Dac_CLKOUT = PUMP_DAC_CLK;
assign VOA_Dac_CLKOUT = VOA_DAC_CLK;
assign SYS_RUN = SYS_CTRL_Set[0];
assign AlarmEN = SYS_CTRL_Set[1]&SYS_RUN;
assign PumpDownSignal = PumpDown|((OpMode==ACC_MODE)&(CURR_SET_Set==0)&(!ISP_AUTO_Set));
assign Amplifier_Disable_Input = INPUT_KEY_Set[0]; //硬件关泵使能输入
assign Output_Mute_Input = INPUT_KEY_Set[1]; //硬件APR模式使能输入
ADInput SysAdSamp(.AD_CLK(SYS_CLKIN3),
.SYS_CLK(SYS_CLK),
.SYS_SAMP_CLK(SYS_SAMP_CLK),
.InputPwrAD(InputPwrAD),
.OutputPwrAD(OutputPwrAD),
.VOAInputAD(VOAInputAD),
.VOAOutputAD(VOAOutputAD),
.RFLAD(RFLAD),
.InputPwrAD_Signal(InputPwrAD_Signal),
.OutputPwrAD_Signal(OutputPwrAD_Signal),
.VOAInputAD_Signal(VOAInputAD_Signal),
.VOAOutputAD_Signal(VOAOutputAD_Signal),
.RFLAD_Signal(RFLAD_Signal)
);
Clock clock(.SYS_CLKIN0(SYS_CLKIN0),
.SYS_CLKIN1(SYS_CLKIN1),
.SYS_CLKIN2(SYS_CLKIN2),
.PUMP_DAC_CLK(PUMP_DAC_CLK),
.VOA_CLK(VOA_DAC_CLK),
.SYS_CLKOUT(SYS_CLK),
.SYS_SAMP_CLK(SYS_SAMP_CLK));
assign PumpSwitch = ~PUMPON_Set;
/**************** MCU Interface Start ********************/
assign DataBus = (~RD)?McuOutputReg:8'bzzzzzzzz;
assign MCUFullData = {McuWriteReg,DataBus};
always @(AddrBus or
PIN_AD_Reg or
POUT_AD_Reg or
VOA_INPUT_AD_Reg or
VOA_OUTPUT_AD_Reg or
PIN_Reg or
POUT_Reg or
VOA_INPUT_Reg or
VOA_OUTPUT_Reg or
VOA_Reg or
VOA_DAC_Reg or
MUTEON_Set or
PUMPON_Set or
POUTSIG_Reg or
GAIN_Reg or
Module_Temperature_High_Alarm or
Module_Temperature_Low_Alarm or
Pump_Current_Alarm_Output or
Pump_Temperature_Alarm_Output or
Input_LOS_Alarm_Output or
Output_LOP_Alarm_Output or
Reflection_Alarm_Output or
Coil_Temperature_Alarm_Output or
Pump_Current_Alarm or
Pump_Temperature_Alarm or
Input_LOS_Alarm or
Output_LOP_Alarm or
Reflection_Alarm or
CT_Low_Alarm or
Module_Temperature_High_Alarm_SST or
Module_Temperature_Low_Alarm_SST or
Pump_Temperature_Alarm_SST or
Input_LOS_Alarm_SST or
Output_LOP_Alarm_SST or
Reflection_Alarm_SST or
Pump_Current_Alarm_SST or
CT_Low_Alarm_SST or
OpMode or
Mst or
VOA_SET_Set or
Hrs_Reg or
Ildm_Reg or
ISP_AUTO_Set or
CURR_SET_Set or
Mst or
SYS_CTRL_Set or
RFL_Reg or
RFL_AD_Reg or
Pump_Protect_Alarm or
PumpDac_Reg or
ASTM_Set
)
begin
case (AddrBus[14:2])
SYS_CTRL: McuReadReg = {FPGA_VER,16'h0000,SYS_CTRL_Set};
PIN_AD: McuReadReg = {20'h00000,PIN_AD_Reg};
POUT_AD: McuReadReg = {20'h00000,POUT_AD_Reg};
VOA_INPUT_AD: McuReadReg = {20'h00000,VOA_INPUT_AD_Reg};
VOA_OUTPUT_AD: McuReadReg = {20'h00000,VOA_OUTPUT_AD_Reg};
RFL_AD: McuReadReg = {20'h00000,RFL_AD_Reg};
OP_MODE: McuReadReg = {30'h00000000,OpMode};
PIN: McuReadReg = PIN_Reg;
POUT: McuReadReg = POUT_Reg;
VOA_INPUT: McuReadReg = VOA_INPUT_Reg;
VOA_OUTPUT: McuReadReg = VOA_OUTPUT_Reg;
VOA : McuReadReg = VOA_Reg;
RFL : McuReadReg = RFL_Reg;
VOA_DAC : McuReadReg = {20'h00000,VOA_DAC_Reg};
PUMP1_DAC: McuReadReg = {20'h00000,PumpDac_Reg};
MUTEON: McuReadReg = {31'h00000000,MUTEON_Set};
PUMPON: McuReadReg = {31'h00000000,PUMPON_Set};
POUTSIG: McuReadReg = POUTSIG_Reg;
GAIN: McuReadReg = GAIN_Reg;
VOA_SET: McuReadReg = VOA_SET_Set;
MST: McuReadReg = {29'h00000000,Mst};
ALARMALL: McuReadReg = {22'h00000000,
Pump_Protect_Alarm,
1'b0,
Coil_Temperature_Alarm_Output,
Reflection_Alarm_Output,
Output_LOP_Alarm_Output,
Input_LOS_Alarm_Output,
Pump_Current_Alarm_Output,
Pump_Temperature_Alarm_Output,
ASTM_Set?Module_Temperature_Low_Alarm_SST:Module_Temperature_Low_Alarm,
ASTM_Set?Module_Temperature_High_Alarm_SST:Module_Temperature_High_Alarm};
ALARMMTHSTA: McuReadReg = {31'h00000000,Module_Temperature_High_Alarm};
ALARMMTLSTA: McuReadReg = {31'h00000000,Module_Temperature_Low_Alarm};
ALARMTMPSTA: McuReadReg = {31'h00000000,Pump_Temperature_Alarm};
ALARMILDSTA: McuReadReg = {31'h00000000,Pump_Current_Alarm};
ALARMLOSSTA: McuReadReg = {31'h00000000,Input_LOS_Alarm};
ALARMDOPSTA: McuReadReg = {31'h00000000,Output_LOP_Alarm};
ALARMRFLSTA: McuReadReg = {31'h00000000,Reflection_Alarm};
ALARMCTSTA: McuReadReg = {31'h00000000,CT_Low_Alarm};
ALARMMTHSST: McuReadReg = {31'h00000000,Module_Temperature_High_Alarm_SST};
ALARMMTLSST: McuReadReg = {31'h00000000,Module_Temperature_Low_Alarm_SST};
ALARMTMPSST: McuReadReg = {31'h00000000,Pump_Temperature_Alarm_SST};
ALARMILDSST: McuReadReg = {31'h00000000,Pump_Current_Alarm_SST};
ALARMLOSSST: McuReadReg = {31'h00000000,Input_LOS_Alarm_SST};
ALARMDOPSST: McuReadReg = {31'h00000000,Output_LOP_Alarm_SST};
ALARMRFLSST: McuReadReg = {31'h00000000,Reflection_Alarm_SST};
ALARMCTSST: McuReadReg = {31'h00000000,CT_Low_Alarm_SST};
HRS1: McuReadReg = Hrs_Reg;
ILDM1: McuReadReg = Ildm_Reg;
ISP_AUTO1: McuReadReg = {31'h00000000,ISP_AUTO_Set};
CURR_SET1: McuReadReg = {20'h00000000,CURR_SET_Set};
default: McuReadReg = 0;
endcase
end
//RD----------------------------------
reg RDSignal,RDSamp;
reg WRSignal,WRSamp;
reg [23:0] OutputDataReg;
always @(posedge SYS_CLK)
begin
RDSamp <= RD;
RDSignal <= RDSamp;
end
always @(posedge SYS_CLK)
begin
if (RDSignal&&(!RDSamp))
begin
case (AddrBus[1:0]) // synthesis full_case
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -