音视频数字矩阵
高清视频矩阵
高清视频模拟数字混合矩阵
设计需求,方案讨论。
矩阵描述
输入视频经过专用的视频芯片转换位RGB/YUV444/LVDS进 FPGA 将输入音视频转换为 Serdes 数字差分信号,进背板,经过数字差分交换到输出板的FPGA Serdes,经过FPGA将视频还原到DDR3 SDRAM 经过视频裁剪缩放分割等输出到专用视频输出芯片再输出到显示器。
矩阵组成
视频矩阵由机箱、电源、背板、数字高速差分交换板、系统控制板(嵌入式系统管理)、基础视频输入卡、基础视频输出卡。以HDMI接口为例子,简单描述输入卡输出卡。考虑代码移植的兼容性,板卡采用ARM CPU,没有采用FPGA内嵌CPU。
A. 视频输入卡,HDMI 视频经过HDMI 接收芯片转换成 RGB888/YUV422/YUV444/LVDS 可选,进入FPGA,视频与 FPGA 下的DDRS SDRAM 中的多个OSD叠加后,与音频同步编码转换成Serdes发送到背板。ARM CPU管理CAN总线,HDMI输入视频接口芯片的舒适化设置,管理FPGA内部寄存器的设置。实现去隔行功能,视频缩放(任意比列、支持4K)、每路视频支持多个OSD与视频透明半透明叠加,OSD 任意尺寸(不大于原视频输入的尺寸)的静态真彩位图、动态OSD视频、动态中英文字母。
B. 视频输出卡,背板来的Serdes 经FPGA 解码成音频和视频流,视频经过FPGA存入DDR3 SDRAM,再从DDR3 SDRAM中读出经过裁剪、缩放(任意比列、支持4K)、分割等处理将视频与音频送到视频输出芯片转换成HDMI送到显示器。
C. 多画面分割卡,将背板来的多路Serdes输入信号裁剪缩放后重新组成一路输出。画面分割的数量与视频输入Serdes的数量有直接关系,视频放大需占用DDR3内存的带宽,缩小不占DDR3的带宽。
D. 多画面拼接卡,比如3X3的9块屏组成大大屏,需要9个拼接单元,这每个拼接单元能实现多个视频在一个显示器上分割显示,这就实现了多路视屏在同一个3x3的大屏上任意位置,任意层次,漫游叠加遮挡等多画面拼接显示。
E. 多画面融合卡,主要用在多投影机拼接融合,在球体、锥体、立体建筑物、立体舞台上投影,将多个视频融合显示组成一个立体的动态视频场景。融合单元在实现分割单元、拼接单元的同时要实现视频的各种梯形、枕形、球面、锥面、不规则图形的拉伸、旋转等算法。要消除多投影机投影边缘亮带。
F. FPGA视频接口 RGB888/YUV422/YUV444/LVDS 可选,8-48位并行,SDR/DDR 165MHz。支持 1.2Gbps LVDS 可支持4K_24@60Hz。
G. FPGA DDR3 SDRAM接口 800MHz 32BIT 512M 字节。
H. FPGA Serdes 实现音频视频同步传输。实现USB的鼠标键盘、RS232等数据传输。
DDR3 数据带宽,Serdes收发速率的计算推导
A. DDR3 数据吞吐量,理论上800M DDR3的数据吞吐量为 800x32=25.6Gbps。考虑多路视频读写(CPU读写很慢,忽略CPU读写),DDR3自动刷新,实际使用不能超过80%,超过这个视频会有抖动等不稳定现象。我们按2K_24位视频计算,2K视频的点时钟位148.5MHz 按150M算,忽略行场逆程时间,考虑视频在内存中实现分割,按32对齐 150x32=4.8Gbps,(25.6/4.8)x0.8=4.3。在我们实际应用中800M 32位DDR3 一般只实现2路2K@60视频的输入+2路2K@60视频的输出。
B. DDR3带宽问题,多画面拼接和多画面融合面临同一问题。在视频裁剪后再大比例放大,由于FPGA内部FIFO/RAM资源不可能兜住哪怕非常小的一帧画面,需要在放大时得用DDR3 SDRAM 来兜,这就需要占用DDR3的读写带宽。在这类单元卡中要扩展视频输入的路数,要考虑板卡Serdes 的数量,FPGA Serdes的数量,还要考虑DDR3 SDRAM的带宽。在做视频拉伸、旋转的算法也需要占用DDR3 SDRAM的带宽。
C. Serdes 数据吞吐量,这是我们矩阵最关键的数据,越大越好。在实际中使用有多约束,背板的 Crosspoint Switches ,FPGA 的Serdes 的速率,价格因素等都在干扰我们的选择。
常见的视频的数据带宽,忽略音频数据。 原始流 8B10B 64B66B
a:1920x1080_24bit@60Hz 1920x1080x24x60= 2.99Gbps 3.74Gbps 3.08Gbps
b:1920x1200_24bit@60Hz 1920x1200x24x60= 3.32Gbps 4.15Gbps 3.42Gbps
c:3840x2160_24bit@30Hz 3840x2160x24x30= 5.97Gbps 7.46Gbps 6.16Gbps
d:3840x2160_24bit@60Hz 3840x2160x24x60= 11.94Gbps 14.93Gbps 12.31Gbps
- 1
- 2
- 3
- 4
- 5
D. Serdes 常见的协议。我们在Serdes中要传输很多数据,有视频,音频,控制数据也可能有USB,232,以太网等。考虑Serdes交流特性,不能长0和长1,我们一般会选择一个协议来用。
- 8B10B协议,以太网,PCI-E采用该协议,非常成熟,应用非常广泛。但是有个致命的缺点,编码效率太低 8/10 = 0.8
,损失20%的带宽。 - 3G-SDI协议,采用成熟的3G-SDI直接传输音视频,是个非常不错的建议,该协议本身就是广电系统中音视频传输用的,有很多厂家的矩阵都是采用该协议。缺点也很明显,视频只能支持1080P60 422/10bit。在要求1920x1200@60或要求24位真彩、YUV444的及苛刻挑剔的用户就不好用了。
- 64B66B协议,万兆以太网采用该协议,非常成熟,编码效率恨高 64/66=0.97,编码实现比较复杂,一般需要FPGA芯片厂家支持。
- NRZ扰码,封装自己的协议。可以借鉴SDI采用的NRZ扰码协议为底层,自己再定义关键字去封装自己的协议。对编程人员要求比较高,需要长时间大量的数据交换去验证自己定义的协议的稳定性。
Crosspoint Switches 高速数字差分交换芯片的选择
从上面的Serdes速率分析,我们的差分交换芯片的速率最小也要选3.125Gbps的,支持2K@60P视频无损无堵塞交换。考虑目前4K@30的视频发展很快,家用电视、显示器甚至手机的分辨率也达到4K,我们在设计初期就应该考虑兼容4K@30/4K@60的无损切换。长远考虑建议选6.25Gbps的Crosspoint Switches。这样采用单个差分对就能传输一路4K@30视频信号,附属产品的4K@30的光纤收发器也能直接进出背板。在未来的4K@60的视频采用2个差分对来传输。
厂家连接
https://www.macom.com/crosspoint
https://www.semtech.com/products/broadcast-video/crosspoints
https://www.microsemi.com/product-directory/signal-integrity/3579-digital-crosspoint-switches
https://www.analog.com/cn/products/switches-multiplexers/digital-crosspoint-switches.html
FPGA选择
FPGA选择要看设计者手上现有的代码资源,Serdes速率选择,DDR3 SDRAM 速率,FPGA 内部FIFO/RAM块的数量,FPGA 内部DSP数量(视频缩放、拉伸等算法需要大量的DSP单元支持)。一般3.125Gbps 2K@60的视频矩阵方案中,选Lattice ECP3 的厂家较多。选用6.25Gbps的支持4K@30的视频矩阵方案目前Xilinx ARTIX-7 是我建议的选择。
系统控制卡
考虑目前矩阵需要有输入输出端口的视频预览功能,系统控制卡一定需要有视频的h.264/Jpeg 编码能力。建议选用华为海思的CPU,操作系统选用Linux/Android。
FPGA 视频缩放模块
支持邻近、线性、三次插值算法,单个缩放模块最大支持166M时钟(支持1080P60),可以2个或多个模块并联实现4K@30/4K@60的缩放。支持任意比列的缩放。视频放大需占用DDR3内存的带宽,缩小不占DDR3的带宽。
关键点:
A. 3种插值的FPGA视频缩放算法的实现。(邻近插值,双线性插值,双立方次卷积分插值)
B. 多路视频读写及CPU读写同一组DDR3 SDRAM的仲裁实现。
C. Serdes 实现音视频的数据编解码发送和接收。
D. 视频融合卡的视频拉伸算法的实现。
E. 视频任意角度的旋转算法实现。
F. 多板卡间的CAN总线通讯协议的拟定和实现。
小结:
A.在用户要求不苛刻的2K视频矩阵,采用3.125Gbps Serdes的FPGA + 3.125Gbps Crosspoint Switches 就能实现性价比非常高的矩阵产品(LATTICE ECP3 FPGA就有很好)。(集中招标采购竞争激烈,对矩阵技术参数要求比较苛刻,不建议采用该方案)
B.支持1920x1200@60的2K视频矩阵,采用 LATTICE ECP5 FPGA 或 XILINX ARTIX-7 FPGA + 3.5Gbps Crosspoint Switches。
C.单路Serdes 支持4K@30 的视频矩阵,采用 XILINX ARTIX-7 FPGA + 6.25Gbps Crosspoint Switches。
D.单路Serdes 支持4K@60 的视频矩阵,采用 XILINX KINTEX-7 FPGA + 12.5Gbps Crosspoint Switches。
E. 采用多路Serdes 传4K方案可以降低 Crosspoint Switches 的速率要求。
成功案例:
A. 矩阵基本输入卡 2K@60 设计的,采用 2片 XILINX ARTIX-7 XC7A75T-2 FPGFA GTP(6.25Gbps) + 2组 DDR3_800MHz@32BIT + 4片 ADV7611 + 1片 ARM_CPU ,实现4路HDMI输入卡。实现去隔行功能,视频缩放(任意比列、支持4K)、每路视频支持3个OSD与视频透明半透明叠加,OSD 任意尺寸(不大于原视频输入的尺寸)的静态真彩位图、动态OSD视频、动态中英文字母。
B. 矩阵基本输出卡 2K@60 设计的,采用 2片 XILINX ARTIX-7 XC7A75T-2 FPGFA GTP(6.25Gbps) + 2组 DDR3_800MHz@32BIT + 4片 ADV7513 + 1片 ARM_CPU ,实现4路HDMI输出卡。渐变切换无缝,画面冻结,单画面拼接等功能去隔行功能。支持4K Serdes 信号缩小为2K或局部裁剪成2K输入显示。
C. 矩阵基本输出卡 4K@30 设计的,采用 2片 XILINX ARTIX-7 XC7A75T-2 FPGFA GTP(6.25Gbps) + 2组 DDR3_800MHz@32BIT + 2片 SiI9136-3 + 1片 ARM_CPU ,实现2路4K@30 HDMI输出卡。渐变切换无缝,画面冻结,单画面拼接等功能去隔行功能。支持2K/4K Serdes 信号输入显示。
D. 矩阵基本输入卡 4K@30 设计的,采用 2片 XILINX ARTIX-7 XC7A75T-2 FPGFA GTP(6.25Gbps) + 2组 DDR3_800MHz@32BIT + 2片 ADV7619 + 1片 ARM_CPU ,实现2路4K@30 HDMI输入卡。实现去隔行功能,视频缩放(任意比列、支持4K)、每路视频支持3个OSD与视频透明半透明叠加,OSD 任意尺寸(不大于原视频输入的尺寸)的静态真彩位图、动态OSD视频、动态中英文字母。
E. 矩阵多功能卡 4K@30 设计的,采用 2片 XILINX ARTIX-7 XC7A200T-2 FPGFA GTP(6.25Gbps) + 8组 DDR3_800MHz@32BIT + 2片 SiI9136-3 + 1片 ARM_CPU ,实现2路4K@30 HDMI输出。
-
a) 2路,4K@30/2K@60 HDMI输出。每个输出实现8-16路2K输入分割或4-8路4K输入分割卡(一个显示屏能显示任意位置、尺寸、层次叠加8-24路2K视频显示)。
-
b) 2路,4K@30/2K@60 HDMI输出。每个输出实现8-16路2K输入分割或4-8路4K输入拼接卡(一个NxN的大屏能任意位置、尺寸、层次叠加漫游8-24路2K视频显示)。
-
c) 2路,4K@30/2K@60 HDMI输出。每个输出实现4-8路2K输入分割或4路4K输入融合卡(多个投影在球面、锥面、不规则曲面融合组成一个动态立体造型)。
-
d) 可更换输出视频接口芯片实现单路4K@60的多功能输出。
F. Serdes 采用64B66B协议,6.25Gbps的速率。
G. Crosspoint Switches 采用 ADN4612、M21148、M21167。
H. 系统控制卡选用普通的ARM,只做管理,没做视频预览功能。
I. 计划做,但是目前没有开始实行。采用海思CPU+FPGA做2K/4K编码卡、解码卡、矩阵视频预览卡。
有兴趣的可以联系我做进一步的技术讨论,没有音视频技术基础的勿扰。
FPGA 多屏多画面视频拼接器
采用FPGA构建数字视频矩阵的一些设计思路和设计需求
FPGA 四画面视频分割逻辑框图
FPGA 四画面视频拼接单元逻辑框图
FPGA 视频处理中外部SDRAM的作用
FPGA 处理视频SDRAM带宽计算
FPGA 处理视频SDRAM带宽计算(四画面视频分割器)