当前位置:   article > 正文

基于FPGA的分频器设计_用fpga实现分频

用fpga实现分频

分频器介绍

        在数电系统设计中,分频器的应用非常的广泛,它的功能就是对高频率的信号进行分频。分频器的本质上是加法器的演变,其计数值由分频系N=fin/fout决定,分频器输出的不是普通的计数值,而是根据分频系数对输出信号高低电平进行控制。分频器常用于数字电路中的时钟分频,用以得到较低的时钟信号、选通信号、中断信号等。分频器在公司的笔试题是必考题,这里我们主要介绍几种分频器,偶数分频、奇数分频。

 偶数分频器 

      偶数分频器是指分频系数为偶数,分频系数为N=2n(n=1,2,3....)。例如,输入的时钟信号为f,那么偶数分频器输出的时钟信号为F=f/2n(n=1,2,3....)。

分频系数为2的整数次幂的分频器

  •                                                              clk_even_div程序接口

名称

方向

位宽

说明

clk

Input

1

工作时钟

reset

Input

1

复位信号(active high)

clk_div

Output

1

分频时钟信号

  1. module clk_even_div(
  2. input clk,
  3. input reset,
  4. output reg clk_div=0
  5. );
  6. reg [2:0]cnt_div=0;
  7. //实现计数器计数功能
  8. always @(posedge clk)
  9. begin
  10. if(reset)begin
  11. cnt_div<=3'd0;
  12. clk_div<=1'b0;
  13. end
  14. else if(cnt_div==3'd6)begin
  15. cnt_div<=3'd0;
  16. clk_div<=~clk_div;
  17. end
  18. else begin
  19. cnt_div<=cnt_div+1'b1;
  20. end
  21. end
  22. endmodule

测试文件:

  1. module TB_clkdiv(
  2. );
  3. reg clk;
  4. reg reset;
  5. wire clk_div;
  6. clk_even_div inst_clk_even_div(
  7. .clk (clk),
  8. .reset (reset),
  9. .clk_div (clk_div)
  10. );
  11. initial begin
  12. clk=0;
  13. reset=1;
  14. #100;
  15. reset=0;
  16. end
  17. always #10 clk=~clk;//50M 时钟
  18. endmodule

仿真结果:

分频系数不是2的整数次幂的分频器

对于分频系数不是2的整数次幂的分频器来说,我们可以使用计数器实现分频功能,至需要我们对计数器进行一些控制操作。例如,分频系数是14,那么我们就计数到6时对分频信号就行取反操作就可以了。

                                                                     clk_even_div程序接口

名称

方向

位宽

说明

clk

Input

1

工作时钟

reset

Input

1

复位信号(active high)

clk_div

Output

1

分频时钟信号

测试文件:

仿真结果:

奇数分频器

奇数分频器就是分频系数为奇数N=2n+1(n=1,2,3.....).如果输入的时钟信号为f,那么分频时钟信号为f/(2n+1);奇数分频器在公司笔试中用的最多。

占空比为1:1的奇数分频器

占空比为1:1的技术分频器需要在输入时钟信号的下降沿时进行翻转操作。这种分频器的设计需要两个计数器,一个计数器采用时钟的上升沿触发,另一个计数器采用时钟的下降沿触发;两个计数器的模和分频系数相同,然后根据两个计数器的并行信号输出决定两个相应的电平控制信号;最后对两个电平控制信号进行相应的逻辑运算就可以了。

                                                                        clk_odd_div程序接口

名称

方向

位宽

说明

clk

Input

1

工作时钟

reset

Input

1

复位信号(active high)

clk_div

Output

1

分频时钟信号

  1. module clk_odd_div(
  2. input clk,
  3. input reset,
  4. output clk_even
  5. );
  6. reg [3:0]count1,count2;
  7. reg clka,clkb;
  8. parameter N=5;//改变N的值就可以得到不同的奇分频的波形(占空比是11的)
  9. assign clk_even=clka|clkb;
  10. ///
  11. always @(posedge clk )
  12. begin
  13. if(reset)
  14. begin
  15. count1<=0;
  16. clka<=0;
  17. end
  18. else
  19. begin
  20. if(count1<(N-1))
  21. begin
  22. count1<=count1+1;
  23. if(count1<(N-1)/2)
  24. begin
  25. clka<=0;
  26. end
  27. else if(count1>=(N-1)/2)
  28. begin
  29. clka<=1;
  30. end
  31. end
  32. else
  33. begin
  34. clka<=0;
  35. count1<=0;
  36. end
  37. end
  38. end
  39. always @(negedge clk )
  40. begin
  41. if(reset)
  42. begin
  43. count2<=0;
  44. clkb<=0;
  45. end
  46. else
  47. begin
  48. if(count2<(N-1))
  49. begin
  50. count2<=count2+1;
  51. if(count2<(N-1)/2)
  52. begin
  53. clkb<=0;
  54. end
  55. else if(count2>=(N-1)/2)
  56. begin
  57. clkb<=1;
  58. end
  59. end
  60. else
  61. begin
  62. clkb<=0;
  63. count2<=0;
  64. end
  65. end
  66. end
  67. endmodule

测试文件

仿真结果

想学习FPGA的联系我哦!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/784912
推荐阅读
相关标签
  

闽ICP备14008679号