CN1960194A - 排序装置 - Google Patents
排序装置 Download PDFInfo
- Publication number
- CN1960194A CN1960194A CNA2006101376169A CN200610137616A CN1960194A CN 1960194 A CN1960194 A CN 1960194A CN A2006101376169 A CNA2006101376169 A CN A2006101376169A CN 200610137616 A CN200610137616 A CN 200610137616A CN 1960194 A CN1960194 A CN 1960194A
- Authority
- CN
- China
- Prior art keywords
- sequence number
- extreme value
- data
- unit
- module
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种排序装置,其核心结构是,以各种逻辑器件搭建的体现“二分插入法”排序逻辑的体系架构。本发明进一步提供排序装置中序号输出单元和极值队列单元优选的逻辑结构。基于所使用排序方法的特性,使用本发明排序装置只需要对全部数据遍历一次,即可获得所需的极大值队列,大大缩短了多极值请求时的排序时间。
Description
技术领域
本发明涉及数据处理技术领域,具体涉及从一批数据中挑选出最大的若干个值的排序装置,该装置特别适合应用于需要获取数据中多个最大值的情况。
背景技术
在工程应用中,经常会遇到需要从一批数据中挑选出一个或若干个极大值的情况。例如,在宽带码分多址(WCMDA)系统中,移动台进行小区搜索时需要把对主同步信道的2560个码片(CHIP)进行相干计算的结果按照能量进行排序,挑选其中能量最大的32个作为小区的时隙同步头。
现有通常采用的排序芯片是对整组数据进行扫描,保留扫描得到的最大值。对于需要挑选其中若干个极大值的情况,则进行循环扫描:第一次扫描挑选出其中的最大值,第二次扫描挑选出次大值......,依次循环,直到获得需要的极值数目。这种通过循环扫描方式获取极大值的缺点在于,每增加一个极值数目都需要对全部数据扫描一遍,查找需要耗用的时间和需要查找的极值个数成正比,这样,在所需查找极值数目较大的情况下,会导致查找时间的增加。仍以前述WCMDA系统中时隙同步头的查找为例,若需要在2560个能量数据中获得最大的32个,需要耗用2560×32个时钟周期,势必导致移动台小区搜索的延迟。
发明内容
本发明的目的在于提供一种能够快速获取数据中若干个极大值的排序装置。
为达到本发明的目的,所采取的技术方案是:一种排序装置,包括数据存储单元、极值队列单元、比较单元、序号输出单元和状态控制单元;
所述数据存储单元,用于存储进行排序的数据;
所述极值队列单元,用于对应序号队列存储极值数据,并按照序号输出单元的输出序号响应对相应极值数据的操作,所述序号队列长度固定;
所述比较单元,用于对从所述数据存储单元读出的数据和从所述极值队列单元读出的数据进行比较,当前者大于后者时,输出标志一,否则,输出标志二;
所述序号输出单元,用于输出对应于所述极值队列单元中数据位置的序号,并在所述状态控制单元的启动下,按照所述比较单元的比较结果以设定的次数N更新当前的输出序号,
在第m,1≤m≤N-1,次更新时,当所述比较结果为标志一时,将当前输出序号更新为输出序号-2N-1-m,当所述比较结果为标志二时,将当前输出序号更新为输出序号+2N-1-m,
在第N次更新时,当所述比较结果为标志一时,保持当前输出序号不变,当所述比较结果为标志二时,将当前输出序号更新为输出序号+1;
所述状态控制单元,包括初始化模块、取数模块、第一比较控制模块、第二比较控制模块、插入模块;
所述初始化模块,用于对所述极值队列单元中存储的极值数据进行清空,并启动取数模块;
所述取数模块,用于控制从所述数据存储单元按序读取一个数据并将所述序号输出单元的输出序号初始化为所述极值队列单元中的最低位序号,然后启动第一比较控制模块;
所述第一比较控制模块,用于控制从所述数据存储单元读出的数据和当前从所述极值队列单元读出的数据输出至所述比较单元,当所述比较结果为标志一时,启动所述序号输出单元的更新过程并启动所述第二比较控制模块;当所述比较结果为标志二时启动取数模块;
所述第二比较控制模块,用于在所述序号输出单元第m次更新后,控制所述极值队列单元的极值数据输出至所述比较单元,取代之前的极值数据;在所述序号输出单元完成第N次更新后启动插入模块;
所述插入模块,用于将从所述数据存储单元读出的数据按照所述序号输出单元的输出序号与所述序号队列相关联,并将所述极值队列单元中小于该数据的极值数据所对应的序号降低一位,然后启动取数模块。
一种排序装置,包括数据存储单元、极值队列单元、比较单元、序号输出单元和状态控制单元;
所述数据存储单元,用于存储进行排序的数据;
所述极值队列单元,用于对应序号队列存储极值数据,所述序号队列长度固定,按照序号输出单元的输出序号响应对相应极值数据的操作;
所述比较单元,用于对从所述数据存储单元读出的数据和从所述极值队列单元读出的数据进行比较,当前者大于后者时,输出标志一,否则,输出标志二;
所述序号输出单元,用于输出对应于所述极值队列单元中数据位置的序号,并在所述状态控制单元的启动下,按照设定的次数N更新当前的输出序号,
在第m,1≤m≤N-1,次更新时,当所述比较结果为标志一时,将当前输出序号更新为输出序号+2N-1-m;当所述比较结果为标志二时,将当前输出序号更新为输出序号-2N-1-m;
在第N次更新时,当所述比较结果为标志一时,保持当前输出序号不变;当所述比较结果为标志二时,将当前输出序号更新为输出序号-1;
所述状态控制单元,包括初始化模块、取数模块、第一比较控制模块、第二比较控制模块、插入模块,
所述初始化模块,用于对所述极值队列单元中存储的极值数据进行清空,并启动取数模块;
所述取数模块,用于控制从所述数据存储单元按序读取一个数据并将所述序号输出单元的输出序号初始化为所述极值队列单元中的最高位序号,然后启动第一比较控制模块;
所述第一比较控制模块,用于控制从所述数据存储单元读出的数据和当前从所述极值队列单元读出的数据输出至所述比较单元,当所述比较结果为标志一时,启动所述序号输出单元的更新过程并启动所述第二比较控制模块;当所述比较结果为标志二时,启动取数模块;
所述第二比较控制模块,用于在所述序号输出单元第m次更新后,控制所述极值队列单元的极值数据输出至所述比较单元,取代之前的极值数据;在所述序号输出单元完成第N次更新后启动插入模块;
所述插入模块,用于将从所述数据存储单元读出的数据按照所述序号输出单元的输出序号与所述序号队列相关联,并将所述极值队列单元中小于该数据的极值数据所对应的序号增加一位,然后启动取数模块。
采用上述技术方案,本发明有益的技术效果在于:本发明采用按照“二分插入法”组织的体系架构,利用各种逻辑器件搭建成可迅速执行排序操作的硬件装置,基于所使用排序方法的特性,只需要对全部数据遍历一次,即可获得所需的极大值队列,大大缩短了多极值请求时的排序时间。
附图说明
图1是本发明实施例一排序装置结构示意图;
图2是本发明实施例一中状态控制单元的状态间关系示意图;
图3是本发明实施例二排序装置结构示意图;
图4是本发明实施例二中状态控制单元结构示意图;
图5是本发明实施例三排序装置结构示意图;
图6是本发明实施例三中索引寄存器组与极值存储器的关联关系示意图;
图7是本发明实施例三中状态控制单元结构示意图。
下面通过具体实施方式并结合附图对本发明作进一步的详细说明。
具体实施方式
本发明提供了一种排序装置,其核心结构是,以各种逻辑器件搭建的体现现“二分插入法”排序逻辑的体系架构。本发明进一步提供序号输出单元和极值队列单元优选的逻辑结构。以下对本发明装置进行详细说明。
实施例一、一种排序装置,如图1所示,包括数据存储单元101、极值队列单元102、比较单元103、序号输出单元104和状态控制单元105;
数据存储单元101,用于存储进行排序的数据;
极值队列单元102,用于对应序号队列存储极值数据,并按照序号输出单元104的输出序号响应对相应极值数据的操作,所述序号队列长度固定;
比较单元103,用于对从数据存储单元101读出的数据和从极值队列单元102读出的数据进行比较,当前者大于后者时,输出标志一,否则,输出标志二;
序号输出单元104,用于输出对应于极值队列单元102中数据位置的序号,并在状态控制单元105的启动下,按照比较单元103的比较结果以设定的次数N更新当前的输出序号,N的数值可按照序号队列的长度来设定,当序号队列的长度为2L时,N取L+1;序号输出单元104按照下述规则进行更新:
在第m次更新时(1≤m≤N-1),当所述比较结果为标志一时,将当前输出序号更新为输出序号-2N-1-m;当所述比较结果为标志二时,将当前输出序号更新为输出序号+2N-1-m;
在第N次更新时,当所述比较结果为标志一时,保持当前输出序号不变;当所述比较结果为标志二时,将当前输出序号更新为输出序号+1;
状态控制单元105,用于对上述各个模块进行控制,包括:
初始化模块1051,用于对极值队列单元102中存储的极值数据进行清空,并启动取数模块1052;
取数模块1052,用于控制从数据存储单元101按序读取一个数据并将序号输出单元104的输出序号初始化为极值队列单元102中的最低位序号,然后启动第一比较控制模块1053;
第一比较控制模块1053,用于控制从数据存储单元101读出的数据和当前从极值队列单元102读出的数据输出至比较单元103,当所述比较结果为标志一时,启动序号输出单元104的更新过程并启动第二比较控制模块1054;当所述比较结果为标志二时启动取数模块1052;
第二比较控制模块1054,用于在序号输出单元104第m次更新后,控制极值队列单元102的极值数据输出至比较单元103,取代之前的极值数据;在序号输出单元104完成第N次更新后启动插入模块1055;
插入模块1055,用于将从数据存储单元101读出的数据按照序号输出单元104的输出序号与所述序号队列相关联,并将极值队列单元102中小于该数据的极值数据所对应的序号降低一位,然后启动取数模块1052。
基于上述逻辑结构,状态控制单元105的控制模式可用状态机进行描述,如图2所示,包括6个主要状态:
空闲状态:排序电路未被启动时处于空闲状态;
初始化状态:完成一些初始化工作,例如对极值队列单元102中存储的极值数据进行清空,初始化完成后跳转至取数状态;
取数状态:控制从数据存储单元101按序读取一个数据并将序号输出单元104的输出序号初始化为极值队列单元102中的最低位序号,然后跳转至比较状态一;取数状态下,状态控制单元通过取数模块给出数据存储单元的读地址来控制数据的读取,每次从数据存储单元101读数后,数据读取地址都会加1,当遍历完需要进行排序的全部数据后,整个排序过程完成,跳转到空闲状态;
比较状态一:控制从数据存储单元101读出的数据和当前从极值队列单元102读出的数据输出至比较单元103,当所述比较结果为标志一时,启动序号输出单元104的更新过程并跳转至比较状态二;当所述比较结果为标志二时,跳转至取数状态;在此状态下,由于序号输出单元104的输出序号为极值队列单元102中的最低位序号,因此,实际执行的是将数据存储单元101读出的数据与极值队列单元102中与最低位序号对应的极值数据进行比较,若小于该极值数据,则进入取数状态取下一个数据进行比较;若大于该极值数据,则可继续后续的排序插入流程;
比较状态二:在序号输出单元104第m次更新后,控制极值队列单元102的极值数据输出至比较单元103,取代之前的极值数据;在序号输出单元104完成第N次更新后跳转至插入状态;此状态为持续执行的N-1个周期,比较单元103执行N-1次比较,每次比较后序号输出单元104都根据比较结果输出对应新的需要比较的极值数据的序号,并在比较单元103完成最后一次比较后给出插入序号;
插入状态:将从数据存储单元101读出的数据按照序号输出单元104的输出序号与所述序号队列相关联,并将极值队列单元102中小于该数据的极值数据所对应的序号降低一位,然后跳转至取数状态。此状态执行的是按照前面确定的插入序号进行极值数据与序号对应关系的移位,将此次从数据存储单元101中读出的数据变成插入序号对应的极值数据,当然原来与插入序号及其后序号对应的极值数据需要依次将对应序号降低一位。
采用上述实施例中提供的排序装置,在数据存储单元101中输入需要排序的数据后,只需要启动控制单元105执行对全部数据的一次遍历后,即可在极值队列单元102中获得取值按照序号降序排列的一组极大值。各个待排数据在排序处理中的耗时是稳定的,或者为1个时钟周期(该数据小于极值数据中的最小值),或者为N个时钟周期(该数据需要插入)。以前述WCMDA系统中时隙同步头的查找为例,若需要在2560个能量数据中获得最大的32个,采用本发明装置,N为6,即每个数据最多经过6次比较即可确定插入位置,共最多需要2560×6个时钟周期。这是最坏情形下的耗时情况,即数据存储单元101中的数据本身是按照由小到大的顺序存储的,在无序情形下的平均耗时还将远低于该数据。这比采用循环扫描方式的装置需要耗用的2560×32个时钟周期大大缩短了。
当然,也可以调整序号输出单元104,交换不同比较结果时的更新规则,并将初始化输出序号定为最高位序号,使得最终的极值数据取值按照序号升序排列。
下面给出一种序号输出单元采用优化逻辑结构的排序装置的例子。
实施例二、一种排序装置,如图3所示,包括数据存储单元201、极值寄存器202、比较单元203、序号输出单元204和状态控制单元205;
数据存储单元201,用于存储进行排序的数据;
极值寄存器202,用于在固定的若干个访问地址存储极值数据,按照第一选择器2046输出的地址响应对相应极值数据的操作;通常可采用由若干个移位寄存器组成的移位寄存器组作为极值寄存器,各个移位寄存器一一对应的存储极值数据,各移位寄存器的地址即为相应极值数据的访问地址;
比较单元203,用于对从数据存储单元201读出的数据和从极值队列单元202读出的数据进行比较,当前者大于后者时,输出标志一,否则,输出标志二;
序号输出单元204受状态控制单元205的控制启动,按照设定的次数N循环运算,为清楚起见,图3中省略了状态控制单元205与序号输出单元204中各个逻辑器件的连线,序号输出单元204包括:
跳转指针寄存器2041,用于存储跳转指针的值,
访问指针寄存器2042,用于存储输出地址的值,
加法器2043,用于在第1~N-1次更新时,计算访问指针寄存器2042的存储值与跳转指针寄存器2041的存储值的相加值;在第N次更新时,计算访问指针寄存器2042的存储值的加1值,
减法器2044,用于在第1~N次更新时,计算访问指针寄存器2042的存储值与跳转指针寄存器2041的存储值的相减值,
右移位器2045,用于在访问指针寄存器2042的存储值被更新时,将跳转指针寄存器2041中的二进制数据右移一位,使其值变为原来的值除以2;右移位器的移位操作可在更新启动后按照时钟周期自动按时执行,通过时钟周期的同步实现与访问指针寄存器的存储值更新的同步,也可直接受状态控制单元的控制执行操作,
第一选择器2046,用于根据比较单元203当前输出的比较结果,选择加法器2043或减法器2044的计算结果作为当前输出地址,当所述比较结果为标志一时,以减法器2044的计算结果作为当前输出地址;当所述比较结果为标志二时,以加法器2043的计算结果作为当前输出地址;并以当前输出地址更新访问指针寄存器2042的存储值;
状态控制单元205,用于对上述各个模块进行控制,为清楚起见,单独将状态控制单元205的结构在图4中示出,状态控制单元205包括:
初始化模块2051,用于对极值寄存器202中存储的极值数据进行清空,并启动取数模块2052;
取数模块2052,包括读数子模块20521、第一初始子模块20522和第二初始子模块20523;
读数子模块20521,用于控制从数据存储单元201按序读取一个数据;
第一初始子模块20522,用于将存储序号输出单元204的输出地址的访问指针寄存器2042的存储值初始化为极值寄存器202中的最低位地址;
第二初始子模块20523,用于将跳转指针寄存器2041的存储值初始化为2N-2;
第一比较控制模块2053,包括传数子模块20531、启动子模块20532和写数子模块20533;
传数子模块20531,用于控制从数据存储单元201读出的数据和当前从极值寄存器202读出的数据输出至比较单元203;
启动子模块20532,用于当所述比较结果为标志一时,启动序号输出单元204的更新过程并启动第二比较控制模块2054;当所述比较结果为标志二时启动取数模块2052;
写数子模块20533,用于当所述比较结果为标志一时,将从数据存储单元201读出的数据写入极值寄存器202,覆盖相应的极值数据;
第二比较控制模块2054,用于在序号输出单元204第m次更新后,控制极值寄存器202的极值数据输出至比较单元203,取代之前的极值数据;在序号输出单元204完成第N次更新后启动插入模块1055;
插入模块2055,包括关联子模块20551和移位子模块20552;
关联子模块20551,用于将极值寄存器202最低位的极值数据移动到序号输出单元204输出的访问地址;
移位子模块20552,用于将极值寄存器202中小于该被移动数据的极值数据的存储地址减1,然后启动取数模块2052。
基于上述逻辑结构,状态控制单元205的控制模式包括6个主要状态:
空闲状态:排序电路未被启动时处于空闲状态;
初始化状态:完成一些初始化工作,包括对极值寄存器202中存储的极值数据进行清空,初始化完成后跳转至取数状态;
取数状态:控制从数据存储单元201按序读取一个数据,并将访问指针寄存器2042的存储值初始化为极值寄存器202中的最低位地址,将跳转指针寄存器2041的存储值初始化为2N-2,然后跳转至比较状态一;每次从数据存储单元201读数后,数据读取地址都会加1,当遍历完需要进行排序的全部数据后,整个排序过程完成,跳转到空闲状态;
比较状态一:控制从数据存储单元201读出的数据和当前从极值寄存器202读出的数据输出至比较单元203,当所述比较结果为标志一时,将从数据存储单元201读出的数据写入极值寄存器202,覆盖相应的极值数据,同时启动序号输出单元204的更新过程并跳转至比较状态二;当所述比较结果为标志二时,跳转至取数状态;在此状态下,由于访问指针寄存器2042的存储值为极值寄存器202中的最低位地址,因此,实际执行的是将数据存储单元201读出的数据与极值寄存器202中存储于最低位地址的极值数据进行比较,若小于该极值数据,则进入取数状态取下一个数据进行比较;若大于该极值数据,则用新数据覆盖原来位于最低位地址的极值数据,并继续后续的排序插入流程;当然,此状态下也可以不进行新数据的写入,而是等到确定新数据的插入位置时再执行写入;
比较状态二:在访问指针寄存器2042的存储值第m次更新后,控制极值寄存器202的极值数据输出至比较单元203,取代之前的极值数据;在访问指针寄存器2042的存储值完成第N次更新后跳转至插入状态;此状态为持续执行的N-1个周期,比较单元103执行N-1次比较,每次比较后第一选择器2046都根据比较结果输出对应新的需要比较的极值数据的地址,并在比较单元203完成最后一次比较后给出插入地址;
插入状态:将位于极值寄存器202最低位地址的极值数据移动到第一选择器2046输出的插入地址,并将极值寄存器202中小于该数据的极值数据顺次移入低一位的存储地址中,然后跳转至取数状态。此状态执行的是按照前面确定的插入地址进行极值数据的移位。若在比较状态一中未将待插入数据写入极值寄存器的最低位地址,则在此状态下可直接将其写入插入地址,然后将位于原插入地址及以后的数据进行移位,当然,由于存储地址数目固定,因此原来位于最低位地址的极值数据就自然被抛弃了。
为更好的理解本发明,下面以WCDMA中时隙同步头的选择为例来说明实施例二中排序装置的工作过程。简明起见,假定相干能量取值总共有8个,依次为“10、70、50、60、40、20、30、80”,存储在数据存储单元201中。排序目的为获取其中最大的4个值,因此对应的极值寄存器202共有四个存储地址,N=3,排序装置工作过程如下:
A1、电路启动后,状态控制单元205对极值寄存器202清零,此时极值寄存器202状态如下表所示:
地址 | 0 | 1 | 2 | 3 |
极值数据 | 0 | 0 | 0 | 0 |
A2、状态控制单元205控制读取数据存储单元201的第一个数据“10”,将访问指针寄存器2042的存储值初始化为“3”,将跳转指针寄存器2041的存储值初始化为“2”;
A3、比较单元203比较数据“10”与访问指针寄存器2042中的地址“3”对应的极值数据“0”,输出标志一;
A4、状态控制单元205将数据“10”写入极值寄存器202的地址“3”,此时极值寄存器202状态如下表所示:
地址 | 0 | 1 | 2 | 3 |
极值数据 | 0 | 0 | 0 | 10 |
状态控制单元205通知序号输出单元204开始更新;
A5、序号输出单元204执行3次更新;
第一次:加法器2043计算结果为“5”;减法器2044计算结果为“1”;第一选择器2046根据比较单元203当前输出标志一选择减法器2044的计算结果“1”,将“1”更新到访问指针寄存器2042;右移位器2045将跳转指针寄存器2041的值右移为“1”;
比较单元203比较数据“10”与访问指针寄存器2042中的地址“1”对应的极值数据“0”,输出标志一;
第二次:加法器2043计算结果为“2”;减法器2044计算结果为“0”;第一选择器2046根据比较单元203当前输出标志一选择减法器2044的计算结果“0”,将“0”更新到访问指针寄存器2042;右移位器2045将跳转指针寄存器2041的存储值右移为“0”;
比较单元203比较数据“10”与访问指针寄存器2042中存储的地址“0”对应的极值数据“0”,输出标志一;
第三次:加法器2043计算结果为“1”;减法器2044计算结果为“0”;第一选择器2046根据比较单元203当前输出标志一选择减法器2044的计算结果“0”,将“0”更新到访问指针寄存器2042;
A6、状态控制单元205将位于极值寄存器202最低位地址“3”的极值数据“10”移动到第一选择器2046输出的插入地址“0”,并将极值寄存器202中小于该数据的极值数据顺次移入低一位的存储地址中,即,将地址“0”中的数据“0”移到地址“1”,将地址“1”中的数据“0”移到地址“2”,将地址“2”中的数据“0”移到地址“3”;此时极值寄存器202状态如下表所示:
地址 | 0 | 1 | 2 | 3 |
极值数据 | 10 | 0 | 0 | 0 |
A7、状态控制单元205依次控制读取数据存储单元201的第二~五个数据“70、50、60、40”,重复步骤A2~A6,得到极值寄存器202状态如下表所示:
地址 | 0 | 1 | 2 | 3 |
极值数据 | 70 | 60 | 50 | 40 |
Ag、状态控制单元205控制读取数据存储单元201的第六个数据“20”,将访问指针寄存器2042的存储值初始化为“3”,将跳转指针寄存器2041的存储值初始化为“2”;
A9、比较单元203比较数据“20”与访问指针寄存器2042中存储的地址“3”对应的极值数据“40”,输出标志二;
A10、状态控制单元205控制读取数据存储单元201的第七个数据“30”,重复步骤A8~A9,极值寄存器202状态不变;
A11、状态控制单元205控制读取数据存储单元201的第八个数据“80”,重复步骤A2~A6,得到极值寄存器202状态如下表所示:
地址 | 0 | 1 | 2 | 3 |
极值数据 | 80 | 70 | 60 | 50 |
A12、状态控制单元205根据数据存储单元201当前的读地址,判断已遍历所有待排序数据,结束排序过程,此时极值寄存器202中保存的就是所需要的4个极大值。
在上一实施例中,采用极值寄存器充当极值队列单元,排序操作直接对极值数据进行,每次新数据的插入都需要对极值数据进行移位,因此极值寄存器由一组移位寄存器组成,由于数据通常需要占用较大的存储空间,例如WCDMA中的相干能量数据一般为40比特,32个极值数据需要占用的移位寄存器比特数为1280比特,耗费数量较大。以下针对这一问题给出一种极值队列单元采用优化逻辑结构的排序装置的例子,以有效节省所需移位寄存器的容量。
实施例三、一种排序装置,如图5所示,包括数据存储单元301、极值队列单元302、比较单元303、序号输出单元304、状态控制单元305和第三选择器306;
极值队列单元302包括极值存储器3021、索引寄存器组3022和第二选择器3023;序号输出单元304与实施例二中相似,包括跳转指针寄存器3041、访问指针寄存器3042、加法器3043、减法器3044、用作除法器的右移位器3045和第一选择器3046;为清楚起见,图5中省略了状态控制单元305与极值队列单元302和序号输出单元304中各个逻辑器件的连线;
数据存储单元301,用于存储进行排序的数据;
极值队列单元302采用索引式结构实现极值数据与一有序队列的关联,包括:
极值存储器3021,用于存储极值数据,
索引寄存器组3022,包括若干个索引寄存器R0~Rn,用于一一对应的存储极值数据在极值存储器3021中的访问地址,索引寄存器组3022中各个索引寄存器的索引地址(R0~Rn依次对应索引地址0~n)作为关联极值数据的序号队列;
索引寄存器组与极值存储器的关联关系示意图如图6所示,由图6可以看出,这种逻辑结构是通过极值数据的地址按照极值数据的大小关系在索引寄存器组中的有序存放,实现极值数据与索引寄存器的索引地址这一有序队列的关联;若需要改变极值数据与有序队列中某一序号的关联关系,例如将该极值数据的位序前移或后移,不需要对极值数据本身进行移动,只要改变其存储地址对应的索引地址即可,即在索引寄存器组中移动其存储地址。由于极值数据的存储地址通常范围不大,例如32个极值数据仅需要5比特的存储地址长度,因此可大大减少用作索引寄存器的移位寄存器的耗费。
第二选择器3023,用于按照第三选择器306转发的索引地址,选择索引寄存器组3022中相应的索引寄存器,以其值作为极值存储器3021的访问地址;
比较单元303,用于对从数据存储单元301读出的数据和从极值队列单元302读出的数据进行比较,当前者大于后者时,输出标志一,否则,输出标志二;
序号输出单元304中的各个逻辑器件结构关系与实施例二中相同,不再赘述,只是其访问指针寄存器3042中存储的值在本实施例中作为索引地址而不是极值数据的直接访问地址;
第三选择器306,用于按照状态控制单元305的控制,在非空闲状态选择将序号输出单元304输出的索引地址转发至第二选择器3023,在空闲状态选择根据外部提供的输出地址进行极值存储器3021中极值数据的输出;排序装置中第三选择器306的添加,使得计算出的极值数据增加了灵活方便的输出途径;
状态控制单元305,用于对上述各个模块进行控制,为清楚起见,单独将状态控制单元305的结构在图7中示出,状态控制单元305包括:
初始化模块3051,包括清空子模块30511和写入子模块30512;
清空子模块30511,用于对极值队列单元302中存储的极值数据进行清空;
写入子模块30512,用于将所述访问地址依次写入所述索引寄存器,最低位访问地址写入最低位索引地址对应的索引寄存器,并启动取数模块3052。
取数模块3052,包括读数子模块30521、第一初始子模块30522和第二初始子模块30523;
读数子模块30521,用于控制从数据存储单元301按序读取一个数据;
第一初始子模块30522,用于将存储序号输出单元304的输出地址的访问指针寄存器3042的存储值初始化为极值寄存器302中的最低位地址;
第二初始子模块30523,用于将跳转指针寄存器3041的存储值初始化为2N-2;
第一比较控制模块3053,包括传数子模块30531、启动子模块30532和写数子模块30533;
传数子模块20531,用于控制从数据存储单元301读出的数据和当前从极值队列单元302读出的数据输出至比较单元303;
启动子模块30532,用于当所述比较结果为标志一时,启动序号输出单元304的更新过程并启动第二比较控制模块3054;当所述比较结果为标志二时启动取数模块3052;
写数子模块30533,用于当所述比较结果为标志一时,将从数据存储单元301读出的数据写入极值队列单元302的极值存储器3021,覆盖相应的极值数据;
第二比较控制模块3054,用于在序号输出单元304第m次更新后,控制极值存储器3021的极值数据输出至比较单元303,取代之前的极值数据;在序号输出单元304完成第N次更新后启动插入模块3055;
插入模块3055,包括关联子模块30551和移位子模块30552;
关联子模块30551,用于将对应最低位索引地址的索引寄存器中存储的访问地址移动到序号输出单元304输出的索引地址所对应的索引寄存器中;
移位子模块30552,用于将之前存储在该被移入数据的索引寄存器及其之后的索引寄存器中存储的访问地址顺次移动到低一位的索引寄存器中,然后启动取数模块3052。
基于上述逻辑结构,状态控制单元305的控制模式包括6个主要状态:
空闲状态:排序电路未被启动时处于空闲状态;
初始化状态:完成一些初始化工作,包括对极值存储器302中存储的极值数据进行清空,将极值存储器3021的访问地址依次写入索引寄存器组3022的各个索引寄存器,最低位访问地址写入最低位索引地址对应的索引寄存器,即,对R0~Rn依次写入0~n,初始化完成后跳转至取数状态;。
取数状态:控制从数据存储单元301按序读取一个数据,并将访问指针寄存器3042的存储值初始化为索引寄存器组3022的最低位索引地址,将跳转指针寄存器3041的存储值初始化为2N-2,然后跳转至比较状态一;每次从数据存储单元301读数后,数据读取地址都会加1,当遍历完需要进行排序的全部数据后,整个排序过程完成,跳转到空闲状态;
比较状态一:控制从数据存储单元301读出的数据和当前从极值存储器3021读出的数据输出至比较单元303,当所述比较结果为标志一时,将从数据存储单元301读出的数据写入极值存储器3021,覆盖相应的极值数据,同时启动序号输出单元304的更新过程并跳转至比较状态二;当所述比较结果为标志二时,跳转至取数状态;在此状态下,由于访问指针寄存器3042的存储值为最低位索引地址,对应极值存储器3021中的最小值,因此,实际执行的是将数据存储单元301读出的数据与当前最小极值数据进行比较,若小于该极值数据,则进入取数状态取下一个数据进行比较;若大于该极值数据,则用新数据覆盖原来的极值数据,并继续后续的排序插入流程;
比较状态二:在访问指针寄存器3042的存储值第m次更新后,控制极值存储器3021的极值数据输出至比较单元303,取代之前的极值数据;在访问指针寄存器3042的存储值完成第N次更新后跳转至插入状态;此状态为持续执行的N-1个周期,比较单元303执行N-1次比较,每次比较后第一选择器3046都根据比较结果输出对应新的需要比较的极值数据的索引地址,并在比较单元303完成最后一次比较后给出插入用索引地址;
插入状态:将对应最低位索引地址的索引寄存器中存储的访问地址移动到序号输出单元304输出的索引地址所对应的索引寄存器中,并将之前存储在该插入用索引地址及其之后索引地址所对应的索引寄存器中存储的访问地址顺次移动到低一位的索引寄存器中,然后跳转至取数状态。此状态执行的是按照前面确定的插入用索引地址进行极值数据的访问地址的移位。
以上对本发明所提供的排序装置进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (14)
1、一种排序装置,其特征在于:包括数据存储单元、极值队列单元、比较单元、序号输出单元和状态控制单元;
所述数据存储单元,用于存储进行排序的数据;
所述极值队列单元,用于对应序号队列存储极值数据,并按照序号输出单元的输出序号响应对相应极值数据的操作,所述序号队列长度固定;
所述比较单元,用于对从所述数据存储单元读出的数据和从所述极值队列单元读出的数据进行比较,当前者大于后者时,输出标志一,否则,输出标志二;
所述序号输出单元,用于输出对应于所述极值队列单元中数据位置的序号,并在所述状态控制单元的启动下,按照所述比较单元的比较结果以设定的次数N更新当前的输出序号,
在第m,1≤m≤N-1,次更新时,当所述比较结果为标志一时,将当前输出序号更新为输出序号-2N-1-m,当所述比较结果为标志二时,将当前输出序号更新为输出序号+2N-1-m,
在第N次更新时,当所述比较结果为标志一时,保持当前输出序号不变,当所述比较结果为标志二时,将当前输出序号更新为输出序号+1;
所述状态控制单元,包括初始化模块、取数模块、第一比较控制模块、第二比较控制模块、插入模块;
所述初始化模块,用于对所述极值队列单元中存储的极值数据进行清空,并启动取数模块;
所述取数模块,用于控制从所述数据存储单元按序读取一个数据并将所述序号输出单元的输出序号初始化为所述极值队列单元中的最低位序号,然后启动第一比较控制模块;
所述第一比较控制模块,用于控制从所述数据存储单元读出的数据和当前从所述极值队列单元读出的数据输出至所述比较单元,当所述比较结果为标志一时,启动所述序号输出单元的更新过程并启动所述第二比较控制模块;当所述比较结果为标志二时启动取数模块;
所述第二比较控制模块,用于在所述序号输出单元第m次更新后,控制所述极值队列单元的极值数据输出至所述比较单元,取代之前的极值数据;在所述序号输出单元完成第N次更新后启动插入模块;
所述插入模块,用于将从所述数据存储单元读出的数据按照所述序号输出单元的输出序号与所述序号队列相关联,并将所述极值队列单元中小于该数据的极值数据所对应的序号降低一位,然后启动取数模块。
2、根据权利要求1所述的排序装置,其特征在于:所述序号输出单元包括跳转指针寄存器、访问指针寄存器、加法器、减法器、除法器和第一选择器;
所述跳转指针寄存器,用于存储跳转指针的值;
所述访问指针寄存器,用于存储所述输出序号的值;
所述加法器,用于在第1~N-1次更新时,计算所述访问指针寄存器的存储值与所述跳转指针寄存器的存储值的相加值,在第N次更新时,计算所述访问指针寄存器的存储值的加1值;
所述减法器,用于在第1~N次更新时,计算所述访问指针寄存器的存储值与所述跳转指针寄存器的存储值的相减值;
所述除法器,用于在所述访问指针寄存器的存储值被更新时,将所述跳转指针寄存器的存储值除以2;
所述第一选择器,用于根据所述比较单元当前输出的比较结果,选择所述加法器或减法器的计算结果作为当前输出序号,当所述比较结果为标志一时,以减法器的计算结果作为当前输出序号,当所述比较结果为标志二时,以加法器的计算结果作为当前输出序号,并以当前输出序号更新所述访问指针寄存器的存储值。
3、根据权利要求2所述的排序装置,其特征在于:所述取数模块包括读数子模块、第一初始子模块和第二初始子模块;
所述读数子模块,用于控制从所述数据存储单元按序读取一个数据;
所述第一初始子模块,用于将存储所述序号输出单元的输出序号的访问指针寄存器的存储值初始化为所述极值队列单元中的最低位序号;
所述第二初始子模块,用于将所述跳转指针寄存器的存储值初始化为2N-2。
4、根据权利要求3所述的排序装置,其特征在于:所述除法器为右移位器,用于在所述访问指针寄存器的存储值被更新时,将所述跳转指针寄存器中的二进制数据右移一位。
5、根据权利要求1~4任意一项所述的排序装置,其特征在于:所述极值队列单元为极值寄存器,所述序号队列中的序号为所述极值寄存器中极值数据的访问地址。
6、根据权利要求5所述的排序装置,其特征在于:所述第一比较控制模块包括传数子模块、启动子模块和写数子模块;
所述传数子模块,用于控制从所述数据存储单元读出的数据和当前从所述极值寄存器读出的数据输出至所述比较单元;
所述启动子模块,用于当所述比较结果为标志一时,启动所述序号输出单元的更新过程并启动所述第二比较控制模块;当所述比较结果为标志二时启动所述取数模块;
所述写数子模块,用于当所述比较结果为标志一时,将从所述数据存储单元读出的数据写入所述极值寄存器,覆盖相应的极值数据。
7、根据权利要求6所述的排序装置,其特征在于:所述插入模块包括关联子模块和移位子模块;
所述关联子模块,用于将所述极值寄存器最低位的极值数据移动到所述序号输出单元输出的访问地址;
所述移位子模块,用于将所述极值寄存器中小于该被移动数据的极值数据的存储地址减1,然后启动取数模块。
8、根据权利要求5所述的排序装置,其特征在于:所述插入模块包括关联子模块和移位子模块;
所述关联子模块,用于将从所述数据存储单元读出的数据写入所述序号输出单元输出的访问地址;
所述移位子模块,用于将所述极值寄存器中小于该被移动数据的极值数据的存储地址减一,然后启动取数模块。
9、根据权利要求1~4任意一项所述的排序装置,其特征在于:所述极值队列单元包括极值存储器、索引寄存器组和第二选择器,
所述极值存储器,用于存储极值数据;
所述索引寄存器组,包括与所述序号队列中序号的数目相同的索引寄存器,用于一一对应地存储极值数据在所述极值存储器中的访问地址,所述序号队列中的序号为对应所述索引寄存器组中各个索引寄存器的索引地址;
所述第二选择器,用于按照序号输出单元输出的索引地址,选择所述索引寄存器组中相应的索引寄存器,以其存储值作为所述极值存储器的访问地址。
10、根据权利要求9所述的排序装置,其特征在于:所述初始化模块包括清空子模块和写入子模块;
所述清空子模块,用于对所述极值队列单元中存储的极值数据进行清空;
所述写入子模块,用于将所述访问地址依次写入所述索引寄存器,最低位访问地址写入最低位索引地址对应的索引寄存器,并启动取数模块。
11、根据权利要求10所述的排序装置,其特征在于:所述第一比较控制模块包括传数子模块、启动子模块和写数子模块;
所述传数子模块,用于控制从所述数据存储单元读出的数据和当前从所述极值队列单元读出的数据输出至所述比较单元;
所述启动子模块,用于当所述比较结果为标志一时,启动所述序号输出单元的更新过程并启动所述第二比较控制模块;当所述比较结果为标志二时启动所述取数模块;
所述写数子模块,用于当所述比较结果为标志一时,将从所述数据存储单元读出的数据写入所述极值存储器,覆盖相应的极值数据;
12、根据权利要求11所述的排序装置,其特征在于:所述插入模块包括关联子模块和移位子模块;
所述关联子模块,用于将对应最低位索引地址的索引寄存器中的访问地址移动到所述序号输出单元输出的索引地址所对应的索引寄存器中;
所述移位子模块,用于将之前存储在该被移入数据的索引寄存器及其之后的索引寄存器中的访问地址顺次移动到低一位的索引寄存器中。
13、根据权利要求1~4任意一项所述的排序装置,其特征在于:还包括第三选择器;
所述第三选择器,用于按照所述状态控制单元的控制选择将所述序号输出单元的输出序号转发至所述极值队列单元,或者根据外部提供的输出地址进行所述极值队列单元中极值数据的输出。
14、一种排序装置,其特征在于:包括数据存储单元、极值队列单元、比较单元、序号输出单元和状态控制单元;
所述数据存储单元,用于存储进行排序的数据;
所述极值队列单元,用于对应序号队列存储极值数据,所述序号队列长度固定,按照序号输出单元的输出序号响应对相应极值数据的操作;
所述比较单元,用于对从所述数据存储单元读出的数据和从所述极值队列单元读出的数据进行比较,当前者大于后者时,输出标志一,否则,输出标志二;
所述序号输出单元,用于输出对应于所述极值队列单元中数据位置的序号,并在所述状态控制单元的启动下,按照设定的次数N更新当前的输出序号,
在第m,1≤m≤N-1,次更新时,当所述比较结果为标志一时,将当前输出序号更新为输出序号+2N-1-m;当所述比较结果为标志二时,将当前输出序号更新为输出序号-2N-1-m;
在第N次更新时,当所述比较结果为标志一时,保持当前输出序号不变;当所述比较结果为标志二时,将当前输出序号更新为输出序号-1;
所述状态控制单元,包括初始化模块、取数模块、第一比较控制模块、第二比较控制模块、插入模块,
所述初始化模块,用于对所述极值队列单元中存储的极值数据进行清空,并启动取数模块;
所述取数模块,用于控制从所述数据存储单元按序读取一个数据并将所述序号输出单元的输出序号初始化为所述极值队列单元中的最高位序号,然后启动第一比较控制模块;
所述第一比较控制模块,用于控制从所述数据存储单元读出的数据和当前从所述极值队列单元读出的数据输出至所述比较单元,当所述比较结果为标志一时,启动所述序号输出单元的更新过程并启动所述第二比较控制模块;当所述比较结果为标志二时,启动取数模块;
所述第二比较控制模块,用于在所述序号输出单元第m次更新后,控制所述极值队列单元的极值数据输出至所述比较单元,取代之前的极值数据;在所述序号输出单元完成第N次更新后启动插入模块;
所述插入模块,用于将从所述数据存储单元读出的数据按照所述序号输出单元的输出序号与所述序号队列相关联,并将所述极值队列单元中小于该数据的极值数据所对应的序号提高一位,然后启动取数模块。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006101376169A CN100525133C (zh) | 2006-10-31 | 2006-10-31 | 排序装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006101376169A CN100525133C (zh) | 2006-10-31 | 2006-10-31 | 排序装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1960194A true CN1960194A (zh) | 2007-05-09 |
CN100525133C CN100525133C (zh) | 2009-08-05 |
Family
ID=38071709
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2006101376169A Expired - Fee Related CN100525133C (zh) | 2006-10-31 | 2006-10-31 | 排序装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100525133C (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102184214A (zh) * | 2011-05-04 | 2011-09-14 | 东南大学 | 一种数据分组快速查找定位法 |
CN103544012A (zh) * | 2013-10-24 | 2014-01-29 | 杭州安恒信息技术有限公司 | 一种数列相位差比较差别的方法 |
CN106446295A (zh) * | 2016-11-23 | 2017-02-22 | 努比亚技术有限公司 | 数据排序方法及装置 |
CN106775573A (zh) * | 2016-11-23 | 2017-05-31 | 北京电子工程总体研究所 | 一种基于fpga的潜在目标排序方法 |
CN108241091A (zh) * | 2016-12-27 | 2018-07-03 | 北京普源精电科技有限公司 | 利用频谱仪进行2fsk信号峰值搜索的方法及频谱仪 |
-
2006
- 2006-10-31 CN CNB2006101376169A patent/CN100525133C/zh not_active Expired - Fee Related
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102184214A (zh) * | 2011-05-04 | 2011-09-14 | 东南大学 | 一种数据分组快速查找定位法 |
CN103544012A (zh) * | 2013-10-24 | 2014-01-29 | 杭州安恒信息技术有限公司 | 一种数列相位差比较差别的方法 |
CN103544012B (zh) * | 2013-10-24 | 2017-04-26 | 杭州安恒信息技术有限公司 | 一种数列相位差比较差别的方法 |
CN106446295A (zh) * | 2016-11-23 | 2017-02-22 | 努比亚技术有限公司 | 数据排序方法及装置 |
CN106775573A (zh) * | 2016-11-23 | 2017-05-31 | 北京电子工程总体研究所 | 一种基于fpga的潜在目标排序方法 |
CN108241091A (zh) * | 2016-12-27 | 2018-07-03 | 北京普源精电科技有限公司 | 利用频谱仪进行2fsk信号峰值搜索的方法及频谱仪 |
Also Published As
Publication number | Publication date |
---|---|
CN100525133C (zh) | 2009-08-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1256732C (zh) | 快闪存储器及其控制方法 | |
CN1069423C (zh) | 排序系统和方法 | |
CN1154928C (zh) | 用于多任务设施信息处理系统的资源管理方法和设备 | |
CN1253806C (zh) | 仲裁电路和数据处理系统 | |
CN1271517C (zh) | 任务切换装置、方法和程序 | |
CN1763731A (zh) | 高速缓冲存储器系统 | |
CN1960194A (zh) | 排序装置 | |
CN1306414C (zh) | 闪速存储器和闪速存储器的映射控制设备和方法 | |
CN1783723A (zh) | 时钟分频电路 | |
CN1197082C (zh) | 使用存储器的方法、两维数据存取存储器以及操作处理设备 | |
CN1928824A (zh) | 一种加载fpga目标程序的方法及系统 | |
CN100341009C (zh) | 在管线微处理器使用卷标以执行结合写入的装置及方法 | |
CN1183462C (zh) | 可变流水线级数的数据处理装置 | |
CN1419192A (zh) | 中间代码预处理、执行装置及执行系统及计算机程序产品 | |
CN1381797A (zh) | 高速信息检索系统 | |
CN1893282A (zh) | 一跨序列排序涡轮码系统和其操作方法 | |
CN1862534A (zh) | 静态范围匹配表的管理维护方法 | |
CN1133454A (zh) | 半导体集成电路 | |
CN1199243A (zh) | 模块合成装置及模块合成方法 | |
CN1734415A (zh) | 分枝预测装置及分枝预测方法 | |
CN1967720A (zh) | 半导体存储器件及其控制方法 | |
CN1427336A (zh) | 微处理器 | |
CN1598797A (zh) | 实时处理器系统及控制方法 | |
CN1334512A (zh) | 堆栈式寄存器堆及其控制方法 | |
CN1716182A (zh) | 地址创建器和算术电路 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20090805 Termination date: 20151031 |
|
EXPY | Termination of patent right or utility model |