一种多核SoC的固件启动方法以及多核SoC设备与流程

文档序号:16067178发布日期:2018-11-24 12:47阅读:464来源:国知局

本发明属于soc设计的技术领域,特别是涉及一种多核soc的固件启动方法以及多核soc设备。

背景技术

随着设计与制造技术的发展,集成电路设计从晶体管的集成发展到逻辑门的集成,现在又发展到ip的集成,即soc(system-on-a-chip)设计技术。soc可以有效地降低电子/信息系统产品的开发成本,缩短开发周期,提高产品的竞争力,是未来工业界将采用的最主要的产品开发方式。在进行soc设计时,有时需要多核cpu进行协同工作,以达到更高的整体性能指标。

目前,多核soc中cpu架构可划分为amp(异构)与smp(同构)两种,前者amp(异构)中的多个cpu不同,而smp(同构)中的多个cpu相同。从soc固件开发设计的角度考虑,smp架构的固件一般只需要一份即可,而amp架构的固件不仅需要编译至少两份,一般还会涉及不同的编译环境,给固件的开发调试及性能优化带来额外的开销,因此本发明选择smp架构的多核soc。

然而,多核soc的固件启动方式对soc的硬件设计及固件设计有着很大影响,典型的多核soc的smp架构具有一定的硬件要求,其在多核的通信及同步方面有专用的硬件控制逻辑,比如arm体系结构下的snoopcontrolunit(scu)可以实现多核的cache一致性;并需要硬件上保证每个cpu核心内部具有cpuid寄存器供软件读取,比如linuxkernel在启动阶段会通过smp_processor_id()函数来读取cpuid寄存器。这种特定的硬件要求给soc设计带来了一定的挑战:

一方面,通信及同步模块给ic设计带来了较大的难度;

另一方面,对于采用累加cpu硬核的smp架构来说,cpuid是无法在ic设计阶段写入cpu内部的寄存器的,于是也就无法可控地分配cpu资源。

综上所述,现有技术中对于多核soc的固件启动方法受到cpu核内部cpuid寄存器的限制无法可控地分配cpu资源的问题,以及ic设计中同步及通信的问题,尚缺乏有效的解决方案。



技术实现要素:

本发明为了克服的现有技术中多核soc的固件启动方法受到cpu核内部cpuid寄存器的限制无法可控地分配cpu资源的问题,以及ic设计中同步及通信的问题,提供一种多核soc的固件启动方法以及多核soc设备。本发明有效地通过低端cpu累加的方式实现多核smp架构,极大减轻开发人员的负担。

为了实现上述目的,本发明采用如下一种技术方案:

一种多核soc的固件启动方法,其应用于多核soc设备,所述多核soc设备包括至少两个相同的cpu,cpu之间通过系统总线共享存储器,该固件启动方法包括:每个cpu均控制其他某个cpu的复位信号,采用链式引导方法在固件启动时,由cpu依次逐个引导其他某个cpu,直至完成所有cpu核的启动。

进一步的,所述一种多核soc的固件启动方法具体包括以下步骤:

(1)bootrom流程:启动cpu将固件从外部存储器搬移进存储器中,并在cpu间共享的存储器中指定位置设置一个表示允许启动cpu执行固件代码的标志位,将存储器地址重映射成0地址,跳转进入固件流程;

(2)从启动cpu开始执行固件;

固件流程:判断其标志是否被设置,若已被设置,进行基本初始化工作,并设置当前cpu特定的栈指针,进入主循环,在进入主循环之前将存储器中指定位置的标志位修改为下一个cpu的标志,解除下一个cpu的复位信号唤醒下一个cpu;

所有cpu依次进入固件入口汇编,重复上述固件流程依次唤醒下一个cpu,直至唤醒全部cpu,实现多核soc的固件启动。

进一步的,所述步骤(1)中,仅启动cpu执行bootrom流程,在soc上电时,除启动cpu之外的其他cpu被硬件复位住。

进一步的,所述步骤(1)中bootrom流程的具体包括以下步骤:

(1-1)将启动cpu进行复位;

(1-2)bootrom流程从启动cpu的复位地址开始运行;

(1-3)启动cpu将固件从外部存储器搬移进内部共享的存储器中;

(1-4)在cpu间共享的存储器中指定位置设置一个表示允许启动cpu执行固件代码的标志位,该标志位设置为cpu_0_allowed标志;

(1-5)将cpu间共享的存储器重映射为启动cpu的复位地址并跳转至固件流程;

(1-6)启动cpu进入固件入口汇编。

进一步的,所述步骤(1)中,cpu的复位地址均为0地址;所述步骤(1)中,启动cpu为cpu_0。

进一步的,所述步骤(2)中全部cpu均执行固件流程,固件流程的具体包括以下步骤:

(2-1)从启动cpu开始执行固件,判断启动cpu的标志是否被设置,若已被设置,进行基本初始化工作,并设置当前cpu特定的栈指针,进入主循环,在进入主循环之前将存储器中指定位置的标志位修改为下一个cpu的标志,解除下一个cpu的复位信号唤醒下一个cpu;

(2-2)下一个cpu被唤醒后作为当前cpu,从0地址开始执行固件,判断由启动cpu的标志开始依次判断各个cpu的标志是否被设置,仅当判断到当前cpu的标志被设置后,设置当前cpu特定的栈指针,进入主循环,在进入主循环之前将存储器中指定位置的标志位修改为下一个cpu的标志,解除下一个cpu的复位信号唤醒下一个cpu;

(2-3)重复步骤(2)依次唤醒下一个cpu,直至唤醒全部cpu,最后一个被唤醒的cpu,判断到当前cpu的标志被设置后,设置当前cpu特定的栈指针,进入主循环。

进一步的,所述步骤(2-2)中,判断由启动cpu的标志开始依次判断各个cpu的标志是否被设置,若各个cpu的标志均未被设置,则设置启动cpu的标志,并尝试启动cpu的启动。

进一步的,所述步骤(2-1)中,启动cpu进行基本初始化工作包括中断、.data初始化、.bss段初始化或系统初始化操作。

本发明为了克服的现有技术中多核soc的固件启动方法受到cpu核内部cpuid寄存器的限制无法可控地分配cpu资源的问题,以及ic设计中同步及通信的问题,提供一种多核soc的固件启动方法以及多核soc设备。本发明有效地通过低端cpu累加的方式实现多核smp架构,极大减轻开发人员的负担。

为了实现上述目的,本发明采用如下另一种技术方案:

一种多核soc设备,所述多核soc设备基于上述一种多核soc的固件启动方法,包括至少两个相同的cpu,cpu之间通过系统总线共享存储器。

进一步的,存储器采用sram。

与现有技术相比,本发明的有益效果:

(1)本发明的一种多核soc的固件启动方法以及多核soc设备,通过多核soc设备中的复位信号线及共享内存即可实现多核的可靠启动固件,ic设计人员不必关心cpu的同步及通信问题;

(2)本发明的一种多核soc的固件启动方法以及多核soc设备,摆脱cpu核内部cpuid寄存器的限制,硬核集成更加简单;

(3)本发明的一种多核soc的固件启动方法以及多核soc设备,采用链式启动的方法,3.链式启动,与常见的所有从cpu均由主cpu启动的方式相比,减少了主从cpu之间的同步等待,每个cpu只需启动自己的下一个即可:cpu_0启动cpu_1,cpu_1启动cpu_2,以此类推;

(4)本发明的一种多核soc的固件启动方法以及多核soc设备,固件开发简单,除了每个cpu的栈指针外,所有运行地址均由编译器和链接器指定,不必手动安排地址。

附图说明

构成本申请的一部分的说明书附图用来提供对本申请的进一步理解,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。

图1为本发明多核soc设备的结构示意图;

图2为本发明多核soc的固件启动方法的方法流程图。

具体实施方式:

应该指出,以下详细说明都是例示性的,旨在对本申请提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本申请所属技术领域的普通技术人员通常理解的相同含义。

需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本申请的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。

在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面结合附图与实施例对本发明作进一步说明。

实施例1:

正如背景技术所介绍的,现有技术中存在多核soc的固件启动方法受到cpu核内部cpuid寄存器的限制无法可控地分配cpu资源的问题,以及ic设计中同步及通信的问题,提供一种多核soc的固件启动方法以及多核soc设备。本发明有效地通过低端cpu累加的方式实现多核smp架构,极大减轻开发人员的负担。

本申请的一种典型的实施方式中,采用如下技术方案:

如图1所示,

一种多核soc设备,所述多核soc设备基于上述一种多核soc的固件启动方法,包括至少两个相同的cpu,cpu之间通过系统总线共享存储器。

在本实施例中,存储器采用sram。

实施例2:

正如背景技术所介绍的,现有技术中存在多核soc的固件启动方法受到cpu核内部cpuid寄存器的限制无法可控地分配cpu资源的问题,以及ic设计中同步及通信的问题,提供一种多核soc的固件启动方法以及多核soc设备。本发明有效地通过低端cpu累加的方式实现多核smp架构,极大减轻开发人员的负担。

本申请的一种典型的实施方式中,采用如下技术方案:

如图2所示,

一种多核soc的固件启动方法,其应用于实施例1中的多核soc设备,该固件启动方法包括:每个cpu均控制其他某个cpu的复位信号,采用链式引导方法在固件启动时,由cpu依次逐个引导其他某个cpu,直至完成所有cpu核的启动。

所述一种多核soc的固件启动方法具体包括以下步骤:

(1)bootrom流程:启动cpu将固件从外部存储器搬移进存储器中,并在cpu间共享的存储器中指定位置设置一个表示允许启动cpu执行固件代码的标志位,将存储器地址重映射成0地址,跳转进入固件流程;

(2)从启动cpu开始执行固件;

固件流程:判断其标志是否被设置,若已被设置,进行基本初始化工作,并设置当前cpu特定的栈指针,进入主循环,在进入主循环之前将存储器中指定位置的标志位修改为下一个cpu的标志,解除下一个cpu的复位信号唤醒下一个cpu;

所有cpu依次进入固件入口汇编,重复上述固件流程依次唤醒下一个cpu,直至唤醒全部cpu,实现多核soc的固件启动。

所述步骤(1)中,仅启动cpu执行bootrom流程,在soc上电时,除启动cpu之外的其他cpu被硬件复位住。

在本实施例中,所述步骤(1)中,cpu的复位地址均为0地址;所述步骤(1)中,启动cpu为cpu_0。

所述步骤(1)中bootrom流程的具体包括以下步骤:

(1-1)将cpu_0进行复位;

(1-2)bootrom流程从cpu_0的复位地址开始运行;

(1-3)cpu_0将固件从外部存储器搬移进内部共享的存储器中;

(1-4)在cpu间共享的存储器中指定位置设置一个表示允许cpu_0执行固件代码的标志位,该标志位设置为cpu_0_allowed标志;

(1-5)将cpu间共享的存储器重映射为cpu_0的复位地址并跳转至固件流程;

(1-6)cpu_0进入固件入口汇编。

所述步骤(2)中全部cpu均执行固件流程,固件流程的具体包括以下步骤:

(2-1)从cpu_0开始执行固件,判断cpu_0的标志cpu_0_allowed是否被设置,若已被设置,进行基本初始化工作,并设置cpu_0特定的栈指针,进入主循环,在进入主循环之前将存储器中指定位置的标志位修改为cpu_1的标志cpu_1_allowed,解除cpu_1的复位信号唤醒cpu_1;

(2-2)cpu_1被唤醒后作为当前cpu,从0地址开始执行固件,判断由cpu_0的标志开始依次判断各个cpu的标志是否被设置,仅当判断到cpu_1的标志cpu_1_allowed被设置后,设置cpu_1特定的栈指针,进入主循环,在进入主循环之前将存储器中指定位置的标志位修改为cpu_n的标志cpu_n_allowed,解除cpu_n的复位信号唤醒下一个cpu_n;n大于等于2;

(2-3)重复步骤(2-2)依次唤醒下一个cpu,直至唤醒全部cpu,最后一个被唤醒的cpu_n,判断到当前cpu_n的标志cpu_n_allowed被设置后,设置当前cpu特定的栈指针,进入主循环。

所述步骤(2)中,判断由cpu_0的标志开始依次判断各个cpu的标志是否被设置,若各个cpu的标志均未被设置,则设置cpu_0的标志,并尝试cpu_0的启动。

所述步骤(2-1)中,cpu_0进行基本初始化工作包括中断、.data初始化、.bss段初始化或系统初始化操作。

与现有技术相比,本发明的有益效果:

(1)本发明的一种多核soc的固件启动方法以及多核soc设备,通过多核soc设备中的复位信号线及共享内存即可实现多核的可靠启动固件,ic设计人员不必关心cpu的同步及通信问题;

(2)本发明的一种多核soc的固件启动方法以及多核soc设备,摆脱cpu核内部cpuid寄存器的限制,硬核集成更加简单;

(3)本发明的一种多核soc的固件启动方法以及多核soc设备,采用链式启动的方法,3.链式启动,与常见的所有从cpu均由主cpu启动的方式相比,减少了主从cpu之间的同步等待,每个cpu只需启动自己的下一个即可:cpu_0启动cpu_1,cpu_1启动cpu_2,以此类推;

(4)本发明的一种多核soc的固件启动方法以及多核soc设备,固件开发简单,除了每个cpu的栈指针外,所有运行地址均由编译器和链接器指定,不必手动安排地址。

上述虽然结合附图对本发明的具体实施方式进行了描述,但以上所述仅为本申请的优选实施例而已,并非对本发明保护范围的限制,对于本领域的技术人员来说,本申请可以有各种更改和变化。所属领域技术人员应该明白,在本发明的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改、等同替换或变形仍在本发明的保护范围以内。

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