简易数字频率计(verilog HDL设计)(2020维护版本)

目录

 

前言

简易数字频率计原理

结语


前言

这篇博客大概是2017年写的,目前已经是2020年8月不到,今天维护了一下但是并未保存,很受伤,不得不重新在维护一次。

最近看到很多评论,说程序有问题,于是我就对这个程序进行一次测试。

并更新博文程序与其他部分内容。

简易数字频率计原理

原理:数字频率计的原理十分简单,简单的就是一句话和一幅图而已。

一句话:测量被测信号的频率,要清楚频率的定义,一言以蔽之,就是1s中信号的周期数。

根据频率的定义,我们测量被测信号1s中变化的次数即可,即1s中的周期数。

首先我们设置一个基准时钟信号,频率为1Hz,从第一个上升沿开始计数(被测信号的上升沿数),直到下一个上升沿到达时停止计数,对数据进行锁存,再到达下一个上升沿时,对计数器进行清零,准备下一次的测量。

根据以上描述,得到相关信号的关系:

一幅图:

我尝试使用wavedrom画了这个图:

                             

本图是简易频率计的工作时序图,从图中 可以看出:

基准信号的第一个上升沿到达时,计数使能信号有效,计数器开始计数;

第二上升沿到达时,计数结束,锁存使能有效,计数数据开始锁存;

第三个上升沿到达时,清零信号有效,对计数器的输出清零,准备下一次的测量。

一个测量过程需要3 sec(重要)。

下面是数字频率计的原理图:

                 

由此原理图可以清晰的理解下面的verilog HDL程序:

程序可以分为四个部分,一个顶层模块,三个子模块:

顶层:

`timescale 1ns / 1ps
//
// blog: https://blog.csdn.net/Reborn_Lee
// Engineer: 李锐博恩
// Design Name: frequency detect
// Module Name: freDetect
// 
//

module freDetect(

	input wire clk_1Hz,            //1Hz基准频率,周期1s;
	input wire fin,                //输入待测信号
	input wire rst,                //复位信号
	output wire [3:0] d0,
	output wire [3:0] d1,
	output wire [3:0] d2,
	output wire [3:0] d3,
	output wire [3:0] d4,
	output wire [3:0] d5,
	output wire [3:0] d6,
	output wire [3:0] d7		

    );
    
 
   wire [3:0] q0, q1, q2, q3, q4, q5, q6, q7;   //中间数据  
 
 
  //控制模块实例  
 
    control control_inst(.clk_1Hz(clk_1Hz),
	.rst(rst),
	.count_en(count_en),  
    .latch_en(latch_en
评论 50
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李锐博恩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值