当前位置:   article > 正文

FPGA自学教程 04 设计跑马灯(8个LED灯每个以0.5s的速率闪烁)_fpga走马灯代码

fpga走马灯代码

双非硕士 研一下学期视觉转FPGA(在b站跟小梅哥视频)

长路漫漫,但希望前途光明

省去前面创建工程的内容(如果对创建工程有疑问的,可以看我前面的两篇文章),首先给出跑马灯的逻辑代码,如下图所示:

  1. module led_run(
  2. Clk,
  3. Reset_n,
  4. Led
  5. );
  6. input Clk;
  7. input Reset_n;
  8. output reg [7:0]Led;
  9. reg [24:0]counter;
  10. parameter MCNT =25'd24999999;
  11. always@(posedge Clk or negedge Reset_n)
  12. if(!Reset_n)
  13. counter <=0;
  14. else if(counter == MCNT)
  15. counter <=0;
  16. else
  17. counter <= counter +1'd1;
  18. always@(posedge Clk or negedge Reset_n)
  19. if(!Reset_n)
  20. Led <=8'b0000_0001;
  21. else if(counter == MCNT)begin
  22. if (Led == 8'b1000_0000)
  23. Led <=8'b0000_0001;
  24. else
  25. Led <=Led <<1;
  26. //Led <= {Led[6:0],Led[7]};
  27. end
  28. else
  29. Led <= Led;
  30. endmodule

接下来要进行仿真验证,代码如下:

  1. `timescale 1ns/1ns
  2. module led_run_tb;
  3. reg Clk;
  4. reg Reset_n;
  5. wire [7:0]Led;
  6. led_run
  7. led_run_ints0(
  8. .Clk(Clk),
  9. .Reset_n(Reset_n),
  10. .Led(Led)
  11. );
  12. defparam led_run_ints0.MCNT=24999;
  13. initial Clk =1;
  14. always #10 Clk =!Clk;
  15. initial begin
  16. Reset_n = 0;
  17. #201;
  18. Reset_n=1;
  19. #40000000;
  20. $stop;
  21. end
  22. endmodule

观察波形图,可以验证我们的代码逻辑是正确的

补充,如果使用3-8移码器实现上述效果的话,我们可以将之前创建的decoder_3_8.v文件复制到本路径下,如下图所示

 接下来,点击左侧栏中的Add Sources ,同样选择Add or create design sources,点击OK就可以将之前的项目包导进来了。

 代码内容如下:

  1. module led_run_test2(
  2. Clk,
  3. Reset_n,
  4. Led
  5. );
  6. input Clk;
  7. input Reset_n;
  8. output [7:0]Led;
  9. reg [24:0]counter;
  10. always@(posedge Clk or negedge Reset_n)
  11. if(!Reset_n)
  12. counter<=0;
  13. else if(counter == 24999)
  14. counter<=0;
  15. else
  16. counter <= counter +1'b1;
  17. //使用3-8译码器来实现LED灯的变动
  18. reg [2:0]counter2;
  19. always@(posedge Clk or negedge Reset_n)
  20. if(!Reset_n)
  21. counter2 <=0;
  22. else if(counter2 == 7)
  23. counter2<=0;
  24. else if(counter == 24999)
  25. counter2 <= counter2 +1'b1;
  26. decoder_3_8 decoder_3_8(
  27. .a(counter2[2]),
  28. .b(counter2[1]),
  29. .c(counter2[0]),
  30. .out(Led)
  31. );
  32. endmodule

以上,就是通过使用Verilog实现流水灯的实验

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号