技术简介:
本发明针对传统软件实现二叉树速度慢、硬件实现依赖单级缓存导致效率低的问题,提出基于FPGA的多模块并行处理方案。通过两级FIFO缓存结构、"合并存储+分位标记"关联信息统计、流水线深度生成等创新设计,实现分支结点与叶子结点的高效构造和深度统计,各模块独立运行且数据流无间隙,显著提升最优二叉树生成速度。
关键词:FPGA二叉树优化,硬件生成算法
本发明涉及一种基于硬件FPGA快速实现最优二叉树的方法,此方法可以应用于所有对已经统计排序完成的数据生成最优二叉树的领域。
背景技术:
:早期的二叉树主要用软件实现,速度太慢,而用硬件实现只采用单级缓存严重影响二叉树的生成速度,同时对于二叉树结点深度的统计过多依赖于分支结点和叶子结点的生成,这样显得算法笨拙、复杂。技术实现要素:本发明为了克服上述现有技术存在的问题,提供一种基于硬件FPGA快速实现最优二叉树的方法,将原二叉树方法分成二叉树构造模块、结点关联信息统计模块、深度生成模块、二叉树产生模块等多级模块进行处理,采用多级缓存与并行处理,对已经统计排序完成的数据进行二叉树构造及生成,并且二叉树深度的统计采用“流水线”处理思想,并采用硬件实现,本发明方法简单、高效,达到快速生成最优二叉树的目的。本发明的技术方案为:一种基于硬件FPGA快速实现最优二叉树的方法,此方法包括二叉树构造模块、结点关联信息统计模块、深度生成模块、二叉树产生模块,上述所有模块均采用硬件FPGA实现,其特征在于按以下步骤进行:第1步,二叉树构造模块对已经统计排序完成的数据进行二叉树的构造,分两级FIFO(FirstInputFirstOutput)进行缓存,第一级存储叶子结点,第二级存储分支结点,每次从两级FIFO中分别取出前两个数据,四个数据中最小的两个数据构造成分支结点存于二级FIFO,如此循环,直到所有的叶子结点和分支结点构造完成;第2步,结点关联信息统计模块统计各个分支结点与叶子结点之间的关系,采用“合并存储、分位标记”的方式,简单快捷;第3步,深度生成模块不停的监测结点关联信息统计模块,融合“流水线”处理思想,独立工作;如果对应的叶子结点标志位有效,则将对应的深度加1,以此来得到所有叶子结点在二叉树中的深度;第4步,二叉树产生模块通过深度生成模块统计的叶子结点深度信息产生最终的最优二叉树,达到快速实现最优二叉树目的。因上述所有模块均采用硬件FPGA实现,故速度更加快捷。所述整个最优二叉树构造时的数据处理步骤为:(1)外部输入的数据经过统计排序之后进入二叉树构造模块,直接存于缓存FIFO0;(2)从缓存FIFO0与FIFO1中分别取出两个数据,最开始的时候FIFO1是没有数据的,所以只需要在FIFO0中取出2个数据结合成一个新的分支结点存于FIFO1中;(3)结点关联信息统计模块会记录下这个新的分支结点的权重信息与组成这个分支结点的所有叶子结点,在对应的位置将标志位置1并发出标志位有效信号给深度生成模块,深度生成模块收到有效信号之后就会将对应的叶子结点深度加1;(4)再次从缓存FIFO0与FIFO1中分别取出两个数据,如果缓存FIFO中不够2个数据就只取剩下的,在取出的2个、3个或4个数据中找到权重值最小的两个数据结合成一个新的分支结点存于FIFO1中;(5)重复步骤(3)和(4),直到只剩下唯一的一个分支结点,则认为整个最优二叉树构造完成,开始下一个二叉树的构造;(6)当整个二叉树构造完成之后,深度生成模块也统计完成所有叶子结点在该二叉树中的深度,最后二叉树产生模块根据深度生成模块提供的叶子结点在该二叉树中的深度信息来产生最优二叉树。实施本发明的优势:1.对于分支结点与叶子结点的生成采用两级FIFO(FirstInputFirstOutput)的缓存结构,提高二叉树的生成速度;2.对于结点之间的关联信息采用“合并存储、分位标记”的方式,简单、快捷、易于实现;3.对于叶子结点的深度生成采用“流水线”处理思想,并行处理,任务完全独立于分支结点与叶子结点的生成,宏观上无间隙;4.各级模块采用并行处理模式,任务完全独立;5.采用硬件实现,能够充分发挥硬件在速度方面的优势。附图说明图1为本发明的二叉树构造的整体设计框图。图2为本发明的两级FIFO构造二叉树的结构图。图3为本发明的关联信息统计存储格式示意图。具体实施方式结合附图对本发明作进一步描述。如图1中所示,本发明一种基于硬件FPGA快速实现最优二叉树的方法,此方法包括二叉树构造模块、结点关联信息统计模块、深度生成模块、二叉树产生模块,上述所有模块均采用硬件FPGA实现,其特征在于按以下步骤进行:第1步,二叉树构造模块对已经统计排序完成的数据进行二叉树的构造,分两级FIFO(FirstInputFirstOutput)进行缓存,第一级存储叶子结点,第二级存储分支结点,每次从两级FIFO中分别取出前两个数据,四个数据中最小的两个数据构造成分支结点存于二级FIFO,如此循环,直到所有的叶子结点和分支结点构造完成;第2步,结点关联信息统计模块统计各个分支结点与叶子结点之间的关系,采用“合并存储、分位标记”的方式,其中二叉树构造模块与结点关联信息统计模块可以捆绑成一个数据流A;第3步,深度生成模块不停的监测结点关联信息统计模块,融合“流水线”处理思想,如果对应的叶子结点标志位有效,则将对应的深度加1,以此来得到所有叶子结点在二叉树中的深度;第4步,二叉树产生模块通过深度生成模块统计的叶子结点深度信息产生最终的最优二叉树,达到快速实现最优二叉树目的,其中深度生成模块与二叉树产生模块可以捆绑成一个数据流B。数据流A与数据流B之间引入“流水线”处理思想,数据流B的输入是数据流A的输出,两条数据流处理完全独立,互不干涉,充分显示了该方案的优势。如图1所示,二叉树构造模块负责对输入的数据进行二叉树的构造,两级FIFO构造二叉树的结构图如图2所示,采用两级FIFO实现,并输出叶子结点与分支结点之间的关联信息给结点关联信息统计模块;结点关联信息统计模块需要统计每一个分支结点与叶子结点之间的关系,然后将它们之间的信息采用“合并存储、分位标记”的方式按表1所示的数据格式(286个叶子结点,分支结点值用30bit表示)存于缓存中,只要结点对应的位置为1并且有效,则会发送一个脉冲信号给深度生成模块;深度生成模块需要及时的统计各个叶子结点的深度,然后将整个二叉树结点的深度信息发送给二叉树产生模块;二叉树产生模块以最快的速度恢复出最优二叉树。表1为分支节点与叶子结点存储缓存中的数据格式例如对于具体的二叉树,当对应分支节点有5个时存储信息的数据格式如表2所示,对应得到如图3所示的最优二叉树。表2为分支节点有5个时存储的信息BIT315~286285284…16151413…9…43…0值91000011010101000整个最优二叉树构造时的数据处理流程为:1.外部输入的数据经过统计排序之后进入二叉树构造模块,对于一颗树来说外部统计排序完成的数据就是这颗树的所有叶子结点,直接存于缓存FIFO0;2.从缓存FIFO0与FIFO1中分别取出两个数据,最开始的时候FIFO1是没有数据的所以只需要在FIFO0中取出2个数据结合成一个新的分支结点存于FIFO1中;3.结点关联信息统计模块会记录下这个新的分支结点的权重信息(所有叶子结点的权重信息之和)与组成这个分支结点的所有叶子结点,在对应的位置将标志位置1并发出标志位有效信号给深度生成模块,深度生成模块收到有效信号之后就会将对应的叶子结点深度加1;4.再次从缓存FIFO0与FIFO1中分别取出两个数据,如果缓存FIFO中不够2个数据就只取剩下的,在取出的4个数据(可能只有3个、2个)中找到权重值最小的两个数据结合成一个新的分支结点存于FIFO1中,因为FIFO0中是按照权重值经过排序的,所有按照上述规则构造分支结点之后,存于FIFO1中的数据也是按照权重值排过序的;5.重复步骤3和步骤4,直到只剩下唯一的一个分支结点,则认为整个最优二叉树构造完成,开始下一个二叉树的构造;6.当整个二叉树构造完成之后,深度生成模块也统计完成了所有叶子结点在该二叉树中的深度,最后二叉树产生模块就可以根据深度生成模块提供的叶子结点在该二叉树中的深度信息来产生最优二叉树。1.本发明主要针对的是已经统计排序完成的数据,通过两级FIFO的缓存结构构造最优二叉树,因为已经排序完成,所以二级FIFO中的数据也是按照顺序存储的,不需要考虑排序问题并且采用两级FIFO结构,速度更快;2.本发明的结点信息采用的是“合并存储、分位标记”的方式,易于实现,并且方便扩展;3.本发明引入“流水线”处理思想,数据流A与数据流B之间控制完全独立,互不干涉,不会因为任一一方遇到瓶颈而影响另外一方的情况;4.本发明由于采用硬件方式实现,并行处理,宏观上无间隙。当前第1页1 2 3