基于FPGA的LED闪烁灯设计

1. 项目介绍

  在FPGA上最简单的应用就是点亮一盏闪烁的LED。学过软件的朋友一般都写过“Hello world”,因为这个是最简单的程序。

2. 设计要求

  LED灯以2s的周期闪烁,LED灯亮、灭,每1s取反一次,如此循环,不断取反。从而实现LED灯的不断闪烁。

3. 设计分析

  从外部晶振(50M)时钟输入,利用计数器去计数1s,然后每隔1s改变一下LED输出引脚的电平状态。 因为开发板晶振为50M,所以一个时钟周期为20ns(1/50MHz),因此计数器cnt通过对50MHz系统时钟计数,计时到1s,需要累加1s/20ns=5000_0000次。

4.具体设计

4.1 硬件连接示意图

4.2 架构设计

5. 设计实现

复制代码
 1 module led_flash(
 2     input     wire                 clk,
 3     input     wire                 rst_n,
 4     
 5     output     reg      [3:0]    led    
 6 );
 7 
 8     parameter     T_1S     = 26'd50_000_000;
 9     
10     reg         [25:0]    cnt;
11     
12     always@(posedge clk or negedge rst_n)begin
13         if(rst_n == 1'b0)
14             cnt <= 26'd0;
15         else
16             if(cnt < T_1S - 1'b1)
17                 cnt <= cnt + 1'b1;
18             else
19                 cnt <= 26'd0;
20     end
21 
22     always@(posedge clk or negedge rst_n)begin
23         if(rst_n == 1'b0)
24             led <= 4'b0000;
25         else
26             if(cnt == T_1S - 1'b1)
27                 led <= ~led;
28             else
29                 led <= led;
30     end
31     
32 endmodule 
复制代码

6. 仿真验证

复制代码
 1 `timescale 1ns/1ps
 2 
 3 module led_flash_tb();
 4 
 5     reg                     clk;
 6     reg                     rst_n;
 7     
 8     wire          [3:0]    led;    
 9     
10     defparam led_flash_inst.T_1S = 7'd100;
11 
12     led_flash led_flash_inst (
13         .clk                (clk),
14         .rst_n            (rst_n),
15 
16         .led                (led)    
17     );
18 
19     initial begin
20         while(2)begin
21             clk = 1'b0;     #10;
22             clk = 1'b1;        #10;        
23         end
24     end
25     
26     initial begin
27         rst_n = 1'b0;
28         #21;
29         rst_n = 1'b1;
30         #(2000*10);    //必须加括号,
31         $stop;
32     end
33     
34 endmodule 
复制代码

7 参考资料

  (1)陪您一起学习FPGA-郝旭帅团队_哔哩哔哩_bilibili

posted @   豌豆茶  阅读(1684)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示