本文介绍了偶数分频和奇数分频电路的设计,分别从简单的分频介绍开始,延伸到任意N分频电路的设计,做了详细的说明,并且附有verilog源程序,并有仿真结果。

在数字逻辑电路中,分频器是一种常用电路,通常用来对某个给定的频率进行分频,以得到所需的频率。
1.1、 偶数分频电路
偶数倍分频是最简单的一种分频模式,完全可以通过计数器计数实现,如果要进行N倍(N为偶数)偶数分频,可由待分频的时钟触发计数器计数,当计数器从0计数到N/2—1时,输出时钟进行翻转,并给计数器一个复位信号,使得下一个时钟从零开始计数,以此循环下去。这种方法可以实现任意的偶数分频。下面的程序给出的是一个16分频电路,其他倍数的分频电路可以通过修改计数器的上限值得到。
 用Verilog实现一个16分频电路,其源程序如下。

module clk_div16(clk_in,reset,clk_out);
 input clk_in;
 input reset;
 output clk_out;
 
 reg clk_out;
 reg[2:0] cnt;
 always@(posedge clk_in) begin
  if(!reset) begin
   cnt<=0;
   clk_out<=0;
  end
  else
   if(cnt==7) begin
    clk_out<=~clk_out;
    cnt<=0;
   end
   else begin
    cnt<=cnt+1;
    //clk_out<=clk_out;
   end
 end
endmodule

测试激励程序如下:

module clk_div16_tb;
 reg clk_in;
 reg reset;
 wire clk_out;

clk_div16 uut (
  .clk_in(clk_in),
  .reset(reset),
  .clk_out(clk_out)
 );

initial begin
  // Initialize Inputs
  clk_in = 0;
  reset = 0;
  #10 reset=1;
  end
  
 always #2 clk_in=~clk_in;
endmodule

上述程序经过Synplify Pro 综合后,其RTL级结构如下图所示
 
在ModelSim6.5中完成仿真,结果如图所示。

总结:如果要实现任意N(偶数)分频电路。其程序如下
module clk_divN(clk_in,reset,clk_out);
 input clk_in;
 input reset;
 output clk_out;
 
 reg clk_out;
 reg[2:0] cnt;
 
 parameter N=8;//只需修改N的值即可
 
 always@(posedge clk_in) begin
  if(!reset) begin
   cnt<=0;
   clk_out<=0;
  end
  else
   if(cnt==(N/2-1)) begin
    clk_out<=~clk_out;
    cnt<=0;
   end
   else begin
    cnt<=cnt+1;
    clk_out<=clk_out;
   end
 end
endmodule

1.2、 奇数分频电路
奇数分频电路有多种实现方式,下面介绍常用的错位“异或”法的原理。如果要进行3分频,通过待分频时钟上升沿触发计数器进行模3计数,当计数器计到邻近值时进行两次翻转。比如在计数器计计数到1时,输出时钟进行翻转;计数到2时,再次翻转,即在邻近的1和2时刻进行两次翻转,在0时刻不翻转。这样实现的3分频占空比为1/3或2/3。如果要实现占空比为50%的3分频时钟,可以通过待分频时钟下降沿触发计数,和上升沿同样的方法计数进行3分频,然后将下降沿产生的3分频时钟和上升沿产生的时钟进行相或运算,即可得到占空比为50%的3分频时钟。
 这种错位“异或”法可以推广到实现任意的奇数分频:对于实现占空比为50%的N倍奇数分频,首先进行上升沿触发的模N计数,计数到某一选定值时(0到N—1之间的任意数值,比如在计数为0)进行输出时钟翻转,然后经过(N-1)/2再次翻转,得到一个占空比非50%的奇数N分频电路。再者,同时进行下降触发沿的模N计数,和上升沿触发输出时钟翻转选定值相同的值时,进行输出时钟翻转,同样经过(N-1)/2,输出时钟再次翻转,生成占空比非50%的奇数N分频时钟。将两个占空比非50%的N分频时钟相或运算,得到占空比为50%的奇数N分频时钟。
使用Verilog程序实现3分频电路:
module clk_div3(clk_in,reset,clk_out);
 input clk_in;
 input reset;
 output clk_out;
 
 integer cnt1,cnt2;
 reg clk_div3p;
 reg clk_div3n;
 
 always@(posedge clk_in) begin
  if(!reset) begin
   clk_div3p<=0;
   cnt1<=0;
  end
  else
   if(cnt1==2)
    cnt1<=0;
   else begin
    cnt1<=cnt1+1;
    clk_div3p<=~clk_div3p;
   end
 end
 
 always@(negedge clk_in) begin
  if(!reset) begin
   clk_div3n<=0;
   cnt2<=0;
  end
  else
   if(cnt2==2)
    cnt2<=0;
   else begin
    cnt2<=cnt2+1;
    clk_div3n<=~clk_div3n;
   end
 end

assign clk_out=clk_div3p|clk_div3n;

endmodule

测试激励程序如下:
module clk_div3_tb;

// Inputs
 reg clk_in;
 reg reset;

// Outputs
 wire clk_out;

// Instantiate the Unit Under Test (UUT)
 clk_div3 uut (
  .clk_in(clk_in),
  .reset(reset),
  .clk_out(clk_out)
 );

initial begin
  // Initialize Inputs
  clk_in = 0;
  reset = 0;
  #10 reset=1;
 end
 
 always #2 clk_in=~clk_in;
     
endmodule

经ModleSim6.5仿真后的图形如下图

总结:如果要实现任意N(奇数)分频电路。其程序如下
module clk_divN(clk_in,reset,clk_out);
 input clk_in;
 input reset;
 output clk_out;
 
 integer cnt1,cnt2;
 reg clk_div3p;
 reg clk_div3n;
 parameter n=19 ; //N一定要为奇数
 
 always@(posedge clk_in) begin
  if(!reset) begin
   clk_div3p<=0;
   cnt1<=0;
  end
  else
  if(cnt1==(n-1))
   cnt1<=0;  
  else
   if((cnt1==1)|(cnt1==(1+(n-1)/2))) begin
    cnt1<=cnt1+1;
    clk_div3p<=~clk_div3p;
   end
   else
    cnt1<=cnt1+1; 
 end

always@(negedge clk_in) begin
  if(!reset) begin
   clk_div3n<=0;
   cnt2<=0;
  end
  else
   if(cnt2==(n-1))
    cnt2<=0;
   else
    if((cnt2==1)|(cnt2==(1+(n-1)/2))) begin
    cnt2<=cnt2+1;
    clk_div3n<=~clk_div3n;
   end
   else
    cnt2<=cnt2+1;
 end

assign clk_out=clk_div3p|clk_div3n;

endmodule
经ModleSim6.5仿真后的图形如下图

2012-5-13

转载于:https://blog.51cto.com/lihaichuan/979573

verilog奇偶分频相关推荐

  1. verilog奇偶分频详解

    文章目录 偶分频 2分频 2N分频 奇分频 3分频高电平 3分频低电平 一般结果推导 奇偶分频是一个很常见的问题,这里探讨的分频都是对于占空比为50%的信号分频,分频后的信号也是50%占空比.分频原信 ...

  2. Verilog奇偶分频电路的总结

    1.偶数分频 偶数倍分频相对简单,可以通过计数器对预分频的脉冲沿计数实现,如果要进行N倍(N为整数)偶数分频,可由预分频的时钟触发计数器计数,当计数器从0计数到N/2-1时,输出时钟进行翻转,并给计数 ...

  3. 一看就会的奇偶分频电路

    目录 前言 题目 二分频电路 第一步:画波形图 第二步:写状态机 三分频电路--1/3占空比 第一步:画波形图 第二步:写状态机 三分频电路--1/2占空比 第一步:画波形图 第二步:写状态机 4/5 ...

  4. 【数字IC手撕代码】Verilog奇数分频|题目|原理|设计|仿真(三分频,五分频,奇数分频及特殊占空比)

    芯片设计验证社区·芯片爱好者聚集地·硬件相关讨论社区·数字verifier星球 四社区联合力荐!近500篇数字IC精品文章收录! [数字IC精品文章收录]学习路线·基础知识·总线·脚本语言·芯片求职· ...

  5. verilog奇数分频,三分频实例

    verilog奇数分频,三分频实例 目的:输入一个时钟信号,输出占空比为50%的三分频. 首先得到一个占空比为1/3的分频时钟,然后将输入信号取反,得到一个移相180度的占空比为1/3的分频时钟,将两 ...

  6. verilog之分频大全

    verilog各种分频大全--50占空比三分频 偶数分频 时序图 代码 module div_even (input clk,input rst_n,output clk_out ); paramet ...

  7. verilog二分频代码verilog三分频代码

    1.二分频 首先要明白,二分频分的是输入时钟的频率,即CLK的频率. 思路:在每次CLK的上升沿或者下降沿让输出Q翻转不就完成频率的二分了吗? 代码: module div_2 (q,clk,rese ...

  8. 【数字IC手撕代码】Verilog偶数分频|题目|原理|设计|仿真(二分频,四分频,六分频,八分频,偶数分频及特殊占空比)

    芯片设计验证社区·芯片爱好者聚集地·硬件相关讨论社区·数字verifier星球 四社区联合力荐!近500篇数字IC精品文章收录! [数字IC精品文章收录]学习路线·基础知识·总线·脚本语言·芯片求职· ...

  9. 【FPGA】Verilog实现奇偶分频

    文章目录 一.奇分频 一.代码部分 二.仿真部分 二.偶分频 一.代码部分 二.仿真部分 三.D触发器二分频 一.代码部分 二.仿真部分 四.总结 一.奇分频 一.代码部分 // 奇分频 module ...

最新文章

  1. 中国计算机学会CCF推荐国际学术会议和期刊目录-计算机科学理论
  2. Python运维-获取当前操作系统的各种信息
  3. 1.3编程基础之算术表达式与顺序执行 01 A+B问题 (Python3实现)
  4. html脚本类型,HTML脚本标记:类型或语言(或省略两者)?
  5. linux内核系列之二_资源
  6. 汇编64位无法生成可用exe_MASM学习x86汇编语言2 寄存器、伪指令与程序调试
  7. 4米乘以12米CAD图_【超干货】CAD铺装排版下料之路径阵列
  8. 企业微信webhook使用
  9. 1到10加法创新图片-走迷宫_“小火锅+关东煮”,呷哺呷哺又创新模式!客单提到110元!...
  10. 基于Neo4j实现数据血缘管理
  11. 初级软件测试工程师:测试路上披荆斩棘,争做大厂程序员,斩获高薪offer~
  12. 水纹效果(Water)源程序.
  13. django+vue全
  14. postgresql时区
  15. 图灵的停机问题背后令人着迷的数学(哲学)原理
  16. python实现cv2图片读取显示及图片不显示或显示不全的问题分析
  17. 【计算机网络】LAN、WIFI与LTE
  18. 身体语言密码_《身体语言密码》人如果整天揣摩别人的心思,那就太可悲了
  19. 基于 Go 语言开发 Serverless 云原生应用
  20. U盘误格式化后恢复操作

热门文章

  1. 又有微软AI科学家流向产业,小鹏汽车迎来视觉感知负责人郭彦东
  2. 用FBI通缉犯照片集,考验亚马逊人脸识别,意外发现了隐情
  3. Waymo无人出租车年底发射,现已进入定价环节 | 公交部门竟成友军?
  4. 为AI芯片铺路?原三星半导体周军加盟Rokid
  5. 解释stateless worker
  6. 11月23日python笔记(python基础2.6-3.0)
  7. 【JVM】第1篇:JVM内存模型
  8. OpenBSD 将迎来原生的 Hypervisor
  9. SQL Server学习笔记
  10. 第10篇 WINDOWS2003服务器 IIS上配置404页面的图文教程