小型化低功耗机载显示器图形系统设计与实现*
2022-06-28杨粤涛高伟林杨炳伟
张 锋,杨粤涛,高伟林,祁 伟,樊 涛,杨炳伟
(苏州长风航空电子有限公司,江苏 苏州 215151)
0 引 言
飞机座舱显示器是飞行员获取飞机信息、地图信息、作战信息的重要人机交互接口,是座舱系统的重要设备[1-3]。图形系统主要承担图形显示、视频处理、总线通信等功能,是飞机座舱显示器的重要模块之一。图形系统中的图形生成技术主要有两种架构:一种是片上系统(System on Chip,SoC)方式[4-5],采用片上系统的内部资源实现机载显示器画面的实时生成与显示,适用于对功耗尺寸要求较高的小尺寸显示器;另一种是中央处理器(Central Processing Unit,CPU)+图形处理器(Graphics Processing Unit,GPU)方式[6-8],采用专用的独立CPU和GPU实现机载显示器画面的实时生成与显示,适用于对性能要求较高的大尺寸显示器。
以往在这两种主流设计架构中核心器件均采用进口芯片,存在一定的风险,而当前国产元器件发展迅速,如天津飞腾、中科龙芯以及长沙景嘉微等公司的核心器件在国产产品中得到大量应用[9-11]。其中,国产CPU+GPU架构的图形系统也已经在逐步应用[12],但这种架构体积偏大,功耗较高,无法适用于小尺寸低功耗机载显示器应用场景。
鉴于小尺寸低功耗图形系统技术指标较高,本文提出一种基于龙芯2K1000的机载显示器图形系统,采用国产SoC和国产现场可编程门阵列(Field Programmable Gate Array,FPGA)构建硬件架构平台。该平台尺寸小、功耗低,并搭载航空专用的国产天脉操作系统软件,支持图形实时生成与显示、外视频输入处理与叠加显示、扩展航空总线通信,能够满足小尺寸低功耗显示器应用需求。
1 系统架构及其工作原理
1.1 图形系统的技术指标
图形系统的主要技术指标如下:
(1)典型画面刷新率>25 frame/s;
(2)功耗<10 W;
(3)支持嵌入式开放图形库(Open Graphics Library for Embedded Systems,OpenGL ES)绘图接口;
(4)支持视频叠加;
(5)支持3路RS422和2路高级数据链路控制(High Level Data Link Control,HDLC)通信;
(6)支持固态硬盘(Solid State Disk,SSD),容量不小于2 GB;
(7)软硬件全部国产化。
1.2 图形系统的硬件构成
如图1所示,图形系统主要由图形生成模块、视频处理模块以及通信接口模块构成。图形生成模块由龙芯2K1000和外部第三代双倍速率同步动态随机存储器(Double-Data-Rate Three Synchronous Dynamic Random Access Memory,DDR3 SDRAM)组成。龙芯2K1000内部包含两个64位GS264 处理器核,最高主频1 GHz;1个集成GPU;1个支持两路输出的显示控制器。DDR3 SDRAM包含图形显示所需的帧存空间。除此之外,图形生成模块还包含系统工作必备的存储子模块和调试子模块。
图1 图形系统模块图
视频处理模块和通信接口模块均位于FPGA中。视频处理模块由图像缓存子模块、视频叠加子模块和启动Logo产生子模块组成。通信接口模块由寄存器存储及地址解析子模块、通用异步收发器(Universal Asynchronous Receiver/Transmitter,UART)子模块、HDLC子模块组成。
1.3 图形系统的工作原理
该系统的基本工作原理为:GS264处理器核心解析基于OpenGL ES的绘图指令,通过内部多级互联总线将绘图图元指令信息送至GPU核心单元;GPU核心单元根据指令绘制图形,生成帧存数据,存储在DDR3 SDRAM中;根据图形显示分辨率(如1 024 pixel×768 pixel@60 Hz)配置显示接口时序,显示控制器从DDR3 SDRAM中读取帧存数据,生成数字RGB三原色视频信号给视频处理模块;为防止帧存数据冲突,导致画面破裂,DDR3 SDRAM中开辟两片帧存区域,GPU和显示控制器交替存储和读取帧存区域,帧存区域的切换由软件来控制。
视频处理模块接收图形生成模块输入的内部视频和外部设备输入的外部视频,缓存后进行叠加处理,外部视频作为后景,内部视频作为前景,支持透明度调节;处理后的视频经过外部视频编码器,转换成低压差分信号(Low-voltage Differential Signaling,LVDS)送给液晶显示组件显示。
通信接口模块对外扩展出机载总线(如RS422、HDLC等),用于与外部机载设备进行数据交互,接收图形显示控制信息,发送图形系统的响应信息等。对内通过内总线与图形生成模块进行上述数据传递。图形显示软件根据接收的图形显示控制信息,使用相应的OpenGL ES绘图指令生成内部视频,同时通过内总线向视频处理模块传递视频叠加信息,控制内部视频的显示透明度,最终实现图形系统机载画面的实时生成显示。
2 设计实现
2.1 硬件设计
系统硬件设计原理图如图2所示,主要分为龙芯2K1000核心处理电路设计、FPGA视频处理电路设计及外围电路设计三个部分。
图2 图形系统硬件原理图
龙芯2K1000核心处理电路包括其供电、复位、晶振、内存、存储器、调试接口等,其中,DDR3 SDRAM选用紫光的HXI15H4G160AF-13K芯片,设计中采用4片DDR3 SDRAM,数据线共64位,容量共为16 Gb;串行外设接口(Serial Peripheral Interface,SPI)FLASH选用深圳国微的SM25QH128M,用于存放PMON(龙芯boot程序)和操作系统;SSD存储芯片采用绿芯的GLS85LS1002E,容量为2 GB,用于存放应用程序。
FPGA视频处理电路包括FPGA电路、视频解码电路和视频编码电路,其中,FPGA选用复旦微的JFM7K325T8,最大频率550 MHz,内部资源丰富;视频解码电路采用振芯科技GM7145器件将差分扩展图形阵列(Extended Graphics Array,XGA)转换成标准XGA,然后再采用该公司的GM7002集成解码器将标准XGA信号转换成数字RGB信号,给到FPGA的输入输出端口,实现叠加处理;视频编码电路采用振芯科技GMG7123芯片将FPGA输出的RGB和行场信号编码为单端XGA视频信号,再通过该公司的GM7148器件将单端XGA转换成三线制差分XGA信号。
外围电路主要用于实现RS422、HDLC等通信接口的电平转换,通信协议由FPGA内部实现。
本系统硬件设计中全部选用国产元器件,满足国产化需求。
2.2 FPGA软件设计
FPGA软件设计分为通信接口模块软件设计和视频处理模块软件设计。
2.2.1 通信接口模块软件设计
通信接口模块用于图形系统与外部的通信,设计中要求满足3路RS422和2路HDLC。本模块主要包括寄存器存储与地址解析子模块、UART子模块、HDLC子模块。寄存器存储与地址解析模块负责将龙芯2K1000内总线的数据解析存储到相应的FPGA本地寄存器中,此外再将本地寄存器的数据通过特殊的时序发往龙芯2K1000,本地的寄存器包含UART寄存器和HDLC寄存器。UART模块负责RS422的收发通信,HDLC模块负责HDLC协议的收发通信。下面主要介绍HDLC模块的设计。
本文设计的模块框图如图3所示,主要包括HDLC发送单元、HDLC接收单元、波特率发生器、先入先出队列(First Input First Output,FIFO)单元、循环冗余校验码(Cyclic Redundancy Check,CRC)校验单元、HDLC发送地址解析单元和HDLC接收地址解析单元等。
图3 HDLC模块功能框图
HDLC模块处于发送状态时,龙芯2K1000往HDLC数据发送寄存器的地址写入数据,数据暂存在发送FIFO中;HDLC发送单元查询FIFO中的数据个数,若FIFO中的数据个数不为0,则读取FIFO中的数据,HDLC发送单元先发送包头再发送数据,边发送数据边对数据进行CRC校验,最后发送数据位最终CRC校验的值,由此完成一包数据的发送。此外,在进行数据接收的时候,HDLC接收单元检测包头,如果包头满足要求,则接收余下的数据,将数据缓存到FIFO中去,HDLC接收单元边接收数据边进行CRC校验,当满足接收的数据等于CRC校验时,则给出中断信号,由龙芯2K1000从数据接收寄存器中读取数据,读取数据的长度为FIFO中数据的个数。
2.2.2 视频处理模块软件设计
视频处理模块主要用于异步视频时序的同步化处理,实现内部视频与外部视频的叠加,以及启动Logo产生,包括图像缓存子模块、视频叠加子模块和启动Logo产生子模块。
(1)图像缓存模块
图像缓存模块结构如图4所示,由3个视频直接存储器存取(Video Direct Memory Access,VDMA)构成,第一个VDMA实现龙芯2K1000产生的图形画面即内部视频的缓存,第二个VDMA实现XGA图像即外部视频的缓存,第三个VDMA实现Logo图像的缓存。不同的是,第一个VDMA单独采用一个视频缓存区域进行缓存,第二个和第三个VDMA采用同一片视频缓存区域进行缓存。若XGA信号没有的话,则选择Logo图像缓存进入图像缓存区,否则选择XGA视频信号。
图4 图像缓存模块功能框图
(2)视频叠加模块
视频叠加模块将前景和后景的图像数据按透明度比例进行叠加,生成最终的显示图像数据。透明度取值范围为0~255,当透明度为0时,只显示前景图像数据;当透明度为255时,只显示后景图像数据。前景的数据来自于龙芯2k1000的内部视频,后景数据来自于XGA的外部视频,透明度值由龙芯2K1000软件设置,再由地址解析模块解析给出。
(3)Logo产生模块
Logo产生模块实现在上电时初始化显示器的画面,Logo的数据存储于FPGA存储器。Logo产生模块将存储器里面的Logo数据通过一定的时序读出并缓存进入FPGA内存中,替代XGA的缓存区域,将透明度的值调整到最小,则完成开机显示Logo。
2.3 操作系统及图形驱动软件设计
图形系统采用国产天脉操作系统作为上层图形显示软件运行平台。基于天脉系统设计图形驱动软件,包括OpenGL ES接口驱动、帧存驱动、显示控制器驱动,满足上层图形显示软件设计的通用需求。
2.3.1 天脉操作系统移植
天脉操作系统是一款通用实时类操作系统,适用于实时性要求高的领域,能够给上层应用提供任务管理、中断/异常管理、任务间通信、文件系统、网络协议栈等功能。图形系统天脉操作系统移植以现有的参考板级支持包为基础,根据图形系统硬件资源,主要完成模块支持层(Module Support Layer,MSL)和操作系统(Operating System,OS)的配置,以及外设驱动开发。
依次创建MSL工程和OS工程(绑定MSL),配置主要包括MSL加载及运行内存空间配置、OS运行内存空间配置、SPI FLASH地址空间配置和内存管理单元(Memory Management Unit,MMU)地址空间映射等,其余配置(如串口网口调试配置、操作系统初始任务、内核参数配置等等)采用默认配置即可。需要注意的是,MSL运行内存空间和OS运行内存空间必须为MMU已映射的空间,而MSL加载内存空间必须为MMU映射之外的空间,且三个空间必须不重叠,否则会引起编译或运行错误。
外设驱动包括串口、网口、内总线、SPI FLASH、SSD等。设备驱动架构依据参考板级支持包的模板,结合器件手册完成具体的功能接口设计即可,这里不再一一详述。
2.3.2 图形驱动软件设计
图形系统上层应用软件采用标准的OpenGL ES接口进行绘图,需要底层图形驱动软件支持,从而不必关心硬件CPU、GPU、DDR3 SDRAM帧存以及显示控制器之间的复杂交互逻辑,降低上层应用软件的设计难度。
以龙芯2K1000内置GPU Linux系统下的图形驱动源码为基础,将图形驱动代码按功能进行模块划分,主要包括GPU硬件驱动层、嵌入式图形接口(Embedded Graphic Interface,EGL)驱动层、OpenGL ES接口驱动层等,进一步细分模块为与操作系统相关部分和与操作系统无关部分。根据天脉系统与Linux系统的差异性,确定操作系统层面上需要开发的驱动模块,如显示控制器驱动、帧存驱动等,这些是图形显示必备的驱动。Linux系统生态比较完善,自带有这些驱动,而在天脉下则需要自行开发。图形系统图形驱动简要模块框图如图5所示。
图5 图形驱动模块图
各驱动子模块的设计如下:
(1)GPU硬件驱动
完成GPU的寄存器配置、中断引脚配置、内存资源配置、中断处理、绘图指令Event处理等,与应用层的接口为gpu_init,应用程序中调用该函数即可完成GPU硬件的初始化,GPU硬件驱动模块封装形成LibGAL.a。
(2)EGL接口驱动
提供应用程序标准的EGL图形绘制框架接口,与操作系统无关,无需进行改动。
(3)OpenGL ES接口驱动
提供应用程序标准的OpenGL ES图形绘制接口,与操作系统无关,无需进行改动。EGL接口驱动模块与OpenGL ES接口驱动模块封装形成LibGL.a。
(4)龙芯2K1000显示接口驱动
对龙芯2K1000的显示接口进行时序配置,使之输出标准的视频时序(图形系统使用1 024 pixel×768 pixel@60 Hz),并配置显示接口使用的双缓存帧存地址等。
(5)FrameBuffer帧存驱动
注册FrameBuffer驱动,创建FrameBuffer设备,EGL通过FrameBuffer设备获取当前的显示分辨率,并控制双缓存帧存的切换等。龙芯2K1000显示接口驱动模块与FrameBuffer驱动模块提供应用程序接口合并成FrameBuffer_init,应用程序中调用该函数即可完成显示接口初始化和FrameBuffer设备的创建。
图形系统上层应用软件调用图形驱动的主要过程如图6所示。gpu_init完成后,在天脉操作系统下创建/dev/galcore设备,OpenGL ES接口通过ioctl访问/dev/galcore,生成绘图指令发送给GPU,由GPU硬件完成绘图。FrameBuffer_init创建/dev/fb设备,EGL swapbuffers通过/dev/fb来控制双缓存的切换。
图6 应用程序调用驱动示意图
3 实验与应用
3.1 实验过程
设定CPU主频为800 MHz,GPU主频分别为230 MHz、400 MHz、533 MHz,DDR3 SDRAM时钟频率为800 MHz,显示分辨率为1 024 pixel×768 pixel@60 Hz。图形应用采用SCADE工具开发,自动生成基于OpenGL ES2.0的图形代码。测试画面采用典型机载显示器图形画面,如图7所示。运行天脉操作系统版本为V1.2.1。视频叠加功能开启,外部通信总线开启3路RS422和2路HDLC,其中每路RS422通信周期为100 ms,每个周期收发数据为30 B,每路HDLC通信周期为50 ms,每个周期收发数据为60 B。实验室环境依次测试不同GPU主频下图形系统的帧率及功耗。
图7 帧率测试画面
3.2 实验结果
针对两种测试画面,在不同的GPU主频下,图形系统帧率及功耗测试结果如表1所示。
表1 测试结果
从测试结果可以看出,在开反走样的情况下,测试画面1中,GPU主频提升能够较大的提升图形性能,测试画面2中,GPU主频达到400 MHz后,图形性能则不再提升。图形系统功耗随性能的提升而增加,在关闭反走样的情况下GPU主频提升则对性能无影响,功耗也无变化。
图形系统性能与CPU、GPU密切相关,当GPU主频提升后,若图形性能随之提升,则说明当前性能瓶颈受制于GPU,反之则受制于CPU。在不同的应用中,需要根据实际显示性能和功耗要求,设置合理的GPU主频和反走样处理方式,达到最优设计。
3.3 应用情况
龙芯2K1000芯片的设计功耗最大仅为5 W,在实验室常温环境下裸芯片无任何散热措施,长时间运行机载典型画面,工作无异常。在图形系统运用于机载显示器整机时,龙芯2K1000采用传导散热方式,其与机载显示器后盖通过导热硅胶相连,并依靠整机金属外壳进行散热。图形系统随机载显示器整机通过了高低温环境试验,在试验温度为-40℃~+65℃情况下,图形系统启动、图形显示以及各功能接口均工作正常,能够满足整机应用需求。
4 结 论
本文针对机载显示器图形生成系统领域的小尺寸、低功耗需求,提出了一种基于龙芯2K1000的全国产图形生成与处理方案,并介绍了图形系统的工作原理,给出了关键技术设计方法。与现有的CPU+GPU全国产技术方案相比,本方案集成度高、体积小,是一种更优的小尺寸显示器图形系统全国产设计方法。实验结果证明,在显示分辨率为1 024 pixel×768 pixel@60 Hz的典型测试画面下,图形系统帧率可以达到35 frame/s以上,功耗控制下10 W以下。目前图形系统已在某型机载显示器上开展实际应用,应用效果良好,各方面指标均能够满足显示器应用需求。