基于FPGA的数字频率计(设计全过程)

小序:

前几天看全国大学生电子设计竞赛历年试题,无意间发现了一道题目《简易数字频率计》,跟之前我用verilog写的一个频率计差不多,于是想尝试做一下,题目具体要求如下图中所示,我所用的开发板为 xilinx spartan 3ES, 最后结果还算理想,在要求的范围内的频率测量精度比较高,但是由于板子的限制没能实现脉冲宽度测量等功能,但是其原理比较简单,下文中将会给出设计过程,结果展示图片以及整个工程代码的下载链接。

数字频率计总体设计采用分块的思想,自底向上设计方向,三个子模块包括频率测量模块(fre_meter),二进制到十进制转换的模块(bin_dec)和数码管显示模块(led),最后用一个顶层模块(top)把三个子模块例化到一起。总体设计思路就是先通过测频模块测得的频率值然后通过进制转换模块将频率值转换为十进制数,最后再输入给显示模块显示出该频率值。

         下图为模块示意图(实际工程中并没有采用原理图的输入方法,有种感觉ISE中原理图输入方法总会产生各种错误,这里仅作示意)。

下面分模块说明:

fre_meter:  测频模块,设计思路完全根据之前我写的一篇博文《verilog编写数字频率计》,只是稍作修改,这里不再重复

                                        输入   clk:系统时钟信号 50Mhz            rst_n:低电平异步复位      clk_in : 被测时钟频率

                                        输出   fre:  20bit位宽的频率值,可以满足题目中要求的 1Mhz的要求

        bin_dec:     进制转换模块,二进制数转换为十进制 ,之前写的一篇博客《利用verilog将二进制码转换为十进制BCD码》其中只涉及到了8bit转换,本设计中待测最高频率1M,转换为二进制数为1111_0100_0010_0100_0000 ,之前的8bit转换思路没法搬到20bit转换中来用,所以寻找其他思路,后来在一个论坛中找到了16bit转换的代码,网址http://www.amobbs.com/thread-5500333-1-1.html  ,经过修改后可以实现20bit二进制数到10进制的转换。

具体转换思路如下,位宽为20bit的二进制数最大为1111_1111_1111_1111_1111,转换为十进制为1048575,那么对于输入的二进制数hex,输出十进制数fre从百万位到各位分别为 Million , HunThousand , TenThousand , Thousand , Hundred , Ten , One。首先对比hex是否大于999999,如果是那么转换为十进制后的第七位Million为1,然后另d1=hex-1000000,如果hex不大于999999,那么 Million  =0,d1=hex。
下面判断第六位HunThousand ,依次先后判断d1是否大于899999 、799999、699999......99999,假设d1>899999  ,那么  HunThousand=9,d2=d1-900000;如果d1>799999  ,那么  HunThousand=8,d2=d1-800000  ........依次类推逐一求得十进制数的每一位(具体设计见代码)。

                                      输入   clk: 系统时钟信号50Mhz           

                                                   rst:低电平异步复位            

                                                   hex:20bit二进制频率值

                                       输出  Million , HunThousand , TenThousand , Thousand , Hundred , Ten , One:  4bit位宽的频率值,代表十进制频率值的不同位

        led:            数码管显示模块,数码管做动态显示利用人眼的对显示频率的敏感限度,八段数码管在一定频率下切换赋值,每一个时钟对一个数码管单独赋值并显示,切换频率大于一定值后,看起来像8位数码管同时显示(具体设计见代码)。

                                      输入   clk: 系统时钟信号50Mhz            

                                                    Million , HunThousand , TenThousand , Thousand , Hundred , Ten , One: 
4bit位宽的频率值,代表十进制频率值的不同为位

                                       输出  sel: 8bit 数码管位选信号

data:8bit数码管译码显示的值

测试结果:

下图为频率计的测试结果,上面一排为信号发生器输入的待测试脉冲的频率,下面一排为对应的频率计的测试结果,可以看出本设计的测量精度完全可以满足题目的要求,但是由于设备的限制,没能实现正弦波的测试,以及脉冲宽度的测试等等功能,但是我觉得原理基本和本设计中的测频模块相同。

本设计的ISE 工程下载地址http://download.csdn.net/detail/li200503028/7277701 ,积分不够用朋友可以给我发邮件[email protected]。

基于FPGA的数字频率计(设计全过程),码迷,mamicode.com

时间: 2025-01-02 01:05:51

基于FPGA的数字频率计(设计全过程)的相关文章

基于FPGA的IIC设计

一.IIC基本概念 IIC 总线(I2C bus, Inter-IC bus)是一个双向的两线连续总线,提供集成电路(ICs)之间的通信线路.IIC总线是一种串行扩展技术,最早由Philips公司推出,广泛应用于电视,录像机和音频设备,IIC 总线的意思是“完成集成电路或功能单元之间信息交换的规范或协议”. Philips 公司推出的 IIC 总线采用一条数据线(SDA),加一条时钟线(SCL)来完成数据的传输及外围器件的扩展. 如图1所示: 图1 二.主机和从机的概念 主机就是负责整个系统的任

基于FPGA的VGA显示设计(二)

上一篇:基于FPGA的VGA显示设计(一)     参照 CrazyBingo 的 基于FPGA的VGA可移植模块终极设计代码  的工程代码风格,模块化处理了上一篇的代码,并增加了一点其它图形. 顶层模块: 1 /**************************************************** 2 * Module Name : VGA_color_all.v 3 * Author : yllinux 博客:http://www.cnblogs.com/yllinux/

基于FPGA的VGA可移植模块终极设计【转】

本文转载自:http://www.cnblogs.com/lueguo/p/3373643.html 略过天涯 基于FPGA的VGA可移植模块终极设计 一.VGA的诱惑 首先,VGA的驱动,这事,一般的单片机是办不到的:由于FPGA的速度,以及并行的优势,加上可现场配置的优势,VGA的配置,只有俺们FPGA可以胜任,也只有FPGA可以随心所欲地配置(当然ARM也可以,应用比较高吧). 初学者就是喜欢看炫的效果,往往会忍不住想玩.尤其玩FPGA的,没玩VGA就感到跟单片机没啥提升,因此VGA的驱动

基于FPGA的高速图像处理平台设计_爱学术

[摘要]针对传统图像处理平台采集.处理速度慢,显示分辨率低,不方便携带等问题,设计了一个基于FPGA的高速图像处理平台,包含高速图像的采集.处理.及显示.图像采集通过Camera Link接口采集图像,图像处理部分利用乒乓操作对图像数据进行高速存储,FPGA完成图像预处理,DSP进行运算复杂的图像处理,图像显示部分输出标准的视频信号进行DVI显示.实验结果表明,平台完成了对图像的高速处理,体积小,处理数据量大,可以替代传统图像处理平台,并应用到多种图像处理领域. [作者] 陈序  卿粼波  何小

基于FPGA的音频信号的FIR滤波(Matlab+Modelsim验证)

1 设计内容 本设计是基于FPGA的音频信号FIR低通滤波,根据要求,采用Matlab对WAV音频文件进行读取和添加噪声信号.FFT分析.FIR滤波处理,并分析滤波的效果.通过Matlab的分析验证滤波效果后,将叠加噪声信号的音频信号输出到txt文件里.然后使用Matlab语言编写滤波器模块和测试模块,通过Modelsim软件读取txt文件的数据,将数据送入滤波模块,最后将滤波的结果输出到txt文件里,最后用Matlab将处理的结果从txt文件读出.显示.FFT分析用Verilog设计的FIR滤

基于FPGA的飞机的小游戏

基于FPGA的飞机的小游戏 实验原理 ????该实验主要分为4个模块,采用至上而下的设计方法进行设计.由50M的晶振电路提供时钟源,VGA显示控制模块.图形显示控制模块.移动模块的时钟为25M,由时钟分频电路产生获得.时钟分频模块采用PLL进行设计,由50M时钟进行2分频获得25M时钟. ????移动模块,控制我方飞机和敌方飞机.子弹的移动,移动的速度可以通过时钟的频率进行控制,操作我方飞机的移动和子弹的发射由外部按键进行控制,控制的方式有发射子弹.左移.右移. ????图像显示控制模块,用于控

基于FPGA的Sobel边缘检测的实现

前面我们实现了使用PC端上位机串口发送图像数据到VGA显示,通过MATLAB处理的图像数据直接是灰度图像,后面我们在此基础上修改,从而实现,基于FPGA的动态图片的Sobel边缘检测.中值滤波.Canny算子边缘检测.腐蚀和膨胀等.那么这篇文章我们将来实现基于FPGA的Sobel边缘检测. 图像边缘:简言之,边缘就是图像灰度值突变的地方,亦即图像在该部分的像素值变化速度非常之快,这就好比在坐标轴上一条曲线有刚开始的平滑突然来个大转弯,在变化出的导数非常大. Sobel算子主要用作边缘检测,在技术

基于FPGA的均值滤波算法实现

我们为了实现动态图像的滤波算法,用串口发送图像数据到FPGA开发板,经FPGA进行图像处理算法后,动态显示到VGA显示屏上,前面我们把硬件平台已经搭建完成了,后面我们将利用这个硬件基础平台上来实现基于FPGA的一系列图像处理基础算法. 椒盐噪声(salt & pepper noise)是数字图像的一个常见噪声,所谓椒盐,椒就是黑,盐就是白,椒盐噪声就是在图像上随机出现黑色白色的像素.椒盐噪声是一种因为信号脉冲强度引起的噪声,产生清楚该噪声的算法也比较简单. 均值滤波的方法将数据存储成3x3的矩阵

基于FPGA的VGA显示静态图片

终于熬到暑假了,记过三四周的突击带考试,终于为我的大二画上了一个完整的句号,接下来终于可以静心去做自己想做的事情了,前一阵子报了一个线上培训班,学学Sobel边缘检测,之前一直在学习图像处理,但是因为一直看人家的代码,到后来难免有点空虚.所以说自己狠下心来,报了一个线上培训班,重新学习一下,自己设计Sobel边缘检测,势要摆脱抄别人代码的魔咒.所以这次图像显示部分和在彩色条纹中显示一副图片的代码,全部是我自己设计的,虽然不是什么大工程,但是还是满满的成就感,这次用的时间比较久,因为使用的是新板子