1. PolarFire器件与视频图像处理系统概览
视频图像处理系统对器件的核心诉求可以概括为三点:足够的并行算力、可预测的实时延迟、以及低功耗与高可靠。Microchip PolarFire FPGA 系列正是围绕这三点设计的。理解它的架构特点,是后续在 Libero SoC 与 SmartHLS 中做出正确设计决策的前提。
一、PolarFire FPGA 的架构特点
PolarFire 属于非易失性 FPGA,其配置单元基于 SONOS 浮栅技术,因此上电即运行(Instant-On),无需外部配置芯片加载比特流。这一点对视频系统意义重大:摄像机、工业相机、医疗内窥镜等设备要求上电后毫秒级出图,SRAM 型 FPGA 的配置加载时间会直接体现在开机延迟中。
在逻辑资源上,PolarFire 采用 4 输入查找表(LUT4)加进位链的结构,每个逻辑单元(LSRAM 之外的 fabric 单元)包含 LUT、进位逻辑和寄存器。其特色在于内置了较大容量的 LSRAM(Large SRAM)和 µSRAM,前者适合做行缓冲(line buffer)和帧缓存,后者适合小容量系数表、查找表。视频处理中常见的 3×3 卷积窗口、行缓存、乒乓缓冲,都可以直接映射到这些片上存储块,而不必外挂 DDR。
DSP 资源方面,PolarFire 提供 Math Block,每个 Math Block 内含 18×18 乘法器和累加器,可级联构成更宽的乘法或 MAC 阵列。图像处理中的卷积、滤波、色彩空间转换(如 RGB 转 YCbCr)、缩放插值,本质上都是乘累加运算,Math Block 的数量直接决定了单周期可并行处理的像素通道数。
此外,PolarFire 集成了 12.7 Gbps SerDes、PCIe Gen2、DDR4/LPDDR4 控制器等硬核,并具备抗单粒子翻转(SEU)能力较强的配置存储器。对于需要长时间无人值守运行的视频采集设备,这种可靠性是选型时的重要加分项。
二、视频图像处理典型链路
一条完整的视频处理链路通常包含五个阶段:输入接口、预处理、核心处理、后处理、输出接口。以 1080p60 的 MIPI 相机为例,输入接口负责将串行差分信号恢复为像素时钟域的数据流;预处理完成去马赛克、黑电平校正、白平衡;核心处理执行卷积、缩放、色彩空间转换;后处理做伽马校正、锐化、叠加;输出接口将数据打包为 HDMI 或 SDI 时序。
设计时首先要做的是带宽与延迟预算。以 1080p60、每像素 10 bit 为例,像素时钟为 148.5 MHz,数据率为 1.485 Gbps。若采用 4 像素并行处理,则内部时钟可降至 37.125 MHz,这给布局布线留出充足余量。行缓冲需求为 3 行 × 1920 像素 × 10 bit ≈ 57.6 Kbit,PolarFire 的 LSRAM 单块容量为 64 Kbit 左右,因此一块 LSRAM 即可容纳一个 3 行缓冲,剩余容量可用于乒乓切换。
卷积运算的算力估算同样关键。3×3 卷积每像素需要 9 次乘累加,1080p60 每秒约 1.87 亿像素,总运算量约 17 亿 MAC/s。PolarFire 的 Math Block 在 200 MHz 下每个可提供 2 亿 MAC/s,因此理论上 9 个 Math Block 即可满足,但实际设计中要考虑行缓冲读写冲突和流水线填充,通常预留 2 倍余量。
三、开发工具:Libero SoC 与 SmartHLS
Libero SoC 是 PolarFire 的完整开发环境,覆盖综合、布局布线、时序分析、功耗分析和比特流生成。对于视频链路,Libero 中的 SmartDesign 用于搭建数据通路,把 IP 核、LSRAM、Math Block 和自定义逻辑连接起来;SmartTime 用于检查像素时钟域和 AXI 时钟域之间的时序约束;SmartPower 用于评估动态功耗。
SmartHLS 则允许用 C/C++ 描述算法,自动生成可综合的 RTL。对于视频处理中的卷积、缩放、色彩转换等规则性强的算法,SmartHLS 可以显著缩短开发周期。使用时需要注意:循环必须具有可确定的边界,数组访问要尽量规则,才能被高效地流水线化。例如一个 3×3 卷积的 C 函数,通过添加 #pragma HLS loop pipeline,可以让内层循环每个周期启动一次迭代,从而把 9 次 MAC 压缩到 9 个周期内完成。
// SmartHLS 卷积核心示例(伪代码)
void conv3x3(const uint16_t *src, uint16_t *dst, int w, int h) {
#pragma HLS loop pipeline
for (int y = 1; y < h-1; y++) {
for (int x = 1; x < w-1; x++) {
int sum = 0;
for (int ky = -1; ky <= 1; ky++)
for (int kx = -1; kx <= 1; kx++)
sum += src[(y+ky)*w + (x+kx)] * kernel[ky+1][kx+1];
dst[y*w + x] = (sum >> 8);
}
}
}
四、课程实战平台搭建
本课程使用的实战平台以 PolarFire 开发板为核心,搭配 MIPI 摄像头子板和 HDMI 输出子板。软件环境为 Libero SoC 2024.x 与 SmartHLS,仿真工具使用 ModelSim。搭建步骤如下:
- 安装 Libero SoC 与 SmartHLS,确认 License 有效,并安装 PolarFire 器件支持包。
- 创建新工程,选择目标器件型号(例如 MPF300T-1FCG1152E),设置默认时钟约束为 200 MHz。
- 在 SmartDesign 中例化 MIPI CSI-2 接收 IP、LSRAM 行缓冲、Math Block 卷积核和 HDMI 发送 IP,连接 AXI4-Stream 接口。
- 用 SmartHLS 生成色彩转换模块,导出为 RTL 并集成到 SmartDesign。
- 添加时序约束:像素时钟 148.5 MHz,AXI 时钟 200 MHz,设置跨时钟域路径为 false path 或异步处理。
- 运行综合与布局布线,检查时序报告,确认无负 slack。
- 生成比特流,通过 FlashPro 下载到开发板,用摄像头输入测试图案,观察 HDMI 输出。