支持多种数据类型的单指令多数据算术单元的制作方法

文档序号:6397738阅读:141来源:国知局
专利名称:支持多种数据类型的单指令多数据算术单元的制作方法
技术领域
本发明涉及多媒体运算部件,尤其是一种算术单元。
背景技术
多媒体应用通常指针对多媒体对象如文本、音频、静态图像、二维图形、三维图形、动画以及全动态视频等的捕捉、存储、变换、传输、编解码等操作。多媒体信号,其最大特点反应在于小的数据位宽,大的数据吞吐量。单指令多数据(SMD)技术是指通过一个控制器同时控制两个或者多个平行的处理微元来实现多数据流运算,其并行性体现在能够利用一条指令实现对多个位宽较小的数据单元并行完成同一种操作,从而在时间上实现并行运算。现有的一个40位算术运算单元大多只能一次实现一个32位的运算或者I个16位的运算或者I个8位的运算,这样虽然实现简单,但是对多媒体应用的低数据位宽,大数据吞吐量特征没有很好的处理效率,通常认为采用SMD技术可以极大地提高相应多媒体处理应用程序的并行度,提高运算单元的多媒体处理性能,所以需要设计一种单指令多数据算术运算单元。由于视频、音频、图像的数据宽度不一样,而且随着多媒体技术的发展,可以预计在将来会有更多种的数据宽度需要支持,而当前的SIMD运算单元大多只支持一种数据宽度,或者8位,或者16位,对于多媒体应用的加速不具有普遍性,所以需要设计一种操作数长度可变的SIMD算术单元。

发明内容
为了克服已有算术单元的不能支持多种数据宽度、适用性较差的不足,本发明提供一种能有效支持多种数据宽度、适用性良好的支持多种数据类型的单指令多数据算术单
J Li ο本发明解决其技术问题所采用的技术方案是:一种支持多种数据类型的单指令多数据算术单元,所述算术单元包括N个原子运算阵列,N为任意正整数,每个原子运算阵列使用一个加法器实现多种位宽的数据的算术运算,所述原子运算阵列包括:操作数准备单元,用于依据输入的操作类型与数据类型信息,对输入的源操作数进行取反、符号位扩展、位宽扩展与进位扩展操作,输出中间操作数;加法运算单元,用于接收来自操作数准备单元的中间操作数,完成加法运算,输出加法运算结果;舍入操作单元,用于依据输入的操作类型与数据类型信息,对加法运算结果进行舍入操作,输出舍入操作结果;饱和操作单元,用于依据输入的操作类型与数据类型信息,对加法运算结果进行饱和操作,输出饱和操作结果;
结果封装单元,用于依据操作类型与数据类型信息,选择舍入操作单元或者饱和操作单元的输出结果,并依据数据类型信息,将中间结果封装为最终数据。进一步,所述算术单元支持有符号数与无符号数运算,支持不同元素宽度的运算,所述元素宽度包括字、半字或字节。优选的,所述操作数准备单元中,取反操作以元素为单位,依据操作类型对源操作数进行取反操作;若为加法运算,保持第一操作数与第二操作数不变;若为减法运算,保持第一操作数不变,对第二源操作数取反;若为绝对值运算则依据数据的符号位对负操作数取反,对正操作数保持不变。再进一步,所述操作数准备单元中,符号位扩展操作对第一源操作数和第二源操作数以元素为单位进行符号位扩展;对于有符号数,在每个元素的最高位扩展一位符号位,对于无符号数,在每个元素的最高位补一位O。更进一步,所述操作数准备单元中,位宽扩展操作依据操作类型与数据类型信息以元素为单位对第一源操作数或者第二源操作数扩展一倍位宽。所述操作数准备单元中,在第一操作数与第二操作数每个元素的最低位扩展一位进位扩展位,对于减法操作,进位扩展操作在第一源操作数和第二源操作数的每元素最低位扩展为1,与取反操作数准备一起构成对减数的取补码操作;对于加法运算,进位扩展操作在第一源操作数和第二源操作数的每元素最低位扩展为O。所述加法运算单元仅包含一个加法器,根据操作数的类型,对加法操作数的每个元素都增加一位精度扩展位,记录加法操作数的首位进位运算结果,得到一个扩展中间数据,从而隔离数据的进位,并在运算最后舍去进位扩展位,获得一个加法运算结果。所述舍入操作单元仅包含I个减法器,实现不同位宽的数据的舍入操作。所述饱和操作单元中,依据数据类型信息,以元素为单位利用加法运算单元结果和符号位扩展运算结果对加法运算结果进行饱和运算,表现为如果上溢出,取最大值,下溢出,取最小值,其它情况运算结果保持不变。所述结果封装单元中,根据指令类型信息,选取舍入操作单元或者饱和操作单元的结果,并依据数据类型信息,封装成为最终的运算结果。本发明的有益效果主要表现在:能有效支持多种数据宽度、适用性良好。


图1是单指令多数据(SMD)算术单元结构框图。图2是原子运算单元结构框图。图3是操作数准备单元结构框图。图4是8位操作数扩展示意图。图5是16位操作数扩展示意图。图6是32位操作数扩展示意图。图7是加法操作数准备示意图。图8是舍入操作单元流程示意图。图9是饱和操作单元流程示意图。
具体实施例方式下面结合附图对本发明作进一步描述。参照图1 图9,一种支持多种数据类型的单指令多数据算术单元,所述算术单元包括N个原子运算阵列(11 ),N为任意正整数,每个原子运算阵列使用一个加法器实现多种位宽的数据的算术运算,所述原子运算阵列(11)包括:操作数准备单元(21),用于依据输入的操作类型与数据类型信息,对输入的源操作数进行取反、符号位扩展、位宽扩展与进位扩展操作,输出中间操作数;加法运算单元(22),用于接收来自操作数准备单元的中间操作数,完成加法运算,输出加法运算结果;舍入操作单元(23),用于依据输入的操作类型与数据类型信息,对加法运算结果进行舍入操作,输出舍入操作结果;饱和操作单元(24),用于依据输入的操作类型与数据类型信息,对加法运算结果进行饱和操作,输出饱和操作结果;结果封装单元(25),用于依据操作类型与数据类型信息,选择舍入操作单元或者饱和操作单元的输出结果,并依据数据类型信息,将中间结果封装为最终数据。典型地,需要进行算术运算的2个32位操作数首先被送入操作数准备单元,产生相应的40位中间操作数,然后通过加法运算单元完成结果运算,再根据指令的类型选择舍入操作单元和饱和操作单元进行相应的操作,生成40位运算结果,最后将40位运算结果通过结果封装单元封装成最终结果。所述算术单元支持有符号数与无符号数运算,支持不同元素宽度的运算,支持的典型元素宽度为字、半字、字节。所述操作数准备单元(21)中,取反操作以元素为单位,依据操作类型对源操作数进行取反操作。若为加法运算,保持第一操作数与第二操作数不变;若为减法运算,保持第一操作数不变,对第二源操作数取反;若为绝对值运算则依据数据的符号位对负操作数取反,对正操作数保持不变。所述操作数准备单元(21)中,符号位扩展操作对第一源操作数和第二源操作数以元素为单位进行符号位扩展。对于有符号数,在每个元素的最高位扩展一位符号位,对于无符号数,在每个元素的最高位补一位O。所述操作数准备单元(21)中,位宽扩展操作依据操作类型与数据类型信息以元素为单位对第一源操作数或者第二源操作数扩展一倍位宽。所述操作数准备单元(21)中,在第一操作数与第二操作数每个元素的最低位扩展一位进位扩展位,对于减法操作,进位扩展操作在第一源操作数和第二源操作数的每元素最低位扩展为1,与取反操作数准备一起构成对减数的取补码操作;对于加法运算,进位扩展操作在第一源操作数和第二源操作数的每元素最低位扩展为O。所述加法运算单元(22)仅包含一个加法器,实现不同位宽长度的数据运算。典型地,通过一个44位加法器,可实现I个32位或者2个16位或者4个8位算术运算操作。其特征在于其根据操作数的类型,对加法操作数的每个元素都增加一位精度扩展位,记录加法操作数的首位进位运算结果,得到一个扩展中间数据,所述扩展中间数据为44位的数据,从而隔离数据的进位,并在运算最后舍去进位扩展位,获得一个40位加法运算结果。
所述舍入操作单元(23)仅包含I个减法器,可实现不同位宽的数据的舍入操作,典型地一个32位加法器,可实现I个32位或者2个16位或者4个8位数据的舍入运算。所述饱和操作单元(24)依据数据类型信息,以元素为单位利用加法运算单元结果和符号位扩展运算结果对加法运算结果进行饱和运算,表现为如果上溢出,取最大值,下溢出,取最小值,其它情况运算结果保持不变。所述结果封装单元(245)根据指令类型信息,选取舍入操作单元或者饱和操作单元的结果,并依据数据类型信息,封装成为最终的运算结果。典型地对于40位的运算结果,挑选I个32位或者2个16位或者4个8位运算结果,封装成最终的32位数据。本实施例中,为了实现对不同长度数据进行并行度高、数据吞吐量大的运算,提供了一种支持多种数据类型的基于原子运算阵列的单指令多数据算术单元。每个原子运算阵列包括五个主要的单元:操作数准备单元(21)、加法运算单元
(22)、舍入操作单元(23)、饱和操作单元(24)、结果封装单元(25)。每个原子运算阵列之间的运算过程和结果互不干扰和影响。简单的复制原子运算阵列就可以实现操作数的宽度扩展,从而对32位、64位、96位……数据进行算术运算,实现更宽的SMD操作。操作数准备单元对数据按32位进行封装,可以细分为取反操作单元和扩展操作单元。

取反操作单元(31)会根据指令类型以元素为单位将部分通过的数据进行取反操作。对于取绝对值操作,若源操作数为正数,则维持原数值不变。若源操作数为负数,则将源操作数取反。对于减法操作和需要通过减法实现的比较操作,取反操作单元维持第一源操作数不变,将第二源操作数通过取反操作为下一步获得减数的补码操作进行准备,通过取反操作的第二源操作数只需在后续操作中进行加一就可以实现补码的获得。扩展操作单元通过加入位宽扩展位(32)、符号扩展位(33)和进位扩展位(34)完成指令需求的扩展,并且使得该算术单元可以用一个40位加法器实现4个8位的加法或者2个16位的加法和I个32位的加法。本算术运算单元支持操作数位宽不一的算术运算操作。当操作数其中的元素位宽不一时,需要对较短的操作数进行位宽扩展(32),使得两操作数每元素位宽相同,进一步实现后续的运算。对于无符号数,位宽扩展补零(43) (53);对于有符号数,位宽扩展扩展符号位(44) (54),使得两操作数位宽相同。为了保持数据精度,防止进位信息丢失,我们对操作数进行符号位扩展(33):当操作数为无符号数时,我们对操作数在其每个元素的最高位前扩展一位零(41) (51) (61),当操作数为有符号数时,我们对操作数在其每个元素的最高位前扩展一位符号位(42) (52)(62)。为了防止相邻操作数之间的进位影响,我们还设计了进位扩展位(34):在操作数的每个元素最后加入一位。对于加法运算,我们统一扩展O (45) (55) (63);对于减法运算,我们统一扩展I (46) (56) (64),这样当被减数和减数最后通过加法器时,扩展位将对操作数产生I的进位,实现对减数进行加一操作,从而与前面提到的取反操作单元一起实现了对减数实现了取补码操作。4个8位操作数经过扩展后的结果如附图3所示,2个16位操作数经过扩展后的结果如附图4所示,I个32位操作数经过扩展后的结果如附图5所示。
加法运算单元主要包括一个44位加法器,完成操作数的加法运算。加法器从操作数准备单元获得操作数,对两操作数进行加法运算。为了保持精确度,我们对加法操作数的每个元素都增加一位精度扩展位零,记录加法操作数的首位进位运算结果,即加法器将生成一个44位的中间结果。对于4个8位加法运算,精度扩展位增加在操作数的第10位、第21位、第32位和第43位(71);对于2个16位加法运算,精度扩展位增加在操作数的第20位、第21位、第42位和第43位(72);对于I个32位加法运算,精度扩展位增加在操作数的第40位、第41位、第42位和第43位(73)。由于进位扩展位在加法运算结束后已经失去作用,可以舍去,所以每个加法运算单元也最终将得到一个40位的运算结果。由于精度扩展位、符号扩展位的存在,4个8位加法的运算结果保存为4个10位中间运算结果;2个16位加法的运算结果保存为2个20位中间运算结果;1个32位加法的运算结果保存为I个40位中间运算结果。这样加法器可以进行4个8位加法、2个16位加法、I个32位加法而不互相影响运算结果,并且可以保留运算的精确结果。加法运算单元除了加法器外还有截位结果处理单元和比较结果处理单元单元。对于需要取高半部分或者低半部分的操作,截位结果运算单元按照指令需求对运算结果进行截位运算。对于比较指令,比较结果单元根据加法运算单元每个元素运算结果的正负对指定寄存器进行置零或者置一操作。为了更好地支持小数运算,本运算单元还支持对运算结果取高半部分的操作。对于取高部分操作和取平均数操作,都存在一种出现小数部分的可能,于是需要一个对操作数舍入的过程。舍入操作单元主要按照指令需求,使用一个自增器对操作数进行舍入操作。对于取高半部分操作(82),舍入操作单元按照操作元素的位宽(16位或者32位)取出运算结果的高半部分(8位和16位)和各自的舍入位(对于16位运算,第7位为该数据的舍入位;对于32位运算,第15位为该数据的舍入位)合并,将这个数自增1,然后舍去最后一位作为最终的运算结果。对于取平均数运算(83),两操作数经过加法器后得到两数的和,舍入操作单元按照操作元素的位宽(8位或者16位或者32位)取出运算结果的数据部分和各自的舍入位合并将这个数自增1,然后舍去最后一位作为最终的运算结果。对于8位运算,运算结果的第I位到第8位、第11位到第18位、第21位到第28位、第31位到第38位是数据部分,其对应的舍入位分别为第O位、第10位、第20位、第30位。对于16位运算,运算结果的第I位到第16位、第21位到第36位是数据部分,其对应的舍入位分别为第O位、第20位。对于32位运算,运算结果的第I位到第32位是数据部分,其对应的舍入位为第O位。舍入单元除了要实现舍入操作外,还需要实现取绝对值操作。对于取绝对值指令
(81),正操作数则维持原值不变,对于负操作数通过对操作数的取反加一来实现。为了节省算术单元的面积和资源,该操作也通过舍入单元来实现。以元素为单位,若操作数为正数,则将操作数准备为数据部分,将舍入部分准备为O ;若操作数为正数,则将操作数的取反结果准备为数据部分,将舍入部分准备为I ;舍入操作单元按照操作微单元的长度(8位或者16位或者32位)取出准备后的数据部分和各自的舍入位合并将这个数自增1,然后舍去最后一位作为最终的运算结果。从而实现取绝对值操作。因为负数的表示范围大于正数,所以对于负数的最大值维持原值不变。
饱和操作单元通过加法运算单元获得的结果,按照指令需求对运算结果进行饱和操作。因为指令操作数的不同,饱和操作单元主要进行正数饱和运算、负数饱和运算以及无符号数饱和运算。饱和操作单元通过数据的符号扩展位和精度扩展位以及指令类型共同决定该运算是否需要进行饱和操作。以元素为单位,若一条非截位指令指令需要饱和操作,且操作数为无符号数,则只要符号扩展位和精度扩展位有一位为I就需要对运算结果进行饱和操作,饱和操作取无符号数的最大值。以元素为单位,若一条非截位指令需要饱和操作,且操作数为正数,则只要符号扩展位和精度扩展位有一位为I就需要对运算结果进行饱和操作,饱和操作取正数的最大值。以元素为单位,若一条非截位指令需要饱和操作,且操作数为负数,则只要符号扩展位和精度扩展位有一位为O就需要对运算结果进行饱和操作,饱和操作取负数的最小值。对于截取低位指令,以元素为单位,当判断该操作是否饱和时,不仅需要关心符号扩展位和精度扩展位,也需要关心被截去的数据;当操作数为无符号数或者有符号正数,则只要被截去数据、符号扩展位和精度扩展位有一位为I就需要对运算结果进行饱和操作;当操作数为负数,则只要被截去数据、符号扩展位和精度扩展位有一位为O就需要对运算结果进行饱和操作,饱和操作与非截位指令的饱和操作相同。结果封装单元根据指令类型,分别从舍入操作单元和饱和操作单元获得数据。绝对值运算、平均数运算、截位运算从舍入操作单元获得数据;加法(饱和)运算、减法(饱和)运算、比较运算、大小值选择运算从饱和操作单元获得数据。舍入操作单元和饱和操作单元传递给结果封装单元的数据为40位数据。当数据位宽为8位时,选取数据的第30位到第37位、第20位到第27位、第10位到第17位、第O位到第7位封装成为一个32位数据;当数据位宽为16位时,选取数据的第20位到第35位、第O位到第15位封装成为一个32位数据;当数据位宽为32位时,选取数据的第O位到第31位封装成为一个32位数据。这个32位结果就是运算的最终结果。
权利要求
1.一种支持多种数据类型的单指令多数据算术单元,其特征在于:所述算术单元包括N个原子运算阵列,N为任意正整数,每个原子运算阵列使用一个加法器实现多种位宽的数据的算术运算,所述原子运算阵列包括: 操作数准备单元,用于依据输入的操作类型与数据类型信息,对输入的源操作数进行取反、符号位扩展、位宽扩展与进位扩展操作,输出中间操作数; 加法运算单元,用于接收来自操作数准备单元的中间操作数,完成加法运算,输出加法运算结果; 舍入操作单元,用于依据输入的操作类型与数据类型信息,对加法运算结果进行舍入操作,输出舍入操作结果; 饱和操作单元,用于依据输入的操作类型与数据类型信息,对加法运算结果进行饱和操作,输出饱和操作结果; 结果封装单元,用于依据操作类型与数据类型信息,选择舍入操作单元或者饱和操作单元的输出结果,并依据数据类型信息,将中间结果封装为最终数据。
2.按权利要求1所述的支持多种数据类型的单指令多数据算术单元,其特征在于:所述算术单元支持有符号数与无符号数运算,支持不同元素宽度的运算,所述元素宽度包括字、半字或字节。
3.按权利要求1或2所述的支持多种数据类型的单指令多数据算术单元,其特征在于:所述操作数准备单元中,取反 操作以元素为单位,依据操作类型对源操作数进行取反操作;若为加法运算,保持第一操作数与第二操作数不变;若为减法运算,保持第一操作数不变,对第二源操作数取反;若为绝对值运算则依据数据的符号位对负操作数取反,对正操作数保持不变。
4.按权利要求1或2所述的支持多种数据类型的单指令多数据算术单元,其特征在于:所述操作数准备单元中,符号位扩展操作对第一源操作数和第二源操作数以元素为单位进行符号位扩展;对于有符号数,在每个元素的最高位扩展一位符号位,对于无符号数,在每个元素的最高位补一位O。
5.按权利要求1或2所述的支持多种数据类型的单指令多数据算术单元,其特征在于:所述操作数准备单元中,位宽扩展操作依据操作类型与数据类型信息以元素为单位对第一源操作数或者第二源操作数扩展一倍位宽。
6.按权利要求1或2所述的支持多种数据类型的单指令多数据算术单元,其特征在于:所述操作数准备单元中,在第一操作数与第二操作数每个元素的最低位扩展一位进位扩展位,对于减法操作,进位扩展操作在第一源操作数和第二源操作数的每元素最低位扩展为1,与取反操作数准备一起构成对减数的取补码操作;对于加法运算,进位扩展操作在第一源操作数和第二源操作数的每元素最低位扩展为O。
7.按权利要求1或2所述的支持多种数据类型的单指令多数据算术单元,其特征在于:所述加法运算单元仅包含一个加法器,根据操作数的类型,对加法操作数的每个元素都增加一位精度扩展位,记录加法操作数的首位进位运算结果,得到一个扩展中间数据,从而隔离数据的进位,并在运算最后舍去进位扩展位,获得一个加法运算结果。
8.按权利要求1或2所述的支持多种数据类型的单指令多数据算术单元,其特征在于:所述舍入操作单元仅包含I个减法器,实现不同位宽的数据的舍入操作。
9.按权利要求1或2所述的支持多种数据类型的单指令多数据算术单元,其特征在于:所述饱和操作单元中,依据数据类型信息,以元素为单位利用加法运算单元结果和符号位扩展运算结果对加法运算结果进行饱和运算,表现为如果上溢出,取最大值,下溢出,取最小值,其它情况运算结果保持不变。
10.按权利要求1或2所述的支持多种数据类型的单指令多数据算术单元,其特征在于:所述结果封装单元中,根据指令类型信息,选取舍入操作单元或者饱和操作单元的结果,并依据数据类型信息 ,封装成为最终的运算结果。
全文摘要
一种支持多种数据类型的单指令多数据算术单元,包括N个原子运算阵列,原子运算阵列包括操作数准备单元,用于依据输入的操作类型与数据类型信息,对输入的源操作数进行操作,输出中间操作数;加法运算单元,用于接收中间操作数,完成加法运算,输出加法运算结果;舍入操作单元,用于依据输入的操作类型与数据类型信息,对加法运算结果进行舍入操作,输出舍入操作结果;饱和操作单元,用于依据输入的操作类型与数据类型信息,对加法运算结果进行饱和操作,输出饱和操作结果;结果封装单元,用于选择舍入操作单元或者饱和操作单元的输出结果,依据数据类型信息将中间结果封装为最终数据。本发明能有效支持多种数据宽度、适用性良好。
文档编号G06F9/38GK103092571SQ201310009888
公开日2013年5月8日 申请日期2013年1月10日 优先权日2013年1月10日
发明者严晓浪, 仇径, 孟建熠, 陈志坚 申请人:浙江大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1