分布式系统及其主系统和从系统以及代码加载方法
技术领域
本发明涉及代码加载技术,特别涉及一种可实现各从设备代码加载的分布式系统、一种分布式系统中可向从系统加载代码的主系统、一种分布式系统中可由主系统加载代码的从系统、以及一种分布式系统中的代码加载方法。
背景技术
分布式系统一般由一个主设备和至少一个从系统组成,各从系统与主系统分别执行特定的应用程序、并通过系统间接口通信,即可协同完成特定的功能。其中,无论是主系统还是从系统,都包含有例如PCI控制器等CPU、SDRAM等随机存储器件、FPGA/CPLD等可编程逻辑芯片、以及非易失性存储器件。
在分布式系统启动的过程中,每个从系统的CPU均先从本系统的非易失性存储器件中读取并执行用于对硬件进行基本初始化的引导程序代码,从而为后续执行应用程序做好准备,然后再从本系统的非易失性存储器件中读取、或通过PCI接口等系统间接口从主系统加载应用程序代码至本系统的随机存储器件中,最后跳转到应用程序入口地址执行应用程序代码。
参见图1,以两个从系统为例,主系统的非易失性存储器件中存储有主系统的引导程序和应用程序,还存储有从系统2的应用程序,在分布式系统上电后,主系统的CPU先后从本系统的非易失性存储器件中读取并执行本系统的引导程序和应用程序;从系统1的非易失性存储器件中则存储有从系统1的引导程序和应用程序,在分布式系统上电后,从系统1的CPU先后从本系统的非易失性存储器件中读取并执行本系统的引导程序和应用程序;从系统2的非易失性存储器件中仅存储有从系统2的引导程序,在分布式系统上电后,从系统2的CPU从本系统的非易失性存储器件中读取并执行引导程序后,再从主系统加载应用程序并执行。
然而,随着分布式系统在功能上的不断丰富,其对于运行性能、小型化、微型化、低成本、低功耗的要求也就随之提高。对于这些不断提高的要求,上述分布式系统会存在如下缺陷:
1、每个从系统都需要至少一个非易失性存储器件、并且至少需要预先在该非易失性存储器件中写入本系统的引导程序,增加了从系统的生产成本;
2、非易失性存储器件及其布线会占用较大空间,不利于系统的小型化;
3、每个从系统的引导程序和应用程序同样存在版本配套关系,因而增加了从系统的维护成本;
4、为了保证版本配套关系而手动升级从系统的引导程序时易出错,例如正在向从系统的非易失性存储器件写入引导程序时发生断电,从而易导致从系统无法正常启动;
5、从系统引导程序和应用程序的后续版本升级和业务扩展,受限于非易失性存储器件的容量;
6、从系统的非易失性存储器件在启动完成后依然上电消耗能量,增加了分布式系统的总功耗。
可见,现有的分布式系统存在成本高、可靠性低、升级和扩展受限、以及功耗大等诸多缺陷。
发明内容
有鉴于此,本发明提供了一种可实现各从设备代码加载的分布式系统、一种分布式系统中可向从系统加载代码的主系统、一种分布式系统中可由主系统加载代码的从系统、以及一种分布式系统中的代码加载方法,能够降低成本、提高可靠性、减少升级和扩展所受限制、以及降低功耗。
本发明提供的一种可实现各从设备代码加载的分布式系统,包括主系统和至少一个从系统,其中,
主系统包括主系统CPU、主系统逻辑芯片、主系统随机存储器件、以及非易失性存储器件,主系统的非易失性存储器件中存放有主系统的引导程序和应用程序、以及从系统的应用程序;
从系统包括从系统CPU、从系统逻辑芯片、以及从系统随机存储器件,从系统CPU通过系统间接口与主系统CPU相连;
从系统逻辑芯片通过系统间总线与主系统CPU相连、且内部具有双口RAM,该双口RAM一端连接所述系统间总线、另一端连接其所在从系统的从系统CPU;
主系统非易失性存储器件中还存放有各从系统的引导程序;
主系统CPU,用于在分布式系统上电后从主系统的非易失性存储器件加载主系统引导程序,用以初始化主系统随机存储器件、以及所述系统间接口和所述系统间总线;在初始化完毕后,通过所述系统间总线将主系统非易失性存储器件中的各从系统的引导程序分别写入至各从系统逻辑芯片内的双口RAM;在写入完毕后,对各从系统CPU解除复位;在收到从系统CPU发送的请求应用程序的通知后,通过所述系统间接口将主系统的非易失性存储器件中的对应从系统的应用程序发送给对应从系统CPU;
从系统CPU,用于在分布式系统上电后保持复位状态;在被主系统CPU解除复位后,从其所在从系统的从系统逻辑芯片内的双口RAM加载该从系统的引导程序、用以初始化所述系统间接口以及从系统随机存储器件;在初始化完毕后,通过所述系统间接口向主系统CPU发送请求应用程序的通知,然后接收主系统CPU发送的该从系统的应用程序、并加载至从系统随机存储器件中。
从系统逻辑芯片为FPGA;
所述FPGA内固化有所述双口RAM;或者,所述FPGA内置有只读存储器、该只读存储器内存储有可供所述FPGA构建所述双口RAM的逻辑芯片代码;或者,主系统非易失性存储器件中存放有可供所述FPGA构建所述双口RAM的逻辑芯片代码,且所述FPGA进一步通过JTAG总线从主系统非易失性存储器件中加载所述逻辑芯片代码、用以构建所述双口RAM。
从系统的引导程序由汇编语言编写、且不需要堆栈空间。
主系统CPU利用电平信号改变从系统CPU复位管脚状态,以实现对从系统CPU解除复位。
本发明提供的一种分布式系统中可向从系统加载代码的主系统,包括主系统CPU、主系统逻辑芯片、主系统随机存储器件、以及非易失性存储器件,该主系统的非易失性存储器件存放有主系统的引导程序和应用程序、以及各从系统的应用程序,且该主系统CPU通过系统间接口与所述分布式系统中的各从系统CPU相连;
所述非易失性存储器件中还存放有各从系统的引导程序,且主系统CPU还通过系统间总线与各从系统的逻辑芯片相连;
在分布式系统上电后,主系统CPU用于从所述非易失性存储器件加载主系统引导程序,用以初始化主系统随机存储器件、以及所述系统间接口和所述系统间总线;
在初始化完毕后,主系统CPU用于通过所述系统间总线将所述非易失性存储器件中的各从系统的引导程序分别写入至各从系统逻辑芯片内的双口RAM;
在任一从系统的引导程序写入完毕后,主系统CPU用于对该从系统的CPU解除复位,以使该从系统的CPU能够从该从系统逻辑芯片内的双口RAM中加载该从系统的引导程序、并初始化所述系统间接口;
在收到任一从系统CPU初始化完毕后发送的请求应用程序的通知后,主系统CPU用于通过所述系统间接口将所述非易失性存储器件中的该从系统的应用程序发送给该从系统的CPU。
从系统逻辑芯片为FPGA,且所述非易失性存储器件中存放有可供逻辑芯片构建所述双口RAM的逻辑芯片代码,以供各从系统逻辑芯片在所述分布式系统上电后通过JTAG总线予以加载。
从系统的引导程序由汇编语言编写、且不需要堆栈空间。
所述CPU利用电平信号改变从系统CPU复位管脚状态,以实现对从系统CPU解除复位。
一种分布式系统中可由主系统加载代码的从系统,包括从系统CPU、从系统逻辑芯片、以及从系统随机存储器件,从系统CPU通过系统间接口与所述分布式系统中的主系统CPU相连,
从系统逻辑芯片通过系统间总线与主系统CPU相连,且内部具有双口RAM,该双口RAM一端连接所述系统间总线、以使主系统CPU写入该从系统的引导程序,该双口RAM另一端则连接其所在从系统的从系统CPU;
从系统CPU,用于在分布式系统上电后保持复位状态;在被主系统CPU解除复位后,从其所在从系统的从系统逻辑芯片内的双口RAM加载该从系统的引导程序、用以初始化所述系统间接口以及从系统随机存储器件;在初始化完毕后,通过所述系统间接口向主系统CPU发送请求应用程序的通知,然后接收主系统CPU发送的该从系统的应用程序、并加载至从系统随机存储器件中。
从系统逻辑芯片为FPGA;
所述FPGA内固化有所述双口RAM;或者,所述FPGA内置有只读存储器,该只读存储器内存储有可供所述FPGA构建所述双口RAM的逻辑芯片代码;或者,主系统非易失性存储器件中存放有可供所述FPGA构建所述双口RAM的逻辑芯片代码,且所述FPGA进一步通过JTAG总线从主系统非易失性存储器件中加载所述逻辑芯片代码、用以构建所述双口RAM。
从系统的引导程序由汇编语言编写、且不需要堆栈空间。
从系统CPU的复位管脚的状态可被主系统CPU通过电平信号予以改变,用以实现从系统CPU的解除复位。
一种分布式系统中的代码加载方法,包括:
a、分布式系统上电后,从系统CPU保持复位状态;主系统CPU从本系统非易失性存储器件加载主系统引导程序,用以初始化主系统随机存储器件、主系统CPU与从系统CPU之间的系统间接口、以及主系统CPU与从系统逻辑芯片内的双口RAM之间的系统间总线;
b、主系统CPU完成初始化后,从主系统非易失性存储器件中读取从系统的引导程序,并通过所述系统间总线写入至从系统逻辑芯片内的双口RAM;
c、主系统CPU写入从系统引导程序完毕后,对从系统CPU解除复位;
d、从系统CPU解除复位后,从其所在从系统的从系统逻辑芯片内的双口RAM加载引导程序、并初始化所述系统间接口、以及从系统随机存储器件;
e、从系统CPU完成初始化后,通过所述系统间接口通知主系统CPU发送该从系统的应用程序;
f、主系统CPU从本系统非易失性存储器件中读取从系统的,并通过所述系统间接口发送至从系统CPU;
g、从系统CPU将接收的该从系统的应用程序加载至本系统随机存储器件中。
从系统逻辑芯片为FPGA;
所述FPGA内固化有所述双口RAM;
或者,所述FPGA内置有只读存储器,该只读存储器内存储有可供从系统逻辑芯片构建所述双口RAM的逻辑芯片代码,所述步骤a中,从系统逻辑芯片从自身内置的只读存储器中加载逻辑芯片代码、用以构建所述双口RAM;
或者,所述步骤a之前进一步在主系统非易失性存储器件中存放可供逻辑芯片构建所述双口RAM的逻辑芯片代码,所述步骤a中,从系统逻辑芯片通过JTAG总线从主系统非易失性存储器件中加载所述逻辑芯片代码、用以构建所述双口RAM。
从系统的引导程序由汇编语言编写、且不需要堆栈空间。
所述步骤c中,主系统CPU通过电平信号改变从系统CPU复位管脚状态来实现对从系统CPU解除复位。
由上述技术方案可见,本发明由主系统统一管理和维护各从系统的引导程序和应用程序、且各从系统逻辑芯片内具有用于存放本系统引导程序的双口RAM,因而使得主系统能够将各从系统的引导程序分别写入至该从系统逻辑芯片内的双口RAM,并能够在写入完毕后对该从系统CPU解除复位、以使该从系统CPU从本系统逻辑芯片内的双口RAM中加载本系统引导程序,从而通过主系统统一实现各从系统引导程序加载及初始化启动,产生了如下的技术效果:
1、利用从系统逻辑芯片内的双口RAM替代现有的非易失性存储器件,降低生产成本;
2、无需非易失性存储器件,能够节省非易失性存储器件及其布线所占用的空间,利于系统的小型化、提高功能密度;
3、由主系统管理和维护所有从系统的引导程序及应用程序,自动保证了版本兼容性、降低维护成本;
4、避免手动升级从系统引导程序时的出错,提高系统的健壮性;
5、主系统可对从系统逻辑芯片内的双口RAM反复写入不同版本的引导程序、对从系统CPU反复发送不同版本的应用程序,从而使得从系统引导程序和应用程序的后续版本升级和业务扩展不会受限于非易失性存储器件的容量;
6、无需非易失性存储器件,降低了分布式系统的总功耗。
附图说明
图1为现有分布式系统的一实例示意图;
图2为本发明实施例分布式系统的框架示意图;
图3为本发明实施例代码加载方法的示例性流程图。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明进一步详细说明。
在现有技术的硬件设计中,各从系统中都会设置有FPGA或CPLD等逻辑芯片,而这些逻辑芯片内部通常会具有10k~100k左右的双口RAM,逻辑芯片内部的双口RAM具有如下特点:
1、可以从一端写入数据、并可以从另一端读出所写入的数据;
2、写入的数据会在掉电后丢失;
3、在从系统初始化阶段、双口RAM内的空间不会被使用。
考虑到现有技术所具有的诸多缺陷都是由从系统必须利用其非易失性存储器件实现初始化启动所导致,因此,本发明实施例利用从系统中的上述双口RAM替代现有从系统中的非易失性存储器,并提供了一种区别于现有技术的代码加载方式。
需要说明的是,由于随机存储器所具有的数据掉电丢失特性,因而现有所有的传统硬件设计中都不会使用随机存储器来存放待加载的引导程序,进而,本发明实施例也不是简单地利用从系统中的上述双口RAM替代非易失性存储器,而是利用从系统中的上述双口RAM、以及主系统的配合来实现的;进一步说,这里所述的主系统的配合,主要是指现有所有传统硬件设计中并未使用过的主系统控制从系统初始化启动的方式,即,例如本文背景技术部分所述现有各种传统的加载方式均无法脱离从系统自身控制初始化启动的思路。
具体说,本发明实施例由主系统统一管理和维护各从系统的引导程序和应用程序、并可由主系统将各从系统的引导程序分别写入至该从系统逻辑芯片内的双口RAM,而且,主系统CPU还能够在从系统引导程序写入完毕后对该从系统CPU解除复位、以使该从系统CPU从本系统逻辑芯片内的双口RAM中加载本系统引导程序。
下面,先对本发明实施例中基于上述代码加载方式的分布式系统、以及该分布式系统中的主系统和从系统进行详细说明。
图2为本发明实施例分布式系统的框架示意图。如图2所示,本实施例的分布式系统中,包括主系统和至少一个从系统(图2中仅示出了一个从系统,其余从系统用省略号表示)。
主系统内部的硬件结构相比于现有技术并未发生变化,仍包括主系统CPU、主系统逻辑芯片、主系统随机存储器件、以及非易失性存储器件(图2中仅示出了主系统中的非易失性存储器件)。
而从系统中虽然仍包括从系统CPU、从系统逻辑芯片、以及从系统随机存储器件,但从系统中并不是必须包括非易失性存储器件。
此外,本实施例的分布式系统中,主系统的非易失性存储器件中除了像现有技术那样存放了主系统的引导程序和应用程序、以及从系统的应用程序之外,还存放有各从系统的引导程序;而且,主系统与从系统之间的连接关系也区别于现有技术,即除了各从系统CPU通过系统间接口与主系统CPU相连之外,各从系统逻辑芯片进一步通过预设的系统间总线与主系统CPU相连。
基于上述硬件架构,主系统和从系统之间涉及代码加载的交互方式如下:
首先,是分布式系统上电后的主系统初始化启动阶段:
主系统CPU从主系统的非易失性存储器件加载主系统引导程序,用以初始化主系统随机存储器件、以及所述系统间接口和所述系统间总线;
而从系统CPU则保持复位状态;
且,从系统逻辑芯片内具有双口RAM,该双口RAM一端连接所述系统间总线、另一端通过系统内总线连接该逻辑芯片所在从系统的从系统CPU。
此后,是从系统引导程序加载、以及从系统初始化启动阶段:
主系统CPU在其初始化完毕后,通过已进行初始化的系统间总线,将主系统非易失性存储器件中的各从系统的引导程序分别写入至各从系统逻辑芯片内的双口RAM;在对每个从系统逻辑芯片内的双口RAM写入完毕后,对该从系统逻辑芯片所连接的从系统CPU解除复位,例如,主系统CPU可利用电平信号改变从系统CPU复位管脚状态,以实现对从系统CPU解除复位;
从系统CPU在被主系统CPU解除复位后,从其所在从系统的从系统逻辑芯片内的双口RAM加载该从系统的引导程序、用以初始化所述系统间接口以及从系统随机存储器件。
最后,是从系统应用程序加载阶段:
从系统CPU在初始化完毕后,通过已初始化的系统间接口向主系统CPU发送请求应用程序的通知;
主系统CPU在收到从系统CPU发送的请求应用程序的通知后,通过已初始化的系统间接口,将主系统的非易失性存储器件中的对应从系统的应用程序发送给对应从系统CPU;
相应地,从系统CPU即可接收主系统CPU发送的该从系统的应用程序、并按照现有方式校验和解压缩后加载至从系统随机存储器件中,然后跳转到应用程序入口地址执行应用程序代码、并进行应用程序初始化,在应用程序初始化完毕后通知主系统CPU启动完毕,以供主系统记录各从系统是否启动完毕。
实际应用中,从系统逻辑芯片通常采用FPGA,其中:
一部分型号的FPGA内固化有上述双口RAM;
还有一部分型号的FPGA内置有只读存储器,该只读存储器内存储有可供从系统逻辑芯片构建所述双口RAM的逻辑芯片代码;
另外一部分型号的FPGA则既没有固化的双口RAM、也未内置可存放逻辑芯片代码的只读存储器,对于这类FPGA,主系统中的非易失性存储器件内,还需要进一步存放有可供逻辑芯片构建所述双口RAM的逻辑芯片代码,且作为从系统逻辑芯片的FPGA在分布式系统上电后,需要进一步通过JTAG总线从主系统非易失性存储器件中加载上述逻辑芯片代码、用以构建前述双口RAM。
此外,考虑到逻辑芯片所能够构建的双口RAM容量有限,较佳地,从系统的引导程序可由程序汇编语言编写、且不需要堆栈空间,这样,可以节省引导程序文件本身所占用的空间、以及运行引导程序所需要的空间;进而,为了进一步节省引导程序文件本身所占用的空间,从系统的引导程序可以仅包含从系统CPU初始化系统间接口和从系统随机存储器件这两种功能,而现有技术中从系统引导程序所具备的其他非必要的辅助扩展功能可以舍弃。
以上,是对本发明实施例中分布式系统及其主系统和从系统的详细说明,下面,再对本发明实施例中的代码加载方法进行详细说明。
图3为本发明实施例代码加载方法的示例性流程图。如图3所示,本实施例中的代码加载方法基于如图2所示的分布式系统,并包括如下步骤:
步骤300,分布式系统上电。
步骤301,从系统CPU保持复位状态,如果从系统逻辑芯片内未固化有双口RAM,则还需要从系统逻辑芯片构建双口RAM;主系统CPU从本系统非易失性存储器件加载主系统引导程序,用以初始化主系统随机存储器件、主系统CPU与从系统CPU之间的系统间接口、以及主系统CPU与从系统逻辑芯片内的双口RAM之间的系统间总线。
实际应用中,从系统逻辑芯片通常采用FPGA,其中:
一部分型号的FPGA内固化有可在上电时自动构建而成的双口RAM;
还有一部分型号的FPGA内置有只读存储器,该只读存储器内存储有可供从系统逻辑芯片构建所述双口RAM的逻辑芯片代码,对于这种情况,本步骤中,从系统逻辑芯片从自身内置的只读存储器中加载逻辑芯片代码、用以构建所述双口RAM
另外一部分型号的FPGA则既没有固化的双口RAM、也未内置可存放逻辑芯片代码的只读存储器,对于这种情况,本步骤之前需要进一步在主系统非易失性存储器件中存放可供逻辑芯片构建所述双口RAM的逻辑芯片代码,且在本步骤中,从系统逻辑芯片通过JTAG总线从主系统非易失性存储器件中加载所述逻辑芯片代码、用以构建所述双口RAM。
此外,考虑到逻辑芯片所能够构建的双口RAM容量有限,较佳地,从系统的引导程序可由程序汇编语言编写、且不需要堆栈空间,进而从系统的引导程序可以仅包含从系统CPU初始化系统间接口和从系统随机存储器件这两种功能。
步骤302,主系统CPU完成其初始化后,从主系统非易失性存储器件中读取从系统的引导程序,并通过已初始化的系统间总线写入至从系统逻辑芯片内的双口RAM予以保存。
步骤303,主系统CPU写入从系统引导程序完毕后,对从系统CPU解除复位。
本步骤中,主系统CPU可以通过电平信号改变从系统CPU复位管脚状态来实现对从系统CPU解除复位。
步骤304,从系统CPU解除复位后,从其所在从系统的从系统逻辑芯片内的双口RAM加载引导程序、并初始化所述系统间接口、以及从系统随机存储器件,从系统CPU完成初始化后通过已初始化的系统间接口通知主系统CPU发送该从系统的应用程序。
步骤305,主系统CPU从本系统非易失性存储器件中读取从系统的应用程序,并通过已初始化的系统间接口发送至从系统CPU。
步骤306,从系统CPU将接收的该从系统的应用程序加载至本系统随机存储器件中,然后跳转到应用程序入口地址执行应用程序代码、并进行应用程序初始化,从系统CPU还在应用程序初始化后通知主系统CPU启动完毕,以供主系统记录各从系统是否启动完毕。
至此,本流程结束,分布式系统开始正常运行应用程序所对应的业务。
需要说明的是,上述流程仅仅是以一个从系统为例,实际应用中,对于每一个从系统均需要并行执行上述流程。
如上可见,本发明实施例由主系统统一管理和维护各从系统的引导程序和应用程序、且各从系统逻辑芯片内具有用于存放本系统引导程序的双口RAM,因而使得主系统能够将各从系统的引导程序分别写入至该从系统逻辑芯片内的双口RAM,并能够在写入完毕后对该从系统CPU解除复位、以使该从系统CPU从本系统逻辑芯片内的双口RAM中加载本系统引导程序,从而通过主系统统一实现各从系统引导程序加载及初始化启动,降低系统生产和维护成本、提高系统可靠性和健壮性、减少升级和扩展所受限制、并降低系统功耗。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换以及改进等,均应包含在本发明的保护范围之内。