目录

  • 1.偶数分频
  • 2.奇数分频
  • 3.代码文件说明
  • 4.端口说明
  • 5.测试&波形
  • 6.代码
  • 7.Reference

1.偶数分频

对于占空比为50%,分频系数为N的偶数分频,其核心思想是使用计数范围为[0, (N/2)-1]的计数器,每当计数器计到最大值时输出时钟翻转一次,其余时间保持不变。

八分频示意图

2.奇数分频

奇数分频比偶数稍微复杂一些,为了实现50%的占空比,需要分别设置上升沿和下降沿触发的计数器,其核心思想是使用计数范围为[0, (N-1)/2]和[0, (N-1)]的计数器,各自输出当前有效沿下的时钟,最后将二者或起来,得到最终输出的时钟信号。

五分频示意图

3.代码文件说明

分频器的代码并不难,网上多数是奇偶分频分开写的代码,按照电路结构去理解,分频器分为奇偶数两个module是比较理想的。如果把奇偶两个模块写到一个module中,则会导致输出经过较多的逻辑电路,而且每次调用都会用上奇偶分频的全部模块,会浪费很多资源。调用本次代码时,只需例化Div.v,本次代码得到的都是 占空比为50% 的时钟。

名字 说明
div_even.v 偶数分频module
div_odd.v 奇数分频module
Div.v 例化奇偶分频module的顶层

4.端口说明

仅以Div.v这个module来说明:

名字 类型 说明
fre_div parameter 分频数
clk input 输入时钟
rst_n input 复位
clk_out output 输出时钟

5.测试&波形

为了进行测试,写了一个TOP文件:

//-----------------------------------------------------------------------------------------------
//  Copyright    :
//  File Name    : TOP
//  Author       : Luk.wj
//  Data         : 2021.10.14
//  Description  : TOP file for test
//-----------------------------------------------------------------------------------------------module TOP #(parameter    fre_div = 4    //frequency division
) (input        clk,input        rst_n,output       clk_out
);Div#(.fre_div   ( fre_div   )
)u1_Div(.clk       ( clk       ),.rst_n     ( rst_n     ),.clk_out   ( clk_out   )
);endmodule

测试中是四分频,波形如下图:

如果需要其他分频数,只需修改传递的参数即可。

6.代码

div_even.v代码:

//-----------------------------------------------------------------------------------------------
//  Copyright    :
//  File Name    : div_even
//  Author       : Luk.wj
//  Data         : 2021.10.13
//  Description  : Even frequency division
//-----------------------------------------------------------------------------------------------module div_even #(parameter    fre_div = 4    //frequency division
) (input            clk,input            rst_n,output reg       clk_out
);reg  [fre_div/2-1:0]    cnt;  always @(posedge clk or negedge rst_n) beginif (!rst_n) begincnt     <= 0;clk_out <= 1'b0;endelse if (cnt == (fre_div/2-1)) begincnt     <= 0;clk_out <= ~clk_out;endelsecnt <= cnt + 1;
endendmodule

div_odd.v代码:

//-----------------------------------------------------------------------------------------------
//  Copyright    :
//  File Name    : div_odd
//  Author       : Luk.wj
//  Data         : 2021.10.13
//  Description  : Odd numkber frequency division
//-----------------------------------------------------------------------------------------------module div_odd #(parameter    fre_div = 5    //frequency division
) (input            clk,input            rst_n,output           clk_out
);reg  [(fre_div-1)/2:0]    cnt_p, cnt_n;  //posedge, negedge count
reg  clk_p, clk_n;                       //posedge, negedge generate clock//====================================================  clk_p unit
always @(posedge clk or negedge rst_n) beginif (!rst_n) begincnt_p  <= 0;clk_p  <= 1'b0;endelse if (cnt_p == (fre_div-1)/2) beginclk_p  <= ~clk_p;cnt_p  <= cnt_p + 1;endelse if (cnt_p == (fre_div-1)) begincnt_p  <= 0;clk_p  <= ~clk_p;endelsecnt_p  <= cnt_p + 1;
end//====================================================  clk_n unit
always @(negedge clk or negedge rst_n) beginif (!rst_n) begincnt_n  <= 0;clk_n  <= 1'b0;endelse if (cnt_n == (fre_div-1)/2) beginclk_n  <= ~clk_n;cnt_n  <= cnt_n + 1;end  else if (cnt_n == (fre_div-1)) begincnt_n  <= 0;clk_n  <= ~clk_n;endelsecnt_n  <= cnt_n + 1;
endassign clk_out = clk_p | clk_n;endmodule

Div.v代码:

//-----------------------------------------------------------------------------------------------
//  Copyright    :
//  File Name    : Div
//  Author       : Luk.wj
//  Data         : 2021.10.14
//  Description  : Any integer frequency division module
//-----------------------------------------------------------------------------------------------module Div #(parameter    fre_div = 4    //frequency division
) (input        rst_n,input        clk,output       clk_out
);generate// Evenif (fre_div[0] == 1'b0) begin: divdiv_even#(.fre_div   ( fre_div   )) u1_div_even(.clk       ( clk       ),.rst_n     ( rst_n     ),.clk_out   ( clk_out   ));end// Oddelse begin: divdiv_odd#(.fre_div   ( fre_div   )) u1_div_odd(.clk       ( clk       ),.rst_n     ( rst_n     ),.clk_out   ( clk_out   ));end
endgenerateendmodule

7.Reference

https://blog.csdn.net/qq_36550892/article/details/126278909

Verilog实现---1/x任意整数分频器通用代码相关推荐

  1. Verilog任意整数分频器

    Verilog任意整数分频器 Verilog任意整数分频器 偶数分频 奇数分频 两种情况结合一下 在实际设计中有的时候需要简单的任意整数分频器,整数分频器主要解决两种情况下的分频,一个是偶数分频,另一 ...

  2. 用verilog语言写的任意整数的分频器

    占空比:对于一串理想的脉冲序列中(如方波),正脉冲的持续时间与脉冲总周期的比值,叫做这个方波的占空比. 分频分为奇分频和偶分频 第一,偶数倍分频:偶数倍分频应该是大家都比较熟悉的分频,通过计数器计数是 ...

  3. FPGA verilog 临近插值任意比例视频缩小代码(多像素并行,能支持8K60)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_46621272/article/ ...

  4. FPGA verilog 临近插值任意比例视频缩小代码

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_46621272/article/ ...

  5. 任意整数分频(图文并茂)

    上一篇文章讲解了如何进行任意的奇分频和任意的偶分频,这篇文章主要讲解占空比为50%的任意整数分频(奇分频和偶分频),下面首先以6分频和5分频来回顾一下奇偶分频. 偶分频 偶分频时最简单的,通过下图就可 ...

  6. matlab x为整数,关于matlab中用什么字符表示任意整数

    matlab做除法,怎么取整数? 方法一: floor(a/b);就是舍去小数点. ceil(a/b)就是舍去小数点+1的数. 方法二: fix(x)截尾取整 fix(x)不超过x的最大整数 ceil ...

  7. java 五个数字_关于java:五个任意整数找出其中第二大的数字

    package comxaqf.w02_objectoriented.a_saturday1030; import java.util.Scanner; /** [题6] 6.五个任意整数,找出其中第 ...

  8. C语言随笔小算法:取出一个任意整数的每一位数值

    C语言随笔小算法:取出一个任意整数的每一位数值 代码: #include "stdlib.h" #include "stdio.h"//将val的各位取出来 i ...

  9. mysql编写1到n的奇数和_编写程序。输入任意整数n,计算1到n的奇数和

    编写程序.输入任意整数n,计算1到n的奇数和以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 编写程序.输入任意整数n,计 ...

最新文章

  1. linux命令之date
  2. php恶意代码,警惕WordPress主题functions.php包含的恶意代码
  3. 高考数学经典题(001)
  4. 和至少为k的最短子数组 python_和至少为k的最短子数组
  5. 睡眠音频分割及识别问题(一)
  6. 动态路由协议的分类、动静态路由优缺点、RIP简介、组播单播广播详解(附图)
  7. Android中SQLiteOpenHelper类的onUpgrade方法浅谈
  8. MOT with a hierachical single branch network
  9. 2、ES5的严格模式use strict
  10. 实现滑动到中间变大的效果
  11. 汽车之家口啤数据爬虫
  12. 天龙八部谁是主角?(MR词频统计)
  13. 发票自动处理识别和分类
  14. Springboot整合redis切库问题
  15. 离散信号分解与卷积和
  16. 大饼“U”形底?ETR开始
  17. Manger配置同步任务
  18. windows 批量 jpg 转 bmp 方法
  19. ipad/iphone内存管理二
  20. buntu22.04安装WPS中文版(一百一十八)

热门文章

  1. DP56 打家劫舍(三)
  2. 疫情下的财税新政要谨记!
  3. 水电站生态下泄流量监测的意义
  4. 腾讯云接入备案流程 新手看过来
  5. 常用虚拟机服务器系统,虚拟机技术和Linux系统是工作站和服务器经常用到的
  6. 拉普拉斯变换-常微分方程
  7. (第一版) 完全免费的屏幕采集\录屏\直播推流的一体化工具
  8. 一分钟生成1000份Excel随机数工作簿
  9. 机器学习(周志华)西瓜书 课后习题4.3 信息熵决策树算法——python实现(包括树的可视化)
  10. 11g sqlplus报错ORA-28002: the password will expire within 3 days 的解决方法