等精度频率计的设计.docx
《等精度频率计的设计.docx》由会员分享,可在线阅读,更多相关《等精度频率计的设计.docx(17页珍藏版)》请在冰豆网上搜索。
![等精度频率计的设计.docx](https://file1.bdocx.com/fileroot1/2023-2/6/5c94d80d-d58d-4399-99c7-947c0fd242cc/5c94d80d-d58d-4399-99c7-947c0fd242cc1.gif)
等精度频率计的设计
1.软件条件
MicrosoftwindowsXP
MAX+plusⅡ10.0
2.软件简介
MAX+plusⅡ简介:
MAX+plus2(Multiplearraymatrixandprogrammablelogicusersystem)是一个完全集成化、易学易用的可编程逻辑设计环境,它可以在多种平台上运行,其图形界面丰富,加上完整的、可即时访问的在线文档,使设计人员可以轻松地掌握软件的使用。
MAX+plus2开发系统有很多特点:
(1)界面开放
MAX+plus2是Altera公司的EDA软件,但它可以与其它工业标准的设计输入、综合与校验工具相连接,设计人员可以使用Altera或标准EDA工具设计输入工具来建立逻辑设计,用MAX+plus2编译器(Compiler)对Altera器件设计进行编译,并使用Altera或其它EDA校验工具进行器件或板级仿真。
目前,MAX+plus2支持与Candence、Exemplarlogic、MetorGraphics、Synopsys、Synplicity、Viewlogic等公司所提供的EDA工具接口。
(2)与结构无关
MAX+plus2系统的核心Compiler支持Altera公司的FLEX10K、FLEX8000、FLEX6000、MAX9000、MAX7000、MAX5000和Classic可遍程逻辑器件系列,提供了与结构无关的可编程逻辑环境。
MAX+plus2的编译器还提供了强大的逻辑综合与优化功能,使用户可以容易地把设计集成到器件中。
(3)丰富的设计库
MAX+plus2提供丰富的库单元供设计者调用,其中包括74系列的全部器件和其它多种逻辑功能部件,调用库元件进行设计,可以大大减轻设计人员的工作量,缩短设计周期。
(4)模块化工具
设计人员可以从各种设计输入、处理和校验选项中进行选择,从而使MAX+plus2可以满足不同用户的需求,根据需要,还可以添加新功能。
(5)硬件描述语言
MAX+plus2软件支持各种HDL设计输入选项,包括VHDL、VerilogHDL和Altera公司的AHDL。
3.语言简介
VHDL语言于八十年代初由美国国防部(TheUnitedStatesDepartmentofDefense)发起创建,当时制订了一个名为VHSIC(VeryHighSpeedIntegratedCircuit)的计划,其目的是为了能制定一个标准的文件格式和语法,要求各武器承包商遵循该标准描述其设计的电路,以便于保存和重复使用电子电路设计。
VHDL语言的全称为“超高速集成电路硬件描述语言”(VHSICHardwareDescriptionLanguage),于1982年正式诞生,VHDL吸取了计算机高级语言语法严谨的优点,采用了模块化的设计方法,于1987年被国际电气电子工程协会(InternationalElectrical&ElectronicEngineering,IEEE)收纳为标准;文件编号为IEEEstandard1076。
1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展了VHDL的内容,公布了新版本的VHDL,即IEEE标准的1076-1993版本。
VerilogHDL语言最初是于1983年由GatewayDesignAutomation(GDA)公司的PhilMoorby为其模拟器产品开发的硬件描述语言,那时它只是一种专用语言,最初只设计了一个仿真与验证工具,之后又陆续开发了相关的故障模拟与时序分析工具。
1985年Moorby推出它的第三个商用仿真器Verilog-XL,获得了巨大的成功,由于他们的模拟、仿真器产品的广泛使用,VerilogHDL作为一种便于实用的语言逐步为设计者所接受。
1989年CADENCE公司收购了GDA公司,使得VerilogHDL成为该公司的专有技术。
1990年CADENCE公司公开发表了VerilogHDL,并成立OVI(OpenVerilonInternational)来促进VerilogHDL的发展,致力于推广VerilogHDL成为IEEE标准,这一努力最后获得成功。
Verilog语言于1995年成为IEEE标准,称为IEEEStd1364-1995。
4.频率计的基本原理
频率计的基本原理是用一个频率稳定高的频率源作为基准时钟,对比测量其他信号的频率。
通常情况下计算每秒内待测信号的脉冲个数,此时我们称闸门时间为一秒。
闸门时间也可以大于或小于一秒。
闸门时间越长,得到的频率值就越准确,但闸门时间越长则每测一次频率的间隔就越长。
闸门时间越短,测的频率值刷新就越快,但测得的频率就受影响。
数字频率计是用数字显示被测信号频率的仪器,被测信号可以是正旋波,方波或其他周期性变化的信号。
如配以适当的传感器,可以对多种物理量进行测试,比如机械振动的频率、转速,声音的频率以及产品的计件等等,因此,数字频率计是一种应用很广泛的仪器电子系统非常广泛的应用领域内,到处可见到处理离散信息的数字电路。
数字电路制造工业的进步,使得系统设计人员能在更小的空间内实现更多的功能,从而提高系统可靠性和速度。
5.频率计设计要求
1
频率测试功能:
测频范围0.1Hz~100MHz。
测频精度:
测频全域相对误差恒为百万分之一。
2
脉宽测试功能:
测试范围0.1μs~1s,测试精度0.01μs。
3
占空比测试功能:
测试精度1%~99%。
6.测量原理及误差分析
常见的直接测频方法主要有测频法和测周期法两种。
测频法就是在确定的闸门时间Tw内,纪录被测信号的变化周期数(或脉冲个数)Nx,则被测信号的频率为:
fx=Nx/Tw。
测周期法需要有标准信号的频率fs,在待测信号的一个周期Tx内,纪录标准测频率的周期数Ns,则被测信号的频率为fx=fs/Ns。
这两种方法的记数值会产生±1个字误差,并且测试精度与计数器中纪录的数值Nx或Ns有关。
为了保证测试精度,一般对于低频信号采用测周期法;对于高频信号采用测频法,因此测试很不方便,所以有人提出等精度测频方法。
等精度测量方法是在直接测频方法的基础上发展起来的。
它的闸门时间不是固定值,而是被测信号的整数倍,即于被测信号同步,因此,排除了对被测信号计数所产生±1个字误差,并达到了在整个测试频段的等精度测量。
其测频原理如图所示
图2.1
在测量过程中,有两个计数器分别对标准信号和被测信号同时计数。
首先给出闸门开启信号(预置闸门上升沿),此时计数器并不开始计数,而是等到被测信号的上升沿来时,计数器才真正开始计数。
然后预置闸门关闭信号(下降沿)到时,计数器并不立即停止计数,而是等到被测信号的上升沿到来时才结束计数,完成一次测量过程。
可以看出,实际闸门时间t与预置闸门时间t1并不严格相等,但差值不超过被测信号的一个周期。
设在一次实际闸门时间t中计数器对被测信号的计数值为Nx,对标准信号的计数值为Ns。
标准信号的频率fs,被测信号的频率为
x=
fs(2.1)
由式2.1可知,若忽略标准fs的误差,则等精度测频可能产生的相对误差为
(2.2)
式中fxe为被测信号频率的准确值。
在测量中,由于fx计数的起停时间都是由该信号的上升沿触发的,在闸门时间t内对fx计数Nx无误差(t=NxTx);对fs的计数Ns最多相差一个数的误差,即
,其测量频率为
fxe=[Nx/(Ns+
Ns)]/fs(2.3)
将式(2.1)和式(2.3)代入式(2.2),并整理得
=
/Ns
1/Ns=1/(t
fs)
由上式可以看出,测量频率的相对误差与被测信号频率的大小无关,仅与闸门时间和标准信号频率有关,即实现了整个测试频段的等精度测量。
闸门时间越长,标准频率越高,测频的相对误差就越小。
标准频率可由稳定度好,精度高的高频率晶体振荡器产生,在保证测量精度不变的前提下,提高标准信号频率,可使闸门时间缩短,即提高测试速度。
表2.1所列为标频在10kHz和100MHz时闸门时间与最大充许误差的对应关系。
表2.1闸门时间与精度的关系
闸门时间/(s)
标准频率为10kHz的精度
标准频率为100MHz的精度
0.01
0.1
1
10
等精度测频的实现方法可简化为图2.2所示
图2.2
7.主系统组成
等精度频率计的主系统主要由以下几个部分构成:
·信号整形电路。
用于对待测信号进行放大和整形,以便作为PLD器件的输入信号。
·测频电路。
是测频的核心电路模块,可以由FPGA等PLD器件承担。
·100MHz的标准频率信号源(如果由于优化问题。
可接50MHz或更低频率的晶震)直接进入FPGA。
·单片机电路模块。
用于控制FPGA的测频操作和读取测频数据,并作为相应数据处理。
安排单片机的PO口直接读取测试数据,P2口想FPGA发控制命令。
·键盘模块。
可以用5个按键执行测试控制,一个是复位键,其余是命令键
·数码现实模块。
可以用7个数码管现实测试结果,最高可以表示百分之一的精度。
考虑到提高单片机IO口的利用率,减低编程复杂性,提高单片机的计算速度以及降低数码显示对主系统的干扰,可以采用串行静态现实方式。
等精度频率计的主系统组成如下图2.3所示。
图2.3等精度频率计的主系统组成
图2.4
8.程序设计
LIBRARYIEEE;--等精度频率计
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYjdpljIS
PORT(BCLK:
INSTD_LOGIC;--CLOCK1标准频率时钟信号
TCLK:
INSTD_LOGIC;--待测频率时钟信号
CLR:
INSTD_LOGIC;--清零和初始化信号
CL:
INSTD_LOGIC;--预置门控制
SPUL:
INSTD_LOGIC;--测频或测脉宽控制
START:
OUTSTD_LOGIC;--起始计数标志信号
EEND:
OUTSTD_LOGIC;--由低电平变到高电平时指示脉宽计数结束
SEL:
INSTD_LOGIC_VECTOR(2DOWNTO0);--数据读出选择控制
DATA:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));--8位数据读出
ENDjdplj;
ARCHITECTUREbehavOFjdpljIS
SIGNALBZQ:
STD_LOGIC_VECTOR(31DOWNTO0);--标准计数器
SIGNALTSQ:
STD_LOGIC_VECTOR(31DOWNTO0);--测频计数器
SIGNALENA:
STD_LOGIC;--计数使能
SIGNALMA,CLK1,CLK2,CLK3:
STD_LOGIC;
SIGNALQ1,Q2,Q3,BENA,PUL:
STD_LOGIC;
SIGNALSS:
STD_LOGIC_VECTOR(1DOWNTO0);
BEGIN
START<=ENA;
DATA<=BZQ(7DOWNTO0)WHENSEL=”000”ELSE--标准频率计数低8位输出
BZQ(15DOWNTO8)WHENSEL="001"ELSE
BZQ(23DOWNTO16)WHENSEL="010"ELSE
BZQ(31DOWNTO24)WHENSEL=”011”ELSE--标准频率计数高8位输出
TSQ(7DOWNTO0)WHENSEL=”100”ELSE--待测频率计数值低8位输出
TSQ(15DOWNTO8)WHENSEL="101"ELSE
TSQ(23DOWNTO16)WHENSEL="110"ELSE
TSQ(31DOWNTO24)WHENSEL=”111”ELSE--待测频率计数值高8位输出
TSQ(31DOWNTO24);
BZH:
PROCESS(BCLK,CLR)--标准频率测试计数器,标准计数器
BEGIN
IFCLR='1'THENBZQ<=(OTHERS=>'0');
ELSIFBCLK'EVENTANDBCLK='1'THEN
IFBENA='1'THENBZQ<=BZQ+1;ENDIF;
ENDIF;
ENDPROCESS;
TF:
PROCESS(TCLK,CLR,ENA)--待测频率计数器,测频计数器
BEGIN
IFCLR='1'THENTSQ<=(OTHERS=>'0');
ELSIFTCLK'EVENTANDTCLK='1'THEN
IFENA='1'THENTSQ<=TSQ+1;ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(TCLK,CLR)
BEGIN
IFCLR='1'THENENA<='0‘;
ELSIFTCLK'EVENTANDTCLK='1'THENENA<=CL;ENDIF;
ENDPROCESS;
MA<=(TCLKANDCL)ORNOT(TCLKORCL);--测脉宽逻辑
CLK1<=NOTMA;CLK2<=MAANDQ1;CLK3<=NOTCLK2;SS<=Q2&Q3;
DD1:
PROCESS(CLK1,CLR)
BEGIN
IFCLR='1'THENQ1<='0';
ELSIFCLK1'EVENTANDCLK1='1'THENQ1<='1';ENDIF;
ENDPROCESS;
DD2:
PROCESS(CLK2,CLR)
BEGIN
IFCLR='1'THENQ2<='0';
ELSIFCLK2'EVENTANDCLK2='1'THENQ2<='1';ENDIF;
ENDPROCESS;
DD3:
PROCESS(CLK3,CLR)
BEGIN
IFCLR='1'THENQ3<='0';
ELSIFCLK3'EVENTANDCLK3='1'THENQ3<='1';ENDIF;
ENDPROCESS;
PUL<=‘1’WHENSS=“10”ELSE--EEND为低电平时,表示正在记数,由低电平变为高电平
‘0’;--时,表示记数结束,可以从标准计数器中读数据了
EEND<='1'WHENSS="11"ELSE
'0';
BENA<=ENAWHENSPUL=‘1’ELSE--标准计数器时钟使能控制信号,当SPUL为1时,测频率
PULWHENSPUL=‘0’ELSE--当SPUL为0时,测脉宽和占空间比
PUL;
ENDbehav;
9.程序仿真
图2.5
从上图可以看出,SPUL=’1’时,系统进行等精度测频。
这时,CL一个正脉冲后,系统被初始化。
然后CL被置为高电平,但这时两计数器并未开始计数(START=’0’),直到此后信号被测信号TCLK出现一个上升沿,START=’1’时两个计数器同时启动分别对被测信号和标准信号开始计数,其中BZQ和TSQ分别为标准频率计数器和被测频率计数器的计数值。
由图可见,在CL变为低电平后,计数仍未停止,直到TCLK出现一个上升沿为止,这时START=’0’,可作为单片机了解计数结束的标志信号。
仿真波形中TCLK和BCLK的周期分别设置为10μs和500ns。
由图可见计数结果是,对TCLK的计数值是5,对BCLK的计数值是64(十六进制)。
通过控制SEL就能按照8个8位将两个计数器中的32位数读入单片机中进行计算。
10.引脚锁定
(1)根据GW48/GK/EK/PK2系统万能插口与结构图信号与芯片引脚对造和模式5得到引脚表如表2.2所示:
表2.2引脚锁定模式5
芯片引脚名
实验控制选择
引脚名
引脚号
BCLK
标准频率时钟
clock9(50MHz)
1
TCLK
clock0(2,4,8Hz)
2
CLR
键7
PIO6
11
CL
键8
PIO7
16
SPUL
键4
PIO3
8
START
发光管7
PIO14
24
EEND
发光管8
PIO15
25
DATA7~4
数码管2
PIO23~20
38~35
35DATA3~0
数码管1
PIO19~16
30~27
SEL2~0
键3~1
PIO2~0
7~5
(2)引脚注释:
1.BCLK:
标准频率输入信号,50MHz(CLB).
2.TCLK:
待测频率输入信号,0.1Hz-50MHz.
3.CLR:
全局清0和初始化输入,高电平有效,由单片机向FPGA发出。
4.CL:
预置门控制输入,时间可选在0.1s到10s间,高电平有效,由单片机向FPGA发出。
5.SPUL:
高电平测频率,低电平测脉冲,由单片机想FPGA发出。
6.此信号由单片机读取,在测频时,高电平时表示进去计数周期,低电平时表示计数结束,单片机可以读取FPGA中的计数。
7.EEND:
在测脉冲期间(SPUL=’0’),由低电平变为高电平,表示脉宽计数结束,EEND信号由单片机读出。
8.DATA:
计数数据输出8位,由单片机根据SEL选择信号分别读取。
9.SEL:
计数数据读出控制3位,由单片机输出控制。
当SEL分别等于:
“000”、“001”、“010”、“011”,可由DATA分别读出:
BZQ[7..0]、[15..8]、[23..16]、[31..24]共32位。
当SEL分别等于:
“100”、“101”、“110”、“111”,可由DATA分别读出:
TSQ[7..0]、[15..8]、[23..16]、[31..24]共32位。
11.硬件验证
模式5
键4SPUL亮
键7清零亮然后灭
键8快速按两次先亮后灭
然后利用键1、2、3分别读取标准低到高数据,待测低到高数据。
12.设计总结
在此次设计中,遇到了很多的困难和问题。
因为本设计用VHDL语言编写,其语法相当严格。
因此,在编程中经常出现错误。
这就需要程序设计人员有丰富的专业知识和经验以及谨慎的态度。
总得来说,通过该设计,使我更加熟悉了MAX+plus2的操作和使用方法及VHDL语言。