原创 任意数分频(包括奇偶数和小数)的各种设计方法

2007-12-29 00:52 5854 8 8 分类: FPGA/CPLD
众所周知,分频器是FPGA设计中使用频率非常高的基本设计之一,尽管在目前大部分设计中,广泛使用芯片厂家集成的锁相环资源,如altera 的PLL,Xilinx的DLL.来进行时钟的分频,倍频以及相移。但是对于时钟要求不高的基本设计,通过语言进行时钟的分频相移仍然非常流行,首先这种方法可以节省芯片内部的锁相环资源,再者,消耗不多的逻辑单元就可以达到对时钟操作的目的。另一方面,通过语言设计进行时钟分频,可以看出设计者对设计语言的理解程度。因此很多招聘单位在招聘时往往要求应聘者写一个分频器(比如奇数分频)以考核应聘人员的设计水平和理解程度。下面讲讲对各种分频系数进行分频的方法:

第一,偶数倍分频:偶数倍分频应该是大家都比较熟悉的分频,通过计数器计数是完全可以实现的。如进行N倍偶数分频,那么可以通过由待分频的时钟触发计数器计数,当计数器从0计数到N/2-1时,输出时钟进行翻转,并给计数器一个复位信号,使得下一个时钟从零开始计数。以此循环下去。这种方法可以实现任意的偶数分频。


第二:奇数倍分频:奇数倍分频常常在论坛上有人问起,实际上,奇数倍分频有两种实现方法:首先,完全可以通过计数器来实现,如进行三分频,通过待分频时钟上升沿触发计数器进行模三计数,当计数器计数到邻近值进行两次翻转,比如可以在计数器计数到1时,输出时钟进行翻转,计数到2时再次进行翻转。即是在计数值在邻近的1和2进行了两次翻转。这样实现的三分频占空比为1/3或者2/3。如果要实现占空比为50%的三分频时钟,可以通过待分频时钟下降沿触发计数,和上升沿同样的方法计数进行三分频,然后下降沿产生的三分频时钟和上升沿产生的时钟进行相或运算,即可得到占空比为50%的三分频时钟。这种方法可以实现任意的奇数分频。归类为一般的方法为:对于实现占空比为50%的N倍奇数分频,首先进行上升沿触发进行模N计数,计数选定到某一个值进行输出时钟翻转,然后经过(N-1)/2再次进行翻转得到一个占空比非50%奇数n分频时钟。再者同时进行下降沿触发的模N计数,到和上升沿触发输出时钟翻转选定值相同值时,进行输出时钟时钟翻转,同样经过(N-1)/2时,输出时钟再次翻转生成占空比非50%的奇数n分频时钟。两个占空比非50%的n分频时钟相或运算,得到占空比为50%的奇数n分频时钟。另外一种方法:对进行奇数倍n分频时钟,首先进行n/2分频(带小数,即等于(n-1)/2+0.5),然后再进行二分频得到。得到占空比为50%的奇数倍分频。下面讲讲进行小数分频的设计方法


第三 ,小数分频:首先讲讲如何进行n+0.5分频,这种分频需要对输入时钟进行操作。基本的设计思想:对于进行n+0.5分频,首先进行模n的计数,在计数到n-1时,输出时钟赋为‘1’,回到计数0时,又赋为0,因此,可以知道,当计数值为n-1时,输出时钟才为1,因此,只要保持计数值n-1为半个输入时钟周期,即实现了n+0.5分频时钟,因此保持n-1为半个时钟周期即是一个难点。从中可以发现,因为计数器是通过时钟上升沿计数,因此可以在计数为n-1时对计数触发时钟进行翻转,那么时钟的下降沿变成了上升沿。即在计数值为n-1期间的时钟下降沿变成了上升沿,则计数值n-1只保持了半个时钟周期,由于时钟翻转下降沿变成上升沿,因此计数值变为0。因此,每产生一个n+0.5分频时钟的周期,触发时钟都是要翻转一次。设计思路如下:

       由上述原理图可知: 触发时钟的翻转通过n+0.5分频信号的二分频,然后与输入时钟相或运算即可。


第四:任意整数带小数的分频。这种分频一般来说,可以通过不同分频进行组合实现。比如实现6+1/3分频,可以通过两个七分频脉冲加上一个五分频脉冲实现一个该分频设计,即(2*7+5)/(2+1)实现分频,一般而言,这种分频由于分频输出的时钟脉冲抖动很大,在设计中使用已经非常少。但是也是可以实现的。


====================


基于CPLD/FPGA的半整数分频器的设计


 




摘要:简要介绍了CPLD/FPGA器件的特点和应用范围,并以分频比为2.5的半整数分频器的设计为例,介绍了在MAX+plus II开发软件下,利用VHDL硬件描述语言以及原理图的输入方式来设计数字逻辑电路的过程和方法。
关键词:VHDL CPLD/FPGA 数字逻辑电路设计 半整数分频器


1 引言


CPLD(Complex programmable Logic Device,复杂可编程逻辑器件)和FPGA(Field programmable Gates Array,现场可编程门阵列)都是可编程逻辑器件,它们是在PAL、GAL等逻辑器件基础上发展起来的。同以往的PAL、GAL相比,FPGA/CPLD的规模比较大,适合于时序、组合等逻辑电路的应用。它可以替代几十甚至上百块通用IC芯片。这种芯片具有可编程和实现方案容易改动等特点。由于芯片内部硬件连接关系的描述可以存放在磁盘、ROM、PROM、或EPROM中,因而在可编程门阵列芯片及外围电路保持不动的情况下,换一块EPROM芯片,就能实现一种新的功能。它具有设计开发周期短、设计制造成本低、开发工具先进、标准产品无需测试、质量稳定以及实时在检验等优点,因此,可广泛应用于产品的原理设计和产品生产之中。几乎所有应用门阵列、PLD和中小规模通用数字集成电路的场合均可应用FPGA和CPLD器件。


在现代电子系统中,数字系统所占的比例越来越大。系统发展的越势是数字化和集成化,而CPLD/FPGA作为可编程ASIC(专用集成电路)器件,它将在数字逻辑系统中发挥越来越重要的作用。


在数字逻辑电路设计中,分频器是一种基本电路。通常用来对某个给定频率进行分频,以得到所需的频率。整数分频器的实现非常简单,可采用标准的计数器,也可以采用可编程逻辑器件设计实现。但在某些场合下,时钟源与所需的频率不成整数倍关系,此时可采用小数分频器进行分频。比如:分频系数为2.5、3.5、7.5等半整数分频器。笔者在模拟设计频率计脉冲信号时,就用了半整数分频器这样的电路。由于时钟源信号为50MHz,而电路中需要产生一个20MHz的时钟信号,其分频比为2.5,因此整数分频将不能胜任。为了解决这一问题,笔者利用VIDL硬件描述语言和原理图输入方式,通过MAX+plus II开发软件和ALTERA公司的FLEX系列EPF10K10LC84-4型FPGA方便地完成了半整数分频器电路的设计。


1.gif


2 小数分频的基本原理


小数分频的基本原理是采用脉冲吞吐计数器和锁相环技术先设计两个不同分频比的整数分频器,然后通过控制单位时间内两种分频比出现的不同次数来获得所需要的小数分频值。如设计一个分频系数为10.1的分频器时,可以将分频器设计成9次10分频,1次11分频,这样总的分频值为:


F=(9×10+1×11)/(9+1)=10.1


从这种实现方法的特点可以看出,由于分频器的分频值不断改变,因此分频后得到的信号抖动较大。当分频系数为N-0.5(N为整数)时,可控制扣除脉冲的时间,以使输出成为一个稳定的脉冲频率,而不是一次N分频,一次N-1分频。


2.gif


图2 模3计数器仿真波形


3 电路组成


分频系数为N-0.5的分频器电路可由一个异或门、一个模N计数器和一个二分频器组成。在实现时,模N计数器可设计成带预置的计数器,这样可以实现任意分频系数为N-0.5的分频器。图1给出了通用半整数分频器的电路组成。


采用VHDL硬件描述语言,可实现任意模N的计数器(其工作频率可以达到160MHz以上),并可产生模N逻辑电路。之后,用原理图输入方式将模N逻辑电路、异或门和D触发器连接起来,便可实现半整数(N-0.5)分频器以及(2N-1)的分频。


4 半整数分频器设计


现通过设计一个分频系数为2.5的分频器给出用FPGA设计半整数分频器的一般方法。该2.5分频器由模3计数器、异或门和D触发器组成。


3.gif


图3 2.5分频器电路原理图


4.1 模3计数器


该计数器可产生一个分频系数为3的分频器,并产生一个默认的逻辑符号COUNTER3。其输入端口为RESET、EN和CLK;输出端口为QA和QB。下面给出模3计数器VHDL描述代码:



library ieee;


use ieee.std-logic-1164.all;


use ieee.std-logic-unsigned.all;


entity counter3 is


port(clk,reset,en:in std-logic;


qa,qb:out std-logic);


end counter3;


architecture behavior of counter3 is


signal count:std-logic-vector(1 downto 0);


begin


process(reset,clk)


begin


if reset='1'then


count(1 downto 0)<="00";


else


if(clk 'event and clk='1')then


if(en='1')then


if(count="10")then


count<="00";


else


count<=count+1;


end if;


end if;


end if;


end if;


end process;


qa<=count(0);


qb<=count(1);


end behavior;


任意模数的计数器与模3计数器的描述结构完全相同,所不同的仅仅是计数器的状态数。上面的程序经编译、时序模拟后,在MAX+PLUS II可得到如图2所示的仿真波形。


图4 2.5分频器仿真波形图


4.2 完整的电路及波形仿真


将COUNTER3、异或门和D触发器通过图3所示的电路逻辑连接关系,并用原理图输入方式调入图形编辑器,然后经逻辑综合即可得到如图4所示的仿真波形。由图中outclk与inclk的波形可以看出,outclk会在inclk每隔2.5个周期处产生一个上升沿,从而实现分频系数为2.5的分频器。设inclk为50MHz,则outclk为20MHz。因此可见,该电路不仅可得到分频系数为2.5的分频器(outclk),而且还可得到分频系数为5的分频器(Q1)。


5 结束语


选用ALTERA公司FLEX系列EPF10K10LC84-4型FPGA器件实现半整数分频后,经逻辑综合后的适配分析结果如表1所列。本例中的计数器为2位宽的位矢量,即分频系数为4以内的半整数值。若分频系数大于4,则需增大count的位宽。


表1 半整数分频器适配分析结果



选用器件I/O延迟时间使用引脚数工作频率
EPF10K10LC84417.7ns5/84(5.95%)68.02MHz

 



 



 
回复:任意数分频(包括奇偶数和小数)的各种设计方法

[ 2006-3-21 17:10:00 | By: qfmrc ]

 

qfmrc

 


       用 7490 连接成三分频的这种接法是有问题的, 尽管有些网站和文章介绍这种电路. 7490 是异步十进计数器, 有四个触发器, 分二, 五两级. 这种接法用了其中两个触发器 Q1 和 Q2, 设计者认为当 Q1 Q2 输出为 11 时, 通过 2, 3 引脚的与非关系去重置触发器到 00, 这里出现了一个典型的 "冒险-竞争" 问题. 因为 "重置" 在芯片内部是直接操作, 不但不必等时钟边沿到来而且到输出 Q 端的路径最短. 所以 Q1 Q2 输出 11 的状态立即被自身否定而无法保持. 因为 7490 是最早生产的中规模集成电路之一, TI 公司在 1970 年代出版的应用手册中特别指出了这个问题, 并建议用一个 RS 触发器保持这个重置信号, 直到时钟来到. 我在网站上也见过 tzl 提供的接法和许多带类似问题的电路, 你搞不定是对的, 如果你认为搞定了也不会稳定工作.
       介绍一个可能是最简单的同步三分频电路, 用一片 74HC73 一类的双 JK 触发器. 芯片的两个时钟端 1CPbar 和 2CPbar (pin1,5) 连在一起并接到你要分频的信号上. 两个重置端 1Rbar 和 2Rbar (pin2,6) 连在一起并接一上电复另电路, 可以是一个 0.1微法电容接地加上一个 10千欧电阻接电源. 第一个触发器的 J 和 K (pin3,14) 连在一起并接到第二个触发器的反相输出 2Qbar (pin8), 第二个触发器的 J 端 (pin7) 连接第一个触发器的输出 1Q (pin12), 而其 K 端 (pin10) 直接连到电源上. 从两个 Q 端输出的都是三分频信号, 只是宽度和相位不同. 同步电路的优点是状态 (J,K) 是时钟翻转边沿之前准备好的, 时钟来到后各 Q 端一起翻转. 而触发器的建立时间 (setup time) 和保持时间 (hold time) 参数保证了正确翻转. 电路的原理和设计方法你可以自己推导, 
       以上 pin 数是 74HC73 的, 如用其他 JK 触发器芯片只要是同名引脚连接方法是一样的, 时钟是上升沿还是下降沿翻转都可以. 如用不同的芯片请注意复零端的 H,L 用不同的上电复零.

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
8
关闭 站长推荐上一条 /3 下一条