基于FPGA的数字频率计设计
Design digital cymometer of using FPGA
摘要:该数字频率计的设计仅利用硬件描述语言来完成对系统功能的描述,在EDA工具的帮助下就可以得到最后的设计结果。所以尽管目标系统是硬件,但整个设计和修改过程如同完成软件设计一样方便和高效。
关键词:数字频率计;可编程逻辑器件;硬件描述语言。
Abstract:This project only utilizes Hardware Description Language to describe the function of system.With the help of EDA tool, we can get the final design.So although the target system is hardware,the whole design and modification is as efficient as software design.
Key words:digital cymometer,FPGA,VHDL
1. 引言
频率计的基本功能是根据基准时钟对被测时钟进行检测,并且被测时钟的频率值在数码管显示出来。这里采用的工作原理是利用基准时钟产生1s的时间宽度,从而在这1s的时间宽度里对被测时钟计数,然后将最后的计数结果送到数码管显示。
传统的数字频率计可以通过普通的硬件电路组合来实现,其开发过程、调试过程十分繁琐,而且由于电子器件之间的互相干扰,影响频率计的精度,也由于其体积较大,已不适应电子设计的发展要求。
采用EDA(Electronic Design Automation)的方法来完成频率计的设计,即通过VHDL硬件描述语言的设计,用FPGA来实现。FPGA即现场可编程逻辑器件是由存放在片内RAM中的程序来设置其工作状态的,因此,工作时需要对片内的RAM进行编程。用户可根据不同的配置模式,采用不同的编程模式。加电时,FPGA芯片将EPROM中数据读入片内编程RAM中,配置完成后,FPGA进入工作状态。掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用。FPGA的编程无须专用的FPGA编程器,只需用通用的EPROM、PROM编程器即可。当需要修改FPGA功能时,只需换一片EPROM即可。这样,同一片FPGA,不同的编程数据,可以产生不同的电路功能。因此,FPGA的使用非常灵活。同时EDA开发工具的通用性、设计语言的标准化以及设计过程几乎与所用器件的硬件结构无关,所以设计成功的各类逻辑功能块软件有很好的兼容性和可移植性,可以在很短的时间里完成十分复杂的系统设计。
2. 设计实现
2.1. 逻辑结构描述
下图1是8位十进制数字频率计的逻辑框图,它由一个测频控制信号发生器、8个有时钟功能的十进制计数器和一个32位锁存器组成。
2.2. 硬件描述语言
测频控制信号发生器:频率测量的基本原理是计算每秒钟内待测信号的脉冲个数。测频控制信号发生器的计数使能信号tsten能产生一个1s脉宽的周期信号,并对频率计的每一计数器的ENA使能端进行同步控制。当计数使能信号tsten为高电平时,允许计数;为低电平时停止计数,并保持其所计的脉冲数。在停止计数期间,首先需要一个锁存信号load的上跳沿将计数器在前1s的计数值锁存进32位锁存器中,并由外部的7段译码器译出和稳定显示。设置锁存器的好处是,显示的数据稳定,不会由于周期性的清零信号而不断闪烁。锁存信号之后,必须有一清零clr_cnt对计数器进行清零,为下一秒的计数操作做准备。测频控制信号发生器的工作时序如图2所示。这个时序图的产生首先建立了一个由D触发器构成的二分频器,在每次时钟clk上沿到来时其值翻转。
图2 测频控制信号发生器工作时序
其中控制信号时钟clk的频率取1Hz,那么信号tsten的脉宽恰好为1s,可以用作计数闸门信号。然后根据测频的时序要求,可得出信号load和clr_cnt的逻辑描述。由图2可见,在计数完成后,即计数使能信号tsten在1s的高电平后,利用其反相值的上跳沿产生一个锁存信号load,0.5s后,clr_cnt产生一个清零信号上跳沿。高质量的测频控制信号发生器的设计十分重要,可利用实时仿真可能产生的毛刺。
其VHDL逻辑描述如下:
Begin
Process(clk)
Begin
If clk’ event and clk = ‘1’ then
Div2clk <= not div2clk;
End if;
End process;
Begin
If clk = ‘0’ and div2clk = ‘0’ then clr_cnt <=’1’;
Else clr_cnt <=’0’;
End if;
End process;
Load <= not div2clk;
Tsten <=div2clk;
Ends behave;
寄存器:若已经有32位BCD码存在于此模块的输入口,在信号load的上升沿后即被锁存到寄存器的内部,并由寄存器的输出端输出,然后由实验板上的7段译码器译成能在数码管上显示输出的相对应的数值。
该模块的VHDL逻辑描述如下:
Begin
Process(clk)
Begin
If clk’ event and clk = ‘1’ then 1 Hz时钟二分频
Div2clk <= not div2clk;
End if;
End process;
Process(clk,div2clk)
Begin
If clk = ‘0’ and div2clk = ‘0’ then clr_cnt <= ‘1’;
产生计数器清零信号
Else clr_cnt <= ‘0’; tsten <=div2clk;
End behave;
计数器:如图1所示,此十进制计数器的特殊之处是有一时钟使能输入端ENA,用于锁定计数值。当高电平时计数允许,低电平时禁止计数。
计数器的VHDL逻辑描述为:
Begin
Process(clk,clr,ena)
Begin
If clr = ‘1’ then cqi <= 0;
Else if clk’ event and clk = ‘1’ then
If ena =’1’ then
If cqi < 9 then cqi <= cqi +1;
Else cqi <= 0; End ifl;
End if;
End if;
End process;
Process(cqi)
Begin
If cqi = 9 then carry_out <= ‘1’;
Else carry_out <= ‘0’;
End if;
End process;
Cq <= cqi;
End behave;
用测频法设计的频率计是在GW48-CK实验箱上进行的模拟仿真,当输入频率为1Hz~750kHz的信号时,频率计所测的频率完全准确,当频率高于750kHz时,出现误差。因此该频率计测频范围为1Hz~750kHz,在此测频范围内的测频精度较高。
3. 结束语
用FPGA设计数字频率计的方法大大减轻了电路图设计和电路板设计的工作量和难度,减少了系统芯片的数量,缩小了系统的体积,提高了系统的可靠性。在设计过程中,可根据需要,随时改变器件的内部逻辑功能和管脚的信号方式,具有很高的灵活性,避免了传统设计方法中的再设计风险。另外,传统设计方法的设计成果难以得到再利用,基于现代EDA技术的EPGA的设计成果经过修改、组合就能投入再利用,节省了开发成本并提高工作效率,是现代电子设计的上乘之选。
参考文献:
[1] 冼进.Verilog HDL数字控制系统实例[M].中国水力水电出版社,2007年4月.
[2] 袁文波.FPGA应用开发从实践到提高[M].中国电力出版社,2007年6月.
[3] 刘韬、楼兴华.FPGA数字电子系统设计与开发实例导航[M].人民邮电出版社,2005年6月.
[4] 程云长.可编程逻辑器件与VHDL语言[M].科学出版社,2005年10月.
[5] 孟祥旭.FPGA应用开发从实践到提高[M].中国电力出版社,2007年5月.
[6] http://www.100lw.com/article/2007/1005/article_15218.html
[7] http://www.eefocus.com/html/08-05/4322404030513AwLd_1.shtml