您的位置首页 >半导体 >

《FPGA 综合例程拆解多路视频源切换与 OSD 图像菜单叠加显示实验(黑金云课堂)》

这个实验是黑金云课堂视频图像处理方向的综合例程,把多路视频采集、源切换、帧缓存、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 扫描坐标
5OSD 菜单生成字库 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 控制电路依次完成:

  1. 判断当前坐标是否落在某个菜单矩形区域内。
  2. 落在字符区时,发出读字库请求,取出对应点阵编码。
  3. 区域内按配置选择前景菜单像素,区域外直接输出背景视频像素。
  4. 需要半透明菜单时,由 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输入 / 输出24RGB888 像素数据(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 视频设计口径,具体工程实现会随开发板型号、芯片平台、视频接口、分辨率和配套例程版本不同而变化;字库格式、寄存器地址、时序参数请以对应板卡官方手册和实际工程代码为准。本文不对第三方资料中的实验结论作独立复现背书。