数字频率计EDA_第1页
数字频率计EDA_第2页
数字频率计EDA_第3页
数字频率计EDA_第4页
数字频率计EDA_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

1、 EDA课程设计 摘要 在电子技术领域中,频率是最基本的参数之一,并且与许多电参量的测量方案以及测量结果都有十分密切的关系,因此频率的测量就显得更为重要。测量频率的方法有多种,其中电子计数器测量频率具有精度高、使用方便、测量迅速,以及便于实现测量过程自动化等优点,是频率测量的重要手段之一。电子计数器测频有两种方式:一是直接测频法,即在一定闸门时间内测量被测信号的脉冲个数;二是间接测频法,周期测频法。直接测频法适用于高频信号的频率测量,间接测频法适用于低频信号的频率测量。本文阐述了用VHDL语言设计了一个简单的数字频率计的过程。关键词:周期;EDA;VHDL;数字频率计;波形仿真第 0 页目录一

2、、绪论1 1.1 设计内容11.2 设计方案11.3 设计目的1二、设计原理2三、具体内容33.1 测频控制信号33.2 计数器43.3 锁存器63.4 扫描译码驱动73.5数码管显示9四、运行结果9五、心得体会10参考文献10附录A VHDL程序12附录B 控制方式管脚列表19附录C 电路原理图20一、绪论1.1 设计内容 此次EDA基础课程设计中使用Altera公司的EP2C35系列的FPGA芯片,利用SOPC-NIOSII-EP2C35开发板设计和仿真一个数字频率计,对1Hz250KHz 的脉冲进行频率测量,采用等精度测量,即在所测量的整个频段内部,均可实现相同精度的测量,即测量精度与频

3、率无关,测得结果在数码管上显示,并设计相应的功能按键。1.2 设计方案此次EDA课程设计采用现场可编程门阵列(FPGA)为控制核心,利用VHDL语言编程,下载烧制实现。本实验要完成的任务就是设计一个频率计,系统时钟选择核心板上的50M的时钟,将所有器件集成在一块芯片上,体积大大减小的同时还提高了稳定性,可实现大规模和超大规模的集成电路,测频测量精度高,测量频率范围大,而且编程灵活、调试方便,并且选用EP3C40F780C8芯片,由50M晶振体产生时钟信号,开关做为相应的功能按键。1.3 设计目的 (1) 了解等精度测频的方法和原理; (2) 掌握如何在FPGA内部设计多种功能模块; (3) 掌

4、握VHDL在测量模块设计方面的技巧。二、设计原理  频率,是指一秒内信号变化的次数,也就是每秒接受信号脉冲的次数。信号易于传输,抗干扰性强,可以获得较好的测量精度。因此,频率检测是电子测量领域最基本的测量之一。频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,然后把时钟分频为高电平为1s的使能信号。计数器1s内计待测信号的脉冲个数,即待测信号的频率。使能时间可以根据需要取值,大于或小于1 s都可以。使能时间越长,得到的频率值就越准确,但使能时间越长,则每测一次频率的间隔就越长。使能时间越短,测得的频率值刷新就越快,但测得的频率精度就受影响。数字频率计的关键组成部分包

5、括测频控制信号发生器、计数器、锁存器、译码驱动电路和显示电路,因为测量区间是在1Hz与250KHz之间,所以八位数码管点亮,但最高显示到第六位为止,下图数码管为可现实有用数字数码管。 锁存器计数器测频控制信号发生DAICE信号 使能50M控制CLR扫描译码电路三、具体内容3.1 测频控制信号测频控制信号发生器产生测量频率的控制时序是最初的,也是整个程序的核心内容。控制信号CLK取为50MHz(为系统时钟电路信号)。分频后就是一个周期为1s的信号CLK1,再分频后就是一个脉宽为1s(即500Hz)的信号CLK3,用来作为计数闸门信号使能信号。当CLK3为高电平时,计数器开始计数;当CLR为低电平

6、时,计数器清零,控制信号CLK分频为1KHz(同时是CLK2扫描信号),再把锁存信号CLK2二分频产生一个500Hz的信号(即锁存信号)。CLR为控制开关,当它为高电平时,分频器才开始工作,当它为低电平时,分频器是停止分频。 程序如下:PROCESS ( CLK1 ) VARIABLE A :STD_LOGIC_VECTOR(25 DOWNTO 0); BEGIN IF (CLR='1')THEN IF CLK'EVENT AND CLK = '1' THEN IF A="10111110101111000010000000" THE

7、N A:="00000000000000000000000000" CLK1<='0' ELSE CLK1<='1' A:=A+1; END IF; END IF; END IF; END PROCESS; PROCESS ( CLK3 ) BEGIN IF CLK1'EVENT AND CLK1='1' THEN CLK3<=NOT CLK3; END IF ; END PROCESS; PROCESS ( CLK2 ) VARIABLE B : STD_LOGIC_VECTOR(12 DOWNTO

8、 0); BEGIN IF (CLR='1')THEN IF CLK'EVENT AND CLK = '1' THEN IF B="1001110001000" THEN B:="0000000000000" CLK2<= '0' ELSE CLK2<= '1'B:=B+1; END IF; END IF; END IF; END PROCESS; PROCESS ( LOAD ) BEGIN IF CLK2'EVENT AND CLK2='1'

9、THEN LOAD<=NOT LOAD; END IF ; END PROCESS; 这里通过分频器分频出来的信号CLK2为1KHz,是1ms,同时作为扫描频率,为何选择1KHz,会在扫描模块处解释。3.2 计数器计数器以待测信号DAICE作为时钟,在使能清零信号CLK3=0到来时,清零,DAICE为高电平时开始计数。此次EDA课程设计的计数器计数最大值是999999,即六位显示,八位可亮。程序如下:PROCESS(DAICE) BEGINIF(DAICE'EVENT AND DAICE='1')THEN IF (CLK3='0') THEN HD

10、<="0000" WD<="0000" QD<="0000" BD<="0000" SD<="0000" GD<="0000" ELSIF (CLK3='1') THEN F(GD="1001")THEN IF(SD="1001")THEN IF(BD="1001")THEN IF(QD="1001")THEN IF(WD="1001&

11、quot;)THEN IF(HD="1001")THEN GD<="0000" SD<="0000" BD<="0000" QD<="0000" WD<="0000" HD<="0000" ELSE GD<="0000" SD<="0000" BD<="0000" QD<="0000" WD<="000

12、0" HD<=HD+1; END IF; ELSE GD<="0000" SD<="0000" BD<="0000" QD<="0000" WD<=WD+1; END IF; ELSE GD<="0000" SD<="0000" BD<="0000" QD<=QD+1; END IF; ELSE GD<="0000" SD<="0000"

13、; BD<=BD+1; END IF; ELSE GD<="0000" SD<=SD+1; END IF; ELSE GD<=GD+1; END IF; END IF; END IF; END PROCESS;3.3 锁存器计数器的计数值被24位锁存器存起来(即锁存信号LOAD上升沿),可由外部的七段译码器译码并在数码管上显示。设置锁存器的好处在于显示数据的稳定,不因清零信号周期性的作用而不断闪烁,导致读数困难。寄存器是在计数结束后,利用触发器的上升沿把最新的频率测量值保存起来,这样在计数过程中可不必一直看着数码管显示器,显示器将最终的频率读数定期进

14、行更新,其输出将作为动态扫描电路的输入。 程序如下:PROCESS(DOUT) BEGIN DIN<=HD&WD&QD&BD&SD&GD; IF LOAD'EVENT AND LOAD='1'THEN IF CLK3='1' THEN DOUT<=DIN; END IF;END IF;END PROCESS;3.4 扫描译码驱动采用动态显示方式,每一个脉冲时刻只能有一个数码管点亮。译码器是对计数器的计数值进行译码显示,由寄存器、动态扫描电路和译码驱动电路组成。同时,采用扫描方式来实现LED数码管动态显示

15、,控制好数码管之间的延迟时间相当重要。LED数码管每秒导通16次以上,人眼就无法LED数码管短暂的不亮,认为是一直点亮的(其实LED数码管是以一定频率在闪动的)。但是,延时(导通频率)也不是越小越好,因为LED数码管达到一定亮度需要一定时间。程序如下:PROCESS(CLK2) BEGIN IF RISING_EDGE(CLK2) THENIF SEL=7 THEN SEL <="000" ELSE SEL<=SEL+1;END IF;END IF;END PROCESS; PROCESS(SEL)BEGINCASE SEL ISWHEN "111&q

16、uot;=> DATAOUT<=DOUT(3 DOWNTO 0);WHEN "110"=> DATAOUT<=DOUT(7 DOWNTO 4);WHEN "101"=> DATAOUT<=DOUT(11 DOWNTO 8); WHEN "100"=> DATAOUT<=DOUT(15 DOWNTO 12); WHEN "011"=> DATAOUT<=DOUT(19 DOWNTO 16); WHEN "010"=> DATAOUT

17、<=DOUT(23 DOWNTO 20); WHEN "001"=> DATAOUT<="0000" WHEN "000"=> DATAOUT<="0000"WHEN OTHERS =>NULL;END CASE;END PROCESS;注意,此处将CLK2做为扫描时钟,SEL为8个数码管的位选信号,高电平有效,DOUT为输入的锁存信号,DATAOUT为选中的信号输出。扫描频率过低数码管会出现闪烁的现象,频率过高则亮度不够甚至无法看清显示数字,所以一般为几毫秒,如1ms,即1KH

18、z。如果不够亮,可以适当增大时间间隔。但是,从点亮第一个数码管到最后一只数码管点亮,整个过程最好别超过20ms,即500Hz,否则会闪烁。在点亮下一个数码管之前,需要断开前一个数码管,否则会出现显示混乱的情况。3.5数码管显示采用8个共阴极数码管来显示待测频率的数值,显示范围从099 9999。程序如下:PROCESS(DATAOUT) BEGINCASE DATAOUT IS WHEN "0000" => D_OUT<="00111111" -0 WHEN "0001" => D_OUT<="000

19、00110" -1 WHEN "0010" => D_OUT<="01011011" -2 WHEN "0011" => D_OUT<="01001111" -3 WHEN "0100" => D_OUT<="01100110" -4 WHEN "0101" => D_OUT<="01101101" -5 WHEN "0110" => D_OUT<

20、="01111101" -6 WHEN "0111" => D_OUT<="00000111" -7 WHEN "1000" => D_OUT<="01111111" -8 WHEN "1001" => D_OUT<="01101111" -9 WHEN OTHERS =>NULL; END CASE; END PROCESS;四、运行结果 软件编译完全正确后,把程序下载至EP3C40F780C8芯片中。八位可亮,

21、六位显示,测量范围是1Kz到250KHz。 实验结果:10Hz、1KHz、10KHz 五、心得体会此次EDA基础课程设计让我们体味到设计电路、设计程序,运用VHDL语言过程中的酸甜苦辣。自己动手设计是每个成为电子工程师的前提,这次课程设计正好给我们提供了一个应用自己所学知识的机会,从到各种书籍以及网络查找资料到对电路的设计对电路的调试再到程序的编写,一直到最后电路的成型,都对我所学的知识进行了检验。在课设过程中发现了以前学的数字电路的知识掌握的不牢。同时在设计的过程中,遇到了一些以前没有见到过的元件,但是通过查找资料来学习这些元件的功能和使用。制作过程是一个考验人耐心的过程,不能有丝毫的急躁,

22、马虎,对程序的编写要一步一步来,不能急躁,因为是在电脑上调试,比较慢,又要求我们有一个比较正确的调试方法,像把频率调准等等。这又要我们要灵活处理,在不影响试验的前提下可以加快进度。合理的分配时间。在设计控制电路的时候,我们可以连接译码显示和计数电路,这样就加快了完成的进度。最重要的是要熟练地掌握课本上的知识,这样才能对试验中出现的问题进行分析解决。在整个课程设计完后,总的感觉是:有收获。以前上课都是上一些最基本的东西而现在却可以将以前学的东西作出有实际价值的东西。在这个过程中,我的确学得到很多在书本上学不到的东西。同时也遇到了不少的挫折,有时遇到了一个错误怎么找也找不到原因所在,找了老半天结果

23、却是接头的方向接错了。在学习中的小问题在课堂上不可能犯,在动手的过程中却很有可能犯。特别是在亲自编写扫描程序时,一不小心就会犯错,而且很不容易检查出来。但现在回过头来看,还是挺有成就感的。我的动手能力又有了进一步的提高,我感到十分的高兴。巩固了课堂上所学到的理论性的知识,对VHDL语言有了更深一层的理解,熟练地掌握了PROTUS软件的应用。通过紧张有序的设计实践,我觉得自己的动手能力有了很大的提高;自信心也增强了.在课程设计中自己动脑子解决遇到的问题,书本上的知识有了用武之地,这又巩固和深化了自己的知识结构。参考文献1 阎石 主编,数字电子技术基础,高等教育出版社,19982 谭会生等主编,E

24、DA技术及应用,西安电子科技大学出版社,20043 潘松、黄继业编著,EDA技术实用教程(第三版),科学出版社 ,20104SOPCIIEDA实验指导书(第二版)5SOPCII使用手册(第二版)附录A VHDL程序LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ZHANGJIAN IS PORT (CLK:IN STD_LOGIC; DAICE:IN STD_LOGIC; CLR :IN STD_LOGIC; SEL: BUFFER STD_LOGIC_VECTOR(2 DOWN

25、TO 0); D_OUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ); END ZHANGJIAN;ARCHITECTURE ART OF ZHANGJIAN IS SIGNAL CLK1:STD_LOGIC; SIGNAL CLK3:STD_LOGIC; SIGNAL LOAD:STD_LOGIC; SIGNAL CLK2:STD_LOGIC; SIGNAL GD:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL SD:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL BD:STD_LOGIC_VECTOR(3 DOWNT

26、O 0);SIGNAL QD:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL WD:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL HD:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL DIN:STD_LOGIC_VECTOR(23 DOWNTO 0);SIGNAL DOUT:STD_LOGIC_VECTOR(23 DOWNTO 0);SIGNAL DATAOUT:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN PROCESS ( CLK1 ) VARIABLE A :STD_LOGIC_VECTOR

27、(25 DOWNTO 0); BEGIN IF (CLR='1')THEN IF CLK'EVENT AND CLK = '1' THEN IF A="10111110101111000010000000" THEN A:="00000000000000000000000001" CLK1<='0' ELSE CLK1<='1' A:=A+1; END IF; END IF; END IF; END PROCESS; PROCESS ( CLK3 ) BEGIN IF C

28、LK1'EVENT AND CLK1='1' THEN CLK3<=NOT CLK3; END IF ; END PROCESS; PROCESS ( CLK2 ) VARIABLE B : STD_LOGIC_VECTOR(12 DOWNTO 0); BEGIN IF (CLR='1')THEN IF CLK'EVENT AND CLK = '1' THEN IF B="1001110001000" THEN B:="0000000000000" CLK2<= '0&#

29、39; ELSE CLK2<= '1'B:=B+1; END IF; END IF; END IF; END PROCESS; PROCESS ( LOAD ) 500HZ BEGIN IF CLK2'EVENT AND CLK2='1' THEN LOAD<=NOT LOAD; END IF ; END PROCESS; PROCESS(DAICE) BEGIN IF(DAICE'EVENT AND DAICE='1')THEN IF (CLK3='0') THEN HD<="0000

30、" WD<="0000" QD<="0000" BD<="0000" SD<="0000" GD<="0000" ELSIF (CLK3='1') THEN IF(GD="1001")THEN IF(SD="1001")THEN IF(BD="1001")THEN IF(QD="1001")THEN IF(WD="1001")THEN IF(

31、HD="1001")THEN GD<="0000" SD<="0000" BD<="0000" QD<="0000" WD<="0000" HD<="0000" ELSE GD<="0000" SD<="0000" BD<="0000" QD<="0000" WD<="0000" HD<

32、=HD+1; END IF; ELSE GD<="0000" SD<="0000" BD<="0000" QD<="0000" WD<=WD+1; END IF; ELSE GD<="0000" SD<="0000" BD<="0000" QD<=QD+1; END IF; ELSE GD<="0000" SD<="0000" BD<=BD+1;

33、 END IF; ELSE GD<="0000" SD<=SD+1; END IF; ELSE GD<=GD+1; END IF; END IF; END IF; END PROCESS; PROCESS(DOUT) BEGIN DIN<=HD&WD&QD&BD&SD&GD; IF LOAD'EVENT AND LOAD='1'THEN IF CLK3='1' THEN DOUT<=DIN; END IF; END IF; END PROCESS; PROCESS(

34、CLK2) BEGIN IF RISING_EDGE(CLK2) THEN IF SEL=7 THENSEL <="000"ELSE SEL<=SEL+1; END IF; END IF; END PROCESS; PROCESS(SEL) BEGIN CASE SEL IS WHEN "111"=> DATAOUT<=DOUT(3 DOWNTO 0); WHEN "110"=> DATAOUT<=DOUT(7 DOWNTO 4); WHEN "101"=> DATAOUT

35、<=DOUT(11 DOWNTO 8); WHEN "100"=> DATAOUT<=DOUT(15 DOWNTO 12); WHEN "011"=> DATAOUT<=DOUT(19 DOWNTO 16); WHEN "010"=> DATAOUT<=DOUT(23 DOWNTO 20); WHEN "001"=> DATAOUT<="0000" WHEN "000"=> DATAOUT<="0000&

温馨提示

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

评论

0/150

提交评论