小数分频无法做到1:1
的占空比。例如用77 分频得到16M 时钟的生成原理如下:对于77
M的时钟,一个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的时钟。
小数分频是通过可变分频和多次平均的方法实现的。例如要实现4.7分频,需要在10次分频中做3 次4分频和7次5分频就可以做到,再如实现5.67分频,只要在100次分频中,做67次6分频,33次5分频即可。因为从N分频到N+1分频和从N+1分频到N分频的切换,会产生一个随时间增长的相位移。考虑到小数分频中需要多次进行两种频率分频,必须将两种分频均匀,这种“均匀”工作是通过计数器完成的,这里仅给出一位小数的情况,下面简要介绍这种混合的方法:
每进行一次分频,计数值为10减去分频系数的小数部分,各次计数值累加。若累加结果小于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 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 9
10 10 8
以下是代码模块:
//top module
module fd89bits( clkin,reset,a,clkout
);
input clkin;
input
reset;
input a;
output reg
clkout;
wire
clkout1,clkout2;
fd8bits
dut1(clkin,reset,clkout1);
fd9bits
dut2(clkin,reset,clkout2);
always@(posedge clkin) begin
if(a)
clkout <= clkout1;
else
clkout <= clkout2;
end
endmodule
`timescale 1ns / 1ps
module fd8bits(
clk_in,reset,clk_out );
input clk_in;
input reset;
output reg clk_out;
reg[3:0] count;
always@(posedge clk_in) begin
if(!reset)
count <= 0;
else begin
if(count < 7)
count <= count + 1;
else
count <= 0;
end
clk_out <= count[2];
end
endmodule
// 9 分频
module fd9bits(
clk_in,reset,clk_out );
input clk_in;
input reset;
output reg clk_out;
reg[3:0] count;
always@(posedge clk_in) begin
if(!reset)
count <= 0;
else begin
if(count < 8)
count <= count + 1;
else
count <= 0;
end
clk_out <= count[2];
end
endmodule
// testbench
module testbench(
);
reg clk_in;
reg reset;
reg a;
wire clk_out;
fd89bits dut(clk_in,reset,a,clk_out);
initial begin
clk_in=
0;
reset = 0;
#11;
reset = 1;
forever begin
a = 1;
#60;
a = 0;
#20;
a = 1;
#40;
a = 0;
#20;
a = 1;
#40;
a = 0;
#20;
end
end
always #10 clk_in = ~clk_in;
endmodule
//result
http://s8/middle/6840802c488f8945496f7&690实现小数分频(小数分频器)" TITLE="verilog 实现小数分频(小数分频器)" />
加载中,请稍候......