孩子都能學會的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.pswp.cn/news/206732.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/206732.shtml
英文地址,請注明出處:http://en.pswp.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“…