嵌入式学习小组
直播中

陈敏杰

7年用户 263经验值
私信 关注

怎么实现基于FPGA的LCD大屏幕拼接系统的设计?

本项目设计基于FPGA的数字视频处理算法, 实现对DVI视频信号进行解码,实时对数字视频的分割、 视频图像的插值放大,并同时将处理结果经DVI编码送到LCD显示,完成大屏幕拼接系统的设计。

回帖(1)

李木木

2021-6-1 10:27:39
  项目概述
  随着各种图形、图像内容质量的不断提升以及系统运行实时显示的需要,金融、通信、交通、能源、安全、军事等越来越多的行业需要建立能够实时整合多路信号输入的超大屏幕显示系统。而数字技术的飞速发展,也使人们对大尺寸、多画面、真色彩、高画质、高分辨率的计算机图形、图文、数据与各类视频图像显示效果的需求得以满足。其中,以视频信息的要求最为强烈,人们不仅希望视频显示尺寸的越来越大,而且视频显示质量也要求能达到多画面、真色彩、高画质、高分辨率。
  在大屏幕拼接系统中,拼接控制器的优劣直接决定着整个大屏幕显示系统效果的好与坏,目前,拼接控制器的实现方法共三种:第一代PCI插卡式的工作原理是通过工控机,利用多路PCI计算机主板,一部分PCI插槽插入视频采集卡,另外一部分PCI插槽插入视频输出卡,输入和输出中间由CPU来构建一个运算和处理中心,这时就组建成了一台工控式控制器。他的图形处理原理是通过CPU运算后将母信号分割成M*N个子视频信号后,再把每一个子信号都进行放大处理分别传送给拼接幕墙上的各个对应单元,显示单元将处理器传送来的信号实现在大屏幕的每个显示单元上,而分辨率和处理速度由计算机CPU及对应的PCI卡决定,故性能有限。第二代嵌入式拼接器也称“内拼式拼接器”他是基于液晶屏信号驱动板上增加的运算分割技术,其工作原理先将一个完整的母画面传送至信号运算处理器,运算处理器以ID地址编码器的方式开始锁定各自在母画面中的位置,以二进制BCD码顺序排列开始运算切割成多个子画面,处理器将各自运算好的数据直接输送给液晶驱动板,驱动板将色彩、亮度、对比度等参数调校后以LVDS方式传送至LCDIC成像器形成图像,内拼式拼接器只是单元内部显示像素的处理,结果是合成显示图像,不能解决信号高分辨率拼接和任意位置任意大小多窗口信号处理。第三代拼接系统中控制器采用纯硬件处理器FPGA阵列式处理构架,全硬件设计,无CPU和操作系统。控制器集超宽带视频信号采集、实时高分辨率数字图像处理、二维高阶数字滤波等高端图像处理技术于一身,具有强大的处理能力。控制器采用多总线并行处理机制,能从根本上保证对所有输入视频进行全实时处理,图像没有延迟,无丢桢现象,由于从结构上就超出了前两代的机器的设计理念,采用纯硬件的处理器运算技术,所以启动时间快,工作非常稳定。
  数字化系统产品中,直接采用超大规模、超高速的现场可编程门阵列(FPGA,Field Programmable Gate Array),基于其高集成度、高速、可编程等优点,来实现硬件单片集成,已成为必然趋势。FPGA丰富的内部资源及高速为实时视频处理提供解决途径。
  因此,本项目设计基于FPGA的数字视频处理算法, 实现对DVI视频信号进行解码,实时对数字视频的分割、 视频图像的插值放大,并同时将处理结果经DVI编码送到LCD显示,完成大屏幕拼接系统的设计。
  一、1、系统概述
  1.1系统结构
  整个LCD屏幕显示拼接系统包含DVI解码模块、视频分割模块、SRAM、视频延展式线性插值放大模块、视频输出控制模块、DVI编码模块等。FPGA 内部逻辑实现将输入数字视频分成四路并行的子视频像素流,经各自独立的视频处理通道进行实时插值放大处理。经过视频编码电路输出到由 4个LCD显示屏组成的拼接屏幕上进行视频显示。 应用系统硬件平台的系统结构设计方案, 如图1所示。
  
  图1 LCD屏幕拼接系统结构图
  1.2系统原理
  LCD屏幕拼接显示系统的工作原理, 系统接收一路DVI数字视频信号, 进行处理前需要先对最小变换差分信号(T.M.D.S.)形式的视频信号进行解码(decode)处理, 得到 FPGA 可以处理的像素流信息,经过视频分割,分割后的子视频与产生的参考视频流复合,使各个子视频的行场同步控制信号一致,各个子视频经过延展式线性插值放大处理, 得到最小变换差分信号的数字视频信号, 经 DVI接口输出到拼接 LCD 显示器进行显示。
  2、算法实现的功能
  算法的主要功能如下: FPGA数字视频处理电路是对视频数据进行数字处理的逻辑, 实现实时视频的预处理、 图像的分割、 视频图像插值放大等处理, 并通过视频输出模块控制四路并行的子视频同步地显示到 4个 LCD 拼接屏幕上。 具有以下主要功能:
  (1)通过内部逻辑的视频输入模块(VGA Input)接收从DVI解码电路送出的视频图像数据, 包括像素数据(R、 G、 B分量)和视频同步控制信号(HSYNC、 VSYNC)等, 转换成预处理的视频像素流格式。
  (2)视频分割模块实现原始单帧视频图像的分割剪裁, 得到四路完整格式的子视频像素流 (包含视频像素数据和视频同步控制数据), 并控制4个子视频显示的相互时序关系; 各个拼接屏幕的像素点的扫描规律相同, 均为逐行扫描形式, 并且子视频像素点显示同步, 即行同步和场同步。
  (3)视频插值模块实现对视频分割所得的子视频进行2×2倍地插值放大处理, 该模块采用并行处理方式, 四路子视频分别经过各自独立的视频处理通道;插值放大算法是基于在FPGA进行延展式线性(extended linear interpolation)待插值像素点的数据计算, 配合视频生成模块(VGASyncGen)产生的参考视频流, 并通过共享的行缓冲存储器实现插值像素数据的分时读写切换来实现的。所得到视频像素流包含完整视频像素流格式,并且符合较高分辨率的视频显示要求。
  (4)视频输出模块,完成放大处理后的各个视频像素流输出到DVI 编码输出电路。保证各个显示屏幕得到的视频信号符合VESA 规定的标准时序要求。
  3、算法的FPGA实现
  3.1视频分割算法的实现
  算法对数字视频的处理采用并行处理方式, 首先要对输入视频像素流进行分割处理, 得到四路具有完整视频格式的子视频, 并且输出的四路子视频具有相同的扫描规律, 即行同步和场同步;四路子视频中, 当有一个视频进行场变换或行变换时, 其它三路视频也要同时完成对各自视频的场变换或行变换;当显示屏在对屏上的第一行像素点进行扫描时,其余各显示屏也都在对各自屏上的第一行像素点进行扫描。尽管扫描规律一致, 但每个子屏幕所显示的视频图像内容却是不同的。
  (1)片外SRAM分时切换: 所设计视频分割算法通过在外部SRAM 中对输入视频像素数据帧进行缓存,因为要进行不同顺序的读、写操作。为了保证对数据进行读写处理的连续性, 即对RAM的写入和读出不发生时间上中断, 因此须使用两组SRAM进行读、 写分时切换操作, 如图2 所示。
  
  图2 SRAM读写切换示意图
  在处理算法中使用了A、 B两组像素数据存储区, 用以记录单帧的视频像素数据。FPGA 的分时切换逻辑是依据输入视频流的场同步控制信号VSync发生由高电平到低电平的转换, 以此作为新数据帧到来的标识。场同步控制寄存器Last-VSync 存储的是像素流中前一个像素点的场同步控制信息,如果 LastVSync 为高电平“1”且当前像素点的场同步信号VSync 为低电平 “0” , 则表示新的像素帧开始。那么帧存储器选择寄存器ReadBank则取反, 从而提示数据写入和读出控制逻辑进行读/写帧缓存的切换;相反,如果场同步控制寄存器LastVSync 与当前像素点的 VSync 值同时为有效“1” ,即表示没有新的像素帧的到来, 帧存储器选择寄存器不发生变化。 这样将输入数据轮流分配到这两组帧缓冲存储器。即可实现对输入视频像素流的无缝缓冲与处理。
  (2)子视频同步控制获取: 输入视频图像在一帧内的行同步控制信号(HSync)和场同步控制信号(VSync)与输出的四路子视频的行同步控制信号及场同步控制信号并不一致,因此需要在算法中加入一个参考视频像素流,用于提供子视频行场同步控制信息; 该参考视频流不包含像素点的R、 G、 B数据信息, 但满足输出子视频流所需要的行、 场同步控制信号的时序特征。在形成的单帧视频图像中其水平方向和垂直方向像素点个数为输入视频像素点个数的一半,视频刷新频率与输入视频保持一致。
  视频流的控制逻辑如图 3 所示, 过程如下:第1 级,将参考视频流复制成4个子视频流(Split4), 第2级是对每一个视频像素流地像素坐标增加偏移量(dx, dy), 使其对应不同的子视频像素点的显示位置,例如,对第2 个子视频, 由于它要读取输入视频的右上方位置的视频图像数据,设置其横向偏移量为Width/2 和纵向偏移量为0,其它的子视频与之类似。复制出的四路参考视频要转换成串行像素流,输入到帧缓存读取像素数据,第3级操作就需要改变它们的像素周期,使子视频在每4 个像素周期内输出一个有效的像素数据, Cycles为预设置的控制像素周期(Cycles设置为 4), 使有效像素数据的时钟频率与子视频像素频率相同。最后,对四路参考视频像素流作不同的延时处理, 再经过像素流融合(MUX4)为串行的视频像素流。这样把并行像素流转为串行像素流,串行像素流读取一帧像素的时间与输入视频像素流写入一帧像素的时间是相等的。像素流融合操作对输入的四路视频, 通过设置控制参数(control), 在不同时钟下选取带有偏移量的视频像素点。
  
  图 3 视频流的控制逻辑图
  3.2视频插值放大算法的FPGA实现
  视频插值放大模块包含了坐标计算单元、加权系数产生器、垂直插值单元、虚拟像素缓存器与水平插值单元,如图4所示:
  
  图3 插值放大模块的框图
  对于列或行地址计算器,输入信号决定水平与垂直方向的坐标。坐标数据包含10位的实数以及10位的小数部分。坐标数据的第9位是小数部分最重要的一位,它决定着小数部分是否大于0.5。同时由第9位控制的多路选择器控制用于输出正确的内存地址。如果输入的是列信号,那么行地址
  
  ,
  
  ,
  
  ,
  
  和垂直间隔
  
  可由公式(1)到(3)得到,同理,列地址
  
  ,
  
  ,
  
  ,
  
  和水平间隔
  
  能由公式(1),(2)和(4)得到。
  
  
  
  
  3.2.2 加权系数产生单元
  在设计的框图中,水平加权系数与垂直加权系数的计算并不是同时生产尽管它们都由公式(5)和(6)决定。因此,加权系数产生器产生水平及垂直加权系数,当控制信号为水平信号时,最终的输出为
  
  ,
  
  ,
  
  ,
  
  ,相反的,则输出
  
  ,
  
  ,
  
  ,
  
  。在延展式线性插值最大的计算量是加权系数的计算,而最复杂的运算却由最简单的两个加法器和两个减法器构成。
  
  
  3.2.3 水平与垂直插值单元
  根据公式(7)和(8),水平与垂直插值有同样的运算,但是它们是并行执行以提高整体的速度。水平与垂直插值的逻辑结构由图5所示,乘法器与加法器可以有效的完成输入的数据的卷积与拼配相应的4个加权系数来产生插值的电路。
  
  
  
  水平插值单元 垂直插值单元
  图5水平与垂直插值单元逻辑框图
  3.2.4虚拟像素缓存器
  虚拟像素点是由垂直插值产生并存于虚拟像素缓存器中,在水平插值的过程被调用。一般来说,缩放比例会决定这缓存器输入与输出数据的速率,当放大的时候,每个虚拟像素会被重新用于水平插值以致于垂直插入器数据速率会比水平的要低,相反的,在缩小的时候,虚拟像素由垂直插值过程产生的会比水平插值过程所需求的要多。为了调节不同的数据速率,设计虚拟像素缓存器如图6所示,其中包含1个计数器,8个寄存器和缓存输出控制电路。在插值放大的过程中,缓存器有时会延缓垂直插值,虚拟像素数量比水平插值所需求的确定数量要多的时候,就会停止虚拟像素的产生。计数器则是记录着最新产生的虚拟像素点的列地址并存于reg7.比较器和选择器对比计数器和
  
  的值来决定缓存器的输出。
  
  图6 虚拟像素缓存器
  4、验证
  算法的验证是基于Xilinx Virtex-4 FPGA开发平台,对视频分割模块及延展式线性插值模块分别进行仿真,验证算法的正确性,再经反复的优化及测试,最后下载到开发板,验证输出的视频显示效果是否能够满足视频放大的应用需求,完成LCD大屏幕拼接系统的设计。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分