基于VHDL的8位十进制频率计设计_第1页
基于VHDL的8位十进制频率计设计_第2页
基于VHDL的8位十进制频率计设计_第3页
基于VHDL的8位十进制频率计设计_第4页
基于VHDL的8位十进制频率计设计_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

1、1基于基于 vhdl 的的 8 位十进制频率计设位十进制频率计设计计目录目录目录目录.1摘要摘要.21.设计目的设计目的.22.设计要求设计要求.23.设计思路设计思路.24.频率计设计原理频率计设计原理.34.1 频率计的组成部分.34.2 频率计工作原理.34.3 频率计各模块介绍.35.频率计仿真频率计仿真.75.1fctrl控制模块仿真 .75.2regester寄存器模块仿真.75.3seltime扫描模块仿真.75.4deled显示模块仿真.85.5cnt10 计数器模块仿真.85.6 总电路仿真.86.频率计各模块程序频率计各模块程序.97.频率计下载到实验箱现象频率计下载到实验

2、箱现象.138.设计体会设计体会.149.参考资料参考资料.142 摘要摘要 使用 vhdl 语言来设计数字频率计, 给出了原理图和仿真图形, 所设计的电路通过硬件仿真, 下载到目标器件上运行, 能够满足测量频率的要求, 具有理论与实践意义, 实现了电子电路自动化(eda)的过程。 关键词关键词 vhdl; eda; 仿真; fpga; 频率计1. 设计目的设计目的1.1 熟悉 max+plusii 10.2 的软件的基本使用方法。1.2 理解频率计的测量原理。1.3 掌握 vhdl 语言的编写方法。1.4 掌握虚拟数字频率计的软件设计。2. 设计要求设计要求在 max+plusii 中设计一

3、个数字频率计电路,设计要求为: 测量范围:1hz100mhz,数码管动态扫描显示所测的频率。 3. 设计思路设计思路方案一:采用周期法。通过测量待测信号的周期并求其倒数,需要有标准倍的频率,在待测信号的一个周期内,记录标准频率的周期数,这种方法的计数值会产生最大为1 个脉冲误差,并且测试精度与计数器中记录的数值有关,为了保证测试精度,测周期法仅适用于低频信号的测量。方案二:采用直接测频法。直接测频法就是在确定的闸门时间内,记录被测信号的脉冲个数。由于闸门时间通常不是待测信号的整数倍,这种方法的计数值也会产生最大为1 个脉冲误差。进一步分析测量准确度:设待测信号脉冲周期为 tx,频率为 fx,当

4、测量时间为 t=1s 时,测量准确度为=tx/t=1/fx。由此可知直接测频法的测量准确度与信号的频率有关:当待测信号频率较高时,测量准确度也较高,反之测量准确度也较低。因此直接测频法只适合测量频率较高的信号,不能满足在整个测量频段内的测量精度保持不变的要求。方案三:采用等精度频率测量法,测量精度保持恒定,不随所测信号的变化而变化。在快速测量的要求下,要保证较高精度的测频,必须采用较高的标准频率信号。采用高集成度、高速的现场可编程门阵列 fpga 为实现高速、高精度的测频提供了保证。本设计所采用的测频方法就是直接测频法。33.频率计设计原理频率计设计原理3.1 频率计的组成部分频率计的组成部分

5、频率计主要由 5 个部分组成: 测频控制信号发生器 fctrl、8 个有时钟使能的十进制计数器 cnt10、1 个锁存器 regester32、显示模块 deled 和控制显示模块 seltime。数字频率计的框图如下图所示。3.2 频率计工作原理频率计工作原理频率计是直接用十进制数字来显示被测信号频率的一种测量装置。所谓频率, 就是周期性信号在单位时间( 1s) 里变化的次数。若在一定时间间隔 t 内测得的这个周期性信号的重复变化次数 n , 则其频率可表示为 f = n / t。频率测量的基本原理是计算每秒钟内待测信号的脉冲个数,测频的基本原理要求 fctrl 的计数使能信号 en 能产生

6、一个 1s 脉宽的周期信号, 并对频率计的每一个计数器 cnt10 的使能端进行同步控制。当 en 为高电平时允许计数,为低电平时停止计数,并保持其所计脉冲个数。在停止计数期间,首先需要一个锁存信号 load 的上跳沿将计数器在前 1s 的计数值锁存进 regester32 中,并由外部的 7 段译码器译出,并稳定显示。锁存信号之后,必须有一个清零信号对计数器进行清零,为下 1s 的计数操作做准备。测频控制信号发生器的工作时序图如下图所示。其中控制信号频率始终为 1hz,那么信号 en 的脉宽正好为 1s,可以用作计数闸门信号。然后根据测频的时序要求,可得出信号 load 和清零信号 clr_

7、cnt 的逻辑描述。计数完成后, 利用计数使能信号反向值的上跳沿产生一个锁存信号load。0.5s 后,clr_cnt 产生一个清零信号上跳沿。计数器 cnt10 的特殊之处是, 有一时钟使能输入端 ena,用于锁存计数值。当高电平时计数允许, 低电平时计数禁止。锁存器的设计要求:若已有 24 位 bcd 码存于此模块的输入口,在信号 load的上跳沿后即被锁存到寄存器 regester 内部,并由 regester 的输出端输出, 然后有实验箱上 7 段译码器译成能在数码管上显示输出的相应数值。43.3 频率计各模块介绍频率计各模块介绍测频控制信号模块控制模块的作用是产生测频所需要的各种控制

8、信号。控制信号的标准输入时钟为 1hz,每两个时钟周期进行一次频率测量。该模块产生的 3 个控制信号,分别为 en,load,clr_cnt。clr_cnt 信号用于在每次测量开始时,对计数器进行复位,以清除上次测量的结果,该复位信号高电平有效,持续半个时钟周期的时间。en 为计数允许信号,在 en 信号的上升沿时刻计数模块开始对输入信号的频率进行测量,测量时间恰为一个时钟周期(正好为单位时间 1s),在此时间里被测信号的脉冲数进行计数,即为信号的频率。然后将值锁存,并送到数码管显示出来。设置锁存器的好处是使显示的数据稳定,不会由于周期性的清零信号而不断闪烁。在每一次测量开始时,都必须重新对计

9、数器清 0。测频控制产生器如下图所示,图中 1hzde clk1 接 cnt,en 为计数允许信号,接计数器 cnt10 的 ena(此图未画出),clr_cnt 信号用于在每次测量开始时,对计数器进行复位,接计数器 cnt10 的 clr,load 接锁存器的load(此图未画出)。锁存器模块测量模块测量完成后,在 load 信号的上升沿时刻将测量值锁存到寄存器中,然后输出到显示模块。锁存器是起数据保持的作用,它将会把数据保存到下次触发或复位。主要是主从触发器组成的。用于存储数据来进行交换,使数据稳定下来保持一段时间不变化,直到新的数据将其替换。锁存器 regester 的封装如下图所示,图

10、中 load 接控制测频产生器 ftrl的 load,而 din31.0接计数器 cnt10 的 cq3.0,dout31.0接显示器seltime 模块的 din31.0端。扫描模块首先扫描模块接一个 clk 时钟,频率为 32768hz,din310接regester 的 dout310,sel20锁存到 74ls138 译码器的三个引脚,以便于让数码管显示,daout30接 deled 的 s30端。sel 为一个 7 进制计数器,当 sel 为 000 时,daout 对应着输入 din 的 0 到 3位,当 sel 为 001 时,daout 对应着输入 din 的 4 到 7 位,

11、以此类推,当 sel 为111 时,daout 对应 din 的 28 到 31 位。5seltime 模块如下图所示sel 接线如右图所示显示模块led 有段码和位码之分,所谓段码就是让 led 显示出八位数据,一般情况下要通过一个译码电路,将输入的 4 位 2 进制数转换为与 led 显示对应的 8位段码。位码也就是 led 的显示使能端,对于共阴级的 led 而言,低电平使能。在本设计中位码由扫描模块的 sel 接至 74ls138 进行译码。位码由显示模块输出。例如:要让 8 个 led 同时工作显示数据,就是要不停的循环扫描每一个led,并在使能每一个 led 的同时,输入所需显示的

12、数据对应的 8 位段码。虽然 8 个 led 是依次显示,但是受视觉分辨率的影响,看到的现象是 8 个 led同时工作。deled 模块如下图所示。s30经过译码对应着一个 32 位的 dout,而 a到 g 分别对应 dout(0)至 dout(7)。十进制计数器模块计数器模块是由 8 个带有异步清零端,进位信号输出的模为 10 的计数模块级连而成。它有一时钟使能输入端 ena,用于锁定计数器。当高电平计数允许,低电平时计数禁止。计数器模块用于对输入信号的脉冲进行计数,该模块有计数允许、异步清零等端口,以便于控制模块对其进行控制。cnt10 如下图所示,其中 clr 为复位接 fctrl 的

13、 clr_cnt 端,ena接 fctrl 的 en 端,cq3.0接锁存器的 dout31.0端。6综上,总电路设计图如下所示:75.频率计仿真频率计仿真5.1fctrl 控制模块仿真由图可以看出 clk 为一个 1hz 的时钟信号,en 为 clk 的二分频,load 为 en 的非,clr_cnt 在 clk 和 en 都为低电平时,为高电平。5.2regester 寄存器模块仿真由上图可以看出,当 rst 为高电平时,32 位输出 dout 立即全部置零,当 rst 为低电平时,在 load 信号有上升沿时,din 将值赋给 dout。5.3seltime 扫描模块仿真由上图可以看出,

14、sel 从 000 开始循环计数至 111,当 clk 上升沿到来时,若 sel 为 111,则将 sel 置为 000 重新计数。sel 的 000 至 111 依次对应 daout 从8第四位至高四位。5.4deled 显示模块仿真5.5cnt10 计数器模块仿真使能信号 ena 一直为高电平,则 clk 来一个上升沿,cq 计一次数,计数范围为 0 到 9,到 9 后,cq 从 0 开始重新计数,并且 carry_out 输出一个高电平;当clr 信号为高电平时,cq 清零,开始重新计数。5.6 总电路仿真clk1 为 1hz(基准频率) ,clk2 为待测频率,clk3 为 32768

15、hz(扫描频率) ,剩下的几个参数,在前几个仿真中均已提过,此处不再赘述。96.频率计各模块程序频率计各模块程序6.1fctrl 控制模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity fctrl isport( clk: in std_logic; en: out std_logic; clr_cnt: out std_logic; load: out std_logic);end fctrl;architecture behav of fctrl issignal div2clk

16、 : std_logic;beginprocess(clk)beginif(clkevent and clk=1) then div2clk=not div2clk;end if;end process;process(clk,div2clk)beginif(clk=0 and div2clk=0) thenclr_cnt=1;elseclr_cnt=0;end if;end process;load=not div2clk;en=div2clk;end behav; 6.2regester 寄存器模块library ieee;use ieee.std_logic_1164.all;entit

17、y regester32 isport( load : in std_logic; rst: in std_logic; din: in std_logic_vector(31 downto 0); dout:out std_logic_vector(31 downto 0);10end regester32;architecture behav of regester32 issignal data:std_logic_vector(31 downto 0);beginprocess(rst,load)beginif rst=1 then data0);elsif(loadevent and

18、 load=1) then data=din;end if;dout=data;end process;end behav;6.3seltime 扫描模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity seltime isport( clk : in std_logic; din : in std_logic_vector(31 downto 0); daout: out std_logic_vector(3 downto 0); sel : out std_logic_vector

19、(2 downto 0);end seltime;architecture behav of seltime issignal sec : std_logic_vector(2 downto 0);beginprocess(clk)begin if(clkevent and clk=1) then if(sec=111) then sec=000; else secdaoutdaoutdaoutdaoutdaoutdaoutdaoutdaoutnull;end case;end process;sel=sec;end behav;6.4deled 显示模块library ieee;use ie

20、ee.std_logic_1164.all;entity deled isport( s: in std_logic_vector(3 downto 0); a,b,c,d,e,f,g,h: out std_logic);end deled;architecture behav of deled issignal data:std_logic_vector(3 downto 0);signal dout:std_logic_vector(7 downto 0);begindatadoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdout=00000000;end case;end process;h=dout(7);g=dout(6);f=dout(5);e=dout(4);d=dout(3);c=dout(2);b=dout(1);a=dout(0);end behav;6.5cnt10 计数器模块library ieee;use ieee.std_logic_1164.all;entity cnt10 ispo

温馨提示

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

评论

0/150

提交评论