当前位置:   article > 正文

FPGA开发——实现流水灯的设计

FPGA开发——实现流水灯的设计

一、概述

众所周知,在我们学习任何一款硬件,不管是单片机MCU,DSP以及其他的一系列硬件在内的最开始接触的都是LED流水灯的实现,这就和我们在学习编程时的输出“Hello World”一样,我们在学习FPGA的过程当中也是要从LED流水灯开始学起。

在FPGA开发中我们不管是实现什么功能,基本上都是需要使用计数器作为基础,这里也不例外。

二、设计代码的编写

  1. //模块定义
  2. module led(
  3. input rst_n,
  4. input clk,
  5. output reg [3:0] led_out
  6. );
  7. //参数定义
  8. parameter TIME_500ms= 25_000_000;
  9. //内部信号定义
  10. reg [24:0] cnt;//计数500ms所需要的二进制位数
  11. wire add_cnt;//计数器开启条件
  12. wire end_cnt;//计数器结束条件
  13. reg [3:0] state_n;
  14. //计数器实现功能,0.5秒技术
  15. always @(posedge clk or negedge rst_n)begin
  16. if(!rst_n)begin
  17. cnt<=0;
  18. end
  19. else if(add_cnt)begin
  20. if(end_cnt)
  21. cnt<=0;
  22. else
  23. cnt<=cnt+1;
  24. end
  25. else
  26. cnt<=0;
  27. end
  28. assign add_cnt=1'b1;
  29. assign end_cnt=add_cnt && cnt ==(TIME_500ms-1);
  30. always @(posedge clk or negedge rst_n)begin
  31. if(!rst_n)
  32. led_out<=4'b0011;
  33. else if(end_cnt)begin
  34. led_out<={led_out[2:0],led_out[3]};
  35. end
  36. else
  37. led_out<=led_out;
  38. end
  39. endmodule

在这个代码中我们需要注意的就是使用拼接符实现LED灯的循环移动led_out<={led_out[2:0],led_out[3]};这句代码实现的就是将最高位和最低位进行不断交换。

三、测试文件的编写

  1. //定义时间尺度
  2. `timescale 1ns/1ps
  3. module led_tb();
  4. //重定义
  5. defparam led_inst.TIME_500ms = 25;
  6. //内部变量定义
  7. reg clk;
  8. reg rst_n;
  9. wire [3:0] led_out;
  10. //模块实例化
  11. led led_inst(
  12. /*input */ .rst_n (rst_n ),
  13. /*input */ .clk (clk ),
  14. /*output reg [3:0] */ .led_out (led_out )
  15. );
  16. //时钟
  17. parameter CLK_CLY =20;
  18. initial clk=0;
  19. always #(CLK_CLY/2) clk=~clk;
  20. //复位
  21. initial begin
  22. rst_n =1'b0;
  23. #(CLK_CLY*2);
  24. #3;
  25. rst_n =1'b1;
  26. end
  27. //激励
  28. endmodule

因为这里我们设置的周期是ms计数,相比于硬件本身的20ns来说非常大,所在我在测试文件中对于周期做了一个重定义——defparam  led_inst.TIME_500ms = 25;在测试文件中的重定义不会影响设计文件中的值,所以可以放心使用。

四、波形仿真

在波形图中我们可以看到LED灯从 0001——1000进行不断的循环流水。

四、下板验证

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

闽ICP备14008679号