实验六 数字频率计的设计

更新时间:2023-10-31 08:10:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

南昌大学实验报告

学生姓名: 学 号: 专业班级:中兴101班

实验类型:□验证 □综合 ■设计 □创新 实验日期:2012年12月14日 成绩:

实验六 数字频率计的设计

一、实验目的

1)设计具有较高测量精度的频率计;

2) 进一步学习QUATUSII的使用 3) 学会看RTL VIEWER图。

4) 熟悉实验设备和软件,掌握实验操作。

二、实验内容与要求

本实验要完成的任务就是设计一个频率计,系统时钟选择核心板上的 50M的时钟,闸门时间为 1s(通过对系统时钟进行分频得到),在闸门为高电平期间,对输入的频率进行计数,当闸门变低的时候,记录当前的频率值,并将频率计数器清零,频率的显示每过 2秒刷新一次。被测频率通过一个拨动开关来选择是使用系统中的数字时钟源模块的时钟信号还是从外部通过系统的输入输出模块的输入端输入一个数字信号进行频率测量。当拨动开关为高电平时,测量从外部输入的数字信号,否则测量系统数字时钟信号模块的数字信号。

三、实验仪器

PC机、Quartus II软件、EDA实验箱 四、实验思路

数字频率计工作原理概述

数字频率计的设计原理实际上是测量单位时间内的周期数。这种方法免去了实测以前的预测,同时节省了划分频段的时间,克服了原来高频段采用测频模式而低频段采用测周期模式的测量方法存在换挡速度慢的缺点。

采用一个标准的基准时钟,在单位时间(1s)里对被测信号的脉冲数进行计数,即为信号的频率。由于闸门的起始和结束时刻对于信号来说是随机的,将会有一个脉冲周期的量化误差。进一步分析测量准确度:设待测信号脉冲周期为Tx,频率为Fx,当测量时间为T=1s时,测量准确度为&=Tx/T=1/Fx。由此可知直接测频法的测量准确度与信号的频率有关:当待测信号频率较高时,测量准确度也较高,反之测量准确度也较低。因此直接测频法只适合测量频率较高的信号,不能满足在整个测量频段内的测量精度保持不变的要求。

为克服低频段测量的不准确问题,采用门控信号和被测信号对计数器的使能信号进行双重控制,大大提高了准确度。当门控信号为1时,使能信号并不为1,只有被测信号的上升沿到来时,使能端才开始发送有效信号,两个计数器同时开始计数。当门控信号变为0时,使能信号并不是立即改变,而是当被测信号的下一个上升沿到来时才变为0,计数器停止计数。因此测量的误差最多为一个标准时钟周期。当采用100MHz的信号作为标准信号时,误差最大为0.01μs。

计算每秒钟内待测信号脉冲个数。这就要求计数使能信号TSTEN能产生一个1秒脉宽的周期信号,

1

并对频率计的每一计数器cnt10的ENA使能端进行同步控制。当TSTEN为高电平时,允许计数;低电平时,停止计数,并保持其所计的数。在停止计数期间,首先需要一个锁存信号LOAD的上跳沿将计数器在前1秒钟的计数值锁存进32位锁存器REG32B中,并由外部的译码器译出并稳定显示。锁存信号之后,必须由清零信号CLR_CNT对计数器进行清零,为下一秒钟的计数操作做准备。

当系统正常工作时,脉冲发生器提供的1 Hz的输入信号,经过测频控制信号发生器进行信号的变换,产生计数信号,被测信号通过信号整形电路产生同频率的矩形波,送入计数模块,计数模块对输入的矩形波进行计数,将计数结果送入锁存器中,保证系统可以稳定显示数据,显示译码驱动电路将二进制表示的计数结果转换成相应的能够在数码显示管上可以显示的十进制结果。在数码显示管上可以看到计数结果。

系统的总体设计

当系统正常工作时,由系统时钟提供的50MHz的输入信号,经过分频模块,产生1HZ及1KHz的时钟信号,其中1HZ的输出频率被作为控制模块的时钟输入,1KHz的输出频率被作为显示模块的时钟输入,由控制模块产生的计数使能信号tsten和清零信号clr对计数模块进行控制,而由其产生的锁存信号load对锁存模块进行控制,一旦计数使能信号为高电平,并且时钟上升沿到来,计数器便开始正常计数,清零信号到来则计数清零,而当锁存信号为高电平时,数据便被锁存器锁存,然后将锁存的数据输出到显示模块显示出来,数据锁存保证系统可以稳定显示数据,显示译码驱动电路将二进制表示的计数结果转换成相应的能够在数码显示管上可以显示的十进制结果。在数码显示管上可以看到计数结果。数字频率计的原理框图如图1所示。主要由5个模块组成,分别是:信号源模块、控制模块、测频信号选择计数模块、锁存器模块和显示器模块。

图1 数字频率计的原理框图

根据数字频率计的系统原理,cnt控制信号发生器。tstctl的计数使能信号tsten能产生一个1 s宽的周期信号,并对频率计的每一计数器Cnt10的ENA使能端进行同步控制:当tsten高电平时允许计数、低电平时停止计数。

reg32b为锁存器。在信号load的上升沿时,立即对模块的输入口的数据锁存到reg32b的内部,并由reg32b的输出端输出,然后,七段译码器可以译码输出。在这里使用了锁存器,好处是可以稳定显示数据,不会由于周期性的清零信号而不断闪烁。

Cnt10为十进制计数器。有一时钟使能输入端ENA,用于锁定计数值。当高电平时允许计数,低电平时禁止计数。将八个十进制计数器Cnt10级联起来实现8 位十进制计数功能。

disply为七段译码显示驱动电路,可以将频率计数的结果译成能在数码管上显示的相对应的阿拉伯数字,便于读取测量的结果。

2

为了实现系统功能,测频控制信号发生器testctl、计数器Cnt10、锁存器reg32b存在一个工作时序的问题,设计时需要综合考虑。

8位数字频率计的顶层框图(endfreq.bdf),设计实现包括信号源模块(F1MHZ、CNT)、频率计模块(FREQ)和显示模块(display)三大模块。

五.原理图输入法设计(小时进制转换参考百度文库上的程序,其余独立完成) 1. 建立文件夹

建立自己的文件夹(目录),如c:\\myeda,进入Windows操作系统 ? Quartus II不能识别中文,文件及文件夹名不能用中文。 2. 原理图设计输入

打开Quartus II,选菜单File→New,选择“Device Design File->Block Diagram->Schematic File”项。点击“OK”,在主界面中将打开 “Block Editor”窗口。

(1) 分频器模块:(实体名为clkout)

分频器是为了产生1Hz 的门控信号和1KHz的数码管扫描信号,而对输入系统时钟clk(50MHz)进行分频的模块,设计源代码clkout.VHD 对输入系统时钟clk(50MHz)进行分频产生1Hz 信号及1KHz信号。

clkout的封装图如1所示,图中CLK50m为接入的50MHZ信号,图中CLK1khz为接到TElTCL的CLK的1HZ的信号, CLK1hz为接到Display的CLK的1kHZ的信号。

clkoutclk50mclk1kHZclk1HZinst 图2 clkout封装图

clkout的工作时序仿真图如图3所示。

图3分频模块仿真图

从clkout的工作时序仿真图可以看出:由系统时钟提供的50MHz的输入信号,经过分频模块,通过两个分频产生1HZ及1KHz的时钟信号,达到了设计所需的预期效果。

具体程序如下:

--时间:2012年11月01号 --版本:7.2

--功能:分频器(100分频)

分频模块DIV源代码div.vhd如下:

-------分频程序,从10KHZ中得到1HZ的计数频率,10000分频---------- -- Title:频率计闸门信号、显示扫描信号产生 --

3

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY clkout IS

PORT ( clk50m : IN STD_LOGIC; --50M系统时钟输入

clk1kHZ : OUT STD_LOGIC; --1KHZ显示扫描时钟输出 clk1HZ : OUT STD_LOGIC);--1HZ闸门信号产生 END clkout;

ARCHITECTURE A OF clkout IS BEGIN

PROCESS(clk50m) --产生显示扫描时钟1KHZ variable cnttemp : INTEGER RANGE 0 TO 99999; BEGIN

IF clk50m='1' AND clk50m'event THEN IF cnttemp=99999 THEN cnttemp:=0; ELSE

IF cnttemp<50000 THEN clk1khz<='1'; ELSE clk1khz<='0'; END IF;

cnttemp:=cnttemp+1; END IF; END IF;

END PROCESS;

PROCESS(clk50m) --产生显示扫描时钟1KHZ variable cnt : INTEGER RANGE 0 TO 49999999; BEGIN

IF clk50m='1' AND clk50m'event THEN IF cnt=49999999 THEN cnt:=0; ELSE

IF cnt<25000000 THEN clk1hz<='1'; ELSE clk1hz<='0'; END IF;

cnt:=cnt+1; END IF; END IF;

END PROCESS; END A;

(2) 测频控制信号产生器:(实体名为TElTCL)

控制模块的作用是产生测频所需要的各种控制信号。控制信号的标准输入时钟为1HZ,每两个时钟周期进行一次频率测量。该模块产生的3个控制信号,分别为TSTEN,LOAD,CLR_CNT.CLR_CNT信号用于在每次测量开始时,对计数器进行复位,以清除上次测量的结果,该复位信号高电平有效,持

4

续半个时钟周期的时间。TSTEN为计数允许信号,在TSTEN信号的上升沿时刻计数模块开始对输入信号的频率进行测量,测量时间恰为一个时钟周期(正好为单位时间1s),在此时间里被测信号的脉冲数进行计数,即为信号的频率。然后将值锁存,并送到数码管显示出来。设置锁存器的好处是使显示的数据稳定,不会由于周期性的清零信号而不断闪烁。在每一次测量开始时,都必须重新对计数器清0。

测频控制产生器如图4,图中CLK接CNT的FREQ1的1HZ的信号,TSTEN为计数允许信号,接计数器CNT10的ENA,CLR_CNT信号用于在每次测量开始时,对计数器进行复位,接计数器CNT10的CLR,LOAD接锁存器的LOAD。

TElTCLCLKTSTENCLR_CNTLOADinst11 图4 TESTCTL的封装图

测频控制信号发生器TESTCTL的工作时序图,控制模块的几个控制信号的时序关系图如图5所示。

图5 TESTCTL的时序仿真图

从图中可看出,计数使能信号TSTEN在1s的高电平后,利用其反相值的上跳沿产生一个锁存信号LOAD,随后产生清0信号上跳沿CLR_CNT。为了产生这个时序图需首先建立一个由D触发器构成的二分频器,在每次时钟CLK上升沿到来时令其翻转。其中,控制信号时钟clk的频率取1HZ,而信号TSTEN的脉宽恰好为1s,可以用作闸门信号。此时,根据测频的时序要求,可得出信号LOAD和CLR_CNT的逻辑描述。由图可知,在计数完成后,计数使能信号TETEN在1s的高电平后,利用其反相值的上跳沿产生一个锁存信号LOAD,0.5s后,CLR_CNT产生一个清零信号上跳沿。

具体程序如下:

--时间:2012年12月1号 --版本:7.2

--功能: 数字频率计控制信号产生

----------------- TElTCL ------------------------------------------------------------------ -- Title:数字频率计控制信号产生 -- LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY TElTCL IS

PORT ( CLK: IN STD_LOGIC; --1 Hz测频控制时钟

5

本文来源:https://www.bwwdw.com/article/s7h2.html

Top