VHDL课程设计报告 频率计

  • 格式:docx
  • 大小:231.90 KB
  • 文档页数:12

下载文档原格式

  / 12
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录

1. 前言 (2)

2. 设计要求 (2)

3.整体设计 (3)

4. 设计原理 (3)

5. 设计程序 (3)

5.1顶层文件 (3)

5.2 8位是进制计数器 (4)

5.3 10进制计数器 (5)

5.4 测频控制电路 (6)

5.5 32位锁存器及其控制器 (6)

6. 引脚锁定 (8)

7. 综合结果 (8)

7.1 RTL电路 (8)

7.2 测频控制电路 (9)

7.3 8位十进制计数器 (9)

7.3 32位锁存器 (9)

8. 实验结果 (10)

7.实验总结 (10)

参考文献 (12)

自适应数字频率计数器设计

1. 前言

传统的数字频率计一般是由分离元件搭接而成,用到的器件较多,连线比较复杂,而且会产生比较大的延时,造成测量误差大、可靠性差。后来随着单片机的大规模的应用, 出现了不少用单片机控制的频率测量系统。相对于以前用分离元件搭接起来的频率测量系统, 单片机控制的频率测量系统在频率测量范围、频率测量精度和频率测量速度上都有了很大的提高。但由于单片机工作频率的限制、单片机内部计数器位数的限制等因素, 由单片机控制的频率测量系统无法在频

率测量范围、频率测量精度和频率测量速度上取得重大突破。若再增加别的器件, 以弥补单片机的不足, 不仅会大大增加系统的复杂性, 而且不利于系统的集成化。以E D A 工具作为开发平台,运用V H D L 语言,将使整个系统大大简化,从而提高整体的性能和可靠性。本课题采用的是等精度数字频率计,在一片FPGA 开发板里实现了数字频率计的绝大部分功能, 它的集成度远远超过了以往的数

字频率计。又由于数字频率计最初的实现形式是用硬件描述语言写成的程序, 具有通用性和可重用性。所以在外在的条件(如基准频率的提高, 基准频率精度的提高)的允许下,只需对源程序作很小的改动, 就可以使数字频率计的精度提高

几个数量级。同时对于频率精度要求不高的场合, 可以修改源程序, 使之可以用较小的器件实现, 从而降低系统的整体造价。

2. 设计要求

设计一个频率计,频率测量范围为1-9999KHZ,量程分别为10 、100、 1M

三档,要求如下:

a. 当读数大于999时,频率计处于超量程状态,下一次测量时,量程自动增大1档

b. 当读数小于099时,频率计处于欠量程状态,下一次测量时,量程自动减小1档

c. 当超过频率范围时,显示器自动溢出

3.整体设计

当被测频率进入时候,档位1、2能自动换挡实现功能,在档位1中,有一个LED灯亮(表示Hz);档位2中有2个LED灯亮(表示kHz);当计数频率超出9999kHz 的时候,显示“E”而且LED灯全部熄灭,表示溢出功能。在程序代码中,必须要清晰表示出计数的运行状况。

档位1:当被测频率为0—9999Hz时候,直接显示f x的值(单位为Hz);

档位2:当被测频率为10k—9999kHz时候,显示10-9999(单位kHz);

4. 设计原理

根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉宽为1 秒的输入信号脉冲计数允许的信号;1 秒计数结束后,计数值被锁入锁存器,计数器清0,为下一测频计数周期作好准备。测频控制信号可以由一个独立的发生器来产生。

5. 设计程序

5.1顶层文件

LIBRARY IEEE; --频率计顶层文件

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY FREQTEST IS

PORT ( CLK1HZ : IN STD_LOGIC;

FSIN : IN STD_LOGIC;

DOUT : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);

LED : OUT STD_LOGIC_VECTOR(1 DOWNTO 0) );

END FREQTEST;

ARCHITECTURE struc OF FREQTEST IS

COMPONENT FTCTRL

PORT (CLKK : IN STD_LOGIC; -- 1Hz

CNT_EN : OUT STD_LOGIC; -- 计数器时钟使能

RST_CNT : OUT STD_LOGIC; -- 计数器清零

Load : OUT STD_LOGIC ); -- 输出锁存信号

END COMPONENT;

COMPONENT COUNTER

PORT (FIN : IN STD_LOGIC; -- 时钟信号

CLR : IN STD_LOGIC; -- 清零信号

ENABL : IN STD_LOGIC; -- 计数使能信号

DOUT : OUT STD_LOGIC_VECTOR(31 DOWNTO 0)); -- 计数结果

END COMPONENT;

COMPONENT REG32B

PORT ( LK : IN STD_LOGIC;

DIN : IN STD_LOGIC_VECTOR(31 DOWNTO 0);

DOUT : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);

LEDOUT : OUT STD_LOGIC_VECTOR(1 DOWNTO 0));

END COMPONENT;

SIGNAL TSTEN1 : STD_LOGIC;

SIGNAL CLR_CNT1 : STD_LOGIC;

SIGNAL Load1 : STD_LOGIC;

SIGNAL DTO1 : STD_LOGIC_VECTOR(31 DOWNTO 0);

SIGNAL CARRY_OUT1 : STD_LOGIC_VECTOR(6 DOWNTO 0);

BEGIN

U1 : FTCTRL PORT MAP(CLKK =>CLK1HZ,CNT_EN=>TSTEN1,

RST_CNT =>CLR_CNT1,Load =>Load1);

U2 : REG32B PORT MAP( LK => Load1, DIN=>DTO1, DOUT => DOUT,LEDOUT=>LED);

U3 : COUNTER PORT MAP( FIN => FSIN, CLR => CLR_CNT1,

ENABL => TSTEN1, DOUT=>DTO1 );

END struc;

5.2 8位是进制计数器

LIBRARY IEEE;-- 8位十进制计数器

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY COUNTER IS

PORT (FIN : IN STD_LOGIC; -- 时钟信号

CLR : IN STD_LOGIC; -- 清零信号

ENABL : IN STD_LOGIC; -- 计数使能信号

DOUT : OUT STD_LOGIC_VECTOR(31 DOWNTO 0)); -- 计数结果

END COUNTER;

ARCHITECTURE behav OF COUNTER IS

COMPONENT COUNTER10 IS

PORT (FIN : IN STD_LOGIC; -- 时钟信号