一. 模块功能与应用场景
模块功能:对输入时钟进行任意倍数分频。
应用场景:
-
需要对时钟进行分频,而PLL不能满足要求或者使用起来不方便
-
需要固定倍数关系的时钟
-
需要运行时不断变化频率的时钟
二. 模块框图与使用说明
使用说明:
-
通过输入信号div控制分频系数,输出div_clk = clk / DIV,可实现时钟在线分频。 -
如果仅需要固定倍数的分频, 只需要固定div的值, div_valid一直为1即可。 -
div应不等于0, 如果div=0, 那么div会被忽略, 输出div_clk = clk。 -
div_valid高电平有效, 指示div有效。 -
div_clk_en控制分频时钟输出, div_clk_en=1时正常输出, div_clk_en=0时输出0。 -
任意频率的输出时钟占空比固定为50%。
注意:
1.原始div_clk是门控时钟,一般不推荐使用。但Vivado软件综合时会自动给div_clk加BUFG,使其使用全局时钟资源变为全局时钟,故此处不在代码中加入BUFG原语,同时也保证了代码的通用性。
2.未在Quartus中测试过,不知道是否也会自动转为全局时钟,需要注意。
三. 仿真验证
仿真工具:Vivado 2021.2 Simulator。
四. 源码与仿真工程分享
Gitee与Github同步:
Verilog功能模块–时钟分频: Verilog功能模块–时钟分频,任意整数分频 (gitee.com)
zhengzhideakang/Verilog–clkDivider: Verilog功能模块——时钟分频,任意整数分频 (github.com)
因Gitee不擅管理非文本文件,故仿真工程文件通过网盘分享。
verilog-function-module–clkDivider 时钟分频 Vivado 2021.2工程 20240926.7z
欢迎大家关注我的公众号:徐晓康的博客,回复以下代码获取。
2369
建议复制过去不会码错字!
如果本文对你有所帮助,欢迎点赞、转发、收藏、评论让更多人看到,赞赏支持就更好了。
如果对文章内容有疑问,请务必清楚描述问题,留言评论或私信告知我,我看到会回复。
徐晓康的博客持续分享高质量硬件、FPGA与嵌入式知识,软件,工具等内容,欢迎大家关注。