毕业设计(论文)-基于FPGA的数字频率计的设计.doc_第1页
毕业设计(论文)-基于FPGA的数字频率计的设计.doc_第2页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

(论文)摘要在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此频率的测量就显得十分重要。数字频率计是数字电路中的典型应用,是电子测量与仪表技术最基础的电子仪器之一,是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器。与传统的频率计相比,数字频率计具有精度高、测量范围大、可靠性好等优点。是频率测量的重要手段之一。该论文研究基于fpga的数字频率计的设计,在quartusii环境中,运用vhdl语言完成数字频率计的设计,并对设计进行综合、编译、仿真。通过仿真分析,证明该频率计测量结果的正确性。本文的主要介绍了数字频率计的基本内容和重要性,并对数字频率计的国内外研究现状进行了总结;数字频率计设计开发环境,并对fpga、quartusii、vhdl进行了详细介绍对开发流程详细说明;根据实际需要对数字频率计设计方法、方案进行了可行性比较,并对其实现的功能进行了具体要求,对设计模块进行了划分,并定义了每个模块所实现的功能;用vhdl语言编程,具体实现频率计各个模块的功能, 对数字频率计仿真并验证其功能。关键词: fpga;quartusii;vhdl;频率计abstractin electronics,frequency is one of the most basic parameters.and it have a close relationship with many measurement program of electrical parameters and measurement results, so the measurement of frequency is very important.digital frequency meter is a typical applications in digital circuit,and one of the most basic electronic devices in electronic measurement and instrumentation technology. digital frequency meter is an indispensable measuring instruments for scientific research and production as computers, communications equipment, audio, video. compared with the conventional frequency counter,digital frequency meter have a high accuracy, measurement range and a good reliability. it is one of important measure for frequency measurement: the thesis research in design of digital frequency meter,fpga-based. vhdl language is used to complete the design of digital frequency meter in quartusii,and completed thesis with composited, compiled, simulated. through simulation and analysis, the results show that the accuracy of measure for the frequency. this article mainly introduces the importance and basic content of digital frequency meter, and current research is summarized .the main tasks and content of this design are summarized.design and development environment of digital frequency meter are introduced. fpga, quartusii and vhdl are described in detail.according to the actual needs of the digital frequency meter, design method and design program are compared to achieve the functions of their specific requirements, and defines the functions of each module to achieve the function.keywords : fpga,quartusii ,vhdl,digital frequency met目 录摘要iabstractii第1章 绪论11.1 课题背景与意义11.2 课题目的11.3 技术指标1第2章 fpga开发相关知识简介32.1 fpga的介绍32.2 fpga开发环境42.2.1软件开发环境quartus ii的介绍42.2.2软件仿真环境modelsim的介绍52.3 硬件描述语言verilog hdl62.4 fpga开发流程8本章小结11第3章 频率计的设计方案123.1 系统的总体设计123.1.1 设计思路123.1.2 频率计的基本原理123.2 数字频率计原理方框图13本章小结13第4章 频率计的实现144.1 时钟信号分频模块的设计144.2 测频控制信号发生模块的设计154.3 十进制计数模块的设计164.4 八位十进制计数模块的设计184.5 三十二位锁存器模块的设计204.6 顶层模块的设计20本章小结23结 论24致 谢25参考文献26附录1 译文27附录2 英文参考资料3031第1章 绪论1.1 课题背景与意义在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,频率的测量就显得尤为重要,而频率计的研究工作更具有重大的科研意义。由于大规模和超大规模数字集成电路技术、数据通信技术与单片机技术的结合,数字频率计发展进入了智能化和微型化的新阶段。近年来,随着电子设计技术的飞速发展,数字电路的研究及应用出现了广阔的空间。利用fpga(field programmable gate array)的设计软件可以将设计好的程序“烧写”到fpga器件中,如同自行设计集成电路一样,可以节省电路开发的费用与时间。altera公司提供的quartus ii软件进行fpga设计开发流程,根据设计需要可以进行原理图、硬件描述语言进行设计,并进行编译仿真,配合modelsim仿真软件测试设计功能的实现。1.2 课题目的传统频率计设计用到的器件较多,连线比较复杂,而且会产生比较大的延时,造成测量误差、可靠性差。随着可编程逻辑器件(cpld/fpga)的广泛应用,以eda工具作为开发手段,运用硬件描述语言(vhdl/verilog),将使整个系统大大简化,提高整体的性能和可靠性。而本课题正是采用硬件描述语言对数字频率计进行设计,整个系统非常精简,而且具有灵活的现场可更改性,在不更改硬件电路的基础上,可以对系统进行各种改进来进一步提高系统的性能,因此该数字频率计具有精确、可靠、和现场可编程等优点。1.3 技术指标 本设计所能达到的技术指标如下:1. 能测量输入信号的频率范围为1hz99mhz;2. 波形可以是方波等任何有固定频率的信号;3. 运用硬件描述语言和原理图法进行设计;4. 运用quartus ii软件进行设计和modelsim软件仿真。第2章 fpga开发相关知识简介2.1 fpga的介绍fpga是现场可编程门阵列(field programmable gate array)的简称。fpga器件及其开发系统是开发大规模数字集成电路的新技术。它利用计算机辅助设计,绘制出实现用户逻辑的原理图、编辑布尔方程或用硬件描述语言等方式作为设计输入;然后经一系列转换程序、自动布局布线、模拟仿真的过程;最后生成配置fpga器件的数据文件,对fpga器件初始化。这样就实现了满足用户要求的专用集成电路,真正打到了用户自行设计、自行研制和自行生产集成电路的目的。总的来说,fpga器件具有下列优点:高密度、高速度、系列化、标准化、小型化、多功能、低功耗、低成本、,设计灵活方便,可无限次反复编程,并可现场模拟调试验证。使用fpga器件,一般可在几天到几周内完成一个电子系统的设计和制作,可以缩短研制周期,达到快速上市和进一步降低成本的要求。fpga的基本特点主要有: 1、采用fpga设计asic电路,用户不需要投片生产就能得到合用的芯片;2、fpga可做其它全定制或半定制asic电路的中试样片;3、fpga内部有丰富的触发器和引脚;4、fpga是asic电路中设计周期最短、开发费用最低、风险最小的器件之一;5、fpga采用高速cmos工艺,功耗低,可以与cmos、ttl电平兼容。fpga是由存放在片内ram中的程序来设置其工作状态的,因此,工作时需要对片内的ram进行编程。用户可以根据不同的配置模式,采用不同的编程方式。 加电时,fpga芯片将eprom中数据读入片内编程ram中,配置完成后,fpga进入工作状态。掉电后,fpga恢复成白片,内部逻辑关系消失,因此,fpga能够反复使用。fpga的编程无须专用的fpga编程器,只须用通用的eprom、prom编程器即可。当需要修改fpga功能时,只需换一片eprom即可。这样,同一片fpga,不同的编程数据,可以产生不同的电路功能。因此,fpga的使用非常灵活。2.2 fpga开发环境2.2.1软件开发环境quartus ii的介绍quartus ii是altera提供的fpga/cpld开发集成环境,altera是世界最大可编程逻辑器件供应商之一。quartus ii是altera前一代fpga/cpld集成环境max+plus ii的更新换代产品,其界面友好、使用便捷。quartus ii 是altera公司的综合性pld开发软件,支持原理图、vhdl、veriloghdl以及ahdl(altera hardware description language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整pld设计流程。quartus ii提供了一种与结构无关的设计环境,使设计者能方便的进行设计输入、快速处理和器件编程。quartus ii包含许多十分有用的lpm(library of parameterized modules)模块,它们是复杂或高级系统建构的重要组成成分。本设计在实现原理图输入多层次设计的同时,大量运用了quartusii 的元件库, lmp是参数可设置模块库(library of parameterized modules)的缩写,altera提供的可参数化宏功能模块和lmp函数均基于altera器件的结构做了优化设计。lmp功能模块内容非常丰富,每一个模块的功能。参数含义,使用方法,硬件描述语言模块参数设置以及调用方法都可以在quartusii中的help中查阅到。设计者可以根据实际电路的设计需要,选择lmp库中的适当模块,并为其设定适当的参数,就能够满足自己的设计需要。altera提供的宏功能模块与lmp函数有以下几个方面:1. 算术组件:包括累加器,加法器,乘法器和lmp算术函数;2. 门电路:包括多路复用器和lmp门函数;3. i/o组件:包括时钟数据恢复(cdr),锁相环(pll),双数据速率(ddr),千兆位收发器块(gxb),lvds接收器和发送器,pll重新配置和远程更新宏功能模块;4. 存储器编译器:包括fifo partitioner,rom和rom宏功能模块;5. 存储组件:包括存储器,移位寄存器宏模块和lmp存储器函数。quartus ii允许来自第三方的edif文件输入,并提供了很多eda软件的接口,quartus ii支持层次化设计,可以在一个新的编辑输入环境中对使用不同输入设计方式完成的模块进行调试,从而解决了原理图和vhdl混合输入设计的问题。而且quartus ii拥有性能良好的设计错误定位器,用于确定文本或图形设计中的错误。altera quartus ii 作为一种可编程逻辑的设计环境, 因其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎。2.2.2软件仿真环境modelsim的介绍mentor公司的modelsim是业界最优秀的hdl语言仿真软件,它能提供友好的仿真环境,是业界唯一的单内核支持vhdl和verilog混合仿真的仿真器。它采用直接优化的编译技术和单一内核仿真技术,编译仿真速度快,编译的代码与平台无关,便于保护ip核,个性化的图形界面和用户接口,为用户加快调错提供强有力的手段,是fpga/asic设计的首选仿真软件。主要特点:1. rtl和门级优化,本地编译结构,编译仿真速度快,跨平台跨版本仿真;2. 单内核vhdl和verilog混合仿真;3. 源代码模版和助手,项目管理;4. 集成了性能分析、波形比较、代码覆盖、数据流chasex、signal spy、虚拟对象virtual object、memory窗口、assertion窗口、源码窗口显示信号值、信号条件断点等众多调试功能;5. 对systemc的直接支持,和hdl任意混合;6. 支持systemverilog的设计功能;7. 对系统级描述语言的最全面支持,systemverilog, systemc, psl。modelsim分几种不同的版本:se、pe、le和oem,其中se是最高级的版本,而集成在 actel、atmel、altera、xilinx以及lattice等fpga厂商设计工具中的均是其oem版本。se版和oem版在功能和性能方面有较大差别,比如对于大家都关心的仿真速度问题,以xilinx公司提供的oem版本modelsim xe为例,对于代码少于40000行的设计,modelsim se 比modelsim xe要快10倍;对于代码超过40000行的设计,modelsim se要比modelsim xe快近40倍。modelsim se支持pc、unix和linux混合平台;提供全面完善以及高性能的验证功能;全面支持业界广泛的标准;mentor graphics公司提供业界最好的技术支持与服务。modelsim的使用方法:1. 在f盘建立一个目录modelsimstudy。用任何文本编辑器编辑一个简单的例子程序,比如计数器counter.vhd。有clk、ena、reset输入,cnt作为输出;2. 打开modelsim,首先create project,工程名随意取了,比如命名为test,目录设在modelsimstudy下,默认的库work不变(这样就不用管什么建立库之类的东西了)。然后add existing file,把counter.vhd加入当前工程;3. 编译这个文件,通过之后,work下面会出现counter这个实体。然后选中它,右键,simulate(左键双击也可);4. modelsim有很多窗口,一开始只要选择view下面的 objects 和 wave窗口就行了。旧版的signal窗口在6.0的版本改名为objects。wave窗口刚打开时是空的,需要在objects窗口的 add - wave - signals in region。这时,wave上就有clk ena reset等信号了;5. 我们给clk来个输入激励,在object窗口中选中clk,右键选clock,给它定义个时钟;6.运行run。就有波形出来了。2.3 硬件描述语言verilog hdl任何新生事物的产生都有它的历史沿革,早期的硬件描述语言是以一种高级语言为基础,加上一些特殊的约定而产生的,目的是为了实现rtl级仿真,用以验证设计的正确性,而不必像在传统的手工设计过程中那样,必须等到完成样机后才能进行实测和调试。verilog hdl是一种硬件描述语言(hdl:hardware discription language),是一种以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。verilog hdl和vhdl是目前世界上最流行的两种硬件描述语言,都是在20世纪80年代中期开发出来的。前者由gateway design automation公司(该公司于1989年被cadence公司收购)开发。verilog hdl就是在用途最广泛的c语言的基础上发展起来的一种件描述语言,它是由gda(gateway design automation)公司的philmoorby在1983年末首创的,最初只设计了一个仿真与验证工具,之后又陆续开发了相关的故障模拟与时序分析工具。1985年moorby推出它的第三个商用仿真器verilog-xl,获得了巨大的成功,从而使得verilog hdl迅速得到推广应用。1989年cadence公司收购了gda公司,使得veriloghdl成为了该公司的独家专利。1990年cadence公司公开发表了verilog hdl,并成立lvi组织以促进verilog hdl成为ieee标准,即ieee standard 1364-1995. verilog hdl的最大特点就是易学易用,如果有c语言的编程经验,可以在一个较短的时间内很快的学习和掌握,因而可以把verilog hdl内容安排在与asic设计等相关课程内部进行讲授,由于hdl语言本身是专门面向硬件与系统设计的,这样的安排可以使学习者同时获得设计实际电路的经验。与之相比,vhdl的学习要困难一些,但verilog hdl较自由的语法,也容易造成初学者犯一些错误。 选择vhdl还是verilog hdl?这是一个初学者最常见的问题。其实两种语言的差别并不大,他们的描述能力也是类似的。掌握其中一种语言以后,可以通过短期的学习,较快的学会另一种语言。 选择何种语言主要还是看周围人群的使用习惯,这样可以方便日后的学习交流。当然,如果您是集成电路(asic)设计人员,则必须首先掌握verilog,因为在ic设计领域,90以上的公司都是采用verilog进行ic设计。对于pld/fpga设计者而言,两种语言可以自由选择。设计人员通过计算机对hdl语言进行逻辑仿真和逻辑综合,方便高效地设计数字电路及其产品。常用的verilog hdl语言开发软件有altera公司的max+plus ii,quartus ii和xilinx公司的foundation ise。 2.4 fpga开发流程基于eda工具的fpga/cpld开发流程:1电路设计与输入(quartusii中可直接进行),电路设计与输入是指通过某些规范的描述方式,将工程师电路构思输入给eda工具。常用的设计方法有硬件描述语言(hdl)和原理图设计输入方法等。原理图设计输入法在早期应用得比较广泛,它根据设计要求,选用器件、绘制原理图、完成输入过程。这种方法的有点是直观、便于理解、元器件库资源丰富。但是在大型设计中,这种方法的可维护性较差,不利于模块构造与重用。更主要的缺点就是当所选用芯片升级换代后,所有的原理图都要做相应的改动。目前进行大型工程设计时,最常用的设计方法是hdl设计输入法,其中影响最为广泛的hdl语言是vhdl和verilog hdl。他们的共同特点是利用由顶向下设计,利于模块的划分与复用,可移植性好,通用性好,设计不因芯片的工艺与结构不同而变化,更利于向asic的移植。波形输入和状态机输入方法是两种常用的辅助设计输入方法:使用波形输入时,志耘爱绘制出激励波形与输出波形,eda软件就能自动地根据响应关系进行设计;使用状态机输入法时,设计者只需要画出状态转移图,eda软件就能生成相应的hdl代码或原理图,使用十分方便。但是需要指出的是,波形输入和状态机输入方法只能在某些特殊情况下缓解设计者的工作量,并不适合所有的设计。2功能仿真(modelsim),电路设计完成以后,要用专用的仿真工具对设计进行功能仿真,验证电路功能是否符合设计要求。功能仿真有时也称为前仿真。通过仿真能及时发现设计中的错误,加快设计进度,提高设计的可靠性。3综合优化(synplicity),综合优化(synthesize)是指将hdl语言、原理图等设计输入翻译成由与、或、非门,ram,触发器等基本逻辑单元组成的逻辑连接(网表),并根据目标与要求(约束条件)优化所生成的逻辑连接,输出edf和edn等标准格式的网表文件,供fpga/cpld厂家的布局布线器进行实现。4综合后仿真(modelsim),综合完成后需要检查综合结果是否与设计一致,做综合后仿真。在仿真时,把综合生成的标准延时文件反标志到综合仿真模型中去,可估计门延时带来的影响。综合后仿真虽然比功能仿真精确一些,但是只能估计门延时,不能估计线延时,仿真结果与布线后的实际情况还有一定的差距,并不十分准确。这种仿真的主要目的在于检查综合器的综合结果是否与设计输入一致。目前主流综合工具日益成熟,对于一般性的设计,如果设计者确信自己标注明确,没有综合歧义发生,则可省略该步骤。但是如果在布局布线后仿真时发现有电路结构与设计意图不符的现象,则常常需要回溯到综合后仿真以确认是否时由于综合歧义造成的问题。5实现与布局布线(quartusii中实现),综合结果的本质是一些由与、或、非门,触发器,ram等基本逻辑单元组成的逻辑网表,它与芯片的实际的配置情况还有较大的差距。此时应该使用 fpga/cpld厂商提供的软件工具,根据所选芯片的型号将综合输出的网表适配到具体fpga/cpld器件上,这个过程就叫做实现过程。因为只有器件的开发商最了解器件的内部结构,所以实现步骤必须选用器件开发商提供的工具。在实现过程中最主要的过程是布局布线(par)。所谓布局(place),就是指将逻辑网表中的硬件原语或者底层单元合理地适配到fpga内部的固有硬件结构上,布局的优劣对设计的最终结果(在速度和面积两个方面)影响很大。所谓布线(route),是指根据布局的拓扑结构,利用fpga内部的各种连线资源,合理正确连接各个元件的过程。fpga的结构相对复杂,为了获得更好的实现结果,特别是保证能够满足设计的时序条件,一般采用时序驱动的引擎进行布局布线,所以对于不同的设计输入,特别是不同的时序约束,获得的布局布线结果一般有较大的差异。cpld结构相对简单得多,其资源有限而且布线资源一般为交叉连接矩阵,故cpld的布局布线过程相对简单明朗的多,一般称为适配过程。一般情况下,用户可以通过设置参数指定布局布线的优化准则,总的来说优化目标主要有两个方面,面积和速度。一般根据设计的主要矛盾,选择面积或者速度或者是两者平衡等优化目标,但是当两者冲突时,一般满足时序约束要求更重要一些,此时选择速度或时序优化目标更佳。6时序仿真与验证(modelsim)将布局布线的延时信息反标注到设计网表中,所进行的仿真就叫时序仿真或布局布线后仿真,也叫后仿真。该仿真的仿真延时文件包含的延时信息最全,不仅包含了门延时,还包含了实际布线延时,所以布局布线后仿真最准确,能够较好的反映芯片的实际工作情况。一般来说,布线后仿真步骤必须进行,通过布局布线后仿真能检查设计时序与fpga实际运行情况是否一致,确保设计的可靠性和稳定性。 7板级仿真与验证,有些高速设计情况下还需要使用第三方的板级验证工具进行仿真与验证。这些工具通过对设计的ibis、hspice等模型的仿真,能较好地分析高速设计的信号完整性、电磁干扰等电路特性。8调试与加载配置(quartusii中生成相应的文件,直接下载到相应的电路板上实现验证),设计开发的最后步骤就是在线调试或者将生成的配置文件写入芯片中进行测试。示波器和逻辑分析仪是逻辑设计的主要调试工具。传统的逻辑功能板级验证手段是用逻辑分析仪分析信号,设计时要求fpga和pcb设计人员保留一定数量fpga管脚作为测试管脚,编写fpga代码时将需要观测的信号作为模块的输出信号,在综合实现时在把这些输出信号锁定到测试管脚上,然后连接逻辑分析仪的探头到这些测试管脚,设定触发条件,进行观测。任何仿真或验证步骤出现问题,就需要根据错误定位返回到相应的步骤更改或者重新设计。因此可以将fpga开发一般流程总结为:1. 电路的设计与输入(hdl描述和原理如图输入方法);2. 功能仿真(前仿真:检查所设计的电路是否满足预先设想的功能需求);3. 综合优化(把rtl级描述和原理图描述变成门级网表描术);4. 综合后仿真(检查综合后的结果是否和预想的设计一致);5. 布局布线 (布局:把门级网表中各个基本硬件单元适配到fpga具体的硬件电路上 ;根据布局的拓扑结构和fpga的连线资源,把这些基本硬件单元合理的连接起来);6. 时序仿真与验证(后仿真:包含门延迟和传输线的延迟,能真是反应fpga的实际工作情况,确保设计的稳定性和可靠性);7. 调试与加载配置。以上的任何一步出现问题,都要回到相应的步骤进行重新设计,知道满足要求为止。fpga开发流程图如图2-1所示。图2-4 fpga开发流程图本章小结本章分别从fpga的介绍、fpga的开发环境,硬件描述语言的介绍,fpga开发流程的介绍等几个方面对fpga设计的基础知识进行了深入浅出的阐述,通过对fpga设计的相关基础知识的介绍,便于对下文进一步进行介绍的展开。第3章 频率计的设计方案3.1 系统的总体设计3.1.1 设计思路传统频率计设计用到的器件较多,连线比较复杂,而且会产生比较大的延时,造成测量误差、可靠性差。随着可编程逻辑器件的广泛应用,以eda工具作为开发手段,运用硬件描述语言(vhdl/verilog),将会使系统大大简化,从而提高整体的性能。而本课题正是采用硬件描述语言对数字频率计进行设计,整个系统非常精简,而且具有灵活的现场可更改性,在不更改硬件电路的基础上,可以对系统进行各种改进来进一步提高系统的性能,因此该数字频率计具有高速、精确、可靠、抗干扰性强和现场可编程等优点。本设计采用自顶向下的设计思路,利用verilog硬件描述语言对频率计进行设计,利用modelsim这一业内十分优秀的仿真软件对频率计的核心模块进行仿真,并在quartus ii综合开发软件上对设计进行编译优化和总体仿真。3.1.2 频率计的基本原理电子计数器测频有两种方式:一是直接测频法,即在一定闸门时间内测量被测信号的脉冲个数;二是间接测频法,如周期测频法。直接测频法适用于高频信号的频率测量,间接测频法适用于低频信号的频率测量。本文阐述了基于fpga运用直接测频法设计一个简单的数字频率计的过程,其基本原理是用计数器来计算1s内输入信号周期的个数,它由一个测频控制信号发生器testctl,一个有时钟使能的得计数器(由8个有时钟功能的十进制计数器cnt10组成),和一个32位锁存器reg组成,且该部分硬件电路均由硬件描述语言(vhdl/verilog)来设计实现,将各个模块编译和仿真保证无误之后建立顶层模块将各个模块例化按端口相应关系相连接,完全编译之后,纠正提示错误后,建立波形仿真文件,为各个输入信号添加激励时钟进行仿真即可得到8位10进制显示的数字频率计。3.2 数字频率计原理方框图该测频法频率计是八位十进制数字频率计,它由一个测频控制信号发生器,测频计数模块,和一个输出信号锁存器组成。该数字测频系统组成原理图如图3-1所示。图3-2数字频率计原理方框图本章小结本章旨在介绍该设计的总体设计方案,先介绍了设计思路和频率计的基本工作原理,最后给出了原理方框图,逐步深入,很直观的对总体设计进行了阐述,以便于下一步设计的展开。第4章 频率计的实现运用自顶向下的设计思想, 编程时分别对控制、计数、锁存、译码等电路模块进行vhdl文本描述 ,使每个电路模块以及器件都以文本的形式出现 ,然后通过编译、波形分析、仿真、调试来完善每个器件的功能。单个器件制作完成后 , 然后将它们生成库文件 ,并产生相应的符号 ,最后用语言将各个已生成库文件的器件的各个端口连接在一起 ,从而形成了系统主电路的软件结构。在上述工作的基础上 ,再进行波形分析、仿真调试便完成整个软件设计。其原理流程图如图4所示: 图4 数字频率计原理流程图4.1 时钟信号分频模块的设计由于系统时钟为1khz,因此要将其进行1000分频得到1hz的周期信号,分频程序比较简单,其中输入时钟触发信号为输入的1khz系统时钟信号,clk1为输出的1hz信号,现将源程序摘抄如下:module clkdiv(clk,clk1); input clk; output clk1; reg clk1; reg 10:0 count;always(posedge clk) begin count=count+1; if(count=11d500) begin count=11d0; clk1=clk1; end endendmodule运用quartus ii软件自带仿真器进行仿真的结果如图4-1所示。图4-1分频模块仿真图由上图可见当时钟计数到第500个时,输出信号发生跳变,又经过500个时钟周期后再次跳变,因此上述代码达到了1000分频的目的。4.2 测频控制信号发生模块的设计频率测量的的基本原理是计算每秒内待测信号的脉冲个数。这就要求测频控制信号发生模块的计数使能信号teten能产生一个1s脉宽的周期信号,并对频率计的每一个计数器cntm10的输入时钟使能信号使能端进行同步控制。当teten高电平时允许计数,低电平时停止计数,并保持其所计的数。在停止计数器件,首先需要一个锁存信号load的上跳沿将计数器在前1秒的计数值锁存进锁存器reg1中一段时间后稳定输出。设置锁存器的好处是,显示数据的稳定,不会因为周期性的计数及清零产生闪烁。锁存信号之后,必须有一个输入清零信号cnt清零信号对计数器清零,为下一秒计数做准备。这样需设计一个测频控制信号发生模块,而且它的工作要满足一定的时序关系。为了产生这个时序,需建立一个由d触发器构成的2分频器,在每次时钟输入时钟触发信号上升沿到来时其值翻转。其中输入时钟触发信号的频率为分频模块产生的1hz信号,那么teten的脉宽恰好是1秒,可用作闸门信号。然后根据测频的时序要求,可得到load和输入清零信号cn的逻辑描述。在计数完成后,即计数使能信号teten在1秒的高电平后,利用其反相值的上升沿产生一个锁存信号load,0.5s后,输入清零信号cnt产生一个清零信号的上升沿。该模块的设计尤为重要,其源代码为:module testctl(clk1,tsten,clr_cnt,load); input clk1; output tsten,clr_cnt,load; reg clr_cnt; wire tsten,load; reg div2clk;always(posedge clk1) div2clk=div2clk;always(clk1 or div2clk) if(!clk1 & !div2clk) clr_cnt=1; else clr_cnt=0; assign load=div2clk; assign tsten=div2clk;endmodule运用quartus ii软件自带仿真器进行仿真的结果如图4-2所示。图4-2测频控制信号发生模块由上图可见仿真结果与设计要求一致,故此模块圆满完成。4.3 十进制计数模块的设计计数模块是频率计的核心部分,其有三个输入,两个输出信号组成,ena为输入时钟使能信号,clr为输入清零信号,clk为输入时钟触发信号;co为进位信号为下一级计数器时钟信号,qcnt为输出的4为2进制数据。以下为计数器源程序:module cntm10(clk,clr,ena,co,qcnt);input clk,clr,ena;output co;output 3:0 qcnt;reg co;reg 3:0 qcnt;always(posedge clk or posedge clr) begin if(clr) begin qcnt=4d0; co=1b0; end else begin if(ena) begin if(qcnt=4b1001) begin qcnt=4b0000; co=1b1; end else begin qcnt=qcnt+1b1; co=1b0; end end end end endmodule用modelsim进行仿真,结果如图4-3所示:图4-3 十进制计数模块仿真图可见在输入清零信号和输入时钟使能信号的作用下当计数器由0计到9后,计数器清零重新计数,并在0时产生一个进位信号co供下一级计数器作为时钟输入。4.4 八位十进制计数模块的设计 在十进制计数器设计完成后,需要将8个这样的计数器级联,形成8位10进制的计数器产生10的8次方个数据即0999999999。以下为元件例化的源程序:module cntm8(clk, clr, ena, co, qcnt); input clk; input clr; input ena; output co; output 31:0 qcnt; wire w3,w4,w5,w6,w7,w8,w9; cntm10 u1 (.clk(clk), .clr(clr), .ena(ena), .co(w3), .qcnt(qcnt3:0); cntm10 u2(.clk(w3), .clr(clr), .ena(ena), .co(w4), .qcnt(qcnt7:4); cntm10 u3 (.clk(w4), .clr(clr), .ena(ena), .co(w5), .qcnt(qcnt11:8); cntm10 u4 (.clk(w5), .clr(clr), .ena(ena), .co(w6), .qcnt(qcnt15:12); cntm10 u5 (.clk(w6), .clr(clr), .ena(ena), .co(w7), .qcnt(qcnt19:16); cntm10 u6 (.clk(w7), .clr(clr), .ena(ena), .co(w8), .qcnt(qcnt23:20); cntm10 u7 (.clk(w8), .clr(clr), .ena(ena), .co(w9), .qcnt(qcnt27:24); cntm10 u8 (.clk(w9), .clr(clr), .ena(ena), .co(), .qcnt(qcnt31:28);endmodule用modelsim进行仿真,结果如图4-4所示:图4-4 8位10进制计数器模块仿真图4.5 三十二位锁存器模块的设计计数器输出32位数值,需要送入锁存器保存0.5s后,待数据稳定后再输出显示,代码如下:module reg1 (load,din,dout); input load; input31:0 din; output31:0 dout; reg31:0 dout;always(posedge load) begin dout31:0=din31:0; endendmodule运用quartus ii软件自带仿真器进行仿真的结果如图4-5所示。图4-5 32位锁存器模块仿真图4.6 顶层模块的设计在频率计各个模块设计完成后,需要将各个模块按照相应关系组合起来,这就是顶层模块的元件例化过程。元件例化就是引入一种连接关系,将预先设计好的设计实体定义为一个元件,然后利用特定的语句将此元件与当前的设计实体中的指定端口相连接,从而为当前设计实体引入一个新的低一级的设计层次。在这里,当前设计实体相当于一个较大的电路系统,所定义的例化元件相当于一个要插在这个电路系统板上的芯片,而当前设计实体中指定的端口则相当于这块电路板上准备接受此芯片的一个插座。元件例化是使verilog hdl 设计实体构成自上而下层次化设计的一种重要途径。在一个结构体中调用子程序,包括并行过程的调用非常类似于元件例化,因为通过调用,为当前系统增加了一个类似于元件的功能模块。但这种调用是在同一层次内进行的,并没有因此而增加新的电路层次,这类似于在原电路系统增加了一个电容或一个电阻。元件例化是可以多层次的,在一个设计实体中被调用安插的元件本身也可以是一个低层次的当前设计实体,因而可以调用其它的元件,以便构成更低层次的电路模块。因此,元件例化就意味着在当前结构体内定义了一个新的设计层次,这个设计层次的总称叫元件,但它可以以不同的形式出现。如上所说,这个元件可以是来自fpga元件库中的元件,它们可能是以别的硬件描述语言,如verylog 设计的实体。元件还可以是软的ip 核,或者是fpga 中的嵌入式硬ip 核。元件例化语句由两部分组成,前一部分是对一个现成的设计实体定义为一个元件,第二部分则是此元件与当前设计实体中的连接说明。以下为顶层模块源程序:module pinlv(clk, clkin, qcnt); input clk; input clkin; output 31:0 qcnt; wire clk1,ena,clr,load; wire 31:0 dout; testctl u1 (.clk1(clk1), .tsten(ena), .clr_cnt(clr), .load(load); clkdiv u2 (.clk(clk), .clk1(clk1); cntm8 u3 (.clk(clkin), .clr(clr), .ena(ena), .qcnt(dout31:0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论