CN107402741A - 一种适宜于fpga实现的排序方法 - Google Patents

一种适宜于fpga实现的排序方法 Download PDF

Info

Publication number
CN107402741A
CN107402741A CN201710659445.4A CN201710659445A CN107402741A CN 107402741 A CN107402741 A CN 107402741A CN 201710659445 A CN201710659445 A CN 201710659445A CN 107402741 A CN107402741 A CN 107402741A
Authority
CN
China
Prior art keywords
data
tree
node
fpga
child nodes
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.)
Pending
Application number
CN201710659445.4A
Other languages
English (en)
Inventor
袁东华
王军
刘宝城
卢程程
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
University of Electronic Science and Technology of China
Original Assignee
University of Electronic Science and Technology of China
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by University of Electronic Science and Technology of China filed Critical University of Electronic Science and Technology of China
Priority to CN201710659445.4A priority Critical patent/CN107402741A/zh
Publication of CN107402741A publication Critical patent/CN107402741A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/22Arrangements for sorting or merging computer data on continuous record carriers, e.g. tape, drum, disc
    • G06F7/24Sorting, i.e. extracting data from one or more carriers, rearranging the data in numerical or other ordered sequence, and rerecording the sorted data on the original carrier or on a different carrier or set of carriers sorting methods in general

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明属于堆排序领域,尤其涉及一种用于FPGA实现的排序方法。一种适宜于FPGA实现的堆排序方法,通过设计新的数据结构,把现有堆排序算法的二叉树结构修改为2k叉树,k≥2,增加数据比较的并行度,减少树的层数,从而减少对数据的访问次数,同时利用FPGA中RAM一个时钟可以输出多个数据的功能,可在一个时钟把要比较的2k孩子节点都读取出来,减少数据读取时间,使用2k叉树结构,简单地通过对非叶节点地址的移位和相加得到其孩子节点的地址,便于实现中的数据访问,降低实现的复杂度。本发明方法可大大降低排序的时延,提高排序模块的实时性。

Description

一种适宜于FPGA实现的排序方法
技术领域
本发明属于堆排序领域,尤其涉及一种用于FPGA实现的排序方法。
背景技术
排序是工程实现中的常用算法,在目前的软件实现中,已经有了很多成熟的快速排序算法,比如:选择排序、插入排序、堆排序等。这些排序都是针对软件设计的,属于串行实现的算法。传统算法不能利用FPGA的并行运算,导致FPGA实现排序的时延很大,不利于实时性要求较高较高的工程实现。
文献1“Algorithm 232–Heapsort(by Williams,J.W.J.1964,Communications ofthe ACM 7(6):347–348.)”和文献2“Algorithm 245-Treesort 3(by Floyd,RobertW.1964,Communications of the ACM 7(12):701)”提出了堆排序算法,详细介绍了堆排序的步骤。文献3“Average-case results on heapsort(Carlsson,Svante 1987,BIT 27(1)2–17)”指出:堆排序算法用O(n)次比较初始化堆,用2nlog2n+o(n)次比较不断的从堆顶删除元素,并重新堆化,最终使所有元素有序排列。堆排序算法时间复杂度为O(nlog2n),空间复杂度为O(1),是排序算法中比较高效且应用广泛的排序算法。
现有的堆排序实现算法是为计算机软件实现而设计的。当采用FPGA实现时,现有算法不利于发挥FPGA并行运算的优点,在大数据量排序上的时间消耗很大,无法满足实时性要求较高的应用。
发明内容
针对上述问题,本发明提出了一种适宜于FPGA实现的堆排序方法。通过设计新的数据结构,把现有堆排序算法的二叉树结构修改为2k叉树,k≥2,增加数据比较的并行度,减少树的层数,从而减少对数据的访问次数,同时利用FPGA中RAM一个时钟可以输出多个数据的功能,可在一个时钟把要比较的2k孩子节点都读取出来,减少数据读取时间,使用2k叉树结构,简单地通过对非叶节点地址的移位和相加得到其孩子节点的地址,便于实现中的数据访问,降低实现的复杂度。本发明发放可大大降低排序的时延,提高排序模块的实时性。
一种适宜于FPGA实现的排序方法,具体步骤如下:
S1、初始化:把无序序列{s(0),s(1),s(2)...s(n)}构造成完全2k叉树,初始化s(i)则为完全2k叉树的最后一个非叶节点,令e=n,s(e)表示2k叉树的最后一个节点,其中,k≥2,k为整数,n为序列长度,floor()表示向下取整;
S2、调整堆,具体步骤为:
S21、读取完全2k叉树s(i)的所有孩子节点s(32i+1),s(32i+2)...s(32i+m),(m≤2k)进行比较,得到最大节点s(l),
若s(i)<s(l),则s(i)与s(l)位置互换,令f=l,转向S22,
若s(i)≥s(l),则令i=i-1,如果i≥0,则继续进行S21,否则跳转到S3;
S22、向下调整,判断s(f)是否有孩子节点,如果有孩子节点,则比较s(f)的所有孩子节点,得到最大节点s(l),
如果s(f)<s(l),则s(f)与s(l)位置互换,令f=l,继续进行S22,
如果s(f)≥s(l),则令i=i-1,如果i≥0,则跳转到S21,否则跳转到S3;
S3、将s(0)与2k叉树的最后一个节点s(e)相交换,同时令e=e-1,即把交换到最后的节点从2k叉树中去除,如果n>1,令i=1跳转到S2,否则结束,得到序列s(0),s(1),s(2)…s(n)即为升序序列。
本发明的有益效果是:
通过把二叉树更改为2k叉树,一次对2k个数进行比较,提高数据比较的并行度,减少比较次数,降低排序时间复杂度,减少FPGA排序的时延,提高了排序的实时性。
附图说明
图1为排序模块结构框图。
图2为排序模块状态机。
图3为求最大值模块框图。
图4为FPGA中两种排序时间复杂度比较。
具体实施方式
下面结合附图对本发明进行说明。
本实施方式采用ISE集成开发工具和modelsim仿真平台进行运行实验。仿真参数为:序列长度n=128,树的元数为32,即k=5,数据位宽为16。采用两个深度为128的双口RAM存放要排序的数据,分别用于读取非叶节点和非叶节点的孩子节点,减少数据读取时间。RAM1和RAM2的写入位宽均为16,RAM1读取位宽为512,一个时钟可以读取32个数据,可以一次读取非叶节点的所有孩子节点,RAM2的输出位宽为16,用于读取非叶节点,这样在RAM2中读取非叶节点的地址与在RAM1中读取非叶节点的孩子节点的地址相同。附图1为排序模块的结构框图,图2为排序模块中状态机的状态转移图,图3为求最大值模块结构图。
重要信号介绍:
data_coming:输入到排序模块的标志信号,该信号有效表示要排序的数据在下一个时钟串行输入。
din:输入到排序模块的数据信号,要排序的数据从该信号输入。
swap_din:重建堆时的输入到RAM的数据。
sort_swap_din:树的根节点与树的末尾节点交换时数据输入。
init_addr:写入需要排序数据时的地址。
swap_addr:重建堆时,写入交换数据的地址。
sort_swap_addr:树的根节点与树的末尾节点交换时的地址。
read_addr:读取非叶节点和其孩子节点的地址。
out_addr:排序完成后输出时的数据读取地址。
max:数据比较模块cmp输出的33个数据的最大值
sel:指示33个数中最大数的位置。
Non_leaf:32叉树中非叶节点数据。
down_flag:调整堆时的向下调整标志信号,为1表示处于向下调整状态。
tail_addr:32叉树的最后一个元素的地址。
利用控制逻辑产生读取和写RAM的数据和地址信号,在利用状态机选择数据和地址信号控制RAM的读写,在FPGA中实现基于32叉树的数据排序功能。下面根据状态机介绍排序的步骤。
步骤1:初始化
1.1状态机开始处于idle状态,初始化读地址为read_addr=3,即指向RAM2中32叉树的最后非叶节点和RAM1中最后非叶节点的孩子节点。在标志信号data_coming有效时,状态机进入init状态,将输入数据写入到RAM中,其中将s(1),s(2)...s(127)这127个数据写入到RAM1中,将s(0),s(1),s(2)...s(127)这128个数据写入到RAM2中。数据写完后进入read状态,即步骤2。
步骤2:调整堆
2.1在read状态会保持一个时钟。根据read_addr读取RAM2中32叉树的非叶节点:Non_leaf,同时从RAM1中读取非叶节点的可能孩子节点:data1,data2~data32。
2.2读取完数据后进入comp状态,该状态保持2个时钟。根据tail_addr将data1,data2~data32中不属于Non_leaf孩子节点的数据置零,将Non_leaf和处理后的data1,data2~data32这33个数据送入图3对应的比较模块,得到33个数据的最大值max和指示最大值位置的标志信号sel。
2.3比较完后进入swap状态,swap状态会保持两个时钟,这两个时钟内会通过sel信号判断是否交换Non_leaf和sel对应位置的数据,同时根据向下调整信号down_flag和sel信号生成读取RAM的地址信号swap_addr。当读取地址read_addr=0和sel=32,即调整到根节点,且不要交换,说明堆已经调整完成,状态跳转到sort_swap,即步骤3,否则跳转到read状态,继续调整堆。
步骤3:32叉树顶元素与树的最后一个元素相交换
在sort_swap状态会保持2个时钟,完成32叉树顶元素与树的最后一个元素相交换,并把交换到最后的元素从32叉树中去除,即tail_addr减1。当tail_addr=0,表示32叉树已经排序完成,跳转到out状态,即步骤4,否则跳转到read状态调整堆,即步骤3。
步骤4:输出排序完成后的数据。
按照所述方式和参数编写基于32叉树的verilog排序程序,同时编写二叉树的verilog排序程序在modelsim中仿真,在输入序列为升序时,得到最大排序时延。同时得到两种排序方式的资源消耗情况,如表1所示。考虑到求最大值模块的路径长度造成工作频率降低的影响,测试了在求最大值模块中插入一级流水对频率和时延的影响,如表2所示。
表1在FPGA实现二叉树排序(堆排序)和32叉树排序的比较
表2求最大值模块插入一级流水

Claims (1)

1.一种适宜于FPGA实现的排序方法,其特征在于,具体步骤如下:
S1、初始化:把无序序列{s(0),s(1),s(2)...s(n)}构造成完全2k叉树,初始化s(i)则为完全2k叉树的最后一个非叶节点,令e=n,s(e)表示2k叉树的最后一个节点,其中,k≥2,k为整数,n为序列长度,floor()表示向下取整;
S2、调整堆,具体步骤为:
S21、读取完全2k叉树s(i)的所有孩子节点s(32i+1),s(32i+2)...s(32i+m),(m≤2k)进行比较,得到最大节点s(l),
若s(i)<s(l),则s(i)与s(l)位置互换,令f=l,转向S22,
若s(i)≥s(l),则令i=i-1,如果i≥0,则继续进行S21,否则跳转到S3;
S22、向下调整,判断s(f)是否有孩子节点,如果有孩子节点,则比较s(f)的所有孩子节点,得到最大节点s(l),
如果s(f)<s(l),则s(f)与s(l)位置互换,令f=l,继续进行S22,
如果s(f)≥s(l),则令i=i-1,如果i≥0,则跳转到S21,否则跳转到S3;
S3、将s(0)与2k叉树的最后一个节点s(e)相交换,同时令e=e-1,即把交换到最后的节点从2k叉树中去除,如果n>1,令i=1跳转到S2,否则结束,得到序列s(0),s(1),s(2)…s(n)即为升序序列。
CN201710659445.4A 2017-08-04 2017-08-04 一种适宜于fpga实现的排序方法 Pending CN107402741A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710659445.4A CN107402741A (zh) 2017-08-04 2017-08-04 一种适宜于fpga实现的排序方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710659445.4A CN107402741A (zh) 2017-08-04 2017-08-04 一种适宜于fpga实现的排序方法

Publications (1)

Publication Number Publication Date
CN107402741A true CN107402741A (zh) 2017-11-28

Family

ID=60402108

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710659445.4A Pending CN107402741A (zh) 2017-08-04 2017-08-04 一种适宜于fpga实现的排序方法

Country Status (1)

Country Link
CN (1) CN107402741A (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109164424A (zh) * 2018-07-16 2019-01-08 南京理工大学 一种有序统计类恒虚警门限快速计算方法
CN109582276A (zh) * 2018-10-31 2019-04-05 中国科学院自动化研究所 超宽带信号的实时中值频点提取方法
CN109766074A (zh) * 2018-12-05 2019-05-17 西安电子科技大学 一种数据排序电路及排序方法
CN111562898A (zh) * 2020-05-11 2020-08-21 上海大学 一种基于fpga实现的多级归并排序方法
CN113467702A (zh) * 2020-03-31 2021-10-01 上海商汤智能科技有限公司 数据处理装置、集成电路和ai加速器
CN118642680A (zh) * 2024-08-16 2024-09-13 泰山学院 一种基于fpga的堆排序系统及方法

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109164424A (zh) * 2018-07-16 2019-01-08 南京理工大学 一种有序统计类恒虚警门限快速计算方法
CN109164424B (zh) * 2018-07-16 2023-03-28 南京理工大学 一种有序统计类恒虚警门限快速计算方法
CN109582276A (zh) * 2018-10-31 2019-04-05 中国科学院自动化研究所 超宽带信号的实时中值频点提取方法
CN109582276B (zh) * 2018-10-31 2020-11-10 中国科学院自动化研究所 超宽带信号的实时中值频点提取方法
CN109766074A (zh) * 2018-12-05 2019-05-17 西安电子科技大学 一种数据排序电路及排序方法
CN113467702A (zh) * 2020-03-31 2021-10-01 上海商汤智能科技有限公司 数据处理装置、集成电路和ai加速器
WO2021196745A1 (zh) * 2020-03-31 2021-10-07 上海商汤智能科技有限公司 数据处理装置、集成电路和ai加速器
TWI773051B (zh) * 2020-03-31 2022-08-01 大陸商上海商湯智能科技有限公司 資料處理裝置、積體電路及人工智能加速器
CN111562898A (zh) * 2020-05-11 2020-08-21 上海大学 一种基于fpga实现的多级归并排序方法
CN111562898B (zh) * 2020-05-11 2023-06-09 上海大学 一种基于fpga实现的多级归并排序方法
CN118642680A (zh) * 2024-08-16 2024-09-13 泰山学院 一种基于fpga的堆排序系统及方法
CN118642680B (zh) * 2024-08-16 2024-11-01 泰山学院 一种基于fpga的堆排序系统及方法

Similar Documents

Publication Publication Date Title
CN107402741A (zh) 一种适宜于fpga实现的排序方法
US10606787B2 (en) Methods and apparatuses for providing data received by a state machine engine
US10698697B2 (en) Adaptive routing to avoid non-repairable memory and logic defects on automata processor
US20220005546A1 (en) Non-redundant gene set clustering method and system, and electronic device
CN103164585A (zh) 缓冲器的插入方法及装置
CN112232019B (zh) 一种逻辑资源评估方法
CN102456087A (zh) 一种建立时序修复方法
WO2020224036A1 (zh) 基于二进制编码的数字集成电路布线方法及终端设备
EP4418119A1 (en) Multi-data sending method, apparatus and device based on columnar data scanning, and multi-data receiving method, apparatus and device based on columnar data scanning
CN110058956A (zh) 一种nand闪存读取方法、系统及电子设备和存储介质
US6687889B1 (en) Method and apparatus for hierarchical clock tree analysis
CN114492282A (zh) 贯穿信号线布局处理方法及装置、芯片和存储介质
CN104021002B (zh) 一种pdm系统标准件存储方法
CN202838306U (zh) 一种基于微处理器的fpga配置系统
JPWO2005098612A1 (ja) 重要成分優先計算方式ならびに装置
JP2007219930A (ja) シミュレーション方法およびプログラム
CN102360387A (zh) 一种拓扑1的矢量数据交换格式面要素的几何数据输出方法
CN101174989B (zh) 一种采用嵌入式数据库系统保存信令跟踪数据的方法
CN109740249B (zh) 一种mux树逻辑结构优化方法、模块及存储介质
JP6237193B2 (ja) 行列圧縮装置、制御方法、及びプログラム
EP3539038B1 (en) Reduced memory nucleotide sequence comparison
CN118072805B (zh) 一种存储器测试分组与调度的方法及系统
CN111428436A (zh) 一种程序化分析集成电路线路结构的方法
CN109637111A (zh) 红外信号压缩方法、装置、用户设备及存储介质
CN115630602A (zh) 一种脚本sram自动挑选方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
WD01 Invention patent application deemed withdrawn after publication
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20171128