一种矢量排列电路及矢量处理器转让专利

申请号 : CN201510644158.7

文献号 : CN105260162B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 陈运必胡凯

申请人 : 华为技术有限公司

摘要 :

本发明提供一种矢量排列电路及矢量处理器,涉及计算机技术领域,能够使得交换矩阵应用在对位宽较大的矢量数据进行排列的场景中。该矢量排列电路包括分组单元,与其连接的m个选择单元,与m个选择单元连接的j个交换单元,每个交换单元连接m/j个选择单元,及与每个选择单元和每个交换单元分别连接的控制单元;分组单元将待排列的矢量数据分为n个矢量数据组并输出至m个选择单元;每个选择单元在控制单元的控制下对输入的第一矢量数据组选择,并将选择后的第二矢量数据组输出至与其连接的交换单元;每个交换单元在控制单元的控制下对输入的第二矢量数据组中的元素交换后输出;控制单元控制每个选择单元进行选择,控制每个交换单元进行交换。

权利要求 :

1.一种矢量排列电路,其特征在于,所述矢量排列电路包括分组单元,与所述分组单元连接的m个选择单元,与所述m个选择单元连接的j个交换单元,每个交换单元与m/j个选择单元连接,以及与每个选择单元和每个交换单元分别连接的控制单元,m、j和n均为大于1的整数,且m为j和n的整数倍;其中,所述分组单元,用于将待排列的矢量数据分为n个矢量数据组,并将所述n个矢量数据组分别输出至所述m个选择单元,其中,每个矢量数据组分别对应至少一个选择单元,且与每个矢量数据组对应的选择单元均不相同;

所述每个选择单元,用于在所述控制单元的控制下,对输入该选择单元的第一矢量数据组进行选择,并将选择后的第二矢量数据组输出至与该选择单元连接的交换单元,所述第一矢量数据组为所述n个矢量数据组中的一个矢量数据组;

所述每个交换单元,用于在所述控制单元的控制下,对输入该交换单元的所述第二矢量数据组中的元素进行交换后输出;

所述控制单元,用于控制所述每个选择单元对输入该选择单元的所述第一矢量数据组进行选择,以及控制所述每个交换单元对输入该交换单元的所述第二矢量数据组中的元素进行交换。

2.根据权利要求1所述的矢量排列电路,其特征在于,所述每个选择单元包括由所述控制单元分别独立控制的f个x选1选择器,x=y/n,y为所述待排列的矢量数据的位宽,f和x均为大于1的整数,且m*f是y的整数倍,当所述y/n不是整数时,将所述y/n按照向上取整或向下取整处理;其中,所述f个x选1选择器中的每个x选1选择器,用于在所述控制单元的控制下,从输入该x选1选择器的所述第一矢量数据组中选择一个元素,并将所述元素输出至与该x选1选择器连接的交换单元。

3.根据权利要求2所述的矢量排列电路,其特征在于,所述每个交换单元包括由所述控制单元分别独立控制的k个n选1选择器,所述k个n选1选择器中的每个n选1选择器分别与m/j个x选1选择器连接,所述m/j个x选1选择器分别为与该交换单元连接的m/j个选择单元中的x选1选择器,k*j是y的整数倍;其中,所述k个n选1选择器中的每个n选1选择器,用于在所述控制单元的控制下,从输入该n选1选择器的n个元素中选择一个元素输出。

4.根据权利要求1-3任一项所述的矢量排列电路,其特征在于,

m=2n,所述每个矢量数据组分别对应2个选择单元。

5.根据权利要求1-3任一项所述的矢量排列电路,其特征在于,

m=n,所述每个矢量数据组分别对应一个选择单元。

6.根据权利要求2或3所述的矢量排列电路,其特征在于,

所述控制单元,具体用于根据预设的控制逻辑,生成与所述每个x选1选择器分别对应的第一控制信号以及与每个n选1选择器分别对应的第二控制信号,并将所述第一控制信号输出至对应的x选1选择器以及将所述第二控制信号输出至对应的n选1选择器;

所述每个x选1选择器,具体用于根据输入至该x选1选择器的所述第一控制信号,从输入该x选1选择器的所述第一矢量数据组中选择一个元素,并将所述元素输出至与该x选1选择器连接的n选1选择器;

所述每个n选1选择器,具体用于根据输入至该n选1选择器的所述第二控制信号,从输入该n选1选择器的n个元素中选择一个元素输出。

7.一种矢量处理器,其特征在于,所述矢量处理器包括如权利要求1-6任一项所述的矢量排列电路。

说明书 :

一种矢量排列电路及矢量处理器

技术领域

[0001] 本发明涉及计算机技术领域,尤其涉及一种矢量排列电路及矢量处理器。

背景技术

[0002] 单指令多数据流(英文:single instruction multiple data,缩写:SIMD)技术是一种采用一个控制器来控制多个处理器,同时对一组数据(又称“矢量数据”)中的每一个元素分别执行相同的操作从而实现空间上的并行性的技术。现有的一些高性能矢量处理器中广泛集成了支持SIMD技术的SIMD单元。在多媒体数据、图形数据以及数字信号处理应用中,为了最大限度地提升数据并行处理效率,要求SIMD单元具有对矢量数据进行排列的功能。
[0003] 现有技术中,SIMD单元对矢量数据进行排列通常是通过交换矩阵(英文:crossbar)实现的。例如,如图1所示,为一种8×8的全路由交换矩阵的结构示意图。在图1中,输出端的每一路元素可能来自于输入端的任意一路元素,因此,使用全路由交换矩阵,结合控制器的控制逻辑可以对输入元素进行任意形式的排列。由于交换矩阵的实现逻辑非常复杂,且实现一个交换矩阵通常需要大量的布线及面积,因此现有矢量处理器中排列单元所使用的交换矩阵能够支持的矢量数据的位宽(即交换矩阵能够并行排列的元素的个数)仅为32×8比特=256比特;同时为了减少交换矩阵的布线及其所占用的面积,通常采用定制的晶体管级电路实现交换矩阵,这样可以获得比较规整的拓扑结构。
[0004] 然而,随着待排列的矢量数据的位宽不断增加,交换矩阵的实现将变得更加复杂,即可能需要更多的布线及面积,因此,即使采用上述定制的晶体管级电路也将难以实现交换矩阵,从而使得交换矩阵难以应用在对位宽较大的矢量数据进行排列的场景中。

发明内容

[0005] 本发明实施例提供一种矢量排列电路及矢量处理器,能够使得交换矩阵应用在对位宽较大的矢量数据进行排列的场景中。
[0006] 第一方面,本发明是实施例提供一种矢量排列电路,所述矢量排列电路包括分组单元,与所述分组单元连接的m个选择单元,与所述m个选择单元连接的j个交换单元,每个交换单元与m/j个选择单元连接,以及与每个选择单元和每个交换单元分别连接的控制单元,m、j和n均为大于1的整数,且m为j和n的整数倍;其中,
[0007] 所述分组单元,用于将待排列的矢量数据分为n个矢量数据组,并将所述n个矢量数据组分别输出至所述m个选择单元,其中,每个矢量数据组分别对应至少一个选择单元,且与每个矢量数据组对应的选择单元均不相同;
[0008] 所述每个选择单元,用于在所述控制单元的控制下,对输入该选择单元的第一矢量数据组进行选择,并将选择后的第二矢量数据组输出至与该选择单元连接的交换单元,所述第一矢量数据组为所述n个矢量数据组中的一个矢量数据组;
[0009] 所述每个交换单元,用于在所述控制单元的控制下,对输入该交换单元的所述第二矢量数据组中的元素进行交换后输出;
[0010] 所述控制单元,用于控制所述每个选择单元对输入该选择单元的所述第一矢量数据进行选择,以及控制所述每个交换单元对输入该交换单元的所述第二矢量数据组中的元素进行交换。
[0011] 结合第一方面,在第一方面的第一种可能的实现方式中,所述每个选择单元包括由所述控制单元分别独立控制的f个x选1选择器,x=y/n,y为所述待排列的矢量数据的位宽,f和x均为大于1的整数,且m*f是y的整数倍;其中,
[0012] 所述f个x选1选择器中的每个x选1选择器,用于在所述控制单元的控制下,从输入该x选1选择器的所述第一矢量数据组中选择一个元素,并将所述元素输出至与该x选1选择器连接的交换单元。
[0013] 结合第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,所述每个交换单元包括由所述控制单元分别独立控制的k个n选1选择器,所述k个n选1选择器中的每个n选1选择器分别与m/j个x选1选择器连接,所述m/j个x选1选择器分别为与该交换单元连接的m/j个选择单元中的x选1选择器,k*j是y的整数倍;其中,
[0014] 所述k个n选1选择器中的每个n选1选择器,用于在所述控制单元的控制下,从输入该n选1选择器的n个元素中选择一个元素输出。
[0015] 结合第一方面或第一方面的第一种可能的实现方式至第二种可能的实现方式中的任一种实现方式,在第一方面的第三种可能的实现方式中,
[0016] m=2n,所述每个矢量数据组分别对应2个选择单元。
[0017] 结合第一方面或第一方面的第一种可能的实现方式至第二种可能的实现方式中的任一种实现方式,在第一方面的第四种可能的实现方式中,
[0018] m=n,所述每个矢量数据组分别对应一个选择单元。
[0019] 结合第一方面的第一种可能的实现方式或第二种可能的实现方式,在第一方面的第五种可能的实现方式中,
[0020] 所述控制单元,具体用于根据预设的控制逻辑,生成与所述每个x选1选择器分别对应的第一控制信号以及与所述每个n选1选择器分别对应的第二控制信号,并将所述第一控制信号输出至对应的x选1选择器以及将所述第二控制信号输出至对应的n选1选择器;
[0021] 所述每个x选1选择器,具体用于根据输入至该x选1选择器的所述第一控制信号,从输入该x选1选择器的所述第一矢量数据组中选择一个元素,并将所述元素输出至与该x选1选择器连接的n选1选择器;
[0022] 所述每个n选1选择器,具体用于根据输入至该n选1选择器的所述第二控制信号,从输入该n选1选择器的n个元素中选择一个元素输出。
[0023] 第二方面,本发明实施例提供一种矢量处理器,所述矢量处理器包括上述第一方面或第一方面的第一种可能的实现方式至第五种可能的实现方式中的任一种实现方式所述的矢量排列电路。
[0024] 本发明实施例提供一种矢量排列电路及矢量处理器,该矢量排列电路包括分组单元,与分组单元连接的m个选择单元,与m个选择单元连接的j个交换单元,每个交换单元与m/j个选择单元连接,以及与每个选择单元和每个交换单元分别连接的控制单元,m、j和n均为大于1的整数,且m为j和n的整数倍;其中,分组单元,用于将待排列的矢量数据分为n个矢量数据组,并将n个矢量数据组分别输出至m个选择单元,其中,每个矢量数据组分别对应至少一个选择单元,且与每个矢量数据组对应的选择单元均不相同;每个选择单元,用于在控制单元的控制下,对输入该选择单元的第一矢量数据组进行选择,并将选择后的第二矢量数据组输出至与该选择单元连接的交换单元,第一矢量数据组为n个矢量数据组中的一个矢量数据组;每个交换单元,用于在控制单元的控制下,对输入该交换单元的第二矢量数据组中的元素进行交换后输出;控制单元,用于控制每个选择单元对输入该选择单元的第一矢量数据进行选择,以及控制每个交换单元对输入该交换单元的第二矢量数据组中的元素进行交换。
[0025] 基于上述技术方案,由于本发明实施例在选择单元对矢量数据组进行选择以及交换单元对矢量数据组中的元素进行交换之前,首先对待排列的矢量数据进行了分组,即将待排列的矢量数据分为n个矢量数据组,因此对于位宽较大的矢量数据,本发明实施例可以通过对其进行分组将其转换为位宽较小的矢量数据进行排列,从而本发明实施例提供的矢量排列电路仍然可以采用交换矩阵实现,进而能够使得交换矩阵应用在对位宽较大的矢量数据进行排列的场景中。

附图说明

[0026] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0027] 图1为现有技术提供的交换矩阵的示意图;
[0028] 图2为本发明实施例提供的矢量排列电路的结构示意图一;
[0029] 图3为本发明实施例提供的矢量排列电路的结构示意图二;
[0030] 图4为本发明实施例提供的矢量排列电路的结构示意图三;
[0031] 图5为本发明实施例提供的矢量排列电路可以实现的排列模式的示意图;
[0032] 图6为本发明实施例提供的矢量排列电路的结构示意图四;
[0033] 图7为本发明实施例提供的矢量排列电路的结构示意图五;
[0034] 图8为本发明实施例提供的矢量排列电路的结构示意图六;
[0035] 图9为本发明实施例提供的矢量排列电路的结构示意图七;
[0036] 图10为本发明实施例提供的矢量数据转换示意图一;
[0037] 图11为本发明实施例提供的矢量排列电路的结构示意图八;
[0038] 图12为本发明实施例提供的矢量数据转换示意图二。

具体实施方式

[0039] 本文中的术语“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系;例如,A和/或B可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中的字符“/”,一般表示前后关联的对象是一种“或”的关系;例如,A/B可以表示A或B。
[0040] 本发明的说明书和权利要求书中的术语“第一”和“第二”等是用于区别不同的对象,而不是用于描述对象的特定顺序。例如,第一矢量数据组和第二矢量数据组等是用于区别不同的矢量数据组,而不是用于描述矢量数据组的特征顺序。
[0041] 本发明的说明书和权利要求书中出现的“多个”,除非特别说明的情况外,其他均是指两个或者两个以上。例如多个选择器是指两个或者两个以上选择器。
[0042] 此外,本发明的描述中所提到的术语“包括”和“具有”以及它们的任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括其他没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
[0043] 以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、接口、技术之类的具体细节,以便透切理解本发明。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本发明。在其它情况中,省略对众所周知的装置、电路以及方法的详细说明,以免不必要的细节妨碍本发明的描述。
[0044] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0045] 本发明实施例提供的矢量排列电路及矢量处理器通常应用于对待排列的矢量数据进行排列的场景中。本发明实施例提供的矢量排列电路及矢量处理器,通过在对待排列的矢量数据进行排列前,首先对待排列的矢量数据进行分组,可以将位宽较大的矢量数据转换为位宽较小的矢量数据进行排列,从而本发明实施例提供的矢量排列电路及矢量处理器仍然可以采用交换矩阵实现,进而能够使得交换矩阵应用在对位宽较大的矢量数据进行排列的场景中。
[0046] 本发明的说明书和权利要求书中出现的用大写数字表示的数量与用小写数字表示相同数量的意思相同,在任何情况下均可互换。例如,“一个”均是指“1个”,即“一个”与“1个”的意思相同,在任何情况下均可互换;“两个”均是指“2个”,即“两个”与“2个”的意思相同,在任何情况下均可互换;“四个”均是指“4个”,即“四个”与“4个”的意思相同,在任何情况下均可互换。
[0047] 如图2所示,本发明实施例提供一种矢量排列电路1,所述矢量排列电路1包括分组单元10,与所述分组单元10连接的m个选择单元11,与所述m个选择单元11连接的j个交换单元12,每个交换单元12与m/j个选择单元11连接,以及与每个选择单元11和每个交换单元12分别连接的控制单元13,m、j和n均为大于1的整数,且m为j和n的整数倍。
[0048] 其中,所述分组单元10,用于将待排列的矢量数据分为n个矢量数据组,并将所述n个矢量数据组分别输出至所述m个选择单元11,其中,每个矢量数据组分别对应至少一个选择单元11,且与每个矢量数据组对应的选择单元11均不相同;
[0049] 所述每个选择单元11,用于在所述控制单元13的控制下,对输入该选择单元11的第一矢量数据组进行选择,并将选择后的第二矢量数据组输出至与该选择单元11连接的交换单元12,所述第一矢量数据组为所述n个矢量数据组中的一个矢量数据组;
[0050] 所述每个交换单元12,用于在所述控制单元13的控制下,对输入该交换单元12的所述第二矢量数据组中的元素进行交换后输出;
[0051] 所述控制单元13,用于控制所述每个选择单元11对输入该选择单元11的所述第一矢量数据进行选择,以及控制所述每个交换单元12对输入该交换单元12的所述第二矢量数据组中的元素进行交换。
[0052] 本发明实施例中,根据实际排列中的分组需求,n可以设置为2、3、4等整数。假设n为2,则本发明实施例的矢量排列电路可以将待排列的矢量数据分为两个矢量数据组,例如分为奇数矢量数据组和偶数矢量数据组;假设n为4,则本发明实施例的矢量排列电路可以将待排列的矢量数据分为四个矢量数据组,例如矢量数据组1、矢量数据组2、矢量数据组3和矢量数据组4,本发明不作具体限定。
[0053] 示例性的,假设待排列的矢量数据表示为{S63,S62,S61,……,S1,S0}。在本发明实施例提供的矢量排列电路中,当n为2时,可以将待排列的矢量数据分为奇数矢量数据组和偶数矢量数据组两个矢量数据组;其中,奇数矢量数据组表示为{S63,S61,……,S3,S1},偶数矢量数据组表示为{S62,S60,……,S2,S0}。当n为4时,可以将待排列的矢量数据分为矢量数据组1、矢量数据组2、矢量数据组3和矢量数据组4四个矢量数据组;其中,矢量数据组1表示为{S15,S14,……,S1,S0},矢量数据组2表示为{S31,S30,……,S17,S16},矢量数据组3表示为{S47,S46,……,S33,S32},矢量数据组4表示为{S63,S62,……,S49,S48}。
[0054] 本发明实施例中,假设待排列的矢量数据的位宽y为64,即待排列的矢量数据包括64个元素,若待排列的矢量数据分为n个矢量数据组,则每个矢量数据组包括y/n个元素。实际应用中,如果y/n不是整数,则可以将y/n按照向上取整或向下取整处理,例如,如果y=
64,n=3,则y/n可以取21或22。例如,可以使得3个矢量数据组中1个矢量数据组中包括22个元素,其他2个矢量数据组中包括21个元素;当然,优选的,为了方便实现,可以使得3个矢量数据组中均包括22个元素,其中,这3个矢量数据组中不够分组的元素可以用0补齐。
[0055] 示例性的,假设上述待排列的矢量数据{S63,S62,S61,……,S1,S0}被分为3组,分别为矢量数据组1、矢量数据组2和矢量数据组3;则矢量数据组1可以表示为{S20,S19,……,S1,S0},矢量数据组2可以表示为{S41,S40,……,S22,S21},矢量数据组3可以表示为{S63,S62,……,S43,S42};或者矢量数据组1可以表示为{0,S20,S19,……,S1,S0},矢量数据组2可以表示为{0,S41,S40,……,S22,S21},矢量数据组3可以表示为{S63,S62,……,S43,S42}。
[0056] 需要说明的是,上述对待排列的矢量数据进行分组的方式以及分组的数量仅是示例性的说明,本发明包括但不限于上述列举的分组的方式及分组的数量,即其他任何能够满足实际需求的对待排列的矢量数据进行分组的方式及分组的数量均在本发明的保护范围之内。
[0057] 本发明实施例提供的矢量排列电路,由于在选择单元对矢量数据组进行选择以及交换单元对矢量数据组中的元素进行交换之前,首先对待排列的矢量数据进行了分组,即将待排列的矢量数据分为n个矢量数据组,因此对于位宽较大的矢量数据,本发明实施例可以通过对其进行分组将其转换为位宽较小的矢量数据进行排列,从而本发明实施例提供的矢量排列电路仍然可以采用交换矩阵实现,进而能够使得交换矩阵应用在对位宽较大的矢量数据进行排列的场景中。
[0058] 可选的,上述如图2所示的分组单元可以由能够对待排列的矢量数据进行分组的任意部件实现,例如可以通过固定布线实现,或者也可以通过多个选择器实现,本发明不作具体限定。
[0059] 实际应用中,当本发明实施例提供的矢量排列电路应用的场景需要分组的分组模式(包括分组数量和分组形式等,例如按照元素的序号分为奇数组和偶数组两组)固定不变时,优选的,为了实现方便,本发明实施例中的分组单元可以通过固定布线实现。具体的,本发明实施例中,可以通过固定的布线将待排列的矢量数据中的各个元素输入到各个相应的选择单元。例如,假设待排列的矢量数据的位宽为64,即该待排列的矢量数据包括64个元素;且需要按照各个元素的序号,将该待排列的矢量数据分为奇数矢量数据组和偶数矢量数据组,因此可以通过固定的布线将奇数序号的各个元素输入到对应的选择单元,并通过固定的布线将偶数序号的各个元素输入到对应的选择单元。
[0060] 进一步地,本发明实施例中,由于待排列的矢量数据由寄存器输出,因此可以直接在寄存器的各个奇数输出引脚与相应的选择单元之间设置固定布线,并在寄存器的各个偶数输出引脚与相应的选择单元之间设置固定布线,从而使得待排列的矢量数据中,奇数序号的元素和偶数序号的元素分别输入到不同的选择单元中,进而实现对待排列的矢量数据的分组。具体的实现方式,可参见下述实例一、实例二和实例三中的各个附图,此处不再赘述。
[0061] 当本发明实施例提供的矢量排列电路应用的场景需要分组的分组模式(包括分组数量和分组形式等,例如按照元素的序号分为奇数组和偶数组两组)变化时,本发明实施例中的分组单元可以通过多个选择器实现,其中,多个选择器的选择逻辑由控制单元控制。具体的,本发明实施例中,可以通过多个选择器对待排列的矢量数据中的各个元素进行选择,并将选择后的各个元素输入到各个相应的选择单元。例如,假设待排列的矢量数据的位宽为64,即该待排列的矢量数据包括64个元素;且需要按照各个元素的序号,将该待排列的矢量数据分为奇数矢量数据组和偶数矢量数据组,因此,可以由多个选择器分别在控制单元的控制下,对该待排列的矢量数据中的各个元素进行选择,以将该待排列的矢量数据分为奇数矢量数据组和偶数矢量数据组,并将偶数序号的各个元素输入到对应的选择单元。分组单元通过多个选择器实现时,寄存器与多个选择器之间的连接可根据具体分组模式进行设置,其连接原理与上述固定布线的连接原理类似,此处不再赘述。
[0062] 可选的,如图3所述(由于每个选择单元11均相同,因此图3仅示意出一个选择单元11),本发明实施例中,所述每个选择单元11包括由所述控制单元13分别独立控制的f个x选
1选择器110,x=y/n,y为所述待排列的矢量数据的位宽,f和x均为大于1的整数,且m*f是y的整数倍。
[0063] 其中,所述f个x选1选择器110中的每个x选1选择器110,用于在所述控制单元13的控制下,从输入该x选1选择器110的所述第一矢量数据组中选择一个元素,并将所述元素输出至与该x选1选择器110连接的交换单元。
[0064] 本发明实施例中,待排列的矢量数据的位宽是指待排列的矢量数据中需要并行排列的元素的个数。示例性的,假设待排列的矢量数据的位宽为64,则可以理解为待排列的矢量数据中需要并行排列的元素的个数为64,即需要并行对64个元素进行排列。举例来说,上述待排列的矢量数据{S63,S62,S61,……,S1,S0}中,待排列的矢量数据的位宽为64,则可以理解为该矢量数据中需要并行排列的元素的个数为64,例如S63-S0,即需要并行对这64个元素进行排列。
[0065] 本发明实施例提供的矢量排列电路中,x=y/n可以表示x的取值与n的取值和y的取值有关,且m*f是y的整数倍可以表示f的取值与m的取值和y的取值有关。例如,假设y为64,n为2,m为4,则x=64/2=32,f=y/m=64/4=16的整数倍,假设f=16的两倍,即f=32,在这种情况下,每个选择单元包括32个32选1选择器;假设y为64,n为4,则x=64/4=16,m为
4,f=y/m=64/4=16的整数倍,假设f=16的两倍,即f=32,在这种情况下,每个选择单元包括32个16选1选择器。
[0066] 可选的,上述x选1选择器可以为2选1选择器、3选1选择器、4选1选择器、……、16选1选择器、……或者32选1选择器等。以x选1选择器为4选1选择器、16选1选择器或者32选1选择器为例,其中,4选1选择器可以由多个2选1选择器组成;16选1选择器和32选1选择器均可以由多个2选1选择器或者多个4选1选择器组成。
[0067] 其中,上述每个x选1选择器均可以在控制单元的控制下,对输入该x选1选择器的第一矢量数据组中的x个元素(第一矢量数据组的元素个数为y/n,即x)进行选择,并将最终选择的一个元素输出,那么x个x选1选择器分别对第一矢量数据组中的x个元素进行选择后得到第二矢量数据组(一个x选1选择器选择一个元素,那么x个x选1选择器选择x个元素)。可以理解,本发明实施例中,第一矢量数据组经过x个x选1选择器后得到的第二矢量数据组仍然包括x个元素,但是由于每个x选1选择器分别对第一矢量数据组进行了选择,因此第二矢量数据组中的x个元素的排列顺序与第一矢量数据组中的x个元素的排列顺序可能并不相同,从而通过本发明实施例提供的矢量排列电路可以对待排列的矢量数据进行排列。
[0068] 示例性的,假设待排列的矢量数据为{S5,S4,S3,S2,S1,S0},通过本发明实施例提供的矢量排列电路对待排列的矢量数据进行分组、选择及交换后,该待排列的矢量数据可能变为{S3,S5,S2,S4,S0,S1},即通过本发明实施例提供的矢量排列电路可以对待排列的矢量数据进行排列。
[0069] 需要说明的是,本发明实施例中,控制单元对选择单元的控制作用可以根据预设的控制逻辑来确定。例如,假设需对矢量数据{S31,S30,……,S1,S0}进行排列,则可以按照需要得到的排列结果预设控制单元的控制逻辑。示例性的,假设矢量数据{S31,S30,……,S1,S0}中的元素S31>S30>……>S1>S0,且设置的32个32选1选择器从左到右依次为A31,A30,……,A1,A0,则如果需要将矢量数据{S31,S30,……,S1,S0}中的元素按照从小到大的顺序重新排列,得到{S0,S1,……,S30,S31},则可以预设控制单元的控制逻辑为:控制A31输出S0,控制A30输出S1,……,控制A1输出S30,以及控制A0输出S31,从而控制单元通过分别独立控制32个32选1选择器,使得该32个32选1选择器最终输出{S0,S1,……,S30,S31}。
[0070] 可选的,如图4所示(由于每个交换单元12均相同,因此图4仅示意出一个交换单元12),本发明实施例中,所述每个交换单元12包括由所述控制单元13分别独立控制的k个n选
1选择器120,所述k个n选1选择器120中的每个n选1选择器120分别与m/j个x选1选择器110连接,所述m/j个x选1选择器110分别为与该交换单元12连接的m/j个选择单元11中的x选1选择器110,k*j是y的整数倍。
[0071] 其中,所述k个n选1选择器120中的每个n选1选择器120,用于在所述控制单元13的控制下,从输入该n选1选择器120的n个元素中选择一个元素输出。
[0072] 需要说明的是,为了更加清楚、完整地说明本发明实施例提供的矢量排列电路,且由于每个选择单元11、每个交换单元12以及每个n选1选择器120与m/j个x选1选择器110的连接方式均相同,因此上述附图3和附图4仅以一个选择单元11、一个交换单元12以及一个n选1选择器120与m/j个x选1选择器110的连接方式进行示例性的说明,对于其他选择单元11、其他交换单元12以及其他n选1选择器120与m/j个x选1选择器110的连接方式均可参见上述图3和图4,此处不再赘述。
[0073] 可选的,本发明实施例中,所述控制单元,具体用于根据预设的控制逻辑,生成与所述每个x选1选择器分别对应的第一控制信号以及与所述每个n选1选择器分别对应的第二控制信号,并将所述第一控制信号输出至对应的x选1选择器以及将所述第二控制信号输出至对应的n选1选择器;
[0074] 所述每个x选1选择器,具体用于根据输入至该x选1选择器的所述第一控制信号,从输入该x选1选择器的所述第一矢量数据组中选择一个元素,并将所述元素输出至与该x选1选择器连接的n选1选择器;
[0075] 所述每个n选1选择器,具体用于根据输入至该n选1选择器的所述第二控制信号,从输入该n选1选择器的n个元素中选择一个元素输出。
[0076] 可选的,本发明实施例提供的矢量排列电路可以实现多种排列模式。为了更加清楚、完整地说明本发明实施例提供的矢量排列电路能够实现多种排列模式,下面分别以三种常用的排列模式为例对本发明实施例提供的矢量排列电路进行详细地说明。
[0077] 如图5所示,为三种常用的排列模式的示意图。图5中的(a)是通用排列模式的示意图,在图5中的(a)中,输入一个矢量数据VS(VS的位宽为64,即VS包括64个并行排列的元素),经过矢量排列电路B1后输出一个矢量数据VY(VY的位宽为64,即VY包括64个元素,且VY中元素的排列顺序可能与VS中元素的排列顺序不同),且输出的矢量数据VY中的每个元素都来自于输入的矢量数据VS中的任意位置的元素;图5中的(b)是支持自适应滤波器查表的排列模式的示意图,在图5中的(b)中,输入一个矢量数据VS(VS的位宽为64,即VS包括64个并行排列的元素),经过矢量排列电路B2后输出两个矢量数据VY和VZ(VY和VZ的位宽均为64,即VY和VZ均包括64个元素,且VY和VZ中元素的排列顺序可能与VS中元素的排列顺序不同),且输出的两个矢量数据VY和VZ中对应位置的元素为输入矢量数据VS中相邻的两个元素;图5中的(c)是支持有限长单位冲激响应(英文:finite impulse response,缩写:FIR)滤波器矢量延时排列模式的示意图,在图5中的(c)中,输入两个矢量数据VS和VR(VS和VR的位宽均为64,即VS和VR均包括64个并行排列的元素),经过矢量排列电路B3后输出两个矢量数据片段VY和VZ(VY和VZ的位宽均为64,即VY和VZ均包括64个元素,且VY和VZ中元素的排列顺序可能与VS和VR中元素的排列顺序不同),且输出的两个矢量片段VY和VZ为输入的两个矢量数据VS和VR拼接后的两个独立并连续的矢量片段。
[0078] 对于上述如图5所示的三种常用的排列模式,由于这三种排列模式的排列需求均不相同,因此在这三种模式中,交换单元、交换单元与选择单元的连接方式,以及控制单元针对选择单元中的每个x选1选择器的第一控制信号和针对交换单元中的每个n选1选择器的第二控制信号均不相同。下面分别以一组输出(图5中的(a)一组输出包括一个输出元素,这一个输出元素为一路输出,例如Y0为一路输出;图5中的(b)一组输出包括两个输出元素,这两个输出元素为一路输出,例如Y0和Z0为一路输出;图5中的(c)一组输出包括两个输出元素,这两个输出元素为两路输出,例如Y0和Y1为两路输出)为例,对这三种排列模式中,交换单元、交换单元与选择单元的连接方式,以及控制单元针对选择单元中的每个x选1选择器的第一控制信号和针对交换单元中的每个n选1选择器的第二控制信号进行详细地说明。
[0079] 进一步地,由于图5中的(b)和图5中的(c)所示的排列模式,每一组输出均包括两个输出元素,因此在图5中的(b)和图5中的(c)所示的排列模式中,交换单元、交换单元与选择单元的连接方式,以及控制单元针对选择单元中的每个x选1选择器的第一控制信号和针对交换单元中的每个n选1选择器的第二控制信号均类似。
[0080] (1)针对图5中的(a)所示的排列模式
[0081] 在图5中的(a)所示的排列模式中,每一组输出(包括一个输出元素)对应2个x选1选择器和1个n选1选择器。如图6所示,为控制单元13对2个x选1选择器110和1个n选1选择器120的控制示意图。图6中仅以控制单元13控制2个x选1选择器110和1个n选1选择器120为例,对交换单元、交换单元与选择单元的连接方式,以及控制单元针对选择单元中的每个x选1选择器的第一控制信号和针对交换单元中的每个n选1选择器的第二控制信号进行示例性的说明。
[0082] 示例性的,假设待排列的矢量数据为{S63,S62,……,S1,S0},且将该矢量数据分为奇数矢量数据组和偶数矢量数据组两个矢量数据组,则奇数矢量数据组为{S63,S61,……,S3,S1},偶数矢量数据组为{S62,S60,……,S2,S0},上述如图6所示的x选1选择器为32选1选择器,n选1选择器为2选1选择器。分别将这两个矢量数据组输入2个32选1选择器,使得这2个32选1选择器中的每个32选1选择器分别在控制单元生成的第一控制信号的控制作用下,从输入该32选1选择器的矢量数据组中选择一个元素输出到与该32选1选择器连接的2选1选择器,再由2选1选择器在控制单元生成的第二控制信号的控制作用下,从输入该2选1选择器的两个元素中选择一个元素输出。
[0083] 举例来说,在图6中,假设控制单元的控制逻辑为第pi个输入元素Spi从第i路输出,第i路输出表示为Yi(输出Spi);因为pi既可以是奇数,也可以是偶数,所以Yi可能来自奇数序号的元素或者偶数序号的元素。例如,当pi=30时,如图6所示的2个32选1选择器中,输入奇数矢量数据组的32选1选择器需从该奇数矢量数据组中选择S31输出,输入偶数矢量数据组的32选1选择器需从该偶数矢量数据组中选择S30输出,这2个32选1选择器分别将S30和S31输出到与各自连接的2选1选择器,由该2选1选择器从S30和S31中选择一个输出。当pi=31时,如图6所示的2个32选1选择器中,输入奇数矢量数据组的32选1选择器需从该奇数矢量数据组中选择S31输出,输入偶数矢量数据组的32选1选择器需从该偶数矢量数据组中选择S30输出,这2个32选1选择器分别将S30和S31输出到与各自连接的2选1选择器,由该2选1选择器从S30和S31中选择一个输出。可见,在这种排列模式中,无论pi是奇数还是偶数,控制单元的控制逻辑均相同。
[0084] 基于如图6所示的本实施例中控制单元的控制逻辑,为了保证本实施例满足上述图5中的(a)的排列模式,上述控制单元13针对选择单元11中的每个32选1选择器的第一控制信号和控制单元13针对交换单元12中的每个2选1选择器的第二控制信号具体可以设置为:
[0085] 控制单元针对这2个32选1选择器的第一控制信号c1均为floor(pi/2),floor(pi/2)表示pi/2向下取整函数;控制单元针对2选1选择器的第二控制信号c2为取pi的最低一个比特。
[0086] 其中,由于本实施例中pi的取值有64个,因此可以采用6个比特来表示pi,所以floor(pi/2)具体可以通过取pi的高5个比特实现。例如,pi为011110(即pi为30,Spi为S30),则floor(pi/2)可以通过取pi的高5个比特01111实现,即floor(pi/2)为15,也就是c1为15;相应的,c2可以通过取pi的最低一个比特0实现(假设当c2为0时,2选1选择器选择偶数序号的元素输出;当c2为1时,2选1选择器选择奇数序号的元素输出)。本实施例中,由于c1为15,因此2个32选1选择器中的每个32选1选择器分别从输入该32选1选择器的第一矢量数据组中选择第15个元素输出到2选1选择器,例如输入偶数矢量数据组的32选1选择器选择序号为30的元素S30输出到2选1选择器,输入奇数矢量数据组的32选1选择器选择序号为31的元素S31输出到2选1选择器;且由于c2为0,因此2选1选择器从S30和S31中选择偶数序号的元素S30输出,即第i路输出Yi来自偶数矢量数据组中的第15个元素S30。
[0087] (2)针对图5中的(b)和图5中的(c)所示的排列模式
[0088] 在图5中的(b)和图5中的(c)所示的排列模式中,每一组输出(包括两个输出元素)对应2个x选1选择器和2个n选1选择器(其中,2个n选1选择器形成1个2xn的交换矩阵。如图7所示,为控制单元13对2个x选1选择器110和1个2xn的交换矩阵(包括2个n选1选择器120)的控制示意图。图7中仅以控制单元13控制2个x选1选择器110和2个n选1选择器120为例,对交换单元、交换单元与选择单元的连接方式,以及控制单元针对选择单元中的每个x选1选择器的第一控制信号和针对交换单元中的每个n选1选择器的第二控制信号进行示例性的说明。
[0089] 示例性的,假设待排列的矢量数据为{S63,S62,……,S1,S0},且将该矢量数据分为奇数矢量数据组和偶数矢量数据组两个矢量数据组,则奇数矢量数据组为{S63,S61,……,S3,S1},偶数矢量数据组为{S62,S60,……,S2,S0},上述如图7所示的x选1选择器为32选1选择器,n选1选择器为2选1选择器,图7中的2个2选1选择器形成1个2x2的交换矩阵。分别将这两个矢量数据组输入2个32选1选择器,使得这2个32选1选择器中的每个32选1选择器分别在控制单元生成的第一控制信号的控制作用下,从输入该32选1选择器的矢量数据组中选择一个元素输出到与该32选1选择器连接的2个2选1选择器,再由这2个2选1选择器中的每个2选1选择器分别在控制单元生成的第二控制信号的控制作用下,从输入该2选1选择器的两个元素中选择一个元素输出。
[0090] 举例来说,在图7中,假设控制单元的控制逻辑为第pi个输入元素Spi从第i路输出,第i路输出表示为Yi(输出Spi);第pi+1个输入元素Spi+1从第i+1路输出,第i+1路输出表示为Yi+1(输出Spi+1)。因为Spi和Spi+1为两个相邻的输入元素,所以pi和pi+1肯定一个是奇数,一个是偶数,这样可以得知Yi和Yi+1中的奇数序号的元素来自Spi和Spi+1中的奇数序号的元素,Yi和Yi+1中的偶数序号的元素来自Spi和Spi+1中的偶数序号的元素。例如,当pi=30时,如图7所示的2个32选1选择器中,输入奇数矢量数据组的32选1选择器需从该奇数矢量数据组中选择S31输出,输入偶数矢量数据组的32选1选择器需从该偶数矢量数据组中选择S30输出,这2个32选1选择器分别将S30和S31输出到与各自连接的2个2选1选择器,由这2个2选1选择器分别从S30和S31中选择一个输出,这种情况下,由于最终输出的是{S31,S30},所以也可以理解为这2个2选1选择器对S30和S31直接透传输出。当pi=31时,如图7所示的2个32选1选择器中,输入奇数矢量数据组的32选1选择器需从该奇数矢量数据组中选择S31输出,输入偶数矢量数据组的32选1选择器需从该偶数矢量数据组中选择S32输出,这2个32选1选择器分别将S31和S32输出到与各自连接的2个2选1选择器,由这2个2选1选择器分别从S31和S32中选择一个元素输出,这种情况下,为了避免这2个2选1选择器最终输出{S31,S32},所以需要这2个2选1选择器从S31和S32中选择一个元素输出时改变这两个元素的输出位置,即保证这2个2选1选择器最终输出{S32,S31},这种情况也可以理解为这2个2选1选择器对S31和S32做了交换后再输出。
[0091] 需要说明的是,本实施例中,在控制单元对选择单元的控制逻辑下,可能会存在选择单元的某一组输出中,相邻两个元素之间的输出顺序相反的情况,例如需要输出{S32,S31},但是通过上述选择单元的选择后得到的是{S31,S32},那么就需要再将{S31,S32}分别输入到2个2选1选择器中,使得这2个2选1选择器分别从S31和S32这两个元素中选择一个元素输出,最终输出{S32,S31}。具体的,如图7所示,从左到右,第一个2选1选择器120选择S32输出,第二个2选1选择器120选择S31输出,从而这2个2选1选择器120可以实现对{S31,S32}中的两个元素进行交换的功能。
[0092] 当然,本领域技术人员可以理解,如果需要输出{S32,S31},而通过上述选择单元的选择后得到的正是{S32,S31},那么即使将{S32,S31}分别输入到2个2选1选择器中,也可以使得这2个2选1选择器分别从S32和S31这两个元素中选择一个元素输出,最终输出{S32,S31}。具体的,如图7所示,从左到右,第一个2选1选择器120选择S32输出,第二个2选1选择器120选择S31输出,从而这2个2选1选择器可以实现对{S32,S31}中的两个元素进行透传的功能。
[0093] 本发明实施例中,无论交换单元对输入该交换单元的第二矢量数据组中的各个元素直接透传输出,还是对第二矢量数据组中的某些元素交换后输出,均可以认为该交换单元对该第二矢量数据组进行了交换。
[0094] 进一步地,上述交换单元对输入该交换单元的第二矢量数据组中的各个元素直接透传输出,或者对第二矢量数据组中的某些元素交换后输出均可以由控制单元控制。具体的,如果控制单元判断无需对输入该交换单元的第二矢量数据组中的各个元素进行交换,则控制单元可以控制交换单元对第二矢量数据组中的各个元素直接透传输出;如果控制单元判断需要对输入该交换单元的第二矢量数据组中的某些元素进行交换,则控制单元可以控制交换单元对第二矢量数据组中的这些元素交换后输出。
[0095] 上述仅是示例性的对本发明实施例提供的矢量排列电路中的选择单元、交换单元以及控制单元进行说明。在实际应用中,可以根据具体的矢量数据的排列模式以及对矢量数据的分组进行适应性的调整和/或变换,本发明不作限定。
[0096] 另外,本实施例中,当pi=63时,pi+1=64,这种情况下,由于已经超出了待排列的矢量数据的位宽(即已经超出了待排列的矢量数据中元素的序号),因此本实施例可以采用环回的方式或者输出相同元素的方式进行处理。例如,若本实施例采用环回的方式处理,则可以将pi+1=64转换为pi+1=0,如此可保证2个2选1选择器最终输出{S63,S0};若本实施例采用输出相同元素的方式进行处理,则可以将pi+1=64转换为pi+1=63,如此可以保证2个2选1选择器最终输出{S63,S63}。
[0097] 基于如图7所示的本实施例中控制单元的控制逻辑,为了保证本实施例满足上述图5中的(b)和图5中的(c)的排列模式,上述控制单元13针对选择单元11中的每个32选1选择器的第一控制信号和控制单元13针对交换单元12中的每个2选1选择器的第二控制信号具体可以设置为:
[0098] (1)当pi为偶数时,控制单元针对输入奇数矢量数据组的32选1选择器的第一控制信号c3为floor(pi/2),控制单元针对输入偶数矢量数据组的32选1选择器的第一控制信号c3为floor(pi/2),控制单元针对每个2x2的交换矩阵中的一个2选1选择器的第二控制信号c4为0(表示选择偶数序号的元素输出),针对每个2x2的交换矩阵中的另一个2选1选择器的第二控制信号c4为1(表示选择奇数序号的元素输出)。
[0099] (2)当pi为奇数时,控制单元针对输入奇数矢量数据组的32选1选择器的第一控制信号c3为floor(pi/2),控制单元针对输入偶数矢量数据组的32选1选择器的第一控制信号c3为floor(pi/2)+1,控制单元针对每个2x2的交换矩阵中的一个2选1选择器的第二控制信号c4为1(表示选择奇数序号的元素输出),针对每个2x2的交换矩阵中的另一个2选1选择器的第二控制信号c4为0(表示选择偶数序号的元素输出)。
[0100] 其中,当上述floor(pi/2)+1大于32时,将floor(pi/2)+1转换为0,即选择序号为0的元素输出。
[0101] 具体的,由于本实施例中pi的取值有64个,因此可以采用6个比特来表示pi,所以floor(pi/2)具体可以通过取pi的高5个比特实现。相应的,c4可以通过取pi的最低一个比特0实现(假设当c4为0时,2选1选择器选择偶数序号的元素输出;当c4为1时,2选1选择器选择奇数序号的元素输出)。对于floor(pi/2)的举例可以参见上述如图6所示的实施例中对于floor(pi/2)的举例,对于c4的举例可以参见上述如图6所示的实施例中对于c2的举例,此处不再赘述。
[0102] 需要说明的是,上述图6和图7仅是以一组输出为例进行示例性的说明,本发明实施例中,待排列的矢量数据中的每一组输出均可以按照如图6和图7所示的电路实现,此处不再赘述。
[0103] 可选的,针对上述如图5所示的三种排列模式,本发明实施例提供的矢量排列电路中,选择单元的个数m与分组单元对待排列的矢量数据分组后的矢量数据组的个数n之间存在如下两种对应关系。
[0104] (1)针对上述图5中的(a)和(b),m=2n,n个矢量数据组中的每个矢量数据组分别对应2个选择单元。
[0105] (2)针对上述图5中的(c),m=n,n个矢量数据组中的每个矢量数据组分别对应一个选择单元。
[0106] 下面分别以上述如图5所示的三种排列模式为例,对本发明实施例提供的矢量排列电路进行示例性的说明。
[0107] 实例一
[0108] 针对上述图5中的(a),以待排列的矢量数据的位宽为64,且将待排列的矢量数据分为奇数矢量数据组和偶数矢量数据组为例,本发明实施例提供的矢量排列电路如图8所示。
[0109] 在图8中,首先由分组单元10将寄存器输入到分组单元10的待排列的矢量数据{S63,S62,……,S1,S0}(图8中表示为20)按照元素的奇数序号和偶数序号进行分组,得到奇数矢量数据组(图8中表示为21)和偶数矢量数据组(图8中表示为22),其中,21为{S63,S61,……,S3,S1},22为{S62,S60,……,S2,S0},21和22均包括32个元素。
[0110] 由于图8中将待排列的矢量数据分为两个矢量数据组,因此选择单元11的个数m=2n=2×2=4(本实施例中,一个矢量数据组对应两个选择单元11),即图8中有4个选择单元
11,分别表示为mux0、mux1、mux2和mux3,按照上述如图6所示的电路原理,使得偶数矢量数据组同时输入到选择单元mux0和mux2,奇数矢量数据组同时输入到选择单元mux1和mux3。
如图8所示,每个选择单元11为一个32x32的交换矩阵,其由32个32选1选择器组成;由于每个32选1选择器都由控制单元13独立控制,因此每个选择单元11均需要32个独立的控制信号(图8中控制单元13对每个选择单元11的32个控制信号用加粗的实线表示,可以理解为控制单元13对每个32x32的交换矩阵中的32个32选1选择器分别独立控制)。在图8中,每个选择单元11(即32x32的交换矩阵)均可以在控制单元13的控制信号的作用下,从输入该选择单元11的矢量数据组中选择32个元素输出。其中,图8中,控制单元13对选择单元mux0和mux1中的各个对应的32选1选择器均输出相同的第一控制信号,对选择单元mux2和mux3中的各个对应的32选1选择器也输出相同的第一控制信号,具体的,第一控制信号的具体实现可参见上述如图6所示的实施例中对第一控制信号的相关描述,此处不再赘述。
[0111] 需要说明的是,本实施例中,上述如图6所示的2个32选1选择器分别为两个选择单元11中的32选1选择器。例如,一个32选1选择器为选择单元mux0中的一个32选1选择器,另一个32选1选择器为选择单元mux1中相应位置的一个32选1选择器。其中,相应位置可以理解为这2个32选1选择器从输入各自的矢量数据组中选择相同位置的元素,例如位于mux0中的32选1选择器从偶数矢量数据组中选择第15个元素输出,位于mux1中的32选1选择器也从奇数矢量数据组中选择第15个元素输出。
[0112] 可以理解,在图8中,选择单元mux0和mux1组合起来对输入各自的矢量数据组进行选择后可以得到低32个元素,且mux2和mux3组合起来对输入各自的矢量数据组进行选择后可以得到高32个元素,其中,低32个元素和高32个元素具体是待排列的矢量数据中的哪些元素由具体的控制逻辑决定。
[0113] 如图8所示,选择单元11选择后的矢量数据分别对应输入至交换单元12,由交换单元12对矢量数据中的元素进行交换后输出。具体的,本实施例中,由于与每个元素对应的位置只包括一个输出元素,因此两个选择单元11中的2个32选1选择器分别从输入各自的矢量数据组中选择一个元素,并将该元素输出至与这2个32选1选择器连接的2选1选择器(图8中表示为mux2×1),再由该2选1选择器从输入其的两个元素中选择一个元素输出,这样,选择单元mux0和mux1选择后的矢量数据再通过与选择单元mux0和mux1连接的交换单元12中对应的2选1选择器的选择,最终输出低32个元素,例如图8中的{Y31,Y30,……,Y1,Y0};相应的,选择单元mux2和mux3选择后的矢量数据再通过与选择单元mux2和mux3连接的交换单元12中对应的2选1选择器的选择,最终输出高32个元素,例如图8中的{Y63,Y62,……,Y33,Y32}。其中,在图8中,控制单元13针对选择单元11中的每个32选1选择器的第一控制信号(图8中表示为c1)可参见上述如图6所示的实施例中对第一控制信号的相关描述,控制单元13针对交换单元12中的每个2选1选择器的第二控制信号(图8中表示为c2)可参见上述如图6所示的实施例中对第二控制信号的相关描述,此处不再赘述。
[0114] 可以理解,图8中,由于选择单元11的个数为4,因此交换单元12的个数为2,又由于一路输入对应一路输出,即需要输出的矢量数据中的元素个数为64,因此本实施例中,两个交换单元12中的2选1选择器的个数为64,即每个交换单元12均由32个2选1选择器组成。
[0115] 为了更加清楚地理解如图8所示的矢量排列电路的实现原理,下面再从代码的角度进一步解释如图8所示的矢量排列电路。
[0116] 如图8所示的矢量排列电路可以用下述代码解释:
[0117]
[0118]
[0119] 需要说明的是,上述代码仅是为了更加清楚的解释如图8所示的实现原理而提出的,具体实现中,图8是通过由各种选择器组成的逻辑电路实现的。
[0120] 实例二
[0121] 针对上述图5中的(b),以待排列的矢量数据的位宽为64,且将待排列的矢量数据分为奇数矢量数据组和偶数矢量数据组为例,本发明实施例提供的矢量排列电路如图9所示。
[0122] 在图9中,首先由分组单元10将寄存器输入到分组单元10的待排列的矢量数据{S63,S62,……,S1,S0}(图9中表示为30)按照元素的奇数序号和偶数序号进行分组,得到奇数矢量数据组(图9中表示为31)和偶数矢量数据组(图9中表示为32),其中,31为{S63,S61,……,S3,S1},32为{S62,S60,……,S2,S0},31和32均包括32个元素。
[0123] 由于图9中将待排列的矢量数据分为两个矢量数据组,因此选择单元11的个数m=2n=2×2=4(本实施例中,一个矢量数据组对应两个选择单元11),即图9中有4个选择单元
11,分别表示为mux0、mux1、mux2和mux3,本实例中,使得偶数矢量数据组同时输入到选择单元mux0和mux2,奇数矢量数据组同时输入到选择单元mux1和mux3。如图9所示,每个选择单元11为一个32x32的交换矩阵,其由32个32选1选择器组成;由于每个32选1选择器都由控制单元13独立控制,因此每个选择单元11均需要32个独立的控制信号(图9中控制单元13对每个选择单元11的32个控制信号用加粗的实线表示,可以理解为控制单元13对每个32x32的交换矩阵中的32个32选1选择器分别独立控制)。在图9中,每个选择单元11(即32x32的交换矩阵)均可以在控制单元13的控制信号的作用下,从输入该选择单元11的矢量数据组中选择32个元素输出。其中,图9中,控制单元13对选择单元mux0和mux1中的各个对应的32选1选择器均输出相同的第一控制信号,对选择单元mux2和mux3中的各个对应的32选1选择器也输出相同的第一控制信号,具体的,第一控制信号的具体实现可参见上述如图7所示的实施例中对第一控制信号的相关描述,此处不再赘述。
[0124] 需要说明的是,本实施例中,上述如图7所示的2个32选1选择器分别为两个选择单元11中的32选1选择器。例如,一个32选1选择器为选择单元mux0中的一个32选1选择器,另一个32选1选择器为选择单元mux1中相应位置的一个32选1选择器。其中,相应位置可以理解为这2个32选1选择器从输入各自的矢量数据组中选择相同位置或者相邻位置的元素,例如,当输出元素来自于第30个输入元素和第31个输入元素时,位于mux0中的32选1选择器从偶数矢量数据组中选择第15个元素输出,位于mux1中的32选1选择器也从奇数矢量数据组中选择第15个元素输出;当输出元素来自于第31个输入元素和第32个输入元素时,位于mux0中的32选1选择器从偶数矢量数据组中选择第16个元素输出,位于mux1中的32选1选择器从奇数矢量数据组中选择第15个元素输出。
[0125] 可以理解,在图9中,选择单元mux0和mux1组合起来对输入各自的矢量数据组进行选择后可以得到两组低32个元素,且mux2和mux3组合起来对输入各自的矢量数据组进行选择后可以得到两组高32个元素,其中,每组低32个元素和每组高32个元素具体是待排列的矢量数据中的哪些元素由具体的控制逻辑决定。
[0126] 如图9所示,选择单元11选择后的矢量数据分别对应输入至交换单元12,由交换单元12对矢量数据中的元素进行交换后输出。具体的,本实施例中,由于与每个元素对应的位置均包括两个输出元素,因此两个选择单元11中的2个32选1选择器分别从输入各自的矢量数据组中选择一个元素,并将该元素输出至与这2个32选1选择器连接的2x2的交换矩阵(图9中表示为mux2×2),其由2个2选1选择器组成,再由这2个2选1选择器分别从输入各自的两个元素中选择一个元素输出,这样,选择单元mux0和mux1选择后的矢量数据再通过与选择单元mux0和mux1连接的交换单元12中对应的2x2的交换矩阵(具体为2个2选1选择器)的选择,最终输出两组低32个元素,例如{Y31,Y30,……,Y1,Y0}和{Z31,Z30,……,Z1,Z0};相应的,选择单元mux2和mux3选择后的矢量数据再通过与选择单元mux2和mux3连接的交换单元12中对应的2x2的交换矩阵(具体为2个2选1选择器)的选择,最终输出两组高32个元素,例如{Y63,Y62,……,Y33,Y32}和{Z63,Z62,……,Z33,Z32}。其中,在图9中,控制单元13针对选择单元
11中的每个32选1选择器的第一控制信号(图9中表示为c3)可参见上述如图7所示的实施例中对第一控制信号的相关描述,控制单元13针对交换单元12中的每个2选1选择器的第二控制信号(图9中表示为c4,图9中控制单元13对每个2x2的交换矩阵的2个第二控制信号用加粗的实线表示,可以理解为控制单元13对每个2x2的交换矩阵中的2个2选1选择器分别独立控制)可参见上述如图7所示的实施例中对第二控制信号的相关描述,此处不再赘述。
[0127] 可以理解,图9中,由于选择单元11的个数为4,因此交换单元12的个数为2,又由于一组输出包括两路输出,即需要输出两组矢量数据,且每组矢量数据中的元素个数均为64,因此本实施例中,需要为两组矢量数据中相同位置的元素分别设置一个2选1选择器,即一组输出对应一个2x2的交换矩阵,所以本实施例中,两个交换单元12中的2选1选择器的个数为128,即每个交换单元12均由64个2选1选择器,即32个2x2的交换矩阵组成。
[0128] 为了更加清楚地理解如图9所示的矢量排列电路的实现原理,下面再从代码的角度进一步解释如图9所示的矢量排列电路。
[0129] 如图9所示的矢量排列电路可以用下述代码解释:
[0130]
[0131]
[0132] 需要说明的是,上述代码仅是为了更加清楚的解释如图9所示的实现原理而提出的,具体实现中,图9是通过由选择器组成的逻辑电路实现的。
[0133] 实例三
[0134] 针对图5中的(c),在FIR滤波器的应用中,需要从两个输入矢量数据中选择出(本实例中选择的过程相当于对原矢量数据进行排列)连续的矢量数据片段用于各种计算,例如乘累加计算。如图10所示,假设有两个矢量数据,分别为VR和VS,其中,VR为{R63,R62,……,R1,R0},VS为{S63,S62,……,S1,S0},可见,VR和VS的位宽均为64。先将两个输入矢量数据VR和VS拼接成长矢量数据,然后再分别根据shift_count_0和shift_count_1选出两个连续的矢量数据VY和VZ。其中,shift_count_0和shift_count_1表示所输出的矢量数据在拼接矢量数据中的偏移,且在图10中,当输出的矢量数据中的某些元素已经超出拼接矢量数据的最左端(图10中表示为T1)时,可以选择这些元素输出随机值或者环回到拼接的矢量数据的最右端(图10中表示为T2)(比如图10中的40为VY,41和42拼接起来构成VZ)。本实施例将以环回到拼接矢量数据的最右端为例来介绍实例三的实现方法。由于输入的两个矢量数据VY和VZ的位宽均是64,即这两个矢量数据均是64路(均包含64个元素)的矢量数据,因此,在对矢量数据进行排列之前,首先需要做预处理选择,将如图10所示的VR(图10中表示为43)和VS(图10中表示为44)变换为VW和VD(图10中VW表示为45,VD表示为46)。因为从输入的两个矢量数据VR和VS中选择VY和VZ的过程是一样的,因此,此处以选择VY为例对本发明实施例的预处理进行示例性的说明。以选择VY为例,本实施例经过对输入的两个矢量数据VR和VS进行预处理把所有可能在VY内出现的元素都选择出来,形成中间矢量数据VW,且元素Wi只能来自Ri或Si,这是由输出的矢量数据中相邻元素的序号连续所决定的。中间矢量数据VW和最终输出的矢量数据VY虽然元素是相同的,但是元素在矢量数据中的次序可能是不同的,因此需要对中间矢量数据VW做循环右移,循环右移可以通过2个32x32的交换矩阵来实现。
[0135] 本实施例中,假设以将经过预处理得到的两个中间矢量数据VW和VD分别分为奇数矢量数据组和偶数矢量数据组为例,本发明实施例提供的矢量排列电路如图11所示。
[0136] 在图11中,对于图10得到的两个矢量数据组VW(图11中表示为45)和VD(图11中表示为46)分别由分组单元10按照元素的奇数序号和偶数序号进行分组,得到四个矢量数据组47、48、49和50,其中,47为{W63,……,W1},48为{W62,……,W0},49为{D63,……,D1},50为{D62,……,D0},47、48、49和50均包括32个元素。
[0137] 由于图11中将待排列的两个矢量数据分别分为两个矢量数据组,总共有四个矢量数据组,因此选择单元11的个数m=n=4(本实施例中,一个矢量数据组对应一个选择单元11),即图11中有4个选择单元,分别表示为mux0、mux1、mux2和mux3,本实例中,使得每个矢量数据组分别输入到一个选择单元11,具体可如图11所示。如图11所示,每个选择单元11为一个32x32的交换矩阵,其由32个32选1选择器组成;由于每个32选1选择器都由控制单元13独立控制,因此每个选择单元11均需要32个独立的控制信号(图11中控制单元13对每个选择单元11的32个控制信号用加粗的实线表示,可以理解为控制单元13对每个32x32的交换矩阵中的32个32选1选择器分别独立控制)。在图11中,每个选择单元11(即32x32的交换矩阵)均可以在控制单元13的控制信号的作用下,从输入该选择单元11的矢量数据组中选择
32个元素输出。其中,图11中的选择单元mux0、mux1、mux2和mux3中的各个对应的32选1选择器均由控制单元独立控制,具体的,本实施例中的控制逻辑具体可根据实际应用中需要输出的矢量数据来设置,其设置原理与上述实例一和实例二中的控制逻辑的设置原理类似,此处不再赘述。
[0138] 需要说明的是,本实施例中,上述如图7所示的2个32选1选择器分别为两个选择单元11中的32选1选择器。例如,一个32选1选择器为选择单元mux0中的一个32选1选择器,另一个32选1选择器为选择单元mux1中相应位置的一个32选1选择器。其中,相应位置可以参见上述实例二中对相应位置的具体描述,此处不再赘述。
[0139] 可以理解,在图11中,由于一个矢量数据组对应一个选择单元,因此选择单元mux0和mux1组合起来对输入各自的矢量数据组进行选择后可以得到一组64个元素,即实现对如图10所示的中间矢量数据VW的循环右移;选择单元mux2和mux3组合起来对输入各自的矢量数据组进行选择后可以得到另一组64个元素,即实现对如图10所示的中间矢量数据VD的循环右移,其中,每组64个元素具体是待排列的矢量数据中的哪些元素由具体的控制逻辑决定。
[0140] 如图11所示,选择单元11选择后的矢量数据分别对应输入至交换单元12,由交换单元12对矢量数据中的元素进行交换后输出。具体的,本实施例中,由于与每个元素对应的位置均包括两路输出,因此两个选择单元11中的2个32选1选择器分别从输入各自的矢量数据组中选择一个元素,并将该元素输出至与这2个32选1选择器连接的2x2的交换矩阵(图11中表示为mux2×2),其由2个2选1选择器组成,再由这2个2选1选择器分别从输入各自的两个元素中选择一个元素输出,这样,选择单元mux0和mux1选择后的矢量数据再通过与选择单元mux0和mux1连接的交换单元12中对应的2x2的交换矩阵(具体为2个2选1选择器)的选择,最终输出VY,VY为{Y63,Y62,……,Y1,Y0};相应的,选择单元mux2和mux3选择后的矢量数据再通过与选择单元mux2和mux3连接的交换单元12中对应的2x2的交换矩阵(具体为2个2选1选择器)的选择,最终输出VZ,VZ为{Z63,Z62,……,Z1,Z0}。其中,在图11中,控制单元13针对选择单元11中的每个32选1选择器的第一控制信号(图11中表示为c3)可参见上述如图7所示的实施例中对第一控制信号的相关描述,控制单元13针对交换单元12中的每个2选1选择器的第二控制信号(图11中表示为c4,图11中控制单元13对每个2x2的交换矩阵的2个第二控制信号用加粗的实线表示,可以理解为控制单元13对每个2x2的交换矩阵中的2个2选1选择器分别独立控制)可参见上述如图7所示的实施例中对第二控制信号的相关描述,此处不再赘述。
[0141] 本实施例中,正是因为选择单元11对输入其的矢量数据进行循环右移后输出,因此可以保证交换单元12最终输出矢量数据中,相邻两个元素的序号也是相邻的。
[0142] 可以理解,图11中,由于选择单元11的个数为4,因此交换单元12的个数为2,又由于一组输出包括两路输出,即需要输出两组矢量数据,且每组矢量数据中的元素个数均为64,因此本实施例中,需要为两组矢量数据中相同位置的元素分别设置一个2选1选择器,即一组输出对应一个2x2的交换矩阵,所以本实施例中,两个交换单元12中的2选1选择器的个数为128,即每个交换单元12均由64个2选1选择器,即32个2x2的交换矩阵组成。
[0143] 为了更加清楚地理解如图11所示的矢量排列电路的实现原理,下面再从代码的角度进一步解释如图11所示的矢量排列电路。
[0144] 如图11所示的矢量排列电路可以用下述代码解释:
[0145]
[0146]
[0147]
[0148] 需要说明的是,上述代码仅是为了更加清楚的解释如图11所示的实现原理而提出的,具体实现中,图11是通过由各种选择器组成的逻辑电路实现的。
[0149] 可选的,对如图10所示的VR(图12中表示为43)和VS(图12中表示为44)做预处理选择,即将VR和VS变换为VW(图12中表示为45)和VD(图12中表示为46)可以采用如图12所示的电路实现。具体的,43和44中相同位置的两个元素经过一个2x2的交换矩阵(即2个2选1选择器,图12中表示为mux2×2)后,再由该2x2的交换矩阵输出,从而实现对43和44的变换,即将43和44变换为需要进行排列的45和46。本实施例中的2x2的交换矩阵的工作原理与上述实例二和实例三中交换单元中的2x2的交换矩阵的工作原理相似,具体可参见上述实例二和实例三中对交换单元中的2x2的交换矩阵的相关描述,此处不再赘述。
[0150] 可选的,在对如图10所示的VR和VS做预处理选择时,上述2x2的交换矩阵可以在控制单元的控制下(其中,控制单元的控制逻辑由预处理选择需求确定)进行任何形式的预处理选择。例如,假设第0路输入包括两个输入元素,分别为{R0,S0},则上述2x2的交换矩阵可以在控制单元的控制下,使得第0路输出为{R0,S0}、{S0,R0}、{S0,S0}或{R0,R0}。
[0151] 本发明实施例提供的矢量排列电路,由于在选择单元对矢量数据组进行选择以及交换单元对矢量数据组中的元素进行交换之前,首先对待排列的矢量数据进行了分组,即将待排列的矢量数据分为n个矢量数据组,因此对于位宽较大的矢量数据,本发明实施例可以通过对其进行分组将其转换为位宽较小的矢量数据进行排列,从而本发明实施例提供的矢量排列电路仍然可以采用交换矩阵实现,进而能够使得交换矩阵应用在对位宽较大的矢量数据进行排列的场景中。
[0152] 进一步地,本发明实施例提供的矢量排列电路,与现有技术相比,在两者都能够实现上述如图5所示的三种常见的排列模式的情况下,本发明实施例提供的矢量排列电路可以减少50%的资源消耗,并且还可以降低现有技术为实现多种排列模式而配置多套硬件资源(即上述各个实例中所列举的逻辑电路)的开销。
[0153] 进一步地,本发明实施例提供的矢量排列电路能够实现的排列模式,包括但不限于上述如图5所示的三种常见的排列模式,即本发明实施例提供的矢量排列电路通过采用不同的预处理逻辑、不同的控制逻辑、不同的选择单元,以及不同的交换逻辑等还可以支持更多种的排列模式。具体的,可根据实际使用需求进行具体逻辑电路的设置以及具体控制逻辑的设置,本发明不作限定。对于其他任何采用本发明的分组、选择以及交换(可能还包括分组前的预处理等)等思想实现矢量数据的排列的方案都在本发明的保护范围之内。
[0154] 本发明实施例提供一种矢量处理器,该矢量处理器包括上述如图2-图4、图6-图9和图11中任意之一所述的矢量排列电路。具体的,这些矢量排列电路的描述可对应参见上述如图2-图4、图6-图9和图11所示的实施例中对矢量排列电路的详细说明,此处不再赘述。
[0155] 需要说明的是,除了上述实施例所提及的图5中的(a)、图5中的(b)以及图5中的(c)所示的三种排列模式外,本发明实施例提供的矢量处理器还可以应用于对矢量数据进行其他处理的场景中,例如对矢量数据进行交织(英文:interleave)、对矢量数据进行解交织(英文:de-interleave)、对矢量数据进行打包(英文:pack)、对矢量数据进行解包(英文:unpack)、对矢量数据进行移位(英文:shift)、对矢量数据进行复制(英文:duplication)以及对矢量数据进行块排列(英文:block permutation)等。
[0156] 本发明实施例提供一种矢量处理器,该矢量处理器包括矢量排列电路,该矢量排列电路包括分组单元,与分组单元连接的m个选择单元,与m个选择单元连接的j个交换单元,每个交换单元与m/j个选择单元连接,以及与每个选择单元和每个交换单元分别连接的控制单元,m、j和n均为大于1的整数,且m为j和n的整数倍;其中,分组单元,用于将待排列的矢量数据分为n个矢量数据组,并将n个矢量数据组分别输出至m个选择单元,其中,每个矢量数据组分别对应至少一个选择单元,且与每个矢量数据组对应的选择单元均不相同;每个选择单元,用于在控制单元的控制下,对输入该选择单元的第一矢量数据组进行选择,并将选择后的第二矢量数据组输出至与该选择单元连接的交换单元,第一矢量数据组为n个矢量数据组中的一个矢量数据组;每个交换单元,用于在控制单元的控制下,对输入该交换单元的第二矢量数据组中的元素进行交换后输出;控制单元,用于控制每个选择单元对输入该选择单元的第一矢量数据进行选择,以及控制每个交换单元对输入该交换单元的第二矢量数据组中的元素进行交换。
[0157] 基于上述技术方案,由于本发明实施例的矢量处理器的矢量排列电路中,在选择单元对矢量数据组进行选择以及交换单元对矢量数据组中的元素进行交换之前,首先对待排列的矢量数据进行了分组,即将待排列的矢量数据分为n个矢量数据组,因此对于位宽较大的矢量数据,本发明实施例可以通过对其进行分组将其转换为位宽较小的矢量数据进行排列,从而本发明实施例提供的矢量排列电路仍然可以采用交换矩阵实现,进而能够使得交换矩阵应用在对位宽较大的矢量数据进行排列的场景中。
[0158] 所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
[0159] 在本申请所提供的几个实施例中,应该理解到,以上所描述的各个实施例仅仅是示意性的,例如,所述模块或单元的划分,并不仅仅限于上述实施例所述的划分方式。
[0160] 所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即这些分离部件可以根据实际的需要进行设置及选择来实现本实施例的方案。
[0161] 另外,在本发明各个实施例中的各功能单元可以采用相应的逻辑电路实现。具体可根据实际的使用需求及应用场景进行设置。
[0162] 以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。