数字频率计的设计.doc_第1页
数字频率计的设计.doc_第2页
数字频率计的设计.doc_第3页
数字频率计的设计.doc_第4页
数字频率计的设计.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

此文档收集于网络,如有侵权,请联系网站删除VHDL与数字系统设计设计说明书数字频率计的设计起止日期: 2010年 12 月 14 日 至 2010年 12 月 26 日学生姓名班级学号成绩指导教师(签字)计算机与通信学院2010 年 12 月 26 日课题名称数字频率计人数7组 长同组人员课题的主要内容及任务一、设计的主要技术参数 在PC机上以QUARTUSII软件为设计平台,采用VHDL语言实现数字频率计的整体设计。二、设计任务主要内容:设计一个数字显示的频率计主要任务:1、频率计采用三位数码管显示。2、频率测量范围为1Hz999Hz,并有溢出指示。3、频率计设有1999Hz和1999kHz两个量程,并用LED指示。4、频率计能根据测试信号的频率进行量程自动切换。当频率小于1kHz时,系统选择1s的闸门时间,当频率大于等于1kHz时,在下一次测量时,选择0.1s的闸门时间。5、采用记忆显示方式,即在计数过程中不显示测试数据,待技术过程结束后显示测试结果,并将此结果保持到下一次计数结束。显示时间不小于1s。三、设计工作量2周完成进度安排2010/12/14 集体针对设计进行分析、讨论,确定好分工,明确设计进度,以及对设计总体上有个了解。12/15-12/18 各组员针对自己的任务,查找相关资料,完成各自相关部分。12/19-12/20 集体讨论,找出一个较佳的方案。12/21-12/25 进行可行性分析,对有错或不佳的地方加以改正。2010/12/26 最后分析整理,书写课程设计报告。参考资料1、王小军 主编.VHDL简明教程.清华大学出版社,19972、潘松、王国栋 主编.VHDL应用教程电子科技大学出版社,20003、甘历 主编.VHDL应用于开发实践科学出版社,2003 4、刘爱荣 主编.EDA技术与CPLD/FPGA开发应用简明教程.清华大学出版社,2007一、设计背景随着数字电子技术的发展,频率测量成为一项越来越普遍的工作,因此测频计常受到人们的青睐。目前许多高精度的数字频率计都采用单片机加上外部的高速计数器来实现,然而单片机的时钟频率不高导致测频速度比较慢,并且在这种设计中,由于PCB版的集成度不高,导致PCB板走线长,因此难以提高计数器的工作频率。为了克服这种缺点,大大提高测量精度和速度,我们可以设计一种可编程逻辑器件来实现数字频率计。EDA技术是以大规模可编程逻辑器件为设计载体,以硬件语言为系统逻辑描述的主要方式,以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为设计工具,通过有关的开发软件,自动完成用软件设计的电子系统到硬件系统的设计,最终形成集成电子系统或专用集成芯片的一门新技术。其设计的灵活性使得EDA技术得以快速发展和广泛应用。以QUARTUSII软件为设计平台,采用VHDL语言实现数字频率计的整体设计。伴随着集成电路(IC)技术的发展,电子设计自动化(EDA)逐渐成为重要的设计手段,已经广泛应用于模拟与数字电路系统等许多领域。电子设计自动化是一种实现电子系统或电子产品自动化设计的技术,它与电子技术,微电子技术的发展密切相关,它吸收了计算机科学领域的大多数最新研究成果,以高性能的计算机作为工作平台,促进了工程发展。EDA的一个重要特征就是使用硬件描述语言(HDL)来完成的设计文件,VHDL语言是经IEEE确认的标准硬件语言,在电子设计领域受到了广泛的接受。二、设计原理1、频率计设计原理在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此,频率的测量就显得更为重要。测量频率的方法有多种,其中电子计数器测量频率具有精度高、使用方便、测量迅速,以及便于实现测量过程自动化等优点,是频率测量的重要手段之一。数字式频率计的测量原理有两类:一是直接测频法,即在一定闸门时间内测量被测信号的脉冲个数;二是间接测频法即测周期法,如周期测频法。直接测频法适用于高频信号的频率测量,通常采用计数器、数据锁存器及控制电路实现,并通过改变计数器阀门的时间长短在达到不同的测量精度;间接测频法适用于低频信号的频率测量。本设计中使用的就是直接测频法,即用计数器在计算1s内输入信号周期的个数,其测频范围为1Hz9999Hz。2.设计的原理框图如下所示:三、设计思路频率测量的基本原理是计算每秒钟内待测信号的脉冲个数。这就要求测频控制信号发生器testpl的计数使能信号tsten能产生一个1秒脉宽的周期信号,并对频率计的每一计数器cnt10的使能端en进行同步控制。当tsten为高电平1时,允许计数;为低电平0时停止计数,并保持其计数结果。在停止计数期间,首先需要一个锁存信号load的上跳沿将计数器在前1 秒种的计数值锁存进16位锁存器reg16b中。锁存信号之后,必须有一个清零信号clr_cnt对计数器进行清零,为下1 秒的计数操作做准备。,然后由外部数码管控制器ledcom控制的7段译码器ymq译出,并稳定显示。四、设计步骤与过程1、频率产生器lpm_counter0:有一50MHz的时钟输入端clk,经过分频处理后从输出端q26.0输出27种频率信号,从中选出三个不同频率的信号:q25为1Hz输入testpl的clk端,q13为测试信号输入低位计数器的cnt10的clk端,q17为数码管显示选择的扫描信号输入数码管控制器的clk端。2、测频控制信号发生器testpl:输入端clk收到1Hz信号后,其输出端testen控制各个cnt10的使能,clr_cnt控制各个cnt10的清零,load控制锁存器内数据的输出。3、十进制计数器cnt10:有一时钟使能输入端en,用于锁定计数值。当高电平1时计数允许计数,低电平0时禁止计数。多位十进制计数器时,最低位的计数器的clk端输入被测信号,各计数器的进位输出端c10将信号输到下一位十进制计数器cnt10的输入端clk,最高位十进制计数器cnt10的进位输出端c10不处理。4、16位锁存器reg16b:将已有16 位bcd码存在于此模块的输入口din15.0,在信号load的上升沿后即被锁存到寄存器reg16b的内部,并由reg16b的输出端dout15.0输出,设置锁存器的好处是,数码管上显示的数据稳定,不会由于周期性的清零信号而不断闪烁。5、数码管控制器ledcom:两个输入端一个为datain15.0,另一个为数码管显示选择的扫描频率输入端clk,输出端为数码管选择信号com3.0和对应显示的数码管的BCD码信号端dataout3.0,数码管显示选择随扫描频率clk循环变化,实现稳定显示。6、译码器ymq:输入端d_in3.0将接收BCD码信号,译码后输出端d_out7.0输出8为7段数码管信号,其中输出的第8位均为高电平1可以使四个数码管的小数点不显示。经译码器的处理输出后数码管显示相应的数值。7、元件声明及例化:将各个元器件依据设计相连五、心得体会这次课程设计中,我不仅复习巩固了课堂所学的理论知识,提高了对所学知识的综合应用能力,并从根本上了解了VHDL语言的一些基本用法,应用了原来不会或者不熟练的句型,如if句,case句等,也学会了一些基本功能的实现方法,如分频,状态控制等等,从另外一个角度重新审视了上学期完全从硬件角度出发的电路设计,明白了软硬件之间的交互。通过这个课题,对系统框图、逻辑流程图、状态转移图的设计有了一定的了解。也懂得了系统的前期设计对于后续的编程和调试的重要性。本课题采用了自下而上的设计方法,根据系统对硬件的要求,画出系统控制流程图;然后根据控制流程图,分化模块,利用模块实现功能;最后进行仿真和调试。每个成功的背后都要面对无数次的失败,这次课设也不例外。虽然遇到不少问题与困难,但通过老师以及同学的帮助,都一一得到顺利地解决。我想这必定会为将来的实践积累宝贵的经验和教训。总之,这次课设我们都受益匪浅。整个过程氛围浓厚,本人也态度十分认真,积极向老师和同学求教并在此过程中收获良多,能够进一步了解和使用一门与硬件直接打交道的基本语言对我们将来的学习和工作都会十分有益。附件:附件1、设计图形元件原理图: 附件2、程序源代码:1、频率产生器:library ieee;use ieee.std_logic_1164.all;library lpm;use lpm.lpm_components.all;entity lpm_counter0 is port(clock: in std_logic ; q: out std_logic_vector (26 downto 0);end lpm_counter0;architecture syn of lpm_counter0 issignal sub_wire0: std_logic_vector (26 downto 0);component lpm_countergeneric (lpm_direction: string;lpm_port_updown: string;lpm_type: string;lpm_width: natural);port(clock: in std_logic ; q: out std_logic_vector (26 downto 0);end component;beginq up,lpm_port_updown = port_unused,lpm_type = lpm_counter,lpm_width = 27)port map (clock = clock,q = sub_wire0);end syn;2、测频控制信号发生器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity testpl is port(clk:in std_logic;-1Hz信号 tsten:out std_logic;-计数器使能信号 clr_cnt:out std_logic;-计数器清零信号 load:out std_logic);-锁存器输出控制信号end testpl;architecture art of testpl is signal div2clk:std_logic;begin process(clk) begin if clkevent and clk=1then div2clk=not div2clk; -div2clk为2Hz end if ; end process; process (clk ,div2clk) begin if( clk=0and div2clk=0)then clr_cnt=1; -当div2clk与clk同时为零时计数器清零 else clr_cnt=0; -当div2clk处于的高电平时计数器计数 end if; end process; load=not div2clk; -锁存器输出与计数器使能信号反相 tsten=div2clk; end art;3、有时钟使能的十进制计数器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt10 is port(clk,clr,en: in std_logic; -clk:计数器时钟,clr:清零信号,en:计数使能信号 q: out std_logic_vector(3 downto 0);-q:4位计数结果输出 c10: out std_logic);-计数进位end cnt10;architecture art of cnt10 issignal cqi: std_logic_vector(3 downto 0);begin process (clk,clr) begin if clr=1 then cqi=0000; -当输入的clr_cnt为低电平0时清零 elsif clkevent and clk=1 then if en=1 then -当输入的tesen为高电平1时允许计数 if (cqi9) then cqi=cqi+1; else cqi=0000; -等于9则计数器清零 end if; -当输入的tesen为低电平0时禁止计数,锁定计数值 end if; end if;end process;-产生进位process(cqi) begin if cqi=1001 then c10=1; -当加的9时产生进位输出 else c10=0; end if;end process;q=cqi;end art;4、16位锁存器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity reg16b is port (load: in std_logic;-输出锁存控制信号 din: in std_logic_vector(15 downto 0); dout: out std_logic_vector(15 downto 0);end reg16b;architecture art of reg16b isbegin process(load,din) begin if loadevent and load=1then -load为高电平时teten为低电平,计数器禁止 dout=3 thencomclk =00;else comclk com com com comNULL; end case; end process;-对应数码管的输出 process(comclk,datain)begin case comclk is when 11= dataout dataout dataout dataoutNULL; end case; end process;end art;6、七段数码管的译码器library IEEE;use IEEE.std_logic_1164.all;entity ymq is port(d_in: in std_logic_vector(3 downto 0); -数码管控制器输入四位信号d_out: out std_logic_vector(7 downto 0); -输出8位信号 end ymq; -第8位d_out7为逗号architecture art of ymq isbegin process(d_in) begin case d_in is -第8位为1高电平逗号不显示 when 0000 = d_out d_out d_out d_out d_out d_out d_out d_out d_out d_outNULL; end case; end process;end art;7、元件声明及例化将各个元器件依据设计相连library ieee;use ieee.std_logic_1164.all;entity lx is port(clk: in std_logic; led: out std_logic_vector(7 downto 0); ledc: out std_logic_vector(3 downto 0);end lx;architecture art of lx iscomponent lpm_counter0 -待调用的频率生成器端口定义 PORT(clock: IN STD_LOGIC ; q: OUT STD_LOGIC_VECTOR (26 DOWNTO 0);end component;-十进制计数器component cnt10 -待调用的有时钟使能的十进制计数器端口定义 port(clk,clr,en: in std_logic; q: out std_logic_vector(3 downto 0); c10: out std_logic);end component;-16位锁存器component reg16b -待调用的32位锁存器端口定义 port (load: in std_logic; din: in std_logic_vector(15 downto 0); dout: out std_logic_vector(15 downto 0);end component;-测频控制器component testpl -待调用的测频控制信号发生器端口定义 port(clk:in std_logic; tsten:out std_logic; clr_cnt:out std_logic; load:out std_logic);end component;-数码管选择器component ledcom -待调用的数码管选择器端口定义port(clk:in std_logic; datain: in std_logic_vector(15 downto 0); dataout: out std_logic_vector(3 downto 0); com: out std_logic_vector(3 downto 0);end component;-译码器component ymq -

温馨提示

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

评论

0/150

提交评论