verilog分频器设计
分频器是指使输出信号频率为输入信号频率整数分之一的电子电路。在许多电子设备中如电子钟、频率合成器等,需要各种不同频率的信号协同工作,常用的方法是以稳定度高的晶体振荡器为主振源,通过变换得到所需要的各种频率成分,分频器是一种主要变换手段。早期的分频器多为正弦分频器,随着数字集成电路的发展,脉冲分频器(又称数字分频器)逐渐取代了正弦分频器。下面以Verilog HDL 语言为基础介绍占空比为50%的分频器。
1 偶分频
偶分频比较简单,假设为N分频,只需计数到N/2-1,然后时钟翻转、计数清零,如此循环就可以得到N(偶)分频。代码如下。
module fp_even(clk_out,clk_in,rst);
output clk_out;
input clk_in;
input rst;
reg [1:0] cnt;
reg clk_out;
parameter N=6;
always @ (posedge clk_in or negedge rst)
begin
if(!rst)
begin
cnt <= 0;
clk_out <= 0;
end
else begin
if(cnt==N/2-1)
begin clk_out <= !clk_out; cnt<=0; end
else
cnt <= cnt + 1;
end
end
endmodule
可以通过改变参量N的值和计数变量cnt的位宽实现任意偶分频。
偶分频(N=6)的RTL原理图:
偶分频(N=6)的行为仿真结果:
2 奇分频
实现奇数(N)分频,分别用上升沿计数到(N-1)/2,再计数到N-1;用下降沿计数到(N-1)/2,再计数到N-1,得到两个波形,然后把它们相或即可得到N分频。代码如下:
module fp_odd(clk_out,clk_p,clk_n,clk_in,rst);
output clk_out;
output clk_p,clk_n;
input clk_in,rst;
reg [2:0] cnt_p,cnt_n;
reg clk_p,clk_n;
parameter N=5;
always @ (posedge clk_in or negedge rst)
begin
if(!rst) cnt_p <= 0;
else if(cnt_p==N-1) cnt_p <=0;
else cnt_p <= cnt_p + 1;
end
always @ (posedge clk_in or negedge rst)
begin
if(!rst) clk_p <= 0;
else if(cnt_p==(N-1)/2)
clk_p <= !clk_p;
else if(cnt_p==N-1)
clk_p <= !clk_p;
end
always @ (negedge clk_in or negedge rst)
begin
if(!rst) cnt_n <= 0;
else if(cnt_n==N-1) cnt_n <=0;
else cnt_n <= cnt_n + 1;
end
always @ (negedge clk_in or negedge rst)
begin
if(!rst) clk_n <= 0;
else if(cnt_n==(N-1)/2)
clk_n <= !clk_n;
else if(cnt_n==N-1)
clk_n <= !clk_n;
end
assign clk_out = clk_p | clk_n;
endmodule
RTL Schematic:
Simulate Behavioral Model:
同理,可以通过改变参量N的值和计数变量cnt_p和cnt_n的位宽实现任意奇分频。
3 任意占空比的任意分频
在verilog程序设计中,我们往往要对一个频率进行任意分频,而且占空比也有一定的要求这样的话,对于程序有一定的要求,现在在前面两个实验的基础上做一个简单的总结,实现对一个频率的任意占空比的任意分频。
比如: FPGA系统时钟是50M Hz,而我们要产生的频率是880Hz,那么,我们需要对系统时钟进行分频。很容易想到用计数的方式来分频:50000000/880 = 56818。显然这个数字不是2的整幂次方,那么我们可以设定一个参数,让它到56818的时候重新计数就可以实现了。程序如下:
module div(clk, clk_div);
input clk;
output clk_div;
reg [15:0] counter;
always @(posedge clk)
if(counter==56817) counter <= 0;
else counter <= counter+1;
assign clk_div = counter[15];
endmodule
分频的应用很广泛,一般的做法是先用高频时钟计数,然后使用计数器的某一位输出作为工作时钟进行其他的逻辑设计,上面的程序就是一个体现。
下面我们来算一下它的占空比:我们清楚地知道,这个输出波形在counter为0到32767的时候为低,在32768到56817的时候为高,占空比为40%多一些,如果我们需要占空比为50%,那么我们需要再设定一个参数,使它为56817的一半,使达到它的时候波形翻转,就可以实现结果了。程序如下:
module div(clk, clk_div);
input clk;
output clk_div;
reg [14:0] counter;
always @(posedge clk)
if(counter==28408) counter <= 0;
else counter <= counter+1;
reg clk_div;
always @(posedge clk)
if(counter==28408) clk_div <= ~clk_div;
endmodule
继续让我们来看如何实现任意占空比,比如还是由50 M分频产生880Hz,而分频得到的信号的占空比为30%。
56818×30%=17045
module div(clk,reset,clk_div,counter);
input clk,reset;
output clk_div;
output [15:0] counter;
reg [15:0] counter;
reg clk_div;
always @(posedge clk)
if(!reset) counter <= 0;
else if(counter==56817) counter <= 0;
else counter <= counter+1;
always @(posedge clk)
if(!reset) clk_div <= 0;
else if(counter<17045) clk_div <= 1;
else clk_div <= 0;
endmodule
RTL级描述:
仿真结果:
4 小结
通过以上几个例子对比不难发现,借助计数器来实现任意点空比的任意分频的方法简单,且用verilog语言进行行为描述时,代码简洁、易懂、通用。通过以上的学习,对分频器有了比较深刻的认识,将在以后的学习中会有广泛的应用。
verilog分频器设计相关推荐
- Verilog 分频器设计
目录 1.偶分频 2.奇分频 3.任意分频和占空比 在数字电路中,使用 Verilog 生成不同频率的时钟和占空比是较为常见的一种设计,主要分为偶数分频,奇数分频,也可以任意进行分频和占空比的配置: ...
- 数字分频器设计(偶数分频、奇数分频、小数分频、半整数分频、状态机分频|verilog代码|Testbench|仿真结果)
数字分频器设计 一.前言 二.偶数分频 2.1 触发器级联法 2.2 计数器法 2.3 verilog代码 2.4 Testbench 2.5 仿真结果 三.奇数分频 3.1 占空比非50%奇数分频 ...
- verilog将100mhz分频为1hz_50m 分频器设计——50MHZ(含verilog程序)
50m 分频器设计--50MHZ(含verilog程序) 分频器设计 一.实验目的 1.熟悉分频器的原理: 2.掌握采用Verilog HDL语言设计分频器的方法: 3.进一步学习利用VerilogH ...
- verilog将100mhz分频为1hz_verilog—分频器设计
常用分频器设计 (含 0.5hz . 1hz . 2hz . 100hz . 1khz . 100khz . 1MHZ ) 一. 原理图 二. 程序(输入频率为 50MHZ ) module divc ...
- verilog将100mhz分频为1hz_verilog—分频器设计 -
常用分频器设计 (含0.5hz.1hz.2hz.100hz.1khz.100khz.1MHZ) 一. 原理图 二. 程序(输入频率为50MHZ) module divclk(clk,div05hz,d ...
- (96)分频器设计(任意分频器)
(96)分频器设计(任意分频器) 1 文章目录 1)文章目录 2)FPGA入门与提升课程介绍 3)FPGA简介 4)分频器设计(任意分频器) 5)技术交流 6)参考资料 2 FPGA入门与提升课程介绍 ...
- (95)分频器设计(偶数分频)
(95)分频器设计(偶数分频) 1 文章目录 1)文章目录 2)FPGA入门与提升课程介绍 3)FPGA简介 4)分频器设计(偶数分频) 5)技术交流 6)参考资料 2 FPGA入门与提升课程介绍 1 ...
- (94)分频器设计(奇数分频)
(94)分频器设计(奇数分频) 1 文章目录 1)文章目录 2)FPGA入门与提升课程介绍 3)FPGA简介 4)分频器设计(奇数分频) 5)技术交流 6)参考资料 2 FPGA入门与提升课程介绍 1 ...
- 【FPGA】分频电路设计(Verilog HDL设计)(良心博文)
目录 前言 分频器分类 偶分频 奇分频 占空比为50%的奇分频 占空比不限定的奇数分频器 前言 虽然在实际工程中要产生分频时钟一般采用FPGA的时钟管理器来进行分频.倍频,通过设置一下IP核中的参数即 ...
最新文章
- 关于springboot vue前后端分离项目部署到阿里云轻量服务器(前后端分开部署)
- luogu P3850 [TJOI2007]书架(平衡树、无旋treap(按排名分裂))
- Android studio 4.1 不显示光标当前的类名、方法名
- CDQ分治 Jam's problem again [HDU - 5618]
- 前端:分享一些实用的JS代码片段
- 中航工业集团金网络(北京)电子商务有限公司副总经理刘正珩:航空“智”造的供应链支撑平台...
- 2020年数字营销与商业增长白皮书
- 计算机视觉基础——本质矩阵与基本矩阵(Essential and Fundamental Matrices)
- Airflow 中文文档:命令行界面
- Centos8.4 配置本地镜像yum源
- java中反复使用代码_Java代码复用规则
- [最小割][Kruskal] Luogu P5039 最小生成树
- 使用JavaScript分别实现4种样式的九九乘法表(1X1分别在左上、左下、右上、右下)...
- Microsoft SQL Server 自定义函数整理大全
- java和vue的狱警管理系统监狱系统狱务管理系统
- Go语言躲坑经验总结
- 延安大学计算机学院评分,延安大学计算机学院.docx
- 2022保研经验帖——吉大、华师、浙大、中大、南航/理、东南、南开等
- 基于Java毕业设计弹幕视频网站源码+系统+mysql+lw文档+部署软件
- JAVA订餐系统的心得体会