孩子都能学会的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.mzph.cn/news/206732.shtml

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

相关文章

基于SpringBoot+maven+Mybatis+html慢性病报销系统(源码+数据库)

一、项目简介 本项目是一套基于SpringBootmavenMybatishtml慢性病报销系统,主要针对计算机相关专业的正在做bishe的学生和需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本等,该项目可以直接作为bishe使用。 项目都经过严格调试&a…

二十一章(网络通信)

计算机网络实现了多台计算机间的互联,使得它们彼此之间能够进行数据交流。网络应用程序就是在已连接的不同计算机上运行的程序,这些程序借助于网络协议,相互之间可以交换数据。编写网络应用程序前,首先必须明确所要使用的网络协议…

C++_命名空间(namespace)

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

快速排序的新用法

普通快排 简介 快速排序是一种高效的排序算法,利用分治的思想进行排序。它的基本原理是在待排序的n个数据中任取一个数据为分区标准,把所有小于该排序码的数据移到左边,把所有大于该排序码的数据移到右边,中间放所选记录&#x…

Spring 之 @Cacheable 缓存使用教程

1、Cacheable 指定使用缓存 定义个 Controller ,在方法上加上注解 Cacheable,配置要使用哪些缓存,比如 myMapCache 表示一级缓存是 Map,myRedisCache 表示二级缓存是 Redis。并配置缓存 key。 key 由 SPEL 表达式组成&#xff0c…

异常检测 | MATLAB实现BiLSTM(双向长短期记忆神经网络)数据异常检测

异常检测 | MATLAB实现BiLSTM(双向长短期记忆神经网络)数据异常检测 目录 异常检测 | MATLAB实现BiLSTM(双向长短期记忆神经网络)数据异常检测效果一览基本介绍模型准备模型设计参考资料效果一览 基本介绍 训练一个双向 LSTM 自动编码器来检测机器是否正常工作。 自动编码器接受…

CleanMyMac X2024最新版本软件实用性测评

信大多数MAC用户都较为了解,Mac虽然有着许多亮点的性能,但是让用户叫苦不迭的还其硬盘空间小的特色,至于很多人因为文件堆积以及软件缓存等,造成系统空间内存不够使用的情况。于是清理工具就成为了大多数MAC用户使用频率较高的实用…

二十一章网络通信

计算机网络实现了多台计算机间的互联,使得它们彼此之间能够进行数据交流。网络应用程序就是在已连接的不同计算机上运行的程序,这些程序借助于网络协议,相互之间可以交换数据。编写网络应用程序前,首先必须明确所要使用的网络协议…

数据采集工具的大全【都是免费值得收藏】

数据是推动业务成功的关键之一。为了获取准确、全面的信息,数据采集成为了许多企业和个人的必备工作。本文将专注于数据采集工具,探讨其在全网和指定网站采集方面的优势,为大家提供对比分析,以帮助大家找到最适合的数据采集利器。…

算法复习——6种排序方法的简单回顾

算法复习——6种排序方法的简单回顾 常见排序方法:冒泡排序、选择排序、插入排序、堆排序、归并排序、快速排序的简单回顾 冒泡排序 重复“从序列右边开始比较相邻两个数字的大小,再根据结果交换两个数字的位置” 在冒泡排序中,第 1 轮需要比较 n - 1…

Tair(1):Tair介绍

1 介绍 ​ 在Tair出现之前的很长一段时间里,像redis、memcache这些知名NoSql数据库是不支持分布式的,在这样的背景下,由淘宝网自主开发并在2010.6开源的一个高性能、高扩展、高可靠分布式缓存,类似map的key/value结构&#xff0c…

使用单例模式+观察者模式实现参数配置实时更新

使用vector存储观察者列表 #include <iostream> #include <vector> #include <functional> #include <algorithm>// 配置参数结构体 struct MyConfigStruct {int parameter1;std::string parameter2; };class Config { public:using Observer std::f…

hive 命令行中使用 replace 和nvl2 函数报错

1.有时候在命令行的情况下使用 replace 函数时会报错 这个时候可以使用 translate 代替 2.有时候使用 nvl2() 函数的时候会报错 这个时候可以用 case when 来代替

【Spring 源码】 深入理解 Bean 定义之 BeanDefinition

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

两数之和问题

更好的阅读体验请点击 两数之和。 题目&#xff1a;两数之和 ​ 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 ​ 你可以假设每种输入只会对应一个答案。但是&#xff…

MetricBeat监控Redis

目录 一、安装部署 二、开启Redis监控模块 三、编辑Redis配置文件 四、启动Metricbeat 五、查看监控图表 一、安装部署 metriceat的安装部署参考章节&#xff1a; 监控组件>Metricbeat安装使用&#xff0c;这里不再赘述。 二、开启Redis监控模块 进入metricbeat安装目录…

【每日一题】出租车的最大盈利

文章目录 Tag题目来源解题思路方法一&#xff1a;递归方法二&#xff1a;递归记录数组记忆化搜索方法三&#xff1a;动态规划&#xff08;递推&#xff09; 写在最后 Tag 【递归】【记忆化搜索】【动态规划】【数组】【2023-12-08】 题目来源 2008. 出租车的最大盈利 解题思路…

【EI会议征稿中】2024年第四届人工智能、自动化与高性能计算国际会议(AIAHPC 2024)

2024年第四届人工智能、自动化与高性能计算国际会议&#xff08;AIAHPC 2024&#xff09; 2024 4th International Conference on Artificial Intelligence, Automation and High Performance Computing 2024第四届人工智能、自动化与高性能计算国际会议(AIAHPC 2024)将于20…

蓝桥杯从零开始备战(Python组)---基础知识篇

第一次尝试报名蓝桥杯的Python组&#xff0c;好好备战&#xff0c;希望省赛可以拿奖&#xff01;目前是整理了一些Python的常用函数和常用内置库&#xff0c;后面可能会开始刷题&#xff0c;如果有比较需要记住的知识点&#xff0c;会再写一篇刷题篇 一、输入输出 1.输入字符…

游戏被攻击怎么办

随着科技的进步和互联网的普及&#xff0c;游戏行业也正在经历前所未有的变革。玩家们不再满足于传统的线下游戏&#xff0c;而是转向了线上游戏。然而&#xff0c;随着游戏的线上化&#xff0c;游戏安全问题也日益凸显。游戏受到攻击是游戏开发者永远的痛点&#xff0c;谈“D“…