这个实验是黑金云课堂视频图像处理方向的综合例程,把多路视频采集、源切换、帧缓存、OSD 菜单生成、像素混合和显示输出串成一条完整的视频流水线。工程要解决两件核心事情:一是在 HDMI、摄像头、复合视频、板内彩条等多个视频源之间,按按键或串口命令选通一路显示,也可以扩展成分屏、画中画模式;二是在选中的背景画面上叠加一层可配置的菜单、字符或图形图层,让用户在屏幕上看到选项、状态提示和操作菜单。整条链路在 FPGA 里以像素流方式实时处理,关键技术点集中在三处:多源时序与速率的缓存对齐、用扫描坐标判断菜单显示区域、以及混合前后行场同步和数据有效信号的流水线延迟对齐。下面按课程定位、流水线架构、源切换实现、菜单叠加实现、接口信号和调试要点逐项展开。
一、实验在黑金课程体系中的位置
1. 前置知识
这个综合例程一般安排在基础实验之后,学习者需要先掌握:
- 时钟与复位、按键消抖、串口收发等基础逻辑
- 视频时序基础:像素时钟 pclk、行同步 hs、场同步 vs、数据有效 de、RGB 像素数据
- 单路视频采集与显示流程:摄像头 / HDMI 输入 → FIFO/DDR 缓存 → 显示输出
- 字符或彩条在屏幕上的定点显示方法
2. 常见板卡与外设搭配
| 类别 | 典型资源 | 作用 |
|---|---|---|
| 视频输入 | HDMI 输入(解码芯片)、CMOS/OV 系列摄像头、复合视频采集芯片、板内彩条测试图 | 提供多路待切换的视频源 |
| 缓存 | 片内 FIFO、DDR / 帧缓存 | 缓冲像素流,匹配不同源的速率与时序 |
| 交互 | 板载按键、串口命令、触摸屏 | 选择视频源、移动菜单项、切换显示模式 |
| 视频输出 | HDMI、VGA、LCD 液晶屏 | 输出叠加菜单后的最终画面 |
黑金官方例程体系中,单目 / 双目摄像头采集显示、HDMI 字符显示、彩条输出、波形网格叠加等章节,都是这个综合实验的前置模块。
二、整体流水线架构
整条视频链路按数据流向划分为七个功能模块,每个模块都输出统一的视频时序信号(pclk、hs、vs、de、RGB 数据),方便前后级直接对接。
| 序号 | 模块 | 主要职责 |
|---|---|---|
| 1 | 视频输入采集 | 解码或采集各路视频,输出标准 RGB888 像素流与同步时序 |
| 2 | 帧缓存 / FIFO | 缓存各路像素,解决速率差、时序差和跨时钟域问题 |
| 3 | 视频源选择切换 | 按按键、串口或触摸命令选通当前显示源,支持单画面 / 分屏 / PIP |
| 4 | 坐标生成模块 | 依据时序信号产生当前像素的 x、y 扫描坐标 |
| 5 | OSD 菜单生成 | 字库 ROM 取点阵,按菜单区域配置生成前景菜单像素 |
| 6 | 像素混合模块 | 区域内取 OSD 前景,区域外取背景视频,可做 Alpha 混合 |
| 7 | 时序生成与输出编码 | 产生标准显示时序,编码为 HDMI/VGA/LCD 信号送显示器 |
数据流方向可以概括为:多路采集 → 各自缓存 → 源选择 → 背景视频流 → OSD 叠加混合 → 时序输出。
三、多路视频源切换怎么实现
1. 常见视频源类型
- HDMI 输入源:由 HDMI 解码芯片还原出数字视频流,电脑、机顶盒等可作为信号源。
- 摄像头源:CMOS/OV 系列摄像头采集的实时图像,经 I2C 配置寄存器后输出 DVP/MIPI 像素流。
- 复合视频源:多路模拟复合视频经采集芯片解码为 BT656 等标准格式,可做多路复用总线后在 FPGA 端解复用。
- 板内测试源:彩条、网格、字符图等 FPGA 内部生成的测试画面,用于验证显示链路是否正常。
2. 切换控制方式
| 控制方式 | 实现思路 | 适用场景 |
|---|---|---|
| 按键切换 | 按键消抖后产生源选择信号,计数器或寄存器记录当前源编号 | 板上手动切换,实验演示最常用 |
| 串口命令切换 | 串口解析命令字,更新源选择与显示模式寄存器 | 上位机控制、工程化项目 |
| 触摸切换 | 触摸屏坐标识别点击区域,联动菜单与源选择 | 带屏的交互产品 |
3. 常见显示模式
- 单画面模式:同一时刻只选通一路源,全屏显示。
- 分屏模式:多路源同时缓存,按坐标把屏幕划分为多个子区域,各区域取对应源的像素。
- 画中画(PIP)模式:一路作为全屏背景,另一路在指定小窗口内叠加显示。
4. 切换时避免花屏的要点
- 源选择寄存器尽量在场同步(vs)有效期间更新,避免一行图像中途换源造成撕裂。
- 各路源先经过独立缓存,再进入选择模块,保证输出时序由统一的显示时序驱动。
- 切换瞬间若两路分辨率或帧率不同,需要先做缩放或裁剪匹配,否则窗口坐标和像素位置会错位。
- 选择模块输出的 hs、vs、de 要与选中的像素数据严格对齐,不能只换数据不换时序。
四、图像菜单叠加(OSD)怎么实现
1. OSD 图层的基本构成
菜单图层本质上是一张按坐标生成的前景像素图,和背景视频在像素级做选择或混合。一个可配置的菜单图层通常包含:
- 菜单区域起点坐标(X_osd,Y_osd)
- 区域宽高(L_osd,W_osd)
- 前景色(菜单文字 / 图标颜色)与背景色(菜单底色)
- 透明度(Alpha 值)
- 菜单项、光标、状态提示等字符内容
2. 字库 ROM 与点阵取模
- 每个字符按点阵字库存储,常见为 8×16 或 16×16 点阵;字符图案放在字库 ROM(font ROM)中。
- 当前像素坐标映射到字符行列,再换算成 ROM 读地址;ROM 数据位为 1 的点显示前景色,为 0 的点透出背景。
- ROM 数据宽度常为 8 位,一个字符点只占 1 bit,需要多个时钟周期取出并逐位比较,把点阵还原成屏幕上的单个像素。
3. 区域判断与像素选择
坐标生成模块给出当前像素的 x、y 后,OSD 控制电路依次完成:
- 判断当前坐标是否落在某个菜单矩形区域内。
- 落在字符区时,发出读字库请求,取出对应点阵编码。
- 区域内按配置选择前景菜单像素,区域外直接输出背景视频像素。
- 需要半透明菜单时,由 Alpha 混合电路对前景和背景像素做加权混合。
4. Alpha 混合的硬件做法
混合计算把前景像素和背景像素按透明度加权得到输出像素。硬件实现中通常把浮点除法换算成 2 的幂次移位运算,避免在 FPGA 里做浮点除法;透明度通过寄存器配置,可实时调整菜单底色的深浅。
5. 流水线同步对齐
OSD 判断、字库读取、混合计算都是多级流水线,每经过一级逻辑,像素数据就延迟若干个时钟周期。对应的行同步、场同步和 de 信号必须用相同级数的延迟链路对齐,否则会出现菜单文字偏左偏右、上下错位,或者菜单区域和背景图像错位的问题。
五、典型工程信号与模块接口
| 信号名称 | 方向 | 位宽 | 说明 |
|---|---|---|---|
| pclk | 输入 | 1 | 像素时钟 |
| i_hs / o_hs | 输入 / 输出 | 1 | 行同步信号 |
| i_vs / o_vs | 输入 / 输出 | 1 | 场同步信号 |
| i_de / o_de | 输入 / 输出 | 1 | 数据有效信号 |
| i_data / o_data | 输入 / 输出 | 24 | RGB888 像素数据(R/G/B 各 8 bit) |
| x | 输出 | 12 | 当前像素水平坐标 |
| y | 输出 | 12 | 当前像素垂直坐标 |
| source_sel | 输入 / 寄存器 | 2–N | 视频源选择编号 |
| osd_x/osd_y/osd_w/osd_h | 配置寄存器 | 若干 | 菜单区域起点与宽高 |
| alpha | 配置寄存器 | 若干 | 前景菜单透明度 |
六、调试常见问题清单
| 现象 | 常见原因 | 排查方向 |
|---|---|---|
| 切换源后花屏或撕裂 | 源在一行 / 一帧中途切换,缓存不足 | 改在场同步边界切换,检查各路 FIFO/DDR 缓存 |
| 菜单整体错位、文字偏移 | 同步信号与像素数据延迟未对齐 | 核对 OSD 与混合各级流水线延迟,延迟 hs/vs/de |
| 菜单颜色反了或只显示单一颜色 | 字库点阵有效电平、前景 / 背景色配置写反 | 检查 ROM 位有效定义与颜色寄存器赋值 |
| 分屏 / PIP 窗口内容错位 | 不同源分辨率未做缩放,窗口坐标映射错误 | 核对裁剪 / 缩放逻辑与窗口坐标计算 |
| 画面卡顿、丢帧 | 缓存深度不足或带宽不够 | 检查 FIFO 水位、DDR 读写突发配置 |
| 菜单背景不透明挡画面 | Alpha 值配置为全不透明 | 调整透明度寄存器,验证混合输出 |
| 字符缺笔画 | 字库取模方式、ROM 地址映射错误 | 核对字模生成工具的取模顺序与地址位宽 |
七、工程扩展方向
- 增加触摸屏菜单交互:光标移动、选项高亮、确认选择联动视频源切换。
- 接入多画面拼接与缩放 IP,支持更多分辨率的源同时显示。
- 把菜单配置通过串口或 ARM 端寄存器下发,实现软件层控制 OSD 布局与文案。
- 在混合前后插入图像处理模块,如灰度、边缘检测、滤波等,组成完整视频处理链路。
【相关 FAQ】
问题 1:黑金云课堂这个 FPGA 综合例程里,多路视频源切换和图像菜单叠加显示分别要解决什么问题?
回答 1:多路视频源切换解决的是在 HDMI、摄像头、复合视频、板内彩条等多个输入源之间选通显示的问题,可实现单画面、分屏和画中画模式;图像菜单叠加显示解决的是在背景视频上叠加字符、菜单、光标和状态提示的问题。两者在同一条 FPGA 视频流水线中衔接:先由源选择模块选出背景画面,再由 OSD 菜单生成与混合模块把菜单图层叠加上去。
问题 2:这个 FPGA 实验的整体模块划分是怎样的,视频数据按什么顺序流动?
回答 2:工程一般划分为视频输入采集、帧缓存 / FIFO、视频源选择切换、坐标生成、OSD 菜单生成、像素混合、时序生成与输出编码七个模块。数据流向是:多路视频采集后各自缓存,经源选择模块选出背景视频流,坐标模块给出 x、y 扫描坐标,OSD 模块生成菜单前景像素,混合模块完成前景与背景选择或 Alpha 混合,最后由时序模块编码输出到 HDMI、VGA 或 LCD 显示器。
问题 3:OSD 图像菜单在 FPGA 里是怎么生成的,字库和坐标怎么配合?
回答 3:OSD 菜单由字库 ROM、菜单区域配置寄存器和混合电路配合生成。字库 ROM 按点阵存储字符图案,坐标模块给出当前像素的 x、y;电路先判断坐标是否落在菜单区域内,落在字符区时按行列映射出 ROM 地址取出点阵,点阵为 1 的点输出前景色,为 0 的点透出背景视频;需要半透明效果时再由 Alpha 混合电路加权输出。
问题 4:为什么菜单叠加后容易出现错位,调试时怎么保证时序对齐?
回答 4:错位通常是因为字库读取、区域判断、Alpha 混合都是多级流水线,像素数据每级延迟若干时钟周期,而行场同步和 de 如果没有做同样级数的延迟,就会和像素数据错开。调试时需要逐级统计逻辑延迟周期,用移位寄存器或延迟链路把 hs、vs、de 同步对齐,确保菜单坐标、前景像素和背景像素在同一时刻进入混合模块。
问题 5:多路视频源切换时怎么避免花屏、撕裂和窗口错位?
回答 5:避免花屏要把源选择寄存器放在场同步边界更新,不让一行图像中途换源;各路源先经过独立 FIFO/DDR 缓存,输出时序由统一显示时序驱动;不同分辨率或帧率的源要先做缩放或裁剪匹配,再计算分屏、PIP 窗口坐标;选择模块输出的 hs、vs、de 必须和选中的像素数据严格对齐。
问题 6:黑金云课堂这类 FPGA 视频实验,前置需要掌握哪些基础模块?
回答 6:前置需要掌握按键消抖、串口收发、基础时序逻辑,理解 pclk、hs、vs、de、RGB 像素数据这套视频时序;先完成单路摄像头或 HDMI 采集显示、FIFO/DDR 缓存、彩条与字符定点显示等基础实验,再进入多路切换加 OSD 叠加的综合例程。黑金官方教程中 HDMI 字符显示、摄像头采集显示、波形网格叠加等章节,对应了本实验的各个前置模块。
【参考资料】
[2026-11-05](ZYNQ 的 VDMA 采集 OV5640 视频数据通过 HDMI 接口显示)电子发烧友网
[2026-10-19](alinx 的 FPGA 技术专栏:黑金云课堂系列教程)电子发烧友网
[2026-09-18](搞定 FPGA 音频采集!AN831 录音回放实验手把手教学
【FPGA 黑金云课堂】)电子发烧友网
[2026-07-30](
【黑金云课堂】FPGA 技术教程 Linux 开发:系统定制)与非网
[2026-06-25](
【黑金云课堂】FPGA 技术教程 Linux 开发:DP 音频播放与 VCU 视频解码)与非网
[2026-06-12](ALINX VD100+Simulink 快速实现 FPGA 图像处理 Sobel 边缘检测)与非网
[2022-04-01](基于 ZYNQ 的高清视频与图形叠加显示技术)《计算机技术与发展》
[2021-02-24](
【紫光同创国产 FPGA 教程】
【第十七章】AD 实验之 AD9238 波形显示)ALINX 官方博客
[2021-01-19](【ZYNQ Ultrascale+ MPSOC FPGA 教程】第十五章 HDMI 字符显示实验)ALINX 官方博客
[2017-12-21](基于 FPGA 的 HDMI 多模式显示模块设计)电子技术应用网
[2016-12-14](黑金开发板之 OV5642 双目摄像头用户手册)ALINX
[2014-07-30](基于 SoPC 的 OSD 控制器设计)电子技术应用网
【免责声明】
本文基于 ALINX 黑金官方公开教程、用户手册、公开技术论文与行业资料整理,仅作 FPGA 视频图像处理例程的原理性梳理,不构成任何开发板采购、工程方案或项目交付建议。文中模块划分、信号位宽、混合算法与调试方法为通用 FPGA 视频设计口径,具体工程实现会随开发板型号、芯片平台、视频接口、分辨率和配套例程版本不同而变化;字库格式、寄存器地址、时序参数请以对应板卡官方手册和实际工程代码为准。本文不对第三方资料中的实验结论作独立复现背书。
