基于VHDL的8位十进制频率计设计

上传人:仙*** 文档编号:33881682 上传时间:2021-10-19 格式:DOC 页数:16 大小:2.84MB
收藏 版权申诉 举报 下载
基于VHDL的8位十进制频率计设计_第1页
第1页 / 共16页
基于VHDL的8位十进制频率计设计_第2页
第2页 / 共16页
基于VHDL的8位十进制频率计设计_第3页
第3页 / 共16页
资源描述:

《基于VHDL的8位十进制频率计设计》由会员分享,可在线阅读,更多相关《基于VHDL的8位十进制频率计设计(16页珍藏版)》请在装配图网上搜索。

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 的计数操作做准备。测频控制信号发生器的工作时序图如下图所示。4其中控制信号频率始终为 1Hz,那么信号 en 的脉宽正好为 1s,可以用作计数闸门信号。然后根据测频的时序要求,可得出信号 load 和清零信号 clr_

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

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

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 译码器的三个引脚,以便于让6数码管显示,daout30接 deled 的 s30端。sel 为一个 7 进制计数器,当 sel 为 000 时,daout 对应着输入 din 的 0 到 3 位,当 sel 为 001 时,daout 对应着输入 din 的 4 到

11、7 位,以此类推,当 sel 为 111 时,daout 对应 din 的 28 到 31 位。seltime 模块如下图所示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)。7十进制计数器模块计数器模块是由 8 个带有异步清零端,进位信号输出的模为 10 的计数模块级连而成。它有一时钟使能输入端 ENA,用于锁定计数器。当高电平计数允许,低电平时计数禁止。计数器模块用于对输入信号的脉冲进行计数,该模块有计数允许、异步清零等端口,以便于控制模块对其进行控制。CNT10 如下图所示,其中 CLR 为复位接

13、FCTRL 的 CLR_CNT 端,ENA 接FCTRL 的 EN 端,CQ3.0接锁存器的 DOUT31.0端。8综上,总电路设计图如下所示:5.频频率率计计仿真仿真5.1fctrl 控制模块仿真9由图可以看出 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 从第四位至高四位。5.4deled 显示模块仿真105.5cnt10 计数器模块仿真使能信号 ena 一直为高电平,则 clk 来一个上升沿,cq 计一次数,计数范围为 0 到 9,到 9 后,cq 从 0 开始重新计数,并且 carry_out 输出一个高电平;当 clr信号为高电平时,cq 清零,开始重新计数。5.6 总电路仿真clk1 为 1HZ(基准频率),clk2 为待测频率,clk3 为 3

15、2768HZ(扫描频率),剩下的几个参数,在前几个仿真中均已提过,此处不再赘述。116.频频率率计计各模各模块块程序程序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 div

16、2clk : 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;e

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

18、 and 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_ve

19、ctor(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;US

20、E IEEE.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);BEGINDATADOUTDOUTDOUTDOUTDOUTDOUTDOUTDOUTDOUTDOUTDOUTDOUTDOUTDO

21、UTDOUTDOUTDOUT=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 isport(clk: in std_logic; clr: in std_logic; ena: in std_logic; cq : out integer range 0 to 9; ca

22、rry_out: out std_logic);end cnt10;architecture behav of cnt10 issignal cqi: integer range 0 to 9;beginprocess(clr,clk,ena)beginif(clr=1) then cqi=0;elsif(clkevent and clk=1) then if(ena=1) then if(cqi=9) then cqi=0; carry_out=1; else cqi=cqi+1; carry_out=0;15 end if; end if;end if;end process;cq=cqi;end behav;7.频频率率计计下下载载到到实验实验箱箱现现象象左图为数码管显示的频率第一幅图显示 128HZ第二幅图显示 8234HZ第三幅图显示 32847HZ168. 设计设计体会体会用 VHDL 来对数字频率计进行设计, 比较与用芯片搭电路进行硬件实现来说是一种新的尝试,通过仿真调试到下载试验,结果都能清楚明了地显示出来, 相当的快捷和方便, 不同模块之间相互独立, 底层模块的修改不会影响其他模块的工作, 采用这种设计方法设计结构清晰, 层次清楚, 便于对设计进行修改。9.参考参考资资料料潘松,黄继业EDA 技术实用教程VHDL 版(第四版)科学出版社2010 年 6 月

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!