一种基于FPGA的多核CPU实现方法及相关装置与流程

文档序号:16530729发布日期:2019-01-05 10:44阅读:174来源:国知局
一种基于FPGA的多核CPU实现方法及相关装置与流程

本发明涉及fpga技术领域,更具体地说,涉及一种基于fpga的多核cpu实现方法、系统、装置及cpu可读存储介质。



背景技术:

fpga(field-programmablegatearray,现场可编程门阵列)是作为专用集成电路(asic)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。

fpga可以实现高速数字电路进行专用计算,也可以片内搭载软核cpu完成各种通用计算,但是软核cpu性能较弱,通常无法实现大数据量的实时运算。

因此,如何提fpga通用计算能力,是本领域技术人员需要解决的问题。



技术实现要素:

本发明的目的在于提供一种基于fpga的多核cpu实现方法、系统、装置及cpu可读存储介质,以解决如何提fpga通用计算能力的问题。

为实现上述目的,本发明实施例提供了如下技术方案:

一种基于fpga的多核cpu实现方法,包括:

利用fpga的qsys添加预设个数的nios处理器;将所述nios处理器作为cpu;

为每一个所述cpu分配独立运行的内存;

启动所有所述cpu。

其中,所述为每一个所述cpu分配独立运行的内存之后,还包括:

为所有所述cpu建立共用资源区。

其中,所述为所有所述cpu建立共用资源区之后,还包括:

为所述共用资源区添加与每个所述cpu对应的资源互斥器。

其中,所述启动所有所述cpu,包括:

当所述cpu的运行内存为片上ram时,将每个所述cpu的elf文件集成至所述fpga的sof文件;

通过加载所述sof文件启动所有所述cpu。

其中,所述启动所有所述cpu,包括:

在所有所述cpu中确定一个主cpu;

启动所述主cpu;

将所有非主cpu进行复位;

利用所述主cpu将每个非主cpu的elf文件从flash中转存至对应的每个非主cpu的运行内存;

取消所有非主cpu的复位,并加载启动每个非主cpu的elf文件,以完成非主cpu的启动。

本申请还提供了一种基于fpga的多核cpu实现系统,包括:

添加模块,用于利用fpga的qsys添加预设个数的nios处理器;将所述nios处理器作为cpu;

分配模块,用于为每一个所述cpu分配独立运行的内存;

启动模块,用于启动所有所述cpu。

其中,所述启动模块,包括:

集成单元,用于当所述cpu的运行内存为片上ram时,将每个所述cpu的elf文件集成至所述fpga的sof文件;

加载单元,用于通过加载所述sof文件启动所有所述cpu。

其中,所述启动模块,包括:

确定单元,用于在所有所述cpu中确定一个主cpu;

启动单元,用于启动所述主cpu;

复位单元,用于将所有非主cpu进行复位;

转存单元,用于利用所述主cpu将每个非主cpu的elf文件从flash中转存至对应的每个非主cpu的运行内存;

复位取消单元,用于取消所有非主cpu的复位,并加载启动每个非主cpu的elf文件,以完成非主cpu的启动。

本申请还提供了一种基于fpga的多核cpu实现装置,包括:

存储器,用于存储cpu程序;

处理器,用于执行所述cpu程序时实现如所述基于fpga的多核cpu实现方法的步骤。

本申请还提供了一种cpu可读存储介质,所述cpu可读存储介质上存储有cpu程序,所述cpu程序被处理器执行时实现如所述基于fpga的多核cpu实现方法的步骤。

通过以上方案可知,本发明提供的一种基于fpga的多核cpu实现方法,包括:利用fpga的qsys添加预设个数的nios处理器;将所述nios处理器作为cpu;为每一个所述cpu分配独立运行的内存;启动所有所述cpu。

由此可见,本申请提供的一种基于fpga的多核cpu实现方法,通过利用qsys添加预设个数的nios处理器,使多个nios处理器均作为cpu,并为每个nios处理器指定单独运行的内存后,启动所有的cpu,从而实现使fpga中搭载多核cpu,进而可以使fpga的通用计算能力得到大大增强。本申请还提供了一种基于fpga的多核cpu实现系统、装置及cpu可读存储介质,同样可以实现上述技术效果。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例公开的一种基于fpga的多核cpu实现方法流程图;

图2为本发明实施例公开的一种具体的基于fpga的多核cpu实现方法流程图;

图3为本发明实施例公开的一种具体的基于fpga的多核cpu实现方法流程图;

图4为本发明实施例公开的一种基于fpga的多核cpu实现系统结构示意图;

图5为本发明实施例公开的一种基于fpga的多核cpu实现装置结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明实施例公开了一种基于fpga的多核cpu实现方法、系统、装置及cpu可读存储介质,以解决如何提fpga通用计算能力的问题。

在现有技术中,fpga通常能实现高速数字电路进行专用计算,而对于cpu的通用计算来说,还需要fpga搭载软核cpu来实现,目前,fpga上通常只能搭载一个cpu,但是一个在fpga上搭载一个cpu时,通用计算能力的性能较弱,因此,本申请提供了一种基于fpga的多核cpu实现方法,通过利用qsys添加预设个数的nios处理器,使多个nios均作为cpu,并为每个nios处理器指定单独运行的内存后,实现启动所有的cpu,从而使fpga中搭载多核cpu,进而可以使fpga的通用计算能力得到大大增强。

参见图1,本发明实施例提供的一种基于fpga的多核cpu实现方法,包括:

s101,利用fpga的qsys添加预设个数的nios处理器;将所述nios处理器作为cpu。

在本方案中,首先利用qsys添加预设个数的nios处理器。

其中qsys是altera公司提供的一个在fpga上构建sopc系统的软件工具,集成在quartusii中,用以软核平台的开发,软核包括niosii及相应外设,nios处理器是一种具有32位指令集的片上可编程的软核处理器。

在本方案中,利用qsys可以添加预设个数的nios处理器,并将nios处理作为fpga的软核cpu,此时,已为fpga添加了预设个数的cpu,但是此时cpu还不能被正常使用,还需要进一步的搭载过程,来完成fpga的多核cpu实现。

s102,为每一个所述cpu分配独立运行的内存。

具体地,在添加了多个cpu后,要为每一个cpu均分配独立运行的内存,来保证每一个cpu的读写性能。

在一个具体的实施方式中,为每一个cpu分配了独立内存后,还需要建立一个共用资源区,来保证多cpu之间数据、资源的共享。

具体地,为每一个所述cpu分配独立运行的内存之后,为所有所述cpu建立共用资源区。

需要说明的是,建立共用资源区后,多个cpu之间均可以实现对共用资源区数据的共享,因此,可能会出现cpu之间对同一资源争夺的现象,为避免cpu之间争夺而出现运行错误,在一个优选实施方式中,还需要为所述共用资源区添加与每个所述cpu对应的资源互斥器,如mutex资源互斥器。也就是说,为共用资源区的每个对象都对应于一个可称为"互斥锁"的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象,从而避免了cpu之间争夺而出现运行错误的问题。

s103,启动所有所述cpu。

具体地,在添加了cpu并分配好内存后,即可启动所有已添加的cpu,以实现fpga的多核cpu。需要说明的是,在fpga技术中,启动一个cpu与启动多个cpu的方法并不相同,本申请分别提供两种启动方法,在下述实施方式中做详细描述,此处不再赘述。

由此可见,本申请实施例提供的一种基于fpga的多核cpu实现方法,通过利用qsys添加预设个数的nios处理器,使多个nios处理器均作为cpu,并为每个nios处理器指定单独运行的内存后,启动所有的cpu,从而实现使fpga中搭载多核cpu,进而可以使fpga的通用计算能力得到大大增强。

下面对本申请实施例提供的一种具体的基于fpga的多核cpu实现方法进行介绍,下文描述的一种具体的实施例对上述实施例中启动所有所述cpu的步骤做了进一步的限定和说明,其他步骤内容与上述实施例大致相同,此处不再进行赘述,具体内容可以参见上述实施例。

参见图2,本申请实施例提供的一种具体的基于fpga的多核cpu实现方法,具体包括:

s201,利用fpga的qsys添加预设个数的nios处理器;将所述nios处理器作为cpu。

s202,为每一个所述cpu分配独立运行的内存。

s203,所述cpu的运行内存为片上ram时,将每个所述cpu的elf文件集成至所述fpga的sof文件。

需要说明的是,cpu的运行内存有两种情况,即片上内存与片外内存。

当cpu的运行内存是片上ram(randomaccessmemory,随机存取存储器)时,也即,cpu的运行内存是片上内存。此时,将cpu的elf文件转为其片上内存的初始化文件,然后再将其集成到fpga逻辑中sof文件中。需要说明的是,cpu的启动是通过加载启动cpu对应的elf文件来实现。

s204,通过加载所述sof文件启动所有所述cpu。

在sof文件中集成了cpu的elf文件后,即可通过加载sof文件来启动所有的cpu。

下面对本申请实施例提供的一种具体的基于fpga的多核cpu实现方法进行介绍,下文描述的一种具体的实施例对上述实施例中启动所有所述cpu的步骤做了进一步的限定和说明,其他步骤内容与上述实施例大致相同,此处不再进行赘述,具体内容可以参见上述实施例。

参见图3,本申请实施例提供的一种具体的基于fpga的多核cpu实现方法,具体包括:

s301,利用fpga的qsys添加预设个数的nios处理器;将所述nios处理器作为cpu。

s302,为每一个所述cpu分配独立运行的内存。

s303,在所有所述cpu中确定一个主cpu。

在本方案中,提供了另一种cpu确定的方法,无论cpu的运行内存是片上内存与片外内存,均可以按照本方案提供的方法来实现cpu的启动。

具体地,首先确定一个主cpu。需要说明的是,由于intelfpga的上电加载机制,在fpga上电时,只会加载启动一个cpu,对于这一个cpu的具体加载启动的方法可以参考现有技术,在本方案中不做具体的限定。

因此,在本方案中,首先确定一个主cpu,以通过fpga的上电加载机制启动该cpu,而其他的非主cpu则作为协cpu,按照下述步骤实现启动。

需要说明的是,cpu主协关系的确定可以在本步骤中实现,也可以在添加了nios后就设定主cpu和非主cpu。

s304,启动所述主cpu。

具体地,主cpu利用fpga的上电加载机制进行启动。

s305,将所有非主cpu进行复位。

具体地,在加载启动协cpu之前,需要先将所有非主cpu进行复位,具体通过非主cpu的逻辑管脚实现对应非主cpu的复位,有关利用逻辑管脚实现cpu复位的内容具体可以参考现有技术,在本申请中不做具体限定。

s306,利用所述主cpu将每个非主cpu的elf文件从flash中转存至对应的每个非主cpu的运行内存。

具体地,利用主cpu将每个非主cpu的elf文件从flash中转存到各自的运行内存中。需要说明的是,在本方案中,可以预先指定各cpu的启动地址,也就是预先指定将每个非主cpu的elf文件转存到各自运行内存的具体地址。

s307,取消所有非主cpu的复位,并加载启动每个非主cpu的elf文件,以完成非主cpu的启动。

在将各个非主cpu的elf文件分别从flash中转存到各自的运行内存中后,即可分别加载各自的elf文件来完成cpu的启动。需要说明的是,在加载elf文件之前,还需要将各个非主cpu取消复位。

需要说明的是,该方式下elf文件需要进行特殊处理,在其bsp(boardsupportpackage,板级支持包)中设置允许代码存放在复位向量处,才能正常启动非主cpu。

下面对本申请实施例提供的一种基于fpga的多核cpu实现系统进行介绍,下文描述的一种基于fpga的多核cpu实现方法可以相互参照。

参见图4,本申请实施例提供的一种基于fpga的多核cpu实现系统,具体包括:

添加模块401,用于利用fpga的qsys添加预设个数的nios处理器;将所述nios处理器作为cpu。

分配模块402,用于为每一个所述cpu分配独立运行的内存。

启动模块403,用于启动所有所述cpu。

本实施例的一种基于fpga的多核cpu实现系统用于实现前述的一种基于fpga的多核cpu实现方法,因此一种基于fpga的多核cpu实现系统中的具体实施方式可见前文中的基于fpga的多核cpu实现方法的实施例部分,例如,添加模块401,分配模块402,启动模块403,分别用于实现上述基于fpga的多核cpu实现方法中步骤s101,s102,s103,所以,其具体实施方式可以参照相应的各个部分实施例的描述,在此不再赘述。

下面对本申请实施例提供的一种具体的基于fpga的多核cpu实现系统进行介绍,下文描述的一种具体的基于fpga的多核cpu实现系统对上述实施方式中的启动模块403做了进一步限定和说明,其他模块内容与上述实施例大致相同,具体可以参考上述实施例,此处将不再进行赘述。

具体地,上述启动模块403具体包括:

集成单元,用于当所述cpu的运行内存为片上ram时,将每个所述cpu的elf文件集成至所述fpga的sof文件;

加载单元,用于通过加载所述sof文件启动所有所述cpu。

本实施例的一种基于fpga的多核cpu实现系统用于实现前述的一种基于fpga的多核cpu实现方法,因此集成单元、加载单元分别用于实现上述实施例中s203,s204,具体内容可以参考上述实施例此处不再进行赘述。

在另一种实施方式中,上述启动模块403具体包括:

确定单元,用于在所有所述cpu中确定一个主cpu;

启动单元,用于启动所述主cpu;

复位单元,用于将所有非主cpu进行复位;

转存单元,用于利用所述主cpu将每个非主cpu的elf文件从flash中转存至对应的每个非主cpu的运行内存;

复位取消单元,用于取消所有非主cpu的复位,并加载启动每个非主cpu的elf文件,以完成非主cpu的启动。

本实施例的一种基于fpga的多核cpu实现系统用于实现前述的一种基于fpga的多核cpu实现方法,因此确定单元、启动单元、复位单元、转存单元、复位取消单元分别用于实现上述实施例中s303,s304,s305,s306,s307,具体内容可以参考上述实施例此处不再进行赘述。

下面对本申请实施例提供的一种基于fpga的多核cpu实现装置进行介绍,下文描述的一种基于fpga的多核cpu实现装置与上述任一实施例可以相互参照。

参见图5,本申请实施例提供的一种基于fpga的多核cpu实现装置,具体包括:

存储器100,用于存储cpu程序;

处理器200,用于执行所述cpu程序时可以实现上述实施例所提供的步骤。

具体的,存储器100包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和cpu可读指令,该内存储器为非易失性存储介质中的操作系统和cpu可读指令的运行提供环境。处理器200为基于fpga的多核cpu实现装置提供计算和控制能力,可以实现上述任一基于fpga的多核cpu实现方法实施例所提供的步骤。

本申请还提供了另一种cpu可读存储介质,其上存储有cpu程序,所述cpu程序被处理器执行时可以实现上述实施例所提供的步骤。该存储介质可以包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

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