CN107402741A - 一种适宜于fpga实现的排序方法 - Google Patents
一种适宜于fpga实现的排序方法 Download PDFInfo
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/22—Arrangements for sorting or merging computer data on continuous record carriers, e.g. tape, drum, disc
- G06F7/24—Sorting, 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实现排序的时延很大,不利于实时性要求较高较高的工程实现。
文献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)即为升序序列。
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)
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的堆排序系统及方法 |
-
2017
- 2017-08-04 CN CN201710659445.4A patent/CN107402741A/zh active Pending
Cited By (12)
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 |