当前位置:   article > 正文

EDA(Quartus II)——数控分频器的设计_quartus中分频器模块的设计原理

quartus中分频器模块的设计原理

目录

实验目的:

实验预习:

实验讲解:分频器的设计

偶分频器的设计(以6分频器为例)

奇分频器的设计(以9分频器为例)

30分频器设计

实验内容:数控分频器的设计

源代码

仿真波形

硬件验证

课后作业

 实验总结


实验目的:

学习数控分频器的设计、分析和测试方法,练习计数器的设计应用。

实验预习:

熟悉计数器的设计;了解如何用计数器实现分频器的设计。

实验讲解:分频器的设计

思考两个问题:

Q:什么是分频器,什么是分频系数?

A:能将频率高的信号clk转变为频率低的信号clk_1的电路叫分频器,如果clk_1信号的周期为clk周期的n倍,则n为分频系数)

Q:分频器设计的核心思想是什么?

A:计数器的设计)

偶分频器的设计(以6分频器为例)

  1. module dvf6(clk,clk_1);
  2. input clk;
  3. output reg clk_1;
  4. reg[2:0] q;
  5. always@(posedge clk)
  6. begin
  7. if(q==3'b101) q<=3'b000;
  8. else q<=q+1;
  9. end
  10. always@(q)
  11. begin
  12. if(q>=3b'011) clk_1<=1'b1;
  13. else clk_1<=1'b0;
  14. end
  15. endmodule
  16. 另一种设计方案
  17. module dvf6(clk,clk_1);
  18. input clk;
  19. output reg clk_1;
  20. reg[2:0] q;b
  21. always@(posedge clk)
  22. begin
  23. if(q==3'b010) begin q<=q+3'b001; clk_1<=~clk_1;end
  24. else if (q==3'b101) begin q<=3'b000; clk_1<=~clk_1;end
  25. else q<=q+3'b001;
  26. end
  27. endmodule

奇分频器的设计(以9分频器为例)

解释:

       奇数分频器的设计比偶数分频器复杂一些,特别是占空比为50%的奇数分频器。

        如果对占空比没有明确的要求,则可以直接对上升沿计数,计数到(N-1)/2 时让输出翻转,计数到(N-1)时让输出状态再次翻转,并将计数器清零,这样就可以得到一个占空比为2:3的N分频(N为奇数)的分频器。

        如果要实现50%的占空比,可以通过“错位相或”的方法实现。

        先通过对上升沿计数到(N-1)/2产生一个占空比为不是50%的N分频器,再用同样的方法对下降沿计数(N-1)/2产生一个占空比也不是50%的N分频器,最后将这两个分频器的输出进行“或”运算,就可以得到占空比为50%的奇数N分频器,实现代码如下:

注意:计数都是从0开始的。在翻转电平时,需注意这一点。

  1. module dvf9(clk,clk_1);
  2. input clk;
  3. output clk_1;
  4. reg[3:0] q1,q2;
  5. reg clk_p,clk_n;
  6. always@(posedge clk)
  7. begin
  8. if(q1==4'b100) begin q1<=q1+4'b0001;clk_p<=~clk_p;end
  9. else if(q1==4'b1000) begin q1<=4'b0000;clk_p<=~clk_p;end
  10. else q1<=q1+4'b0001;
  11. end
  12. always@(negedge clk)
  13. begin
  14. if(q2==4'b0100) begin q2<=q2+4'b0001;clk_n<=~clk_n;end
  15. else if (q2==4'b1000) begin q2<=4'b0000;clk_n<=~clk_n;end
  16. else q2<=q2+4'b0001;
  17. end
  18. assign clk_1=clk_p|clk_n;
  19. endmodule

30分频器设计

  1. module dvf_30(clk,clk_1);
  2. input clk;
  3. output reg clk_1;
  4. reg[4:0] q;
  5. always@(posedge clk)
  6. begin
  7. if(q==5'b11101) q<=5'b00000;
  8. else q<=q+1;
  9. end
  10. always@(q)
  11. begin
  12. if(q>=4'b1111) clk_1<=1'b1;
  13. else clk_1<=1'b0;
  14. end
  15. endmodule

实验内容:数控分频器的设计

数控分频器的功能就是当在输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比,数控分频器就是用计数值可并行预置的加法计数器设计完成的,方法是将计数溢出位与预置数加载输入信号相接即可。

源代码

  1. module dvf_suk(clk,D,fout,full_1);
  2. input clk;
  3. input [7:0] D;
  4. output reg fout;
  5. reg[7:0] reg8;
  6. reg full;
  7. output full_1;
  8. always@(posedge clk)
  9. begin
  10. if(reg8==8'hff) begin reg8<=D;full<=1'b1; end
  11. else begin reg8<=reg8+8'b1;full<=1'b0; end
  12. end
  13. always@(posedge full)
  14. begin
  15. fout<=~fout;
  16. end
  17. assign full_1=full;
  18. endmodule

仿真波形

硬件验证

设计数控分频器的功能时,可选实验电路模式1,其中键2/键1负责输入8位预置数D(PIO7~PIO0);CLK由clockB0输入,频率选65536Hz或更高(确保分频后落在音频范围);输出接入蜂鸣器信号输入端。改变键2/键1的输入值,可听到不同音调的声音。

课后作业

利用两个数控分频器模块设计一个电路,使其输出方波的正负脉宽的宽度分别由两个8位输入数据控制。

参考原理图

仿真波形

 实验总结

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

闽ICP备14008679号