基于FPGA的整数倍分频器设计-1_第1页
基于FPGA的整数倍分频器设计-1_第2页
基于FPGA的整数倍分频器设计-1_第3页
基于FPGA的整数倍分频器设计-1_第4页
基于FPGA的整数倍分频器设计-1_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于FPGA的整数倍分频器设计1、前言分频器是FPGA设计中使用频率非常高的基本单元之一。尽管目前在大部分设计中还广泛使用集成锁相环(如Altera的PLL,Xilinx的DLL)来进行时钟的分频、倍频以及相移设计,但是,对于时钟要求不太严格的设计,通过自主设计进行时钟分频的实现方法仍然非常流行。首先这种方法可以节省锁相环资源,再者这种方式只消耗不多的逻辑单元就可以达到对时钟的操作目的。2、整数倍分频器的设计2.1偶数倍分频偶数倍分频器的实现非常简单,只需要一个计数器进行计数就能实现。如需要N分频器(N为偶数),就可以由待分频的时钟触发计数器进行计数,当计数器从0计数到N/2-1时,将输出时钟进行翻转,并给计数器一个复位信号,以使下一个时钟开始从零计数。以此循环,就可以实现偶数倍分频。以10分频为例,相应的verilog代码如下:regclk_div10;reg[2:0]cnt;always@(posedgeclkorposedgerst)beginif(rst)begin//复位cnt《=0;clk_div10《=0;endelseif(cnt==4)begincnt《=0;//清零clk_div10《=~clk_div10;//时钟翻转endelsecnt《=cnt+1;end2.2奇数倍分频奇数倍分频因占空比不同,主要有以下两种方法。对于非50%占空比的分频,与偶数倍分频类似,只需要一个计数器就能实现特定占空比的时钟分频。如需要1/11占空比的十一分频时钟,可以在计数值为9和10时均进行时钟翻转,该方法也是产生抽样脉冲的有效方法。相应的verilog代码如下:always@(posedgeclkorposedgerst)beginif(rst)begin//复位cnt《=0;clk_div11《=0;endelseif(cnt==9)beginclk_div11《=~clk_div11;//时钟翻转cnt《=cnt+1;//继续计数endelseif(cnt==10)beginclk_div11《=~clk_div11;//时钟翻转cnt《=0;//计数清零endelsecnt《=cnt+1;end对于50%奇数分频器的设计,用到的思维是错位半个时钟并相或运算。具体实现步骤如下:分别利用待分频时钟的上升沿与下降沿进行((N-1)/2)/N分频,最后将这两个时钟进行或运算即可。以三分频为例,相应的电路原理图和时序仿真图如图1和图2所示,相应代码如下:regclk1;reg[1:0]cnt1;always@(posedgeclkorposedgerst)beginif(rst)begin//复位cnt1《=0;clk1《=0;endelseif(cnt1==1)beginclk1《=~clk1;//时钟翻转cnt1《=cnt1+1;//继续计数endelseif(cnt1==2)beginclk1《=~clk1;//时钟翻转cnt1《=0;//计数清零endelsecnt1《=cnt1+1;endregclk2;reg[1:0]cnt2;always@(negedgeclkorposedgerst)beginif(rst)begin//复位cnt2《=0;clk2《=0;endelseif(cnt2==1)beginclk2《=~clk2;//时钟翻转cnt2《=cnt2+1;//继续计数endelseif(cnt2==2)beginclk2《=~clk2;//时钟翻转cnt2《=0;//计数清零endelsecnt2《=cnt2+1;endassignclk_div3=clk1|clk2;//或运算图150%占空比的三分频电路原理图图250%占空比的三分频时序仿真图3、小数倍分频器的设计3.1半整数分频器半整数N+0.5分频器设计思路:首先进行模N+1的计数,在计数到N时,将输出时钟赋值为1,而当回到计数0时,又赋值为0,这样,当计数值为N时,输出时钟才为1。因此,只要保持计数值N为半个时钟周期即是该设计的关键。从中可以发现。因为计数器是通过时钟上升沿计数,故可在计数为N时对计数触发时钟进行翻转,那么,时钟的下降沿就变成了上升沿。即在计数值为N期间的时钟下降沿变成了上升沿。也就是说,计数值N只保持了半个时钟周期。由于时钟翻转下降沿变成上升沿,因此,计数值变为0。所以,每产生一个N+0.5分频时钟的周期,触发时钟都要翻转一次。图3给出了通用半整数分频器的电路原理图。以2.5倍分频为例,相应的电路verilog代码如下,时序仿真图如图4所示。//异或运算assignclk_in=clk^clk_div2;//模3计数器regclk_out;reg[1:0]cnt;always@(posedgeclk_inorposedgerst)beginif(rst)begin//复位cnt《=0;clk_out《=0;endelseif(cnt==1)beginclk_out《=~clk_out;//时钟翻转cnt《=cnt+1;//继续计数endelseif(cnt==2)beginclk_out《=~clk_out;//时钟翻转cnt《=0;//计数清零endelsecnt《=cnt+1;end//2分频regclk_div2;always@(posedgeclk_outorposedgerst)beginif(rst)clk_div2《=0;//复位elseclk_div2=~clk_div2;end图3通用半整数分频器的电路原理图图42.5倍分频器时序仿真图3.2任意小数分频器小数分频器的实现方法有很多中,但其基本原理都一样的,即在若干个分频周期中采取某种方法使某几个周期多计或少计一个数,从而在整个计数周期的总体平均意义上获得一个小数分频比。一般而言,这种分频由于分频输出的时钟脉冲抖动很大,故在设计中的使用已经非常少。但是,这也是可以实现的。以8.7倍分频为例,本文仅仅给出双模前置小数分频原理的verilog代码及其仿真图(如图6),具体原理可以参考刘亚海的《基于FPGA的小数分频器的实现》以及毛为勇的《基于FPGA的任意小数分频器的设计》。图5小数分频器的电路原理图//8分频regclk_div8;reg[2:0]cnt_div8;always@(posedgeclkorposedgerst)beginif(rst)begin//复位clk_div8《=0;cnt_div8《=0;endelseif(cnt_div8==3‘d7)beginclk_div8《=1;//置1cnt_div8《=0;endelseif(cnt_div8==3’d0)beginclk_div8《=0;//置0cnt_div8《=cnt_div8+1;endelsecnt_div8《=cnt_div8+1;end//9分频regclk_div9;reg[3:0]cnt_div9;always@(posedgeclkorposedgerst)beginif(rst)begin//复位clk_div9《=0;cnt_div9《=0;endelseif(cnt_div9==3‘d8)beginclk_div9《=1;//置1cnt_div9《=0;endelseif(cnt_div9==3’d0)beginclk_div9《=0;//置0cnt_div9《=cnt_div9+1;endelsecnt_div9《=cnt_div9+1;end//控制信号parameterDiv8Num=3;regctrl;reg[3:0]AddValue;always@(posedgeclkorposedgerst)beginif(rst)begin//复位ctrl《=0;AddValue《=10-7;endelseif(AddValue《10)beginctrl《=0;AddValue《=AddValue+Div8Num;endelsebeginctrl《=1;AddValue《=AddValue-10;endend//选择输出regclk_out;always@(ctrlorposedgecl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论