实现数据排序的电路和方法

文档序号:6559954阅读:443来源:国知局
专利名称:实现数据排序的电路和方法
技术领域
本发明涉及本发明涉及数字信号处理领域,具体涉及一种实现数据排序的硬件电路及方法。
背景技术
在数字信号处理中,经常需要对一系列数据进行排序,比如要对m个数据的大小顺序进 行排序,或者从m个数据中找出n个最大(或最小)的数据,rn》n,以确定这些数据的优先 级别。
现有的技术主要为软件排序。虽然软件排序的算法很多,但由于软件的运算速度较慢, 无法满足实时性要求比较高的环境。比如通信系统的基站在进行小区搜索时,需要从大量的 数据中找到真正的信号,并迅速向移动终端反馈信息,这个时间间隔要求很短,通常在lms 左右,在小区半径比较大或搜索的小区比较多时,需要处理的数据量非常庞大,经常达到十 万的数量级,软件无法在如此短时间内实现如此多数据的査找排序。

发明内容
为了克服上述缺陷,本发明的目的在于提供一种满足实时性比较高的场合的实现数据排 序的硬件电路和方法。
为达到上述目的,本发明一种实现数据排序的电路,包括
至少一寄存器(A),至少一比较器(B),至少一n选l的多路选择器(C),至少一第一2 选l的多路选择器(D),至少一第二2选1的多路选择器(E),至少一极值指针寄存器(F), 一地址译码器(G), 一与门阵列(H);
其中,所述寄存器(A)用于存储排序过程中当前的极值,寄存器(A)的输出和本电路 的数据输入作为比较器(B)的输入;
所述比较器(B)输出的比较结果作为n选l的多路选择器(C)的输入;
所述极值指针寄存器(F)用于记录当前极值所在寄存器(A)的存储位置及当前极值顺 序,并作为n选l的多路选择器(C)的控制端;
所述n选l的多路选择器(C)输出本电路输入的数据与当前极值比较的结果,作为第一 2选1多路选择器(D)的控制端,极值指针寄存器(F)作为第一2选1多路选择器(D)的 输入端
所述n选l的多路选择器(C)的输出作为第二2选1多路选择器(E)的控制端; 所述第一 2选1多路选择器(D)的输出和极值指针寄存器(F)作为第二 2选1多路选 择器(E)的输入;
所述第二2选1多路选择器(E)的输出作为极值指针寄存器(F)的输入; 所述极值指针寄存器(F)作为地址译码器(G)的输入端;
所述n选l的多路选择器(C)和地址译码器(G)的输出作为与门阵列(H)的输入; 所述与门阵列(H)的输出连接到寄存器(A)的输入使能端。
其中,本电路的数据输入连接到寄存器(A)和比较器(B),将寄存器(A)和极值指针 寄存器(F)连接到输出。
其中,所述地址译码器(G)和与门阵列(H)组合为一个带使能端的地址译码器。 为达到上述目的,本发明一种基于权利要求1所述电路实现数据排序的方法,包括
(1) 根据要査找的极值个数n,确定寄存器组(A)、比较器组(B)、 n选l的多路选择 器组(C)、第一组2选1的多路选择器(D)和第二组多路选择器组(E)、极值指针寄存器组
(F)的深度,以及第一组2选1的多路选择器(D)和第二组多路选择器(E)、极值指针寄 存器组(F)的宽度;
(2) 根据数据源的个数m,确定电路的运行时间为m个时钟;
(3) 根据査找数值类型,选择比较器的输出类型;
(4) 复位寄存器组(A)、极值指针寄存器组(F);
(5) 向电路输入采样数据;
(6) 经过m个时钟后停止本电路。 其中,所述的步骤(1)中,
寄存器组(A)和比较器组(B)的深度为n; n选l的多路选择器组(C),极值指针寄存器组(F)的深度为n; 第一组2选1的多路选择器(D)、第二组2选1的多路选择器(E)的深度为n-1; n选1的多路选择器组(C)中的每个选择器的输出位宽为1;
第一组2选1的多路选择器(D)和第二组2选1的多路选择器(E)、极值指针寄存器 (F)组中各单元的输出位宽为大于或等于log2 (n)的最小整数。
其中,所述的步骤(4)中,极值指针寄存器组(F)中的各寄存器要分别复位为不同的 值;査找最大值时,所述寄存器组(A)全部复位为其最小值,否则寄存器组(A)全部复位
为其最大值。
其中,所述的步骤(5)具体为每一个时钟向本电路输入一个采样数据。 采用本发明所述的方法和装置,克服了软件排序花费时间长,不能用于实时性要求高的 场合的缺点。本发明使用硬件电路来实现数据的排序,此电路每个时钟可以处理一个数据,
目前的集成电路一般可以工作在100MHz以上,对10万个数据进行排序的时间小于lms,如 果使用多套排序电路并行工作,排序时间还可以成倍减少,所以本电路的实时处理性强,可 以满足对处理时间要求比较高的场合。


图l为一个单链表的示意图2为对图1进行重新排列并去掉空指针后得到的单链表; 图3为一个2选1的多路选择器; 图4为一个16选1的多路选择器; 图5为本发明实现数据排序的电路结构框图; 图6为本发明实现数据排序的一个具体实施例; 图7为本发明实现数据排序方法的流程图。
具体实施例方式
下面结合附图和实施例对本发明作进一步的详细说明。
本方法的主要思想来源于软件数据结构中的单链表,单链表是存储数据的一种结构,访 问存储在链表中的数据时,需要査询一组指针,这组指针的内容为这些数据的存储位置。
图l为一个单链表的示意图,头指针为dO的存储位置,指针l为dl的存储位置,……, 指针n为dn的存储位置,最后是一个空指针,如果n为一个固定的数,可以不使用最后的空 指针。
图2为对图1进行重新排列并去掉空指针后得到的单链表。
为了更好的解释本发明,下面对本发明中用到的一些元件进行说明。
图3为一个2选1的多路选择器,i0, il为数据输入端口, s为选择控制端口, z为输出
端口,当s为0时,z的输出为i(),当s为l时,z的输出为il。
图4为一个16选1的多路选择器,i为数据输入端口, s为选择控制端口, z为输出端口。
i的位宽为16, i由il5, i14, U3,……,il, i0组成;s的位宽为4,取值范围为(Tl5。
当s的值为j时,z的输出为j,这里j的取值范围为0~15。如果一个多路选择器的输入位
宽是其他值,其工作原理与16选1的多路选择器是相似的。可以用2选1的多路选择器搭 建16选1的多路选择器或其他类型的多路选择器, 一般的数字电路教材中都有论述,此处不 再赘述。
通用的比较器一般有两个输入a和b,三个输出, 一个输出判断a是否大于b, 一个判断 a是否等于b,另一个判断a是否小于b。
本发明中用到的比较器只需要一个输出,根据需要可以是判断a是否大于b的,也可以 是判断a是否小于b的。
本发明所述的排序电路主要用于从m个数据中找出n个最大(或最小)的数据,m》n, 并且同时实现对这n个最大(或最小)的值进行大小排序。
如图5所示,此电路主要由以下几个部分组成 一组寄存器A, 一组比较器B, 一组n选l 的多路选择器C, 一组2选1的多路选择器D, 一组2选1的多路选择器E, 一组极值指针寄 存器F, 一个地址译码器G, 一个与门阵列H。
本电路的输入连接到寄存器组A和比较器组B,本电路的输出为寄存器组A和极值指针寄 存器组F。
与门阵列H的输出连接到寄存器组A的输入使能端;寄存器组A的输出和本电路的数据 输入作为比较器组B的输入;比较器组B的输出作为多路选择器组C的输入,极值指针寄存 器组F作为多路选择器组C的控制端;多路选择器组C的输出作为多路选择器组D的控制端, 极值指针寄存器组F作为多路选择器组D的输入端;多路选择器组C的输出作为多路选择器 组E的控制端,多路选择器组D的输出和极值指针寄存器组F作为多路选择器组E的输入端; 多路选择器组E的输出作为极值指针寄存器组F的输入端;极值指针寄存器组F作为地址译 码器G的输入端;多路选择器组C和地址译码器G的输出作为与门阵列H的输入。
所述电路适用于从m个数据中找到n个最大或最小的数据,实现对最大或最小的数据进 行大小排序。
所述地址译码器和与门阵列可以组合为一个带使能端的地址译码器。 利用上述电路进行数据排序的方法,包括下列步骤-
步骤l、根据要査找最大值(或最小值)的个数n,确定本发明电路中寄存器A、比较器 B、 n选l的多路选择器C、 2选1的多路选择器D、 2选1的多路选择器E、极值指针寄存器 F的深度和2选1的多路选择器D、 2选1的多路选择器E、极值指针寄存器F的宽度;
A、 B、 C、 F的深度为n, D、 E的深度为n-1, C的宽度为l, D、 E、 F的宽度为大于或等
于1og2(n)的最小整数。
步骤2、选择待査找的数据源的个数m,以确定电路的运行时间为m个时钟。 步骤3、根据査找数值类型,即要査找最大值还是最小值选择比较器的输出类型。 步骤4、复位寄存器组A、极值指针寄存器组F;
F要分别复位为0, 1, 2,……,n-l,要保证他们复位后的值各不相同;查找最大值时, 寄存器组A全部复位为其最小值,否则寄存器组A全部复位为其最大值。 步骤5、每个时钟周期向本电路输入一个数据(采样);
步骤6、经过m个时钟后停止本电路,此时寄存器组A中保存的即为n个极值,极值指针 寄存器组F内保存的是这些极值的大小顺序。
使用寄存器组A保存当前的n个极值,极值指针寄存器组F用于记录A中各个极值的大 小顺序。
新的采样同时与A中所有的值进行比较,根据极值指针寄存器组F和比较器组B的比较 结果来判断新的采样是否是一个新的极值,并同时判断出新的大小顺序。
如果当前采样不是新的极值,原先的大小顺序不变,否则原先的极值当中有一个将不再 是极值,此极值在A中的存储位置将变为当前采样在A中的写入位置。
上述极值大小顺序的调整和当前采样写入位置判断的操作通过n选1的多路选择器组C、 2选1的多路选择器组D、 2选1的多路选择器组E、极值指针寄存器组F、地址译码器G和 与门阵列H共同来实现。
下面以从1000个无符号数据中选择16个最大值为例,详细讲解本发明的电路。
査找最小值的原理与査找最大值的原理类同。
此电路的详细结构如附图6所示,16个极值指针寄存器记录了当前16个最大值在寄存器 组A中的存储位置,指针寄存器F-O记录当前最大值的位置,指针寄存器F-1记录当前次大 值的位置,……,指针寄存器F-14记录当前次小值的位置,指针寄存器F-15记录当前最小 值的位置。存储器A中虽然存储了 16个最大值,但并不是一定按大小顺序存储,其大小顺序 靠这里的16个极值指针寄存器来记录。
当前采样进来后同时与寄存器组A中的16个值进行比较,以判断其是否是一个新的极值。
如果当前采样没有当前16个最大值中的最小值大,则A和F不需要更新;如果当前采样比前
16个最大值中的任何一个大,则将当前釆样的数据写入原先16个最大值中最小值的位置,
并同时调整16个极值指针的内容,即同时调整寄存器组A中各个数据的大小顺序。
在系统复位后,将寄存器组A全部复位为0,并且将16个指针寄存器F复位,这里将指 针寄存器F-0复位为15,指针寄存器F-1复位为14,指针寄存器F-2复位为13,……,指 针寄存器F-14复位为1,指针寄存器F-15复位为0 (如图6中最右边所示)。
寄存器组A中的16个值A-0, A-1,…,A-15同时与当前采样进行比较,比较时使用16个 比较器B-0,B-1,…,B-15,如果当前采样比A-s大,B-s输出为1,否则B-s的输出为0, si,…15。极值指针寄存器F-i记录了第i号最大值的存储位置,i:0,…15,因此可以通过 极值指针寄存器F-i获得第i号最大值与当前采样的比较结果。多路选择器组C中有16个 16选1的多路选择器,以极值指针寄存器F-i作为C-i的选择控制端,以B-0, B-1,…,B-15 作为C-i的输入,C-i的输出为极值指针寄存器F-i对应的极值与当前采样的大小比较结果 (如附图6中所示)。
16个最大值的指针寄存器中,极值指针寄存器F-i记录的是当前第i个最大值的存储位 置,—0,…,15,即极值指针0对应当前最大值,极值指针1对应当前次大值,……,极值 指针15对应当前16个最大值中的最小值。
如果当前采样没有寄存器组A中当前16个最大值中的最小值大,则寄存器组A和极值指 针寄存器组F保持不变;如果当前采样比寄存器组A中当前16个最大值中的任何一个大,则 将当前采样写入原先16个最大值中最小值的位置,即极值指针寄存器F-15的值。
对于16个极值指针寄存器中的任何一个指针寄存器F-i来说,如果当前采样没有自己对 应的值大,则指针寄存器F-i的内容不需要更改;如果当前采样刚好替代了原先第i个最大 值的大小位置,则指针寄存器F-i替换为指针寄存器F-15的内容;如果当前采样比指针寄存 器F-i-l对应的值还大,则指针寄存器F-i的内容要替换为指针寄存器F-i-1的内容;这里, 当前采样与第i-l个最大值的比较结果优先级高于当前采样与第i个最大值的比较结果。
在本发明中,其电路实现为将第i个最大值与当前采样的比较结果C-i作为多路选择
器D-i的选择控制端,F-15和F-i做为D-i的输入,C-i为1时D-i的输出为F-15,否则输
出为F-i;将第i-l个最大值与当前采样的比较结果C-i-l作为多路选择器E-i的选择控制
端,D-i和F-i-l做为E-i的输入,C-i-1为1时E-i的输出为F-i-l,否则输出为D-i; E-i
的输出作为指针F-i的输入,如附图6中所示。
对于指针0来讲,由于指针0对应的为15个最大值中的最大值,因此不需要E-O,直接
将D-O的输出作为F-0的输入,如附图6中所示。
对于E-15来讲,由于D-15的两个输入端都为F-15,所以可以不使用D-15,直接将F-15
和F-14作为E-15的输入,如附图6中所示。
当前采样的写入位置为极值指针寄存器F-15的输出,当前采样连接到寄存器组A中所有 寄存器的输入端口,寄存器组A中的各个寄存器都有使能端口。将极值指针寄存器F-15的输 出送入4-16译码器G,由G和与门阵列H生成寄存器组A中各个寄存器的使能。地址译码器 G的输出位宽为16,其输出信号分别为G15,G14,…,G1,G0。当4-16译码器的输入取值为s 时,其输出Gs为有效,其他输出为无效,^0,1,…15。当前采样是否要写入寄存器组A中, 还需要根据C-15来判断。与门阵列H将G的输出G15, G14,…,Gl, GO分别与C-15进行相与, 得到H15,H14,…,H1,H0, Hs连接到A-s的使能端口。这样可以根据当前采样是否为新的极 值来控制当前采样是否可以写入到寄存器组A中。
通过上面的操作,经过1000个时钟以后,就可以将16个最大值挑选出来,这些值保存 于寄存器组A中,他们在寄存器组A中的存储位置保存于15个极值指针寄存器中,极值指针 寄存器F-0对应最大值,指针存器F-l对应次大值,……,指针存器F-15对应16个最大值 中的最小值。
利用图6中的装置査找最大值的过程,包括下列步骤
步骤1、根据要査找最大值的个数16,可确定A、 B、 C、 F的深度为16, D、 E的深度为 15, C的宽度为l, D、 E、 F的宽度为4;
步骤2、根据待査找的数据源的个数1000,确定电路的运行时间为1000个时钟,
步骤3、根据査找类型,S卩,要查找最大值选择比较器的输出类型;
步骤4、将寄存器组A全部复位为O,将极值指针寄存器组F分别复位为0, 1, 2,……,
15;
步骤5、每个时钟向本发明的电路输入一个数据(采样);
步骤6、经过1000个时钟后停止本电路,此时16个最大值保存于寄存器组A中,极值指 针寄存器组F内保存的是这些极值的大小顺序。
采用本发明所述的方法和装置,与现有技术相比,本发明克服了软件排序花费时间长, 不能用于实时性要求高的场合的缺点。本发明使用硬件电路来实现数据的排序,此电路每个 时钟可以处理一个数据,目前的集成电路一般可以工作在100MHz以上,对10万个数据进行 排序的时间小于lms,如果使用多套排序电路并行工作,排序时间还可以成倍减少,所以本 电路的实时处理性强,可以满足对处理时间要求比较高的场合。
权利要求
1、一种实现数据排序的电路,包括至少一寄存器(A),至少一比较器(B),至少一n选1的多路选择器(C),至少一第一2选1的多路选择器(D),至少一第二2选1的多路选择器(E),至少一极值指针寄存器(F),一地址译码器(G),一与门阵列(H);其中,所述寄存器(A)用于存储排序过程中当前的极值,寄存器(A)的输出和本电路的数据输入作为比较器(B)的输入;所述比较器(B)输出的比较结果作为n选1的多路选择器(C)的输入;所述极值指针寄存器(F)用于记录当前极值所在寄存器(A)的存储位置及当前极值顺序,并作为n选1的多路选择器(C)的控制端;所述n选1的多路选择器(C)输出本电路输入的数据与当前极值比较的结果,作为第一2选1多路选择器(D)的控制端,极值指针寄存器(F)作为第一2选1多路选择器(D)的输入端;所述n选1的多路选择器(C)的输出作为第二2选1多路选择器(E)的控制端;所述第一2选1多路选择器(D)的输出和极值指针寄存器(F)作为第二2选1多路选择器(E)的输入;所述第二2选1多路选择器(E)的输出作为极值指针寄存器(F)的输入;所述极值指针寄存器(F)作为地址译码器(G)的输入端;所述n选1的多路选择器(C)和地址译码器(G)的输出作为与门阵列(H)的输入;所述与门阵列(H)的输出连接到寄存器(A)的输入使能端。
2、 根据权利要求1所述的实现数据排序的电路,其特征在于,本电路的数据输入连接 到寄存器(A)和比较器(B),将寄存器(A)和极值指针寄存器(F)连接到输出。
3、 根据权利要求l所述的实现数据排序的电路,其特征在于,所述地址译码器(G)和 与门阵列(H)组合为一个带使能端的地址译码器。
4、 一种基于权利要求1所述电路实现数据排序的方法,包括(1) 根据要査找的极值个数n,确定寄存器组(A)、比较器组(B)、 n选l的多路选择 器组(C)、第一组2选1的多路选择器(D)和第二组多路选择器组(E)、极值指针寄存器组(F)的深度,以及第一组2选1的多路选择器(D)和第二组多路选择器(E)、极值指针寄存器组(F)的宽度;(2) 根据数据源的个数m,确定电路的运行时间为m个时钟;(3) 根据査找数值类型,选择比较器(B)的输出类型;(4) 复位寄存器组(A)、极值指针寄存器组(F);(5) 向电路输入采样数据;(6) 经过m个时钟后停止本电路。
5、 根据权利要求4所述的实现数据排序的方法,其特征在于,所述的步骤(1)中, 寄存器组(A)和比较器组(B)的深度为n;n选l的多路选择器组(C),极值指针寄存器组(F)的深度为n; 第一组2选1的多路选择器(D)、第二组2选1的多路选择器(E)的深度为n-l; n选l的多路选择器组(C)中的每个选择器的输出位宽为1;第一组2选1的多路选择器(D)和第二组2选1的多路选择器(E)、极值指针寄存器 (F)组中各单元的输出位宽为大于或等于kg2 (n)的最小整数。
6、 根据权利要求5所述的实现数据排序的方法,其特征在于,所述的步骤(4)中,极 值指针寄存器组(F)中的各寄存器要分别复位为不同的值;査找最大值时,所述寄存器组(A) 全部复位为其最小值,否则寄存器组(A)全部复位为其最大值。
7、 根据权利要求4所述的实现数据排序的方法,其特征在于,所述的步骤(5)具体为 每一个时钟向本电路输入一个采样数据。
全文摘要
本发明公开一种实现数据排序的电路和方法,为解决现有软件排序时间长,不满足实时性要求问题而发明。本发明的电路和方法根据要查找的极值个数n,确定寄存器组、比较器组、n选1的多路选择器组、第一组2选1的多路选择器和第二组多路选择器、极值指针寄存器的深度,及第一组2选1多路选择器和第二组多路选择器、极值指针寄存器组的宽度;根据数据源的个数m,确定电路的运行时间为m个时钟;根据查找数值类型,选择比较器的输出类型;复位寄存器组、极值指针寄存器组;每个时钟周期向电路输入一个采样数据;经过m个时钟后停止本电路,此时寄存器组中保存的即为n个极值。本发明电路和方法,电路实时处理性强,排序时间成倍减少。
文档编号G06F5/06GK101114215SQ200610099538
公开日2008年1月30日 申请日期2006年7月28日 优先权日2006年7月28日
发明者温子瑜 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1