verilog 实现小数分频(小数分频器)代码.doc

verilog 实现小数分频(小数分频器)代码.doc

ID:48963128

大小:46.50 KB

页数:4页

时间:2020-02-26

verilog 实现小数分频(小数分频器)代码.doc_第1页
verilog 实现小数分频(小数分频器)代码.doc_第2页
verilog 实现小数分频(小数分频器)代码.doc_第3页
verilog 实现小数分频(小数分频器)代码.doc_第4页
资源描述:

《verilog 实现小数分频(小数分频器)代码.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、verilog 实现小数分频(小数分频器)    小数分频无法做到1:1的占空比。例如用77分频得到16M 时钟的生成原理如下:对于77M的时钟,一个sts-12帧有9720拍。对于16M时钟,一个sts-12帧有32*8*8拍。即77M下每计数1215,16M下计数256.1215/256=4.76考虑到数字处理只能是整数,则需要在每m个5拍扣一拍,每n个4拍扣一拍。列方程为:       m+n=256       5m+4n=1215得到m=191,n=65,即通过191个5分频和65个4分频实现16M的时钟。  

2、 小数分频是通过可变分频和多次平均的方法实现的。例如要实现4.7分频,需要在10次分频中做3 次4分频和7次5分频就可以做到,再如实现5.67分频,只要在100次分频中,做67次6分频,33次5分频即可。因为从N分频到N+1分频和从N+1分频到N分频的切换,会产生一个随时间增长的相位移。考虑到小数分频中需要多次进行两种频率分频,必须将两种分频均匀,这种“均匀”工作是通过计数器完成的,这里仅给出一位小数的情况,下面简要介绍这种混合的方法:  每进行一次分频,计数值为10减去分频系数的小数部分,各次计数值累加。若累加结果小于

3、10,则进行N+1分频,若大于或等于10,则进行N分频。以8.7分频为例进行设计时,需要进行3次8分频,7次9分频。该例中计数值(10-7)=3,前三次累加结果都小于10,所以为9分频,第四次累加结果为12,则去掉十位数后累加结果变为2,同时进行8分频,下表给出了该分频器的分频过程。          分频系数8.7--------------------------------------序号          累加结果      分频系数 1             3                  9 2   

4、           6                  9 3              9                  9 4           12-10=2              8 5              5                  9 6              8                  9 7           11-10=1              8 8              4                  9 9              7 

5、                 9 10             10                 8以下是代码模块://topmodulemodulefd89bits(clkin,reset,a,clkout   ); inputclkin;   inputreset; inputa;   outputregclkout;         wireclkout1,clkout2;      fd8bits dut1(clkin,reset,clkout1);  fd9bits dut2(clkin,reset,c

6、lkout2);   always@(posedgeclkin)begin    if(a)       clkout<=clkout1;    else       clkout<=clkout2;  endendmodule`timescale1ns/1psmodulefd8bits( clk_in,reset,clk_out );  inputclk_in; inputreset; outputregclk_out;  reg[3:0]count;  always@(posedgeclk_in)begin   if

7、(!reset)    count<=0; elsebegin    if(count <7)        count <=count+1;   else    count <=0; end  clk_out <=count[2]; endendmodule//9分频modulefd9bits(   clk_in,reset,clk_out );  inputclk_in; inputreset; outputregclk_out;  reg[3:0]count;  always@(posedgeclk_in)begi

8、n   if(!reset)    count<=0; elsebegin    if(count <8)        count <=count+1;   else    count <=0; end  clk_out <=count[2]; endendmodule//testbenchmoduletestbe

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。