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)能力较强的配置存储器。对于需要长时间无人值守运行的视频采集设备,这种可靠性是选型时的重要加分项。

PolarFire 视频处理链路与片上资源映射 图像源 MIPI / SDI / CMOS 输入接口层 SerDes / IOD / CDR 预处理 去马赛克 / 白平衡 核心处理 卷积 / 缩放 / 色彩转换 输出 HDMI / 显示 片上资源映射关系 LSRAM 行缓冲 / 帧缓存 乒乓缓冲 Math Block 18×18 乘法器 MAC 阵列 / 卷积 µSRAM 系数表 / LUT 小容量缓存 Fabric LUT4 + 寄存器 控制逻辑 / 状态机 典型数据流与延迟预算(示例) • 输入接口:MIPI CSI-2 4-lane,每 lane 1.5 Gbps,总带宽 6 Gbps,可支持 1080p60 RAW10 • 行缓冲:3 行 × 1920 像素 × 10 bit ≈ 57.6 Kbit,使用 2 块 LSRAM 即可容纳 • 卷积:3×3 窗口,每像素 9 次 MAC,1080p60 约 1.87 亿像素/秒,需约 17 亿 MAC/s • 色彩转换:RGB→YCbCr 矩阵运算,每像素 9 次乘法,可并行 4 像素/周期 • 输出:HDMI 1080p60,像素时钟 148.5 MHz,需保证流水线无气泡

二、视频图像处理典型链路

一条完整的视频处理链路通常包含五个阶段:输入接口、预处理、核心处理、后处理、输出接口。以 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。搭建步骤如下:

  1. 安装 Libero SoC 与 SmartHLS,确认 License 有效,并安装 PolarFire 器件支持包。
  2. 创建新工程,选择目标器件型号(例如 MPF300T-1FCG1152E),设置默认时钟约束为 200 MHz。
  3. 在 SmartDesign 中例化 MIPI CSI-2 接收 IP、LSRAM 行缓冲、Math Block 卷积核和 HDMI 发送 IP,连接 AXI4-Stream 接口。
  4. 用 SmartHLS 生成色彩转换模块,导出为 RTL 并集成到 SmartDesign。
  5. 添加时序约束:像素时钟 148.5 MHz,AXI 时钟 200 MHz,设置跨时钟域路径为 false path 或异步处理。
  6. 运行综合与布局布线,检查时序报告,确认无负 slack。
  7. 生成比特流,通过 FlashPro 下载到开发板,用摄像头输入测试图案,观察 HDMI 输出。
建议在首次上板前,先用 ModelSim 对卷积模块做 1920×1080 的仿真,检查行缓冲边界处的像素是否正确。边界处理是视频链路中最容易出错的地方。
PolarFire 的配置存储器为非易失性,但开发阶段频繁烧写会消耗寿命。建议调试时使用 JTAG 加载比特流,仅在最终验证时烧写 SPI Flash。