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

📄 top.v

📁 FPGA verilog
💻 V
📖 第 1 页 / 共 2 页
字号:
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 + -