唐海斌 郭海侠 付凯 王朝
【摘要】频率信号,因其较强的抗干扰能力以及其易于传输的特性,使得其在实际工程中应用很广泛[1]。因此,频率信号已经成为当今电子领域里和工程项目中最主要的测量参数之一。频率的测量方法有很多种,采用电子计数器对频率进行测量是测频的最常用也是最重要的方式之一[2]。电子计数器有很多优点,如测量精度高、测量迅速、方便使用以及易于实现频率测量过程中的自动化等。本文将介绍用频率计采用多周期同步测频法测频以及其Verilog HDL的实现。
【关键词】测频方法;FPGA;Verilog HDL;仿真
引言
频率的测量是电子技术领域中最基本的参数测量之一。直接测频法为常用的频率测量方法之一,其测量精度很难达到要求,存在较大局限性,因此其在实际应用中使用的较少。而多周期同步测频法具有测量精度高的优点,并且结合现场可编程门阵列(FPGA,FieldProgrammableGate Array)具有集成度高、可靠性高以及高速的特点,使得频率的测量范围能够达到0.IHz~100MHz,且测量的误差较小[3]。频率测量分两种情况。一种是高频信号的测量,需要采用计数测频法,测量过程中需要对初始信号分频,并且要依据频率信号的大致范围来选择计数周期,计数周期随着信号频率的高低而变化,信号的频率越高对应的计数周期越短[4]。这种做法的目的是为了避免出现测量错误,而这种测量错误出现的根源在于计数值过大且超出计数器允许的最大计数值。而计时测周法则适用于对低频信号的测量,即便原始信号为低频信号,也要对其进行分频,然后选择适当的高频时钟,高频时钟要由所测信号的大概频率范围来选择。
一、系统软件设计
相对于硬件电路,软件设计能适合的信号频率范围更广。当设计的信号的频率范围变得更高时,需要对硬件电路进行改善,但是软件仍然可以继续使用。依据上述原因,软件设计时选择的信号的频率范围为:1Hz~20MHz。
如图1所示,软件系统分为分频、计数测频、控制以及计数测周4个模块,其中计数测频模块和计数测周模块都属于计数模块。分频模块的作用是把输入信号进行分频,且分频模块的分频系数由控制模块发出的控制信号来确定。由控制模块发出的信号来确定计数测频模块的计数周期,并且计算在此计数周期里信号经过分频模块分频之后的上升沿的数量值。同样,计数测周模块的高频时钟周期也由控制模块输出的信号来确定,类似地,此时需要计算高频时钟在输入信号的一个周期里的上升沿的数量值。控制模块综合了接收的来自计数模块输出的计数值以及控制模块自身的当前状态,然后分别发出信号来控制分频系数,控制计数周期以及控制高频时钟周期,并对频率加以计算,然后输出计算后的频率。
图1 频率测量软件模块示意图
模块的波形仿真使用了Xilinx公司的ise13.1软件,并结合硬件描述语言(HDL,hardware description language)来实现仿真结果。硬件描述语言是一种用形式化方法来描述数字电路和系统的语言,其成功地应用于设计的各个阶段:建模、仿真、验证和综合等[5]。本文选用Verilog HDL语言。
(一)分频模块设计
设计分频模块时要注意:分频系数由控制模块发出的控制信号决定,控制信号有变化,则分频系数也要随之改变。
分频模块包括signal_in、state以及signal_out三个信号,其中signal_in为初始输入信号,state为控制信号,该控制信号连接在控制模块上,状态一旦改变,分频系数也要随之改变。用Verilog HDL进行编程时,计数器变量用count表示,count的初值设定为分频系数值的1/2,即如果对信号1/32分频,那么count的值则设为16,然后当每个signal_in的上升沿到来时,应当先对state进行判断,若state与前一个上升沿不相同时,直接将count重新取初值。若state恰好等同于前一个上升沿,则count减1;当count=1且signal_in的后一个上升沿到来时,输出信号signal_out翻转,与此同时,将count重新取初值。
图2 分频模块仿真波形图
该模块的波形仿真图如图2所示,可以清晰看出:当state=0时,将初始信号进行1/2分频,当state=1时,对初始信号进行了1/16分频,当state=2时,对初始信号进行了1/4分频,当state=3时,同样对初始信号进行了1/2分频。
(二)计数模块设计
计数模块由计数测频和计数测周两个模块组成,两个子模块分别用计数测频法和计数测周法实现,两个模块用Verilog HDL编程实现的方法类似,这里只对计数测频法进行讨论。
计数测频法分为两个部分:一是将输入的原始时钟信号分频来获得1/32s,1/16s等信号;二是计算待测信号在计数周期信号的半个周期(即高电平或者低电平持续时间)内的上升沿的个数。由于FPGA采用50MHz的晶振,因此要的到频率为16Hz的模块输入信号,需先将晶振频率进行1/3125000,分频后得到的信号频率为16Hz,此信号即为这个模块的时钟输入信号。将该信号进行1/4、1/8、1/16、1/32分频,得到周期为1/4秒、1/2秒、1秒、2秒的信号。图3为计数模块的波形仿真图,其中clk为输入时钟,频率为16Hz,signal_in为待测信号,信号state的作用是控制计数周期,该信号由控制模块发出,period为计数周期。State=0时,period的周期为1/8s,每个周期内上升沿和下降沿均持续1/16s;当state=1或2或3时,period的周期也会随之改变。data_out为输出的计数器的计数值,由图3可见,data_out若要输出正确的计数值,需要在state与period共同作用下才能实现。当state分别为0、1、2、3时,data_out输出值分别为4、8、16、1。
图3 计数模块仿真波形图
(三)控制模块设计
控制模块收到来自计数模块的计数值,并且结合自身的当前状态,发出信号来控制分频系数、计数周期以及高频时钟周期。
二、硬件系统设计
FPGA是上个世纪90年代发展起来的大规模可编程逻辑器件,随着电子设计自动化(EDA,Electronic Design Automation)技术以及微电子技术的发展进步,FPGA由于其并行的工作方式且具有高可靠性、高集成度的优点,因此在超高速、实时测控方面的应用前景非常广阔。在快速测量以及较高精度的测频的要求下,单片机和数字信号处理(DSP,Digital Signal Processor)无法满足高速及高精度的测频要求。采用FPGA为实现高速、高精度的测频提供了保证[6]。
(一)FPGA开发板
采用Xilinx公司的XC6SLX16-2CSG324 Spartan-6的开发板siga-s16,其工作主频为50MHz,片内集成8MB SPI Flash、14pin双排2.0mm间距JTAG接口、板载128MB DDR2 SDRAM、10/100M以太网RJ-45接口,采用芯片RTL8201、USB2.0高速通信,CY68013A、音频接口,支持麦克风输入,音频输入及立体音音频输出、USB转UART通信、DB9式RS232接口、PS/2键盘、鼠标接口、一个标准SD卡座等,此芯片完全满足设计的需求。
(二)系统时钟
图4 Siga-S16时钟原理图
Siga-S16 开发板提供了一个 50MHz 的有源晶体振荡器(Location:X1),振荡器的输出连接到FPGA的全局时钟(GCLK Pin V10),这个 GCLK可以用来驱动FPGA内的用户逻辑电路,可以通过配置FPGA内部的PLLs和DCMs来实现更高的时钟。
(三)USB串口通信
Siga-S16包含了Silicon Labs CP2102GM的USB-UAR芯片(U8),可以用一根USB线将它连接到上PC上(A型USB接口接到PC上,B型接到开发板的J8上)。可以将Xilinx Uart IP应用到Siga-S16开发板FPGA内,它可以支持USB-UART转换芯片的4个信号,Rx,Tx,CTS(清发送数据),RTS(请求发送数据)。Silicon Labs免费提供了Virtual COM Port(VCP),用户装完驱动后,当用USB线连上开发板J8和PC时,PC就把当成一个虚拟串口使用。
图5 Siga-S16串口连接原理图
三、结论
本文结合了应用成熟的硬件和稳定性较高的软件,对多周期同步测频法做了系统的研究,结合基于FPGA的数字频率计,标准时钟由50MHz的晶振产生,有效提高了测量精度,在设计实现的过程中使用了Verilog HDL语言,简化了电路,提高了系统的有效性和可靠性。
参考文献
[1]高锐,张振国.基于FPGA的多周期同步频率计设计[D].2013,8.
[2]郭祥斌,陈沅涛.基于Verilog HDL数字频率计设计与实现[R].2010.12.
[3]杨华,乔钢.基于FPGA的测频技术研究[D].哈尔滨工程大学2010,3.
[4]黄国达.基于FPGA的任意整数分频器的设计[J].仰恩大学计算机与信息学院福建泉州362014.2013,29(7).
[5]夏宇闻.Verilog数字系统设计教程(第3版)[M].北京:北京航空航天大学出版社,2013,7:10-11.
[6]范亚斌.基于FPGA的频率计的设计[D].河北科技大学2009.
作者简介:唐海斌(1989—),男,长春理工大学电子信息工程学院硕士研究生,主要研究方向:信号检测与信号处理理论与技术。