20220707:小数分频器的实现

小数分频器的实现

题目

  1. 输入时钟为clk_in,请设法实现5.3分频的clk_out,并使其相位抖动尽可能小

思路

  1. 本题为非常典型的小数分频,我们不可能在很少的周期内输出完全50%占空比的小数分频时钟,因此需要一定的技巧。本例中的5.3分频,我们无法做到5.3倍clk_in的时钟周期,但可以做到53倍clk_in的时钟周期,并且我们无法做到完美的50%占空比。因此我们只需要保证源时钟 53个周期的时间等于分频时钟 10 个周期的时间即可。具体细分为7个5分频和3个6分频,(7×5+3×6=53)。关键在于如何配置使其相位抖动尽可能小。

仿真实验

  1. 代码实现
module decimal_div#(
    parameter M = 53,
    parameter N = 10
)(
    clk_in,
    rst_n,
    clk_out
);

input clk_in;
input rst_n;
output reg clk_out;

localparam P = M / N,
           Q = P + 1,
           R = M - P * N;
reg [3:0] main_cnt;
reg [4:0] diff_cnt;

wire [3:0] cnt_num_sel;

always @(posedge clk_in or negedge rst_n) begin
    if (!rst_n) begin
     main_cnt    <= 'b0 ;
    end
    else if (main_cnt == cnt_num_sel) begin
     main_cnt    <= 'b0 ;
    end
    else begin
     main_cnt    <= main_cnt + 1'b1 ;
    end
end

always @ (posedge clk_in or negedge rst_n) begin
    if (!rst_n) begin
        diff_cnt <= 5'd0;
    end
    else if (main_cnt == cnt_num_sel) begin
        if (diff_cnt >= N) begin
            diff_cnt <= diff_cnt + R - N;
        end
        else begin
            diff_cnt <= diff_cnt + R;
        end
    end
end

assign cnt_num_sel = diff_cnt >= N ? Q - 1 : P - 1;

always @(posedge clk_in or negedge rst_n) begin
    if (!rst_n) begin
        clk_out <= 1'b0 ;
    end
    else if (main_cnt == cnt_num_sel) begin
        clk_out <= 1'b1 ;
    end
    else begin
        clk_out <= 1'b0 ;
    end
end


endmodule

  1. 5.3分频的仿真示意图如下,7个5分频和3个6分频的顺序依照均匀法使其尽量均匀,依次为5,5,5,6,6,5,5,6,5,5,6的排布方式。这也就是小数分频器最难的部分了。
    在这里插入图片描述

写在最后

  1. 文中所有代码均可在我的个人微信公众号后台回复“小数分频器源码”获得,个人微信公众号每周会更新一些数字IC,FPGA,以及力扣刷题的学习内容,希望对您有帮助,祝您变得更强。以下为公众号二维码。
    在这里插入图片描述
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IMMUNIZE

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值