题解 | #任意小数分频#

任意小数分频

https://www.nowcoder.com/practice/24c56c17ebb0472caf2693d5d965eabb

`timescale 1ns/1ns

module div_M_N(
     input      clk_in,
     input      rst,
     output     clk_out
);
   
    localparam CNT_MAX = 89;
    localparam CNT_SW_EO = 24;
    localparam CNT_EVEN = 8;
    localparam CNT_ODD = 9;

    reg [6:0] cnt_in;
    always@(posedge clk_in or negedge rst)begin
        if(!rst)
            cnt_in <= 7'd0;
        else if(cnt_in == CNT_MAX-1)
            cnt_in <= 7'd0;
        else
            cnt_in <= cnt_in + 1'b1;
    end

    reg div_flag;
    always@(posedge clk_in or negedge rst)begin
        if(!rst)
            div_flag <= 1'b0;
        else if(cnt_in == CNT_SW_EO-1 || cnt_in == CNT_MAX-1)
            div_flag <= ~div_flag;
        else
            div_flag <= div_flag;
    end

    reg [3:0] cnt_div;
    always@(posedge clk_in or negedge rst)begin
        if(!rst)
            cnt_div <= 4'd0;
        else if(~div_flag)
            cnt_div <= (cnt_div == CNT_EVEN-1) ? 4'd0 : cnt_div + 1'b1;
        else
            cnt_div <= (cnt_div == CNT_ODD-1) ? 4'd0 : cnt_div + 1'b1;
    end

    assign clk_out = cnt_div <= CNT_EVEN/2 && cnt_div != 0;

endmodule

思路:基本与高赞评论一致。

整体:

偶分频部分(div_flag为低):

奇分频部分(div_flag为高,不要求50%占空比):

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务