本项目是一个基于FPGA的LED点阵显示和控制系统。它使用树莓派(Raspberry Pi)作为上位机(主控制器),通过SPI通信协议向FPGA发送指令和数据,以驱动一个8x8的RGB LED点阵显示各种图案、动画和效果。
项目还包含一个简单的UART接收模块,用于基础的通信测试。
-
上位机控制:
- 树莓派上运行一个Rust程序 (
Rasberry/spi.rs),作为SPI总线的主机。 - 该程序提供了一个命令行界面,用户可以选择不同的显示模式,如单点亮、图片显示、动画播放等。
- 树莓派上运行一个Rust程序 (
-
SPI通信:
- 树莓派根据用户选择的模式,将指令和像素数据通过SPI总线发送给FPGA。
-
FPGA处理:
- FPGA内部的
SPI_slave_wrapper.sv模块作为SPI从机,接收数据并将其存入一个4KB大小的内部存储器(BRAM)中。 - 一个状态机从存储器中读取数据,解析为
[指令, 行地址, 列数据]的格式。 - 解析后的指令被传递给
LED_Matrix.sv模块。
- FPGA内部的
-
LED驱动:
LED_Matrix.sv模块根据收到的指令,通过高速的逐行扫描方式,驱动LED点阵的物理引脚,从而在视觉上形成稳定、清晰的图像或动画。
- 项目包含一个简单的UART接收模块 (
uart_rx.sv) 和一个对应的Python测试脚本 (Rasberry/uart.py)。 - 树莓派可以通过UART发送一个特定字节 (
0xFF),FPGA接收到后会点亮一个测试LED,用于验证FPGA与上位机之间的基本硬件连接。此功能与主要的LED显示逻辑是独立的。
- FPGA端:
- 语言:SystemVerilog
- 硬件:FPGA开发板、8x8 RGB LED点阵
- 上位机端:
- 硬件:树莓派
- 语言:
- Rust (使用
rppal库进行SPI控制) - Python (使用
pyserial库进行UART测试)
- Rust (使用
- 通信协议:
- SPI (主要控制)
- UART (用于测试)
- 约束与实现:
- 使用Xilinx Design Constraints (.xdc) 文件进行引脚和时序约束。
fpga/
├── bitstream/ # 存放生成的用于配置FPGA的比特流文件 (.bit)
├── constraints/ # 存放Xilinx约束文件 (.xdc)
├── LED_Matrix/ # LED点阵的核心驱动逻辑和测试文件
├── Rasberry/ # 树莓派上运行的上位机软件 (Rust和Python)
├── Simulation/ # 仿真波形等文件
├── SPI/ # SPI从机接口、顶层封装和测试文件
├── UART/ # UART接收模块
└── 说明文档/ # 其他相关文档
Generated by Gemini