分频器是指使输出信号频率为输入信号频率整数分之一的电子电路。在许多电子设备中如电子钟、频率合成器等,需要各种不同频率的信号协同工作,常用的方法是以稳定度高的晶体振荡器为主振源,通过变换得到所需要的各种频率成分,分频器是一种主要变换手段。早期的分频器多为正弦分频器,随着数字集成电路的发展,脉冲分频器(又称数字分频器)逐渐取代了正弦分频器。下面以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分频器设计相关推荐

  1. Verilog 分频器设计

    目录 1.偶分频 2.奇分频 3.任意分频和占空比 在数字电路中,使用 Verilog 生成不同频率的时钟和占空比是较为常见的一种设计,主要分为偶数分频,奇数分频,也可以任意进行分频和占空比的配置: ...

  2. 数字分频器设计(偶数分频、奇数分频、小数分频、半整数分频、状态机分频|verilog代码|Testbench|仿真结果)

    数字分频器设计 一.前言 二.偶数分频 2.1 触发器级联法 2.2 计数器法 2.3 verilog代码 2.4 Testbench 2.5 仿真结果 三.奇数分频 3.1 占空比非50%奇数分频 ...

  3. verilog将100mhz分频为1hz_50m 分频器设计——50MHZ(含verilog程序)

    50m 分频器设计--50MHZ(含verilog程序) 分频器设计 一.实验目的 1.熟悉分频器的原理: 2.掌握采用Verilog HDL语言设计分频器的方法: 3.进一步学习利用VerilogH ...

  4. verilog将100mhz分频为1hz_verilog—分频器设计

    常用分频器设计 (含 0.5hz . 1hz . 2hz . 100hz . 1khz . 100khz . 1MHZ ) 一. 原理图 二. 程序(输入频率为 50MHZ ) module divc ...

  5. verilog将100mhz分频为1hz_verilog—分频器设计 -

    常用分频器设计 (含0.5hz.1hz.2hz.100hz.1khz.100khz.1MHZ) 一. 原理图 二. 程序(输入频率为50MHZ) module divclk(clk,div05hz,d ...

  6. (96)分频器设计(任意分频器)

    (96)分频器设计(任意分频器) 1 文章目录 1)文章目录 2)FPGA入门与提升课程介绍 3)FPGA简介 4)分频器设计(任意分频器) 5)技术交流 6)参考资料 2 FPGA入门与提升课程介绍 ...

  7. (95)分频器设计(偶数分频)

    (95)分频器设计(偶数分频) 1 文章目录 1)文章目录 2)FPGA入门与提升课程介绍 3)FPGA简介 4)分频器设计(偶数分频) 5)技术交流 6)参考资料 2 FPGA入门与提升课程介绍 1 ...

  8. (94)分频器设计(奇数分频)

    (94)分频器设计(奇数分频) 1 文章目录 1)文章目录 2)FPGA入门与提升课程介绍 3)FPGA简介 4)分频器设计(奇数分频) 5)技术交流 6)参考资料 2 FPGA入门与提升课程介绍 1 ...

  9. 【FPGA】分频电路设计(Verilog HDL设计)(良心博文)

    目录 前言 分频器分类 偶分频 奇分频 占空比为50%的奇分频 占空比不限定的奇数分频器 前言 虽然在实际工程中要产生分频时钟一般采用FPGA的时钟管理器来进行分频.倍频,通过设置一下IP核中的参数即 ...

最新文章

  1. 关于springboot vue前后端分离项目部署到阿里云轻量服务器(前后端分开部署)
  2. luogu P3850 [TJOI2007]书架(平衡树、无旋treap(按排名分裂))
  3. Android studio 4.1 不显示光标当前的类名、方法名
  4. CDQ分治 Jam's problem again [HDU - 5618]
  5. 前端:分享一些实用的JS代码片段
  6. 中航工业集团金网络(北京)电子商务有限公司副总经理刘正珩:航空“智”造的供应链支撑平台...
  7. 2020年数字营销与商业增长白皮书
  8. 计算机视觉基础——本质矩阵与基本矩阵(Essential and Fundamental Matrices)
  9. Airflow 中文文档:命令行界面
  10. Centos8.4 配置本地镜像yum源
  11. java中反复使用代码_Java代码复用规则
  12. [最小割][Kruskal] Luogu P5039 最小生成树
  13. 使用JavaScript分别实现4种样式的九九乘法表(1X1分别在左上、左下、右上、右下)...
  14. Microsoft SQL Server 自定义函数整理大全
  15. java和vue的狱警管理系统监狱系统狱务管理系统
  16. Go语言躲坑经验总结
  17. 延安大学计算机学院评分,延安大学计算机学院.docx
  18. 2022保研经验帖——吉大、华师、浙大、中大、南航/理、东南、南开等
  19. 基于Java毕业设计弹幕视频网站源码+系统+mysql+lw文档+部署软件
  20. JAVA订餐系统的心得体会

热门文章

  1. 可视化分享ppt2019-01
  2. 微信网页开发 分享功能剖析
  3. CiteSpace文献共被引图谱含义详细解析
  4. WinScp批量下载脚本
  5. 学习php的步骤是什么?
  6. m3u8下载工具分享
  7. 控制器的基本组成与实现
  8. 安装了不兼容的APR(基于Apache Tomcat原生库)版本的问题解决
  9. 小i智慧学堂复旦开讲人工智能时代运营管理创新
  10. 存储系统基础知识与RAID存储技术介绍【转载自微信公众号开源Linux】