1. 项目背景与核心价值
流水灯作为FPGA入门经典项目,其意义远不止于点亮几个LED。在工业控制领域,流水灯逻辑是状态机设计的基础原型;在汽车电子中,类似Knight Rider的扫描效果直接应用于转向灯和仪表盘指示;而在消费电子领域,炫酷的灯光模式更是提升产品质感的利器。
传统流水灯教学往往停留在简单的左移右移,但实际工程中需要处理更复杂的模式切换和时序控制。本项目通过移位寄存器这一数字电路核心元件,实现8种可配置的灯光模式,包括:
- 经典Knight Rider扫描效果
- 呼吸灯渐变
- 随机闪烁模式
- 对称展开效果
- 速度可调的追逐模式
- 二进制计数显示
- 音乐节奏同步
- 用户自定义模式
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 硬件设计与环境搭建
2.1 最小系统需求
以Xilinx Artix-7 FPGA开发板为例,核心硬件配置如下:
| 组件 | 规格 | 备注 |
|---|---|---|
| FPGA芯片 | XC7A35T-1FTG256C | 也可用Cyclone IV等同级器件 |
| 时钟源 | 50MHz晶振 | 需通过PLL分频 |
| LED阵列 | 8位共阳LED | 每路串联100Ω限流电阻 |
| 按键 | 4个独立按键 | 模式切换/速度调节 |
关键细节:LED驱动电流建议控制在8-10mA,过高的电流会导致FPGA IO口过热。使用共阳接法时注意三极管选型,常用S8050可满足需求。
2.2 Vivado工程创建
- 新建RTL工程,选择对应器件型号
- 添加时钟约束文件:
tcl复制create_clock -period 20.000 -name clk [get_ports clk]
- 设置IO标准为LVCMOS33:
tcl复制set_property IOSTANDARD LVCMOS33 [get_ports {led[7:0]}]
3. 移位寄存器核心设计
3.1 参数化移位模块
采用Verilog参数化设计,便于模式扩展:
verilog复制module shift_reg #(
parameter WIDTH = 8,
parameter DIR = 1 // 0:左移
