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

来源:[原创][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仿真结果如下图


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一个计数器通常是由一组触发器构成,该组触发器按照预先给定的顺序改变其状态,如果所有触发器的状态改变是在同一时钟脉冲...
    锦穗阅读 13,621评论 0 6
  • 学号:16010199021 姓名:李若宇 转载自 http://blog.csdn.net/sun1991011...
    承瑜阅读 1,806评论 0 1
  • 来源:FPGA 时钟设计 1 —— 时钟资源总结 关于一款芯片,最权威、最新的资料当然是厂家的官方文件。很多大牛都...
    暗夜望月阅读 3,615评论 0 2
  • 在有些关系里 我发现自己什么角色也不是。
    发芽的船桨阅读 168评论 0 1
  • 喜欢它们 它们的颜色 实实在在的不遮掩 比人的心洁净
    萧萧暮雪阅读 234评论 0 3