一. 模块功能与应用场景

模块功能:对输入时钟进行任意倍数分频。

应用场景:

  • 需要对时钟进行分频,而PLL不能满足要求或者使用起来不方便

  • 需要固定倍数关系的时钟


二. 模块框图与使用说明

通过参数DIV控制分频系数,输出div_clk = clk / DIV。

注意:

1.原始div_clk是门控时钟,一般不推荐使用。但Vivado软件综合时会自动给div_clk加BUFG,使其使用全局时钟资源变为全局时钟,故此处不在代码中加入BUFG原语,同时也保证了代码的通用性。

2.未在Quartus中测试过,不知道是否也会自动转为全局时钟,需要注意。


三. 模块代码

/** @Author       : Xu Dakang* @Email        : XudaKang_up@qq.com* @Date         : 2021-04-30 08:22:46* @LastEditors  : Xu Dakang* @LastEditTime : 2021-04-30 16:24:07* @Filename     : clkDivider.sv* @Description  : 时钟分频模块
*//*
! 模块功能: 将输入时钟根据参数DIV分频. DIV为正整数, 得到div_clk = clk / DIV
* 思路:1.当DIV为1时,时钟原样输出1.当DIV为偶数时, 直接生成占空比50%的方波即可2.当DIV为奇数时, 需要用到下降沿触发, 生成两个占空比不是50%的方波, 然后做或运算
*/module clkDivider
#(parameter DIV = 2 // 时钟分频系数
)(output logic div_clk,input  logic clk,input  logic rstn
);//< 分频计数 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
logic [$clog2(DIV)-1 : 0] div_cnt;
always_ff @(posedge clk, negedge rstn) beginif (~rstn)div_cnt <= '0;else if (div_cnt < (DIV - 1)) // 计数最大值:DIV-1div_cnt <= div_cnt + 1'b1;elsediv_cnt <= '0;
end
//< 分频计数 ------------------------------------------------------------//> 生成分频时钟 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
logic div_clk_a;
always_ff @(posedge clk, negedge rstn) beginif (~rstn)div_clk_a <= 1'b0;else if (div_cnt < (DIV >> 1))div_clk_a <= 1'b1;elsediv_clk_a <= 1'b0;
endlogic div_clk_b;
always_ff @(negedge clk, negedge rstn) begin // 下降沿触发if (~rstn)div_clk_b <= 1'b0;else if (div_cnt < (DIV >> 1))div_clk_b <= 1'b1;elsediv_clk_b <= 1'b0;
endalways_comb beginif (DIV == 1)div_clk = clk;else if (DIV[0] == 0) // 分频系数为偶数div_clk = div_clk_a;else             // 分频系数为奇数div_clk = div_clk_a | div_clk_b;
end
//> 生成分频时钟 ------------------------------------------------------------endmodule

四. testbench

/** @Author       : Xu Dakang* @Email        : XudaKang_up@qq.com* @Date         : 2021-04-29 22:55:32* @LastEditors  : Xu Dakang* @LastEditTime : 2021-04-30 16:22:07* @Filename     : clkDivider_tb.sv* @Description  : testbench of clkDivider
*/module clkDivider_tb ();timeunit 1ns;
timeprecision 1ps;logic         div_clk;logic         clk;
logic         rstn;parameter DIV = 2;clkDivider #(.DIV(DIV)) clkDivider_inst01 (.*);// 生成时钟
localparam CLKT = 2;
initial beginclk = 0;forever #(CLKT / 2) clk = ~clk;
endinitial beginrstn=0;#(CLKT*2) rstn=1;#(DIV*CLKT*5) $stop;
endendmodule

五. 仿真验证

仿真工具:Vivado 2020.2 Simulator。

  1. DIV = 1时:

  2. DIV = 2时:

  3. DIV = 5时:


六. 工程分享

clkDivider 时钟分频模块 vivado 2020.2工程.7z

欢迎大家关注我的公众号:徐晓康的博客,回复以下代码获取。

2369

建议复制过去不会码错字!


徐晓康的博客持续分享高质量硬件、FPGA与嵌入式知识,软件,工具等内容,欢迎大家关注。

Verilog功能模块——时钟分频相关推荐

  1. Verilog功能模块 —— 按键消抖

    一. 什么是按键消抖 按键消抖_百度百科 (baidu.com) 按键消抖通常的按键所用开关为机械弹性开关,当机械触点断开.闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断 ...

  2. Verilog功能模块——取滑动平均值(使用寄存器组)

    我的另一篇博客:Verilog功能模块--取滑动平均值(使用FIFO) 两者用不同的方式实现相同的功能, 使用FIFO占用较少寄存器资源,适用于取值N较大的场合. 使用寄存器组不需要额外的IP,更简单 ...

  3. Verilog功能模块——取滑动平均值(使用FIFO)

    前言 我的另一篇博客:Verilog功能模块--取滑动平均值(使用寄存器组) 两者用不同的方式实现相同的功能, 使用FIFO占用较少寄存器资源,适用于取值N较大的场合. 使用寄存器组不需要额外的IP, ...

  4. Verilog HDL的时钟分频(2次方分频)

    verilog里实现时钟分频有很多种方法,比如用计数器计数,或状态机也行,下面我讲下自己常用的以同一个计数器的方式实现的多种2次方的分频方法. 例: input clk; reg [23:0]coun ...

  5. 8分频verilog线_时钟分频系列——分数分频电路的Verilog实现

    IC君的第47篇原创文章 (欢迎关注公众号 icstudy) 上一篇文章时钟分频系列--偶数分频/奇数分频/分数分频,IC君介绍了各种分频器的设计原理,其中分数分频器较为复杂,这一篇文章IC君再跟大家 ...

  6. Verilog功能模块——AXI4-Lite协议主机-单次写-使用FIFO

    一. 模块功能与应用场景 模块功能:AXI4-Lite协议主机,从FWFT FIFO(首字直通FIFO)中读取地址和数据,实现将数据写入到设定的地址中的操作. 二. 模块框图与使用说明 2.1 模块框 ...

  7. Verilog功能模块——AXI4-Lite协议主机-连续区间写-使用FIFO

    一. 模块功能与应用场景 模块功能:AXI4-Lite协议主机,从FWFT FIFO(首字直通FIFO)中不断读取数据,写入到一段地址中. 应用场景:DDR读写,BRAM读写等AXI接口的存储器件读写 ...

  8. Verilog功能模块——符号位扩展

    一. 模块功能与应用场景 模块功能:符号位扩展 应用场景:DDR等存储器通常是32/64位的,数据需要转为合适的位数再存入. 二. 模块框图与使用说明 输入和输出都是二进制补码,补码的符号位扩展就是补 ...

  9. Verilog功能模块——降采样

    一. 模块功能与应用场景 模块功能:对输入信号进行降采样. 应用场景: 输入数据量太大,后级难以处理,需要减小信号量而不丢失关键信息 二. 模块框图与使用说明 参数DOWN_SAMPLING_TIME ...

最新文章

  1. 如果有一天程序员再也不忙了
  2. 【Vue】宝塔面板服务器配置Vue项目
  3. 不间断电源ups标准_UPS不间断电源全套基础知识
  4. UnicodeEncodeError: 'ascii' codec can't encode character
  5. Spring5 - 向IOC容器中添加组件的4种方式
  6. 网工基础测试题(附HCIA题库)
  7. 个人随笔-《江城子·驻西航》
  8. 父与子python下载不了_python3-父与子的编程之旅安装pygame出现的问题
  9. 苹果电脑硬盘数据丢失后如何恢复?
  10. mysql闪退的解决方案
  11. 货币代码php,PHP货币换算程序代码_PHP教程
  12. powerdesign新手入门详细教程
  13. 互联网公司的三高问题
  14. jJava基础篇--IO流
  15. 万维网联盟将于2014年推出HTML5标准(四)
  16. C++20 span
  17. 成功的自动化测试:测试员的故事
  18. 查看文章影响因子的插件_查询文献可实时显示影响因子与分区排名的2个强大浏览器插件...
  19. 【ZBH选讲·树变环】
  20. 计算机的网络功能划分为,计算机网络按功能来划分可分为( )子网和( )子网...

热门文章

  1. 麒麟SP1系统非root用户强制修改分辨率,开机自动生效
  2. androidstudio引用本地maven_android studio 之dependence添加依赖maven仓库中的项目出错
  3. 20189217 2018-2019-2 《密码与安全新技术专题》第1周作业
  4. 分享|数智化转型咨询赋能白皮书2021(附PDF)
  5. WPS office文档 为何输入文字不显示
  6. 第031讲:永久存储:腌制一缸美味的泡菜
  7. 解决this application failed to start
  8. 微信单参数二维码回调配置
  9. 雷电网络RESTful API手册中文版
  10. 深度学习语义分割论文笔记(待完善)