当前位置:   article > 正文

「Verilog学习笔记」信号发生器_信号发生器verilog

信号发生器verilog
专栏前言

本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网

        方波的实现,较为简单,只需要设置一个计数器,使输出保持10个时钟为0,跳变为20,再保持10个时钟。依次循环。可以按照如下的过程实现:cnt每个时钟加一,当cnt=19时,将wave的值置为0,同时cnt置为0;当cnt=9时,将wave的值置为20。

        锯齿波的实现,即输出信号由0每次加一递增到20,然后从20跳变到0。可以按照如下的过程实现:当wave=20,将wave的值置为0,其余时刻,wave加一。

        三角波的实现,类似于锯齿波,但当wave达到20时,不是跳变到0,而是以一为步长递减到0。可以设置一个指示信号up,当up的值是1时,wave每个时钟加一。当up的值为0时,则减一。        

  1. `timescale 1ns/1ns
  2. module signal_generator(
  3. input clk,
  4. input rst_n,
  5. input [1:0] wave_choise,
  6. output reg [4:0]wave
  7. );
  8. reg [4:0] cnt ;
  9. reg up ;
  10. always @ (posedge clk or negedge rst_n) begin
  11. if (!rst_n) begin
  12. wave <= 5'd0 ;
  13. cnt <= 5'd0 ;
  14. end
  15. else begin
  16. case (wave_choise)
  17. 2'b00 : begin
  18. if (cnt == 5'd19) begin
  19. wave <= 5'd0 ;
  20. cnt <= 5'd0 ;
  21. end
  22. else if (cnt == 5'd9) begin
  23. wave <= 5'd20 ;
  24. cnt <= cnt + 1'd1 ;
  25. end
  26. else begin
  27. wave <= wave ;
  28. cnt <= cnt + 1'd1 ;
  29. end
  30. end
  31. 2'b01 : begin
  32. if (wave == 5'd20) wave <= 5'd0 ;
  33. else wave <= wave + 1'd1 ;
  34. end
  35. 2'b10 : begin
  36. if (wave == 5'd20) begin
  37. wave <= wave - 1'd1 ;
  38. up <= 1'd0 ;
  39. end
  40. else if (wave == 5'd0) begin
  41. wave <= wave + 1'd1 ;
  42. up <= 1'd1 ;
  43. end
  44. else if (up) wave <= wave + 1'd1 ;
  45. else wave <= wave - 1'd1 ;
  46. end
  47. default :
  48. wave <= 1'b0 ;
  49. endcase
  50. end
  51. end
  52. endmodule
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/528421
推荐阅读
相关标签
  

闽ICP备14008679号