低功耗水声遥控技术优化设计

2021-07-14 23:37陈殿杰李雨桐陈凡胜
数字海洋与水下攻防 2021年3期
关键词:载波低功耗指令

陈殿杰,李雨桐,陈凡胜

(北京长城电子装备有限责任公司,北京 100082)

0 引言

水声遥控装置通过水声发射换能器向水下节点发送遥控指令,遥控水下节点完成指定任务。其中遥控接收装置需在水中超长时间待机。对遥控接收装置的低功耗设计有利于提高用户的使用感受。现阶段水声遥控装置低功耗设计一般进行硬件的低功耗设计,在硬件设计中,选取性能较高、功耗较低的设备和模块,适时控制电源。在软件设计中,按照可靠性、简洁性和标准化的原则进行编写,可大大降低对硬件的需求。因此采用硬件软件相结合、相配合的方法,充分降低系统功耗,延长水声遥控装置通海上运行时间,不仅能够延长设备的使用时间,而且能够减少资源的浪费。遥控接收装置的低功耗设计主要从 2方面进行考虑:1)硬件的低功耗设计;2)软件的低功耗设计。软件低功耗设计的最根本原则是在保证程序正确运行的大前提下,提高运算速度和占用更少的运行资源。

本文中的遥控接收装置低功耗软件优化主要从源级低功耗优化、算法级低功耗优化及编译级算法优化3个方面进行,以达到编译级汇编语言编写的程序代码能够以最快的速度、占用最少的硬件资源进行正确的运行,从而实现对接收端低功耗的需求。

1 软件功耗优化原则方法及分类

从普遍意义上讲,在功耗优化这个问题上,研究者普遍比较关注硬件功耗优化,应用各种技术想方设法改进硬件的功耗。比如,在芯片制造工艺上采用更精细的纳米技术,不断降低芯片驱动电压,改变片内系统结构等。事实上,整个系统的运行管理是由软件体现的。在硬件基础一定的情况下,只有将软件系统对能量的损耗降至最小,才能使整个系统工作于最佳状态。软件设计中,所有频繁调用的函数都需要优化[1-2]。代码优化是一件非常有意义的事情。优化处理是指产生更高效的目标代码所做的工作。目标代码占空间更小、执行速度更快。低功耗软件优化的原则是基于阿姆达尔定律[3],优化经常使用的代码,不经常使用的代码不做较多优化考虑(或者完全不优化)。

阿姆达尔定律:

式中:S表示固定负载情况下描述并行处理效果的加速比;a表示并行计算部分所占比例;n表示并行处理节点个数。

阿姆达尔定律同样适合低功耗的软件优化,由此低功耗优化的基本原则:1)等价原则优化后不改变原程序运行的功能;2)有效原则优化后产生的目标代码运行时间较短;3)优化后占用空间较小,包括代码空间和数据空间。

一般而言,低功耗的优化过程如图1。其中:中间代码优化表示与硬件无关的优化,目标代码优化依赖于硬件的优化。

图1 代码优化过程Fig.1 Code optimization process

根据以上过程并结合遥控接收装置的自身特点,从算法级、源程序级(与硬件无关)以及编译级(与硬件相关)3个方面研究常用的水声遥控装置接收软件低功耗优化方法。

2 低功耗优化设计

2.1 算法级低功耗优化

水声遥控装置接收端系统如图2所示,接收装置获得遥控信号后,首先去载波,然后进行信号搜索,搜到信号后进行跟踪,并进行多普勒修正,然后由测量信号进行信道估计,根据估计的结果进行RAKE接收,解码后得到输出的信息。

图2 遥控装置接收系统框图Fig. 2 Block diagram of remote control device receiving system

去载波是接收端所有信号处理算法执行的大前提,对其进行优化具有十分重要的意义。首先对其信号结构进行改造,按照传统的操作,其流程如图3。

图3 去载波流程Fig. 3 Carrier elimination flow

去载波的改进优化可分成数据流的改进优化和数据结构的改进优化2部分:

1)关于数据结构的改变,进行硬件平台的低功耗性能优化时,要建立对内存数据进行操作的概念。先分析内存,然后再根据算法的需要进行合理的分配设置。在本项目中,实现了真正意义的复数结构。去载波的过程中包络数据的实部和虚部分别放到不同的地址中,进行后续的处理。改进优化后的方案将分开存放包络数据的实部和虚部,放到了数组内相邻的2个short型中。从内存的角度看,这一操作是把数据放到了一个 4字节的高位和低位,不仅节约了内存,实现了内存的优化,而且使后续的编译级得到优化。

2)对数据流进行改进优化,在原有的算法中硬件中断到达的时刻,将采集到的接收信号数据放到固定的地址,数据达到遥控装置的1个信号周期后进行去载波的处理,处理后的数据进行后续的解码计算。进行低功耗优化后的数据流结构如图5所示,中断到达后直接进行去载波处理得到基带信号,累计处理后的基带信号达到1个周期后再进行后续算法处理。

图4 优化前去载波流程Fig.4 Carrier elimination flow before optimization

图5 优化后去载波流程Fig.5 Carrier elimination flow after optimization

去载波低功耗优化的有益效果在当下步骤主要体现在程序占用内存的大量减少。统计仅对去载波部分进行比较,不包含程序的其他部分,不进行整体比较。在未进行编译级优化及源级优化时速度的提高,是由于释放了大量的内存,程序可以充分使用片内空间,消除了片内外读写速度的差异,同时节省了数据搬移的开销。

要想进一步提高遥控接收装置的抗多普勒、抗多途能力,就要在接收端采取额外措施——多普勒频率搜索和多途分量的提取,再加上同步信号搜索和信号的解扩,这将会带来很大量的相关运算。要进行低功耗的优化,仅仅在编译级进行优化效果不是特别明显,所以要在算法级进行优化。一个快速算法,对低功耗性能优化有着十分重要的意义。本设计中主要采用了快速沃尔什变换代替快速傅里叶变换。

快速沃尔什变换(FWHT)类似于FFT,WHT也有快速算法FWHT,也可将输入序列f(x)按奇偶进行分组,分别进行 WHT[4]。FWHT的基本关系为

WHT是将一个函数变换成取值为+1或-1的基本函数构成的级数,用它来逼近数字脉冲信号时要比FFT有利。同时,WHT只需要进行实数运算,存储量比 FFT要少得多,运算速度也快得多。沃什-阿达玛快速转换图解与傅里叶快速转换图解外观相似,区别在于完全没有复数乘法。这种特点在大多数硬件平台上都占有绝对的优势,其避免了平台对乘法器的需求和依赖。同时WHT将一个函数变换成取值为+1或-1,占用的存储空间小,为硬件平台的低功耗优化带来了极大的优势。沃什-阿达玛快速转换与傅里叶快速转换相比带来的效果增益,使其运行速度提高了4.3倍。

2.2 源程序及优化

虽然水声遥控装置接收部分的软件部分全部采用编译级汇编代码进行编写,但是在编写汇编程序之前进行了源程序级的 C语言程序设计,然后再进行汇编程序的编写。所以高效的源程序记得代码编写及优化是十分必要的,也是后续汇编程序的基础。

常用优化技术包括:删除多余运算、循环不变代码外提、强度削弱、变换循环控制条件、合并已知量与复写传播、删除无用赋值等。这些方法在遥控通信的接收装置的低功耗性能优化中同样有效。具体实施可实例化到堆栈和寄存器的合理利用,避免调用开销[5],局部变量和使用查找表方面。主要体现在以下几个方面:

1)堆栈和寄存器的合理利用包括:避免或减少使用本地变量,减少函数参数的个数,尽量避免数据转换[6],全局变量合理分配。

2)避免不必要的开销包括:避免调用的开销,尤其是循环的合理利用[7];局部变量的合理使用,应该尽可能地不使用 char和 short类型的局部变量;函数通常可以设计成查找表,这样可以显著提升性能;减小运算强度[6],非必要情况不采用除法和取余实现程序;充分利用指令层的并行机制。

2.3 编译级(依赖于硬件)的低功耗优化

由于水声遥控装置接收部分对低功耗的要求极高,所以仅仅对软件部分进行算法的低功耗优化及源程序级的低功耗优化无法满足需要。虽然软件部分全部采用编译级汇编代码进行编写,但是在编写汇编程序之前进行了源程序级的 C语言程序设计,然后再进行汇编程序的编写。所以高效的源程序记得代码编写及优化是十分必要的,也是后续汇编程序的基础。

编译级的低功耗优化主要集中在使用并行指令,用有用的指令(取代 NOP)填充延迟间隙,循环展开,字长优化(使用LDW);排流水。

在指令级并行的机器上,程序的运行速度依赖于:程序中潜在的并行、处理器上可用的并行、从串行程序提取并行的能力、在给定的调度约束下发现最佳并行调度的能力。

指令级并行时,通常是一个处理器在单个时钟周期内发射几个操作。而指令级并行的获得是通过使用流水线技术指令流水线和分支延迟。发现应该执行一个分支而不是直接后继,转向一个分支时会引起取分支目的地址指令的延迟并引起指令流水线“打嗝”[8]。可以通过使用硬件,根据分支的执行历史来预测分支结果并从预测的目的地址预取指令。分支延迟不可避免,因为分支预测会发生偏差,此部分可以通过排流水的方法来解决。此处不过多说明。

NOP指令相当于未优化,消除不必要的NOP指令,在很大程度上能提高程序的运算速度避免不必要的时序浪费[8]。其算法优化的沃尔什哈达玛变换中的速度提高,本质上可以看成是一种有效的去延迟间隙。

在不过度占用程序空间的情况下,展开循环来提高程序的运算速度是一种非常有效的方法。

字长优化是指,在对一段连续地址内存的数据进行运算时,打破常规的按数据类型按址取数的方法,一次性获取需要的地址的尽可能多的数据量的方法。例如short型数据一次获取2个或4个short数据再进行计算,取数只占用一个指令时序。在前面涉及的沃尔什哈达玛变换就十分适用这种方式。

这种方法可以运用到去载波的算法中,大大提高了运算速度,在之后的排流水结构中能大大调高程序的运行速度。尤其是在运算过程中,数据的读取及乘法计算占运算时间的大部分时间,所以此部分优化极有意义。

流水线是一种在时间上串行,在空间上并行的技术。将整个电路划分为若干个流水线级,流水线每级之间设置寄存器锁存上一级输出的数据;每一级只完成数据处理的一部分;一个时钟周期完成一级数据处理,然后在下一个时钟到来时将处理后的数据传递给下一级;第1组数据进入流水线后,经过1个时钟周期传到第2级,同时第2组数据进入第1级,数据队列依次前进。每组数据都要经过所有的流水级后才能得到最后的计算结果,但是对整个流水而言,每个时钟都能计算出一组结果,所以平均计算一组数据只需要1个时钟周期的时间,这样就大大提高了数据处理的速度。

排流水能使关键路径缩短,从而提高时钟速度,或者在同样速度下降低功耗;同时流水的并行处理,多个输入在一个时钟周期内并行地处理,可使有效速度提高与并行级数相当的倍数,同样也可以降低功耗。

3 低功耗性能及分析

经软件功耗优化改进后,在单片机上进行了多次的时间测试,测试条件为相同工作主频。未改进前信号的去载波、搜索、跟踪时间分别为 2.0 s、2.7 s、2.0 s。优化后去载波、搜索、跟踪时间分别为0.11 s、0.14 s、0.13 s。经过统计最长解码时间提高了近20倍。同时算法对空间的需求从原来的8 MB空间的需求降低为313 KB的需要,不需要硬件平台提高额外的存储空间。

优化后可以对硬件进行无外部存储空间设计,并且降主频正常工作。经测试,原硬件功耗为130 mW,优化后约为12 mV,大大降低了平台的功耗,相同电池电量的情况下可在海上进行更长时间的工作。

图6 低功耗优化测试仿真Fig.6 Low power optimization test simulation

4 结束语

在水声遥控装置项目中,为了实现接收端的低功耗稳定运行,项目中采用了编译级的机器语言(汇编语言)进行程序的编写。在过程中经历了算法优化设计、源程序优化设计到将源程序转化成所需的机器语言并进行手工流水的过程,极大地提高了程序的运行速度,降低了程序数据空间的占有率,使得在硬件运算芯片上实现算法设计成为可能,无需额外设计外挂存储芯片,大大降低了设备的功耗。同时,在同样的主频下,运行程序的时间提高了近20倍,这种有利的条件可以使算法程序在一个更低的主频条件下进行运算,对设备的低功耗运行也是十分有益的。

猜你喜欢
载波低功耗指令
基于抽象汇编指令的恶意软件家族分类方法
大功率微波部件多载波无源互调分析与实验验证
《单一形状固定循环指令G90车外圆仿真》教案设计
新机研制中总装装配指令策划研究
核芯互联发布高性能ADC模数转换器
莱迪思发布全新低功耗FPGA技术平台
低载波比下三电平NPC逆变器同步SVPWM算法
中国移动LTE FDD&TDD载波聚合部署建议
物联网产业离不开低功耗蓝牙通信技术
太空第一人