当前位置:   article > 正文

一看就会的奇偶分频电路_三分频电路

三分频电路

目录

前言

题目

二分频电路

第一步:画波形图

第二步:写状态机

三分频电路——1/3占空比

第一步:画波形图

第二步:写状态机

三分频电路——1/2占空比

第一步:画波形图

第二步:写状态机

4/5/6/7...分频电路

第一步:画波形图

总结


前言


最近又到了招聘季,招聘就离不开笔试面试,而在笔试面试过程中经常出现的一道题就是写出分频电路的verilog代码(以及电路图?),因此在这篇文章里,我们使用一个公式将所有分频电路套进去,以便于在考场上和仿真工具中轻松实现分频电路。

题目

实现2/3/4/5分频电路,给出一个模板:

  1. module clk_div(reset,clk_in,clk_out)
  2. input reset ;
  3. input clk_in ;
  4. output clk_out ;
  5. //#功能实现模块
  6. endmodule

二分频电路

第一步:画波形图

分频电路是将原始信号频率分成频率更小的衍生信号,信号频率变为二分之一,也就意味着周期变为2倍,因此直接将原本的2个周期所占用的时间现在变为一个周期,即可以生成一个二分频的信号。之所以采用波形图是因为波形图的直观性便于理解和思考,相对于抽象的代码和难以理解的电路图来说。


第二步:写状态机

按照三段式状态机的标准写法(以往文章有过介绍),写一个序列发生器,产生我们想要的信号。在二分频电路里,我们实际上是想实现重复的01信号的产生,这就是最简单的序列发生器。

  1. //#功能实现模块
  2. //三段式状态机
  3. //状态声明
  4. parameter s0 = 0 ;
  5. parameter s1 = 1 ;
  6. reg cs,ns
  7. always@(posedge clk_in) begin
  8. if (reset)
  9. cs <= s0;
  10. else
  11. cs <= ns;
  12. end
  13. //状态改变
  14. always@(*) begin
  15. case(cs)
  16. s0: ns = s1 ;
  17. s1: ns = s0 ;
  18. end
  19. //输出
  20. always@(*) begin
  21. case(cs)
  22. s0: clk_out = 0 ;
  23. s1: clk_out = 1 ;
  24. end

在二分频电路中产生的是循环的01信号,所以状态机只需要2个状态。二分频电路就这样产生了,接下来看三分频。

三分频电路——1/3占空比

第一步:画波形图

如上图所示,三分频电路即就是将原始clk信号三个周期的时间,变为新信号clk_out_3的一个周期。我们常见的周期信号都是占空比1/2的信号,但是在上图中我们可以看到三分频电路可以分为两种,一种就是1/2占空比(1.5,1.5?),而另一种就是1/3占空比的三分频信号(001,010,100)。按照本文的公式,后者这种规则的循环序列信号很容易产生。由易向难,我们先看1/3占空比的三分频电路。

第二步:写状态机

  1. //#功能实现模块
  2. //三段式状态机
  3. //状态声明
  4. parameter s0 = 0 ;
  5. parameter s1 = 1 ;
  6. parameter s2 = 2 ;
  7. reg [1:0]cs,ns
  8. always@(posedge clk_in) begin
  9. if (reset)
  10. cs <= s0;
  11. else
  12. cs <= ns;
  13. end
  14. //状态改变
  15. always@(*) begin
  16. case(cs)
  17. s0: ns = s1 ;
  18. s1: ns = s2 ;
  19. s2: ns = s0 ;
  20. end
  21. //输出
  22. always@(*) begin
  23. case(cs)
  24. s0: clk_out = 0 ;
  25. s1: clk_out = 0 ;
  26. s2: clk_out = 1 ;
  27. end

要实现三分频电路,那么要产生的序列就是001或者010或100,此时状态机有三个状态,所以需要2位寄存器。简单的1/3占空比三分频电路实现后,现在来看1/2占空比的三分频电路。

三分频电路——1/2占空比

第一步:画波形图

如上图所示,clk_out_3_2即为上面的1/3占空比电路,而现在我们要生成1/2占空比的三分频电路clk_out_3,那么我们就需要在下降沿控制原始信号。但是我们无法使用下降沿和上升沿同时去控制一根信号,所以我们可以使用clk_in的下降沿产生一个010序列信号clk_out_3_1。接下来将clk_out_3_1和clk_out_3_2信号进行或[ | ]操作,即可得到1/2占空比的3分频信号clk_out_3。

第二步:写状态机

  1. //#功能实现模块
  2. //三段式状态机
  3. //上升沿触发
  4. //状态声明
  5. parameter s0 = 0 ;
  6. parameter s1 = 1 ;
  7. parameter s2 = 2 ;
  8. reg [1:0]cs,ns
  9. always@(posedge clk_in) begin
  10. if (reset)
  11. cs <= s0;
  12. else
  13. cs <= ns;
  14. end
  15. //状态改变
  16. always@(*) begin
  17. case(cs)
  18. s0: ns = s1 ;
  19. s1: ns = s2 ;
  20. s2: ns = s0 ;
  21. end
  22. //输出
  23. always@(*) begin
  24. case(cs)
  25. s0: clk_out_1 = 0 ;
  26. s1: clk_out_1 = 0 ;
  27. s2: clk_out_1 = 1 ;
  28. end
  29. //三段式状态机
  30. //下降沿触发
  31. //状态声明
  32. reg [1:0]cts,nts
  33. always@(negedge clk_in) begin
  34. if (reset)
  35. cts <= s0;
  36. else
  37. cts <= nts;
  38. end
  39. //状态改变
  40. always@(*) begin
  41. case(cts)
  42. s0: nts = s1 ;
  43. s1: nts = s2 ;
  44. s2: nts = s0 ;
  45. end
  46. //输出
  47. always@(*) begin
  48. case(cts)
  49. s0: clk_out_2 = 0 ;
  50. s1: clk_out_2 = 1 ;
  51. s2: clk_out_2 = 0 ;
  52. end
  53. //final out
  54. clk_out = clk_out_1 | clk_out_2 ;

4/5/6/7...分频电路

根据上面的模式,我们想实现一个任意分频任意占空比的分频电路已经不是难事了,只要画出波形图,仔细分析想要实现的功能,然后剩下的就只是套用公式了。

第一步:画波形图

四分频电路波形图如下,用2分频电路再2分频即可得到,只需要再次例化二分频电路模块,不用修改模块内部代码即可实现。亦可直接用原始信号写一个具有4种状态的状态机,实现0011序列发生器。当然如果需要实现什么1/4占空比,3/8占空比,那也是被这套公式所支持的。

如下图所示,5分频电路其实就是3分频电路的扩展。使用上升沿实现00011的序列发生器,再使用下降沿实现00110的序列发生器,最后将产生的两个2/5占空比的5分频电路或起来,即可得到1/2占空比的5分频信号clk_out_5。奇分频电路的实现最重要的一点就是使用下降沿触发来实现那0.5,将多出来的这个1分成2个0.5给高电平和低电平。

总结

总的来说,实现奇偶分频电路,只需要套用上述公式,即可轻松得到任意分频任意占空比的分频信号。

最后再次总结一下公式:

1.画波形图 :偶数分频只需要数好周期数,即可找到中间点。而奇数分频可以先实现简单的接近中点的分频,例如1/3(1.5/3)占空比分频,2/5(2.5/5)占空比分频等等,然后将这个接近1/2占空比的信号利用下降沿平移半个原始信号的周期,即可出现那缺少的0.5,最后再通过或[ | ]得到最终的1/2占空比的信号。

2.写状态机:使用状态机实现序列发生器,通过观察波形图得到想要的是什么序列,然后依据本文中的代码示例状态机的格式和写法进行扩展,主要是状态机的状态个数。

希望这篇文章能够让你对奇偶分频增加更多的了解,欢迎指出错误和互相交流。

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

闽ICP备14008679号