基于 Verilog FPGA 的双线性插值视频缩放系统实现
本项目在易灵思 Ti60F225 钛金系列 FPGA 上实现了端到端的 4K@60Hz 视频缩放链路。核心功能是将任意分辨率(640×480 至 3840×2160)的 HDMI 输入实时缩放到用户指定分辨率,并通过 HDMI 输出显示。整个方案不依赖外部 DDR,仅使用片内嵌入式 SRAM 完成行缓存,实现了小于 2ms 的固定延迟,非常适合医疗内窥镜、工业检测及直播导播等对低延迟敏感的场景。
系统架构设计
整体系统划分为五个时钟域和三大子系统,数据流向清晰:
┌─────────────┐ ┌──────────────┐ ┌──────────────┐
│ HDMI-RX │ AXI-Stream │ 缩放核心 │ AXI-Stream │ HDMI-TX │
│ 解码 4:4:4 │ ------------> │ 双线性插值 │ ------------> │ 编码 4:4:4 │
└─────────────┘ └──────────────┘ └──────────────┘
↑ ↑ ↑
200 MHz 300 MHz 297 MHz
参考时钟 像素时钟 TMDS 时钟
1. 视频接收子系统
利用 FPGA 高速 LVDS 硬核接收 3 通道 TMDS 差分信号,内置 DVI 解码器完成 8b/10b 解码、字对齐与通道绑定,最终输出 24bit RGB 像素流及控制信号(hsync/vsync/de),完全符合 AXI4-Stream 协议。
2. 缩放子系统(核心)
这是本设计的重点。我们仅缓存'两行'原始像素,采用滑动窗口机制。基于定点 12bit 小数运算完成双线性插值,输出像素流再次封装为 AXI4-Stream,确保时钟域隔离。
3. 视频发送子系统
将缩放后的像素打包成 TMDS 流,支持 480p 到 4K@60Hz 多种 VESA 时序,通过 EDID 动态协商。
4. 控制面
通过 32 位 RISC-V 软核(Ti60F225 内嵌)经 AXI-Lite 寄存器提供配置接口,包括输入/输出分辨率设置、缩放系数(浮点转定点由软件处理)以及伽马曲线索引(2.2/1.8/sRGB)。UART 调试口可实时打印链路状态,如帧率、丢包及错误中断。
缩放核心算法详解
算法选择与定点化
在面积与画质之间权衡后,我们选用了双线性插值。相比最近邻算法,PSNR 提升了 6–8dB,而资源消耗仅为每通道 2 个乘法器和 4 个加法器。缩放系数定义为 ratio = src_height / dst_height,采用 12bit 定点小数(8.4 格式),保证最大 8 倍放大时误差小于 1/16 像素。
滑动窗口缓存
使用双口 SRAM(真双口,512×24bit×2 行)实现乒乓结构:
- 写口:按源像素时钟顺序写入当前行;
- 读口:根据垂直系数生成窗口地址,一次读出 2×2 邻域像素;
- 带宽:读口 2×24bit/周期,写口 1×24bit/周期,总带宽约 21.6Gbit/s @ 300MHz,满足 4K@60 需求。
插值流水线
采用三级流水线设计,每级耗时 1 周期,总延迟约 10ns:
- 系数计算:根据目标坐标小数部分生成权重 w00/w01/w10/w11;
- :对 2×2 窗口做两次乘加,得到中间值 p0、p1;


