一种基于FPGA_ROS的可重构计算系统和方法与流程

文档序号:11234041阅读:2396来源:国知局
一种基于FPGA_ROS的可重构计算系统和方法与流程

本发明涉及fpga系统领域,具体为一种基于fpga_ros的可重构计算系统和方法。



背景技术:

ros(robotoperatingsystem)是美国willowgarage公司于2007年发布的开源机器人操作系统。ros是专为机器人软件开发所设计出来的一套操作系统架构。它提供类似于操作系统的服务,首要设计目标是在机器人研发领域提高代码复用率。ros是一种分布式处理框架,这使可执行文件能被单独设计,并且在运行时松散耦合。

fpga_ros是将fpga芯片作为一个ros节点,同样遵循发布/订阅消息机制,可以和其他标准的ros节点进行交互,fpga_ros通过将需要运算的模块移交给fpga处理,实现fpga对ros节点的加速。

基于fpga的计算系统设计与通用计算机系统编程相比,其开发难度大,可移植性和可拓展性差,这主要是因为两者在编程模式上有这本质区别。使用通用计算机开发程序时,开发人员无需了解硬件,也无须关注硬件本身资源大小。而在基于fpga开发程序时,一开始就已经选定了器件类型,其本身资源大小已经固定,而在设计中,如果所需资源超出器件本身资源,则无法生成硬件电路加载到fpga器件中。因此,如果想在fpga器件上运行超出器件资源的程序,需要对fpga的架构进行重新设计,提高了开发成本。



技术实现要素:

为了解决上述问题,本发明提供了一种基于fpga_ros的可重构计算系统和方法,其能够将fpga_ros应用到超出芯片资源的复杂图像算法上,降低了开发成本。

其技术方案是这样的:一种基于fpga_ros的可重构计算系统,其特征在于,其包括至少两组串联连接的fpga_ros模块,所述fpga_ros模块包括arm芯片、arm与fpga交互接口和fpga芯片,所述arm芯片上设置有订阅接口、发布接口,前面一组所述fpga_ros模块的发布接口与相邻的后面一组所述fpga_ros模块的订阅接口连接,所述fpga芯片配置与所述fpga_ros模块数量对应的ip核。

其进一步特征在于,相邻的两个所述ip核之间通过图像缓冲模块、ddr芯片和行缓冲模块连接。

一种基于fpga_ros的可重构计算方法,其特征在于,将至少两组fpga_ros模块串联连接,所述fpga_ros模块包括arm芯片、arm与fpga交互接口和fpga芯片,所述arm芯片上设置有订阅接口、发布接口,所述fpga芯片配置与所述fpga_ros模块数量对应的ip核,所述ip核之间通过可重构方式进行切换,前面一组所述fpga_ros模块的发布接口发布的数据输入相邻的后面一组所述fpga_ros模块的订阅接口,最后一组所述fpga_ros模块的发布接口输出的为最终结果。

采用本发明的系统和方法后,将大型算法分解成不同的模块并通过函数调用实现不同模块之间的配合一样,将fpga上的算法拆分成不同的功能块,然后将这些功能块串联起来作为完整的算法模块,即可将fpga_ros应用到超出芯片资源的复杂图像算法上,降低了开发成本。

附图说明

图1为本发明系统框图;

图2为相邻的两个ip核连接框图;

图3为pr机制的示意图;

图4为算法调度示意图;

图5为双目算法的ros可重构实现流程图。

具体实施方式

见图1所示,一种基于fpga_ros的可重构计算系统,其包括至少两组串联连接的fpga_ros模块,fpga_ros模块包括arm芯片、arm与fpga交互接口和fpga芯片,arm芯片上设置有订阅接口、发布接口,前面一组fpga_ros模块的发布接口与相邻的后面一组fpga_ros模块的订阅接口连接,fpga芯片配置与fpga_ros模块数量对应的ip核。相邻的两个ip核之间通过图像缓冲模块、ddr芯片和行缓冲模块连接。

一种基于fpga_ros的可重构计算方法,将至少两组fpga_ros模块串联连接,fpga_ros模块包括arm芯片、arm与fpga交互接口和fpga芯片,arm芯片上设置有订阅接口、发布接口,fpga芯片配置与fpga_ros模块数量对应的ip核,ip核之间通过可重构方式进行切换,前面一组fpga_ros模块的发布接口发布的数据输入相邻的后面一组fpga_ros模块的订阅接口,最后一组fpga_ros模块的发布接口输出的为最终结果。

硬件系统模块算法的调度策略借助了pr(partialreconfiguration)技术,pr技术允许fpga在运行过程中切换逻辑,这是fpga_ros可以对算法进行重构的基础。pr技术为fpga提供了一块特殊区域,允许fpga在运行过程中替换这个区域的逻辑而不影响。其他逻辑的正常运行.使用pr技术主要有以下三大优点:通过分时复用的方式节约硬件资源;保持成熟的设计不变,只修改部分逻辑,加快开发效率;只替换需要的逻辑部分,运行过程中加快了逻辑功能的切换速度[6].

图3所示是pr机制的示意图,在fpga上划分出一个可重构的块a.运行过程中可以使用多个部分的bit文件,如a1.bit、a2.bit等对块a进行配置.a1.bit、a2.bit、a3.bit和a4.bit分别包含不同的算法,通过对bit文件的配置完成算法的切换.在配置bit文件的过程中

,除了可重构块a以外其他的fpga资源都保持不变,可持续运行而不受配置影响.

考虑到在可重构计算中图像算法被分割成了多个模块,软件层需要设计调度方法保证多个模块在调度时结果的准确性,否则会因切换不同模块导致fpga死锁。死锁的产生主要是因为多个模块的ip核竞争fpga资源,因为fpga是独占资源,当fpga工作时如果又有模块通过pr方式尝试去替换正在运行的逻辑资源,会导致fpga直接卡死,所以软件的调度主要是控制不同图像模块在fpga的启停时间和顺序。ros的通讯基于发布订阅方式,即在订阅到话题后进行处理,然后将结果发布给订阅了发布话题的节点,然后下一个节点订阅到后依次再处理然后发布,所以在可重构fpga_ros中,如图4所示,算法分割成了n个模块,分别为ip1、ip2、…、ipn;time_n表示不同模块所执行的时间;标有pc的一行代表pc上进行的操作,arm和fpga表示在arm和fpga上进行的操作。可以看出,当从pc上发布图像时,ip1所在模块开始工作,处理完成后交由ip2,直至ipn在fpga处理的结果返回,然后由pc上的订阅图片接收到结果,整幅图片的流程结束。ros本身是串行处理单张图片的,但pc发布的图像多数是连续的视频流,如果pc发布图片的速度快于各个模块之间的时间之和,必然会导致在新图片发布的同时,上一帧图片依然在第n个模块中处理,这会造成这两个模块竞争fpga资源,所以在软件调度中,需要根据各个模块的运行时间来调整发布图片的速率,保证其慢于各个模块的运行时间之和。设pc上ros发布的两帧间隔为tcamera,则tcamera>(time_1+time_2+…+time_n),通过放慢发布图像的速度保证了图像结果的正确性。

下面举例具体说明ros可重构实现双目算法过程:用户ros节点首先发布左图和右图图像(分别为left_input和right_input),在订阅到左右图像数据后,双目校正算法的fpga_ros节点从本地读取左右参数数据,然后和图像数据一起交由fpga处理,处理完毕之后,发布左右校正后图像数据话题(left_recf和right_recf),双目匹配算法的fpga_ros节点订阅左右校正后图像数据话题,在fpga处理完毕后,发布视差图话题(out_image),最后用户节点(display_result)订阅视差图话题并显示出结果。具体流程如图5所示。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1