美文网首页
时钟分频之奇分频(5分频)

时钟分频之奇分频(5分频)

作者: 暗夜望月 | 来源:发表于2017-06-16 16:12 被阅读0次

    来源:[原创][FPGA]时钟分频之奇分频(5分频)

    其实现很简单,主要为使用两个计数模块分别计数,得到两个波形进行基本与或操作完成。直接贴出代码部分如下。

    module  div_freq(
            iCLK,
            iRST_n,
            oCLK
    );
     
    input   wire    iCLK;
    input   wire    iRST_n;
    output          oCLK;
     
    parameter   N = 4'd5;
     
    reg         clk_p;
    reg [3:0]   cnt_p;
    always @ (posedge iCLK or negedge iRST_n) begin
        if (!iRST_n)
            cnt_p <= 4'd0;
        else if (cnt_p == N - 1)
            cnt_p <= 4'd0;
        else
            cnt_p <= cnt_p + 1'b1;
    end
    always @ (posedge iCLK or negedge iRST_n) begin
        if (!iRST_n)
            clk_p <= 1'b0;
        else if (cnt_p == (N - 1) / 2)
            clk_p <= ~clk_p;
        else if (cnt_p == N - 1)
            clk_p <= ~clk_p;
        else
            clk_p <= clk_p;
    end
     
     
    reg         clk_n;
    reg [3:0]   cnt_n;
    always @ (negedge iCLK or negedge iRST_n) begin
        if (!iRST_n)
            cnt_n <= 4'd0;
        else if (cnt_n == N - 1)
            cnt_n <= 4'd0;
        else
            cnt_n <= cnt_n + 1'b1;
    end
    always @ (negedge iCLK or negedge iRST_n) begin
        if (!iRST_n)
            clk_n <= 1'b0;
        else if (cnt_n == (N - 1) / 2)
            clk_n <= ~clk_n;
        else if (cnt_n == N - 1)
            clk_n <= ~clk_n;
        else
            clk_n <= clk_n;
    end
     
    assign  oCLK = clk_p | clk_n;
     
    endmodule
    

    使用两个计数器cnt_p和cnt_n,cnt_p在时钟上升沿变化,对应clk_p两低三高;cnt_n在时钟下降沿变化,对应clk_n两低三高。但是clk_p和clk_n的变化边沿正好相差半个clk周期,对两个时钟进行或运算即可。

    modelsim仿真结果如下图


    相关文章

      网友评论

          本文标题:时钟分频之奇分频(5分频)

          本文链接:https://www.haomeiwen.com/subject/ptlmqxtx.html