数字频率计设计毕业设计Word文件下载.docx
《数字频率计设计毕业设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《数字频率计设计毕业设计Word文件下载.docx(24页珍藏版)》请在冰豆网上搜索。
![数字频率计设计毕业设计Word文件下载.docx](https://file1.bdocx.com/fileroot1/2022-12/29/b8cca4f9-cd9a-46e4-befc-cd9d771dfb00/b8cca4f9-cd9a-46e4-befc-cd9d771dfb001.gif)
1概论1
1.1设计概述1
1.2设计目的2
1.3设计内容2
1.4设计原理2
1.5设计功能3
2数字频率计的设计思路3
2.1时基的设计3
2.2计数器的设计4
2.3模块的划分4
3数字频率计各模块的设计和实现5
3.1计数器的设计和实现(附录5)5
3.27段译码器的设计5
3.3数字频率计综合设计5
4数字频率计波形仿真6
4.1省略分频进程6
4.210kHz、100kHz和1MHz三挡仿真6
第一次仿真采用测试信号的周期为200us,即频率为5kHz,按照频率计的设计,应该是自动换到10kHz测频挡,显示为5.00,单位为kHz。
仿真波形如图4.2-1:
6
4.3测周期挡仿真8
5调试常见错误及解决办法9
5.1常见错误与解决办法9
6结束语10
附录1:
MAX+PLUSⅡ简介11
附录2:
软件的安装12
附录3:
软件组成13
附录4:
设计流程14
附录5:
计数器模块代码15
附录6:
译码器模块代码17
附录7:
频率计源文件代码18
附录8:
锁存源程序代码24
参考文献:
25
前言
随着电子技术的发展,当前数字系统的设计正朝着速度快、容量大、体积小、重量轻的方向发展。
推动该潮流迅猛发展的引擎就是日趋进步和完善的设计技术。
目前数字频率计的设计可以直接面向用户需求,根据系统的行为和功能要求,自上至下的逐层完成相应的描述、综合、优化、仿真与验证,直到生成器件。
上述设计过程除了系统行为和功能描述以外,其余所有的设计过程几乎都可以用计算机来自动地完成,也就是说做到了电子设计自动化(EDA)。
这样做可以大大地缩短系统的设计周期,以适应当今品种多、批量小的电子市场的需求,提高产品的竞争能力。
电子设计自动化(EDA)的关键技术之一是要求用形式化方法来描述数字系统的硬件电路,即要用所谓硬件描述语言来描述硬件电路。
所以硬件描述语言及相关的仿真、综合等技术的研究是当今电子设计自动化领域的一个重要课题。
硬件描述语言的发展至今已有几十年的历史,并已成功地应用到系统的仿真、验证和设计综合等方面。
到本世纪80年代后期,已出现了上百种的硬件描述语言,它们对设计自动化起到了促进和推动作用。
但是,它们大多各自针对特定设计领域,没有统一的标准,从而使一般用户难以使用。
广大用户所期盼的是一种面向设计的多层次、多领域且得到一致认同的标准的硬件描述语言。
80年代后期由美国国防部开发的VHDL语言(VHSICHardware DescriptionLanguage)恰好满足了上述这样的要求,并在1987年12月由IEEE标准化(定为IEEEstd1076--1987标准,1993年进一步修订,被定为ANSI/IEEEstd1076--1993标准)。
它的出现为电子设计自动化(EDA)的普及和推广奠定了坚实的基础。
据1991年有关统计表明,VHDL语言业已被广大设计者所接受。
另外,众多的CAD厂商也纷纷使自己新开发的电子设计软件与VHDL语言兼容。
由此可见,使用VHDL语言来设计数字系统是电子设计技术的大势所趋。
1概论
1.1设计概述
所谓频率,就是周期性信号在单位时间(1s)里变化的次数。
本数字频率计的设计思路是:
根据频率计的测频原理,可以选择合适的时基信号即闸门时间,对输入被测信号脉冲进行计数,实现测频的目的。
根据数字频率计的基本原理,本文设计方案的基本思想是分为五个模块来实现其功能,即整个数字频率计系统分为分频模块、控制模块、计数模块、译码模块和量程自动切换模块等几个单元,并且分别用VHDL对其进行编程,实现了闸门控制信号、计数电路、锁存电路、显示电路等。
在进行设计之前,首先搞清楚在什么情况下是测频率,在什么情况下是测周期,其实就是一个选择合适的时基信号的问题。
在这个设计中,要在频率计提供的时基信号和输入信号之间做出选择,充当时基信号即闸门时间。
当测频率的时候,要以输入信号作为时钟信号,因为输入信号的频率大于频率计提供的基准频率,在频率计提供的基准信号周期内,计算输入信号的周期数目,再乘以频率计基准频率,就是输入信号的频率值了。
此时的时基信号为频率计的基准信号。
当测周期的时候,要以频率计提供的基准信号作为时钟信号,因为频率计提供的时基频率大于输入信号的频率,在输入信号周期内,计算频率计提供的基准信号的周期数目,再乘以基准信号频率,就是输入信号的周期值了。
此时的时基信号为输入信号。
1.2设计目的
学会利用MAX+PLUSⅡ进行层次化设计;
练习混合设计设计输入的方法;
巩固用试验箱验证设计的方法。
1.3设计内容
分析数字频率计的功能,完成功能模块的划分,分别用VHDL语言完成底层模块的设计和以原理图的方法完成顶层模块的设计,分别对各个模块以及顶层模块进行仿真分析,最后在硬件开发平台上进行测试。
1.4设计原理
众所周知,频率信号易于传输,抗干扰性强,可以获得较好的测量精度。
因此,频率检测是电子测量领域最基本的测量之一。
频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,对比测量其他信号的频率。
通常情况下计算每秒内待测信号的脉冲个数,即闸门时间为1s。
闸门时间可以根据需要取值,大于或小于1s都可以。
闸门时间越长,得到的频率值就越准确,但闸门时间越长,则每测一次频率的间隔就越长。
闸门时间越短,测得的频率值刷新就越快,但测得的频率精度就受影响。
一般取1s作为闸门时间。
数字频率计的关键组成部分包括测频控制信号发生器、计数器、锁存器、译码驱动电路和显示电路,其原理框图如图1.4-1所示。
图1.4-1原理框图
1.5设计功能
3位数字频率计是用3个十进制数字显示的数字式频率计,其频率测量范围为1MHz。
为了提高测量精度,量程分别为10kHz、100kHz和1MHz三挡,即最大读数分别为9.99kHz,99.9kHz和999kHz。
要求量程自动换挡。
具体功能如下:
当读数大于999时,频率计处于超量程状态,下一次测量时,量程自动增大一挡。
当读数小雨099时,频率计处于欠量程状态,下一次测量时,量程自动减少一挡。
当超出频率测量范围时,显示器显示溢出。
采用记忆显示方法,即测量过程中不显示数据,待测量过程结束以后,显示测频结果,并将此结果保持到下次测量结束。
显示时间不少于1秒。
小数点位置随量程变化自动移位。
增加测周期功能,就是当时钟频率低于0.99kHz的时候,显示的数值变成周期,以毫秒为单位。
2数字频率计的设计思路
2.1时基的设计
输入信号是随意的,没法预知其频率是多少,如何选取频率计提供的基准信号是关键。
设计要求量程分别为10kHz,100kHz和1MHz三挡。
测频率时,在某个挡进行测量的时候,就需要提供该挡的时基。
在10kHz挡,该挡最大读数为9.99kHz,同时也说明最小的读数是0.01kHz,所以提供的时基应该是频率为0.01kHz的脉冲。
同样的道理100kHz挡提供的时基应该是0.1kHz的脉冲,1MHz挡提供的时基应该是频率为1kHz的脉冲。
要产生这3种脉冲,就得从输入的时钟中提取(这里假设输入的是20MHz的脉冲),分别采用分频的方法来产生这3种时基信号显然不可取,太浪费资源,因为分别产生得用到3个分频器,一个为20kHz分频器,用于产生频率为1kHz的脉冲;
一个200kHz分频器,用于产生频率为0.1kHz的脉冲;
一个2M分频器,用于产生频率为0.01kHz的脉冲。
可以考虑先用一个20kHz分频器,产生频率为1kHz的脉冲,再利用一个10倍分频器对1kHz脉冲进行分频,产生0.1kHz的脉冲,一个100倍分频器对1kHz脉冲进行分频,产生0.01kHz的脉冲。
同样用到了3个分频器,但是节约了资源。
再考虑具体的实现,在测频率的时候,由于采用输入信号作为时基,以输入信号为时钟,用一个计数器测量在一个时基周期里,输入信号的周期数目,如此就可以得到输入信号的频率。
但是一个时基信号,例如频率为0.01kHz(周期为100ms)的脉冲信号,在整个100ms的周期里,根据占空比,有高电平也有低电平,这就给计数器计数的判断带来了麻烦。
最好是能够产生一个高电平为100ms的脉冲信号作为时基,那么就能够在程序中以“如果时基信号为1”作为判断条件,如果满足条件则计数器计数,方便了程序的书写。
同理,在这个设计中还要产生高电平为10ms和1ms的脉冲信号作为时基。
可以考虑使用状态机来实现这3种时基,因为采用状态机来控制时序很清楚,不容易出错。
状态机用1kHz(周期为1ms)的脉冲信号触发,因为所要生产的时基中,频率最大(周期最小)的就是1kHz的脉冲,要产生高电平为10ms和1ms的脉冲信号,可以采用100个状态的状态机,从状态1,状态2......到状态100.要产生高电平为1ms的脉冲信号,只要在状态99的时候产生高电平,状态100的时候回到低电平即可;
要产生高电平为10ms的脉冲信号,则要在状态90的时候产生高电平,在状态100的时候回到低电平。
需要产生哪个时基得根据此时频率计所在的挡作为判断条件进行控制。
在100个状态中,有很多状态的功能相同的,可以将它们合并。
2.2计数器的设计
各个挡之间的转换应遵循设计要求,要根据在时基有效时间内的计数值进行判断。
计数器可以直接定义成一个整型信号,这样计数器计数(即加1)就十分方便,只要使用语句“计数器<
=计数器+1;
”就可以。
但是这个计数值要作为显示输出,就要将这个计数器用个位、十位、百位分开表示,而且要遵循加法“逢十进一”的规则。
这样可以直接通过7段译码器进行显示。
因为在不同的挡位,小数点的位置是不同的,所以小数点的显示以所在挡为判断条件。
2.3模块的划分
计数器在各个挡被反复应用的,如果在各个挡分别设计计数器,就造成资源的浪费,而且在测周期和测频率的时候,计数器的时候信号和输入信号要进行调换,但是计数功能是一样的,所以将计数器设计成单独的模块。
7段译码器在个位、十位、百位中也都被利用到,因此也将其设计成单独的模块,重复引用就不需要在3个位显示的时候重复书写译码电路了。
另外,计数器的输入信号和时钟信号要通过一个进程来提供。
在测频率时,进程向计数器提供的时钟信号是输入频率计的测量信号,计数器的输入信号是频率计提供的时基;
在测周期时,进程向计数器提供的时钟信号是频率计提供的时基,计数器的输入信号是输入频率计的测量信号。
3数字频率计各模块的设计和实现
3.1计数器的设计和实现(附录5)
3.27段译码器的设计
7段译码器将输入的4位BCD码以7段译码的方式输入。
可以使用一个7位向量来分别表示7段译码器中的7段。
(附录6)
3.3数字频率计综合设计
要设计的数字频率计需要3个输入端口,一个脉冲输入端口clk(频率为4.19MHz);
一个异步复位端口rest,用于使系统回到初始状态;
还有一个就是测试信号的输入端口testsignal,用于输入待测试的信号。
该频率计需要7个输出端口,要有一个表示是显示频率还是周期的输出端口unit;
还有3个显示频率值的7段译码输出端口display1,display2和display3,以及3个小数点输出端口dot向量。
(附录7)
state是用于产生时基的状态机类型,共有开始状态(start)、判断状态(judge)、计数状态1(count1)、计数状态2~89(count2to89)、计数状态90(count90)、计数状态91~98(count91to98)、计数状态99(count99)、计数状态100(count100)。
这里,将计数状态2、计数状态3一直到计数状态89进行了合并,将计数状态91到计数状态98进行了合并,因为这些状态功能一致,所以合并。
将计数状态1、计数状态90、计数状态99和计数状态100单独提取出来的原因是时基信号都在状态100清零,产生高电平为100ms的时基,需要在计数状态1的时候将时基信号置1,由于从1~99只有99ms,因此在计数状态1之前的judge状态中,如果处于10kHz测频挡,就要将时基信号置1;
产生高电平为10ms的时基,需要在计数状态90的时候将时基信号置1;
产生高电平为1ms的时基,则需要在计数状态99将时基信号置1,所以计数状态1、计数状态90和计数状态99要单独提取。
4数字频率计波形仿真
4.1省略分频进程
由于设计输入的脉冲信号为4.19MHz,所以如果直接采用上面的设计进行仿真,那么将很浪费时间。
在能够保证分频不错误的情况下,可以在结构体中省略分频的进程,并且将实体设计作出如下改动:
useieee.std_logic_1164.all;
libraryieee;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entitydfreis
port(reset:
instd_logic;
clk1k:
--1k时钟信号
testsignal:
--测试信号输入端
display1:
outstd_logic_vector(0to3);
display2:
display3:
--3个7段译码器输出
unit:
outstd_logic;
--表示是周期还是频率的信号灯
dot:
outstd_logic_vector(2downto0));
--小数点
endentitydfre;
再次编译以后,在仿真中就可以直接采用clk1k的脉冲作为触发,即采用频率为1kHz的脉冲作为时钟信号。
这是一种明智的仿真方法,很多时候都可以借鉴。
4.210kHz、100kHz和1MHz三挡仿真
图4.2-1测试信号是频率为5kHz脉冲时的仿真波形图
在波形图中可以看到,开始的时候flag为2,表示频率计处于100kHz测频挡,但是这个挡提供的时基不能满足要求,时基太小,计数器在时基为高电平的时候计数次数太少,不能达到100次,所以要自动换挡。
100kHz测频挡提供一个时基以后,马上换到10kHz测频挡。
可以看到flag变成1了,如下图所示。
此时的时基符合要求,因此最后就稳定地显示频率数值如图4.2-2。
图4.2-2第一次仿真中的换挡情况
第二次仿真待用测试信号的周期为40us,即频率为25kHz,按照频率计的设计,应该自动换挡到100kHz测频挡,显示为25.0,单位为kHz。
仿真波形如图4.2-3所示:
图4.2-3测试信号是频率为25kHz脉冲时的仿真波形图
第三次仿真采用测试信号的周期为4us,即频率为250kHz,按照频率计的设计,应该自动换挡到1MHz测频挡,显示为250,单位为kHz。
仿真波形如图4.2-4所示:
图4.2-4号是频率为250kHz脉冲时的仿真波形图
在波形图中可以看到,开始的时候flag为2,表示频率计处于100kHz测频挡,但是这个挡提供的时基不能满足要求,时基太小,计数器在时基为高电平的时候计数次数超过了要求的范围,所以要自动换挡。
100kHz测频挡一个时基以后,马上换到1MHz测频挡。
可以看到flag变成3了,如上图。
此时的时基符合要求,因此最后就稳定地显示频率数值。
4.3测周期挡仿真
这次仿真采用测试信号的周期为6ms,按照频率计的设计,应该自动换挡到测周期挡,显示为006,单位为ms。
测周期的仿真如图4.3-1:
图4.3-1测试信号是周期为6ms脉冲的仿真波形图
值得注意的是,测周期显示的数值是真正周期的一半,造成这种显示的原因和程序的设计有关,当测周期的时候,频率计提供的时基作为计数器的触发时钟,而测试信号作为输入信号,测试信号是占空比为1的信号,在计数器设计中,计数值加1的判断条件是输入信号为1,因此,在一个输入信号周期里,只有半个周期计数器在计数,所以显示的周期只是真正周期的一半。
为了解决这个问题,可以考虑将输入信号锁存,就是当在输入信号上升沿的时候触发锁存器,并且将输入信号的高电平锁存一个周期。
(附录8)
当测量周期的时候,输入信号通过锁存器后再输入计数器,这样就能正确显示周期。
5调试常见错误及解决办法
5.1常见错误与解决办法
在编译时候出现如下图5.1-1提示错误:
图5.1-1
解决办法:
把文本文档保存名以程序实体名命名,然后问题就可以解决了。
在编译时候出现如下图5.1-2提示错误:
图5.1-2
将计数器模块和译码器模块的的VHD文件拷贝到频率计源文件的文件夹下,然后再次编译就能解决了。
编译时候出现如下图5.1-3提示错误:
图5.1-3
设计程序少考虑一种情况,即少考虑一种others情况,在其他情况下添加others,即添加“whenothers=>
data_out<
=”1111””,然后再次编译问题就能解决了。
6结束语
12年4月,我开始了我的嵌入式课程设计,时至今日,设计基本完成。
从最初的茫然,到慢慢的进入状态,再到对思路逐渐的清晰,整个设计过程难以用语言来表达。
历经了几个月的奋战,紧张而又充实的期末设计终于落下了帷幕。
回想这段日子的经历和感受,我感慨万千,在这次课程设计的过程中,我拥有了无数难忘的回忆和收获。
我在学校图书馆搜集资料,还在网上查找各类相关资料,将这些宝贵的资料全部保存起来,尽量使我的资料完整、精确、数量多,这有利于课程的设计。
当资料查找完毕了,我开始着手课程的设计。
在设计过程中遇到困难我就及时和我的指导老师XX老师联系,在XX老师的帮助下,困难一个一个解决掉,嵌入式课程设计也慢慢成型。
这次课程设计的制作过程是我的一次再学习,再提高的过程。
脚踏实地,认真严谨,实事求是的学习态度,不怕困难、坚持不懈、吃苦耐劳的精神是我在这次设计中最大的收益。
我想这是一次意志的磨练,是对我实际能力的一次提升,也会对我未来的学习和工作有很大的帮助。
在此更要感谢我的指导老师XX老师,是你的细心指导和关怀,使我能够顺利的完成嵌入式课程设计。
老师的严谨治学态度、渊博的知识、无私的奉献精神使我深受启迪。
从尊敬的导师身上,我不仅学到了扎实、宽广的专业知识,也学到了做人的道理。
在此我要向我的导师XX致以最衷心的感谢和深深的敬意。
MAX+PLUSⅡ简介
MAX+PLUSⅡ(MultipleArrayandProgrammingLogicUserSystem)开发工具是Altera公司推出的一种EDA工具,具有灵活高效、使用便捷和易学易用等特点。
Altera公司在推出各种CPLD的同时,也在不断地升级相应的开发工具软件,已从早起的第一代A+PLUS、第二代MAX+PLUS发展到第三代MAX+PLUSⅡ和第四代Quartus。
使用MAX+PLUSⅡ软件,设计者无需精通器件内部的复杂结构,只需用业已熟悉的设计输入工具,如硬件描述语言、原理图等进行输入即可,MAX+PLUSⅡ就会自动将设计转换成目标文件下载到器件中去。
MAX+PLUSⅡ开发系统具有以下特点。
多平台。
MAX+PLUSⅡ软件可以在基于PC机的操作系统如Windows95、Windows98、Windows2000、WindowsNT下运行,也可以在SunSPACstation等工作站上运行。
开放的界面。
MAX+PLUSⅡ提供了与其他设计输入、综合和校验工具的接口,借口符合EDIF200/300、LPM、VHDL、Verilog-HDL等标准。
目前MAX+PLUSⅡ所支持的主流第三方EDA工具主要有Synopsys、Viewlogic、Mentor、Graphics、Cad