微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 一个小数分频器的设计问题

一个小数分频器的设计问题

时间:10-02 整理:3721RD 点击:
分频比是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),编译通过,但仿真时结果出不了,不知道是什么问题,请大家指正,看有什么问题没有(源程序是从一篇论文里看到的)

看了半天,也没太懂,目的是每8.7个时钟,输出翻转一次,是这个意思么?

我想。这个程序的顶层文件可以不用时钟CLKIN来控制了。完全可以用组合逻辑。
比如assign  clkout = (a)? clkout1 : clkout2;
或用always语句只用a来做敏感信号。去掉CLKIN应该不会影响。

最后一段的代码和文章思路相悖,我认为没这么简单,目前我也在试小数分频

可以吗?不太清楚

need to debug

可以吗,论文是水货

可以参考很多fran_n pll的文章;一般都是采用sigma delta modulator

硬件实现比较好,代码不懂

不知道你testbench怎么写的,能仿真的。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top