小序:

前几天看全国大学生电子设计竞赛历年试题,无意间发现了一道题目《简易数字频率计》,跟之前我用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 ,积分不够用朋友可以给我发邮件308922492@qq.com。

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

  1. 基于FPGA的FFT设计

    基于FPGA的FFT设计 1.verilog源代码还有实验报告 2.FFT的主要算法 FFT算法并不是一种新的理论算法,它只是用来计算DFT的快速算法,所以它是以DFT为基础的.本课题采用的是基-2 ...

  2. 基于 FPGA Vivado 信号发生器设计(附源工程)

    今天给大侠带来基于 FPGA Vivado 信号发生器设计,开发板实现使用的是Digilent basys 3,如有想要入手 basys 3 开发板的,可以联系牛总:18511371833.话不多说, ...

  3. 频谱仪设计基于FPGA的频谱仪设计,可以测试分析多种频率的频谱,分辨率100HZ

    频谱仪设计基于FPGA的频谱仪设计,可以测试分析多种频率的频谱,分辨率100HZ,配套资料多达100M,东西复杂 ID:982500594354361311卡哇伊2号小宝贝

  4. java 万年历绪论,基于FPGA的万年历设计

    基于FPGA的万年历设计(论文15000字) 摘要:万年历在人们的生活中一直扮演着重要的角色,可随着时代的发展,传统的纸质万年历已经越来越无法满足人们对于时间精确度以及便捷性的要求.随着电子科学的不断 ...

  5. 单片机c语言数字频率计课程设计,基于单片机的数字频率计设计开题报告.doc

    基于单片机的数字频率计设计开题报告.doc 皖西学院本科毕业设计(论文)开题报告学院信息工程学院专业通信工程学生姓名裴晓晴学号2010013513指导教师傅思勇职称助教毕业设计(论文)题目基于单片机的 ...

  6. 基于 FPGA Vivado 示波器设计(附源工程)

    今天给大侠带来基于 FPGA Vivado 示波器设计,开发板实现使用的是Digilent basys 3,如有想要入手 basys 3 开发板的,可以联系牛总:18511371833.话不多说,上货 ...

  7. 单片机测周法c语言程序,基于单片机的数字频率计设计(附原理图及源程序).doc...

    四川理工学院毕业设计 四川理工学院毕业设计 PAGE \* MERGEFORMAT4 PAGE \* MERGEFORMAT5 四川理工学院毕业设计 基于单片机的数字频率计设计 (创新的自动选当功能) ...

  8. FPGA项目(12)——基于FPGA的万年历设计

    首先称述一下所实现的功能:可以显示年.月.日.时.分.秒,有闹钟设置功能,闹钟时间到时,蜂鸣器响,报警.用6位数码管进行显示,分三个显示页面,第一个页面显示年月日,第二个界面显示时分秒,第三个页面显示 ...

  9. 基于fpga的数码管动态扫描电路设计_【至简设计案例系列】基于FPGA的密码锁设计(altera版)...

    秦红凯 明德扬FPGA科教 一.项目背景概述 随着生活质量的不断提高,加强家庭防盗安全变得非常重要,但传统机械锁的构造过于简单,很容易被打开,从而降低了安全性.数字密码锁因为它的保密性很高,安全系数也 ...

  10. 【示波器】基于FPGA的数字示波器设计实现

    1.软件版本 quartusii 2.本算法理论知识 框图结构: 1.缓存里包含有触发控制和触发存储器: 2.由设计指标需要1GsPs的采样率,最后的数据流要降到到250MbPs: 3.从指标来看从波 ...

最新文章

  1. android控件属性
  2. python selenium_Python+selenium自动化测试
  3. CF1100F Ivan and Burgers
  4. wxpython控件绑定事件_wxPython事件处理
  5. linux的进程和作业控制实验报告,Linux基础--进程管理和作业控制
  6. 多变量微积分笔记22——空间曲面的通量
  7. 高效能人士的七个习惯读后感与总结概括-(第三章)
  8. 计算当前时间到午夜零点的时间差——Java(JDK1.8)
  9. 史上最全!大数据开源框架技术扫盲
  10. Android之自定义动画框架实现ScrollView滚动动画总结(雷惊风)
  11. revit怎么上色?教你revit综合工具快速【元素上色】
  12. 什么是SEM竞价推广,竞价排名有何特征?
  13. 树莓派显示器分辨率的调整,黑边的修改方法
  14. MATLAB应用实战系列(六十)-MATLAB数学建模常用的四大模型
  15. 微分,变分,差分的确切定义与区别
  16. properties的配置信息出现\u7684\u6570\u636e\u5e93\u914d\u7f6e
  17. 视频中的帧、行、场概念
  18. [noip2014] 飞扬的小鸟
  19. 有用友T6账套备份,如何判断版本?
  20. 安卓系统一键root:z4root详细使用教程

热门文章

  1. 四旋翼动力学和仿真翻译(Quadcopter Dynamics and Simulation)
  2. ORM-Dapper学习二.关于Dapper
  3. Fred Books图集
  4. oracle sql常用的函数,界别Oracle和SQL Server常用函数
  5. eclipse解决js提示
  6. css滚动条-webkit-scrollbar
  7. 奥运后,接手两个项目,PECT培训,CIW培训,系分考试...........一堆流水帐
  8. 在线 加密解密 工具
  9. Linux利用Coda安装python
  10. WebSocket——SpringBoot+Vue3+TS+SockJS+STOMP简单连接使用