珠海欧比特控制工程股份有限公司,珠海 519080
 
摘要:在设计数字电路过程中,通常所需的频率要根据给定的频率进行分频来得到。时钟分频又分为整数分频和小数分频,有时还有会有分数分频。当基准时钟与所需的频率成整数倍关系时为整数分频,可以采用标准的计数器实现,也可以采用可编程逻辑器件实现。当基准时钟与所需的频率不成整数倍关系时为小数分频,可以采用小数分频器实现分频。本文通过 XC2V1000-4FG456 型号的 FPGA 对 8192kHz 的基准时钟进行分频,分别得到 1024kHz、512kHz、256kHz 和 1kHz 的时钟频率。设计中利用了 VHDL 硬件描述语言,通过 ISE9.1 逻辑设计工具和 Modelsim6.5 仿真工具完成了数字分频器的设计。
 
关键词:分频器;FPGA;VHDL;Modelsim6.5
 
中图分类号:TP332 文献标识码:A        
 
文章编号:
Design of Digital Frequency Divider Based on the FPGA
 
Zhaoli,Zhao Zhiguo,Tang Fangfu
 
Zhuhai Orbita Control Engineering Co.,Ltd., Zhuhai 519080, China
 
Abstract: In the process of designing a digital circuit, the frequency is usually required to be divided according to the given frequency. Clock frequency divided into integer and fractional frequency division, and sometimes there will be fractional frequency. When the reference clock and the integer times frequency relations for integer frequency division, can use the standard counter, can also be realized by using programmable logic devices.When the reference clock and the frequency of the required no integer times relationship for decimal frequency division, and the decimal frequency divider can be used to realize frequency division. In this paper, the 8192kHz reference clock is divided by the XC2V1000-4FG456 model FPGA to obtain the clock frequencies of 1024kHz, 512kHz, 256kHz and 1kHz respectively. The design uses the VHDL hardware description language, through the ISE9.1 logic design tools and Modelsim6.5 simulation tools to complete the design of digital frequency divider.
 
Key words:Frequency Divider; FPGA; VHDL; Modelsim6.5
 
1. 概述
随着集成电路技术的快速发展,半导体存储、微处理器等相关技术的发展得到了飞速发展。FPGA 以其可靠性强、运行快、并行性等特点在电子设计中具有广泛的意义。作为一种可编程逻辑器件,FPGA 在短短二十年中从电子设计的外围器件逐渐演变为数字系统的核心。伴随着半导体工艺技术的进步,FPGA 器件的设计技术取得了飞跃发展及突破。
 
分频器通常用来对某个给定的时钟频率进行分频,以得到所需的时钟频率。在设计数字电路中会经常用到多种不同频率的时钟脉冲,一般采用由一个固定的晶振时钟频率来产生所需要的不同频率的时钟脉冲的方法进行时钟分频。
 
在 FPGA 的设计中分频器是使用频率较高的基本设计,在很多的设计中也会经常用到芯片集成的锁相环资源,如用 Xilinx 的 DLL 以及 Altera 的 PLL 来进行时钟的分频、倍频与相移。在一些对时钟精度不高的场合,会经常利用硬件描述语言来对时钟源进行时钟分频。
 
分频器是一种基本电路,一般包括数字分频器、模拟分频器和射频分频器。根据不同设计的需要,有时还会要求等占空比。数字分频器采用的是计数器的原理,权值为分频系数。模拟分频器就是一个频率分配器,用带阻带通实现(比如音箱上高中低喇叭的分配器)。射频分频器也是滤波器原理,用带内外衰减,阻抗匹配实现。
 
随着 FPGA 技术的发展,基于 FPGA 技术的硬件设计数字分频器已成为数字系统设计的研究重点。数字分频器通常分为整数分频器和小数分频器。在有些需求下还要分数分频器。
 
本设计是基于 FPGA 的数字分频器,通过 VHDL 硬件设计语言,在 Modelsim6.5 上对设计的分频器进行仿真验证。
 
2. 数字分频器的设计
数字分频器的设计与模拟分频器的设计不同,数字分频器可以使用触发器设计电路对时钟脉冲进行时钟分频。分频器的一个重要指标就是占空比,即在一个周期中高电平脉冲在整个周期中所占的比例。占空比一般会有 1:1,1: N 等不同比例的要求,由于占空比的比例要求不一样,所以采用的时钟分频原理也各不同。在 FPGA 的数字分频器设计中,主要分为整数分频器、小数分频器和分数分频器。现在分别介绍整数分频器的设计、小数分频器的设计和分数分频器的设计。
 
2.1 整数分频器的设计
整数分频器是指基准时钟与所需的时钟频率成整数倍关系。整数分频器的分频种类一般包括奇数分频和偶数分频。虽然时钟分频原理会根据时钟分频的要求不同而不同,但均可采用标准计数器原理来实现。
 
偶数分频器的设计原理较为简单,主要是利用计数器来实现。假设要进行 n(n 为偶数)分频,设定一个在分频时钟上升沿触发的计数器循环计数来实现。当计数器值为 0-((n/2)-1)时,输出时钟信号进行翻转,同时给计数器一个复位信号,使下一个时钟上升沿到来时,计数器重新开始计数,由此不断循环。
 
奇数分频器的设计原理与偶数分频的设计方法很相似,都是通过计数器来实现的。如果要进行 n(n 为奇数)分频,直接设计 n 进制的计数器即可。还有一种方法就是选择两个计数器 cnt1 和 cnt2,分别在时钟上升沿和下降沿触发计数。cnt1 和 cnt2 均当计数器值为 0-((n/2)-1)时,输出时钟信号进行翻转,同时给计数器一个时钟复位信号,使下一个时钟上升沿到来时,计数器重新开始计数,如此进行循环下去。由此可知,计数器 cnt1 和 cnt2 的实现方法一样,只是翻转边沿不一样,最终输出的时钟为 clkout = clk1 + clk2。
 
2.2 小数分频器的设计
小数分频的基本原理是采用脉冲吞吐计数器和锁相环技术先设计两个不同分频比的整数分频器,然后通过控制单位时间内两种分频比出现的不同次数来获得所需的小数分频值,分频系数为 N-0.5(N 为整数)时,可控制扣除脉冲的时间,以使输出成为一个稳定的脉冲频率,而不是一次 N 分频,一次 N-1 分频。
 
小数分频器有很多种设计方案,但其基本原理是一样的,都是在若干个分频周期中采取某种方法使几个周期多计一个数或少计一个数,从而在整个计数周期的总体平均意义上获得一个小数分频比。还有一种分频方法就是,利用状态机和计数器。假设时钟信号的频率为 1khz,需要产生 750khz 的分频信号,其分频系数为 6/8。基本设计思想是,在 8 个时钟信号中保留 6 个时钟信号。这种方法是需要预先设定状态机的个数,主要用于已经知道需要使用哪一个小数分频系数的情况下。如果分频系数发生变化,则需要在程序内部进行修改。
 
双模前置小数分频的设计方法是,假设要进行 m,n 时钟分频(其中 m、n 都是整数,且 n<10),因为只有一位小数,所以总共要进行 10 次分频。总的规律是:进行 n 次 m+1 分频,10-n 次 m 分频。例如,设计一个分频系数为 3.6 的分频器,将小数部分的 6 按倍累加,假设累加的值为 a,如果 a<10,则进行 3 分频,如果 a<10 下一次则加上 6。此后,如果 a>=10,则进行 4 分频,4 分频过后再将累加值减去 4 后与 10 比较以决定下一次分频是 4 分频还是 3 分频,这样分频器设计成 6 次 4 分频,4 次 3 分频,总的分频值为(6×4+4×3)/(6+4) = 3.6。
 
2.3 分数分频器的设计
分数分频器的数据输入部分与小数分频基本相同,差别仅在于数码管显示部分显示三位分频系数。由于分数在一定情况下可以转化为小数进行计算,所以分数分频的设计思想与小数分频的很相似。假设进行分频,总分频数由分母 m 决定,规律是进行 n 次 j+1 分频和 m-n 次 j 分频。两种分频交替进行的计算方法和小数分频的很类似。累加分结果是大于等于分母还是小于分母决定是进行 j 分频还是 j+1 分频。
 
3. 数字分频器的 FPGA 设计及仿真
利用 FPGA 对 8192kHz 的基准时钟进行时钟分频,分别得到 1024kHz、512kHz、256kHz 和 1kHz 的时钟频率,需要分别进行 8 分频、16 分频、32 分频和 8192 分频。在利用 FPGA 进行设计整数分频器时,通过 VHDL 硬件描述语言利用计数器方式来实现。
 
3.11024kHz 时钟分频
根据所需的时钟频率为 1024kHz 的时钟,而晶振时钟的频率为 8192kHz,晶振时钟与所需的时钟频率恰巧是 8 倍的整数倍关系,因此需要对 8192kHz 的晶振时钟进行 8 分频来获得所需要的时钟。根据整数倍分频器的设计方法原理,通过 ISE9.1 逻辑设计工具,利用 VHDL 硬件描述语言来进行 8 分频的分频器设计。然而 8 又是偶数,所以需要设计的是偶数分频器。对设计的内容通过 Modelsim6.5 仿真软件进行仿真验证,结果如图 3-1 所示。
 
图 3-1 1024kHz 时钟分频
 
由图 3-1 得知,当 8192kHz 的晶振时钟输入 8 个时钟,系统输出 1 个时钟,即一个 1024kHz 频率的时钟。程序设计中采用计数器来实现,当计数器值为 0-((n/2)-1)=-3 时,输出时钟信号进行翻转,同时给计数器一个复位信号,使下一个时钟上升沿到来时,计数器重新开始计数,不断循环下去。
 
3.2512kHz 时钟分频
根据所需的时钟频率为 512kHz 的时钟,而晶振时钟的频率为 8192kHz,晶振时钟与所需的时钟频率恰巧是 16 倍的整数倍关系,因此需要对 8192kHz 的晶振时钟进行 16 分频来获得所需要的时钟。根据整数倍分频器的设计方法原理,通过 ISE9.1 逻辑设计工具,利用 VHDL 硬件描述语言来进行 16 分频的分频器设计。然而 16 又是偶数,所以需要设计的是偶数分频器。对设计的内容通过 Modelsim6.5 仿真软件进行仿真验证,结果如图 3-2 所示。
 
图 3-2 512kHz 时钟分频
 
由图 3-2 得知,当 8192kHz 的晶振时钟输入 16 个时钟,系统输出 1 个时钟,即一个 512kHz 频率的时钟。程序设计中采用计数器来实现,当计数器值为 0-((n/2)-1)=-7 时,输出时钟信号进行翻转,同时给计数器一个复位信号,使下一个时钟上升沿到来时,计数器重新开始计数,不断循环下去。
 
3.3256kHz 时钟分频
根据所需的时钟频率为 256kHz 的时钟,而晶振时钟的频率为 8192kHz,晶振时钟与所需的时钟频率恰巧是 32 倍的整数倍关系,因此需要对 8192kHz 的晶振时钟进行 32 分频来获得所需要的时钟。根据整数倍分频器的设计方法原理,通过 ISE9.1 逻辑设计工具,利用 VHDL 硬件描述语言来进行 32 分频的分频器设计。然而 32 又是偶数,所以需要设计的是偶数分频器。对设计的内容通过 Modelsim6.5 仿真软件进行仿真验证,结果如图 3-3 所示。
 
图 3-3 256kHz 时钟分频
 
由图 3-3 得知,当 8192kHz 的晶振时钟输入 32 个时钟,系统输出 1 个时钟,即一个 256kHz 频率的时钟。程序设计中采用计数器来实现,当计数器值为 0-((n/2)-1)=-15 时,输出时钟信号进行翻转,同时给计数器一个复位信号,使下一个时钟上升沿到来时,计数器重新开始计数,不断循环下去。
 
3.41kHz 时钟分频
根据所需的时钟频率为 1kHz 的时钟,而晶振时钟的频率为 8192kHz,晶振时钟与所需的时钟频率恰巧是 8192 倍的整数倍关系,因此需要对 8192kHz 的晶振时钟进行 8192 分频来获得所需要的时钟。根据整数倍分频器的设计方法原理,通过 ISE9.1 逻辑设计工具,利用 VHDL 硬件描述语言来进行 8192 分频的分频器设计。然而 8192 又是偶数,所以需要设计的是偶数分频器。对设计的内容通过 Modelsim6.5 仿真软件进行仿真验证,结果如图 3-4 所示。
 
图 3-4 1kHz 时钟分频
 
由图 3-4 得知,当 8192kHz 的晶振时钟输入 8 个时钟,系统输出 1 个时钟,即一个 1kHz 频率的时钟。程序设计中采用计数器来实现,当计数器值为 0-((n/2)-1)=-4095 时,输出时钟信号进行翻转,同时给计数器一个复位信号,使下一个时钟上升沿到来时,计数器重新开始计数,不断循环下去。
 
4. 结束语
本文给出了基于 FPGA 的数字分频器设计方法。采用计数器设计方法实现了对 8192kHz 的基准时钟进行分频,分别得到 1024kHz、512kHz、256kHz 和 1kHz 的时钟频率。其他的偶数倍分频也可采用类似的方法分频的到需要的频率时钟。通过在 Modelsim6.5 仿真工具验证了设计的正确性。
 
参考文献
[1]夏宇闻 .Verilog 数字系统设计教程[M]. 北京航空航天大学出版社,2008
 
[2](美)Parag K.Lala 著,乔庐峰等译 . 现代数字设计与 VHDL  [M]. 电子工业出版社,2010
 
[3]潘松,黄继业,潘明 .EDA 技术实用教程[M]. 科学出版社,2010
 
[4]张奇惠,武超,王二萍,蒋俊华,张伟风 . 基于 VerilogHDL 的分频器的优化设计[J]. 河南大学学报(自然科学出版).2007,37(4):343
 
[5]王世元,谢开明,石亚伟,陈孟钢,龙正吉 . 一种新的可控分频器的 FPGA 实现[J]. 西南大学学报(自然科学版)2007,29(1):89-93
 
[6]刘亚海,林争辉 . 基于 FPGA 的小数分频器的实现[J]. 现代电子技术,2008,28(3):113-117
 
[7]蔡晓燕,FPGA 数字逻辑设计[M]. 清华大学出版社,2013
 
[8]徐志军,徐光辉 .CPLD/FPGA 的开发与应用[M]. 电子工业出版社,2002
 
[9]王诚,薛小刚,钟信潮 .FPGA/CPLD 设计工具[M]. 人民邮电出版社,2003
 
[10]李秋生 . 一种改进的小数分频器设计方法[J]. 现代电子技术 .2009,08:43-46
 
[11]徐德成 . 任意数分频设计方法[J]. 科技广场 .2007,(11):219-220
 
[12]古良玲,杨永明,郭巧惠 . 基于 FPGA 的半整数及整数分频器的参数化设计[J]. 电子器件,2005,28(2): 404-406