简易数字频率计设计(EDA)_第1页
简易数字频率计设计(EDA)_第2页
简易数字频率计设计(EDA)_第3页
简易数字频率计设计(EDA)_第4页
简易数字频率计设计(EDA)_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

1、目 录1 引言1 2 设计原理22.1基本原理 2 2.2系统框图 2 2.3整体功能介绍 2 2.4各个模块功能介绍及其程序和仿真结果 42.5 引脚锁定部分14 3 设计总结 15 4 参考文献16 附录 171、引言随着数字电子技术的发展,频率测量成为一项越来越普遍的工作,因此测频计常受到人们的青睐。EDA 技术是以大规模可编程逻辑器件为设计载体,以硬件语言为系统逻辑描述的主要方式,以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为设计工具,通过有关的开发软件,自动完成用软件设计的电子系统到硬件系统2的设计,最终形成集成电子系统3或专用集成芯片的一门新技术。其设计的灵活性使得EDA

2、 技术. 快速发展和广泛应用。以Quartus 软件2为设计平台,采用VHDL 语言1实现数字频率计的整体设计。伴随着集成电路(IC )技术的发展,电子设计自动化(EDA )逐渐成为重要的设计手段,已经广泛应用于模拟与数字电路系统等许多领域。电子设计自动化是一种实现电子系统或电子产品自动化设计的技术,它与电子技术3,微电子技术的发展密切相关,它吸收了计算机科学领域的大多数最新研究成果,以高性能的计算机作为工作平台,促进了工程发展。EDA 的一个重要特征就是使用硬件描述语言(HDL )来完成的设计文件,VHDL 语言是经IEEE 确认的标准硬件语言4,在电子设计领域受到了广泛的接受。EDA 技术

3、就是以计算机为工具,设计者在EDA 软件平台上,有硬件描述语言VHDL 完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片5的适配编译、逻辑映射和编程下载等工作,最终形成集成电子系统或专业集成芯片的一门新技术。EDA 技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。本课程设计可以巩固和加深学生对“EDA 技术”、“数字电子技术”的基础知识的理解,提高综合运用本课程所学知识的能力;培养学生根据课题需要选学参考书籍、查阅手册、图表和文献资料的自学能力,通过独立思考,深入钻研相关问题,学会自己分析解决问题的方法;培养

4、学生硬件设计、软件设计及系统软、硬件调试的基本思路、方法和技巧,并能熟练使用当前较流行的一些有关电路设计与分析方面的软件和硬件;了解有关的电路以及所用的集成块的引脚和技术参数规范,学会按课程编写设计总结,正确反映设计和实验成果,正确绘制电路图并上机调试出结果;培养学生严肃认真的工作作风和科学态度,逐步建立正确的生产观念、工程观念和全局观点。2 设计原理2.1基本原理数字频率计的主要功能是测量周期信号的频率。频率是单位时间(1秒)内信号发生周期变化的次数。在给定的1秒时间内对信号波形计数,并将所计数值显示出来,就能读取被测信号的频率。数字频率计首先必须获得相对稳定与准确的时间,然后通过计数器计算

5、这一段时间间隔内的方波脉冲个数并显示出来。这就是数字频率计的基本原理。2.2 系统框图通过测频控制信号发生器将由脉冲发生器产生的信号转换成所需要的控制信号clk1和en ,待测信号计数器在en 的控制下对待测信号进行测量并通过锁存与译码器在clk1的控制下按要求进行显示,大体结构如图1所示: 2.3 整体功能介绍通过标准时钟信号(f=1HZ)的控制完成对1HZ-10MHZ 的方波信号进行测量,使得所测量的方波频率值在4位数码管上进行显示,并根据不同的待测方波信号,将频率计分为4个量程进行测量,四个量程分别为乘1,乘10,乘100,乘1000量程,量程的选择分为手动和自动两种。当手动选择量程时,

6、自动量程显示部分清零,手动量程部分依手动所选量程而定;当手动选择信号不工作时,图1:系统框图频率计自动选择比较合适的量程进行显示,手动量程部分清零。而且此频率计具有记忆功能,在测量过程中不刷新数据,等数据测量过程结束后才显示测量值,显示测量的频率值,并保存到下一次测量结束。此频率计还有一个异步清零端,随时可以进行清零操作。数字频率计的关键组成部分包括测频控制信号发生器control 、待测信号计数器count 、锁存与译码器lock1三大模块,其原理框图如图2所示。 其中a 代表手动选择量程,sd 代表手动量程的显示,rst 是异步清零端,clk 是周期为1秒的标准时钟,clkin 是待测的方

7、波信号,b 代表是否超出了频率计的测量范围,zd 是在手动选择量程不工作时频率计进行的自动选择合适的量程显示部分,q1q4是四位数值从高位到低位的显示结果。图2:整体框图2.4 各个模块功能介绍及其程序和仿真结果此设计运用元件例化的方法进行功能的实现,所以各个模块即使相互独立又是彼此联系的,三个模块共同完成方波信号的测量和显示。频率测量的基本原理是计算每秒种内待测信号的脉冲个数。这要求control 控制产生一个脉宽为1秒的周期信号en 和一个锁存信号clk1。rst 为高电平时进行异步清零。当en 处于高电平的时候对输入的待测方波信号进行测量,当en 处于低电平的时候停止计数,并保持所计数值

8、。当clk1是上升沿的时候将所保持的数值输出显示。此测频控制信号发生器的程序如下: library ieee;architecture bhv of control is beginprocess(clk,rst begin if rst='1' then clk1<='0'en<='0' elsif(clk'event and clk='1' then en<=not en; end if;clk1<=(not clk and (not en; end process; end bhv;此测频控制

9、信号发生器的仿真结果如图3所示: 此模块得到了脉宽为1秒的控制信号en 和控制输出信号clk1,rst 实现了异步清零的功能。通过测频控制信号发生器control 模块所产生的脉宽为1秒的en 信号来对待测信号进行计数。用28位二进制数d 进行对待测信号的计数,同时用sel 表示自动量程根据所得数值d 变化,sel 为“0001”时代表乘1,sel 为“0010”时代表乘10,sel 为“0100”时代表乘100,sel 为“1000”时代表乘1000。如超过所测最大频率值则将b 置高电平进行报警。此待测信号计数器的程序如下:library ieee;entity count isport(e

10、n,clkin,rst :in std_logic;sel :out std_logic_vector(3 downto 0;d :out std_logic_vector(27 downto 0;b :out std_logic;end count;architecture bhv of count issignal dd: std_logic_vector(27 downto 0;beginprocess(rst,en,clkin图3:测频控制信号发生器的仿真图beginif rst='1' thendd<=(others=>'0'b<=&

11、#39;0'elsif en='1' thenif(clkin'event and clkin='1' thendd<=(others=>'0' b<='1'elsif dd(7 downto 0="10011001" thendd<=dd+"01100111"elsif dd(3 downto 0="1001" thendd<=dd+"0111"else dd<=dd+'1'end

12、if;end if;if dd(27 downto 24>"0000" thensel<="1000"elsif dd(23 downto 20>"0000" thensel<="0100"elsif dd(19 downto 16>"0000" thensel<="0010"else sel<="0001"end if;else dd<=(others=>'0'end if;end p

13、rocess;process(enbeginif(en'event and en='0' thend<=dd;end if;end process;end bhv;此待测信号计数器的仿真结果如图4所示: 此模块实现了在en 为高电平时对输入的待测信号clkin 进行测量,当en 为低电平时停止测量并将所计数值输出,即在1秒内待测信号的脉冲数,也就是待测信号的频率值。sel 为根据所计数值自动合理选择的量程,此时sel 为“0001”,代表乘1HZ 的量程,即所测方波信号的频率在9999HZ 之内。rst 为高电平时对锁存与译码器进行异步清零。rst 为低电平时正常

14、工作。输入信号a 对锁存与译码器进行控制即手动选择量程,当a 为“0001”时,代表选择乘1档,自动量程部分清零,手动量程显示乘1HZ ,只输出计数所得值d 的低四位并显示在四个十进制数码管上;当a 为“0010”时,代表选择乘10档,自动量程部分清零,手动量程显示乘10HZ ,只输出计数所得值d 的次低四位并显示在四个十进制数码管上;当a 为“0100”时,代表选择乘100档,自动量程部分清零,手动量程显示乘100HZ ,只输出计数所得值d 的次高四位并显示在四个十进制数码管上;当a 为“1000”时,代表选择乘1000档,自动量程部分清零,图4:待测信号计数器的仿真结果手动量程显示乘100

15、0HZ ,只输出计数所得值d 的高四位并显示在四个十进制数码管上。当a 为“0000”时,代表不进行手动选择,则手动量程部分清零,自动量程部分根据所计数值进行合理选择。sel 为“0001”代表所测得的频率值在09999HZ 之内,则自动量程显示乘1HZ ,输出所测数值的有效部分并显示在四个十进制数码管上;sel 为“0010”代表所测得的频率值在1000099999HZ 之内,则自动量程显示乘10HZ ,输出所测数值的有效部分的高四位并显示在四个十进制数码管上;sel 为“0100”代表所测得的频率值在100000999999HZ 之内,则自动量程显示乘100HZ ,输出所测数值的有效部分的

16、高四位并显示在四个十进制数码管上;sel 为“1000”代表所测得的频率值在10000009999999HZ 之内,则自动量程显示乘1000HZ ,输出所测数值的有效部分的高四位并显示在四个十进制数码管上。此锁存与译码器的程序如下:library ieee;entity lock1 isport(clk1,rst:in std_logic;d:in std_logic_vector(27 downto 0;sel,a:in std_logic_vector(3 downto 0;zd,sd:out std_logic_vector(3 downto 0;q1,q2,q3,q4:out std_

17、logic_vector(3 downto 0;end lock1;architecture bhv of lock1 isbeginprocess(rst,clk1beginif rst='1' thenq1<=(others=>'0'q2<="0000"q3<="0000"q4<="0000"zd<="0000"elsif(clk1'event and clk1='1' then if(a="0000"

18、; thenif sel="1000" thenq1<=d(27 downto 24; q2<=d(23 downto 20; q3<=d(19 downto 16; q4<=d(15 downto 12; zd<="1000"sd<="0000"elsif sel="0100" then q1<=d(23 downto 20; q2<=d(19 downto 16; q3<=d(15 downto 12; q4<=d(11 downto 8; zd<

19、;="0100"sd<="0000"elsif sel="0010" then q1<=d(19 downto 16; q2<=d(15 downto 12; q3<=d(11 downto 8; q4<=d(7 downto 4; zd<="0010"sd<="0000"elsif sel="0001" then q1<=d(15 downto 12; q2<=d(11 downto 8; q3<=d(7 down

20、to 4; q4<=d(3 downto 0; zd<="0001"sd<="0000"end if;elsif(a="0001" thenq1<=d(15 downto 12; q2<=d(11 downto 8;q3<=d(7 downto 4;q4<=d(3 downto 0;zd<="0000"sd<="0001"elsif(a="0010" thenq1<=d(19 downto 16;q2<=d(1

21、5 downto 12;q3<=d(11 downto 8;q4<=d(7 downto 4;zd<="0000"sd<="0010"elsif(a="0100" thenq1<=d(23 downto 20;q2<=d(19 downto 16;q3<=d(15 downto 12;q4<=d(11 downto 8;zd<="0000"sd<="0100"elsif(a="1000" thenq1<=d(2

22、7 downto 24;q2<=d(23 downto 20;q3<=d(19 downto 16;q4<=d(15 downto 12;zd<="0000"sd<="1000"end if;end if;end process;end bhv;此锁存与译码器的仿真结果如图5所示 此模块的仿真为了将各个功能都清晰的显示出来将sel 进行了提前设置,并不是根据所测频率值进行的自动选择。如果让其自动选择,则输出只有一种结果不能很好的显示sel 的功能,此时的sel 会是“1000”,q1q4只能是“1001”“0110”“010

23、0”“0011”。不过如此提前将sel 的值进行设定并不影响整体的功能。此仿真图中a 为“0100”代表乘100量程,只显示所计数值d 的次高四位,即“0110”“0100”“0011”“1000”,此时手动量程sd 显示为“0100”, 自动量程zd 显示“0000”代表不工作。a 为“0000”时,手动量程sd 显示为“0000”代表不工作,量程的选择由sel 决定,sel 为“1000”时,自动量程zd 显示为“1000”代表乘1000HZ ,q1q4输出为“1001”“0110”“0100”“0011”;sel 为“0100”时,自动量程zd 显示为“0100”代表乘100HZ ,q1

24、q4输出为“0110”“0100”“0011”“1000”。顶层的作用是将三个底层文件联系到一起共同实现此简易数字频率计数器的功能。此处定义了en0,d0,sel0,clko 等四个信号进行底层文件之间以及底层与顶层之间的连接。此模块的程序如下所示:library ieee;图5:锁存与译码器的仿真图entity pin isport(rst,clk,clkin:in std_logic;q1,q2,q3,q4:out std_logic_vector(3 downto 0;sd,zd:out std_logic_vector(3 downto 0;a:in std_logic_vector(

25、3 downto 0;b:out std_logic;end pin;architecture bhv of pin iscomponent controlport(clk,rst : in std_logic;clk1,en : buffer std_logic;end component;component countport(en,clkin,rst :in std_logic;sel :out std_logic_vector(3 downto 0;d :out std_logic_vector(27 downto 0;b :out std_logic;end component;co

26、mponent lock1port(clk1,rst:in std_logic;d:in std_logic_vector(27 downto 0;sel,a:in std_logic_vector(3 downto 0;zd,sd:out std_logic_vector(3 downto 0;q1,q2,q3,q4:out std_logic_vector(3 downto 0;end component;signal clk0: std_logic;signal en0: std_logic;signal d0: std_logic_vector(27 downto 0;signal s

27、el0: std_logic_vector(3 downto 0;beginu1:control port map(clk,rst,clk0,en0;u2:count port map(en0,clkin,rst,sel0,d0,b;u3:lock1 port map(clk0,rst,d0,sel0,a,zd,sd,q1,q2,q3,q4;end;此模块的仿真结果如图6所示: 整体功能仿真结果显示,此待测信号的频率为25HZ 。当a 为“0100”时,代表选择乘100HZ 的量程,即显示次高四位(“0000”“0000”“0000”“0000”),此时,手动量程显示为“0100”表示乘100

28、HZ 量程,自动量程显示为“0000”表示不工作。当a 为“0000”时,手动量程部分为“0000”表示不工作,此时自动量程部分工作,显示为“0001”表示乘1HZ 量程,即所测频率值为25乘1等于25HZ 。图6:整体仿真图2.5 引脚锁定部分如图7所示 完成引脚锁定工作后,再次对设计文件进行编译,排查错误并生成编程下载文件pin.SOF 。执行QuartusII 主窗口“Processing ”菜单下“Start Programming”, ,将配置文件下载到ACEX1K 系统的目标芯片EP1K30144-3上,将clk1的1HZ 频率用短路帽短路,再将clk0的各个频率段不同时用短路帽进

29、行短路并观察数码管上的显示数字,检查是否正确,同时还可以按动键8到键5进行手动选择量程,查看各个部分是否能够完成其功能。图7:引脚锁定图3设计总结通过这次EDA 课程设计,我对课堂上所学到的理论知识的理解加深了许多, 自己动脑、动手设计的能力也得到了较大提高。在这次课程设计的过程中,我对 VHDL 语言有了更深的认识。通过查阅相关资料和动手设计我发现我以前对 VHDL 语言的认识太过肤浅,认为 VHDL 语言只能用于设计小型的电路系统。但有了更深刻的认识之后我发现学好 VHDL 语言可以设计出大规模的、功能复杂的电路系统。以前之所以会有错误的认识是因为自己对 VHDL 语言的了解和掌握还不够。

30、现在仔细想想,这次课程设计使得我对 VHDL 语言的理解与应用能力得到了较大的提升,也让我认识到只要深入学习,提升的空间永远是存在的。在设计的过程中我遇到了一些问题,如:编写源程序中出现了语法错误等。通过查阅书本和以前设计的程序我发现了产生错误的原因并解决了问题完成了设计。经过反思我发现较大一部分错误是因为操作的不熟练造成的,这也让我明白了要保持设计的高效率 必须经常练习。另一方面我也发现了动手实践的重要性。动手实践是理论知识得以灵活运用的必要前提,也是今后走上工作岗位之后能够很好的完成设计工作的技术保证。只有遇到实际问题并根据自己对课堂上获得的专业知识的理解来解决才能真正的提高自己的能力。这

31、也提醒我在平时的学习生活中不能一味埋头于课本知识,当今社会竞争越来越激烈,社会对人才的要求越来越全面,只有理论知识是远远不够的,必须靠实践作支撑。虽然课设完成了,但是我意识到,我对FPGA 技术仅仅只是停留在入门的阶段,想要有更大的发展,更深入的研究,还需要更多的努力与实践。因此在学习之余我们应该积极参加各种与专业知识有关的实践活动和知识竞赛,巩固所学的理论知识,多注重培养实际动手能力和专业技术能力,这样才能在以后的工作岗位上有所作为。4参考文献1.潘松,黄继业。EDA 技术实用教程。科学出版社,2010.6。2.刘江海。EDA 技术课程设计。华中科技大学出版社,2009.5。3.Voknei

32、 A.Pedroni. VHDL 数字电路设计教程. 电子工业出版社,2008.5。4.潘松,黄继业. EDA 技术实用教程(第二版). 科学出版社,2005.2。5.焦素敏. EDA 应用技术. 清华大学出版社,2002.4。附录library ieee;entity pin isport(rst,clk,clkin:in std_logic;a:in std_logic_vector(3 downto 0; q1,q2,q3,q4:out std_logic_vector(3 downto 0; sd:out std_logic_vector(3 downto 0; zd:out std_

33、logic_vector(3 downto 0; b:out std_logic;end pin;architecture bhv of pin issignal clk1:std_logic;signal en:std_logic;signal bb:std_logic;signal dd:std_logic_vector(27 downto 0;signal d:std_logic_vector(27 downto 0;signal sel:std_logic_vector(3 downto 0;beginprocess(clk,rstbeginif rst='1' the

34、nclk1<='0'en<='0'elsif(clk'event and clk='1' thenen<=not en;end if;clk1<=(not clk and (not en;end process;process(rst,en,clkinbeginif rst='1' thendd<=(others=>'0'bb<='0'elsif en='1' thenif(clkin'event and clkin='

35、;1' thenelsif dd(7 downto 0="10011001" then dd<=dd+"01100111"elsif dd(3 downto 0="1001" thendd<=dd+"0111"else dd<=dd+'1'end if;end if;if dd(27 downto 24>"0000" thensel<="1000"elsif dd(23 downto 20>"0000&qu

36、ot; thensel<="0100"elsif dd(19 downto 16>"0000" thensel<="0010"else sel<="0001"end if;else dd<=(others=>'0'bb<='0'end if;end process;process(enbeginif(en'event and en='0' thend<=dd;b<=bb;end if;end process

37、;process(rst,clk1beginif rst='1' thenq1<=(others=>'0'q2<="0000"q3<="0000"q4<="0000"zd<="0000"elsif(clk1'event and clk1='1' thenif(a="0000" thenif sel="1000" thenq1<=d(27 downto 24;q2<=d(23 downto 20;q3<=d(19 downto 16;q4<=d(15 downto 12;zd<="1000" sd<

温馨提示

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

评论

0/150

提交评论