(上海航天电子有限公司,上海 201800)
飞行器在飞行过程中往往会产生大量遥测数据,地面测控站在接收、保存这些原始遥测数据的同时会有针对性的将其中某些重要遥测数据(如姿态信息、油量信息、位置信息、温度信息等)提取出来,并进行实时处理,显示在终端上。这些信息反映了飞行器当前的工作状态、飞行轨迹等重要信息,对于操作者的分析、决策有重要的参考价值。为了将原始遥测数据中的指定遥测数据提取出来,地面测控站需要对这些原始遥测数据进行挑路处理,将实时采集到的原始遥测数据根据实际需求选取部分进行分析、计算并将处理结果发送给担负不同任务的终端,由这些终端再做进一步处理。因此遥测数据挑路功能设计的好坏将直接影响地面测控站的性能。
一般情况下,对于实时遥测数据的挑路处理往往采用FPGA+ARM或FPGA+DSP的方式,FPGA主要负责接口转换、遥测帧搜索、组帧等操作,ARM或DSP主要负责复杂数据处理及系统控制。但这种实现方案的集成度不高,不利于设备的小型化。因此,本文提出了一种基于MicroBlaze的测控终端实时数据处理模块(以下简称挑路模块),将遥测数据的挑路及遥测数据计算功能全部集成到FPGA中实现,同时也提供了挑路功能的在线升级能力。这样设计不仅提高了系统的集成度及设计灵活度,同时也降低了产品的硬件成本。
该设计应用于某飞行器配套的地面测控终端设备上。地面测控终端实时接收来自飞行器测控应答机的遥测数据,并对接收到的遥测数据进行挑路操作,将有用数据挑出、计算,最后将得到的数据重新打包发送给终端计算机。
飞行器发送的遥测数据是以帧为单位的脉冲编码调制(Pulse Code Modulation,PCM)码流[1-2],每一帧遥测数据分为不同的副帧,各个副帧包含有来自不同传感器的飞行器状态参数,比如气压、电压、油面、功率、图像、GPS信息、1553B数据帧等遥测信息。挑路模块的主要功能就是将某些重要的遥测数据从以上原始遥测数据中挑选出来并进行计算,最后将计算结果重新打包发送给终端计算机[3]。
为了方便描述,完整的遥测数据帧的数据结构如图1所示。
图1 完整遥测数据帧数据结构示意图
从整体看,遥测数据帧是一个m列、n行组成的二维数据结构,遥测数据帧的数据是按照逐行顺序传输的,其中每一行为一个遥测子帧,遥测子帧分为帧头、不同数据域的遥测数据及校验和。遥测子帧的长度为mByte,整个遥测全帧则由n个遥测子帧构成。遥测数据帧每一列为一个波道,波道用于存放相同类型的数据。如果某些遥测数据的数据量较大,该遥测数据就会分散存放在遥测子帧中若干个波道的数据域以及相邻多个遥测子帧的对应的波道数据域中。
以1553B[4]数据挑路过程为例。1553B数据帧的数据是离散存放在遥测数据帧中的1553B数据域中。因为1553B数据帧是由多个字节构成,一个遥测子帧只能存放1553B数据帧的部分数据,因此一个完整的1553B数据帧可能存放在相邻的多个遥测子帧中。而且由于1553B数据不是每一时刻都有,因此有时候遥测数据帧并不包含1553B数据,即使出现1553B数据,其1553B数据帧的帧头在遥测数据帧中的相对位置也是不固定的,且1553B数据帧的长度也并不固定,这就给1553B数据帧的搜索带来了困难。
在处理1553B数据时就需要先进行挑路处理,将各个遥测子帧中的1553B数据域中的数据提取出来,存放在一个二维数据结构中,如图2左所示。其中该表的列数x是遥测子帧中1553B数据域的个数,行数为遥测子帧的个数。然后再从该二维数组中搜索1553B数据帧的帧头用以确定1553B数据包起始位置,并将完整的1553B数据帧提取出来,如图2右所示。最后将1553B有效数据提取出来并进行计算、打包、发送。
图2 挑路处理后的1553B数据帧结构
挑路处理模块有时也需要对某些遥测数据进行数据类型转换或浮点计算。涉及到的数据类型可能包含无符号整数、有符号整数、定点数、浮点数。比如,传感器数据一般为偏移码或补码,而传感器所测量的物理量一般为定点数或者浮点数。因此在某些情况下,挑路模块在将挑路后的遥测数据重新打包发送给终端计算机前,需要将某些遥测数据进行浮点运算。
由以上分析可知,使用FPGA实现遥测数据挑路及遥测数据处理存在以下的难点:
1)遥测数据帧结构比较复杂,且帧内某些遥测数据的位置及长度并不固定,这就给遥测数据的挑路带来了困难。如果使用传统的HDL代码方式实现,其实现难度及调试难度均较大。比如使用FPGA实现诸如1553B类型的遥测数据挑路,其状态描述及控制将会变得非常复杂,给实现及调试带来了较大困难。
2)虽然使用FPGA可以进行浮点运算,但实现难度较大,且非常耗费FPGA逻辑资源。
针对以上问题,本文提出了以MicroBlaze[5-6]为核心的挑路模块设计方案,用于解决FPGA在实现遥测数据挑路及浮点运算方面遇到的困难,同时引入了动态部分重配置(dynamic partial reconfiguration,简称DPR)技术[7]使挑路模块具备在线重配置能力。
该挑路模块具备以下的特点:
1)利用FPGA嵌入式系统实现遥测数据挑路及浮点运算,无需外部DSP或ARM支持,系统集成度高。利用嵌入式系统配置灵活、调试难度低的特点可以完美解决在挑路处理过程中遇到的数据挑路困难、浮点运算资源占用大等问题。通过嵌入式软件方式实现。这样不仅降低了实现难度,也提高了开发效率。
2)支持遥测数据处理功能的在线重配置。利用DPR技术,可以针对不同的遥测数据在线下载相应的遥测帧处理模块,从而提高了地面测控站的适应性。
该设计相关项目要求挑路模块应该具备以下的功能、性能指标:
1)能够对最大为96Byte(行)*96Byte(列)的实时遥测数据帧进行挑路处理,并能够对帧内指定遥测参数进行浮点运算。
2)能够将挑路后的结果重新打包组帧,并发送给终端计算机。
3)挑路模块能够处理20帧/秒以上的实时遥测数据帧。
4)能够根据需要在线更改挑路策略。
为了实现以上功能,该挑路模块的原理框图如图3所示。根据遥测数据处理方式的不同,该模块主要分为两个子模块:遥测数据预处理模块、遥测数据处理模块。
图3 挑路模块原理框图
其中遥测数据预处理模块使用HDL代码实现,具体功能包括:
5)将接收到串行PCM码流转换为并行数据。
6)完成原始遥测数据的预处理。对于并不复杂的遥测数据挑路,遥测数据预处理模块会直接将挑路后的遥测数据组帧,并发送给目标终端,而对于复杂的遥测数据挑路或需要浮点运算的遥测数据,遥测数据预处理模块会将预处理后的遥测数据发送给后端的遥测数据处理模块做进一步处理。
7)将重新组帧后的遥测数据帧转换为AXI Stream总线数据流发送给遥测数据处理模块。
8)接收从MicroBlaze通过AXI Stream总线发送过来的重新组帧后的遥测数据,并将该数据转换为串行PCM码流发送给主控计算机。
同时,该模块使用了Xilinx的DPR技术,利用该技术可以实现遥测数据预处理模块的在线重配置功能,可以在不影响FPGA其他功能模块正常运行的情况下在线配置遥测数据预处理模块,从而实现不同的遥测数据处理功能,这样可以有效提高遥测数据处理的灵活性。为了实现遥测数据预处理模块的DPR功能,在设计前期需将FPGA指定区域划分给遥测数据预处理模块作为DPR区域,同时在嵌入式系统中集成硬件内部配置访问接口[8](hardware internal configuration access port,简称HWICAP),以便实现MicroBlaze对DPR区域的配置。
遥测数据处理模块的具体功能包括:
1)对遥测数据预处理模块通过AXI Stream总线发送过来的遥测数据做进一步处理,如对位置及长度不固定的遥测数据进行挑路。
2)对需要浮点运算处理的遥测数据进行浮点计算。
3)将挑路后或者浮点运算后的遥测数据重新组帧并通过AXI Stream总线发送给遥测数据预处理模块。
遥测数据处理模块使用了以MicroBlaze为核心的FPGA嵌入式系统进行复杂挑路操作及浮点运算。MicroBlaze是一款32位精简指令集软处理器核。该处理器在150 MHz时钟下可提供125D-MIPS的性能,非常适合于价格敏感的网络、电信、数据通信和消费市场等领域的嵌入式应用。该嵌入式系统的本地总线主要采用了AXI(Advanced eXtensible Interface)总线[9]。AXI是ARM公司提出的一种高性能、高带宽、低延迟的片内总线,遥测数据处理模块中的各个模块均是通过AXI总线与处理器进行连接的。MicroBlaze提供了若干的AXI Stream接口与外部数据源连接,外部遥测数据可以通过该接口直接被MicroBlaze读取并处理,为遥测数据的高效处理提供了条件。为了解决跨时钟域的问题,该设计使用了一个双端口异步FIFO(AXIS_FIFO[8])连接遥测数据源与MicroBlaze。遥测数据通过AXIS_FIFO被MicroBlaze直接读取并进行处理。
同时,遥测数据处理模块的嵌入式系统也包含有一系列其它IP核以保证系统的正常运行。如SPI模块用于MicroBlaze访问外部配置Flash,以便保存重要参数;Timer模块用于遥测数据接收超时处理;Block Memory用于存储MicroBlaze本地运行程序;UART模块用于调试数据输出以及DPR数据传输;HWICAP模块用于DPR功能。
遥测数据处理模块中嵌入式软件的遥测数据挑路处理流程如图4所示。
图4 遥测数据挑路软件处理流程
大致步骤如下:
1)挑路模块的初始化。包括接收/发送缓冲区、定时器、关键变量的初始化。
2)MicroBlaze不断访问接收AXIS_FIFO,将其中的有效数据存入遥测数据缓冲区进行缓存,如果接收到的数据为遥测数据的帧头,则MicroBlaze启动计时器进行计时,并继续接收数据。
3)在接收到遥测数据帧头后,如果在计时器计时周期内未接收到完整遥测数据,则MicroBlaze初始化挑路模块,重新接收数据;如果在计时器计时周期内接收到了完整的遥测数据,则进行下一步处理。
4)在接收到完整的遥测数据后,MicroBlaze会对存储在遥测数据缓冲区的遥测数据进行挑路处理,同时对需要浮点运算的遥测数据进行浮点运算,最后将处理后的遥测数据重新组帧。
5)MicroBlaze将重新组帧后的遥测数据发送给发送AXIS_FIFO,完成本次的挑路处理。
对于遥测数据的浮点运算,假设原始遥测数据X为1 Byte的无符号整形数,需要经过运算并转换为单精度数据Y进行输出,Y数据位宽为4 Byte。Y与X关系如下:Y=X*5/255。
如果使用HDL代码实现,则需要将X先转换为浮点数,然后使用浮点运算IP进行浮点运算。以上几种操作的FPGA资源占用情况如表1所示(以Xilinx的Artix7系列FPGA作为硬件平台)。
表1 HDL实现浮点运算资源占用情况
需要注意的是,这仅仅是基于以上简单的浮点运算为例的情况,而对于一些更为复杂的浮点运算,其FPGA资源占用将大大增加。可以看出,在FPGA上使用HDL的方式实现浮点运算,过大的逻辑资源占用情况很难解决,因此需要使用其他的方式实现。
而MicroBlaze不仅支持IEEE754标准的浮点数据运算,同时也支持浮点运算单元(Floating Point Unit,FPU),可以在很大程度上缩短浮点运算时间,这就为FPGA的浮点数据处理提供了更加灵活的实现方式。
为了实现遥测数据预处理模块的DPR功能,需要按照如图5所示的流程进行设计。
具体步骤如下:
1)在FPGA前期设计阶段,为遥测数据预处理模块划分出一块独立的区域用于存放模块的逻辑资源,且该区域所包含的FPGA逻辑资源应该足够挑路模块使用。
2)遥测数据预处理模块的DPR区域划分完成后,需要对相应的FPGA工程进行编译、综合,最后生成DPR比特流文件。在此步骤可以根据不同需求,设计实现不同功能的挑路DPR模块,以备后续阶段使用。
3)该设计中使用了RS232串口作为DPR数据的输入接口。在工作过程中MicroBlaze会不断访问串口,一旦接收到DPR比特流数据,MicroBlaze会将这些DPR数据写入HWICAP模块,直到DPR比特流文件传输完成。
4)一旦DPR比特流文件传输完成,HWICAP会自动复位DPR模块,同时MicroBlaze会根据DPR模块的特征字选取预存的挑路程序进行匹配。
实际测试中,该设计的FPGA采用了Xilinx公司的XC7A200T,FPGA开发环境使用VIVADO,而嵌入式软件开发平台使用了Xilinx SDK[10]。MicroBlaze工作时钟为100MHz,且配备有硬件FPU和专用乘法器,PCM码流时钟为40 MHz。
该设计的FPGA资源占用情况如表2所示,其中包含了完整的挑路模块。可以看出,该设计的FPGA资源占用率是非常低的。
表2中使用的5个DSP Slice是用于实现MicroBlaze的FPU及乘法运算单元。同时,MicroBlaze使用了2块BRAM作为程序存储器,容量为8 kByte。当需要更大容量的程序存储器时,也可以使用更多的BRAM作为程序存储器。可以看出,由于该设计中大部分的遥测数据挑路处理是由嵌入式软件实现的,因此如果需要实现更复杂的遥测数据挑路处理,也仅仅需要增加BRAM,为嵌入式程序提供更大的存储空间,而基本不会占用其他的FPGA资源。
与表1中HDL实现的浮点运算所占用FPGA资源进行对照,使用嵌入式系统进行浮点运算在FPGA资源占用率上具有更大的优势。
经过硬件测试,采用MicroBlaze的挑路模块可以完成实时遥测数据帧的挑路处理,且该模块最快可以处理每秒20帧的实时遥测数据帧,能够满足设计需求。同时,由于复杂的遥测数据挑路处理及浮点运算均是在嵌入式软件中完成的,其调试效率要远高于基于HDL的硬件调试,因此具有较高的设计开发效率。同时该设计也支持通过串口在线下载遥测数据预处理模块的DPR比特流,实现不同挑路功能的动态切换。
由于该设计中使用的嵌入式处理器是软核处理器,其主频较低,和当前主流ARM或DSP相比处理能力有限。因此如果对遥测数据的处理速度有更高的要求,可以考虑采用诸如ZYNQ等内部集成高性能ARM核的FPGA,使挑路模块具备更强的遥测数据处理能力。
本文提出的基于MicroBlaze的测控终端数据处理模块,能够在不增加硬件成本的条件下,对复杂的遥测数据进行挑路及各种浮点运算处理。相对于FPGA+ARM(DSP)的挑路实现方式,这种实现方式具有硬件成本低、集成度高、调试方便、开发周期短等特点,非常适合于应用在价格敏感或集成度要求高的测控终端设备上,具有很好的推广和借鉴作用[9-11]。