当前位置:   article > 正文

奇数分频实现(3分频为例子)_三分频时钟原理

三分频时钟原理

1、通过时钟相或实现奇数分频

原时钟clk通过上升沿和下降沿计数产生时钟clk1和clk2,clk1和clk2相或产生clk三分频的clk_div3时钟。

clk1:原时钟clk的上升沿产生。

clk2:原时钟clk的下降沿产生。

clk1和clk2的特征:

3分频——高电 : 低电平 = 1 : 2

2N+1分频——高电 : 低电平 = N : N+1

 代码:

  1. `timescale 1ns/1ns
  2. module test(
  3. input clk_150 ,
  4. input rst_n ,
  5. output clk_div3
  6. );
  7. reg [3:0] cnt_1; //上升沿计数
  8. reg [3:0] cnt_2; //下降沿计数
  9. reg clk1;
  10. reg clk2;
  11. assign clk_div3 = clk1 | clk2;
  12. always@(posedge clk_150 or negedge rst_n)
  13. begin
  14. if (!rst_n)
  15. cnt_1 <= 4'd0;
  16. else
  17. cnt_1 <= (cnt_1 == 4'd2) ? 4'd0 : cnt_1 + 4'd1;
  18. end
  19. always@(posedge clk_150 or negedge rst_n)
  20. begin
  21. if (!rst_n)
  22. clk1 <= 1'b0;
  23. else
  24. clk1 <= (cnt_1 == 4'd1) ? 1'b1 : 1'b0;
  25. end
  26. always@(negedge clk_150 or negedge rst_n)
  27. begin
  28. if (!rst_n)
  29. cnt_2 <= 4'd0;
  30. else
  31. cnt_2 <= (cnt_2 == 4'd2) ? 4'd0 : cnt_2 + 4'd1;
  32. end
  33. always@(negedge clk_150 or negedge rst_n)
  34. begin
  35. if (!rst_n)
  36. clk2 <= 1'b0;
  37. else
  38. clk2 <= (cnt_2 == 4'd1) ? 1'b1 : 1'b0;
  39. end
  40. endmodule

仿真图:

 2、通过时钟相与实现奇数分频

原时钟clk通过上升沿和下降沿计数产生时钟clk1和clk2,clk1和clk2相与产生clk三分频的clk_div3时钟。

clk1:原时钟clk的上升沿产生。

clk2:原时钟clk的下降沿产生。

clk1和clk2的特征:

3分频——高电 : 低电平 = 2 : 1

2N+1分频——高电 : 低电平 = N+1 : N

 代码:

  1. `timescale 1ns/1ns
  2. module test(
  3. input clk_150 ,
  4. input rst_n ,
  5. output clk_div3
  6. );
  7. reg [3:0] cnt_1; //上升沿计数
  8. reg [3:0] cnt_2; //下降沿计数
  9. reg clk1;
  10. reg clk2;
  11. assign clk_div3 = clk1 & clk2;
  12. always@(posedge clk_150 or negedge rst_n)
  13. begin
  14. if (!rst_n)
  15. cnt_1 <= 4'd0;
  16. else
  17. cnt_1 <= (cnt_1 == 4'd2) ? 4'd0 : cnt_1 + 4'd1;
  18. end
  19. always@(posedge clk_150 or negedge rst_n)
  20. begin
  21. if (!rst_n)
  22. clk1 <= 1'b0;
  23. else
  24. clk1 <= (cnt_1 <= 4'd1) ? 1'b1 : 1'b0;
  25. end
  26. always@(negedge clk_150 or negedge rst_n)
  27. begin
  28. if (!rst_n)
  29. cnt_2 <= 4'd0;
  30. else
  31. cnt_2 <= (cnt_2 == 4'd2) ? 4'd0 : cnt_2 + 4'd1;
  32. end
  33. always@(negedge clk_150 or negedge rst_n)
  34. begin
  35. if (!rst_n)
  36. clk2 <= 1'b0;
  37. else
  38. clk2 <= (cnt_2 <= 4'd1) ? 1'b1 : 1'b0;
  39. end
  40. endmodule

仿真图:

  3、通过时钟相异或实现奇数分频

原时钟clk通过上升沿和下降沿计数产生时钟clk1和clk2,clk1和clk2相异或产生clk三分频的clk_div3时钟。

clk1:原时钟clk的上升沿产生。

clk2:原时钟clk的下降沿产生。

clk1和clk2的特征:

3分频:clk1以原时钟clk的3个周期为单位翻转,clk2在clk1时钟的中间点发生翻转。

2N+1分频:clk1以原时钟clk的2N+1个周期为单位翻转,clk2在clk1时钟的中间点发生翻转。

代码:
 

  1. module test(
  2. input clk_150 ,
  3. input rst_n ,
  4. output clk_div3
  5. );
  6. reg [3:0] cnt_1; //上升沿计数
  7. reg clk1;
  8. reg clk2;
  9. assign clk_div3 = clk1 ^ clk2;
  10. always@(posedge clk_150 or negedge rst_n)
  11. begin
  12. if (!rst_n)
  13. cnt_1 <= 4'd0;
  14. else
  15. cnt_1 <= (cnt_1 == 4'd2) ? 4'd0 : cnt_1 + 4'd1;
  16. end
  17. always@(posedge clk_150 or negedge rst_n)
  18. begin
  19. if (!rst_n)
  20. clk1 <= 1'b0;
  21. else
  22. clk1 <= (cnt_1 == 4'd2) ? ~clk1 : clk1;
  23. end
  24. always@(negedge clk_150 or negedge rst_n)
  25. begin
  26. if (!rst_n)
  27. clk2 <= 1'b0;
  28. else
  29. clk2 <= (cnt_1 == 4'd1) ? ~clk2 : clk2;
  30. end
  31. endmodule

仿真图:

 

 

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

闽ICP备14008679号