|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
分频比是8.7,源程序如下:
//8分频电路
module fd8bits(reset,clkin,clkout);
input clkin,reset;
output clkout;
reg clkout;
reg[4:1]q;
always @ (posedge clkin)
begin
if(!reset)
q=0;
else
begin
if(q<7)
q=q+1;
else
q=0;
end
clkout<=q[3];
end
endmodule
//9分频
module fd9bits(reset,clkin,clkout);
input clkin,reset;
output clkout;
reg clkout;
reg [4:1]q;
always @(posedge clkin)
begin
if(!reset)
q=0;
else
begin
if(q<8)
q=q+1;
else
q=0;
end
clkout<=q[3];
end
endmodule
// ÷8/9分频
module fd89bits(reset,clkin,a,clkout);
input reset,clkin,a;
output clkout;
reg clkout;
wire clkout1,clkout2;
fd8bits fd81(reset,clkin,clkout1);
fd9bits fd91(reset,clkin,clkout2);
always @(a or posedge clkin)
begin
if(a==1)
clkout=clkout1;
else
clkout=clkout2;
end
endmodule
这里使用÷8/9 双模前置分频器, 按照前面的分析, 可以通过计数器计数先做3次8分频, 后做7次9分频, 即可得到平均分频系数8.7。由于从N分频切换到N+1分频和从N+1分频切换到N分频都会产生一个随时间增长的相位移, 如果简单的先进行3 次8 分频后做7 次9 分频将会产
生很大的相位波动。考虑到该小数分频器要进行多次8分频和9分频,那么就设法将两种分频混合均匀, 这种“均匀”工作是通过计数器来完成的, 在这里只讨论一位小数的情况, 下面简要介绍这种混合的方法每进行一次分频, 计数值为10 减去分频系数的小数部分,各次计数值加。若累加结果小于10, 则进行N+1分频, 若大于10 或等于10, 则进行N 分频。该例中计数值为(10-7)=3, 前3 次累加结果都小于10, 所以为9 分频,第四次累加结果为12, 则去掉十位数后累加结果变为2, 同时进行8 分频,附件给出了该分频器的分频过程
问题:编译时出错,提示always @(a or posedge clkin)这里有问题,发现是电平敏感型和边沿敏感型不能同时用,就改为always @( posedge clkin),编译通过,但仿真时结果出不了,不知道是什么问题,请大家指正,看有什么问题没有(源程序是从一篇论文里看到的) |
|