用Bresenham算法在FPGA上实现小数分频器

来源:互联网 发布:ai for mac下载 编辑:程序博客网 时间:2024/06/05 16:49

最近朋友问了一个问题,输入时钟是33MHz,要分出一路2.048MHz的时钟来,要求相位抖动尽可能小。我想到可以用计算机图形学中绘制直线的Bresenham算法来解决,获得成功。

输入时钟是33000kHz,输出时钟是2048kHz,好比从原点画一条到(33000,2048)的直线,用输入时钟驱动画笔在 x 方向的运动,那么对应的 y 方向的运动就是输出时钟。

Verilog代码如下:

module  divider(clk_in, clk_out, nrst);
  input  clk_in,  nrst;
  output clk_out;
  reg    clk_out;

  parameter input_freq = 33000;   // both in kHz
  parameter output_freq = 2048;
 
  reg[16:0] err;          // change to 18 bits if necessary, look down
 
  always @(posedge clk_in or negedge nrst)
  begin
    if (nrst == 1'b0) begin
      clk_out <= 1'b0;
      err <= (output_freq << 2) - input_freq;
    end
    else begin
      if (err[16] == 1'b0) begin  // also change here !!! (if change the former)
        err <= err - (input_freq << 1) + (output_freq << 2);
        clk_out <= !clk_out;
      end
      else begin
        err <= err + (output_freq << 2);
      end
    end
  end
 
endmodule

这是一个同步时序电路,在 clk_in 的每个上升沿判断 clk_out 是否翻转,设 clk_in 的周期是T,
那么 clk_out  的边沿抖动小于T。



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=549965


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 药吃了胃难受怎么办 吃了牙痛药胃痛怎么办 吃了药刺激胃怎么办 吃凉的刺激到胃怎么办 误食打农药的菜怎么办 狗把蛇咬死了怎么办 吃过毒死的狗怎么办 偷用室友东西被发现怎么办 室友看综艺太吵怎么办 被甲鱼咬住不放怎么办 凤仙叶子干焦怎么办 香槟开了没喝完怎么办 土豆酸了吃了怎么办 吃了发酸的土豆怎么办 土豆没煮熟吃了怎么办 吃了发绿的土豆怎么办 孩子吃蒸土豆发恶心怎么办 吃了发麻的土豆怎么办 吃了没熟的土豆怎么办 吃土豆没熟中毒怎么办 吃小土豆能中毒怎么办 猪吃土豆中毒了怎么办 吃了不熟的土豆怎么办 吃了变绿的土豆怎么办 吃炸洋芋中毒了怎么办 脸上长毒气痘痘怎么办 吃鸡游戏中遇到毒气怎么办 吃多了颠茄片怎么办 玲珑骰子沾了水怎么办 花的枝干长歪了怎么办 电脑中毒了怎么办开不了机 台湾竹长得太高怎么办 文竹长得太高怎么办 桑叶牡l丹长虫怎么办 日本海棠开完花后枯萎了怎么办 长寿冠海棠烂根怎么办 夏季长寿冠海棠掉叶怎么办 竹节海棠有点烂根怎么办? 丽格海棠烂茎怎么办 长寿花徒长不开花怎么办 长寿花植株长了怎么办