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

📄 pump.v

📁 FPGA verilog
💻 V
字号:
module Pump
	(
		CLK,
		PumpDown,
		Ild,
		Hrs,
		Ildm
	);

	input			CLK;
	input			PumpDown;
	input	[31:0]	Ild;
	output	[31:0]	Hrs;
	output	[31:0]	Ildm;
	
	reg		[25:0]	MReg;
	
	reg		[31:0]	HrsReg;

	reg		[15:0]	IldReg0,IldReg1;

	reg		[31:0]	IldmReg;
	
	wire	[30:0]	denom;
	wire	[39:0]	numer;
	wire	[39:0]	AvgIld;
	reg		[39:0]	IldSum;

	wire	[39:0]	Sum;
	
	wire	aSecond,AccEN;
	
	assign	aSecond = MReg==26'd19999999;
	assign  AccEN = aSecond&(~PumpDown);
	
	assign  Hrs = HrsReg;
	assign  Ildm = IldmReg;

	lpm_acc_i16_o40 IldAcc(
				.clock(CLK),
				.clken(AccEN),
				.data(IldReg1),
				.result(Sum));

	lpm_divide_ildm Ildmdiv(
				.clock(CLK),
				.denom(denom),
				.numer(numer),
				.quotient(AvgIld));
	
	assign numer =IldSum;
	assign denom = HrsReg[30:0];

	always @(posedge CLK)	
	begin
		IldSum <= Sum;
	end
	
	always @(posedge CLK)
	begin
		if (!PumpDown)
		begin
			if (aSecond) //20000000分频
			begin
				HrsReg <= HrsReg + 1'b1;
				MReg <= 26'd0;
			end
			else
				MReg <= MReg + 1'b1;
		end
	end
	
	always @(posedge CLK)
	begin
		IldReg0 <= Ild[30:15]; //整数部分
		if (PumpDown)
		begin
			IldReg1 <= 16'd0;
		end
		else begin
			IldReg1 <= IldReg0;
		end
	end
	
	always @(posedge CLK)
	begin
		IldmReg <= AvgIld[31:0];
	end
		
endmodule

⌨️ 快捷键说明

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