版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上 EDA技术课程设计报告 题目:简易数字频率计 专业: 本组成员: 简述随着数字电子技术的发展,频率测量成为一项越来越普遍的工作,因此测频计常受到人们的青睐。目前许多高精度的数字频率计都采用单片机加上外部的高速计数器来实现,然而单片机的时钟频率不高导致测频速度比较慢,并且在这种设计中,由于PCB版的集成度不高,导致PCB板走线长,因此难以提高计数器的工作频率。为了克服这种缺点,大大提高测量精度和速度,我们可以设计一种可编程逻辑器件来实现数字频率计。EDA技术是以大规模可编程逻辑器件为设计载体,以硬件语言为系统逻辑描述的主要方式,以计算机、大规模可编程逻辑器件的开发软件
2、及实验开发系统为设计工具,通过有关的开发软件,自动完成用软件设计的电子系统到硬件系统的设计,最终形成集成电子系统或专用集成芯片的一门新技术。其设计的灵活性使得EDA技术得以快速发展和广泛应用。以QUARTUSII软件为设计平台,采用VHDL语言实现数字频率计的整体设计。EDA技术已经广泛应用于模拟与数字电路系统等许多领域。电子设计自动化是一种实现电子系统或电子产品自动化设计的技术,它与电子技术,微电子技术的发展密切相关,它吸收了计算机科学领域的大多数最新研究成果,以高性能的计算机作为工作平台,促进了工程发展。EDA的一个重要特征就是使用硬件描述语言(HDL)来完成的设计文件,VHDL语言是经I
3、EEE确认的标准硬件语言,在电子设计领域受到了广泛的接受。1. 设计概述 1.1设计原理在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此,频率的测量就显得更为重要。测量频率的方法有多种,其中电子计数器测量频率具有精度高、使用方便、测量迅速,以及便于实现测量过程自动化等优点,是频率测量的重要手段之一。数字式频率计的测量原理有两类:一是直接测频法,即在一定闸门时间内测量被测信号的脉冲个数;二是间接测频法即测周期法,如周期测频法。直接测频法适用于高频信号的频率测量,通常采用计数器、数据锁存器及控制电路实现,并通过改变计数器阀门的时间长短在
4、达到不同的测量精度;间接测频法适用于低频信号的频率测量。本设计中使用的就是直接测频法,即用计数器在计算1s内输入信号周期的个数,其测频范围为1Hz9999Hz。1.2原理框图1.3 系统原理图系统原理图仿真 分析说明:clk为1HZ,待测信号sig为10HZ1.5 引脚图2. 设计思路频率测量的基本原理是计算每秒钟内待测信号的脉冲个数。这就要求测频控制信号发生器testpl的计数使能信号tsten能产生一个1秒脉宽的周期信号,并对频率计的每一计数器cnt10的使能端en进行同步控制。当tsten为高电平"1"时,允许计数;为低电平"0"时停止计数,并保持
5、其计数结果。在停止计数期间,首先需要一个锁存信号load的上跳沿将计数器在前1 秒种的计数值锁存进16位锁存器reg16b中。锁存信号之后,必须有一个清零信号clr_cnt对计数器进行清零,为下1 秒的计数操作做准备。,然后由外部数码管控制器ledcom控制的7段译码器ymq译出,并稳定显示。3.模块划分3.1 测频控制信号发生器testpl模块:输入端clk收到1Hz信号后,其输出端testen控制各个cnt10的使能,clr_cnt控制各个cnt10的清零,load控制锁存器内数据的输出。仿真图如下:3.2 十进制计数器cnt10模块:有一时钟使能输入端en,用于锁定计数值。当高电平&qu
6、ot;1"时计数允许计数,低电平"0"时禁止计数。多位十进制计数器时,最低位的计数器的clk端输入被测信号,各计数器的进位输出端c10将信号输到下一位十进制计数器cnt10的输入端clk,最高位十进制计数器cnt10的进位输出端c10不处理。仿真图如下:3.3 16位锁存器reg16b模块:将已有16 位bcd码存在于此模块的输入口din15.0,在信号load的上升沿后即被锁存到寄存器reg16b的内部,并由reg16b的输出端dout15.0输出,设置锁存器的好处是,数码管上显示的数据稳定,不会由于周期性的清零信号而不断闪烁。仿真图如下:3.4 数码管控制器l
7、edcom模块:两个输入端一个为datain15.0,另一个为数码管显示选择的扫描频率输入端clk,输出端为数码管选择信号com3.0和对应显示的数码管的BCD码信号端dataout3.0,数码管显示选择随扫描频率clk循环变化,实现稳定显示。仿真图如下:3.5 译码器ymq模块:输入端d_in3.0将接收BCD码信号,译码后输出端d_out7.0输出8为7段数码管信号,其中输出的第8位均为高电平"1"可以使四个数码管的小数点不显示。经译码器的处理输出后数码管显示相应的数值。4.VHDL顶层文件: library ieee;use ieee.std_logic_1164.a
8、ll;entity lx is port(clk: in std_logic; led: out std_logic_vector(7 downto 0); ledc: out std_logic_vector(2 downto 0);end lx;architecture art of lx is-十进制计数器component cnt10 -待调用的有时钟使能的十进制计数器端口定义 port(clk,clr,en: in std_logic; q: out std_logic_vector(3 downto 0); c10: out std_logic);end component;-16
9、位锁存器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;-
10、数码管选择器component ledcom -待调用的数码管选择器端口定义port(clk:in std_logic; datain: in std_logic_vector(15 downto 0); dataout: out std_logic_vector(3 downto 0); sel: out std_logic_vector(2 downto 0);end component;-译码器component ymq -待调用的译码器端口定义 port(d_in: in std_logic_vector(3 downto 0); d_out: out std_logic_vector
11、(7 downto 0);end component; signal clk1,clk2,clk3: std_logic;-clk1为1Hz信号,clk2为被测信号,clk3为数码管扫描信号 signal tsten,clr,load: std_logic; signal c1,c2,c3,c4: std_logic; signal qout,rout: std_logic_vector(15 downto 0); signal datao: std_logic_vector(3 downto 0); begin u0:testpl port map(clk1,tsten,clr,load);
12、 u1:cnt10 port map(clk2,clr,tsten,qout(3 downto 0),c1); u2:cnt10 port map(c1,clr,tsten,qout(7 downto 4),c2); u3:cnt10 port map(c2,clr,tsten,qout(11 downto 8),c3); u4:cnt10 port map(c3,clr,tsten,qout(15 downto 12),c4); u5:reg16b port map(load,qout(15 downto 0),rout); u6:ledcom port map(clk3,rout,data
13、o,ledc); u8:ymq port map(datao,led);end art;5. 心得体会这次课程设计中,我不仅复习巩固了课堂所学的理论知识,提高了对所学知识的综合应用能力,并从根本上了解了VHDL语言的一些基本用法,应用了原来不会或者不熟练的句型,如if句,case句等,也学会了一些基本功能的实现方法,如分频,状态控制等等,从另外一个角度重新审视了上学期完全从硬件角度出发的电路设计,明白了软硬件之间的交互。通过这个课题,对系统框图、逻辑流程图、状态转移图的设计有了一定的了解。也懂得了系统的前期设计对于后续的编程和调试的重要性。本课题采用了自下而上的设计方法,根据系统对硬件的要求,
14、画出系统控制流程图;然后根据控制流程图,分化模块,利用模块实现功能;最后进行仿真和调试。每个成功的背后都要面对无数次的失败,这次课设也不例外。虽然遇到不少问题与困难,但通过老师以及同学的帮助,都一一得到顺利地解决。我想这必定会为将来的实践积累宝贵的经验和教训。总之,这次课设我们都受益匪浅。整个过程氛围浓厚,本人也态度十分认真,积极向老师和同学求教并在此过程中收获良多,能够进一步了解和使用一门与硬件直接打交道的基本语言对我们将来的学习和工作都会十分有益。6. 五个模块的程序源代码6.1 测频控制信号发生器library ieee;use ieee.std_logic_1164.all;use i
15、eee.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 clk'event and clk='1'then div2c
16、lk<=not div2clk; -div2clk为2Hz end if ; end process; process (clk ,div2clk) begin if( clk='0'and div2clk='0')then clr_cnt<='1' -当div2clk与clk同时为零时计数器清零 else clr_cnt<='0' -当div2clk处于的高电平时计数器计数 end if; end process; load<=not div2clk; -锁存器输出与计数器使能信号反相 tsten<
17、=div2clk; end art;有时钟使能的十进制计数器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 cq
18、i: std_logic_vector(3 downto 0);begin process (clk,clr) begin if clr='1' then cqi<="0000" -当输入的clr_cnt为低电平0时清零 elsif clk'event and clk='1' then if en='1' then -当输入的tesen为高电平1时允许计数 if (cqi<9) then cqi<=cqi+1; else cqi<="0000" -等于9则计数器清零 end
19、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;16位锁存器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity reg16b i
20、s 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 load'event and load='1'then -load为高电平时teten为低电平,计数器禁止 dout<=din; -锁存输入的数据 end if; end process;en
21、d art; 6.4 数码管控制器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity ledcom isport(clk:in std_logic; -数码管扫描频率 datain: in std_logic_vector(15 downto 0);-锁存器输入的16位信号 dataout: out std_logic_vector(3 downto 0);-输出至译码器的4位信号 sel: buffer std_logic_vector(2 downto 0);-输出数码管选择信号en
22、d ledcom;architecture art of ledcom is begin -sel同扫描频率clk循环变化 process(clk)begin if rising_edge(clk) then if sel>=7 thensel <="000"else sel<=sel+1; end if; end if; end process; -数码管选择 process(sel,datain)begin case sel is when "000"=> dataout<=datain(3 downto 0); whe
23、n "001"=> dataout<=datain(7 downto 4); when "010"=> dataout<=datain(11 downto 8); when "011"=> dataout<=datain(15 downto 12); when others =>NULL; end case; end process;end art;七段数码管的译码器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(6 downto 0); -输出8位信号 end ymq; -第8位d_out7为逗号architecture art of ymq isbegin process(d_i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 租用外墙面合同范例
- 养猪场转让合同
- 饭店聘用合同
- 科技公司下游合同模板
- 肥料生产委托加工合同模板
- 包含家具家电2024二手房交易合同3篇
- 股东固定分红合同范例
- 苏州室内装修合同范本标准版
- 土地买卖的简单版合同范本2篇
- 2024年度二手房物业公共设施维护合同2篇
- 【初中语文】《我的白鸽》课件+2024-2025学年统编版语文七年级上册
- 安全环保职业健康法律法规清单2024年
- 物理化学实验B智慧树知到期末考试答案章节答案2024年北京科技大学
- 来料检验指导书铝型材
- 食品公司生产车间卫生管理制度3篇
- 发电机氢气冷却器检修与试验
- 放射诊疗监督检查记录表
- 《夏洛的网》(课堂PPT)
- 东海地区旅行社安全生产管理台账基本情况
- 粗细集料筛分数据(精辟)
- 药剂科质量与安全管理小组工作制度及职责
评论
0/150
提交评论