0


FPGA学习——verilog实现流水灯

文章目录

学习芯片: EP4CE6F17C8

一、使用verilog实现电亮fpga板上的四个灯

verilog代码如下:

  1. module led1(
  2. output wire [3:0] led_on
  3. );
  4. assign led_on = 4'b1111 ;
  5. endmodule

配置引脚,查看芯片的指导书:
在这里插入图片描述
烧录运行结果如下:
在这里插入图片描述
如图我们可以看见开发板上四个led灯同时被电亮。

二、进阶——使led灯间隔一秒闪烁

代码如下:

  1. module led1(
  2. input wire clk,//时钟信号,50MHz
  3. input wire rst_n,//复位信号,下降沿有效
  4. output wire [3:0] led_on
  5. );
  6. parameter MAX1S = 26'd50_000_000;
  7. reg [25:0] cnt1s;//计数寄存器器1s
  8. reg [3:0] led_r;//led信号寄存器
  9. always @(posedge clk or negedge rst_n) begin
  10. if (!rst_n ) begin//复位,重新计数
  11. cnt1s<=26'd0;
  12. end
  13. else if (cnt1s == MAX1S-1'b1)begin//记到最大数,重新计数
  14. cnt1s<=26'd0;
  15. end
  16. else begin//其他情况+1
  17. cnt1s <= cnt1s + 1'd1;
  18. end
  19. end
  20. always @(posedge clk or negedge rst_n) begin
  21. if (!rst_n ) begin//复位
  22. led_r = 4'b0000;
  23. end
  24. else if (cnt1s == MAX1S-1'b1)begin//记到最大数,翻转
  25. led_r = ~led_r;
  26. end
  27. else begin
  28. led_r = led_r;
  29. end
  30. end
  31. assign led_on = led_r;
  32. endmodule

配置引脚,查看clock和key的引脚:
在这里插入图片描述
运行结果如下图:
在这里插入图片描述

此时可以看见四个led灯同时闪烁。

三、进阶——流水灯及跑马灯实现

流水灯代码实现:

  1. module led1(
  2. input wire clk,//时钟信号,50MHz
  3. input wire rst_n,//复位信号,下降沿有效
  4. output wire [3:0] led_on
  5. );
  6. parameter MAXS = 25'd25_000_000;
  7. reg [24:0] cnt1s;//计数寄存器器0.5s
  8. reg [3:0] led_r;//led信号寄存器
  9. always @(posedge clk or negedge rst_n) begin
  10. if (!rst_n ) begin//复位,重新计数
  11. cnt1s<=26'd0;
  12. end
  13. else if (cnt1s == MAXS-1'b1)begin//记到最大数,重新计数
  14. cnt1s<=26'd0;
  15. end
  16. else begin//其他情况+1
  17. cnt1s <= cnt1s + 1'd1;
  18. end
  19. end
  20. always @(posedge clk or negedge rst_n) begin
  21. if (!rst_n ) begin//复位
  22. led_r = 4'b0001;
  23. end
  24. else if (cnt1s == MAXS-1'b1)begin//记到最大数,翻转
  25. led_r = {led_r[2:0],led_r[3]};
  26. end
  27. else begin
  28. led_r = led_r;
  29. end
  30. end
  31. assign led_on = led_r;
  32. endmodule

实验效果图如下:
在这里插入图片描述

此时可以看见led灯依次闪烁。

跑马灯代码:

  1. module led1(
  2. input wire clk,//时钟信号,50MHz
  3. input wire rst_n,//复位信号,下降沿有效
  4. output wire [3:0] led_on
  5. );
  6. parameter MAXS = 25'd25_000_000;
  7. reg [24:0] cnt1s;//计数寄存器器0.5s
  8. reg [3:0] led_r;//led信号寄存器
  9. always @(posedge clk or negedge rst_n) begin
  10. if (!rst_n ) begin//复位,重新计数
  11. cnt1s<=26'd0;
  12. end
  13. else if (cnt1s == MAXS-1'b1)begin//记到最大数,重新计数
  14. cnt1s<=26'd0;
  15. end
  16. else begin//其他情况+1
  17. cnt1s <= cnt1s + 1'd1;
  18. end
  19. end
  20. always @(posedge clk or negedge rst_n) begin
  21. if (!rst_n ) begin//复位
  22. led_r = 4'b0001;
  23. end
  24. else if (cnt1s == MAXS-1'b1)begin//记到最大数,翻转
  25. led_r = {led_r[2:0],~led_r[3]};
  26. end
  27. else begin
  28. led_r = led_r;
  29. end
  30. end
  31. assign led_on = led_r;
  32. endmodule

实验效果图如下:
在这里插入图片描述

标签: fpga开发 学习

本文转载自: https://blog.csdn.net/weixin_53573350/article/details/130327839
版权归原作者 Fu-yu 所有, 如有侵权,请联系我们删除。

“FPGA学习——verilog实现流水灯”的评论:

还没有评论