当前位置:   article > 正文

基础电路设计之——奇数分频器 Verilog实现_verilog分频电路不使用下降沿

verilog分频电路不使用下降沿

若要实现分N频占空比非50%的奇数分频器,只需要计数到(N-1)/2时取反输出,计数到N-1时再次取反输出即可。

若要实现占空比为50%的奇数分频器,核心问题是如何处理半个周期,考虑到一个周期内clk的上升沿和下降沿正好相差半个周期,所以分别利用上升沿和下降沿得到两个占空比非50%的奇数分频器,这两个奇数分频器的上升沿、下降沿都相差半个周期,因此再将这两个占空比非50%的奇数分频器相或,就能实现占空比为50%的奇数分频器

占空比非50%奇数分频器Verilog代码

  1. //5分频、占空比32的奇数分频器
  2. module Riven(
  3. clk,
  4. rst,
  5. clko
  6. );
  7. input clk;
  8. input rst;
  9. parameter N = 5;
  10. output reg clko = 0;
  11. reg [3:0] cnt = 0;
  12. always @(posedge clk or negedge rst) begin
  13. if(!rst) begin
  14. //cnt <= 0;
  15. clko <= 0;
  16. end
  17. else if(cnt == (N-1)/2) begin
  18. clko <= ~clko;
  19. cnt <= cnt + 1;
  20. end
  21. else if(cnt == N-1) begin
  22. cnt <= 0;
  23. clko <= ~clko;
  24. end
  25. else begin
  26. cnt <= cnt + 1;
  27. end
  28. end
  29. endmodule

Modelsim输入代码,只写了关键的一部分。

  1. initial
  2. begin
  3. clk = 0;
  4. forever
  5. #25clk = ~clk;
  6. $display("Running testbench");
  7. end
  8. initial
  9. begin
  10. rst = 0;
  11. #1000;
  12. rst = 1;
  13. #1000;
  14. rst = 0;
  15. #1000;
  16. rst = 1;
  17. #1000;
  18. $stop;
  19. end

Modelsim仿真结果

占空比50%的技术分频器Verilog代码

  1. //5分频、占空比50%的奇数分频器
  2. module Fiora(
  3. clk,
  4. rst,
  5. clko1,
  6. clko2,
  7. clko
  8. );
  9. input clk;
  10. input rst;
  11. parameter N = 5;
  12. output reg clko1 = 0;
  13. output reg clko2 = 0;
  14. output reg clko = 0;
  15. reg [3:0] cnt1 = 0;
  16. reg [3:0] cnt2 = 0;
  17. always @(posedge clk or negedge rst) begin
  18. if(!rst) begin
  19. cnt1 <= 0;
  20. clko1 <= 0;
  21. end
  22. else if(cnt1 == (N-1)/2) begin
  23. clko1 <= 1;
  24. cnt1 <= cnt1 + 1;
  25. end
  26. else if(cnt1 == N-1) begin
  27. cnt1 <= 0;
  28. clko1 <= 0;
  29. end
  30. else begin
  31. cnt1 <= cnt1 + 1;
  32. end
  33. end
  34. always @(negedge clk or negedge rst) begin
  35. if(!rst) begin
  36. cnt2 <= 0;
  37. clko2 <= 0;
  38. end
  39. else if(cnt2 == (N-1)/2) begin
  40. clko2 <= 1;
  41. cnt2 <= cnt2 + 1;
  42. end
  43. else if(cnt2 == N-1) begin
  44. cnt2 <= 0;
  45. clko2 <= 0;
  46. end
  47. else begin
  48. cnt2 <= cnt2 + 1;
  49. end
  50. end
  51. always@(*)begin clko = clko1|clko2;end
  52. endmodule

 Modelsim仿真结果

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

闽ICP备14008679号