一种电力物联数据可变长归并排序实现方法转让专利

申请号 : CN202010196564.2

文献号 : CN111443891B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 官国飞徐妍宋庆武蒋超陈志明蒋峰

申请人 : 江苏方天电力技术有限公司

摘要 :

本发明公开了一种电力物联数据可变长归并排序实现方法,包括待排序队列A、待排序队列B、比较器、读取控制模块和排序结果存储队列,待排序队列A与待排序队列B分别存储了已按一定规则排序的数据队列,对于待排序队列A每次读出的数据锁存在数据data_A,待排序队列B每次读出的数锁存在数据data_B,data_A与data_B送入比较器进行比较并获得比较结果,若数据data_A的数大于等于数据data_B,则通过读取控制逻辑将数据data_A写入排序结果队列中,将数据data_B锁存,继续读取待排序队列A的数据依次与待排序队列B锁存数据data_B送入比较器进行比较并获得比较结果,重复上述过程,直至将两待排序队列归并为一个有序队列。本发明在能够满足时序要求的同时,能够满足海量数据的排序处理需求。

权利要求 :

1.一种电力物联数据可变长归并排序实现方法,其特征在于,采用排序系统实现电力物联数据可变长归并排序实现方法,排序系统包括待排序队列A、待排序队列B、比较器、读取控制模块和排序结果存储队列;其中,所述待排序队列A与待排序队列B采用首数据预读模式,所述待排序队列A和所述待排序队列B中分别存储了已按一定规则排序的数据队列,所述待排序队列A与待排序队列B分别输出待排序数据data_A、data_B以及本次排序数据是否为最后一个的标志位last_A、last_B;

其中对于待排序队列A每次读出的数据锁存在数据data_A,待排序队列B每次读出的数锁存在数据data_B,data_A与data_B送入比较器进行比较并获得比较结果,如果数据data_A的数大于等于数据data_B,则通过读取控制模块将数据data_A写入排序结果队列中,将数据data_B锁存,继续读取待排序队列A的数据依次与待排序队列B锁存数据data_B送入比较器进行比较并获得比较结果,重复上述过程,直至将两待排序队列归并为一个有序队列并存储在排序结果存储队列,设排序结果存储队列最后一个数据为数据标志位last_flag;读取控制模块分别输出排序结果存储队列的写使能信号result_fifo_wena、排序结果数据result_fifo_data以及本次排序结果队列最后一个数据标志位last_flag;

所述比较器完成待排序数据data_A与data_B比较,需要K个时钟周期,所述K≥1;

所述待排序队列A与待排序队列B输出标志待排序队列内部FIFO是否为空的标志位fifo_empty_A、fifo_empty_B,比较器输出比较结果A_first,读取控制模块分别根据数据状态信号fifo_empty_A、last_A、fifo_empty_B、last_B以及比较器的输出结果A_first信号向待排序队列A和待排序队列B输出读使能信号fifo_rena_A、fifo_rena_B,排序结果存储队列内部FIFO将满时向读取控制模块输出排序结果队列满信号result_fifo_prog_full;设置fifo_rena_A逻辑与last_A为a_fifo_finish,设置fifo_rena_B逻辑与last_B为b_fifo_finish;所述读取控制模块包括以下步骤:

3‑1)等待待排序队列内部FIFO是否为空的标志位fifo_empty_A、fifo_empty_B以及result_fifo_prog_full都为无效,则所述待排序队列A和待排序队列B都有数据要排序,将数据data_A,data_B输入到比较器中,跳转到步骤3‑2);

3‑2)检测a_fifo_finish与b_fifo_finish是否为高电平,若a_fifo_finish和b_fifo_finish都为低电平则转到3‑3);若a_fifo_finish和b_fifo_finish有一个为高电平则跳转到3‑4);若a_fifo_finish和b_fifo_finish都为高电平则转到3‑5);

3‑3)等待K个时钟节拍延迟,然后对A_first信号电平进行检测,若为高电平,则将fifo_rena_B设置为高电平,fifo_rena_A设置为低电平,读取待排序队列B下一次排序数据data_B;否则把fifo_rena_A设置为高电平, fifo_rena_B设置为低电平,读取待排序队列A下一次排序数据data_A;跳转到步骤3‑2);

3‑4) 若a_fifo_finish为高电平,b_fifo_finish为低电平,则fifo_rena_A置低电平,转到步骤3‑6)若b_fifo_finish为高电平,a_fifo_finish为低电平,则fifo_rena_B置低电平,转到步骤3‑7);

3‑5)判断A_first是否为高电平,若A_first为高电平则将data_B写入排序结果队列,等待K个时钟延迟,将data_A写入排序结果队列,同时设置last_flag;若A_first为低电平则将data_B写入排序结果队列,等待K个时钟延迟,将data_A写入排序结果队列,同时设置last_flag,结束本次归并排序,跳转到步骤3‑1),重复上述过程;

3‑6) 若检测到b_fifo_finish为高电平,则将fifo_rena_B置为低电平,同时设置last_flag,结束本次归并排序,跳转到步骤1),重复上述过程;否则,fifo_rena_B置高电平;

3‑7) 若检测到a_fifo_finish为高电平,则fifo_rena_A置低电平,同时设置last_flag,结束本次归并排序,跳转到步骤1),重复上述过程;否则,fifo_rena_A置高电平。

2.如权利要求1所述的一种电力物联数据可变长归并排序实现方法,其特征在于,所述排序结果存储队列的写使能信号result_fifo_wena信号由所述读使能信号fifo_rena_A与所述fifo_rena_B信号通过逻辑或产生,若fifo_rena_A为高电平则选择data_A作为排序结果数据result_fifo_wdata写入排序结果存储队列,否则选择data_B。

说明书 :

一种电力物联数据可变长归并排序实现方法

技术领域

[0001] 本发明涉及电气工程和计算机通信领域,特别是一种电力物联数据可变长归并排序实现方法。

背景技术

[0002] 排序算法在科学技术领域已经有了极其详尽的研究,已有许多成熟的排序算法,近年来, 在不同的应用下也提出了多种基于的排序方法,根据应用的不同,排序一般分为两类,基于网络的排序和基于线性数组的排序。基于网络的排序一般使用两输入的交换比较器来排序,采用固定大小的排序网络,分为输入队列,乒乓排序网络,和输出检测模块等。基于线性数组的排序基于可扩展的线性数组,采用比较插入单元,每个单元包含比较器,乘法器和控制单元,可扩展线性数组包含一系列的单元。归并排序是建立在归并操作上的一种有效排序算法,归并操作是将两个或两个以上有序队列合并成一组新的有序表,其实现方法属于基于网络的排序方法,现有的归并排序方法其输入队列是固定的,无法对不同长度队列归并比较排序,无法满足电力物联数据的数据库SQL语句的排序需求。现有技术中,没有对归并排序队列不同长情况下归并进行优化。

发明内容

[0003] 本发明所要解决的技术问题是克服现有技术的不足而提供一种电力物联数据可变长归并排序实现方法,本发明提供一种变长归并排序实现方法,本发明通过对两待排序队列数据比较结果,进行灵活的读取控制,实现任意队列长度的队列两两归并,优化了电力物联数据的归并算法的实现方法。
[0004] 本发明为解决上述技术问题采用以下技术方案:
[0005] 根据本发明提出的一种电力物联数据可变长归并排序实现方法,采用排序系统实现电力物联数据可变长归并排序实现方法,排序系统包括待排序队列A、待排序队列B、比较器、读取控制模块和排序结果存储队列。
[0006] 所述待排序队列A与待排序队列B采用首数据预读模式,所述待排序队列A和所述待排序队列B中分别存储了已按一定规则排序的数据队列,所述待排序队列A与待排序队列B分别输出待排序数据data_A、data_B以及本次排序数据是否为最后一个的标志位last_A、 last_B;
[0007] 其中对于待排序队列A每次读出的数据锁存在数据data_A,待排序队列B每次读出的数锁存在数据data_B,data_A与data_B送入比较器进行比较并获得比较结果,如果数据data_A 的数大于等于数据data_B,则通过读取控制模块将数据data_A写入排序结果队列中,将数据data_B锁存,继续读取待排序队列A的数据依次与待排序队列B锁存数据data_B送入比较器进行比较并获得比较结果,重复上述过程,直至将两待排序队列归并为一个有序队列并存储在排序结果存储队列,设排序结果存储队列最后一个数据为数据标志位last_flag;读取控制模块分别输出排序结果存储队列的写使能信号result_fifo_wena、排序结果数据 result_fifo_data以及本次排序结果队列最后一个数据标志位last_flag。
[0008] 作为本发明所述的一种电力物联数据可变长归并排序实现方法进一步优化方案,所述比较器完成待排序数据data_A与data_B比较,需要K个时钟周期,所述K≥1。
[0009] 作为本发明所述的一种电力物联数据可变长归并排序实现方法进一步优化方案,所述待排序队列A与待排序队列B输出标志待排序队列内部FIFO是否为空的标志位fifo_empty_A、 fifo_empty_B,比较器输出比较结果A_first,读取控制模块分别根据数据状态信号 fifo_empty_A、last_A、fifo_empty_B、last_B以及比较器的输出结果A_first信号向待排序队列A和待排序队列B输出读使能信号fifo_rena_A、fifo_rena_B,排序结果存储队列内部FIFO将满时向读取控制模块输出排序结果队列满信号result_fifo_prog_full;设置 fifo_rena_A逻辑与last_A为a_fifo_finish,设置fifo_rena_B逻辑与last_B为 b_fifo_finish;所述读取控制模块包括以下步骤:
[0010] 3‑1)等待待排序队列内部FIFO是否为空的标志位fifo_empty_A、fifo_empty_B以及 result_fifo_prog_full都为无效,则所述待排序队列A和待排序队列B都有数据要排序,将数据data_A,data_B输入到比较器中,跳转到步骤3‑2);
[0011] 3‑2)检测a_fifo_finish与b_fifo_finish是否为高电平,若a_fifo_finish和 b_fifo_finish都为低电平则转到3‑3);若a_fifo_finish和b_fifo_finish有一个为高电平则跳转到3‑4);若a_fifo_finish和b_fifo_finish都为高电平则转到3‑5);
[0012] 3‑3)等待K个时钟节拍延迟,然后对A_first信号电平进行检测,若为高电平,则将 fifo_rena_B设置为高电平,fifo_rena_A设置为低电平,读取待排序队列B下一次排序数据 data_B;否则把fifo_rena_A设置为高电平,fifo_rena_B设置为低电平,读取待排序队列A 下一次排序数据data_A;跳转到步骤3‑2);
[0013] 3‑4)若a_fifo_finish为高电平,b_fifo_finish为低电平,则fifo_rena_A置低电平,转到步骤3‑6)若b_fifo_finish为高电平,a_fifo_finish为低电平,则fifo_rena_B置低电平,转到步骤3‑7);
[0014] 3‑5)判断A_first是否为高电平,若A_first为高电平则将data_B写入排序结果队列,等待K个时钟延迟,将data_A写入排序结果队列,同时设置last_flag;若A_first为低电平则将data_B写入排序结果队列,等待K个时钟延迟,将data_A写入排序结果队列,同时设置last_flag,结束本次归并排序,跳转到步骤3‑1),重复上述过程;
[0015] 3‑6)若检测到b_fifo_finish为高电平,则将fifo_rena_B置为低电平,同时设置 last_flag,结束本次归并排序,跳转到步骤1),重复上述过程;否则,fifo_rena_B置高电平;
[0016] 3‑7)若检测到a_fifo_finish为高电平,则fifo_rena_A置低电平,同时设置 last_flag,结束本次归并排序,跳转到步骤1),重复上述过程;否则,fifo_rena_A置高电平。
[0017] 作为本发明所述的一种电力物联数据可变长归并排序实现方法进一步优化方案,所述排序结果存储队列的写使能信号result_fifo_wena信号由所述读使能信号fifo_rena_A与所述 fifo_rena_B信号通过逻辑或产生,若fifo_rena_A为高电平则选择data_A作为排序结果数据result_fifo_wdata写入排序结果存储队列,否则选择data_B。
[0018] 本发明采用以上技术方案与现有技术相比,具有以下技术效果:
[0019] (1)本发明提供一种变长归并排序实现方法,本发明通过对两待排序队列数据比较结果,进行灵活的读取控制,实现任意队列长度的队列两两归并,优化了电力物联数据的归并算法的实现方法。
[0020] (2)克服了传统归并排序实现方法输入队列固定长度的弊端。

附图说明

[0021] 图1是归并排序的系统结构框图。
[0022] 图2是实施例一波形图。
[0023] 图3是实施例二波形图。
[0024] 图4是实施例三波形图。

具体实施方式

[0025] 下面结合附图对本发明的技术方案做进一步的详细说明:
[0026] 以下描述中,为了说明而不是为了限定,提出了诸如特定内部程序、技术之类的具体细节,以便透彻理解本发明实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本发明。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本发明的描述。
[0027] 参见图1,本发明针对电力物联数据的变长归并排序实现方法的操作步骤如下:
[0028] 等待待排序队列内部FIFO是否为空的标志位fifo_empty_A、fifo_empty_B以及result_fifo_prog_full都为无效,则所述待排序队列A和待排序队列B都有数据要排序,设置fifo_rena_A逻辑与last_A为a_fifo_finish,设置fifo_rena_B逻辑与last_B为 b_fifo_finish。result_fifo_wena由fifo_rena_A逻辑或fifo_rena_B产生,若 fifo_rena_A为高电平则选择data_A作为排序结果数据result_fifo_wdata写入排序结果存储队列,否则选择data_B。
[0029] 1)等待待排序队列内部FIFO是否为空的标志位fifo_empty_A、fifo_empty_B以及 result_fifo_prog_full都为无效,则所述待排序队列A和待排序队列B都有数据要排序,将数据data_A,data_B输入到比较器中,跳转到步骤2);
[0030] 2)检测a_fifo_finish与b_fifo_finish是否为高电平,若a_fifo_finish和 b_fifo_finish都为低电平则转到3);若a_fifo_finish和b_fifo_finish有一个为高电平则跳转到4);若a_fifo_finish和b_fifo_finish都为高电平则转到5);
[0031] 3)等待K个时钟节拍延迟,然后对A_first信号电平进行检测,若为高电平,则将 fifo_rena_B设置为高电平,fifo_rena_A设置为低电平,读取待排序队列B下一次排序数据 data_B;否则把fifo_rena_A设置为高电平,fifo_rena_B设置为低电平,读取待排序队列A 下一次排序数据data_A。跳转到步骤2) 。
[0032] 4)若a_fifo_finish为高电平,b_fifo_finish为低电平,则fifo_rena_A置低电平,转到步骤6)若b_fifo_finish为高电平,a_fifo_finish为低电平,则fifo_rena_B置低电平,转到步骤7)。
[0033] 5)判断A_first是否为高电平,若A_first为高电平则将data_B写入排序结果队列,等待K个时钟延迟,将data_A写入排序结果队列,同时设置last_flag;若A_first为低电平则将data_B写入排序结果队列,等待K个时钟延迟,将data_A写入排序结果队列,同时设置last_flag,结束本次归并排序,跳转到步骤1),重复上述过程。
[0034] 6)若检测到b_fifo_finish为高电平,则将fifo_rena_B置为低电平,同时设置 last_flag;结束本次归并排序,跳转到步骤1),重复上述过程。否则,fifo_rena_B置高电平。
[0035] 7)若检测到a_fifo_finish为高电平,则fifo_rena_A置低电平,同时设置last_flag;结束本次归并排序,跳转到步骤1),重复上述过程。否则,fifo_rena_A置高电平。
[0036] 实施例一
[0037] 参考图2。待排序队列A(8)数据量1、待排序队列B(9)数据量1进行降序归并排序。定义A_first为高电平,则data_A=data_B。
[0038] 1)当待排序队列内部FIFO标志位fifo_empty_A、fifo_empty_B以及result_fifo_prog_full都为无效,所述待排序队列A和待排序队列B都有数据要排序,跳转到步骤2);
[0039] 2)数据data_A:8,数据data_B:9输入到比较器,等待2个时钟节拍延迟,检测到A_first 信号为高电平,则经过4个时钟节拍延迟,将fifo_rena_B设置为高电平,fifo_rena_A设置为低电平,经1个时钟延迟,检测到b_fifo_finish为高电平,则fifo_rena_B置低电平。再经1个时钟延迟,result_fifo_wena置高将data_B写入排序结果队列中。跳转到步骤3)。
[0040] 3)等待6个时钟节拍延迟,将fifo_rena_A置为高电平,经1个时钟延迟,检测到 a_fifo_finish为高电平,则fifo_rena_A置低电平,再经1个时钟延迟,result_fifo_wena 置高将data_A写入排序结果队列中,并设置last_flag结束本次排序。
[0041] 实施列二
[0042] 参考图3。待排序队列A(8)数据量1、待排序队列B(9,8)数据量2进行降序归并排序。定义A_first为高电平,则data_A=data_B。待排序队列A和所述待排序队列B中分别存储了已按一定规则排序的数据队列。
[0043] 1)当待排序队列内部FIFO标志位fifo_empty_A、fifo_empty_B以及 result_fifo_prog_full都为无效,所述待排序队列A和待排序队列B都有数据要排序,跳转到步骤2);
[0044] 2)数据data_A:8,数据data_B:9输入到比较器,等待2个时钟节拍延迟,检测到A_first 信号为高电平,则经过4个时钟节拍延迟,将fifo_rena_B设置为高电平,fifo_rena_A设置为低电平,经1个时钟延迟,读取data_B:8输入到比较器中,经2个时钟延迟, result_fifo_wena置高将data_B:9写入排序结果队列中。跳转到步骤3);
[0045] 3)检测到A_first为低电平,将fifo_rena_A置为高电平,经1个时钟延迟,检测到 a_fifo_finish为高电平,则fifo_rena_A置低电平,再经1个时钟延迟,result_fifo_wena 置高将data_A:8写入排序结果队列中,跳转到步骤4);
[0046] 4)等待1个时钟延迟将fifo_rena_B置为高电平,经1个时钟延迟,检测到b_fifo_finish为高电平,将fifo_rena_B置为低电平,再经过2个时钟延迟将 result_fifo_wena置高,将data_B:8写入到排序结果队列中,并置last_flag为高电平,结束本次排序。
[0047] 实施列三
[0048] 参考图4。待排序队列A(8,7)数据量2、待排序队列B(9,8)数据量2进行降序归并排序。定义A_first为高电平,则data_A=data_B。待排序队列A和所述待排序队列B中分别存储了已按一定规则排序的数据队列。
[0049] 1)当待排序队列内部FIFO标志位fifo_empty_A、fifo_empty_B以及 result_fifo_prog_full都为无效,所述待排序队列A和待排序队列B都有数据要排序,跳转到步骤2);
[0050] 2)数据data_A:8,数据data_B:9输入到比较器,等待2个时钟节拍延迟,检测到A_first 信号为高电平,则经过4个时钟节拍延迟,将fifo_rena_B设置为高电平,fifo_rena_A设置为低电平,经1个时钟延迟,读取data_B:8输入到比较器中,经2个时钟延迟, result_fifo_wena置高将data_B:9写入排序结果队列中。跳转到步骤3);
[0051] 3)检测到A_first为低电平,将fifo_rena_A置为高电平,将data_A:7输入到比较器中,经过2个时钟延迟,将result_fifo_wena置高,data_A:8写入排序结果队列中。
[0052] 4)等待1个时钟延迟检测到A_first为高电平,则fifo_rena_B置为高电平,经1个时钟延迟,检测到b_fifo_finish为高电平,将fifo_rena_B置为低电平,再经过2个时钟延迟将result_fifo_wena置高,将data_B:8写入到排序结果队列中。跳转到步骤4);
[0053] 5)将fifo_rena_A置为高电平,经过1个时钟延迟,检测到a_fifo_finish为高电平,将fifo_rena_A置为低电平,再经过2个时钟延迟将result_fifo_wena置高,将data_A:7 写入到排序结果队列中,同时置last_flag为高电平,结束本次排序。
[0054] 以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围内。