概述
原理简述:
上次完成了等精度频率计,但对一个低频信号,使用周期法测量更好。
所以本模块用周期法测量低频信号的频率,实现原理相似与高频,直接
把低频信号的一个周期当做一个门控信号,将门控信号同步到基准时钟,
然后在一个周期内的时间进行计数。
公式:计数值x基准信号的周期=被测信的周期
f=1/t
即可算出低频信号的数值。
代码:
注:最小频率为1hz
module dengjingdu_d(
input clk,
input rst,
input clk_1hz,
output reg[9:0]data //1hz-1khz,最大值为1k位宽则为10位
);
reg [9:0]r_data;
reg [1:0]cnt;
reg gate; //产生门
reg gate_t; //把门同步到基准时钟
reg gate_tt;
reg [25:0]cnt_50m; //被测信号的一个周期下基准时钟的计数值,最大为1hz时
reg [25:0]cnt_50m_temp;
always @ (posedge clk_1hz or negedge rst)
begin
if(!rst)
cnt <= 1'b0;
else if(cnt == 2'd2)
cnt <= 1'b0;
else
cnt <= cnt + 1'b1;
end
always @ (posedge clk or negedge rst)
if(!rst)
gate <= 1'b0;
else if(cnt < 2'd0)
gate <= 1'b0;
else if( (2'd1 <=cnt) && (cnt < 2'd2))
gate <= 1'b1;
else
gate <= 1'b0;
end
always @ (posedge clk or negedge rst)
begin
if(!rst)
gate_t <= 1'b0;
else
gate_t <= gate;
end
always @ (posedge clk or negedge rst)
begin
if(!rst)
cnt_50m <= 1'b0;
else if(gate_t == 0)
cnt_50m <= 1'b0;
else if(gate_t == 1)
cnt_50m <= cnt_50m + 1'b1;
end
always @ (posedge clk or negedge rst)
begin
if(!rst)
gate_tt <= 1'b0;
else
gate_tt <= gate_t;
end
wire nege_gate;
assign nege_gate = ((gate_tt == 1'b1) && (gate_t == 1'b0)) ? 1'b1 : 1'b0;
always @ (posedge clk or negedge rst)
begin
if(!rst)
cnt_50m_temp <= 1'b0;
else if(nege_gate)
cnt_50m_temp <= cnt_50m;
end
always @ (posedge clk or negedge rst)
begin
if(!rst)
r_data <= 1'b0;
else
r_data <= (cnt_50m_temp * 0.00000002);
end
always@(posedge clk or negedge rst)
begin
if(!rst)
data <= 1'b0;
else
data <= 1 / r_data;
end
endmodule
仿真:
分频出一个1hz的信号当做被测信号
可以看到测得频率为1hz
最后
以上就是细心嚓茶为你收集整理的基于FPGA的等精度多功能测频仪( 二)低频信号测频原理简述: 代码:仿真:的全部内容,希望文章能够帮你解决基于FPGA的等精度多功能测频仪( 二)低频信号测频原理简述: 代码:仿真:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复