一种增加DSP指令编码密度的方法
一、介绍
DSP处理器对存储器非常敏感,希望片上存储器越小越好。增加指令集的密度,减少程序存储空间。在DSP设计的过程中,引入模式控制的方法,控制处理器运行在16位和32位模式,增加了指令集的密度。同时,设计了两种可以运行在16位和32位模式下的运算单元。一种是可分割的乘法累加单元(该单元通过改进32位乘法累加单元,实现两种模式的运算)、一种是可重构的乘法累加单元(该单元采用两个16位的乘法累加单元重构32位运算单元,也可以同时实现两种模式的运算)。
目前的数字信号处理要求处理多媒体数据,多媒体数据处理要求提高16位和8位的数据的吞吐量及位宽的灵活性。例如MPEG-4中,运算要求位宽从8位到64位的灵活性。我们设计的uDSP为了满足这些要求,可以完成16位和32位的运算功能。
DSP设计中,芯片面积是主要的限制条件。影响芯片面积的一个主要因素是片上存储器,它经常占据芯片的大部分面积。指令长度会影响程序存储器的面积。因此,在DSP体系结构设计时,减少指令字长是一个主要的考虑方面。我们采用模式控制的方式,增加指令编码密度。
具体方法是在模式控制寄存器中,增加模式控制位。由模式控制位控制指令进行16位运算还是32位运算。而不是16位运算一套指令,32位运算一套指令。这样就减少了指令的总数,提高了指令编码的密度。在我们设计的DSP中,减少了32条指令。
二、DSP结构
目前的数字信号处理要求处理多媒体数据,多媒体数据处理要求提高16位和8位的数据的吞吐量及位宽的灵活性。例如MPEG-4中,运算要求位宽从8位到64位的灵[1]活性[2]。我们设计的uDSP为了满足这些要求,可以完成16位和32位的运算功能。
DSP的体系结构将在以后的**中作介绍,本文主要介绍该DSP的运算指令设计及特有的模式控制结构。本DSP运算指令包括MAC运算、ALU运算和SHIFTER运算等32条运算指令。如果采用其它处理器的做法,16位运算和32位运算采用不同的指令,则运算指令就有64条。为了减少指令编码长度,该DSP采用了模式控制的方式。即针对某一种运算(例如乘加),16位运算和32位运算采用同一条指令;它们的区分采用模式控制的方式,在16位运算模式下,运算指令进行的是16位运算;在32位运算指令下,运算指令进行的是32位运算。采用这种方式的基础是,在实际应用中,一般不会出现同时进行16位运算和32位运算的情形。
图1是DSP的结构图。控制单元和模式控制器控制数据通道和存储器的动作。当模式控制单元控制DSP运行在16位模式下时,数据通道进行16位的运算,存储器读出或存取16位的数据;当模式控制单元控制DSP运行在32位模式下时,数据通道进行32位的运算,存储器读出或存取32位的数据。
采用模式控制的方法,DSP的运算指令从64条减少到32条。从而减少了指令的编码长度,提高了编码密度。从而减少DSP的片上存储器。
三、运算单元
DSP处理器中的关键路径是乘法累加单元,实现我们提出的DSP处理器结构的关键也是实现乘法累加运算。本文提出了乘法器单元,可以满足该指令集的要求。既能进行16位运算,又能进行32位乘法累加运算。一种乘法累加单元是采用重构的方法,利用两个16位的乘法器重构一个32位的乘法单元。一种是用分割的方法,采用一个32位的乘法器,通过适当的设计,可以实现两个16位的乘法运算。这两种乘法器均可以工作在16位模式,32位模式和单指令、多数据模式。
3.1 可重构乘法累加运算单元
图2是可重构乘法累加单元的结构图。该乘法累加单元由两个16位的乘法器、三个加法器、一个流水线寄存器构成。可以在一个周期内完成一次32位乘法,或一次16位乘法,或两次16位乘法运算。具体进行哪种运算,由模式控制单元产生的控制信号控制数据流实现。多选器1在模式控制信号作用下,把寄存器A和B中的操作数送到相应的乘法器。加法器1的作用是,在32位模式下时,把A1,B0和A0,B1的乘法结果相加。中间寄存器(partial register)的作用是存储加法器1的结果。加法器2也是在32位模式下起作用,它把中间寄存器的数和A0,B0及A1,B1的相加。加法器3是乘法累加单元的重要组成部分,是一个80位加法器,它把乘法结果和加法操作数相加。为了满足三种工作模式的需求,它由两个40位的加法器重构而成。图3是乘法累加单元的时序图。
工作在16位模式时,乘法乘法操作数经多选器1进入乘法器A,乘法结果经多选器3后进入加法器3,和加法操作数进行加法运算后输出结果。
工作在32位模式下时,假设A1A0是一个32位乘数,B1B0是一个32位乘数,其中A1,B1是高16位数,A0,B0是低16位数。在时钟的上升延,A1,B0被送入乘法器A,A0,B1被送入乘法器B。乘法结果在加法器1中相加,结果送入寄存器(partial register)中。在时钟下降延,A0,B0和A1,B1被分别送入乘法器A和乘法器B。运算结果送到加法器2,和寄存器中的数据相加后经过多选器3进入加法器3,和加法操作数进行加法运算后输出结果。
工作在单指令多数据模式下时,A1,B1作为一对乘法操作数,A0,B0作为一对乘法操作数。在时钟上升延,A1,B1被送入乘法器A,A0,B0被送入乘法器B,运算结果经多选器3后被送入加法器3,和加法操作数进行加法运算后输出结果。
可重构的乘法累加单元用Verilog HDL语言进行了模拟仿真,功能满足预计的要求。
这种结构的MAC单元优点是结构简单,面积小(用两个16位乘法器实现32位乘法),可以调用现成的加法器和乘法器,只占用流水线的一级,简化了DSP的结构。缺点是在高性能DSP的应用上有缺陷,因为它的关键路径是32位乘法(包括两次16位乘法及一些加法),这样进行16位运算时性能就上不去。
3.2 可分割乘法累加单元
采用分割32位乘法器的方法是另一种能实现我们提出的DSP功能的数据通道。一般来说,32位的乘法器都能实现16位的运算。不过用32位的乘法器做16位乘法就有些浪费。我们提出的乘法累加单元和普通的乘法累加单元类似,也包括一个部分积生成单元,一个部分积累加阵列,一个累加单元,如图4所示。其中部分积生成单元和累加单元进行了特殊的设计,从而使32位乘法累加单元不但可以实现32位乘法累加运算和16位乘法累加运算,还可以工作在单指令多数据模式下,同时完成两次16位乘法累加运算。
工作在32位或16位模式下,所有的部分积是根据输入32位数译码出来的值。工作在单指令多数据模式下,部分积生成单元把示意图中未填充部分置零,填充部分生成两个16×16的部分积。这样,通过对部分积生成单元进行简单的改进,就可以在一个时钟周期内实现两次16位的乘法累加运算,增加了数据吞吐量。这在目前的DSP应用中是非常重要的。
四、结论
本文提出了一种增加DSP指令编码密度的方法,采用模式控制的方法实现不同位宽的运算指令,从而把我们设计的DSP的64条运算指令减少到32条。另外,本文提出了能实现不同位宽运算的数据通道,一种是可重构的乘法累加单元,一种是可分割的 乘法累加单元。均对其进行了模拟仿真。这两种数据通道对增加DSP的数据吞吐量(这是把DSP应用到多媒体中所必需的),提高DSP的运算性能有很好的作用。
|