孩子都能学会的FPGA:第二十五课——用FPGA实现频率计

(原创声明:该文是作者的原创,面向对象是FPGA入门者,后续会有进阶的高级教程。宗旨是让每个想做FPGA的人轻松入门作者不光让大家知其然,还要让大家知其所以然!每个工程作者都搭建了全自动化的仿真环境,只需要双击top_tb.bat文件就可以完成整个的仿真(前提是安装了modelsim),降低了初学者的门槛。如需整个工程请留言(WX:Blue23Light),不收任何费用,但是仅供参考,不建议大家获得资料后从事一些商业活动!

频率计可以采集外部周期信号的频率,当然实现方法有很多种,这儿我们用FPGA采样计数来实现。

如果用FPGA采样计数实现频率计,那FPGA的采样频率一定要远大于输入信号的频率。这个从直观上是很明确的,你不可能用低频率采样高频信号,就如拿砖头取打天上的飞机,根本打不到的。用相近频率采集输入信号也不可以,因为非常容易错过采集信号的跳变沿,漏过很多采样的信号;只要采样频率远远大于采集信号的频率,才能不会漏过采集信号的跳变细节,得到近似的频率值。

为什么我们不敢保证一定能得到外部输入信号的准确频率值,因为输入信号和FPGA的系统时钟是异步信号,FPGA采集的点有可以巧合错过一个跳变沿,所以我们设计的频率计会有1-2个时钟周期的误差.这个误差可以通过长时间的采集求平均值来减小。

如下所示是FPGA实现频率计的波形示意图,sys_clk是系统时钟,freq_clk是要采集的时钟,flag是设定时间段进行freq_clk时钟数的统计。建议将flag设置成2幂次方秒,这样直接将计数值右移即可,避免了除法的运算。

用系统时钟sys_clk采集输入时钟freq_clk,所以要先把freq_clk同步到sys_clk时钟域,再进行时钟数的统计。所以FPGA的设计也是非常简单的。这里sys_clk时钟频率设置为1MHz,主要是为了减少计数值,方便快速仿真。

设置了一个参数CNT=4000000,就是4秒的时间进行频率计数,然后停4秒,再进行4秒的频率计数,以此反复,用meter_flag进行标识。

freq_flag用来标识采样点,完成输入周期信号freq_clksys_clk的同步

meter_flag拉高的时候,对freq_clk进行计数,通过采集freq_clk的上升沿,最终得计数值通过右移2位实现除4的操作。

在仿真文件中设置freq_clk是128Hz,仿真结果是128,结果正确。

设置freq_clk是100KHz,仿真结果是100_000,结果正确。

设置freq_clk128KHz,仿真结果是128.008,有8个时钟的偏差,原因一是128KHz频率和1MHz比已经相差不大了,而且128KHz不是1MHz的整数倍,所以测量可能就会有偏差的。

还有一个重要的原因就是仿真产生的时钟周期freq_clk不是刚刚好的128KHz,可能会有偏差。我们测量一下freq_clk的频率,确实是128008Hz。

这节课只是简单的介绍频率计的FPGA实现,如果要提高频率计的精度,有多种方法可以改进,比如用两个计数器,一个上升沿计数,一个下降沿计数,相加求平均;再比如将N个连续的频率值相加求平均等等,有兴趣的读者可以自己设计来试一下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/257711.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

游戏盾的防御原理以及为什么程序类型更适合接入游戏盾。

游戏盾是一种专门用于游戏服务器的安全防护服务,旨在抵御各种网络攻击。它的原理主要包括以下几个方面: 流量清洗和过滤:游戏盾会对进入游戏服务器的流量进行实时监测、分析和过滤。它通过识别恶意流量和攻击流量,过滤掉其中的攻击…

org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource

DynamicDataSource-CSDN博客 /** Copyright 2002-2020 the original author or authors.** Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance with the License.* You may obtain a copy of the L…

样本数量对问卷信度效度分析的影响及应对策略

问卷调研是一种常见的数据收集方法。明确问卷的真实性和效率是保证其靠谱性和有效性的重要一步。但问卷的真实性和品质会受到样本数量的影响吗? 一、问卷信度的认识 1、信度的概念和重要性:在问卷实验中,信度是指问卷测量值的稳定性和一致性。高信度代…

教育心得整理

压抑使人反抗,反抗就是报复,报复就会引起犯罪。要消灭犯罪,我们必须杜绝引起孩子报复心理的行为,更重要的是,我们一定要对孩子表现出来爱与尊重 限制批评的次数限制每次批评的范围限制每次批评的强度 当彼此的信任和…

Ubuntu 安装 CUDA 和 cuDNN 详细步骤

我的Linux系统背景: 系统和驱动都已安装。 系统是centos 8。查看自己操作系统的版本信息:cat /etc/issue或者是 cat /etc/lsb-release 用nvidia-smi可以看到显卡驱动和可支持的最高cuda版本,我的是12.2。驱动版本是535.129.03 首先&#…

Linux学习笔记3 xshell(lnmp)

xshell能连接虚拟机的前提是真机能够ping通虚拟机网址 装OpenSSL依赖文件 [rootlocalhost nginx-1.12.2]# yum -y install openssl pcre-devel 依赖检测[rootlocalhost nginx-1.12.2]# ./configure [rootlocalhost nginx-1.12.2]# yum -y install zlib [rootlocalhost n…

Linus:我休假的时候也会带着电脑,否则会感觉很无聊

目录 Linux 内核最新版本动态 关于成为内核维护者 代码好写,人际关系难处理 内核维护者老龄化 内核中 Rust 的使用 关于 AI 的看法 参考 12.5-12.6 日,Linux 基金会组织的开源峰会(OSS,Open Source Summit)在日…

Java实现TCP一对一通信,实现UDP群聊通信

TCP一对一通信: 实现服务端对话框: 其中可自由更改对话框的样式 import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; import java.net.*; public class QqMain extends JFrame implements ActionListener{public static void …

C++_命名空间(namespace)

目录 1、namespace的重要性 2、 namespace的定义及作用 2.1 作用域限定符 3、命名空间域与全局域的关系 4、命名空间的嵌套 5、展开命名空间的方法 5.1 特定展开 5.1 部分展开 5.2 全部展开 结语: 前言: C作为c语言的“升级版”,其在…

Constraining Async Clock Domain Crossing

Constraining Async Clock Domain Crossing 我们在normal STA中只会去check 同步clock之间的timing,但是design中往往会存在很多CDC paths,这些paths需要被正确约束才能保证design function正确,那么怎么去约束这些CDC paths呢? 以下面的design为例,如下图所示 这里clk…

Linux查看openSSL版本

命令:openssl version

RHEL8_Linux计划任务

本章主要介绍如何创建计划任务 使用 at 创建计划任务使用 crontab 创建计划任务 有时需要在某个指定的时间执行一个操作,此时就要使用计划任务了。计划任务有两种:一个是at计划任务,另一个是 crontab计划任务。 下面我们分别来看这两种计划任…