Verilog实现---1/x任意整数分频器通用代码
目录
- 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任意整数分频器通用代码相关推荐
- Verilog任意整数分频器
Verilog任意整数分频器 Verilog任意整数分频器 偶数分频 奇数分频 两种情况结合一下 在实际设计中有的时候需要简单的任意整数分频器,整数分频器主要解决两种情况下的分频,一个是偶数分频,另一 ...
- 用verilog语言写的任意整数的分频器
占空比:对于一串理想的脉冲序列中(如方波),正脉冲的持续时间与脉冲总周期的比值,叫做这个方波的占空比. 分频分为奇分频和偶分频 第一,偶数倍分频:偶数倍分频应该是大家都比较熟悉的分频,通过计数器计数是 ...
- FPGA verilog 临近插值任意比例视频缩小代码(多像素并行,能支持8K60)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_46621272/article/ ...
- FPGA verilog 临近插值任意比例视频缩小代码
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_46621272/article/ ...
- 任意整数分频(图文并茂)
上一篇文章讲解了如何进行任意的奇分频和任意的偶分频,这篇文章主要讲解占空比为50%的任意整数分频(奇分频和偶分频),下面首先以6分频和5分频来回顾一下奇偶分频. 偶分频 偶分频时最简单的,通过下图就可 ...
- matlab x为整数,关于matlab中用什么字符表示任意整数
matlab做除法,怎么取整数? 方法一: floor(a/b);就是舍去小数点. ceil(a/b)就是舍去小数点+1的数. 方法二: fix(x)截尾取整 fix(x)不超过x的最大整数 ceil ...
- java 五个数字_关于java:五个任意整数找出其中第二大的数字
package comxaqf.w02_objectoriented.a_saturday1030; import java.util.Scanner; /** [题6] 6.五个任意整数,找出其中第 ...
- C语言随笔小算法:取出一个任意整数的每一位数值
C语言随笔小算法:取出一个任意整数的每一位数值 代码: #include "stdlib.h" #include "stdio.h"//将val的各位取出来 i ...
- mysql编写1到n的奇数和_编写程序。输入任意整数n,计算1到n的奇数和
编写程序.输入任意整数n,计算1到n的奇数和以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 编写程序.输入任意整数n,计 ...
最新文章
- linux命令之date
- php恶意代码,警惕WordPress主题functions.php包含的恶意代码
- 高考数学经典题(001)
- 和至少为k的最短子数组 python_和至少为k的最短子数组
- 睡眠音频分割及识别问题(一)
- 动态路由协议的分类、动静态路由优缺点、RIP简介、组播单播广播详解(附图)
- Android中SQLiteOpenHelper类的onUpgrade方法浅谈
- MOT with a hierachical single branch network
- 2、ES5的严格模式use strict
- 实现滑动到中间变大的效果
- 汽车之家口啤数据爬虫
- 天龙八部谁是主角?(MR词频统计)
- 发票自动处理识别和分类
- Springboot整合redis切库问题
- 离散信号分解与卷积和
- 大饼“U”形底?ETR开始
- Manger配置同步任务
- windows 批量 jpg 转 bmp 方法
- ipad/iphone内存管理二
- buntu22.04安装WPS中文版(一百一十八)
热门文章
- DP56 打家劫舍(三)
- 疫情下的财税新政要谨记!
- 水电站生态下泄流量监测的意义
- 腾讯云接入备案流程 新手看过来
- 常用虚拟机服务器系统,虚拟机技术和Linux系统是工作站和服务器经常用到的
- 拉普拉斯变换-常微分方程
- (第一版) 完全免费的屏幕采集\录屏\直播推流的一体化工具
- 一分钟生成1000份Excel随机数工作簿
- 机器学习(周志华)西瓜书 课后习题4.3 信息熵决策树算法——python实现(包括树的可视化)
- 11g sqlplus报错ORA-28002: the password will expire within 3 days 的解决方法