实验六数字频率计的设计汇总.docx

上传人:b****8 文档编号:10159587 上传时间:2023-02-08 格式:DOCX 页数:24 大小:3.98MB
下载 相关 举报
实验六数字频率计的设计汇总.docx_第1页
第1页 / 共24页
实验六数字频率计的设计汇总.docx_第2页
第2页 / 共24页
实验六数字频率计的设计汇总.docx_第3页
第3页 / 共24页
实验六数字频率计的设计汇总.docx_第4页
第4页 / 共24页
实验六数字频率计的设计汇总.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

实验六数字频率计的设计汇总.docx

《实验六数字频率计的设计汇总.docx》由会员分享,可在线阅读,更多相关《实验六数字频率计的设计汇总.docx(24页珍藏版)》请在冰豆网上搜索。

实验六数字频率计的设计汇总.docx

实验六数字频率计的设计汇总

南昌大学实验报告

 

学生姓名:

学号:

专业班级:

中兴101班

实验类型:

□验证□综合■设计□创新实验日期:

2012年12月14日成绩:

实验六数字频率计的设计

、实验目的

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

2)进一步学习QUATUSII的使用

3)学会看RTLVIEWER图。

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

二、实验内容与要求

本实验要完成的任务就是设计一个频率计,系统时钟选择核心板上的50M的时钟,闸门时间为1s

(通过对系统时钟进行分频得到),在闸门为高电平期间,对输入的频率进行计数,当闸门变低的时候,

记录当前的频率值,并将频率计数器清零,频率的显示每过2秒刷新一次。

被测频率通过一个拨动开关来选择是使用系统中的数字时钟源模块的时钟信号还是从外部通过系统的输入输出模块的输入端输入一个数字信号进行频率测量。

当拨动开关为高电平时,测量从外部输入的数字信号,否则测量系统数字时钟信号模块的数字信号。

三、实验仪器

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

数字频率计工作原理概述

数字频率计的设计原理实际上是测量单位时间内的周期数。

这种方法免去了实测以前的预测,同时节省了划分频段的时间,克服了原来高频段采用测频模式而低频段采用测周期模式的测量方法存在换挡速度慢的缺点。

采用一个标准的基准时钟,在单位时间(1s)里对被测信号的脉冲数进行计数,即为信号的频率。

于闸门的起始和结束时刻对于信号来说是随机的,将会有一个脉冲周期的量化误差。

进一步分析测量准

确度:

设待测信号脉冲周期为Tx,频率为Fx,当测量时间为T=1s时,测量准确度为&=Tx/T=1/Fx。

此可知直接测频法的测量准确度与信号的频率有关:

当待测信号频率较高时,测量准确度也较高,反之测量准确度也较低。

因此直接测频法只适合测量频率较高的信号,不能满足在整个测量频段内的测量精

度保持不变的要求。

为克服低频段测量的不准确问题,采用门控信号和被测信号对计数器的使能信号进行双重控制,大

大提高了准确度。

当门控信号为1时,使能信号并不为1,只有被测信号的上升沿到来时,使能端才开

始发送有效信号,两个计数器同时开始计数。

当门控信号变为0时,使能信号并不是立即改变,而是当

被测信号的下一个上升沿到来时才变为0,计数器停止计数。

因此测量的误差最多为一个标准时钟周期。

当采用100MHz的信号作为标准信号时,误差最大为0.01卩s。

计算每秒钟内待测信号脉冲个数。

这就要求计数使能信号TSTEN能产生一个1秒脉宽的周期信号,

并对频率计的每一计数器cnt10的ENA使能端进行同步控制。

当TSTEN为高电平时,允许计数;低电平时,停止计数,并保持其所计的数。

在停止计数期间,首先需要一个锁存信号LOAD的上跳沿将计数器

在前1秒钟的计数值锁存进32位锁存器REG32E中,并由外部的译码器译出并稳定显示。

锁存信号之后,

必须由清零信号CLR_CNT寸计数器进行清零,为下一秒钟的计数操作做准备。

当系统正常工作时,脉冲发生器提供的1Hz的输入信号,经过测频控制信号发生器进行信号的变

换,产生计数信号,被测信号通过信号整形电路产生同频率的矩形波,送入计数模块,计数模块对输入的矩形波进行计数,将计数结果送入锁存器中,保证系统可以稳定显示数据,显示译码驱动电路将二进制表示的计数结果转换成相应的能够在数码显示管上可以显示的十进制结果。

在数码显示管上可以看到

计数结果。

系统的总体设计

当系统正常工作时,由系统时钟提供的50MHz的输入信号,经过分频模块,产生1HZ及1KHz的时

钟信号,其中1HZ的输出频率被作为控制模块的时钟输入,1KHz的输出频率被作为显示模块的时钟输入,

由控制模块产生的计数使能信号tsten和清零信号clr对计数模块进行控制,而由其产生的锁存信号

load对锁存模块进行控制,一旦计数使能信号为高电平,并且时钟上升沿到来,计数器便开始正常计数,

清零信号到来则计数清零,而当锁存信号为高电平时,数据便被锁存器锁存,然后将锁存的数据输出到显示模块显示出来,数据锁存保证系统可以稳定显示数据,显示译码驱动电路将二进制表示的计数结果转换成相应的能够在数码显示管上可以显示的十进制结果。

在数码显示管上可以看到计数结果。

数字频

率计的原理框图如图1所示。

主要由5个模块组成,分别是:

信号源模块、控制模块、测频信号选择计数模块、锁存器模块和显示器模块。

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

根据数字频率计的系统原理,cnt控制信号发生器。

tstctl的计数使能信号tsten能产生一个1s宽的周期信号,并对频率计的每一计数器Cnt10的ENA使能端进行同步控制:

当tsten高电平时允许计数、低电平时停止计数。

reg32b为锁存器。

在信号load的上升沿时,立即对模块的输入口的数据锁存到reg32b的内部,并

由reg32b的输出端输出,然后,七段译码器可以译码输出。

在这里使用了锁存器,好处是可以稳定显示数据,不会由于周期性的清零信号而不断闪烁。

Cnt10为十进制计数器。

有一时钟使能输入端ENA用于锁定计数值。

当高电平时允许计数,低电

平时禁止计数。

将八个十进制计数器Cnt10级联起来实现8位十进制计数功能。

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

数字,便于读取测量的结果。

为了实现系统功能,测频控制信号发生器testctl、计数器Cnt10、锁存器reg32b存在一个工作时

序的问题,设计时需要综合考虑。

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

五•原理图输入法设计(小时进制转换参考XX文库上的程序,其余独立完成)

1.建立文件夹

建立自己的文件夹(目录),如c:

\myeda,进入Windows操作系统QuartusII不能识别中文,文件及文件夹名不能用中文。

2.原理图设计输入

打开QuartusII,选菜单File宀New,选择DeviceDesignFile->BlockDiagram-'SchematicFile项。

点击“OK在主界面中将打开“BlockEditor窗口。

(1)分频器模块:

(实体名为clkout)

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

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

图2clkout封装图

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

图3分频模块仿真图

从clkout的工作时序仿真图可以看出:

由系统时钟提供的50MHz的输入信号,经过分频模块,

通过两个分频产生1HZ及1KHz的时钟信号,达到了设计所需的预期效果。

具体程序如下:

--时间:

2012年11月01号

--版本:

7.2

--功能:

分频器(100分频)

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

——分频程序,从10KHZ中得到1HZ的计数频率,10000分频

--Title:

频率计闸门信号、显示扫描信号产生--

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

PORT(clk50mclk1kHZclk1HZ

ENTITYclkoutIS:

INSTD_LOGIC;--50M系统时钟输入

:

OUTSTD_LOGIC;--1KHZ显示扫描时钟输出

:

OUTSTD_LOGIC);--1HZ闸门信号产生

ENDclkout;

ARCHITECTUREAOFclkoutIS

BEGIN

PROCESS(clk50m)--产生显示扫描时钟1KHZ

variablecnttemp:

INTEGERRANGE0TO99999;

BEGIN

IFclk50m='1'ANDclk50m'eventTHEN

IFcnttemp=99999THENcnttemp:

=0;

ELSE

IFcnttemp<50000THENclk1khz<='1';

ELSEclk1khz<='0';

ENDIF;

cnttemp:

=cnttemp+1;

ENDIF;

ENDIF;

ENDPROCESS;

PROCESS(clk50m)--产生显示扫描时钟1KHZ

variablecnt:

INTEGERRANGE0TO49999999;

BEGIN

IFclk50m='1'ANDclk50m'eventTHEN

IFcnt=49999999THENcnt:

=0;

ELSE

IFcnt<25000000THENclk1hz<='1';

ELSEclk1hz<='0';

ENDIF;

cnt:

=cnt+1;

ENDIF;

ENDIF;

ENDPROCESS;

ENDA;

(2)测频控制信号产生器:

(实体名为TElTCL)

控制模块的作用是产生测频所需要的各种控制信号。

控制信号的标准输入时钟为1HZ,每两个时

钟周期进行一次频率测量。

该模块产生的3个控制信号,分别为TSTEN,LOAD,CLR_CNT.CLR_CI信号用于在每次测量开始时,对计数器进行复位,以清除上次测量的结果,该复位信号高电平有效,持

续半个时钟周期的时间。

TSTEN为计数允许信号,在TSTEN信号的上升沿时刻计数模块开始对输入信号的频率进行测量,测量时间恰为一个时钟周期(正好为单位时间1s),在此时间里被测信号的脉

冲数进行计数,即为信号的频率。

然后将值锁存,并送到数码管显示出来。

设置锁存器的好处是使显示的数据稳定,不会由于周期性的清零信号而不断闪烁。

在每一次测量开始时,都必须重新对计数器清0。

测频控制产生器如图4,图中CLK接CNT的FREQ啲1HZ的信号,TSTEN为计数允许信号,接计数器CNT10的ENACLR_CNT信号用于在每次测量开始时,对计数器进行复位,接计数器CNT10的

CLRLOAD接锁存器的LOAD

图4TESTCTL的封装图

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

示。

图5TESTCTL的时序仿真图

从图中可看出,计数使能信号TSTEN在1s的高电平后,利用其反相值的上跳沿产生一个锁存信号LOAD随后产生清0信号上跳沿CLR_CNT为了产生这个时序图需首先建立一个由D触发器构成的

二分频器,在每次时钟CLK上升沿到来时令其翻转。

其中,控制信号时钟elk的频率取1HZ而信

号TSTEN的脉宽恰好为1s,可以用作闸门信号。

此时,根据测频的时序要求,可得出信号LOAD和

CLR_CN啲逻辑描述。

由图可知,在计数完成后,计数使能信号TETEN在1s的高电平后,利用其反

相值的上跳沿产生一个锁存信号LOAD,0.5s后,CLR_CNT产生一个清零信号上跳沿。

具体程序如下:

--时间:

2012年12月1号

--版本:

7.2

--功能:

数字频率计控制信号产生

TElTCL

--Title:

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

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYTElTCLIS

PORT(CLK:

INSTD_LOGIC;--1Hz测频控制时钟

TSTEN:

OUTSTD_LOGIC;--计数器时钟使能

CLR_CNT:

OUTSTD_LOGIC;--计数器清零

LOAD:

OUTSTD_LOGIC);--输出锁存信号

ENDTElTCL;

ARCHITECTUREARTOFTElTCLIS

SIGNALDIV2CLK:

STD_LOGIC;

SIGNALCLR:

STD_LOGIC;

SIGNALloadcnt:

STD_LOGIC;

BEGIN

PROCESS(CLK)IS

BEGIN

IFCLK'EVENTANDCLK='1'--1HZ时钟二分频

THENDIV2CLK<=NOTDIV2CLK;

ENDIF;

ENDPROCESS;

PROCESS(CLK,DIV2CLK)

BEGIN

IFCLK='0'ANDDIV2CLK='O'THEN--产生计数器清零信号

CLR<='1';

ELSECLR<='0';

ENDIF;

ENDPROCESS;

LOAD<=notdiv2clk;TSTEN<=DIV2CLK;CLR_CNT<=CLR;

ENDARCHITECTUREART;

(3)十进制计数器:

(实体名为CNT10

计数器模块是由8个带有异步清零端,进位信号输出的模为10的计数模块级连而成。

通过分频进行元件例化实现。

此十进制计数器的特殊之处是,有一时钟使能输入端ENA用于锁定计数器。

当高电平计数允许,低电平时计数禁止。

计数器模块用于对输入信号的脉冲进行计数,该模块必须有计数允许、异步清零等端口,以便于控制模块对其进行控制。

CNT10的封装如图6,其中CLR为复位接TESTCTL的CLR_CN■端,ENA接TESTCTL的TSTEN端,CQ[3..0]接锁存器的DOUT[31..0]端。

图6CNT10的封装图

有时钟使能的十进制计数器CNT10的工作时序仿真如图7。

此程序模块实现的功能是带使能端的10进制计数。

程序要求只有当使能端信号为高电平时计数

器才能正常工作,每个时钟的上升沿到来时计数器加1,因为这里要实现的是10进制计数,所以当

计数到10时计数器清零,同时产生进位信号,这里的进位信号仅为一个脉冲信号,一旦计数从10

变为1,脉冲信号立即变为低电平。

同时该计数器也应带有清零信号,一旦清零信号为高电平,计数器立即清零。

具体程序如下:

--时间:

2012年12月1号

--版本:

7.2

--功能:

十进制计数器

CNT10

--Title:

频率计有时钟使能的十进制计数器产生-

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYCNT10IS

PORT(CLK:

INSTD_LOGIC;--计数时钟信号

CLR:

INSTD_LOGIC;--清零信号

ENA:

INSTD_LOGIC;--计数使能信号

CQ:

OUTINTEGERRANGE0TO15;--4位计数结果输出

CARRY_OUT:

OUTSTD_LOGIC);--计数进位

ENDCNT10;

ARCHITECTUREARTOFCNT10IS

SIGNALCQI:

INTEGERRANGE0TO15;

BEGIN

PROCESS(CLK,ENA)IS

BEGIN

IFCLR='1'THENCQI<=0;----计数器异步清零

elsIFCLK'EVENTANDCLK='1'THEN

IFENA='1'THEN

iFCQI=10THENcqi<=1;ELSECQI<=cqi+1;

ENDIF;----等于9,则计数器清零

ENDIF;

ENDIF;

ENDPROCESS;PROCESS(CQI)IS

----进位输出

BEGIN

IFCQI=10THENCARRY_OUT<='1';

ELSECARRY_OUT<='O';

ENDIF;

ENDPROCESS;

CQ<=CQI;

ENDART;

(4)二选一被测频率选择模块(实体名:

muX

二选一被测频率选择模块如图8所示,其中

输入管脚:

clkin1设定为外部时钟输入;clkin2设疋为数字信号源输入;key设疋为数字信号源输入

输出管脚:

fin被测频率输出,当key为1时,选择外部时钟输入;选择0时为数字信号源

输入;

--时间:

2012年12月1号

--版本:

7.2

--功能:

二选一被测频率选择libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

useieee.std_logic_unsigned.all;

entitymuxis

port(clkin1

);

endmux;

architecturebehaveofmuxis

begin

process(key,clkin1,clkin2)

begin

ifkey='1'then

fin<=clkini;

else

fin<=clkin2;

endif;

endprocess;endbehave;

(5)显示模块(实体名:

display)

LED有段码和位码之分,所谓段码就是让LED显示出八位数据,一般情况下要通过一个译码电

路,将输入的4位2进制数转换为与LED显示对应的8位段码。

位码也就是LED的显示使能端,对于共阴级的LED而言,低电平使能,在本设计中设计了一个3位的循环计数器,将计数结果输入到

译码器,译码结果输出即可依次使能每个LEDb例如:

要让8个LED同时工作显示数据,就是要不

停的循环扫描每一个LED,并在使能每一个LED的同时,输入所需显示的数据对应的8位段码。

然8个LED是依次显示,但是受视觉分辨率的影响,看到的现象是8个LED同时工作。

display模

块的顶层图如下所示。

CNT计数产生扫描信号(位码),LED模块用于查表产生LED段码输出。

图9位display的封装图。

图中in0~in7接锁存器的DOUT[31..0]端。

display工作时序图如下图。

用8个LED将待测频率显示出来,将通过十进制计数器的时钟信号CLK输出为时钟信号计数

译码后的显示驱动端,在八段LED译码为对应的八段二进制编码,并由数码显示器显示出来。

图10

中为相应二进制编码与相对应的屏显数字。

显示电路

图11display硬件结构图

此部分如图,图中主要由0~7循环累加器、3-8译码器、BCD-7段显示译码器、8选1多路数据

开关和8个LED显示器组成的扫描数码显示器。

--时间:

2012年12月1号

--版本:

7.2

--功能:

数字频率计显示译码输出

display

--Title:

数字频率计显示译码输出-

LIBRARYIEEE;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitydisplayis

port(in7,in6,in5,in4,in3,in2,in1,in0:

instd_logic_vector(3downto0);

lout7:

outstd_logic_vector(6downto0);

SEL:

OUTSTD_LOGIC_VECTOR(2DOWNTO0);

clk:

instd_logic

);

enddisplay;

architecturephtaoofdisplayis

signals:

std_logic_vector(2downto0);

signalIout4:

std_logic_vector(3downto0);

begin

process(clk)

begin

if(clk'eventandclk='1')thenif(s="111")thens<="000";

elses<=s+1;

endif;

endif;

sel<=s;

endprocess;

process(s)begin

casesis

when"000"=>lout4<=in7;

when"001"=>lout4<=in6;

when"010"=>lout4<=in5;

when"011"=>lout4<=in4;

when"100"=>lout4<=in3;

when"101"=>lout4<=in2;

when"110"=>lout4<=in1;

when"111"=>lout4<=in0;

whenothers=>lout4<="XXXX";

endcase;

caselout4is

when"0000"=>lout7<="1111110";

when"0001"=>lout7<="0110000";

when"0010"=>lout7<="1101101";

when"0011"=>lout7<="1111001";

when"0100"=>lout7<="0110011";

when"0101"=>lout7<="1011011";

when"0110"=>lout7<="1011111";

when"0111"=>lout7<="1110000";

when"1000"=>lout7<="1111111";

when"1001"=>lout7<="1110011";

when"1010"=>lout7<="1111110";

whenothers=>lout7<="XXXXXXX";

endcase;

endprocess;

endphtao;

(6)锁存器模块(实体名:

REG32B)

锁存器模块也是必不可少的,测量模块测量完成后,在load信号的上升沿时刻将测量值锁存到寄存器中,然后输出到显示模块。

锁存器是起数据保持的作用,它将会把数据保存到下次触发或复位。

主要是主从触发器组成的。

用于存储数据来进行交换,使数据稳定下来保持一段时间不变化,直到新的数据将其替换。

锁存器REG32B勺封装如图12,图中LOAD接控制测频产生器TESTCTL的LOAD而DIN[31..O]接计数器CNT10的CQ[3..O],DOUT[31..0]接显示器display的in端。

图12REG32B的封装图

32位锁存器REG32B勺工作时序图如下图。

MasterTimeBar:

8D0ns

1.94ns

Interval:

)pw20,0ns40.0ns

60.0ns

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1