用于FPGA实现的排序方法.pdf
《用于FPGA实现的排序方法.pdf》由会员分享,可在线阅读,更多相关《用于FPGA实现的排序方法.pdf(9页完成版)》请在专利查询网上搜索。
1、(19)中华人民共和国国家知识产权局 (12)发明专利申请 (10)申请公布号 (43)申请公布日 (21)申请号 202010040801.6 (22)申请日 2020.01.15 (71)申请人 江苏方天电力技术有限公司 地址 210036 江苏省南京市江宁区苏源大 道58号 (72)发明人 王成亮官国飞葛永高王伏亮 (74)专利代理机构 南京经纬专利商标代理有限 公司 32200 代理人 朱桢荣 (51)Int.Cl. G06F 7/24(2006.01) G06F 9/38(2006.01) (54)发明名称 一种用于FPGA实现的排序方法 (57)摘要 本发明公开了一种用于FPGA实。
2、现的排序方 法, 在排序需求发起后, 采用读取控制模块进行 第一次遍历读取数据, 分别送入两个数据通道, 其中A通道存放每次遍历的读取到的第一数, B通 道存放按顺序存放剩下的数据。 将A通道和B通道 的数据送入比较器进行比较, 比较的结果在计数 控制模块的控制下, 写入相应的计数存储RAM; 第 一次遍历完成后, 进行第二次遍历, 第二遍历的 起始地址在第一次遍历的基础上加1。 重复第一 次遍历的操作。 对于数据量为N的序列而言, 从需 要进行N-1轮遍历。 等到第N-1轮结束后, 比较计 数的过程结束。 在结果模块的控制下, 得到原数 据在序列中所对应的新的索引值, 从而得到有序 的序列。。
3、 权利要求书1页 说明书5页 附图2页 CN 111258535 A 2020.06.09 CN 111258535 A 1.一种用于FPGA实现的排序方法, 其特征在于, 采用数据排序RAM存储待排序数据, 采 用读取控制模块读取排序数据并传输至比较器, 待排序数据的数目为N, 读取控制模块访问 数据排序RAM 的次数为N-1, 每次执行排序时将数据排序RAM的装载地址LOAD_ADDR初始化 为0; 读取控制模块执行以下步骤: 步骤1.1: 若是第一次读取, 则设置首次读取标志first_read有效, 否则设为无效; 步骤1.2: 首先设置数据排序RAM的读取地址为装载地址LOAD_AD。
4、DR, 然后每个时钟节拍 对数据排序RAM的读取地址进行加1操作, 直至读取地址为N-1停止, 从LOAD_ADDR读取的数 据锁存为数据A, 在步骤1.2中, 数据A保持不变, 从LOAD_ADDR+1到N-1读取的数据锁存为数 据组B, 所述数据A只包含一个数据, 所述数据组B包含N-LOAD_ADDR-1个数据, 所述数据A与 数据组B参与比较器的比较排序运算, 设置数据组B有效标志valid为有效且保持在N-LOAD_ ADDR-1个时钟节拍内始终保持有效; 步骤1.3: LOAD_ADDR加1, 若LOAD_ADDR等于N-1, 则终止本次操作, 否则跳转到步骤1.1; 采用比较器比。
5、较输入到比较器的数据A与数据组B, 若比较结果为数据A排在前面, 则设 置比较结果信号A_first为有效、 否则设为无效; 若比较器完成数据比较需要K个时钟周期, 则采用延迟模块将读取控制模块输出的数据组B的有效标志valid与首次读取标志frist_ read延迟K个时钟周期, 所述有效标志valid延迟为经过延迟的有效标志valid_delay, 所述 首次读取标志first_read延迟为经过延迟的首次读取标志first_read_delay; 所述比较器 将比较结果A_first传输到计数模块, 所述延迟模块将经过延迟的有效标志valid_delay和 首次读取标志first_rea。
6、d_delay传输到计数模块, 得到原数据在序列中所对应的新的索引 值, 从而得到有序的序列。 2.根据权利要求1所述的一种用于FPGA实现的排序方法, 其特征在于, 计数模块包括行 计数模块、 列计数模块以及用于计数的行计数RAM与列计数双口RAM。 3.根据权利要求2所述的一种用于FPGA实现的排序方法, 其特征在于, 行计数模块在有 效标志valid有效的时候对A_first取反的结果进行累加, 在有效标志valid无效的时候把 该结果写入到行计数RAM中, 在首次读取标志first_read_delay有效的时候设置所述行计 数RAM的写入地址为0, 所述结果写入行计数RAM后, 行计。
7、数RAM的地址加1。 4.根据权利要求2所述的一种用于FPGA实现的排序方法, 其特征在于, 所述列计数控制 在valid_delay信号有效时将A_first与列计数双口RAM的数据进行累加, 然后结果存储到 列计数双口RAM中。 5.根据权利要求4所述的一种用于FPGA实现的排序方法, 其特征在于, 计数模块采用双 端口的访问模式来完成, 列计数双口RAM的初始化地址initial_addr=1, 计数模块采用以下 方法步骤: 步骤6.1: 当valid有效并且first_read_delay有效时, 将比较结果加0, 新的结果从初 始地址initial_addr开始按照地址递增的顺序, 。
8、写入RAM, 直至写到地址N-1为止; 步骤6 .2: initial_addr 加1, 当valid有效并且first_valid无效时, 从地址为 initial_addr开始, 按照地址递增的顺序将当前地址的数据读出并与当前产生的比较值相 加, 结果重新写入该地址, 直到地址为N-1; 步骤6.3: 重复步骤6.2, 直到initial_addr=N-2。 权利要求书 1/1 页 2 CN 111258535 A 2 一种用于FPGA实现的排序方法 技术领域 0001 本发明涉及数据处理技术领域, 特别是一种用于FPGA实现的排序方法。 背景技术 0002 排序是计算机领域中必不可少的基。
9、本数据处理操作。 通过排序可以使得数据能够 以一定的顺序进行全排列, 减少后续操作的时间。 在目前的软件实现中, 已经有很多比较经 典的排序算法, 比如: 插入排序、 快速排序、 冒泡排序等。 但是这些排序算法大都是针对软件 设计的采用串行执行的方式, 不利于实时性较高的工程实现。 0003 现代CPU主要利用线程的本地存储层次优化数据在存储单元中的排列, 以减少访 存次数以及减少访存缺失, 同时利用单指令多数据流技术, 来提高算法的数据级并行度; GPU则需要将多个线程组织成线程块, 依靠共享内存提高线程块的访存速度, 而在线程块内 则使用单指令多线程技术提高线程的执行效率。 FPGA则是依。
10、靠硬件描述语言或高级综合语 言优化电路设计, 提高资源利用率的同时提高FPGA的吞吐量。 0004 文献 “吕伟新,李清清,娄俊岭.FPGA比较矩阵排序法及在中值滤波器中的应用 J.电子器件,2012,35(1):34-38.” 中所提出的比较排序法很好的适应了FPGA的并行性的 特点。 但是随着同时输入元素的增加, 需要的FPGA逻辑单元也呈指数增加, 无法完成过多输 入元素的同时排序。 发明内容 0005 本发明所要解决的技术问题是克服现有技术的不足而提供一种用于FPGA实现的 排序方法, 本发明通过将二维比较矩阵拆分成两个一维RAM, 在保证排序结果准确性的同 时, 能够利用流水线操作,。
11、 提高排序效率以及解决了原组合逻辑带来的时序影响, 并且支持 多种类型数据的排序。 0006 本发明为解决上述技术问题采用以下技术方案: 0007 根据本发明提出的一种用于FPGA实现的排序方法, 采用数据排序RAM存储待排序 数据, 采用读取控制模块读取排序数据并传输至比较器, 待排序数据的数目为N, 读取控制 模块访问数据排序RAM的次数为N-1, 每次执行排序时将数据排序RAM的装载地址LOAD_ADDR 初始化为0; 0008 读取控制模块执行以下步骤: 0009 步骤1.1: 若是第一次读取, 则设置首次读取标志first_read有效, 否则设为无效; 0010 步骤1.2: 首先。
12、设置数据排序RAM的读取地址为装载地址LOAD_ADDR, 然后每个时钟 节拍对数据排序RAM的读取地址进行加1操作, 直至读取地址为N-1停止, 从LOAD_ADDR读取 的数据锁存为数据A, 在步骤1.2中, 数据A保持不变, 从LOAD_ADDR+1到N-1读取的数据锁存 为数据组B, 所述数据A只包含一个数据, 所述数据组B包含N-LOAD_ADDR-1个数据, 所述数据 A与数据组B参与比较器的比较排序运算, 设置数据组B有效标志valid为有效且保持在N- LOAD_ADDR-1个时钟节拍内始终保持有效; 说明书 1/5 页 3 CN 111258535 A 3 0011 步骤1.。
13、3: LOAD_ADDR加1, 若LOAD_ADDR等于N-1, 则终止本次操作, 否则跳转到步骤 1.1; 0012 采用比较器比较输入到比较器的数据A与数据组B, 若比较结果为数据A排在前面, 则设置比较结果信号A_first为有效、 否则设为无效; 若比较器完成数据比较需要K个时钟 周期, 则采用延迟模块将读取控制模块输出的数据组B的有效标志valid与首次读取标志 frist_read延迟K个时钟周期, 所述有效标志valid延迟为经过延迟的有效标志valid_ delay, 所述首次读取标志first_read延迟为经过延迟的首次读取标志first_read_delay; 所述比较器。
14、将比较结果A_first传输到计数模块, 所述延迟模块将经过延迟的有效标志 valid_delay和首次读取标志first_read_delay传输到计数模块, 得到原数据在序列中所 对应的新的索引值, 从而得到有序的序列。 0013 作为本发明所述的一种用于FPGA实现的排序方法进一步优化方案, 计数模块包括 行计数模块、 列计数模块以及用于计数的行计数RAM与列计数双口RAM。 0014 作为本发明所述的一种用于FPGA实现的排序方法进一步优化方案, 行计数模块在 有效标志valid有效的时候对A_first取反的结果进行累加, 在有效标志valid无效的时候 把该结果写入到行计数RAM中。
15、, 在首次读取标志first_read_delay有效的时候设置所述行 计数RAM的写入地址为0, 所述结果写入行计数RAM后, 行计数RAM的地址加1。 0015 作为本发明所述的一种用于FPGA实现的排序方法进一步优化方案, 所述列计数控 制在valid_delay信号有效时将A_first与列计数双口RAM的数据进行累加, 然后结果存储 到列计数双口RAM中。 0016 作为本发明所述的一种用于FPGA实现的排序方法进一步优化方案, 计数模块采用 双端口的访问模式来完成, 列计数双口RAM的初始化地址initial_addr1, 计数模块采用 以下方法步骤: 0017 步骤6.1: 当v。
16、alid有效并且first_read_delay有效时, 将比较结果加0, 新的结果 从初始地址initial_addr开始按照地址递增的顺序, 写入RAM, 直至写到地址N-1为止; 0018 步骤6.2: initial_addr加1, 当valid有效并且first_valid无效时, 从地址为 initial_addr开始, 按照地址递增的顺序将当前地址的数据读出并与当前产生的比较值相 加, 结果重新写入该地址, 直到地址为N-1; 0019 步骤6.3: 重复步骤6.2, 直到initial_addrN-2。 0020 本发明采用以上技术方案与现有技术相比, 具有以下技术效果: 00。
17、21 本发明利用行/列计数双口RAM实现一个二维的比较计数矩阵, 对比较计数矩阵采 用对角线取反方法, 使得时间复杂度变为降低了时间复杂度; 对于一组待排序的数 据而言, 能够利用流水线操作, 提高运算的吞吐量, 提高了整体的排序性能; 整个排序过程, 共用同一个比较器, 节省了FPGA资源, 但是实现了海量数据的排序。 附图说明 0022 图1是排序的系统结构框图。 0023 图2是本次发明的比较矩阵理论分析图。 0024 图3是实施例一波形图。 说明书 2/5 页 4 CN 111258535 A 4 0025 图4是实施例一波形图。 具体实施方式 0026 为了使本发明的目的、 技术方案。
18、和优点更加清楚, 下面将结合附图及具体实施例 对本发明进行详细描述。 0027 本发明包括数据存储RAM、 排序数据读取控制模块、 比较器、 计数控制模块、 计数存 储RAM和结果模块。 在排序需求发起后, 排序数据读取控制模块进行第一次遍历读取数据, 分别送入两个数据通道, 其中A通道存放每次遍历的读取到的第一数, B通道存放按顺序存 放剩下的数据。 将A通道和B通道的数据送入比较器进行比较, 比较的结果在计数控制模块 的控制下, 写入相应的计数存储RAM。 第一次遍历完成后, 进行第二次遍历, 第二遍历的起始 地址在第一次遍历的基础上加1。 重复第一次遍历的操作。 对于数据量为N的序列而言。
19、, 从需 要进行N-1轮遍历。 等到第N-1轮结束后, 比较计数的过程结束。 在结果模块的控制下, 得到 原数据在序列中所对应的新的索引值, 从而得到有序的序列。 0028 参见图1, 本发明的基于比较矩阵的高效排序算法的FPGA实现方法的操作步骤如 下: 0029 在FPGA上建立数据排序RAM模块、 读取控制模块、 数据A、 数据组B、 比较器、 延迟模 块、 计数模块、 索引统计。 0030 为了便于描述, 假定一组待排序的数据量为N, 则总共需要访问数据排序RAM的次 数为N-1次。 第i次访问的起始地址为(i-1), 第i次访问共需要遍历(N-i+1)个数据。 进一步 的说明。 对于。
20、每组待排序的数据而言, 分为第1次访问数据排序RAM和第i(i1)次访问数据 排序RAM。 0031 第1次访问数据排序RAM, 在读取控制的作用下, 给出起始访问地址LOAD_ADDR0, 按照地址递增的顺序将存放在RAM中的数据读出, 直到地址N-1结束。 读取完成后, LOAD_ ADDR加1。 其中第1个读取到的数据送入数据A进行锁存, 从LOAD_ADDR+1到N-1读取的数据锁 存为数据组B。 所述数据A只包含一个数据, 所述数据组B包含N-LOAD_ADDR-1个数据, 当数据 通道B有数据时, 将valid信号拉高并保持N-LOAD_ADDR-1个时钟节拍内有效, 表明通道A和。
21、 通道B中有数据可以进行比较。 当读取结束后, valid信号拉低置0。 在valid有效时, 数据通 道A和数据通道B的数据送入比较器进行数据比较。 如果数据A的数据大于等于数据组B的数 据, 输出的A_first置1, 否则置0。 与此同时, 由于比较器的结果输出有延迟, 所以将valid信 号经过延迟模块, 得到valid_delay信号, 使得valid信号与比较器输出的结果信号时序对 齐, 标志比较结果有效。 由于本次为第1次访问数据排序RAM, 所以将first_read信号拉高置 1, 经过延迟模块, 得到first_valid_delay信号, 延迟的时钟节拍数与valid信号。
22、相同。 行/ 列计数模块通过判断valid信号和first_valid信号给出不同的控制信息。 对于行计数模块 而言, 在valid有效的时候对A_first信号取反的结果进行累加, 累加的结果在valid信号无 效的时候写入行计数RAM, 写入完成后, 行计数RAM地址加1。 对于列计数模块而言, 设置列计 数双口RAM的初始化地址initial_addr1,从initial_addr所指地址开始, 按照地址递增 的顺序, 将A_first加0的结果写入当前的地址中, 直到地址N-1结束。 结束后, 将initial_ addr的值加1。 第1次访问数据排序RAM的所有流程结束。 0032 。
23、第i次访问数据排序RAM。 由于不是第一次访问所以first_read信号置为0。 在读取 说明书 3/5 页 5 CN 111258535 A 5 控制模块的作用下, 从起始地址LOAD_ADDR(i-1)开始读取数据, 直到地址N-1结束。 读取 完成后, LOAD_ADDR加1。 接下来的过程与第一次流程的相同, 不同的地方在于图1中的计数 模块。 经过前级的操作可以得到A_first、 valid_delay、 first_read_delay信号。 对于行计 数模块而言, 通过判断valid信号, 在valid有效的时候对A_first信号取反的结果进行累 加, 累加的结果在vali。
24、d信号无效的时候写入行计数RAM, 写入完成后, 行计数RAM地址加1。 对于列计数模块而言, 在valid有效, first_valid无效的时候, 按照地址递增的顺序, 从 initial_addr所指地址开始, 将列计数双口RAM中地址所对应的数据从端口1读出并与A_ first相加, 相加的结果从端口2写回该地址, 直到地址N-1结束。 结束后, 将initial_addr的 值加1。 从而第i次访问数据排序RAM流程结束。 0033 参见图2, 经过N-1次访问数据排序RAM, 得到了所有数据的比较结果值。 最后, 从地 址0开始, 按地址递增的顺序, 将行计数RAM和列计数双口RA。
25、M中相同地址中的数读取出来相 加, 直到地址N-1结束, 便得到了原始数据所对应的新的索引值。 0034 实施例一 0035 参考图3。 对一组数据量为4的序列进行降序排序, 总需要访问3次数据RAM。 数据4, 3, 9, 6按照地址递增得顺序存放在数据RAM中。 第1次访问数据排序RAM。 给出地址0、 1、 2、 3, 经过两个时钟延迟, 读到结果4、 3、 9、 6。 第一个读取到的数4送入数据A锁存; 3、 9、 6送入数据 组B寄存。 在数据3、 9、 6有效期间, valid保持高电平有效。 表明可以对数据A和数据组B中的 数进行比较。 比较的判别方式为: 如果数据A大于等于数据。
26、组B, 则A_first为1, 否则为0。 比 较的结果经过3个时钟的延迟得到输出结果A_first。 由于是第一次访问, 所以first_read 在第1轮读出的数据有效期内保持高电平。 对first_read和valid信号经过3个时钟的延迟, 得到了valid_delay和first_read_delay信号。 当valid_delay信号有效的时候, 将A_first 信号取反累加, 累加的结果在valid信号无效的时候写入行计数RAM的地址0。 行计数RAM的 地址加1。 将当前A_first值加0的结果写入列计数RAM的地址1、 2、 3。 第一次访问结束。 第2次 访问给出地址1。
27、、 2、 3, 由于采用流水线操作, 不需要再第一次的基础上再额外等待2个时钟 的延迟。 如图3所示, 直接在第一次读取数据后便可以得到第二次访问读取结果3、 9、 6。 在数 据9、 6有效期间, valid保持高电平有效, 由于不是第一次访问, 所以first_read信号无效。 经过3拍的延迟, 得到了比较结果A_first以及valid_delay和first_read_delay信号。 当 valid_delay信号有效的时候, 将A_first信号取反累加, 累加的结果在valid信号无效的时 候写入行计数RAM的地址1。 行计数RAM的地址加1。 当valid有效, first_。
28、valid无效的时候, 从地址2开始, 将列计数RAM中的数读出, 读出的数与当前的比较结果相加, 相加的结果再写 回该地址, 如图上红色和蓝色线圈所示。 第三次重复第二次的过程。 0036 参见图4。 可以看到比较结束后, 行/列计数RAM中个地址中的统计数值。 将两个计 数RAM相同地址中的数据读出相加, 便得到了原始数据所对应的新的索引值。 如果中所示, 括号中4所对应的索引值为2。 按照索引值从小到大的顺序将数据输出, 便得到了一组降序 序列9, 6, 4, 3。 与理论分析结果一致。 0037 本发明是一种基于比较矩阵的高效排序算法的FPGA实现方法, 包括以下步骤: 待 排序的数据。
29、预先存储在数据排序RAM中, 通过读取控制模块将RAM中的数据读出。 在一组数 据量为N的排序过程中, 共需要读取控制(N-1)次。 其中对于每一次读出的第1个数据在锁存 信号有效的情况下, 将数据锁存在数据A, 其余读出的数依次锁存在数据组B并依次与第一 说明书 4/5 页 6 CN 111258535 A 6 个读出的数据送入比较器进行比较并获得比较结果, 如果数据A的数大于等于数据组B的 数, 则数据A的数得1分, 否则得0分。 然后将比较的结果在行/列计数模块的控制下, 对比较 的结果进行处理存放在行/列计数RAM中。 最后统计分析行/列计数RAM中的数值得到原始数 据的新的索引值, 。
30、从而获得一组有序队列。 0038 本发明基于比较矩阵的高效排序算法的FPGA实现方法用两个一维的数据缓存空 间RAM实现了二维的数据比较矩阵。 在能够满足时序要求的同时, 可以减少时间复杂度, 提 高数据的吞吐量, 数据实时性, 能够满足电力物联网海量数据的排序处理要求。 0039 以上所述, 仅为本发明的具体实施方式, 但本发明的保护范围并不局限于此, 任何 熟悉本技术领域的技术人员在本发明揭露的技术范围内, 可轻易想到的变化或替换, 都应 涵盖在本发明的保护范围内。 说明书 5/5 页 7 CN 111258535 A 7 图1 图2 图3 说明书附图 1/2 页 8 CN 111258535 A 8 图4 说明书附图 2/2 页 9 CN 111258535 A 9 。
- 内容关键字: 用于 FPGA 实现 排序 方法
介孔蛋黄壳纳米颗粒及其在构建分泌物代谢指纹谱图中的应用和用其筛选的代谢标志物.pdf
制袋机的放卷机构.pdf
双枪激光焊机.pdf
锂离子正极材料异常料筛分装置.pdf
用于芯片开盖的可调整平台.pdf
防腐伸缩蝶阀.pdf
可分离式检修插座箱.pdf
自承重保温复合屋面板.pdf
螺杆钻具定子壳体打磨装置.pdf
提升机机尾增压防尘结构.pdf
简易分条机构.pdf
煤矿探水钻孔快速密封装置.pdf
新能源电池储能充电用触发控制电路.pdf
加速植株晾干设备.pdf
高可靠电容切换开关.pdf
散热器翅片的冲片装置.pdf
可拆式偏心加强撑.pdf
农业种植用可调节式农业种植架.pdf
饮品和冰棒的新型包装袋.pdf
卧式搅拌反应釜.pdf
平板玻璃切割加工系统.pdf
器件复用的射频收发电路及其控制方法.pdf
基于单片FPGA的PET正弦图数据压缩存储方法、系统及设备.pdf
风机轴承剩余有效寿命优化方法、设备及介质.pdf
远程控制车辆分享解锁方法及系统.pdf
多轴分布式电驱车辆转向控制方法及车辆.pdf
无对照HRD检测方法、系统及装置.pdf
人工植入物以及介入系统.pdf
实心分割铝导体高压电缆制备方法.pdf
基于图像处理的影动方向计算系统及屈光度估计系统.pdf
热塑性复合工程材料缸盖罩自动校平装置及校平方法.pdf
多尺寸的晶圆传输装置、方法及电子设备.pdf
一种电解抛光刀具用固定架.pdf
一种去除污水中镍的方法.pdf
触觉反馈设备、触觉反馈系统和操作触觉反馈设备的方法.pdf
一种三向金属橡胶隔振器及其阵列.pdf
电子控制式节温器.pdf
缓冲器的阻尼阀.pdf
全局用户安全组的自动移除.pdf
内燃机的排气装置.pdf
USBPDC总线转换器.pdf
一种新型管道连接件.pdf
一种热交换器的铝合金材料及制备方法.pdf
高速缓存装置与高速缓存数据存取方法.pdf
电磁感应式加热水装置.pdf
电子装置及添加操作界面的方法.pdf
存储盘处理方法及装置.pdf
一种丙烯聚合物的制备方法.pdf
一种活性有机菌肥及其制备方法.pdf
一种玉竹燕麦茶.pdf
信息处理装置、信息处理方法和计算机可读介质.pdf