数字式频率计的EDA设计.docx
- 文档编号:17560459
- 上传时间:2023-07-26
- 格式:DOCX
- 页数:18
- 大小:199.68KB
数字式频率计的EDA设计.docx
《数字式频率计的EDA设计.docx》由会员分享,可在线阅读,更多相关《数字式频率计的EDA设计.docx(18页珍藏版)》请在冰点文库上搜索。
数字式频率计的EDA设计
6.3数字式频率计的EDA设计
6.3.1设计要求
设计一个能测量方波信号频率的频率计,测量结果用4位十进制数显示,频率测量范围为分为四档。
一档为0~9999Hz;二档为10.0~99.99kHz;三档为100.0~999.9kHz;四档为1.000~999MHz,用4个带小数点数码管显示其频率;并设置4个量程状态显示信号(本设计中用4个发光二级管表示),并且具有超量程提示功能,在超出目前量程档次时报警。
6.3.2原理描述
频率计是能够测量和显示信号频率的电路。
所谓频率,就是周期性信号在单位时间内变化的次数。
常用的直接测频法有两种,一种是测周期法,一种是测频率法。
测周期法需要有基准系统时钟频率Fs,在待测信号一个周期Tx内,记录基准系统时钟频率的周期数Ns,则被测频率可表示为:
Fx=Fs/Ns(6-5)
测频率法就是在一定时间间隔Tw(该时间定义为闸门时间)内,测得这个周期性信号的重复变换次数为Nx,则其频率可表示为:
Fx=Nx/Tw(6-6)
这两种方法的计数值会产生正负一个字的误差,并且被测精度与计数器中记录的数值Nx有关,为保证测试精度,一般对于低频信号采用测周期法,对于高频信号采用测频率法,直接测频法的时序控制波形图如图6-21所示。
直接测频法的一般思路是:
在精确规定计数允许周期T内使能计数器,对被测信号的周期(脉冲)数进行计数,计数允许周期T的长度决定了被测信号频率的范围。
较长的计数允许周期T对低频信号而言有利于改善测量精度,但对于高频信号来说,则会产生溢出;较短的计数允许周期T对低频信号的测量,虽然精度降低,但能测量的最大频率较高,且不会产生溢出。
基于此思路,可得到数字式频率计系统组成框图如图6-22所示
图6-21直接测频法时序控制波形图
图6-22数字式频率计系统组成框图
根据图6-22,可以把数字式频率计分为四个部分:
即4位十进制计数器模块、闸门控制模块、译码显示模块和脉冲整形模块。
该数字式频率计的精度取决于系统基准时钟,实际设计可采用石英晶体振荡器电路,以便为闸门控制电路产生精确的系统基准时钟。
脉冲整形模块主要对待测频率信号进行整形,以确保待测频率信号与BCD计数器模块的输入脉冲相兼容。
只要待测频率信号具有足够的幅度,就可采用施密特触发器对输入信号进行整形,把非方波信号转换为数字脉冲信号。
在EDA设计中不考虑此模块的设计,下面将给出各低层模块的层次化设计方案。
6.3.3频率计的层次化设计方案
14位十进制计数器模块
4位十进制计数器模块包含4个级联十进制计数器,用来对施加到时钟脉冲输入端的待测信号产生的脉冲进行计数,十进制计数器具有计数使能、清零控制和进位扩展输出。
用于计数的时间间隔(计数允许周期T)由闸门控制模块的控制信号发生器所产生的使能信号来控制,使能十进制计数器的计数允许周期T可由闸门控制模块中的量程选择输入来决定。
这样允许用户选择所希望的被测频率范围,并有效地确定读出数据中十进制小数点的位置。
1)十进制计数器元件cnt10_v的设计
十进制计数器既可采用QuartusII的宏元件74160,也可用VHDL语言设计,其源程序如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYcnt10_vIS
PORT(CLK,RST,EN:
INSTD_LOGIC;
CQ:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
COUT:
OUTSTD_LOGIC);
ENDcnt10_v;
ARCHITECTUREbehavOFcnt10_vIS
BEGIN
PROCESS(CLK,RST,EN)
VARIABLECQI:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
IFRST='1'THENCQI:
=(OTHERS=>'0');--计数器异步复位
ELSIFCLK'EVENTANDCLK='1'THEN--检测时钟上升沿
IFEN='1'THEN--检测是否允许计数(同步使能)
IFCQI<9THENCQI:
=CQI+1;--允许计数,检测是否小于9
ELSECQI:
=(OTHERS=>'0');--大于9,计数值清零
ENDIF;
ENDIF;
ENDIF;
IFCQI=9THENCOUT<='1';--计数等于9,输出进位信号
ELSECOUT<='0';
ENDIF;
CQ<=CQI;--将计数值向端口输出
ENDPROCESS;
ENDbehav;
在源程序中COUT是计数器进位输出;CQ[3..0]是计数器的状态输出;CLK是时钟输入端;RST是复位控制输入端,当RST=1时,CQ[3..0]=0;EN是使能控制输入端,当EN=1时,计数器计数,当EN=0时,计数器保持状态不变。
在项目编译仿真成功后,将设计的十进制计数器电路设置成可调用的元件cont10_v.sym,用于以下的4位十进制计数器的顶层设计。
2)4位十进制计数器的顶层设计
该顶层设计可以用原理图输入的方法完成,其详细设计流程可参考5.3.1节例5-5的内容。
在QUartusII中,新建一个原理图编辑窗,从当前的工程目录中调出4片十进制计数器元件cnt10_v,并按图6-23所示的4位十进制计数器的顶层原理图完成电路连接。
图6-234位十进制计数器的顶层原理图
完成4位十进制计数器的顶层原理图编辑以后,即可进行真测试和波形分析,其仿真输出波形如图6-24(a)所示,当CLR=0、EN=1时其计数值在0到9999之间循环变化,Cout为计数进位输出信号,在实际应用中可作为超量程报警信号,因此仿真结果正确无误。
此后,可将以上设计的4位十进制计数器设置成可调用的元件cnt4X10.sym,以备高层设计中使用,其元件符号图如图6-24(b)所示。
(a)(b)
图6-244位十进制计数器的顶层模块
(a)仿真输出波形;(b)元件符号图
2闸门控制模块EDA设计
根据6.3.2所述,频率计电路工作时先要产生一个计数允许信号(即闸门信号),闸门信号的宽度为单位时间,如1s。
在闸门信号有效时间内,对被测信号计数,即为信号的频率。
该频率计电路的精度取决于闸门信号T,该模块可再分为2个子模块,一个是定时信号模块,一个是控制信号发生器模块。
1)定时信号模块Timer
根据设计要求,对于四位十进制计数器来说,当闸门信号的最大采样时间为1S时,其计数值在0到9999之间,则最大频率为9999Hz,此即为频率计电路工作的一档;当闸门信号的最大采样时间为0.1S(100毫秒)时,其计数值在0到9999之间,把它转换为频率则为最小频率为10Hz,最大频率为999900Hz或者99.99kHz,此即为频率计电路工作的二档;当闸门信号的最大采样时间为0.01S(10毫秒)时,其计数值在0到9999之间,把它转换为频率则为最小频率为100Hz,最大频率为9999000Hz或者999.9kHz,此即为频率计电路工作的三档;当闸门信号的最大采样时间为0.001S(1毫秒)时,其计数值在0到9999之间,把它转换为频率则为最小频率为1000Hz,最大频率为99990000Hz或者999MHz,此即为频率计电路工作的四档。
本设计中假设输入的系统基准时钟为1kHz,为产生四种不同的闸门信号T,可由一组3级模10计数器对1kHz信号进行分频,为控制信号发生器提供4种不同的频率信号,通过数据选择器MUX41利用量程选择开关控制闸门信号T的基准时钟,原理图如图6-25所示。
图6-25定时信号模块原理图
图6-25中,cnt10_v为已设计好的十进制计数器元件,可直接把该模块作为底层元件使用,MXU41为4选1数据选择器,其4个输入为1kHz信号进行分频后的4种不同的频率信号1s、100ms、10ms、1ms。
BA为量程选择开关,其4种不同的编码状态00、01、10、11通过4选1数据选择器分别选择输出4种不同的频率信号到Bclk,Bclk将作为控制信号发生器模块的控制时钟脉冲。
BA的4种不同的编码状态通过2-4译码器74139M产生4个量程状态显示信号p0(一档)、p1(二档)、p2(三档)、p3(四档)。
图6-26(a)为其编译仿真后的输出时序波形图,生成的元件符号图如图6-26(b)所示。
(a)(b)
图6-26定时信号模块
(a)仿真输出波形;(b)元件符号图
2)控制信号发生器模块T_con
控制信号发生器的时序输出波形图如图6-27所示:
图6-25控制信号发生器模块时序输出波形图
该模块主要根据输入的控制时钟脉冲,产生计数允许信号EN,该信号的高电平的持续时间即计数允许时间与输入的控制时钟脉冲周期相同;产生清零信号CLR,在计数使能前对计数器清零;产生存储信号XEN,在计数结束后,利用上升沿把最新的频率测量值保存在显示寄存器中。
不失一般性,控制信号发生器用74161构成4分频计数器,用一个与非门,一个或非门和一个异或门实现3种译码状态,以便产生清零信号CLR,使能信号EN和存储信号XEN。
其原理图如图6-26(a)所示,编译仿真正确无误后,生成的元件符号图如图6-26(b)所示。
(a)(b)
图6-26控制信号发生器模块原理图
(a)原理图;(b)元件符号图
3译码显示模块
译码显示模块由显示寄存器和译码扫描显示电路组成。
1)显示寄存器设计
显示寄存器是在计数结束后,利用触发器的上升沿把最新的频率测量值保存在起来,这样在计数过程中可不必一直看着数码管显示器,显示器将最终的频率读数定期进行更新,其输出将作为译码扫描显示电路的输入。
16位显示寄存器的VHDL源程序如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYreg_16IS
PORT(Load:
INSTD_LOGIC;
DIN:
INSTD_LOGIC_VECTOR(15DOWNTO0);
DOUT:
OUTSTD_LOGIC_VECTOR(15DOWNTO0));
ENDreg_16;
ARCHITECTUREbehavOFreg_16IS
BEGIN
PROCESS(Load,DIN)
BEGIN
IFLoad'EVENTANDLoad='1'THEN--时钟到来时,锁存输入数据
DOUT<=DIN;
ENDIF;
ENDPROCESS;
ENDbehav;
在源程序中Load是锁存信号,上升沿触发;DIN[15..0]是寄存器输入;DOUT[15..0]是寄存器输出。
2)译码扫描显示电路
数字逻辑系统中常用的显示器件是数码管,半导体是数码管的外形和等效电路如图6-27所示,其每一个字段都是一个发光二级管(LightEmittingDiode,LED),因而也称之为LED数码管或LED显示器。
LED数码管用7段发光二极管(带小数点时为8段)来显示数字,每一段都是一个发光二极管,一般把所有段的相同一端相连,连接到地(共阴极接法)或者是连接到电源(共阳极接法)。
共阴级LED数码管的公共端连接到地,另一端分别接一个限流电阻后再接到控制电路的信号端,当信号端为高电平时,该段即被点亮,否则不亮。
共阳极接法则相反,公共端连接到电源,另一端分别接一个限流电阻后再接到控制电路的信号端,只有信号端为低电平时才被点亮,否则不亮。
图6-27数码管的外形和等效电路
在数字逻辑电路中,数码管可以用TTL或CMOS集成电路来直接驱动,其驱动方式有BCD码驱动和直接驱动两种。
BCD码驱动方式是用74LS48(共阳级7段显示驱动器)/74LS49(共阴级7段显示驱动器)译码驱动电路来控制数码管显示。
直接驱动方式是直接对数码管相应字段给出驱动电平,显示字形。
表6-2给出了共阴级LED数码管显示译码真值表。
在CPLD/FPGA验证设计结果时,两种方法均可采用。
N个LED数码管以静态方式显示时,需用到8×N条引脚线。
在较为复杂的系统中,CPLD/FPGA的引脚端资源是有限的。
因此对于多个LED数码管显示,可以采用扫描方式来实现LED数码管动态显示。
表6-2给出了共阴级LED数码管显示译码真值表
BCD码输入
输出电平
输出字形
DCBA
gfedcba
0000
0111111
0
0001
0000110
1
0010
1011011
2
0011
1001111
3
0100
1100110
4
0101
1101101
5
0110
1111101
6
0111
0000111
7
1000
1111111
8
1001
1101111
9
实现方法是将频率计的4个数码管的相应字段并联起来,由CPLD/FPGA的输出信号a、b、c、d、e、f、g、h(小数点)直接驱动相应字段,由片选信号S1、S2、S3、S4依次点亮各个LED数码管,循环进行显示,即一个数码管显示之后另一个数码管马上显示,利用人眼的视觉暂留特性,可以到多个数码管同时显示的效果,其原理图如图6-28所示。
图6-28数码管动态扫描显示原理图
采用扫描方式来实现LED数码管动态显示,控制好数码管之间的延时是相当重要。
根据人眼视觉暂留原理,LED数码管每秒的导通16次以上,人眼就无法分辨LED数码管短暂的不亮,认为是一直点亮的(其实LED数码管是以一定频率在闪动的)。
但是,延时(导通频率)也不是越小越好,因为LED数码管达到一定亮度需要一定时间。
如果延时控制的不好则会出现闪动,或者亮度不够。
据经验,延时0.005秒可以达到满意的效果。
另外,显示的字符有变化时,可在延时到达后送一个低电平(共阴极数码管)让LED数码管先短暂熄灭,再显示下一个字符,可使在视觉上字符的变化更清晰。
(1)7段数码显示译码器的VHDL设计
该模块将显示寄存器的四位BCD数字符译成7段码,根据表6-2,其VHDL源程序如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYDECL7SIS
PORT(A:
INSTD_LOGIC_VECTOR(3DOWNTO0);
LED7S:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
ENDDECL7S;
ARCHITECTUREoneOFDECL7SIS
BEGIN
PROCESS(A)
BEGIN
CASEAIS
WHEN"0000"=>LED7S<="0111111";--0(LED为共阴级)
WHEN"0001"=>LED7S<="0000110";--1
WHEN"0010"=>LED7S<="1011011";--2
WHEN"0011"=>LED7S<="1001111";--3
WHEN"0100"=>LED7S<="1100110";--4
WHEN"0101"=>LED7S<="1101101";--5
WHEN"0110"=>LED7S<="1111101";--6
WHEN"0111"=>LED7S<="0000111";--7
WHEN"1000"=>LED7S<="1111111";--8
WHEN"1001"=>LED7S<="1101111";--9
WHENOTHERS=>NULL;
ENDCASE;
ENDPROCESS;
ENDone;
程序中,A[3..0]是0~9的BCD码输入;LED7S为译码后的7段数据信号。
(2)动态扫描显示的VHDL源程序如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYdynamicIS
Port(clk,reset:
instd_logic;
din1:
instd_logic_vector(6downto0);--译码后的数据信号1
din2:
instd_logic_vector(6downto0);--译码后的数据信号2
din3:
instd_logic_vector(6downto0);--译码后的数据信号3
din4:
instd_logic_vector(6downto0);--译码后的数据信号4
shift:
outstd_logic_vector(3downto0);--位选信号
bus4:
outstd_logic_vector(6downto0));--数据信号
enddynamic;
architectureoneofdynamicis
signalscan_clk:
std_logic_vector(1downto0);
begin
p1:
process(clk,scan_clk,reset)--分频进程
variablescan:
std_logic_vector(17downto0);
begin
ifreset='1'then
scan:
="000000000000000000";
scan_clk<="00";
elsifclk'eventandclk='1'then
scan:
=scan+1;
endif;
scan_clk<=scan(1downto0);
endprocessp1;
p2:
process(scan_clk,din1,din2,din3,din4)--扫描进程
begin
casescan_clkis
when"00"=>bus4<=din1;shift<="0001";
when"01"=>bus4<=din2;shift<="0010";
when"10"=>bus4<=din3;shift<="0100";
when"11"=>bus4<=din4;shift<="1000";
whenothers=>bus4<="0000000";shift<="0000";
endcase;
endprocessp2;
endone;
程序中,clk是扫描时钟;reset为复位信号,当reset=1时对位选信号复位,shif为4个数码管的位选信号,高电平有效;din1、din2、din3、din4为输入的7段数据信号,bus4为经位选输出的7段数据信号。
3)译码显示模块的定层电路设计
在QuartusII中,完成7段数码显示译码器DECL7S,动态扫描显示DYNAMIC的VHDL源程序编辑仿真后,为它们建立相应的元件符号DECL7S.sym、DYNAMIC.sym,然后按照图6-29所示的译码显示模块的原理图,即可完成定层电路设计和仿真。
图6-29译码显示模块的原理图
图6-30为其编译仿真后的输出时序波形图和生成的元件符号图如图。
分析图6-30(a),当FX=1234时,在时钟脉冲CLK作用下,首先送出最低位测量值4,此时数码管的位选信号CH[3..0]=
(1)H,数码管的译码电平输出为(66)H;第二个为3,此时数码管的位选信号CH[3..0]=
(2)H,数码管的译码电平输出(4F)H;第三个为2,此时数码管的位选信号
CH[3..0]=(4)H,数码管的译码电平输出为(5B)H,第四个为1,此时数码管的位选信号CH[3..0]=(8)H,数码管的译码电平输出为(06)H。
(a)(b)
图6-30译码显示模块EDC_D
(a)仿真输出波形;(b)元件符号图
6.3.4频率计电路顶层原理图的设计和仿真
1频率计主体电路顶层原理图设计
在成功完成低层单元电路模块设计仿真后,可根据图6-22测频原理框图,可完成图6-31(a)所示的频率计电路顶层原理图的设计文件。
该电路中Timer(定时信号模块)、T_con(控制信号发生器模块)、Cnt4X10(4位十进制计数器模块)、reg_16(寄存显示模块)为前面设计低层单元电路模块。
FS为系统基准输入信号;F_in为待测频率信号;k1、k2为量程选择开关,k1k2=00时选一档,k1k2=01时选二档,k1k2=10时选三档,k1k2=11时选四档;p0p1p2p3为量程状态显示驱动信号和数码管小数点位置指示信号,本设计测试中用4个发光二级管表示量程状态显示;Alarm是进位扩展信号,用于超量程提示功能,在超出目前量程档次时发出报警信号,驱动蜂鸣器报警。
在QuartusII利用原理图输入对频率计电路顶层原理图Frec_top1.bdf编译仿真正确无误后,即可生成如图6-31(b)所示的元件符号图。
(a)(b)
图6-31频率计主体电路电路顶层原理图
(a)原理图;(b)元件符号图
2仿真设计
在QuartusII中选择波形编辑器,创建一个新的波形文件,本设计中要仿真的对象为频率计电路,下面只该出频率计主体电路(不含扫描显示)波形仿真输出结果,如图6-32所示。
F_in为待测频率信号,在仿真时设其周期为50ns;FS为标准频率信号,周期为500ns,图6-32(a)(b)(c)(d)分别给出了K2K1=00、01、10、11时所得的测频输出X4X3X2X1=5000(一挡)、X4X3X2X1=500(二挡)、X4X3X2X1=50(三挡)、X4X3X2X1=5(四挡)。
(a)(b)
(c)(d)
图6-32频率计主体电路仿真波形输出
(a)K2K1=00;(b)K2K1=01;(c)K2K1=10;(d)K2K1=11
6.3.5硬件测试
为了能对所设计的4位数字显示的频率计电路进行硬件测试,应将其输入输出信号锁定在开发系统的目标芯片引脚上,并重新编译,然后对目标芯片进行编程下载,完成频率计电路的最终开发,其硬件测试示意图如图6-33。
不失一般性,本设计选用的EDA开发平台为GW48(详细内容请参照附录)。
图6-33频率计电路硬件测试示意图
选择目标器件为EP1C6Q240C8芯片,电路工作模式为No.3。
4个数码管以十进制形式显示测频输出;待测频率信号F_in锁定在目标芯片EP1C6Q240C8的28脚(clock0),频率可选4Hz、256Hz、1024Hz、20MHz…等;测频控制时钟FS接于目标芯片的178脚(clock2),用跳线选择1Hz输入;将测频输出结果从高位到低位分别锁定在数码管8(PIO46~PIO40)、7(PIO38~PIO32)、6(PIO30~PIO24)、5(PIO22~PIO16)。
用4个发光二级管
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字式 频率计 EDA 设计