010---基于Verilog HDL的分频器计划

[复制链接]
发表于 2025-10-17 16:49:23 | 显示全部楼层 |阅读模式

择要

文章为学习记载。绘制时序图,编码。通过修改分频值参数,实现恣意整数分频器计划。

一、时序图


二、步调计划

2.1 rtl

  1. module divider
  2. #(
  3.   parameter    DIV_VALUE = 5
  4.   )
  5. (
  6. input wire sys_clk , //系统时钟 50MHz
  7. input wire sys_rst_n , //全局复位
  8. output reg clk_flag //指示系统时钟分频后的脉冲标志信号
  9. );
  10. function integer clogb2 (input integer bit_depth);              
  11. begin                                                           
  12.          for(clogb2=0; bit_depth>0; clogb2=clogb2+1)                  
  13.          bit_depth = bit_depth >> 1;                                 
  14. end                                                           
  15. endfunction
  16. localparam  CNT_MAX = clogb2(DIV_VALUE -1);
  17. reg [CNT_MAX:0] cnt; //计数
  18. //cnt:
  19. always@(posedge sys_clk or negedge sys_rst_n)
  20. begin
  21.      if(sys_rst_n == 1'b0)
  22.          cnt <= 'b0;
  23.      else if(cnt == DIV_VALUE -1)
  24.          cnt <= 3'b0;
  25.      else
  26.          cnt <= cnt + 1'b1;
  27. end
  28. //clk_flag:脉冲信号指示
  29. always@(posedge sys_clk or negedge sys_rst_n)
  30. begin
  31.      if(sys_rst_n == 1'b0)
  32.          clk_flag <= 1'b0;
  33.      else if(cnt == DIV_VALUE -2)
  34.          clk_flag <= 1'b1;
  35.      else
  36.          clk_flag <= 1'b0;
  37. end
  38. endmodule
复制代码
2.2 tb

  1. module tb_divider();
  2. reg sys_clk ; //系统时钟 50MHz
  3. reg sys_rst_n ; //全局复位
  4. wire clk_flag ;
  5. //初始化系统时钟、全局复位
  6. initial begin
  7. sys_clk = 1'b1;
  8. sys_rst_n <= 1'b0;
  9. #20
  10. sys_rst_n <= 1'b1;
  11. end
  12. //sys_clk:模拟系统时钟,每 10ns 电平翻转一次,周期为 20ns,频率为 50MHz
  13. always #10 sys_clk = ~sys_clk;
  14. divider
  15. #(
  16. .    DIV_VALUE(5)
  17.   )
  18. divider_inst1
  19. (
  20. . sys_clk (sys_clk), //系统时钟 50MHz
  21. . sys_rst_n(sys_rst_n) , //全局复位
  22. . clk_flag(clk_flag) //指示系统时钟分频后的脉冲标志信号
  23. );
  24. endmodule
复制代码
三、仿真分析

5分频:
体系时钟周期20ns,clk_flag周期100ns。

10分频:
体系时钟周期20ns,clk_flag周期200ns。

四、实用性

确保体系时钟继续作为工作时钟:
体系时钟是由外部晶振直接通过管脚毗连到了 FPGA 的专用时钟管脚上,会毗连到全局时钟网络,可以大概使时钟信号到达每个寄存器的时间都尽大概雷同,以包管更低的时钟偏斜(Skew)和抖动(Jitter)。
  1. always@(posedge sys_clk or negedge sys_rst_n)
  2. begin
  3. if(sys_rst_n == 1'b0)
  4. A <= 4'b0;
  5. else if(clk_flag == 1'b1)
  6. A <= A + 1'b1;
  7. end
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表