FPGA测两路信号相位差

这篇不算原创,因为占空比测量部分照搬了大神的代码,稍作了改动

源代码在此:http://download.csdn.net/detail/dunnolove/2049861

Dunnolove大神写的是占空比测量的程序,本身小巧完善,在此基础上实现两路信号相位差的测量。M,N为两路频率相同的输入信号,对应图中A,B,经过异或门输出如D,D的占空比即反应相位差,占空比的百分比乘以360度就得到相位差。

FPGA测两路信号相位差_第1张图片

module	Phase(
		M,
		N,
		XOR_OUT,
		clk,
		Pon,
		Poff);

input		M,N,clk;
output	[15:0]	Pon,Poff;
output  	reg 		XOR_OUT;
reg		[15:0]	Pon,Poff;
//首先对脉冲输入进行同步处理
reg		syn1;
always @ (posedge clk)
begin
		
		XOR_OUT <= M^N;       //新状态
		syn1 <= XOR_OUT;      //旧状态
end


wire	catin_pos;
//获得输入脉冲的上升沿
assign	catin_pos = XOR_OUT & (~syn1);


//计算高低电平宽度
reg	[15:0]	Pon_reg,Poff_reg;


always @ (posedge clk)
begin
   if(catin_pos)
		begin
			Pon <= Pon_reg;
			Poff <= Poff_reg;
			
			Pon_reg <= 16'd0;
			Poff_reg <= 16'd0;
		end
	else if(XOR_OUT)
		begin
		Pon_reg <= Pon_reg + 1'b1;
		end
	else
		begin
		Poff_reg <= Poff_reg + 1'b1;
		end
end
endmodule		

你可能感兴趣的:(FPGA,fpga)