《电子技术应用》
您所在的位置:首页 > 其他 > 设计应用 > 基于指令前缀的专用VLIW压缩技术研究与实现
基于指令前缀的专用VLIW压缩技术研究与实现
来源:电子技术应用2013年第4期
姬忠宁,陈 迅,徐金甫,张 鹏
解放军信息工程大学,河南 郑州450004
摘要: 指令槽空闲率高是VLIW处理器一直面临的问题。通过对专用VLIW处理器架构及其应用程序进行分析,提出了VLIW指令前缀压缩技术。该技术通过删除各个指令字中无效的指令槽操作来对VLIW指令字进行压缩。同时设计了解压缩电路,对压缩代码进行解压缩处理。实验结果表明,该技术能够以较小的面积代价换取约47.2%的指令存储器面积的节省。
中图分类号: TP368.1
文献标识码: A
文章编号: 0258-7998(2013)04-0022-04
Research and implementation of VLIW compressing technology based on instruction prefix
Ji Zhongning,Chen Xun,Xu Jinfu,Zhang Peng
The PLA Information Engineering University, Zhengzhou 450004,China
Abstract: Huge idle rate of instruction slot is a serious problem in VLIW processor. Through analyzing the architecture of special VLIW processor and its typical application, this paper puts forward the instruction prefix compressing technology of VLIW processor. This technology compresses the VLIW instruction words by eliminating the invalid instruction slot operation of every instruction word. At the same time, the decompressing circuit is designed,which decompresses the compressed code. The results show that the technology can save the area of instruction memory by 47.2% at the expense of a little area.
Key words : special VLIW processor;instruction prefix compressing technology;decompressing circuit;instruction memory

    作为开发指令级并行性的经典结构,超长指令字VLIW(Very Long Instruction Word)在处理器研究领域占有极其重要的位置[1]。

    VLIW处理器将指令调度任务交给编译器,编译器通过开发应用中的并行性提高处理器中执行单元的利用率。而实际应用中的有限并行性使得处理器中的功能单元有较多闲置,即VLIW指令字中有较多无效指令槽。但是为了保持规整的超长指令字格式,这些无效指令槽即使不代表实际的部件操作,也需要存储于处理器指令存储器中,这就意味着对指令存储单元的极大浪费。
    为了解决这一问题,国内外相关研究机构采取了不同的方法,虽然取得了一定的成果,但效果不够明显。本文针对上述问题,提出了一种新的VLIW压缩技术——指令前缀压缩技术,其主要思想是通过压缩指令字中的无效指令槽,同时添加相应的附加前缀编码,以此来减小存储器的面积。本文首先对专用VLIW处理器架构及其指令字格式进行了分析,提出了字处理指令槽空闲率高的问题。然后针对该问题,提出了指令前缀压缩技术,并详细介绍了该技术的理论以及前缀编码信息。其次设计了用于解压缩的专用电路,并对电路的结构以及内部模块进行了介绍。最后,通过实验验证了本文提出的指令前缀压缩技术的有效性。实验结果表明,该技术能够平均获得47.2%的代码体积节省,极大地节省了指令存储器的空间。
1 专用VLIW处理器分析
1.1 专用VLIW处理器架构

    本文针对一款领域专用VLIW处理器[2]进行讨论,其硬件架构如图1所示。

    4个字处理指令槽0~3,其指令结构完全相同,能够独立指示并控制相应的功能单元,支持多字并行处理。指令槽4为分支控制指令槽,其操作码被送往分支转移部件控制相应的电路模块工作,进而控制程序计数器跳转。分支控制指令槽与4个字处理指令槽进行拼装,可实现分支控制与多字密码处理间的并行,由指令特征域来进行标识。
    运行于专用VLIW处理器上的应用程序主要分为三类,对这三类应用程序的字处理指令槽进行了分析,分析结果如图3所示。

    由图3可知,对于不同的应用,VLIW指令字的字处理指令槽使用率差别比较大,但对大部分应用来说,各个指令槽的使用率基本在50%以下。所以在存储指令时,如果按照VLIW的方式进行存储,指令存储器的冗余度会比较高,进而会浪费大量指令存储器的存储空间。所以需要寻找一种对VLIW指令字进行特殊处理的方法,以此来节省指令存储器的存储空间。
1.3 VLIW指令压缩相关研究
    针对上述问题, Wolfe A等人通过引入数据压缩的方法,利用压缩编码算法对VLIW进行重新编码[4],达到了压缩VLIW指令字、节省存储单元空间的目的。但该方法的解码逻辑比较复杂,带来了较大的硬件开销。朱少波等人通过对代码的深入分析,采用改进的寄存器分配算法[5],使得同一条指令的源寄存器编号能够尽量在目标寄存器的辐射范围内,以获得最大的压缩率。但此种方法对VLIW代码体积压缩有限,不能满足指令存储器面积缩减的要求。杨惠等人通过引入专用硬件支持编译调度的循环软流水,有效提高了指令并行性[6]。该方法虽降低了代码存储空间,但并没有针对VLIW个别指令槽空闲率高的本质进行改进,且对某些算法来说,优化空间有限。
    本文在上述相关研究的基础上,通过对VLIW指令的指令槽空闲率高的问题进行深入分析,提出了一种新的VLIW压缩技术——指令前缀压缩技术,通过压缩指令字中的无效指令槽来减小存储器的面积,同时设计了用于解压缩的专用电路。
2 VLIW指令前缀压缩技术
2.1 指令前缀压缩技术理论分析

    指令前缀压缩技术通过将VLIW各个字处理指令槽中的无效操作剔除,减小无效指令槽对存储空间的浪费[7],并将剩余有效的指令槽重新编码,紧凑存储在指令存储器中。最后在每一条完整指令前添加前缀编码,以标识此条完整指令的长度、包含有效指令槽的个数以及其中的每一个指令槽在重新拼装之后的VLIW指令字中的位置。
    将原始的应用程序输入到编译器中,编译器对每条指令进行分析,判断各个字处理指令槽的使用情况。通常,在处理器的VLIW指令字设计过程中,将无效指令槽设置为空指令。因此,在对指令槽的使用情况进行判断时,只需判断每个字处理指令槽的使用情况,若为空指令,则表示该指令槽对应一条空操作。之后,将无效指令槽删除,剩余的有效指令槽依次存储,并在一条完整指令前添加前缀编码。图4(a)是包含两个有效指令槽的VLIW指令压缩实现方式示意图;图4(b)是存储原始VLIW指令字的指令存储器示意图;图4(c)是存储指令前缀压缩之后的VLIW指令字的指令存储器示意图。

    为了后续能够有效地解压缩,需要对控制程序执行的分支指令的目标指令进行特殊处理。在对程序进行编译的过程中,若检测出是目标指令,则另起一行进行存储。如果目标指令所在位置的上一行没有存满,则在目标指令的上一条指令末添0,这样便于分支指令的寻址。
2.2 指令前缀编码设计
    每一条完整的VLIW指令字都有一个前缀编码,用于标识此条指令字的长度、包含指令槽的个数以及其中的每一个指令槽在重新拼装之后的VLIW指令字中的位置。下面对前缀编码进行详细说明。
    (1)模板类型标识,位宽为4 bit,用于指示此条完整指令的模板类型。
    (2)写使能标识,位宽为8 bit,用于指示4个字处理指令槽的第一、第二写使能。
    (3)指令槽个数标识,位宽为3 bit,用于指示此条完整指令包含几个有效的指令槽。
    (4)指令槽位置标识,位宽为15 bit,用于指示5个指令槽在VLIW指令字中的位置。
    (5)保留位,位宽为7 bit。
2.3 解压缩电路设计
    解压缩电路架构如图5所示,包括控制电路、指令缓存器、指令缓存器移位和填装电路、指令拼装电路。

2.3.1 控制电路
    控制电路的主要功能包含两部分,一部分负责产生指令缓冲器状态信号(当前指令缓存中包含几个有效的指令槽);另一部分负责产生读取指令存储器的控制信号。指令缓冲器状态信号输入到指令缓存器移位和填装电路,配合其他数据完成从指令缓存器中移出一条完整指令的任务,并对指令缓存器进行更新。指令存储器读控制信号用于控制指令存储器的读取,在该信号的产生过程中,采用预计算的思想,即预计算下一个周期指令缓存在移出一条完整的指令之后,剩余的有效指令槽的个数,以此作为指令存储器读控制信号是否为高电平的判断条件。
2.3.2 指令缓存器
    指令缓冲器的主要功能是存储从指令存储器中读取的指令,其位宽是407 bit,内部存储的每一条完整指令的长度是不固定的,范围为37 bit~185 bit。并且每一条完整指令前都会有一定的前缀编码,用于存储与该指令相关的信息。所以指令缓存器中存储的完整指令的个数也是不固定的。用指令缓冲器状态信号作为指令缓冲器是否更新的判断条件。
2.3.3 指令缓存器移位和填装电路
    该电路的功能是对指令缓存器进行更新。在指令缓冲器状态信号和当前需要移出的指令长度的共同控制下,该电路在指令缓存器移出一条完整的指令之后,及时对其进行更新。这样,在任何一个时钟周期,指令缓存器的格式都是一样的,即起始的37 bit都是其后一条完整指令的前缀编码。移位和填装电路的原理图如图6所示。

2.3.4 指令拼装电路
    指令拼装电路的功能是对从指令缓存器中移出的每一条完整指令进行重新拼装,使其满足VLIW指令字的格式,以便于后续译码器对VLIW指令字的译码。因为从指令缓存器中移出的指令都包含一个前缀编码,所以拼装电路首先需要对此前缀编码进行译码,以产生拼装电路需要的控制信号。然后在控制信号的作用下,将每一次从指令缓存器中移出的指令拼装成VLIW指令字。
3 实验结果分析
    为了验证本文设计的指令前缀压缩技术的有效性,对图3中的3类应用分别进行了测试。分析测试结果得到如表1所示的代码压缩性能报告。

    从表1可以看出,本文提出的指令前缀压缩技术能够平均获得47.2%的代码体积节省,极大地减少了代码体积,节省了指令存储器的空间。指令前缀压缩技术能获得较好的压缩性能,这是因为功能单元的利用率差异较大,除配置指令外,VLIW指令字的字处理指令槽时常出现空闲的情况。
    本文采用0.18 ?滋m CMOS工艺,利用Synopsis Design Complier工具,基于标准单元库对解压缩逻辑电路进行综合,时钟频率为200 MHz,面积为51 486.69 μm2。结果显示,本文设计的解压缩电路能以很小的面积代价获取指令存储器面积较大的节省。
    在未来的工作中,可将本文设计的指令前缀压缩技术和解压缩电路应用到专用VLIW处理器中,作为降低处理器功耗的一种有效手段。
参考文献
[1] 愈磊,罗金平,周兴铭.VLIW技术的最新发展[J].计算机工程,2002,28(1):1-4.
[2] 王昭顺,张建林,曹文彬.VLIW体系结构微处理器的一种设计方法[J].计算机科学,2000,27(8):40-42.
[3] LEE R B,SHI Z,YANG X.Efficient permutation instructions for fast software cryptography[J].IEEE Micro,2001,21(6):56-69.
[4] WOLFE A,CHANIN A.Executing compressed programs  on an embedded RISC architecture[C].Proceedings of  the 25th International Symposium on Micrcmarchitecture,   1992:81-91.
[5] 朱少波,姚庆栋,洪享,等.一种面向VLIW指令压缩的寄存器分配算法[J].计算机工程,2003,29(20):154-156.
[6] 杨惠,陈书明,万江华.一种基于VLIW DSP架构的高性能取指流水线[J].国防科技大学学报,2011,33(4):102-106.
[7] 管茂林,何义,杨乾明,等.基于程序特征分析的流处理器VLIW压缩技术与解压实现[J].国防科技大学学报,2012,34(1):138-143.

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