动态输出4位十进制频率计的设计_第1页
动态输出4位十进制频率计的设计_第2页
动态输出4位十进制频率计的设计_第3页
动态输出4位十进制频率计的设计_第4页
动态输出4位十进制频率计的设计_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

1、武汉职业技术学院课程结业论文论文题目: 动态输出4位十进制频率计的设计 姓 名: 彭华平 所在院系: 电子信息工程学院 班 级: 通信12303 学 号: 12011193 指导教师: 虞 沧 武汉职业技术学院二一三年十二月目 录一、概述.2二、设计正文. 3(一)设计目的.3(二)设计实现.41、端口说明.42、Cnt10模块说明.53、Tctl模块说明.64、锁存器reg16模块说明.85、scan_led模块说明.96、顶层文件仿真.97、硬件实现.11三、总结.13四、感言.14五、参考献.14摘要此次设计的主要目的是学习掌握频率计的设计方法;掌握动态扫描输出电路的实现方法;学习较复杂

2、的数字系统设计方法。通过单位时间(1秒)内频率的计数来实现频率计的设计。此设计主要用四位十进制计数器,所以频率计数范围为1009999Hz。然后锁存防止闪烁显示,最后由译码扫描显示电路输出到数码管进行显示输出。并且下载后会有一秒钟的延时后才会显示输出所计频率输出。设计下载后能够进行仿真频率的计数和静态显示,但是分频的设计程序有所缺陷导致长时间显示后会有1Hz的抖动。通过这次的设计能够更清楚的理解VHDL程序的描述语言,进行简单程序的编写和仿真。动态输出4位十进制频率计的设计一、目的1. 学习掌握频率计的设计方法。2. 掌握动态扫描输出电路的实现方法。3. 学习较复杂的数字系统设计方法二、设计实

3、现4位十进制频率计外部接口如图1所示,顶层文件如图2所示,包含4中模块;Tctl、reg16、scan_led和4个cnt10。(1)端口说明F1Hz:给Tctl模块提供1Hz的频率输入。Fin:被测频率输入。scan_led:给scan_led模块提供扫描输入频率输入。bt1.0:片选信号输出。sg6.0:译码信号输出。cout:进位输出。图一 四位十进制频率计的外部接口图二 四位十进制频率计顶层文件(2)cnt10模块说明cnt10为含异步清零和同步时钟使能的十进制计数器,采用级联的方法进行计数,计数范围与所用cnt10级联个数有关,本次设计采用的是四个cnt10的级联,所以测频范围为09

4、999Hz。计数模块cnt10的源代码如下所示:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY cnt10 ISPORT(rst,en,clk:IN STD_LOGIC;Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);cout:OUT STD_LOGIC);END cnt10;ARCHITECTURE BEHAV OF cnt10 ISSIGNAL cnt:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(rst,en,clk)

5、BEGINIF rst='1'THEN cnt<="0000"ELSIF(clk'EVENT AND clk='1')AND en='1'THENIF cnt="1001"THENcnt<="0000"cout<='1'ELSEcnt<=cnt+1;cout<='0'END IF;END IF;END PROCESS;Q<=cnt;END BEHAV;(3)Tctl模块说明根据频率的定义和测量的基本原理,测定信号

6、的频率必须有一个脉宽为1秒的对输入信号脉冲计数允许的信号;1秒计数结束后,计数值锁入锁存器的锁存信号和为下一测频计数周期做准备的计数器清0信号。这三个信号可以由一个测频控制信号发生器Tctl产生,其设计要求是Tctl的计数使能信号en能产生一个1秒脉宽的周期信号,并对频率计的每一计数器cnt10的en使能进行同步控制、当en高电平时,允许计数;低电平时停止计数,并保持其所计的脉冲数。在停止计数期间,首先需要一个锁存信号load的上升沿将计数器前1秒钟的计数值锁存进各锁存器reg16中,并由外部的译码器译出并显示计数值。锁存信号之后,必须有一清零信号rst对计数器进行清零,为下1秒钟的技术操作做

7、准备。控制模块Tctl源代码如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY Tctl ISPORT ( clkk: IN STD_LOGIC;en,rst,load: OUT STD_LOGIC);END;ARCHITECTURE behav OF Tctl ISSIGNAL div2clk: STD_LOGIC;BEGINPROCESS(clkk)BEGINIF clkk'EVENT AND clkk='1'THEN div2clk <= NOT

8、 div2clk; END IF;END PROCESS;PROCESS (clkk, div2clk)BEGINIF clkk='0' AND div2clk='0' THENrst<='1'ELSE rst<= '0'END IF;END PROCESS;load<= NOT div2clk;en<=div2clk;END behav;Tctl工作时序波形图如图三所示:图三 频率计测频控制器Tctl侧可控时序图图中clkk的频率为1Hz,en的高电平持续时间为1秒,此时计数器开始工作,当en低电平的时候

9、停止计数,并将计数值经过load锁存的reg16中最后通过scan_led译码显示输入。en的计时长度为1秒,即en的周期为2秒。计数器在en高电平计数完成即en从高电平跳跃到低电平时将计数结果锁存的reg16中。rst在满足clkk和en均为低电平的时候对已锁存入锁存器的计数信号进行清零工作,为下一个技术周期做准备。(4)锁存器reg16模块说明设置锁存器的目的是使显示的数据稳定,不会不会由于周期性的清零信号而不断闪烁。每次显示数据位上一计数周期锁存的计数值。16锁存器源代码如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY reg16 IS

10、PORT ( load: IN STD_LOGIC;din: IN STD_LOGIC_VECTOR(15 DOWNTO 0);Dout: OUT STD_LOGIC_VECTOR(15 DOWNTO 0);END ;ARCHITECTURE behav OF reg16 ISBEGINPROCESS(load,din)BEGINIF load'EVENT AND load='1' THENDout<=DIN;END IF;END PROCESS;END behav;(5)scan_led模块说明动态显示是把所有的LED管的输入信号连在一起,这种连接方式有两个优点

11、:一,节约器件的I/O端口;二,降低功耗。每次向LED写数据时,通过片选信号选通其中一个LED管并把数据写入,因此每一个时刻只有一个LED是亮的。为了能持续看到LED上面的显示类容,必须对LED管进行扫描,即一次循环点亮各个LED管。利用人眼的视觉暂留,加上发光器件的余辉效应,在一定的扫描频率下,人眼就会看到多个LED一起点亮。扫描的大小必须合适才能达到很好的效果。如果扫描频率太低,就会产生闪烁;而扫描频率太高会造成LED的频繁开启和关断,增加LED的功耗。通常扫描频率选择50Hz比较合适。本次设计为四位LED动态扫描输出,clk为扫描扫描时钟,考虑到cnt8的分频作用,此次设计采用的频率为2

12、00Hz;sg6.0为当前正在显示的LED地址的已译码数据;bt1.0为输出的片选信号,决定某LED在某时刻显示数据;Din15.0为4位一组的BCD码,共四位供显示输出的数据输入。Scan_led的内部以下三个进程:计数模块扫描时钟发生器、多路选通器模块和译码模块。4位LED动态扫描输出scan_led源代码如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY scan_led ISPORT (clk: IN STD_LOGIC;Din: in STD_LOGIC_VECTOR(1

13、5 DOWNTO 0);sg: OUT STD_LOGIC_VECTOR(6 DOWNTO 0);bt: OUT STD_LOGIC_VECTOR(1 DOWNTO 0);END;ARCHITECTURE behav OF scan_led ISSIGNAL cnt8: STD_LOGIC_VECTOR(1 DOWNTO 0);SIGNAL q: STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINp1: PROCESS(cnt8)BEGINcase cnt8 iswhen "00" =>bt<="00"q<=Din(3

14、 downto 0);when "01" =>bt<="01"q<=Din(7 downto 4);when "10" =>bt<="10"q<=Din(11 downto 8);when "11" =>bt<="11"q<=Din(15 downto 12);when others =>null;end case;END PROCESS p1;p2: process(clk)beginif clk'even

15、t and clk='1' then cnt8<=cnt8+1;end if;end process p2;p3: process(q)begincase q iswhen "0000" =>sg<="0111111"when "0001" =>sg<="0000110"when "0010" =>sg<="1011011"when "0011" =>sg<="1001111&

16、quot;when "0100" =>sg<="1100110"when "0101" =>sg<="1101101"when "0110" =>sg<="1111101"when "0111" =>sg<="0000111"when "1000" =>sg<="1111111"when "1001" =>sg&

17、lt;="1101111"when others =>null;end case;END PROCESS p3;END behav;(6)顶层文件仿真将各模块按照图二顶层文件连接编译通过后进行波形仿真。波形仿真如图四所示:图四 四位十进制频率计仿真波形图F1Hz输入周期为1Hz;Fin为测量频率,频率范围可谓1009999Hz,此次波形仿真设计时间为1KHz;clk为扫描时钟,周期为200Hz;sg为输出LED七段显示译码结果,bt为输出片选信号,由波形仿真图克看出片选0(00)时LED显示为0,片选为1(01)时LED显示为0,片选为2(10)时LED显示为0,片选

18、为3(11)时LED显示为1;即此时频率计计数频率为1000Hz,与实际输入频率相同。(7)硬件下载实现DE2没有提供动态输出方式,所以选择在WZ上实现。F1Hz的 1Hz输入频率通过DE2内部CLOCK_50的50M晶振分频来实现。输入频率信号和扫描频率也由50M晶振分频得到。又由于仿真设计中采用的是一个LED现实动态数据,所以下载到DE2板上是还要进行动态显示电路的设计。分频的主要原程序为:LIBRARY ieee;USE ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY count ISPORT( clk50:

19、IN STD_LOGIC ;q1khz: OUT STD_LOGIC);END count;ARCHITECTURE bhv OF count ISBEGINHZ:PROCESS(clk50)VARIABLE cout:INTEGER:=0;BEGINIF clk50'EVENT AND clk50='1' THENcout:=cout+1;IF cout<=24999 THEN q1khz<='0'ELSIF cout<=49999 THEN q1khz<='1'ELSE cout:=0;END IF;END I

20、F;END PROCESS;END bhv;(可以通过改变不同的cout值来进行不同的分频)动态显示源程序为:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity export isport(q200hz:in std_logic;bt:in std_logic_vector(1 downto 0);sg:in std_logic_vector(6 downto 0);led0,led1,led2,led3:out std_logic_vector(6 downto 0);end;arch

21、itecture behav of export isbeginprocess(q200hz)beginif q200hz'event and q200hz='1' thencase bt iswhen "00" => led0<=sg(6 downto 0);when "01" => led1<=sg(6 downto 0);when "10" => led2<=sg(6 downto 0);when "11" => led3<=sg(6 d

22、ownto 0);when others=>null;end case;end if;end process;end behav;编译仿真完成后,定义输入/输出脚(cout输出定义为SW1,七段数码管显示为HEX0、HEX1、HEX2、HEX3,输入频率为clock_50),再次编译将定义引脚锁存到顶层文件后下载到DE2板上实现频率计的测试。设计下载过程中输入频率也可由DE2板上的50MHz、27MHz经过各种分频的到最后的输出计数频率,或者定义EXT_CLOCK由外部时钟来定义输出也可以。但是在此设计中没有外接电路,所以只能通过分频来得到相应的频率计数结果。所以设计电路加上分频和显示电路后的顶层文件图如图五所示:图五 静态显示实际电路三、总结通过这次的EDA设计是我更加的了解VHDL语言的应用,尤其是在设计最后的静态输出的过程当中,由于书上设计的是由单个七段

温馨提示

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

评论

0/150

提交评论