一种基于标签的无序矢量归约电路的制作方法

文档序号:6548456阅读:153来源:国知局
一种基于标签的无序矢量归约电路的制作方法
【专利摘要】本发明公开了一种基于标签的无序矢量归约电路,一个矢量内所有的数据均附带有一个信号以指明其所属的矢量,该信号为数据的标签;无序矢量归约电路包括一个容器模块,缓冲区模块,多路选择器模块和运算器模块。该无序矢量归约电路能够同时处理多个独立的、任意长度的矢量的归约运算,数据的输入次序任意;仅使用一个通用硬件运算器,且完全流水;灵活性与可伸缩性强,内部不存在复杂的控制算法和逻辑;接口简单,操作时序与一个通用的随机访问存储器相同。
【专利说明】一种基于标签的无序矢量归约电路【技术领域】
[0001]本发明涉及一种矢量归约电路领域,更具体地,涉及一种基于标签的、可同时进行多个独立矢量的归约运算的、数据输入次序任意的无序矢量归约电路。
【背景技术】
[0002]矢量归约,是指将一系列的输入数据的值,即矢量,通过运算归约为一个标量值的过程。这种类型的矢量运算形式是大量科学与工程运算的基础,其核心运算一般满足交换率和结合率。常见的矢量归约运算有矢量中所有元素的累加和、累乘积,寻找矢量中的最大、最小元素等。矢量归约运算的特点是其为多步运算,且后面步骤需要前面步骤的运算结果O
[0003]在一些对算法实时性要求高的嵌入式应用中,矢量归约运算的功能需要在FPGA、ASIC等芯片上以硬件电路的形式实现。然而,为了达到更高的工作频率,大多复杂运算如浮点加法和浮点乘法等的硬件运算器,通常经过深度流水,延迟超过一个时钟周期。使用多周期硬件运算器的矢量归约电路应当安排好运算的各个步骤,合理地存储和调度各步骤的运算结果,使得硬件运算器的流水线能尽量地被填满,保证电路的吞吐量。另外,考虑到资源利用效率和系统总体性能,一个矢量归约电路应该使用尽量少的硬件运算器,能同时处理多个独立矢量的归约运算 ,并且实现完全流水,不阻塞输入数据。
[0004]现有的矢量归约电路中有一些可以满足上述要求,但在同时处理多个矢量的归约运算时,都要求一个矢量的数据全部输入电路后才能输入下一个矢量的数据,也就是说,要求输入数据有序。然而,在一些应用中,矢量归约电路需要处理的数据的输入次序是无序的,即多个矢量的数据无规律地混杂在一起输入。例如,矢量归约电路与多个上位模块通过应用Lottery算法等基于概率的仲裁算法的总线仲裁器连接,或组成了片上网络,这时输入数据的次序基本无法预测;现有的矢量归约电路无法处理这样的输入数据。
[0005]另外,从面向实际应用角度出发,一个矢量归约电路应该有规范和友好的接口,无复杂的操作时序,以保证与上下位模块的良好兼容性。现有的矢量归约电路大多不关注这方面的问题,给实际应用带来不便。

【发明内容】

[0006]针对现有的矢量归约电路存在的问题,本发明提出了一种基于标签的无序矢量归约电路,它能同时处理多个独立的、任意长度的矢量的归约运算,数据的输入次序任意;本矢量归约电路更灵活性,可伸缩性强,内部不存在复杂的控制算法和逻辑。
[0007]为了实现上述目的,本发明的技术方案为:
[0008]一种基于标签的无序矢量归约电路,一个矢量内所有的数据均附带有一个信号以指明其所属的矢量,该信号为数据的标签;
[0009]电路包括容器模块、缓冲区模块、多路选择器模块及运算器模块;
[0010]容器模块:在每个时钟周期,容器模块接受两个带标签数据,检查容器模块内所有的数据,将带有相同标签的数据两两配成带标签数据对,并输出,
[0011]容器模块每个时钟周期接受的两个带标签数据分别是来自无序矢量归约电路外部的带标签数据与运算器模块输出的带标签数据;
[0012]缓冲区模块:根据容器模块输出的带标签数据对的数量进行缓冲操作;
[0013]多路选择器模块:将缓冲区模块选通输出的有效带标签数据对输出至运算器模块;
[0014]运算器模块:对输入的有效带标签数据对中的数据进行运算,将运算结果和有效带标签数据中的标签构成一个带标签数据,返回容器模块。
[0015]矢量归约的核心运算通常是满足交换率和结合率的二元运算(乘法,加法,取大者,取小者等)。称一个矢量的所有原始数据及归约运算时的所有中间结果的集合为一个数据集。对于多个矢量的归约运算,本发明的处理过程:设置一个容器模块,在每个时钟周期将当前的输入数据和从运算器输出的中间结果数据放入容器,并从容器中选出两个属于同一数据集的数据组成一对,送入运算器中进行运算。若所有矢量的数据已经输入电路,容器中任意两个数据都不属于同一个数据集,而运算器的流水线已经为空,那么所有矢量的归约运算便完成,此时容器里的数据便是所有矢量的归约运算结果。这样的处理方式显然并不需要关心这些矢量的数据的输入次序。因为输入数据是来自多个矢量的数据混杂而成,每个数据必定会附带一个信号以指明其所属的矢量。将这个信号视为数据信号的标签信号,附加在数据信号上。容器依靠标签来区分各个数据集的数据,对数据相应的进行存储和匹配等操作。相同标签的数据会被组成一对送入运算器,运算结果也会被附加上一样的标签。这样,每个数据集都对应唯一一个标签值,无效的数据会被附加一个与所有数据集的标签都不同的标签,以指明其无效,不属于任何一个数据集,保证运算的正确性与准确性。
[0016]所述容器模块每个时钟周期接受来自电路外部与运算器模块输出的两个带标签数据,并且检查包括当前输入的两个带标签数据在内的所有内部数据,将相同标签的数据都两两配成带标签数据对,并全部输出。
[0017]由于成对的数据会被马上配成数据对输出,所以对于每一个数据集,容器模块最多只用存储它的一个数据。即容器模块的存储空间大小等于所述电路能同时处理的无序输入矢量个数。当同时处理的矢量个数不超过容器模块的存储空间大小,无论其数据的输入次序如何,电路能保证运算的正确性与准确性。
[0018]由于带标签数据对只可能由输入的两个带标签数据对构成,或由输入的带标签数据与之前存储在容器模块内部的数据构成,在每个时钟周期,容器模块输出带标签数据对的数量的情况分为三种:不输出带标签数据对,记为状态O ;输出一对带标签数据对,记为状态I ;输出两对带标签数据对,记为状态2 ;
[0019]缓冲区模块是根据所述容器模块输出的带标签数据对的数量进行缓冲操作,以解决当容器模块同时输出2个带标签数据对所导致的冲突。具体过程:
[0020]当容器模块输出带标签数据对的数量情形属于状态O时,缓冲区模块弹出一对带标签数据对;
[0021]当容器模块输出带标签数据对的数量情形属于状态I时,缓冲区模块保持上一个时钟周期的状态不变;
[0022]当容器模块输出带标签数据对的数量情形属于状态2时,缓冲区模块将其中I个带标签数据对压入。
[0023]当容器模块输出带标签数据对的数量情形属于状态O时,缓冲区模块弹出一对带标签数据对;当缓冲区模块为空,令缓冲区模块输出端口的标签部分为无效值,以保证运算的正确性与准确性。
[0024]本发明的电路对缓冲区模块的压入弹出次序无要求。缓冲区的最小深度是一个与要同时处理的矢量个数、各个矢量的长度、各个矢量的数据输入的次序皆无关的有限值P-1,其中P为容器模块与运算器模块的流水线级数之和。只要不小于该最小深度,在任意的矢量长度及数据输入次序,缓冲区模块不会溢出。
[0025]运算器模块由一个通用运算器和一个信号延迟器构成,通用运算器根据具体要进行的矢量归约运算选定,其流水线级数是任意的;信号延迟器的延迟周期数与通用运算器的流水线级数相等,以使通用运算器的输出数据与信号延迟器的输出标签匹配。
[0026]每个时钟周期,运算器模块接受一个带标签数据对,数据部分送入通用运算器进行运算,标签部分送入信号延迟器进行延迟,将运算器输出的数据与信号延迟器输出的标签构成一个带标签数据,返回容器模块。
[0027]多路选择器模块将容器模块和缓冲区模块输出的带标签数据对选通对至运算器模块。在每个时钟周期,若容器模块输出I个带标签数据对,多路选择器模块将这个带标签数据对选通至运算器模块;若容器模块输出2个带标签数据对,多路选择器模块将未被压入所述的缓冲区模块的带标签数据对选通至运算器模块;若容器模块输出O个带标签数据对,多路选择器模块将缓冲区模块弹出的带标签数据对选通至运算器模块。
[0028]多路选择器模块根据容器模块提供的一组状态信号,将容器模块和缓冲区模块输出的有效带标签数据对选通对至运算器模块,选通策略能保证所有矢量的归约运算的正确性与准确性。
[0029]容器模块每个时钟周期都可以接受一个来自外部的带标签数据,缓冲区模块只要不小于最小深度就不会溢出,运算器模块每个时钟周期只需处理一个带标签数据对,而输出的带标签数据也可以无阻塞地进入容器模块。这表示本发明的电路不存在阻塞的状况,是完全流水的。
[0030]来自外部的带标签数据输入容器模块时是无阻塞的,所有矢量的归约运算结果也存储在容器模块,由于容器模块的存储空间与数据集是映射的,可用标签在容器模块中寻址。这使得对于电路的数据输入输出而言,标签信号等价于地址信号,所述的电路的操作时序与通用的随机访问存储器一样。
[0031]当最后一个带标签数据输入电路,经过最多/?(「1θ§2;?"|+1) + ρ-2「1<>g2pl个时钟周
期,可以从所述的容器模块内读取到所有矢量的归约运算结果,其中P为所述的电路内部总的流水级数。
[0032]本发明的电路接口简单,操作时序与通用的随机访问存储器相同。
【专利附图】

【附图说明】
[0033]图1是基于标签的无序矢量归约电路的是实施例1的电路原理图。
[0034]图2是容器模块Container的电路原理图。【具体实施方式】
[0035]下面结合附图对本发明做进一步的描述,但本发明的实施方式并不限于此。实施例I
[0036]图1、2所示的是本发明基于标签的无序矢量归约电路的实施例1的电路原理图,由容器模块Container,缓冲区模块RBuff,多路选择器模块MUX和运算器模块Operator构成。stb_x、tag_x、dat_x是带标签数据的输入端口,dat_o为结果数据的输出端口,ctl_read是用于读取运算结果的控制信号。
[0037]来自电路外部的带标签数据{stb_x, tag_x, dat_x}的标签部分为{stb_x, tag_x},运算器模块返回的带标签数据{stb_r, tag_r, dat_r}的标签部分为{stb_r, tag_r},电路内的其他带标签数据与带标签数据对同理。所有带标签数据或带标签数据对的标签部分{stb_*,tag_*} (*是通配符,下同)的宽度为1+n。其中,stb_*宽度为1,是标签信号的最高位,称为选通信号,其值为I时,表示该标签有效,为O时,表示该标签无效,这样只要判断选通信号的高低即可判断该标签是否有效。tag_*是有效标签的取值,宽度为n,则可用的有效标签为m = 2"个,有效标签取值范围为O?2n-l。
[0038]运算器模块Operator中的硬件运算器根据具体要进行的矢量归约运算选定,其流水线级数任意。运算器模块内及电路其他部分的信号延迟器都使用D触发器实现。
[0039]容器模块由缓存模块Cache、缓存状态查询与更新模块CacheStatQAU_PT这两个子模块及一个标签比较电路组成。容器模块每个周期接受来自电路外部和运算器模块的带标签数据各一个。由于对于每一个数据集,容器模块最多只存储它的一个数据,所以有效的带标签数据对只有3种组合:由输入的两个带标签数据构成,由来自电路外部的带标签数据及容器内的对应数据构成,或由来自运算器模块输出的带标签数据及容器内的对应数据构成。容器模块罗列出这3种组合的带标签数据对:{flg_x_matches_r, tag_x, dat_x, dat_r} , {flg_x_got_matched, tag_x, dat_x, dat_x_cache}, {fIg_r_got_matched, tag_r, dat_r, dat_r_cache},有效性分别由其选通信号 f lg_x_matches_r、f lg_x_got_matched、f lg_r_got_matched来标明。多路选择器模块MUX与缓冲区模块RBuff根据它们的选通信号来判明它们的有效性并进行相关操作。
[0040]缓存模块Cache负责当前输入容器模块的两个带标签数据的数据部分的缓存,同时输出两个之前存储的数据,用于当前的数据配对。缓存Cache使用一个工作在Read First模式下的双端口 Ram实现,读延迟为p。。,一般ρ。。= I。其容量对应可用的有效标签个数,为m = 2n,则电路最多可同时处理m个数据集的归约运算。信号tag_*直接作为缓存Cache的地址,以使要处理的数据集在缓存模块Cache内都有唯一的存储空间。而输入容器模块的带标签数据为无效时则会因为选通信号为低会使得写使能为低,缓存模块Cache内的数据不会受影响。对于输入的带标签数据{stb_x, tag_x, dat_x},缓存Cache以tag_x的值为地址,寻址到存储着标签值为tag_x的数据集的数据的位置,将上次存储的数据dat_X_cache读出,用来构成带标签数据对{flg_x_got_matched, tag_x, dat_x, dat_x_cache}。同时,若{stb_x, tag_x, dat_x}的标签有效且与另一个带标签数据{stb_r, tag_r, dat_r}的标签不相等,缓存模块Cache将dat_x_cache读出后用dat_x覆盖它。对于输入容器模块的带标签数据{stb_r, tag_r, dat_r},处理类似。缓存Cache的读写并不受各个数据集的缓存状态的影响。尽管输入的带标签数据与之前存储在缓存模块Cache的数据配成有效数据对后,其数据部分仍会被存储下来,不过因为缓存模块Cache工作在Read First模式,且缓存状态查询与更新模块CacheStatQAU_PT记录着缓存状态,数据被重复计算和未被计算的数据被新数据冲掉等情况并不会出现。
[0041]标签比较电路给出带标签数据对{flg_x_matches_r, tag_x, dat_x, dat_r}的选通信号flg_X_g0t_matChed。若输入容器模块的两个的带标签数据的标签都有效且相等,表明dat_x和dat_r是一对有效的数据对,标签的值为tag_x,标签比较电路则令flg_x_matches_r为高以表明{flg_x_matches_r, tag_x, dat_x, dat_r}是一个有效的带标签数据对,否则,令flg_x_matches_r为低。
[0042]缓存状态查询与更新模块CacheStatQAU_PT根据输入容器模块的两个带标签数据所带的标签,查询与更新对应数据集在容器模块中的存储状态,并给出带标签数据对{fIg_x_got_matched, tag_x, dat_x, dat_x_cache}的选通信号 fIg_x_got_matched 和{f lg_r_got_matched, tag_r, dat_r, dat_r_cache}的选通信号 flg_r_got_matched0 因为每个数据集在容器模块中的缓存状态只有两种:容器内有或没有该数据集的数据,模块CacheStatQAU_PT内设置一个m位的缓存状态寄存器,其每位记录一个数据集的缓存状态,用标签信号来位寻址。对于输入容器模块的带标签数据{stb_x, tag_x, dat_x},若所带的是有效标签,模块CacheStatQAU根据其标签值tag_x寻址缓存状态寄存器的对应位。如果该位为1,表明缓存模块Cache存储有与dat_x同一个数据集的数据,即dat_x_cache与dat_x是一对有效的数据对,模块CacheStatQAU则令选通信号flg_x_got_matched为高以表明{flg_x_got_matched, tag_x, dat_x, dat_x_cache}是一个有效的带标签数据对,并把该位翻转为0,表示缓存模块Cache内已经没有与dat_x同一个数据集的数据;如果该位为
O,表示缓存Cache没存储着与dat_x同一个数据集的数据,模块CacheStatQAU则置flg_x_got_matched 为低以表明{fIg_x_got_matched, tag_x, dat_x, dat_x_cache}是一个无效的带标签数据对,并把该位翻转为1,表示缓存模块Cache内现有与dat_x同一个数据集的数据。若{stb_x, tag_x, dat_x}带的是无效标签,模块CacheStatQAU直接置flg_x_got_matched为低,缓存状态寄存器不作变动。对于输入容器模块的带标签数据{stb_r,tag_r, dat_r},处理类似。由上述行为可归纳出如下模块CacheStatQAU_PT行为描述的伪代码:
[0043]input:stb_x, tag_x, stb_r, tag_r
[0044]flg_x_got_matched = cache_stat[tag_x]&stb_x
[0045]flg_r_got_matched = cache_stat[tag_r]&stb_r
[0046]case ({stb_x, stb_r})
[0047]00: cache_stat = cache_stat
[0048]01: cache_ stat = cache_stat ? (l<<tag_x)
[0049]10: cache—stat = cache—stat θ (l<<tag_r)
[0050]11: cache—stat = cache—stat θ (l<<tag_x) θ (l<<tag_r)
[0051]endcase
[0052]其中,cache—stat是其内部的缓存状态寄存器,位数为m;‘?’表示异或运算,‘〈〈’表示左移位运算,这两个运算用来对cache—stat的相应位取反。模块的延迟Ppt取决于fig—X—got—matched和fig—r—got—matched输出前是否锁存,若锁存则为1,否则为O。
[0053]缓冲区模块RBuff使用一个工作在Fall-Through模式的FIFO实现,指明FIFO是否为空的信号not—empty被用作为缓冲区模块RBuff输出端口上的带标签数据对{not—empty, dat_o}的选通信号.多路选择器模块MUX是一个3选I的逻辑电路。缓冲区模块RBuff与多路选择器模块MUX的行为描述伪代码如下:
[0054]
【权利要求】
1.一种基于标签的无序矢量归约电路,其特征在于,一个矢量内所有的数据均附带有一个信号以指明其所属的矢量,该信号为数据的标签; 电路包括容器模块、缓冲区模块、多路选择器模块及运算器模块; 容器模块:在每个时钟周期,容器模块接受两个带标签数据,检查容器模块内所有的数据,将带有相同标签的数据两两配成带标签数据对,并输出, 容器模块每个时钟周期接受的两个带标签数据分别是来自无序矢量归约电路外部的带标签数据与运算器模块输出的带标签数据; 缓冲区模块:根据容器模块输出的带标签数据对的数量进行缓冲操作; 多路选择器模块:将缓冲区模块选通输出的有效带标签数据对输出至运算器模块; 运算器模块:对输入的有效带标签数据对中的数据进行运算,将运算结果和有效带标签数据中的标签构成一个带标签数据,返回容器模块。
2.根据权利要求1所述的电路,其特征在于,容器模块的存储空间大小等于所述电路能同时处理的无序输入矢量个数。
3.根据权利要 求1所述的电路,其特征在于,在每个时钟周期,容器模块输出带标签数据对的数量的情况分为三种:不输出带标签数据对,记为状态O ;输出一对带标签数据对,记为状态I ;输出两对带标签数据对,记为状态2 ; 当容器模块输出带标签数据对的数量情形属于状态O时,缓冲区模块弹出一对带标签数据对; 当容器模块输出带标签数据对的数量情形属于状态I时,缓冲区模块保持上一个时钟周期的状态不变; 当容器模块输出带标签数据对的数量情形属于状态2时,缓冲区模块将其中I个带标签数据对压入。
4.根据权利要求3所述的电路,其特征在于,当容器模块输出带标签数据对的数量情形属于状态O时,缓冲区模块弹出一对带标签数据对;当缓冲区模块为空,令缓冲区模块输出端口的标签部分为无效值。
5.根据权利要求3所述的电路,其特征在于,所述的缓冲区模块的最小深度是一个有限值p-ι,其中P为容器模块与运算器模块的流水线级数之和。
6.根据权利要求1所述的电路,其特征在于,运算器模块由一个通用运算器和一个信号延迟器构成,运算器模块每个时钟周期接受一个带标签数据对,数据部分送入通用运算器进行运算,标签部分送入信号延迟器进行延迟,将运算器输出的数据与信号延迟器输出的标签构成一个带标签数据,返回容器模块。
7.根据权利6所述的电路,其特征在于,通用运算器根据具体要进行的矢量归约运算选定,其流水线级数是任意的;所述信号延迟器的延迟周期数与通用运算器的流水线级数相等,使得通用运算器的输出数据与信号延迟器的输出标签匹配。
8.根据权利I所述的电路,其特征在于,多路选择器模块将容器模块和缓冲区模块输出的带标签数据对选通对至运算器模块; 在每个时钟周期,若容器模块输出I个带标签数据对,多路选择器模块将这个带标签数据对选通至运算器模块; 若容器模块输出2个带标签数据对,多路选择器模块将未被压入所述的缓冲区模块的带标签数据对选通至运算器模块; 若容器模块输出O个带标签数据对,多路选择器模块将缓冲区模块弹出的带标签数据对选通至运算器模块。
9.根据权利8所述的电路,其特征在于,多路选择器模块根据容器模块提供的一组状态信号,将容器模块和缓冲区模块输出的有效带标签数据对选通对至运算器模块,选通策略能保证所有矢量的归约运算的正确性与准确性。
10.根据权利1至9任一项所述的电路,其特征在于,所述电路的操作时序与通用的随机访问存储器相同。
【文档编号】G06F9/30GK103995688SQ201410240877
【公开日】2014年8月20日 申请日期:2014年5月30日 优先权日:2014年5月30日
【发明者】黄以华, 韦铭 申请人:广东顺德中山大学卡内基梅隆大学国际联合研究院, 中山大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1