《电子技术应用》
您所在的位置:首页 > 可编程逻辑 > 设计应用 > 基于FPGA的ARM图像扩展显示
基于FPGA的ARM图像扩展显示
电子技术应用2012年第2期
黄 俊, 刘一清
华东师范大学 信息科学技术学院, 上海 200241
摘要: ARM处理器在消费电子及仪器设备等领域得到了广泛的应用,但是在很多情况下ARM系统的图像分辨率支持偏低,通过使用FPGA实现图像缩放器的功能来解决这个问题。采用双线性插值算法将VGA格式的ARM9图像信号的转换为XGA格式图像信号,完成对分辨率的扩展。仿真验证证明,扩展后的图像在显示上取得了良好的效果。
中图分类号: TP931;TN911.73
文献标识码: A
文章编号: 0258-7998(2012)02-0131-03
The extending display of ARM image based on FPGA
Huang Jun, Liu Yiqing
School of Information Science and Technology, East China Normal University, Shanghai 200241, China
Abstract: ARM processor is widely used in the field of consumer electronics and instrumentation,but the disadvantage of ARM processor is low resolution in image resolution in many cases. We solve the problem by using FPGA to implement scaler, which can transform the VGA standard image provided by ARM to the XGA standard image by use bilinear interpolation. The results show that the expanded image has a good display by simulation and verification.
Key words : ARM; FPGA; scaler; bilinear

    ARM是目前全球最大的嵌入式芯片技术的IP提供商,其所拥有的IP已经成为众多芯片设计公司采纳的一种技术标准和开发平台。所以基于ARM 内核的SoC已经成为嵌入式处理器的开发重点,可通过ARM实现LCD控制器来完成对嵌入式LCD屏的控制。如果利用TFT屏支持显示,其图像分辨率存在局限性,因此通过搭建一个FPGA平台实现图像缩放器功能外接LCD显示器,完成ARM信号的扩展显示。同时FPGA也能完成对ARM平台产生的图像信号进行验证和仿真,以测试其功能和时序的正确性。XGA显示器因其显示量大,输出形式多样等特点已经成为目前大多数设计中的常用输出设备,因此本文针对ARM产生的VGA信号通过插值算法对其扩展为XGA标准信号。

1 VESA标准中的VGA与XGA时序
       视频电子标准协会(VESA)是非盈利国际组织,主要制定个人电脑、工作站以及消费电子类产品在视频接口标准,因此本文所设计的VGA与XGA的时序均按照VESA标准设计。
    显示器通常采用逐行扫描的方式,每一帧图像按顺序一行接着一行连续扫描而成,扫描的过程中由水平同步信号HSYNC和垂直同步信号VSYNC来控制扫描。行扫描和场扫描的时序图如图1所示,其行扫描和场扫描的时序要求如表1、表2所示。

图1 行扫描时序和场扫描时序


2 系统整体设计
2.1系统框图

     系统设计的数据源是来自ARM9系统板的视频信号,其格式为VESA标准的VGA信号。数据源进入FPGA后先进行图像缩放的处理,把输入的有效像素数据利用算法对其进行处理,期间的处理数据利用FIFO与DDR2进行缓存,然后把处理后的图像数据按照XGA时序送入视频编码芯片,最后送入显示器显示。其中FPGA内部设计分为时序控制模块、时序产生模块、FIFO模块、图像缩放器模块以及DDR2 SDRAM控制器模块,如图2所示。

基于FPGA的ARM图像扩展显示系统框图

图2 系统原理框图


2.2 硬件实现
     FPGA采用Altera的EP3C16F484C6芯片,该芯片具有15 408个逻辑单元,504 KB内存,56个乘法器和4个PLL锁相环内核,最大支持346个I/O端口,系统时钟最高为250 MHz。FPGA开发板采用了专门的视频解码编码芯片,Silicon Image的视频编码芯片SI7170支持VGA到UVGA的格式标准,同时也支持HDTV格式的编码。DDR2 SDRAM采用三星的K4T51163QC芯片, 其频率支持267 MHz,本文选取为200 MHz。芯片容量为32 MB×16,实际上只要SDRAM满足存储2帧图像的容量即可满足本文设计要求[1]。完成转换后的XGA信号所需的输出时钟为65 MHz,可由FPGA内部锁相环产生。
3 FPGA内部模块工作原理
3.1输入时序控制模块与输出时序控制模块

     输入时序控制模块是根据输入视频信号的同步信号和时序要求,确保有效的图像数据能够顺利写入FIFO进行缓存。例如当模块接收到场同步信号时,FIFO进入即将写入的状态,当模块接收到使能信号时, FIFO开始写入数据,这样能确保写入FIFO的数据是从完整1帧图像的起始开始写入。
    输出时序控制模块的功能是产生输出图像所必需的同步信号、场同步信号和行同步信号,以保证输出图像的数据与时序一致,从而使图像可以正确地显示在显示器上。
     输入输出时序控制模块,按照计数器的方法进行设计[2]。例如VGA信号的1帧图像的总像素要求为800×525,其中有效像素为640×480。对于行扫描来说可设置1~96像素时钟计数为行同步信号,97~144像素时钟计数为行消隐后肩,145~784像素时钟计数为图像有效像素显示,685~800像素时钟计数为行消隐前肩。完成一行后,计数器置0,等待新的行同步信号到来再重新计数。在图像有效像素时钟内,让写入FIFO使能信号处于有效状态,而其余时间使能信号处于无效状态,这样可保证有效图像数据能准确写入FIFO进行缓存,并等待下一步的处理。

3.2 图像缩放器模块
    如图3所示,图像缩放器模块主要完成对输入图像数据源进行分辨率的缩放。根据设计,输入的图像数据为VGA 640×480格式,输出的图像数据为XGA 1024×768格式。由于输入图像数据与输出图像数据在完整1帧中的每一行像素点和每一列的数量上之比都为5:8,因此可考虑对输入的VGA信号作5:8的放大。先对数据在水平方向上进行插值放大,然后再进行垂直方向上的放大,设计中水平方向和垂直方向的插值放大均使用分级双线性插值算法。

图像缩放器模块框图

图3 图像缩放器模块框图


3.2.1分级双线性插值 [3]
     在双线性插值算法中,插值点的值根据其相邻的4个已知点计算得出,如图4所示。

双线性插值算法原理图

图4 双线性插值算法原理图


    已知a、b、c、d为输入图像内的相邻的4个点,其灰度值表示为f(x)。待插像素f点映射到原图像后的坐标值小数部分为[m,n]。计算f点灰度值的过程如式(1)~式(3)所示:
    f[g]=f[a]+m(f(b)-f(a)) (1)
    f[h]=f[c]+m(f(d)-f(c)) (2)
  f[f]=f[g]+m(f(h)-f(g))
    =(1-m)(1-n)f(a)+m(1-n)f(b)+(1-m)nf(c)+mnf(d)  (3)
    分级双线性插值使用的4个源图像像素点都是待插值点的直接邻点。插值的计算过程如下:
    g(x)=(f(a)(m×N)+f(b)×(1-m)N)/N
其中,m与1-m分别是a点与b点的权值。因为是做5:8的转换,这里取C=N=8, 将原来为5个像素点的长度区间划分为8个区间,每个区间都有m×N与(1-m)N这一对权值组成的整数对。每个区间内部的待插值点都与该区间左边界取同样的值。8个区间的权值对应于(8,0)、(7,1)、(6,2)、(5,3)(4,4)、(3,5)、(2,6)和(1,7)。在确定好了点位置后,以查找表的方式写入权值与位置之间的关系,最后可根据内插点与临近点的相对位置查找对应系数,并通过计算得出各像素点的灰阶值。
3.2.2具体插值过程
3.2.2.1水平插值

  将双线性插值分解为水平和垂直方向进行,由于是把原图像作5:8的放大,所以根据分级双线性插值,把原水平方向的5个像素点采用分8级双线性插值送入水平插值器。水平插值器由计数器与使能信号同时控制,每间隔5个时钟,水平插值器使能端置于计算插值状态,把进入的5个值进行一次插值变成新的8个像素点,之后再间隔5个时钟,将新的值进入插值器进行插值,直到把1行640个像素点插值为1行1 024个像素点。
3.2.2.2 垂直插值

     垂直插值器完成垂直方向5:8的转换,即5行数据变为8行数据的转换,插值过程是按垂直方向对原来的5行数据采用分8级双线性插值,变换为新的8行数据。
     完成水平插值的数据流水线型通过FIFO1与FIFO2模块,期间将FIFO1与FIFO2的值送入垂直插值器进行插值,完成垂直插值后的数据送入FIFO3与FIFO4模块,输出顺序排列在先的送入FIFO3,而另外一行数据进入FIFO4。FIFO3与FIFO4之间的数据也是流水线型进入到DDR2 SDRAM模块中,整个过程通过使用状态机对垂直插值进行控制,使经过垂直插值后的数据能以正确的顺序完成插值,并且送入DDR2 SDRAM模块。把对原5行数据经过水平和垂直插值变为8行数据的时间作为一个周期,直到完成整1帧VGA格式图像到1帧XGA图像的放大。
3.3 DDR2 SDRAM控制器模块
    控制器模块的具体作用为:当SCALER完成图像数据处理后,把图像数据送进DDR2中储存,在确保DDR2中存储有2帧完整图像时,DDR2的读出端才开始读取,从第一帧图像地址读取图像数据,然后据根据时序控制从DDR2输出。当读完第一帧后,继续读取第二帧,此时第三帧继续写入原第一帧地址,之后的读取写入都按此过程进行。
    由于DDR2 SDRAM不能同时写入和读出,所以需要DDR2 SDRAM控制器加以控制。可根据连接到DDR2 SDRAM模块写入端和读出端的FIFO内部已存数据数量进行读写控制。写入端前的FIFO即为图3的FIFO3。连接到DDR2读出端的FIFO为图3的FIFO2,它与输出时序控制模块共同完成最终所需XGA图像的输出。DDR2 SDRAM每次操作指令时,以1行数据为单位,即接受1次读命令,则读出1行数据;同样,接受1次写入命令,则写入1行数据,此1行数据同时为XGA格式的1行(1 024个像素点数据)。
4 仿真与功能实现
     在设计中,采用Verilog语言对各逻辑模块进行编写设计,在开发环境Quartus II 9.1和Modelsim-altera 6.5b下完成对各模块的时序的仿真和功能的设计和验证,如图5所示为数据进入水平插值器后的仿真结果,水平插值把原5像素插为新8像素的仿真,其中pix为待插值的5个像素,data为插值后的8个新像素。

水平插值5像素插成8像素Modelsim仿真图

图5 水平插值5像素插成8像素Modelsim仿真图


    经过对各模块设计的仿真,并且对各模块功能验证正确后,进行系统整体的仿真验证,最终将处理完成图像数据送到LCD上进行显示,经过放大后的示例如图6 所示。仿真验证表明,得到的图像时序和数据与要求的时序一致,对于图像数据来说虽然双线性会对屏幕边缘存在高频分量的损失[4],使轮廓稍有模糊,但是从图像上对人眼观看的影响很小。

经过放大的ARM图像信号在LCD上的显示(XGA格式)

图6 经过放大的ARM图像信号在LCD上的显示(XGA格式)


    介绍了VESA标准中的VGA与XGA时序,通过FPGA平台设计图像缩放器,完成控制信号、时序信号和数据信号的同时输入和控制,同时使用插值算法对分辨率进行放大,达到了对ARM图像信号的扩展显示。如要实现更多格式之间的转换,可在程序写入各种图像格式缩放之间的算法,如VGA、XGA、SVGA等格式。在程序中利用状态机实现不同格式之间的转换和时序的控制,加强缩放的范围,扩展其运用。
参考文献
[1] 张旭,王彬.一种基于FPGA的实时图像转换控制器的设计[J].电子技术应用,2007,33(10):66-68.
[2] 陈伟,卢贵主,郑灵翔. 基于双线性算法的定标器及其FPGA实现[J].电子技术应用,2008,34(4):40-43.
[3] 朱艳亮. 实时视频缩放算法研究及FPGA的实现[D].长沙:中南大学,2009.
[4] 孙红进.FPGA实现的视频图像缩放显示[J]. 液晶与显示, 2010,25(1):130-133.

此内容为AET网站原创,未经授权禁止转载。