这篇不算原创,因为占空比测量部分照搬了大神的代码,稍作了改动
源代码在此:http://download.youkuaiyun.com/detail/dunnolove/2049861
Dunnolove大神写的是占空比测量的程序,本身小巧完善,在此基础上实现两路信号相位差的测量。M,N为两路频率相同的输入信号,对应图中A,B,经过异或门输出如D,D的占空比即反应相位差,占空比的百分比乘以360度就得到相位差。
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