流水灯 FPGA 设计 Verilog Vivado

名称:流水灯 FPGA 设计 Verilog Vivado

软件:Vivado

语言:Verilog

功能介绍

本设计实现一个 8 位 LED 流水灯控制系统,顶层模块为 led_top,输入包括系统时钟 clk 和低有效复位 rst_n,输出为 8 位 led 信号。系统通过分频模块产生固定节拍 tick,再由 LED 控制模块根据 tick 推动灯效状态变化,实现按节奏步进的流水灯显示效果。 工程采用模块化 Verilog 结构,适合用于 FPGA 入门实验、时钟分频练习、LED 外设控制以及 Vivado 工程流程学习。设计重点覆盖顶层例化、参数化分频、复位控制、时序逻辑状态更新和 Testbench 仿真验证,便于学习者理解从 RTL 编写到仿真观察的完整过程。 顶层参数 DIVIDE 默认设置为 50_000_000,用于将输入时钟转换为约 1Hz 的单周期 tick 脉冲。实际使用时可根据板载时钟频率或仿真速度调整该参数,从而改变 LED 流水切换速度。

运行环境

开发软件:Vivado 设计语言:Verilog 工程类型:Vivado FPGA 工程 主要文件包括 led_top.v、clk_divider.v、led_controller.v 和 led_top_tb.v,工程中包含行为仿真相关文件,可用于查看整体仿真、分频模块和 LED 控制模块的运行效果。

设计思路

系统采用“时钟分频 + LED 花型控制”的设计思路。顶层 led_top 只负责端口组织和子模块连接,将时钟节拍生成与 LED 输出控制拆分为两个独立模块,降低模块耦合度,也方便单独理解和调试。 clk_divider 模块根据参数 DIVIDE 对输入时钟进行计数,当计数达到设定周期后输出一个单周期 tick 脉冲。该 tick 不直接替代系统时钟,而是作为 LED 控制模块的节拍使能信号,这种写法能让核心逻辑仍然工作在同一个 clk 时钟域下,结构更清晰,也更符合常见 FPGA 同步设计习惯。 led_controller 模块在复位后初始化 LED 状态,并在每次 tick 到来时更新 led[7:0] 输出。通过将 LED 状态变化集中在控制模块中,后续若需要调整流水方向、增加花型或扩展显示模式,只需要修改控制逻辑,不影响分频器和顶层连接。

模块结构

顶层模块:led_top 分频模块:clk_divider,负责将输入时钟转换为周期性 tick 脉冲。 LED 控制模块:led_controller,负责根据 tick 节拍更新 8 位 LED 输出花型。 测试模块:led_top_tb,用于对顶层设计进行行为仿真。

演示视频

包含流水灯效果演示视频,可用于直观看到 LED 按节拍变化的运行表现。

仿真图/仿真说明/设计文档图片

设计文档包含工程文件、程序文件、程序编译、RTL 图、Testbench、整体仿真图、分频模块仿真说明以及 LED 控制模块相关内容。仿真部分可用于观察 tick 节拍产生过程、复位后的 LED 输出变化,以及顶层模块中分频器与 LED 控制器之间的连接关系。

流水灯 FPGA 设计 Verilog Vivado 设计文档图片 image1.png

流水灯 FPGA 设计 Verilog Vivado 设计文档图片 image10.png

流水灯 FPGA 设计 Verilog Vivado 设计文档图片 image11.png

流水灯 FPGA 设计 Verilog Vivado 设计文档图片 image12.png

流水灯 FPGA 设计 Verilog Vivado 设计文档图片 image2.png

流水灯 FPGA 设计 Verilog Vivado 设计文档图片 image3.png

流水灯 FPGA 设计 Verilog Vivado 设计文档图片 image4.png

流水灯 FPGA 设计 Verilog Vivado 设计文档图片 image5.png

流水灯 FPGA 设计 Verilog Vivado 设计文档图片 image6.png

流水灯 FPGA 设计 Verilog Vivado 设计文档图片 image7.png

流水灯 FPGA 设计 Verilog Vivado 设计文档图片 image8.png

流水灯 FPGA 设计 Verilog Vivado 设计文档图片 image9.png

部分代码

以下展示顶层模块 led_top 的部分代码,完整源码请下载压缩包查看。

module led_top #(parameter DIVIDE = 50_000_000) (
    input clk,
    input rst_n,
    output [7:0] led
);

// 分频器输出的 1Hz 单周期脉冲
wire tick;

// 实例化分频器:将 clk 转换为 1Hz tick
clk_divider #(.DIVIDE(DIVIDE)) u_div (
    .clk(clk),
    .rst_n(rst_n),
    .tick(tick)
);

// 实例化 LED 控制器:根据 tick 触发花型步进
led_controller u_led_ctrl (
    .clk(clk),
    .rst_n(rst_n),
    .tick(tick),
    .led(led)
);
endmodule

代码文件(付费下载)

📥 付费后此处显示完整工程压缩包下载链接。
1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 流水灯 FPGA 设计 Verilog Vivado

注册为本站会员,充值100得150,详情咨询客服

目前为止共有 *** 位优秀的会员加入! 立刻加入会员