文章目录

  • 一、占空比不是50%(<<50%)
  • 二、占空比接近50%(>50%)
  • 三、占空比等于50%
  • 四、占空比50%的任意整数分频(重点)

   奇数分频根据占空比的不同,写法也不尽相同。

一、占空比不是50%(<<50%)

module test#(parameter N=3)(input clk,input rst_n,output clk_div);reg [N-1:0] div_reg        ;//分频计数器always @(posedge clk or negedge rst_n)if (rst_n == 1'b0 )div_reg    <= 0 ;else if(div_reg == 3'd4)//从0计数到4,然后返回到0,5分频div_reg    <= 0;elsediv_reg    <= div_reg + 1'b1 ;assign clk_div = div_reg[N-1] ;endmodule

   每一个分频后的时钟周期=5倍原来的时钟周期,因此是5分频。修改部分代码便可得出3分频。

二、占空比接近50%(>50%)

  假设时钟分频是N,则设置一个计数器,计数长度是N(即从0计数到N-1),然后在计数器为计数到(N-1)/2的时候,翻转一下分频时钟信号;在计数器计数到为N-1的时候,再翻转一下时钟

 module test#(parameter N=3)(//N分频,这里是3分频input clk,input rst_n,output clk_div);reg [N-1:0] div_cnt        ;//分频计数器reg div_reg ;always @(posedge clk or negedge rst_n)beginif (rst_n == 1'b0 )begindiv_cnt    <= 0 ;div_reg        <= 1 ;end else if (div_cnt == (N-1)/2)begin//计数到(N-1)/2,进行翻转和继续计数div_reg        <= ~div_reg;div_cnt    <= div_cnt + 1'b1 ;end else if ( div_cnt == (N-1) )begin//计数到N-1,进行清零和翻转div_cnt        <= 0 ;div_reg        <= ~div_reg;end else div_cnt    <= div_cnt + 1'b1 ;end         assign clk_div = (N == 1)?clk:div_reg ;//注意这里, 在N= 1的情况,也就是不分频的情况endmodule

3分频,N = 3:

5分频,N= 5 :

三、占空比等于50%

  产生具有50%占空比的奇数分频时钟的算法如下所示,假设N分频(N是计数):

  1. 设置一个计数长度为N的上升沿计数器,和一个信号寄存器;信号寄存器在上升沿计数器为(N-1)/2的时候进行翻转,然后再在计数到N-1的时候进行翻转(这里相当于得到一个N分频信号A)。
  2. 再设置一个计数长度为N的下降沿计数器,和另一个信号寄存器;信号寄存器在下降沿计数器为(N-1)/2的时候进行翻转,然后再在计数到N-1的时候进行翻转(这里相当于得到一个N分频信号B)。
  3. A和B相或就可以得到占空比50%的奇数分频信号;代码实现如下:
 module test#(parameter N=5)(//N分频input clk,input rst_n,output clk_div);reg sig_r ;//定义一个上升沿翻转的信号reg sig_f ;//定义一个下降沿翻转的信号reg [N-1:0]    cnt_r;//上升沿计数器reg [N-1:0]    cnt_f;//下降沿计数器wire clk_f ;assign clk_f = ~clk ;//用来触发下降沿计数器的时钟//由于同时使用上升沿和下降沿触发器不好,因此我们为同一边沿,都使用上升沿触发//只不过是将时钟进行反向always @(posedge clk or negedge rst_n)begin//上升沿计数if(rst_n == 1'b0)beginsig_r    <= 0 ;cnt_r    <= 0 ;end else if( cnt_r == (N-1)/2 )beginsig_r    <= ~sig_r ;cnt_r    <= cnt_r + 1 ;end else if ( cnt_r == (N-1) )beginsig_r    <= ~sig_r ;cnt_r    <= 0 ;end else cnt_r    <= cnt_r + 1 ;end                     always @(posedge clk_f or negedge rst_n)begin//下降沿计数if(rst_n == 1'b0)beginsig_f    <= 0 ;cnt_f    <= 0 ;end else if( cnt_f == (N-1)/2 )beginsig_f    <= ~sig_f ;cnt_f    <= cnt_f + 1 ;end else if ( cnt_f == (N-1) )beginsig_f    <= ~sig_f ;cnt_f    <= 0 ;end else cnt_f    <= cnt_f + 1 ;end assign clk_div = sig_f || sig_r ;endmodule

3分频:

5分频:

四、占空比50%的任意整数分频(重点)

module test#(parameter N=5)(//N分频input clk,input rst_n,output clk_div);//奇数分频reg sig_r ;//定义一个上升沿翻转的信号reg sig_f ;//定义一个下降沿翻转的信号reg [N-1:0]    cnt_r;//上升沿计数器reg [N-1:0]    cnt_f;//下降沿计数器wire clk_f ;assign clk_f = ~clk ;//用来触发下降沿计数器的时钟//由于同时使用上升沿和下降沿触发器不好,因此我们为同一边沿,都使用上升沿触发//只不过是将时钟进行反向always @(posedge clk or negedge rst_n)begin//上升沿计数if(rst_n == 1'b0)beginsig_r    <= 0 ;cnt_r    <= 0 ;end else begincnt_r    <= cnt_r + 1 ;if( cnt_r == (N-1)/2 )beginsig_r    <= ~sig_r ;end else if ( cnt_r == (N-1) )beginsig_r    <= ~sig_r ;cnt_r    <= 0 ;end end end                     always @(posedge clk_f or negedge rst_n)begin//下降沿计数if(rst_n == 1'b0)beginsig_f    <= 0 ;cnt_f    <= 0 ;end else begincnt_f    <= cnt_f + 1 ;if( cnt_f == (N-1)/2 )beginsig_f    <= ~sig_f ;end else if ( cnt_f == (N-1) )beginsig_f    <= ~sig_f ;cnt_f    <= 0 ;end end     end //偶数分频reg div_reg ;reg [N-1:0] div_cnt        ;//分频计数器always @(posedge clk or negedge rst_n)beginif (rst_n == 1'b0 )begindiv_cnt    <= 0 ;div_reg    <= 0 ;end else begindiv_cnt    <= div_cnt + 1'b1 ;if(div_cnt == (N/2 - 1))begindiv_cnt    <= 0;div_reg    <= ~div_reg ;end endend        assign clk_div = (N == 1)?clk:( N%2 == 1)?(sig_f || sig_r ): div_reg;//这里用来输出分频值。对2的取余操作是综合的endmodule

5分频:

6分频:

引:https://blog.csdn.net/weixin_34126557/article/details/86246646?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.compare&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.compare

经典分频器——奇数分频(3分频,5分频,任意分频)相关推荐

  1. FPGA分频电路实现(奇数,偶数,小数半分频,任意分频)

    https://blog.csdn.net/weixin_43950612/article/details/104687942(简介明了,奇数,偶数,小数,任意分频) http://www.myexc ...

  2. 分频器——秒分频、三分频、五分频、任意分频和偶数分频

    文章目录 1.占空比 2.秒分频计数 3.偶数分频 4.奇数分频 1. 占空比不为50% 2. 占空比为50% 5.任意分频

  3. 分频器 偶分频 奇分频 任意分频

    今天学习了一下分频器及其Verilog实现 1.偶分频 实现一个NUM_DIV分频的分频器,下面代码中 NUM_DIV= 6,占空比50% 设计代码 module divider_even(clk,r ...

  4. 为所欲为——教你什么才是真正的任意分频

    转自http://www.cnblogs.com/crazybingo/archive/2011/07/26/2117162.html 一.为啥要说任意分频 也许FPGA中的第一个实验应该是分频实验, ...

  5. Verilog实现之任意分频电路

    一.行波时钟 任意分频电路,相信很多人都听说过这个专业名词,好多视频上都说不建议使用计数器产生的分频时钟.其实在FPGA领域当中,由寄存器分频产生的时钟还有一个学名叫做,行波时钟.是由时序逻辑产生比如 ...

  6. verilog 语言实现任意分频

    1.偶分频 偶分频比较简单,假设为N分频,只需计数到N/2-1,然后时钟翻转.计数清零,如此循环就可以得到N(偶)分频.代码如下. module fp_even(clk_in,rst_n,clk_ou ...

  7. FPGA知识点---任意分频电路设计

    学习之前,先理解一下什么叫占空比? 占空比:对于一串理想的脉冲序列中(如方波),正脉冲的持续时间与脉冲中周期的比值,叫做这个方波的占空比. 偶数倍分频 偶数倍分频应该是大家比较熟悉的分频,也是最简单的 ...

  8. 16 分频 32 分频是啥意思_Verilog中任意分频的实现

    在这里讲的是利用计数器进行对clk分频,在rtl code 设计中,由于各个ip的时钟频率不同,所以我们经常要对系统clk进行分频,下面是它的代码以及要实现的功能. //功能:对输入时钟clock进行 ...

  9. 【马春杰杰】使用FPGA实现任意分频、二分频

    博客已迁至[马春杰杰]http://www.machunjie.com/hardware/82.html 请移步新博客,谢谢.!

最新文章

  1. topcoder srm 490 div1
  2. wxWidgets:从文件中读取文本
  3. LeetCode 286. 墙与门 多源BFS和DFS
  4. Python爬虫实战---抓取图书馆借阅信息
  5. Debian中proftpd+mysql+虚拟用户+匿名用户+磁盘限额的配置
  6. QUIC协议学习记录
  7. 【转载】三方框架整理
  8. 如何在宝塔面板中屏蔽垃圾蜘蛛?
  9. C#把excel数据转换成DataTable
  10. 逐个点评国奥球员_原水_新浪博客
  11. 7月份火爆Github的热门Python项目
  12. 30 年的 Hello world
  13. 小程序也能接广告了,微信小程序广告位投放指南!
  14. linux proftpd mysql_使用MySQL认证ProFTPD用户
  15. 『paddle』paddleclas 学习笔记:分类预训练模型选择
  16. 2021-09-16CSDN
  17. 成就系统实现(四)-测试和总结
  18. Camera Tuning
  19. 中科图灵发布国内首家开源免费的智慧消防云平台
  20. 实现原理 扫描枪_条码扫描枪的工作原理是什么?

热门文章

  1. fopen中mode参数 r, w, a, r+, w+, a+ 具体区别(转)
  2. 出生小镇、高考不顺、复旦执教、闯荡硅谷,59 岁陆奇为何如此“幸运”?
  3. HashMap原理浅析(关于红黑树是什么?)
  4. python测量血压_Python时间性能测量
  5. 可移植到51单片机_T9拼音输入法
  6. 锐龙r5 6600h和r7 6800h核显对比 r76800h和r56600h区别
  7. 这种生活同猪有什么不同?
  8. 计算机和信息技术主题,主题二信息技术及其应用和发展.ppt
  9. 2.爬虫之xpath选择器selenium模块
  10. 统计一个数中二进制数1的个数(新手篇10)