这就是创意!中细软杯创新创意作
图形设计

主飞行仪表图形加速显示系统的FPGA设计

  主飞行显示仪PFD(Primary Flight Display)包含了至关重要的安全飞行信息[1],它包括被安装在与传统“T”型配置的模拟仪表及相同屏幕位置上的飞行仪表。PFD通常直接在飞行员的正前方。随着航空电子技术的快速发展,传统的CRT显示终端逐步被光栅式图形显示器LCD所替代。然而,光栅式图形显示系统在显示图形前,需要大量的各种运算,如图形扫描变换、反走样、图形旋转及其他的特殊算法操作[2]。随着显示分辨率的提高,要处理的像素也越来越多,而所允许的处理时间却受屏幕刷新率所限制。因此,怎样实时生成并准确显示逼真图形画面,是对嵌入式PFD设计者的一个极大的挑战。而基于PC机的传统图形生成和图形显示方式,又过于复杂且存在安全隐患。鉴于这种情况,参考文献[3-5]虽然提出了一些解决方法,但实际效果并不是很明显。本文采用基于仪器总线和扩展总线的高速阵列信号处理板的设计模式,提出了一种基于硬件加速的PFD图形显示设计方法。该方法实现了图形分层双缓存交替切换、图形填充、和多通道DMA像素引擎,提高了PFD图形生成和显示的实时性和可靠性。文中以Quartus Ⅱ5.0 和Modelsim_Altera 5.6e为开发、仿真和综合的平台,在Altera公司的Cyclone Ⅱ系列

  在PFD显示系统中,要同时显示多个画面,如姿态指引画面、全罗盘画面、导航地图画面及飞行视景等。每个画面的处理算法都有其特殊性,如在姿态指引画面中,显示画面需要根据飞机参数的变化实时更新,要求在地平线上填充蓝色背景(蓝色表示天空),而在地平线下填充绿色(绿色表示大地)。随着飞机姿态的变化,地平线将在边界线内改变大小及方向,画面上的蓝色和绿色区域将重新分配,这种天地区域的动态重新填充是个非常费时的工作。此外,姿态指引画面还需要叠加一些字符(俯仰角度等),这些字符需要随着地平线一同旋转。可见,姿态指引画面是电子主飞行仪中最为耗时的画面之一[4]。而全罗盘画面则侧重于字符、线段的绘制和旋转变换,反走样运算任务十分繁重。在导航地图画面生成和处理中,数据量和处理量都比较大,如位置显示、飞行航迹生成等。针对不同图形画面的处理算法,本文设计了大规模阵列处理机模型,其主飞行仪表显示系统整体设计框图如图1所示。该设计采用共享外部总线和分布式并行处理相结合的系统结构。每个处理板通过仪器背板总线互相连接,提供了共享外部总线的结构;而相邻板之间也有一套扩展总线,提供了局部共享总线的结构。这样,板间既可通过背板总线直接交换数据,也可以通过扩展总线以DMA方式进行数据传输。另外,每个板内,DSP通过局部总线连接一个容量较大的SDRAM作为全局共享外部存储器,而FPGA通过局部总线连接一个容量较小的双口RAM作为局部共享存储器。这些全局和局部存储器可以作为板间或DSP间数据交换的大型缓冲区。从图形或图像处理算法实现上考虑,这种结构既可满足流水线式的并行算法,也可以满足分布式的并行算法(同一算法分布到多个处理器同时执行)。

  针对每块板的不同处理功能,对FPGA进行了不同的算法设计。以板0#为例作一介绍。图2为FPGA的各种接口与系统其他部分的关系。

  系统有两套总线:仪器总线和扩展总线。仪器总线仿VXI总线设计,采用双排欧式插座设计,模拟信号和数字信号分开在各自的插座之上,提高了电磁兼容性。模拟部分主要包括:飞行传感器调理信号和系统模拟电源。数字部分采用基于多板分布式并行处理机制的共享式总线位地址总线位数据总线、模块功能选择与控制总线、以及时钟和触发信号等;扩展总线采用基于板间流水线处理机制的链式结构,主要包括:20位地址总线位数据总线和控制总线。总线接口中,读写控制、地址译码、中断及DMA控制、时钟和握手信号均由FPGA实现。限于篇幅,具体设计细节不再赘述。

  帧存控制模块由交叉多路转换器Cross-MUX、读写控制器和地址发生器组成。系统上电复位时,首先将变化频繁、数据量小的前景与变化缓慢或不变、数据量大的背景图形分开存储于高速SRAM中,每3片SRAM组成全彩色(R、G、B)图形帧存(这样的图形帧存共有3组)。其中,SRAM3为背景帧存,SRAM1和SRAM2为前景帧存。将前景帧存设计为双缓存轮流切换方式,当其中一组写入生成图形数据时,另一组则正被读出数据到图形合成模块,图形生成与显示并行进行。

  图形合成模块支持一层到四层的图形合成,通过设置合适的图形开始点和结束点(包括竖直和水平)来完成控制。公式(1)、(2)、(3)分别给出了其控制模型。式中,Plx为当前lx层像素的灰度值,介于0~255之间;x为层

  像素引擎模块产生像素时钟输入信号CLK、行同步信号/Hsync、场同步信号/Vsync、数据使能信号/DE、扫描方向选择信号DPSR和R、G、B数据控制信号,控制LCD屏显示全彩色图形或图像。

  图形填充算法[6]的效率高低,直接影响到图形显示系统的加速程度。设计高效的填充算法犹为重要。本系统设计了一种基于形态学膨胀算子的多种子填充算法。膨胀算子具有天然并行运算能力,易于FPGA硬件实现,并且改进算法后,填充速度大幅度提高。图形填充模块由结构元素生成器、膨胀处理器和位置计数器组成。

  形态学图形膨胀算法,是用结构元素对图形某邻域窗口进行的处理[7]。本设计采用的是3×3的方形结构元素,每次需要读取9个数据。为此,在FPGA内部定义了寄存器和FIFO,将相关的图形灰度数据进行存储,以使其在一个时钟周期内,以流水线的方式形成填充所需要的一个结构元素窗口。流水线的方式,加快了数据处理速度。结构元素窗口形成模块框图如图3所示。图中,w22为结构元素原点,如图4所示。

  参考文献[8]中膨胀处理器的设计方法是:从3×3窗口读取的数据w11、w12、w33w33中,挑出数值最大的元素并把它输出,采用两两比较排序算法,共需要12级比较。由于多级比较器的传输迟滞,最大工作频率受到限制。本系统中将多种子呈多条水平线比较,比较结果若为1,则直接实现8邻域填充。这一方法简化了比较过程,提高了系统带宽和处理速度。在填充区域为320×480像素时,其最大工作频率可以达到80.12MHz(而参考文献[8]在填充区域为120×120像素时,其最大工作频率为62.751MHz),加速效果比较明显。

  位置计数器根据行、列位置标志来确定滑动窗口(结构元素)在图形数据阵列中的位置。图形边界根据位置计数器的值查表得到,边界判断比较迅速。

  图形填充模块的状态迁移图如图5所示。本设计根据需要设定了六个状态:Idle、ReadFIFO、Comp、WriteRAM、Boundary、Bd_P。这六个状态根据窗口位置是否有种子而进行转换,从而完成图形填充。

  以上描述中,结构元素与种子比较、像素点的填充、边界判断等内容可有多种表达算法,特别是种子预置、边界判断和边界填充,有待进一步研究。

  3 仿线是仿线(a)是图形分层双缓存交替切换、图形填充、图形合成和多通道DMA像素引擎的时序仿线(b)是实验结果图。对800×600的屏,刷新率可达47.6Hz,即21ms/帧;对320×480的区域,填充一次约花费2.86ms。

  本文提出的基于仪器总线和扩展总线的高速阵列信号处理板的整体设计模式,具有较强的

  和数据吞吐能力。基于硬件加速的PFD图形显示设计,提高了PFD图形生成和显示的实时性及可靠性,也显著提高了图形质量,使显示画面更加逼真。经设计和部分调试表明:该方案具有较好的工程实用性和易扩展性。