当前位置:   article > 正文

用FPGA设计流水灯

用FPGA设计流水灯

流水灯原理

        控制led,依次让led进行亮灭,实现流水灯效果

 实验目的:用一个按键可以开关控制流水灯的流动与停止

模块框图:

wat_led 模块代码

  1. module wat_led(
  2. input wire clk_50mhz ,//系统时钟50Mhz
  3. input wire rst_n ,//全局复位
  4. input wire wat_led_flag ,//输入信号,一个高电平周期
  5. output reg [3:0] led //输出信号
  6. );
  7. parameter S_MAX = 26'd49_999_999; //计时1s
  8. reg [25:0] sum_s; //计数器
  9. reg [1:0] qs; //控制灯的亮灭状态
  10. reg wat_led_flag_h ;//把输入信号wat_led_flag处理为电平反转信号
  11. always@( posedge clk_50mhz or negedge rst_n) begin
  12. if (rst_n==1'b0) begin
  13. wat_led_flag_h <= 1'b0;
  14. end
  15. else if (wat_led_flag == 1'b1) begin
  16. wat_led_flag_h <= ~wat_led_flag_h;
  17. end
  18. else begin
  19. wat_led_flag_h <= wat_led_flag_h;
  20. end
  21. end
  22. always@( posedge clk_50mhz or negedge rst_n) begin
  23. if (rst_n==1'b0) begin
  24. sum_s <= 26'd0;
  25. end
  26. else if (sum_s == S_MAX) begin
  27. sum_s <= 26'd0;
  28. end
  29. else begin
  30. sum_s <=sum_s+ 26'd1;
  31. end
  32. end
  33. always@( posedge clk_50mhz or negedge rst_n) begin
  34. if (rst_n==1'b0) begin
  35. qs <= 3'd0;
  36. end
  37. else if (sum_s == S_MAX) begin
  38. qs <= qs+ 3'd1;
  39. end
  40. else begin
  41. qs <= qs;
  42. end
  43. end
  44. always@( posedge clk_50mhz or negedge rst_n)
  45. begin
  46. if (rst_n==1'b0) begin
  47. led <= 4'b0000;
  48. end
  49. else if(wat_led_flag_h==1'b1) begin
  50. case(qs)
  51. 2'b00: led <= 4'b0001;
  52. 2'b01: led <= 4'b0010;
  53. 2'b10: led <= 4'b0100;
  54. 2'b11: led <= 4'b1000;
  55. default: led <= 4'b0000;
  56. endcase
  57. end
  58. end
  59. endmodule

key_filter模块代码,见我的这一篇文章 :用FPGA设计软件按键消抖-CSDN博客

key_wat_led模块代码,如下:

  1. module key_wat_led (
  2. input wire clk_50mhz , //系统时钟50Mhz
  3. input wire rst_n , //全局复位
  4. input wire key_in , //按键输入信号
  5. output wire [3:0] led //输出信号
  6. );
  7. wire key_flag;
  8. key_filter key_filter_inst
  9. (
  10. .clk_50mhz (clk_50mhz) , //系统时钟50Mhz
  11. .rst_n (rst_n ) , //全局复位
  12. .key_in (key_in ) , //按键输入信号
  13. .key_flag (key_flag ) //key_flag为1时表示消抖后检测到按键被按下
  14. //key_flag为0时表示没有检测到按键被按下
  15. );
  16. wat_led wat_led_inst
  17. (
  18. .clk_50mhz (clk_50mhz ) ,//系统时钟50Mhz
  19. .rst_n (rst_n ) ,//全局复位
  20. .wat_led_flag (key_flag ) ,//输入信号,一个高电平周期
  21. .led (led ) //输出信号
  22. );
  23. endmodule //key_wat_led

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

闽ICP备14008679号