文章来源:OpenFPGA
最近,AMD 在 GitHub 上公开了一个名为 Mini-ISP 的项目。这是一个采用 Verilog RTL(SV) 实现、完全运行在 FPGA 可编程逻辑(PL)中的轻量级 ISP(Image Signal Processor)。与很多商业 ISP IP 不同,Mini-ISP 最大的特点是开源,并采用 MIT License,同时项目还提供了测试代码、Python 框架以及 Vivado 集成所需的工程文件。
特点
- 最小资源利用:始终使用绝对最少的资源。
- 最大性能:在每秒像素数和延迟方面提供尽可能高的性能。
- 结果正确:确保在任何情况下输出结果都正确。
- 可接受的图像质量:图像质量必须能够满足大多数应用的需求,并且在人眼看来是令人愉悦的。
- 开源:所有代码和测试用例均以宽松的许可协议公开提供。最小资源利用:始终使用绝对最少的资源。
- 最大性能:在每秒像素数和延迟方面提供尽可能高的性能。
- 结果正确:确保在任何情况下输出结果都正确。
- 可接受的图像质量:图像质量必须能够满足大多数应用的需求,并且在人眼看来是令人愉悦的。
- 开源:所有代码和测试用例均以宽松的许可协议公开提供。
https://amd.github.io/mini-isp
一个“Mini”的 ISP
Mini-ISP 的设计目标非常明确:尽可能少的 FPGA 资源,获得尽可能高的吞吐率和尽可能低的延迟,同时保证基本可接受的图像质量。 官方将其设计理念概括为 Minimal Resources、Maximal Performance、Correct Results、Acceptable Image Quality 和 Open Source。它并没有试图把商业 ISP 中所有复杂算法都塞进去,而是主动进行取舍,优先选择适合 FPGA 流式处理的算法。
目前 Mini-ISP 已经实现了 Decompanding、Black Level Correction、Digital Color Gain、Bayer Demosaic、Color Correction Matrix 和 Gamma LUT 等功能,而镜头阴影校正、自动曝光、自动白平衡、降噪、局部色调映射等功能并未实现。这样的取舍非常值得注意,因为许多需要较大图像上下文的算法,在 FPGA 上实现时往往需要消耗大量片上存储和计算资源,因此 Mini-ISP 更强调“足够好”的图像质量,而不是追求一个功能堆满的完整商业 ISP。

接口也考虑了实际集成
Mini-ISP 并不是一个孤立的 RTL Demo,而是按照可以集成到实际 FPGA 视频系统中的方式进行设计。它提供 AXI4-Lite Memory Mapped 寄存器接口用于配置,同时采用 AXI4-Stream Video 作为视频输入和输出接口,因此可以比较方便地与 Vivado 中的其他视频 IP 连接。项目还提供了完整的 Vivado IP 封装和 IP Integrator 集成支持。
Python + RTL:把算法验证也开源了
Mini-ISP 还提供了 Python Framework,用于算法原型开发、仿真以及 Testbench。这意味着开发者不仅可以直接阅读 RTL,还可以在软件环境中验证 ISP 算法,再与硬件 RTL 的结果进行对比。项目本身也提供了 Verilator Testbench、Python Test、Yosys 综合和 Lint 等流程,可以通过 Makefile 直接执行。
这其实是开源 ISP 项目非常重要的一部分。ISP 开发最麻烦的地方之一,就是算法模型、定点化实现和 RTL 结果之间需要不断进行验证。如果只有 RTL,没有算法参考模型,后续调试会比较困难;而 Mini-ISP 同时提供 Python 和 RTL 验证环境,使整个开发流程更加接近现代的软件工程方式。
License

参考文章
Notebookcheck:AMD quietly open-sources costly image processor for FPGAs
项目地址
AMD Mini-ISP GitHub
https://github.com/amd/mini-isp
总结
AMD Mini-ISP 的定位其实非常清晰:它不是一个功能全面的商业 ISP,而是一个轻量、流水化、低资源、低延迟、可修改的开源 FPGA ISP。通过 Verilog RTL、AXI4-Stream、AXI4-Lite、Python Framework、Verilator Testbench 以及 Vivado IP 集成,项目覆盖了从算法验证到 FPGA 实现的一整套基础开发流程。

