本文将分享来自开发者王轩(wangxuan95.github.io)的一系列优质开源项目。这些项目覆盖了USB、电机控制、处理器设计、图像处理等多个领域,对于FPGA的深入学习、项目实战乃至算法硬件化实现都具有极高的参考价值。以下是从其GitHub主页中,根据Star数量精心挑选的19个项目,希望能为你提供灵感和学习资源。
提示:如果以下项目的GitHub地址访问困难,可以尝试将 github.com 替换为 gitee.com 的国内镜像地址进行访问。
1. USB 1.1控制器
这个项目在FPGA上实现了一个通用的USB 1.1(全速)设备控制器。借助它,你可以用FPGA非常简单地实现各类USB设备,例如USB扬声器、麦克风、摄像头、U盘、键盘或串口设备,而无需依赖额外的USB专用芯片(如Cypress CY7C68013),从而降低了电路和软件开发成本。
开源地址:https://github.com/WangXuan95/FPGA-USB-Device
2. FOC控制算法
这是一个基于FPGA实现的磁场定向控制(FOC)算法,专门用于驱动永磁同步电机(PMSM)或无刷直流电机(BLDC)。FOC算法对传感器采样速率和处理器算力要求较高,使用FPGA实现能获得更优的实时性,并且更方便进行多路扩展与协同控制。本库实现了基于磁编码器的有感FOC电流环,支持扭矩控制,为使用纯FPGA或MCU+FPGA方案实现更复杂的电机应用打下了基础。
开源地址:https://github.com/WangXuan95/FPGA-FOC
3. BSV高级硬件描述语言入门指南
这是首个中文的Bluespec SystemVerilog(BSV)教程。BSV是一门高级硬件描述语言,与Verilog一样用于FPGA或ASIC的设计验证。它最初是商业工具,直至2020年其编译器才开源,这个项目为我们学习这门高效的语言提供了宝贵的中文资料。
开源地址:https://github.com/WangXuan95/BSV_Tutorial_cn
4. 基于XDMA的PCIe核
该项目详细介绍了如何使用Xilinx提供的免费、易用的PCIe通信IP核——PCIe-XDMA(DMA Subsystem for PCIe)。对于需要在FPGA与主机之间进行高速数据传输的开发者来说,这是一个极具价值的实践教程。
开源地址:https://github.com/WangXuan95/Xilinx-FPGA-PCIe-XDMA-Tutorial
5. 基于SystemVerilog的RISC-V SoC
这是一个完全用SystemVerilog编写的、以RISC-V CPU为核心的普林斯顿结构SoC,可作为微控制器使用。其主要特点包括:
- CPU:5级流水线,支持RV32I指令集(除CSR指令外)。
- 总线:32位地址与数据总线,带有握手机制。
- 总线交叉开关:参数可配置,便于拓展外设和分配地址空间。
- 交互式UART调试:支持通过PC终端软件进行系统复位、程序上传和内存查看。
- 平台无关:纯HDL实现,不调用特定厂商IP核,便于移植和仿真。
开源地址:https://github.com/WangXuan95/USTC-RVSoC
6. FTDI芯片在245模式的FIFO控制器
Sync-245-FIFO模式是FTDI公司USB芯片的最高速传输模式。本项目将该模式的控制器封装成Verilog模块(顶层模块名为 ftdi_245fifo_top),并提供了标准的AXI-Stream收发接口,方便Verilog开发者直接调用,实现与FTDI芯片的高速数据交互。
开源地址:https://github.com/WangXuan95/FPGA-ftdi245fifo
7. SD卡文件读取器
一个基于FPGA的SD卡读取器,支持从FAT16或FAT32格式的SD卡中读取文件。其亮点在于:
- 功能:支持按文件名读取文件内容,或按扇区号读取原始扇区数据。
- 性能:使用SD总线协议(而非SPI),读取速度更快。
- 兼容性:自动适配不同版本的SD卡以及FAT16/FAT32文件系统。
- 可移植性:纯Verilog实现。
开源地址:https://github.com/WangXuan95/FPGA-SDcard-Reader
8. 轻量级CAN控制器
该项目实现了一个轻量化但功能完备的FPGA CAN总线控制器,特点如下:
- 平台无关:纯Verilog编写。
- 本地ID:可配置为任意短ID。
- 发送:仅支持以本地ID发送固定4字节数据长度的帧。
- 接收:支持接收短ID或长ID帧,数据长度支持0-8字节。
- 过滤:可为短ID和长ID独立设置过滤器。
- 自动应答:收到与本地ID匹配的远程帧时,自动发送缓存中的数据。
开源地址:https://github.com/WangXuan95/FPGA-CAN
9. JPEG-LS编码器
基于FPGA的JPEG-LS编码器,能够实现高压缩率的无损或近无损图像压缩。
开源地址:https://github.com/WangXuan95/FPGA-JPEG-LS-encoder
10. DDR1控制器
为基于低端FPGA的嵌入式系统提供了一个廉价、大容量的存储解决方案——FPGA实现的DDR1控制器。
开源地址:https://github.com/WangXuan95/FPGA-DDR-SDRAM
11. 定点数运算库
一个Verilog定点数运算库,提供了算术运算、与浮点数的互相转换等功能,并包含单周期和流水线两种实现方式,是数字信号处理(DSP)实现的实用基础组件。
开源地址:https://github.com/WangXuan95/FPGA-FixedPoint
12. MPEG2视频编码器
基于FPGA的高性能MPEG2视频编码器,可用于视频流压缩。
开源地址:https://github.com/WangXuan95/FPGA-MPEG2-encoder
13. 使用FPGA模拟和伪装SD卡
该项目让FPGA模拟一个符合SDHCv2.0规范的只读SD卡。它已在绿联、川宇、飚王以及Realtek PCIe读卡器等多种设备上成功识别,展示了深入理解底层协议并硬件实现的强大能力。
开源地址:https://github.com/WangXuan95/FPGA-SDfake
14. NFC(RFID)读卡器
从底层开始,用FPGA搭建一个支持ISO14443A标准的NFC PCD(读卡器)。这是一个非常硬核的计算机基础与射频通信结合的项目。
开源地址:https://github.com/WangXuan95/FPGA-NFC
15. 基于FPGA的串口收发模块
一个基础的FPGA UART通信模块实现。
开源地址:https://github.com/WangXuan95/FPGA-UART
16. 基于FPGA的gzip压缩器
基于FPGA的流式GZIP压缩器,采用deflate算法。它能够对通用的原始数据进行无损压缩,直接输出标准的GZIP格式(即常见的.gz或.tar.gz文件格式)。
开源地址:https://github.com/WangXuan95/FPGA-Gzip-compressor
17. 基于FPGA的PNG解码器
一个流式的PNG图像解码器,输入PNG编码流,直接输出原始的像素数据。
开源地址:https://github.com/WangXuan95/FPGA-PNG-decoder
18. 超高性能的JPEG-LS编码器
这是一个高性能的FPGA JPEG-LS图像压缩器,特点如下:
- 使用Verilog编写。
- 用于无损压缩8位灰度图像。
- 图像高度范围1~65536,宽度范围5~10240(需为5的倍数)。
- 采用动态乱序调度实现像素级并行,对自然图像的输入吞吐率可达约每时钟周期4.5个像素。
开源地址:https://github.com/WangXuan95/UH-JLS
19. SHA算法库
使用FPGA计算SHA系列哈希值,支持SHA1、SHA224、SHA256、SHA384及SHA512。
开源地址:https://github.com/WangXuan95/FPGA-SHA-Family
以上就是本次分享的全部19个FPGA开源项目。从基础外设到复杂算法,从处理器设计到协议实现,这个项目清单几乎构成了一本FPGA开发的“实战百科全书”。如果你对其中某个领域特别感兴趣,深入研读其代码和文档,相信会有巨大收获。技术之路,常学常新,欢迎你将这些资源分享给更多需要的朋友,也期待在云栈社区看到你的实践与创造。