管理存储器供电状态的方法及芯片与流程

文档序号:22626833发布日期:2020-10-23 19:35阅读:181来源:国知局
管理存储器供电状态的方法及芯片与流程

本申请实施例涉及存储器领域,并且更具体地,涉及一种管理存储器供电状态的方法及芯片。



背景技术:

有一些存储器可以包括多个存储区域,且该多个存储区域都有独立的供电电源。当某个存储区域不工作时,可以关闭其供电电源以节省功耗。

存储器可用于存储程序,使得该程序可以在该存储器上运行。但当程序需要存储在该存储器上时,如何控制多个存储区域的供电状态成为亟需解决的问题。



技术实现要素:

本申请实施例提供了一种管理存储器供电状态的方法及芯片,能够有效地对多个存储区域进行供电控制。

第一方面,提供了一种管理存储器供电状态的方法,所述存储器包括多个存储区域,所述多个存储区域分别采用独立的供电电源进行供电,所述方法包括:根据程序中待存储在所述多个存储区域中的段的分配地址信息,确定所述程序对所述多个存储区域的占用情况;根据所述程序对所述多个存储区域的占用情况,配置所述多个存储区域的供电状态。

该方法能够通过程序中的段的分配地址信息,获取程序对存储器中多个存储区域的占用情况,进一步根据程序对存储器的占用情况,实现对多个存储区域的供电控制,以节省功耗。相比于人工配置的方式,该方法能够动态获取程序的分布情况,当程序发生更新或变化时,不需要人为干预即可实现重新配置。

在一些可能的实现方式中,所述分配地址信息包括以下中的至少一种:起始地址、长度、结束地址、存储区域的索引。

在一些可能的实现方式中,所述程序的段包括以下中的至少一种:代码code段、零zi段、读写rw段、只读ro段、栈空间段、堆空间段。

在一些可能的实现方式中,所述方法还包括:确定所述程序中待存储在所述多个存储区域中的所述段。

在一些可能的实现方式中,所述方法还包括:获取所述程序的链接脚本文件;根据所述链接脚本文件,获取所述段的分配地址信息。

程序在编译过程中,系统会为程序中的多个段分配地址,得到链接脚本文件。本申请利用该特性,通过在编译器中内建函数,获取链接脚本文件中的分配地址信息,从而就能够知道准确各个存储区域的被占用情况,实现对存储区域的最佳功耗配置。

在一些可能的实现方式中,所述根据所述程序对所述多个存储区域的占用情况,配置所述多个存储区域的供电状态,包括:将被占用的存储区域配置为上电模式;和/或,将未被占用的存储区域配置为下电模式。

在一些可能的实现方式中,所述存储器为静态随机存取存储器sram。

第二方面,提供一种芯片,包括:存储器,包括多个存储区域,所述多个存储区域分别采用独立的供电电源进行供电;处理器,用于根据程序中待存储在所述多个存储区域中的段的分配地址信息,确定所述程序对所述多个存储区域的占用情况;根据所述程序对所述多个存储区域的占用情况,配置所述多个存储区域的供电状态。

该芯片能够通过程序中的段的分配地址信息,获取程序对存储器中多个存储区域的占用情况,进一步根据程序对存储器的占用情况,实现对多个存储区域的供电控制,以节省功耗。相比于人工配置的方式,该芯片能够动态获取程序的分布情况,当程序发生更新或变化时,不需要人为干预即可实现重新配置。

在一些可能的实现方式中,所述分配地址信息包括以下中的至少一种:起始地址、长度、结束地址、存储区域的索引。

在一些可能的实现方式中,所述程序的段包括以下中的至少一种:代码code段、零zi段、读写rw段、只读ro段、栈空间段、堆空间段。

在一些可能的实现方式中,所述处理器用于确定所述程序中待存储在所述多个存储区域中的所述段。

在一些可能的实现方式中,所述处理器用于获取所述程序的链接脚本文件;根据所述链接脚本文件,获取所述段的分配地址信息。

程序在编译过程中,系统会为程序中的多个段分配地址,得到链接脚本文件。本申请利用该特性,通过在编译器中内建函数,获取链接脚本文件中的分配地址信息,从而就能够知道准确各个存储区域的被占用情况,实现对存储区域的最佳功耗配置。

在一些可能的实现方式中,所述处理器用于将被占用的存储区域配置为上电模式;和/或,将未被占用的存储区域配置为下电模式。

在一些可能的实现方式中,所述存储器为静态随机存取存储器sram。

附图说明

图1是本申请实施例提供的一种存储器包括的多个存储区域的布局图。

图2是本申请实施例提供的一种对多个存储区域的供电状态进行配置的示意图。

图3是在图2的基础上,当程序大小发生变化后,对多个存储区域的供电状态进行配置的示意图。

图4是本申请实施例提供的一种管理存储器供电状态的方法的示意性流程图。

图5是本申请实施例提供的另一种管理存储器供电状态的方法的示意性流程图。

图6是本申请实施例提供的一种芯片的示意性框图。

具体实施方式

下面将结合附图,对本申请中的技术方案进行描述。

在低功耗产品设计和开发阶段,往往会对系统全局进行功耗优化,主要策略为尽量关闭不使用的器件电源,这样可以最大限度的节省系统整机功耗,使得电池供电达到最大续航能力。

上述器件例如可以为存储器,有些存储器可以包括多个存储区域,该多个存储区域分别有各自独立的电源管理器。当对应的存储区域设置为下电模式时,即控制电源不对该存储区域进行供电,则该存储区域将不能够进行读写操作,并且该存储区域上的数据也将丢失。因此,如果存储区域没有数据需要存储,可以不对该存储区域进行供电,以节省功耗。

存储器可用于存储程序。一个程序可以包括多个段,不同的段表示不同的内容,存储器可用于存储一个程序中的至少一个段的数据。例如,存储器可用于存储一个程序中的变量或部分代码。

程序存储在存储器中时,并不是所有的存储区域都得到使用。对于长度比较小的程序,可能仅有部分存储区域需要存储程序,而剩余的存储区域处于闲置状态。本申请实施例仅需要将需要存储数据的存储区域设置为上电模式,而将不需要存储数据的存储区域设置为下电模式,以达到省电的模式。

当程序自身发生尺寸变化时,例如系统程序更新时,一般会影响程序在存储器中的存储空间的布局。例如,原本不需要存储数据的存储区域,在程序更新后,需要存储数据;或者,原本需要存储数据的存储区域,在程序更新后,不需要存储数据。这样在程序发生更新后,每个存储区域的供电状态可能会发生变化,因此,如何动态确定每个存储区域的供电状态成为亟需解决的问题。

目前,传统方式是通过人工估算来确定每个存储区域的供电状态。例如,设计者往往在程序中默认断开不需要使用的存储区域的电源,在这种情况下,设计者需要提前预估自身程序的尺寸或大小,然后根据程序的尺寸和大小对存储区域进行预配置。这样,在程序运行之前,就已经设置好了各个存储区域的供电状态。

当程序尺寸发生变化时,如系统程序更新时,设计者需要重新进行评估和设置,即重新预估更新后的程序的尺寸,然后根据更新后的程序的尺寸对存储区域进行重新配置。这种人工预估方式在程序发生更新或变化时,需要人为干预才能实现重新配置,配置方式比较繁琐。

另外,由于是人为估计程序的尺寸,估计的程序尺寸也不够准确,容易导致系统电能的浪费,或程序运行出错。例如,有些存储区域实际上时不需要存储数据的,但是人为估算的结果是需要存储数据,导致该存储区域虽然没有得到使用,但电源依旧持续供电,造成电能的浪费。又例如,有些存储区域实际上时需要存储数据的,但是人为估算的结果是不需要存储数据,导致该存储区域不供电,程序不能在该存储区域运行,导致程序运行出错。

下面结合图1-图3,对存储器的配置过程进行详细描述。

以静态随机存取存储器(staticrandom-accessmemory,sram)为例,sram可以包括多个存储区域,每个存储区域都有独立的供电电源,假设sram的规格如图1所示。该sram可以包括5个存储区域,其中,以32kb作为一个存储区域的长度,即一个存储区域可用于存储32kb大小的数据。每个存储区域都可以采用独立的电源管理器进行供电,每个存储区域都可以独立被控制为上电模式(fullpower)和下电模式(poweroff)。其中,上电模式表示该存储区域的电源对该存储区域供电,该存储区域能够存储数据,能够进行正常的读写操作;下电模式表示该存储区域的电源不对该存储区域供电,该存储区域不能存储数据,不能进行读写操作。

当然,存储区域还可以包括其他模式,例如保留模式(retention),本申请对此不做具体限定。本申请重点关注存储区域的上电模式和下电模式。

当存储器需要存储程序时,参考图2,斜线区域表示该程序占用的sram的部分,剩余的区域表示sram的未被占用的部分。一般地,如果程序大小为0x14000,则最佳功耗优化策略为将索引为0,1,2的存储区域设置为上电模式,然后将索引为3,4的存储区域设置为下电模式。

当程序尺寸发生变化时,设计者需要重新校对数据大小,并且评估其最新占用的sram的情况,然后视情况进行调整。如图3所示,当数据大小变化到0x16000时,因为没有超出索引2的区域,因此在配置上与之前可以没有区别。但是每一次程序变化,设计者都需要重新进行评估,流程不仅繁琐,而且容易出问题。

本申请实施例提供一种管理存储器供电状态的方法,能够不需要人为干预即可确定存储器的供电状态,且能够准确地计算每个存储区域的使用情况,有利于节约系统的电能。该存储器可以包括多个存储区域,多个存储区域分别采用独立的供电电源进行供电。

如图4所述,该方法包括步骤s410~s420。

s410、根据程序中待存储在多个存储区域中的段的分配地址信息,确定该程序对该多个存储区域的占用情况。

s420、根据该程序对多个存储区域的占用情况,配置该多个存储区域的供电状态。

该方法能够通过程序中的段的分配地址信息,获取程序对存储器中多个存储区域的占用情况,进一步根据程序对存储器的占用情况,实现对多个存储区域的供电控制,以节省功耗。相比于人工配置的方式,该方法能够动态获取程序的分布情况,当程序发生更新或变化时,不需要人为干预即可实现重新配置。

本申请实施例在配置多个存储区域的供电状态时,可以将被占用的存储区域的电源接通,使该存储区域处于工作状态;而没有被占用的存储区域对应的电源可以关断,使该存储区域不工作,以节省功耗。

程序中的段可以是根据数据性质的不同进行划分的,相同性质的数据被归到同一段。程序在存储或运行的时候,不同的段会呈现不同的状态。例如,一个程序可以包括2段,第一段表示常量,第二段表示变量。又例如,程序可以包括3段,第一段表示程序中的指令和常量,第二段表示程序中已初始化的变量,第三段表示程序中未初始化的变量。再例如,程序可以包括4段,第一段表示程序的执行代码,第二段表示程序中的已初始化的变量,第三段表示程序中的未初始化的变量,第四段表示程序中的指令和常量。本申请实施例对程序中段的划分形式不做具体限定。

作为一种实现方式,程序可以包括代码(code)段、读写(read/write,rw)段、零(zero,zi)段、只读(readonly,ro)段、栈空间(callstack)、堆空间(heap)中的至少一种。其中,code段表示程序的执行代码,该code段还可以包含一些只读的常数变量,例如字符串常量等,rw段表示程序中已初始化的变量,zi段表示程序中未初始化的变量,ro段表示程序中的指令和常量。

本申请实施例中的程序的段也可以称为程序的域,或程序的区域等,本申请对此不做具体限定。

程序中不同段在存储器中的存储位置可以是不同的,例如,对于包括多个存储区域的存储器来说,程序中的不同段可以存储在存储器中的不同存储区域。又例如,程序中的不同段也可以存储在存储器中的同一个存储区域中的不同存储位置上,本申请对此不做具体限定。

本申请实施例可以根据不同段在存储器中的分配地址信息,对多个存储区域的供电状态进行控制,即可以仅接通需要存储数据的存储区域的电源,而将不需要存储数据的存储区域的电源可以关断,这样能够节省系统的开销。另外,由于本申请实施例可以在程序发生更新或变化时,不需要人工干预,就可以动态确定出存储区域的供电状态,使得操作方式简单。

另外,人工配置的方式一般都无法精确计算,从而导致部分存储区域不需要存储数据,但电源依旧持续打开,从而导致系统浪费了电能。本申请实施例中的多个的存储区域的供电状态是根据不同段在存储器中的存储位置确定的,能够准确确定每个存储区域被占用的情况,从而能够准确地对每个存储区域进行管理,控制每个存储区域对应的电源的开启和关闭状态,能够避免造成电能的浪费。

段的分配地址信息可以是任何能够表征各个存储区域的被占用情况的信息。例如,该分配地址信息可以包括段在存储器中的起始地址、存储的长度、段在存储器中的结束地址和/或段所在的存储区域的索引等。

起始地址和结束地址均可用于指示段所在的存储区域的索引信息。例如,段的起始地址和结束地址可用于表示该段存储在存储器中的哪个存储区域,并且在该存储区域中的哪个位置。

下面以程序包括段a为例进行描述,当然程序还可以包括更多个段,其他段的确定方式与段a类似。

如果分配地址信息包括起始地址信息,且段a的起始地址属于存储区域1的地址,则表示该存储区域1一定是需要存储段a的数据,可以将存储区域1对应的电源接通,使得存储区域1处于上电模式。

如果分配地址信息包括起始地址信息和存储的长度信息,则可以根据段a的起始地址和长度,确定该段a整体在存储器中所占用的存储空间,从而可以确定哪些存储区域需要接通电源。如果段a所在的存储空间属于存储区域1,则存储区域1对应的电源需要接通;如果段a所在的存储空间横跨了存储区域1和存储区域2,即存储区域1和存储区域2都需要存储段a上的数据,则表示存储区域1和存储区域2对应的电源都需要接通。

如果分配地址信息包括结束地址信息,且段a的结束地址属于存储区域3的地址,则表示存储区域3一定是需要存储段a的数据,可以将存储区域3对应的电源接通。

如果分配地址信息包括结束地址信息和存储的长度信息,则可以根据段a的结束地址以及长度,确定段a整体在存储器中所占用的存储空间,从而可以确定哪些存储区域需要接通电源。如果段a所在的存储空间属于存储区域3,则存储区域3对应的电源需要接通;如果段a所在的存储空间横跨了存储区域3和存储区域4,即存储区域3和存储区域4都需要存储段a上的数据,则表示存储区域3和存储区域4对应的电源都需要接通。

如果分配地址信息包括存储区域的索引,则可以直接根据存储区域的索引,将对应的存储区域的电源接通。例如,如果段a所占用的存储区域的索引为5,则表示存储区域5对应的电源需要接通;如果段a所占用的存储区域的索引为5和6,则表示存储区域5和存储区域6对应的电源需要接通。这种方式仅需要占用较少的资源即可确定程序对多个存储区域的占用情况,由有利于节省资源。

如果不同段在存储器中是彼此相邻存放的,且其存放的起始地址是固定的,则可以仅根据多个段的长度信息,将多个段的长度信息进行汇总,得到确定多个段对存储器的占用情况。

可以理解的是,如果一个程序包括多个段,则每个段都可以根据上文描述的方法确定该段对存储器的占用情况,然后将该多个段对存储器的占用情况汇总后,经过算法加工,最终得到该程序对存储器的具体占用情况,从而确定每个存储区域的供电状态。

一个程序中有时并不是所有的段都需要存储在本申请实施例中的存储器中,本申请实施例仅考虑需要存放在该存储器中的段,因此,本申请实施例可以在确定多个段对多个存储区域的占用情况之前,确定该多个段是否都存储或运行在该存储器中。

假设程序包括三个段,第一段存储在存储器1中,第二段和第三段存储在存储器2中,而只有存储器2属于本申请实施例提及的能够实现独立供电电源控制多个存储区域的存储器,因此,我们仅考虑程序对存储器2的占用情况,在计算时,可以仅将第二段和第三段的分配地址信息进行汇总,得到对存储器2的占用情况,在该情况下,可以无需考虑第一段的分配地址信息。

获取待存储在多个存储区域中的段的分配地址信息的方式有多种,本申请实施例对此不做具体限定。

例如,程序在编译过程中,系统会为程序中的多个段分配地址,本申请可以利用程序编译过程中的这个特性,通过在编译器内建函数,获取程序中多个段的分配地址信息,从而就能够知道各个存储区域的被占用情况。通过段的分配地址信息能够准确地计算出存储区域的被占用情况,从而能够准确控制存储区域的供电状态,以达到省电的目的。

可选地,本申请实施例可以根据程序编译过程中生成的链接脚本文件获取程序的段在存储区域中的分配地址信息。

设计人员编写好的程序并不能直接在计算机上运行,因此,程序在计算机上运行前,系统需要对程序进行编译,将写好的程序转换成机器码,转换成机器码之后的程序才能够在计算机上运行。

一般程序的编译分为四个阶段:预编译、编译、汇编和链接。

预编译过程主要处理那些源代码文件中的以“#”开始的预编译指令。比如“#include”,“#define”等。

编译过程就是把预编译处理之后的文件进行一系列词法分析,语法分析、语义分析,优化后生成相应的汇编代码文件。

汇编是将汇编代码转变为机器可执行的指令,每一条汇编语句几乎对应一条机器指令。

在前三个阶段的目的是将写好的程序按照语言和语法转换到机器码。

链接过程是将若干个目标二进制文件链接在一起,该链接过程包含了将段按照其特性进行分配地址的过程。

通过链接过程可以得到链接脚本文件,由于链接脚本文件中包括不同段的分配地址信息,因此本申请实施例可以根据链接脚本文件,获取不同段的分配地址信息。

本申请实施例可以基于链接脚本技术,动态将各个段的分配地址信息获取出来后使用程序自身动态进行评估,并最终完成sram的功耗管理配置。

一个典型的链接脚本如下:

上述每一条指令都可以包括段的类型、所存储的存储器的类型、存储的存储地址(address)和/或长度(size)等信息。其中,存储地址可以包括起始地址和/或结束地址,上述链接脚本文件是以起始地址为例进行描述的。

一个程序通常都包括code段、rw段、zi段和ro段,当然,程序还可以包括其他的栈空间(stack)和堆空间(heap)。从上述链接脚本文件可以看出,链接脚本文件中示出了不同段是存储在哪个存储器中,例如是存储在闪存(flash)中,还是存储在随机存取存储器(random-accessmemory,ram)中。在上述链接脚本文件中,code段是存储在flash中,rw段和zi段是存储在ram中。此外,链接脚本文件还示出了程序在存储器中的存储地址以及长度等。

由于flash不属于分别采用独立电源控制多个存储区域的存储器,因此,本申请实施例仅考虑ram的被占用情况。

本申请实施例可以在程序编译过程中或程序编译完成后,通过在编译器内建函数,该函数用于提取各个段及其对应的分配地址信息,如提取段的类型及其对应的分配地址信息。最终将各个段的分配地址信息进行汇总,经过算法加工,就可以得知存储器的具体占用情况。该过程实现算法简单,对自身资源的占用可以忽略不计。

一个程序通常包括多个段,但并不是所有的段都存储在一个存储器中,本申请实施例仅考虑存储在具有多个存储区域且多个存储区域具有独立电源的存储器的情况。

本申请实施例对存储器的类型不做具体限定,可以是任意具有多个存储区域的存储器,例如可以为具有多个存储区域的sram,或者其他不同物理介质的sram。

以存储器为sram为例,虽然一个程序基本都包括code段、rw段、zi段和ro段,但这4个段并不是都存储在sram中。如果code段和ro段是基于芯片内执行(executeinplace,xip)技术,存储在flash中,而只有rw段、zi段是存储在sram中,则本申请实施例仅考虑rw段、zi段的分配地址信息,而不关心code段和ro段的分配地址信息。

由于程序在运行之前,都会生成链接脚本文件,因此,当程序发生变化,就会自动生成新的链接脚本文件,只要有新的链接脚本文件生成,本申请实施例都会自动获取不同段的分配地址信息,从而能够不需要人工操作,就可以动态获取各个段的分配地址信息,并且所获取的分配地址信息比人工预估的更准确,从而能够更精确地控制各个存储区域的供电状态,得到更准确的功耗管理配置。

下面以sram为例,结合图5所示的流程,对本申请实施例的具体实现过程进行描述。

获取sram中的多个存储区域的信息。假设系统中默认rw段、zi段、栈空间都是存储在sram中,因此可以直接在链接脚本文件中,获取rw段、zi段、栈空间的起始地址以及长度。但是code段可能是运行在flash中,也有可能是运行在sram中,因此,可以先根据链接脚本文件,确定code段是否运行在flash中。如果code段运行在flash中,则可以计算rw段、zi段、栈空间对sram的占用情况;如果code段没有运行在flash中,而是运行在sram中,则可以计算rw段、zi段、栈空间以及code段对sram的占用情况。进一步可以根据各个段对sram的占用情况,确定sram中各个存储区域的供电情况。

图6是本申请实施例提供的一种芯片的示意性框图。该芯片600包括存储器610和处理器620。该存储器610可以为上文描述的任一种存储器,该存储器可用于执行上文描述的任一种方法。

该存储器610包括多个存储区域,该多个存储区域分贝采用独立的供电电源进行供电。

该处理器620用于根据程序中待存储在所述多个存储区域中的段的分配地址信息,确定所述程序对所述多个存储区域的占用情况;根据所述程序对所述多个存储区域的占用情况,配置所述多个存储区域的供电状态。

可选地,所述分配地址信息包括以下中的至少一种:起始地址、长度、结束地址、存储区域的索引。

可选地,所述程序的段包括以下中的至少一种:代码code段、零zi段、读写rw段、只读ro段、栈空间段、堆空间段。

可选地,所述处理器用于确定所述程序中待存储在所述多个存储区域中的所述段。

可选地,所述处理器用于获取所述程序的链接脚本文件;根据所述链接脚本文件,获取所述段的分配地址信息。

可选地,所述处理器用于将被占用的存储区域配置为上电模式;和/或,将未被占用的存储区域配置为下电模式。

可选地,所述存储器为静态随机存取存储器sram。

需要说明的是,在本申请实施例和所附权利要求书中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请实施例。

例如,在本申请实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”、“上述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。

所属领域的技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请实施例的范围。

如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器、随机存取存储器、磁碟或者光盘等各种可以存储程序代码的介质。

以上内容,仅为本申请实施例的具体实施方式,但本申请实施例的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请实施例揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请实施例的保护范围之内。因此,本申请实施例的保护范围应以权利要求的保护范围为准。

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