1、 基于 FPGA 的数字频率计的设计 学生专业:学生姓名:指导教师:摘要 数字频率计是近代电子技术领域的重要测量工具之一,同时也是其它许多领域广泛应用的测量仪器。它在规定的基准时间内把测量的脉冲数记录下来,换算成频率并以数字形式显示出来。在许多测量方案以及测量结果中都会涉及到频率测量的相关问题,频率精确测量的重要性显而易见。本设计在了解频率计的基本原理的基础上,基于直接测频法的测试手段,即在一定闸门时间内测量被测信号的脉冲个数;设计频率计的测量范围为1Hz-99.99MHz。将设计分为六个模块,即顶层模块,分频模块,计数模块,单位选择模块,数码管位选模块,转换模块。采用硬件描述语言 Veril
2、og HDL 编写了各个模块的代码,并且运用Quartus II 软件平台进行了功能的仿真,从而完毕输入被测频率,通过选择不同档位,精确输出测量值,达成了预期目的。关键词关键词 数字频率计;直接测频法;Verilog HDL;Quartus II Abstract Digital frequency meter modern electronic technology is one of the important measurement tools and other areas widely used measuring instrument.It stipulated in the be
3、nchmark time to measure the number of pulses recording,the conversion into frequency and displayed in digital form.In many survey scheme and measurement results involve frequency measurements of related problems,the importance of accurate measurement of frequency is obvious.This design in understand
4、ing the basic principle of the frequency meter,on the basis of direct frequency measurement method based on the means testing,that is,in a certain gate time measurement of the measured signal pulse number;Design the frequency meter measuring range of 1 Hz-99.99 MHz.Will design is divided into six pa
5、rts,a top-level module,points frequency modules,count module,the unit choose module,digital tube a chosen module,conversion module The hardware description language Verilog HDL write each module of the code,and make use of Quartus II software platform functions of the simulation.Then measured input
6、frequency,by choosing different rank,precise output measured values,and reach the expected goal.Keywords Digital frequency plan;Direct frequency measurement method;Verilog HDL;Quartus II 目录 摘要.错误错误!未定义书签。未定义书签。Abstract.错误错误!未定义书签。未定义书签。第 1 章 绪论.错误错误!未定义书签。未定义书签。1.1 课题背景和意义.错误错误!未定义书签。未定义书签。1.2 国内外发展
7、情况.错误错误!未定义书签。未定义书签。第 2 章 频率计测量原理及 Verilog HDL 概述.错误错误!未定义书签。未定义书签。2.1 数字频率计测量原理.错误错误!未定义书签。未定义书签。2.1.1 直接计数测频法.错误错误!未定义书签。未定义书签。2.1.2 等精度测频法.错误错误!未定义书签。未定义书签。2.1.3 全同步测频法.错误错误!未定义书签。未定义书签。2.2 Verilog HDL 概述.错误错误!未定义书签。未定义书签。2.2.1 Verilog HDL 介绍.错误错误!未定义书签。未定义书签。2.2.2 Verilog HDL 程序开发流程.错误错误!未定义书签。未
8、定义书签。2.3 本章小结.错误错误!未定义书签。未定义书签。第 3 章 数字频率计模块设计.错误错误!未定义书签。未定义书签。3.1 数字频率计设计指标.错误错误!未定义书签。未定义书签。3.2 数字频率计各个模块.错误错误!未定义书签。未定义书签。3.2.1 顶层模块 fre_counter.错误错误!未定义书签。未定义书签。3.2.2 分频模块 clk_gen.错误错误!未定义书签。未定义书签。3.2.3 计数模块 count.错误错误!未定义书签。未定义书签。3.2.4 单位控制模块 count_4units.错误错误!未定义书签。未定义书签。3.2.5 数码管位选模块 led_sel
9、.错误错误!未定义书签。未定义书签。3.2.6 转换模块 transform.错误错误!未定义书签。未定义书签。3.3 本章小结.错误错误!未定义书签。未定义书签。第 4 章 数字频率计仿真.错误错误!未定义书签。未定义书签。4.1 分频模块仿真波形.错误错误!未定义书签。未定义书签。4.2 计数模块仿真波形.错误错误!未定义书签。未定义书签。4.3 单位控制模块仿真波形.错误错误!未定义书签。未定义书签。4.4 数码管位选模块.错误错误!未定义书签。未定义书签。4.5 转换模块.错误错误!未定义书签。未定义书签。4.6 本章小结.错误错误!未定义书签。未定义书签。第 5 章 芯片介绍和管脚分
10、派.错误错误!未定义书签。未定义书签。5.1 FPGA 芯片介绍.错误错误!未定义书签。未定义书签。5.2 代码管脚分派图.错误错误!未定义书签。未定义书签。5.3 顶层原理图效果图.错误错误!未定义书签。未定义书签。5.4 本章小结.错误错误!未定义书签。未定义书签。结论.错误错误!未定义书签。未定义书签。致谢.错误错误!未定义书签。未定义书签。参考文献.错误错误!未定义书签。未定义书签。附录 1 程序源代码.错误错误!未定义书签。未定义书签。CONTENTS Abstract(Chinese).错误错误!未定义书签。未定义书签。Abstract(English).错误错误!未定义书签。未定
11、义书签。Chapter 1 Introduction.错误错误!未定义书签。未定义书签。1.1 Background and Significance.错误错误!未定义书签。未定义书签。1.2 Domestic and foreign development.错误错误!未定义书签。未定义书签。Chapter 2 Principle and Verilog HDL overview.错误错误!未定义书签。未定义书签。2.1 Measuring principle.错误错误!未定义书签。未定义书签。2.1.1 Direct count frequency measurement method.错误
12、错误!未定义书签。未定义书签。2.1.2 Precision frequency measurement method.错误错误!未定义书签。未定义书签。2.1.3 With all BuCe frequency method.错误错误!未定义书签。未定义书签。2.2 Verilog HDL overview.错误错误!未定义书签。未定义书签。2.2.1 Verilog HDL introduction.错误错误!未定义书签。未定义书签。2.2.2 Verilog HDL program development processes.错误错误!未定义书签。未定义书签。2.3 Chapter su
13、mmary.错误错误!未定义书签。未定义书签。Chapter 3 Digital frequency plan module design.错误错误!未定义书签。未定义书签。3.1 Digital frequency plan design index.错误错误!未定义书签。未定义书签。3.2 Digital frequency plan each module.错误错误!未定义书未定义书签。签。3.2.1 Fre_counter top-level module.错误错误!未定义书签。未定义书签。3.2.2 Points clk_gen frequency modules.错误错误!未定义书
14、签。未定义书签。3.2.3 Count count module.错误错误!未定义书签。未定义书签。3.2.4 The unit control module count_4units.错误错误!未定义书签。未定义书签。3.2.5 Digital tube a choose led_sel module.错误错误!未定义书签。未定义书签。3.2.6 Conversion module transform.错误错误!未定义书签。未定义书签。3.3 Chapter summary.错误错误!未定义书签。未定义书签。Chapter 4 Digital frequency plan simulatio
15、n.错误错误!未定义书签。未定义书签。4.1Points frequency modules simulation waveform.错误错误!未定义书签。未定义书签。4.2 Count module simulation waveform.错误错误!未定义书签。未定义书签。4.3 The unit control module simulation waveform.错误错误!未定义书签。未定义书签。4.4 Digital tube a chosen module.错误错误!未定义书签。未定义书签。4.5 Conversion module.错误错误!未定义书签。未定义书签。4.6 Chap
16、ter summary.错误错误!未定义书签。未定义书签。Chapter 5 Chip introduction and tube foot distribution.错误错误!未定义书签。未定义书签。5.1 Introduced FPGA chip.错误错误!未定义书签。未定义书签。5.2 The code to pin assignment graph.错误错误!未定义书签。未定义书签。5.3 Top principle diagram rendering.错误错误!未定义书签。未定义书签。5.4 Chapter summary.错误错误!未定义书签。未定义书签。Conclusion.错误
17、错误!未定义书签。未定义书签。Acknowledgement.错误错误!未定义书签。未定义书签。References.错误错误!未定义书签。未定义书签。Appendix 1 program.错误错误!未定义书签。未定义书签。第1章 绪论 1.1 课题背景和意义 随着数字电路应用越来越广泛,传统的通用数字集成电路芯片已经很难满足系统功能的规定,并且随着系统复杂限度的不断增长,所需通用集成电路的数量呈爆炸性增长,使得电路板的体积迅速膨胀,系统可靠性难以保证1。此外,现代电子产品的生命周期都很短,一个电路也许要在很短的时间内作改善以满足新的功能规定,对于通用集成电路来说则意味着重新设计和重新布线。而
18、可编程逻辑器件克服了上述缺陷,它把通用集成电路通过编程集成到一块尺寸很小的硅片上,成倍缩小了电路的体积,同时由于走线短,减少了干扰,提高了系统的可靠性2。频率计在电子产品开发中也是广受重视的领域。很多厂家根据各种实际应用需要开发出了很多不同性能、不同档次的各类频率计产品3。产品的不断更新换代也促进了相关频率测量理论和频率计开发技术的不断进步。在高校相关专业,频率理论也是非常重要的教学内容4。在基础实验中,运用频率测量器件进行信号频率的测量更是必备基本操作技能之一。在开发性和综合性实验中,运用各种手段进行频率计的设计和开发也是一个重要课题5。1.2 国内外发展情况 电子计数器是其它数字化仪器的基
19、础,在它的输入通道接入各种模-数变换器,再运用相应的换能器便可制成各种数字化仪器。电子计数器的优点是测量精度高、量程宽、功能多、操作简朴、测量速度快、直接显示数字,并且易于实现测量过程自动化,在工业生产和科学实验中得到广泛应用6。它的重要实现方法有直接式、锁相式、直接数字式和混合式四种。直接式的优点是速度快、相位噪声低,但结构复杂、杂散多,一般只应用在地面雷达中7。锁相式和直接数字式都同时具有容易实现产品系列化、小型化、模块化和工程化的特点,其中,锁相式更是以其容易实现相位同步的自动控制且低功耗的特点成为众多业内人士的首选,应用最为广泛8。频率计的发展也经历了从模拟到数字,从分立到集成、单片机
20、(如美国Intersil 公司研发的 ICM7216D)、再到可编程逻辑器件(CPLD 和 FPGA)的漫长发展过程9。我国运用相检宽带测频技术设计的高精度频率计也非常具有突破性和实用性。如我国的 XDU-17 型高分辨频率计。在 2023 年我国还研制出了中国模拟测振仪,它采用通用微机,通过“东方科卡”和“DASP”、“PDB”等大型软件实现的“PC 卡泰”微机卡式自动检测分析仪器,是专门设计的集数据采集,信号解决,故障诊断,模态分析,桩基检测,噪声与声强测量,动力学修改和响应计算等多种功能于一体的独创性产品10。实现手段的进步使得频率计的性能、功能、性价比、可靠性等指标不断提高。目前频率计
21、重要靠以下三个电路进行设计11:(1)基于分立器件的模拟电路实现:即采用传统分立器件自下而上设计实现,这种方法在电子技术发展的初期采用较多。(2)基于单片机的数字电路实现:即以技术及应用都非常成熟的单片机为核心控制部件加上中规模集成数字器件来实现。(3)基于可编程逻辑器件的数字电路实现:即除了脉冲整形、键盘输入和显示等少部分电路外,频率计其余重要电路都用可编程逻辑器件来实现。第2章 频率计测量原理及 Verilog HDL 概述 2.1 数字频率计测量原理 为了准确测量频率,人们研究出了很多方法。频率测量的准确度重要取决于所测量的频率范围和被测对象的特点。而测量所能达成的精度,既取决于基准频率
22、源的精度,也取决于所使用的测量设备和测量方法12。下面介绍几种常用频率测量方法,分析各自优缺陷。2.1.1 直接计数测频法 目前广泛使用的直接测频法则适合于数字电路实现,该方法是根据频率的定义,记下单位时间内周期信号的反复次数,因此又称为电子计数器测频法13。其中最基本方法是直接计数测频法,它又涉及以下 2 种重要测量方法:1.直接测频法 又称 M 法,其测频原理如图 2-1 所示。其基本原理是选用一个频率较低的标准频率信号作为闸门信号,而将被测较高频率信号作为填充脉冲,在拟定的闸门时间 T 内,记录被测信号的变化周期数 N,则可知被测信号的频率为:xNfT (2-1)T标准闸门被测信号脉冲
23、图 2-1 直接测频法原理 误差分析:此法测量误差重要取决于闸门时间 T 和计数器计数的准确度,因此总误差可用分项误差绝对值线性相加表达:001xxxfffTff (2-2)式中,11xNTfNN是最大量化误差的相对值,它的产生是由于测频时,闸门的启动时刻与被测计数脉冲的时间关系不相关导致的,即在相同的闸门启动时间内,计数器所得的数并不一定相同14。当闸门时间启动时间 T 接近甚至等于被测信号周期 TX的整数倍时,最大量化误差为 N=1 个数。00fTfT为闸门时间相对误差,重要由时基电路标准频率的准确度决定15。通常,对闸门时间准确度00ff的规定是根据所规定的测频准确度而提出的,为了使闸门
24、时间频率误差不对测量结果产生影响,标准频率的准确度应高于被测信号准确度至少 1 个数量级,即001xffTf。因此,测量较高的信号频率时,假如 f0一定,闸门时间 T 越长,测量准确度越高;反之当 T 选定后,xf越高,1 个计数误差对测量结果的影响越小,测量准确度越高。根据以上介绍和分析可知直接测频法比较适合于高频信号的测量16。2.直接测周期法 又称 T 法,其测频原理如图 2-2 所示。其基本原理是选被测信号作为闸门信号,而将频率较高的标准频率信号作为填充脉冲进行计数。设标准频率信号的频率为 f0,在一个闸门时间计数值为 N,则被测信号的频率为:0 xffN (2-3)标准闸门被测信号脉
25、冲 图 2-2 直接测周期法原理 综上可知,直接计数测频法(涉及直接测频法和直接测周期法)的优点是原理简朴、测量方便、读数直接,可以在比极宽的频率范围内进行测量17。缺陷是由于存在对被测信号或标频信号计数的 1 个数字误差,难以兼顾低频和高频实现等精度测量,所以总体来说测量精度较低。2.1.2 等精度测频法 等精度测频法(M/T 法),又叫多周期同步测频法,是在直接计数测频法基础上发展起来的,在目前的测频系统中应用比较广泛18。其测量原理波形如图 2-3 所示,测量原理框图如图 2-4 所示。该法同时具有 M 法和 T 法的优点,它通过测量被测信号数个周期的标频计数次数,然后换算得出被测信号的
26、频率,可兼顾低频与高频信号,提高了测量精度19。标准时钟被测信号预置闸门实际闸门 图 2-3 等精度测频法原理波形 COUNT1COUNT2预置闸门被测信号fxDCPQ标准信号fc实际闸门 图 2-4 等精度测频法原理框图 测量时,一方面预置闸门信号启动,此时计时器并不计数。待被测脉冲信号上升沿到来时,触发器被触发输出计数使能信号(即实际闸门)20。此时,count1 对标准信号进行计数,count2 对被测信号计数。预置闸门信号关闭时,计数器并不立即停止计数,而是等到被测信号上升沿到来时才停止计数,从而实现了实际闸门信号与被测信号的同步,消除了由于被测信号产生的最大 1 个计数误差21。2.
27、1.3 全同步测频法 在全同步测频法中,闸门信号不仅与被测信号同步,并且与标准时钟也同步,实现三者真正的全同步,从而彻底消除了由被测信号或者标频信号计数引起的量化误差,大大提高了测量精确度。其测量原理波形如图 2-5 所示,测量原理系统框图如图 2-6 所示。标准时钟被测信号闸门信号 图 2-5 全同步测频原理波形 显示电路FPGA脉冲同步检测电路标准时钟被测信号 图 2-6 全同步测频原理系统框图 被测频率与标准时钟分别送给脉冲同步检测电路与两个计数器,当脉冲 同步检测电路检测到被测频率与标准时钟相位同步时,脉冲同步检测电路发出同步信号,2 个计数器开始计数,当脉冲同步检测电路再次检测到同步
28、信号时,又发出同步信号,计数器停止计数。同时计数器的计数值锁存到锁存器,时序乘法器从锁存器中取得被测频率的计数值与标准时钟频率进行乘法运算,然后再将乘法器运算所得的值与标准时钟的计数值送给除法器,乘法器的结果为被除数,标准时钟的计数值为除数,运算所得结果就是被测信号的频率22。由以上介绍和分析可知,通过长期的发展,数字频率计的测量方法已经比较丰富和成熟。由于直接计数测频法有着设计简朴,并且它是所有测量方法的基础,有着比较成熟的理论,可参考资料也较多。所以本文采用直接计数测频法中的直接测频进行的设计。2.2 Verilog HDL 概述 2.2.1 Verilog HDL 介绍 Verilog
29、HDL 是一种硬件描述语言(hardware description language),为了制作数位电路(数字电路)而用来描述 ASICs 和 FPGAs 的设计之用。Verilog的设计者想要以 C 程序语言(en:C programming language)为基础 C 程序语言(en:C programming language)为基础设计一种语言,可以使工程师比较熟悉跟容易接受。事实上,它产生与 C 程序语言类似的不严谨性质,并且大约与Pascal 很相像。这种语言跟传统的程序设计语言不同,在于它的程序叙述并非严格地线性(循序)执行。Verilog 模式包含不同模组(modules)
30、的阶层关系。模组(modules)是输出(inputs)和输入(outputs)所定义出来的一个集合。在每个模组中有一串的电线(wires)、暂存器(registers)和子模组(submodules)的定义。并且在每个模组里面,语言叙述大部分都被群组成为各种的执行区块(blocks),用来定义该模组所产生的行为描述。在每个区块(blocks)内,使用begin 和 end 的关键字来区隔开来,其中的叙述是循序被执行。但是同一个设计,不同的区块间的执行是平行的23。2.2.22.2.2 Verilog HDL 程序开发流程 1.文本编辑:用任何文本编辑器都可以进行,也可以用专用的 HDL 编辑
31、器进行编辑。通常 Verilog 文献保存为.v 文献。2.功能仿真:将文献调入 HDL 仿真软件进行功能仿真,检查逻辑功能是否对的(也叫前仿真,对简朴的设计可以跳过这一步,只在布线完毕以后,进行时序仿真)。3.逻辑综合:将源文献调入逻辑综合软件进行综合,即把语言综合成最简的布尔表达式和信号的连接关系。逻辑综合软件会生成.edf(edif)的 EDA工业标准文献。4.布局布线:将.edf 文献调入 PLD 厂家提供的软件中进行布线,即把设计好的逻辑安放到 PLD/FPGA 内。5.时序仿真:需要运用在布局布线中获得的精确参数,用仿真软件验证电路的时序。6.编程下载:确认仿真无误后,将文献下载到
32、芯片中24。2.3 本章小结 本章重要的介绍了数字频率计的三种测量方法,分别为:直接测量,等精度测量,全同步测量,并且在第二部分对 Verilog HDL 语言进行了简朴的介绍。第3章 数字频率计模块设计 3.1 数字频率计设计指标 该频率计有三个输入信号 fre_in,clk_50k,rstn 其中 clk_50k 脚输入标准的50KHz 方波信号,作为参考时钟 fre_in 为信号输入端,被测信号频率从这里送入,rstn 为系统复位端,上电时该引脚需要保持一端时间低电平。该系统输出脚为 a,b,c,d,e,f,g,unit,led_sel。a,b,c,d,e,f,g 为数码管译码输出。un
33、it 表达当前显示数值的单位,可为 1Hz,10Hz,100Hz,1kHz,10kHz。led_sel 为数码管位选信号。该频率计测量范围为 1Hz-99.99MHz,可根据输入信号频率自动调整显示数值的单位为合适的数值,并通过 unit 端口告知用户读数的单位。本课题的数字频率计顶层 RTL 硬件电路图如图 3-1 所示。图 3-1 顶层 RTL 硬件电路图 3.2 数字频率计各个模块 3.2.1 顶层模块 fre_counter 顶层模块为本课题的最上层模块,由它来例化整个程序,把其它分开的小模块进行整合。其电路原理图如图 3-2 所示。图 3-2 顶层模块原理图 根据模块实现的功能设计
34、Verilog HDL 源代码如下:module fre_counter(clk_50k,fre_in,rstn,led_sel,unit,a,b,c,d,e,f,g);input clk_50k,fre_in,rstn;output1:0 led_sel;output2:0 unit;output a,b,c,d,e,f,g;wire div_10,div_100,div_1000,div_10000,div_100000;clk_gen part_clk_gen(.rstn(rstn),.clk(clk_50k),.div_10(div_10),.div_100(div_100),.div
35、_1000(div_1000),.div_10000(div_10000),.div_100000(div_100000);reg gate;wire3:0 count_a,count_b,count_c,count_d;count_4units part_count(.clk(fre_in),.gate(gate),.out_a(count_a),.out_b(count_b),.out_c(count_c),.out_d(count_d);reg2:0 gate_sel;assign unit=gate_sel;wire unit_H;reg unit_L;always(negedge c
36、ount_a3 or negedge gate)if(!gate)unit_L=1b0;else unit_L=1b1;assign unit_H=(count_a=4d0)&(count_b=4d0)&(count_c=4d0)&(count_d=4d0);always(negedge gate or negedge rstn)begin if(!rstn)gate_sel=3d0;else if(unit_L&(gate_sel!=3d4)gate_sel=gate_sel+3d1;else if(unit_H&(gate_sel!=3d0)gate_sel=gate_sel-3d1;el
37、se gate_sel=gate_sel;end always(gate_sel or div_10 or div_100 or div_1000 or div_10000 or div_100000)begin case(gate_sel)3d0:gate=div_100000;3d1:gate=div_10000;3d2:gate=div_1000;3d3:gate=div_100;3d4:gate=div_10;default:gate=div_100000;endcase end wire d_n0_a,d_n0_b,d_n0_c,d_n0_d;wire a,b,c,d,e,f,g;w
38、ire trans_ena_a,trans_ena_b,trans_ena_c,trans_ena_d;wire ena_a,ena_b,ena_c,ena_d;wire clk_lock;assign clk_lock=gate;transform part_tran_a(.d_n0(d_n0_a),.din(count_a),.clk_lock(clk_lock),.ena(trans_ena_a),.a(a),.b(b),.c(c),.d(d),.e(e),.f(f),.g(g);transform part_tran_b(.d_n0(d_n0_b),.din(count_b),.clk
39、_lock(clk_lock),.ena(trans_ena_b),.a(a),.b(b),.c(c),.d(d),.e(e),.f(f),.g(g);transform part_tran_c(.d_n0(d_n0_c),.din(count_c),.clk_lock(clk_lock),.ena(trans_ena_c),.a(a),.b(b),.c(c),.d(d),.e(e),.f(f),.g(g);transform part_tran_d(.d_n0(d_n0_d),.din(count_d),.clk_lock(clk_lock),.ena(trans_ena_d),.a(a),
40、.b(b),.c(c),.d(d),.e(e),.f(f),.g(g);wire clk_ledc;assign clk_ledc=div_1000;led_sel part_led_sel(.rstn(rstn),.clk_ledc(clk_ledc),.led_ena(ena_a,ena_b,ena_c,ena_d),.led_count(led_sel);assign trans_ena_a=ena_a&d_n0_a;assign trans_ena_b=ena_b&(d_n0_b|d_n0_a);assign trans_ena_c=(d_n0_c|d_n0_b|d_n0_a)&ena
41、_c;assign trans_ena_d=ena_d;endmodule 以上程序把 clk_gen,count_4units,transform 和 led_sel 这几个模块连起来进行了整个程序的整合。3.2.2 分频模块 clk_gen 这个模块重要是对给的总频率 50khz 进行了 5 次分频,通过这 5 个不同的频率来完毕档位的自动转换。分频模块的电路原理图如图 3-3 所示。图 3-3 分频模块原理图 根据模块实现的功能设计 Verilog HDL 部分源代码如下:always(posedge clk or negedge rstn)begin if(!rstn)count1=3
42、d0;else if(count1=3d4)count1=3d0;else count1=count1+3d1;end reg d1;always(posedge count12 or negedge rstn)begin if(!rstn)d1=1d0;else d1=d1;end assign div_10=d1;reg2:0 count2;always(posedge d1 or negedge rstn)begin if(!rstn)count2=3d0;else if(count2=3d4)count2=3d0;else count2=count2+3d1;end 其中,div_10
43、 是把输入的 clk_10 分频,为了得到占空比 50%的方波,我先把它 5 分频,再 2 分频。count1=3d4,是由于 count1 有 0,1,2,3,4。这 5 个状态,d1 用于 2 分频。若输入的 clk 信号为 50khz 则 div_100000 的高电平连续时间为 1S,用这个作为计数器的 gate 信号,计数器在 1S 内对 fre_in脚信号的脉冲进行计数,所以输出的值单位为 Hz。例如若当前是 div_100000信号(高电平 1S),检测到计数器溢出,说明输入频率大于 9999Hz,显示的数据并不准确,于是选择 div_10000(高电平 0.1S),显示计数单位
44、为 10Hz,若仍然检测到溢出,就选择 div_1000(高电平 0.01s)。3.2.3 计数模块 count 这个模块是一个十进制计数器,计数范围为 0-9,count 对输入的 clk 进行加法计数,当计数到 9 及 4b1001 时,下一个 clk 脉冲来时 count 值归零,这样以实现一个简朴的计数功能。计数模块电路原理图如图 3-4 所示。图 3-4 计数模块原理图 根据模块实现的功能设计 Verilog HDL 部分源代码如下:always(posedge rst or posedge clk)begin if(rst)begin count=4b0000;end else i
45、f(ena)begin if(count=4b1001)count=4b0000;else count=count+4b0001;end else begin count=count;end end assign qout=count;assign full=(count=4b1001);上面的代码重要实现了当 ena 为 1 时当 count 等于 9 时自动清 0 否则自动加 1 当 count 为 9 是 full 给一个高电平 1。这样来实现一个简朴的计数功能。3.2.4 单位控制模块 count_4units 本模块是显示测量频率的单位部分,当分频模块进行自动档位变化的时候,用这个模
46、块通过 unit 端口告知用户读数的单位。模块能读取的单位分别为 1Hz,10Hz,100Hz,1kHz,10kHz。单位控制模块的原理图如图 3-5 所示。图 3-5 单位控制模块原理图 根据模块实现的功能设计 Verilog HDL 部分源代码如下:countc_d(.clk(clk),.ena(1b1),.rst(rst),.qout(out_d),.full(ena_c);countc_c(.clk(clk),.ena(ena_c),.rst(rst),.qout(out_c),.full(ena_b);countc_b(.clk(clk),.ena(ena_b&ena_c),.rst
47、(rst),.qout(out_b),.full(ena_a);countc_a(.clk(clk),.ena(ena_a&ena_b&ena_c),.rst(rst),.qout(out_a),.full()以上程序是对四个 count 模块进行了例化,所以单位控制模块是由 4 个计数器组成的。3.2.5 数码管位选模块 led_sel 本模块是为了在数码管显示的时候对数码管进行选择性的点亮,用程序代码来控制数码管的使能端口。位选模块原理图如图 3-6 所示。图 3-6 位选模块原理图 根据模块实现的功能设计 Verilog HDL 部分源代码如下:parameter LED_NUM=4;p
48、arameter COUNT_BIT=2;input clk_ledc,rstn;outputLED_NUM:1 led_ena;outputCOUNT_BIT:1 led_count;regCOUNT_BIT:1 count;assign led_count=count;always(posedge clk_ledc or negedge rstn)begin if(!rstn)count=2d0;else count=count+2d1;end regLED_NUM:1 led_ena;always(count)begin case(count)2d0:led_ena=4b0001;2d1
49、:led_ena=4b0010;2d2:led_ena=4b0100;2d3:led_ena=4b1000;default:led_ena=4b0000;endcase end 以上程序重要是为了当 clk_ledc 输入时钟的时候,led_count 对 4 个数码管进行动态扫描。3.2.6 转换模块 transform 这个模块相称于一个译码模块,把测量出的结果转换成可以在数码管上显示的模式。转换模块原理图如图 3-7 所示。图 3-7 转换模块原理图 根据模块实现的功能设计 Verilog HDL 部分源代码如下:always(posedge clk_lock)locked_d=din;
50、reg6:0 codecache;always(locked_d)begin case(locked_d)4d0:codecache=7b1111110;4d1:codecache=7b0110000;4d2:codecache=7b1101101;4d3:codecache=7b1111001;4d4:codecache=7b0110011;4d5:codecache=7b1011011;4d6:codecache=7b1011111;4d7:codecache=7b1110000;4d8:codecache=7b1111111;4d9:codecache=7b1111011;default