一种降低编程功耗的方法、装置、存储介质和终端
技术领域
本发明涉及半导体集成电路
技术领域
,尤其涉及的是一种降低编程功耗的方法、装置、存储介质和终端。背景技术
传统的编程流程如图1所示:
(1)输入编程命令以及要编程的数据;
(2)每次读取芯片内需要进行编程操作的区域中长度为4bytes(4bytes等于32bit)的区域的数据,检查该区域的数据中是否存在需要编程的数据位:
若不存在需要编程的数据位,那就不需要进行编程操作,跳过下面的编程流程;
如果所检查区域中存在需要编程的数据位,则需要进行编程操作,进入第(3)步;
(3)每次针对需要编程的长度为4bytes的区域发送编程脉冲,按照下面的时序开始执行编程操作:发送编程脉冲----检查是否编程成功:
如果成功,结束编程操作;
如果没有成功,继续对长度为4bytes的区域发送编程脉冲----检查是否编程成功:
(4)重复这个过程,直到检查到芯片内需要编程的所有区域均编程成功,结束编程操作。
图2为需要进行编程操作的flash存储单元,图3为电路中常用的为要进行编程操作的存储单元提供电流的位线电荷泵。在进行编程操作时,flash中存储单元栅极接字线电荷泵的输出,漏极接位线电荷泵的输出,如果长度为4bytes的区域中所有的存储单元都需要进行编程操作,位线电荷泵需要能提供所有存储单元编程所需要的电流,所以位线电荷泵需要按照最大驱动电流能力来设计。但对于每个长度为4bytes的区域中的数据,位线电荷泵不是每次都需要提供所有存储单元编程所需要的电流,对于某些长度为4bytes的区域中的数据,如果只有极少数存储单元(如32位的数据中只要几位(如1位,2位,等等))需要进行编程的情况来说,满足最大电流需求的位线电荷泵显然是over design(过设计)的(实际上,位线电荷泵只需对需要执行编程操作的几个存储单元提供编程电流,位线电荷泵其他多余的驱动能力就是浪费的)。而且,具备最大驱动能力的位线电荷泵的输出纹波和功耗也比较大。
因此,现有的技术还有待于改进和发展。
发明内容
本发明的目的在于提供一种降低编程功耗的方法、装置、存储介质和终端,旨在解决现有技术中的一个或多个问题。
本发明的技术方案如下:本技术方案提供一种降低编程功耗的方法,具体包括以下步骤:
S1:接收编程指令和需要编程的数据,并对所述需要编程的数据进行缓存;
S2:从缓存的数据中获取数据,得到实际编程数据,所述实际编程数据的长度不大于芯片最大的编程长度;
S3:在芯片内与所述实际编程数据对应的地址中需要编程的地址位数与芯片内位线电荷泵的最大驱动电流能力匹配时,对芯片内与所述实际编程数据对应的地址执行编程操作。
进一步地,对于缓存的需要编程的数据,还包括以下验证过程:
s11:读取芯片内与所述编程指令的地址对应的地址的数据;
s12:将所述芯片内对应的地址的数据与所述缓存的需要编程的数据进行比较,根据比较得出芯片内与所述编程指令的地址对应的地址需要编程的位数,并记录芯片内需要编程的地址。
进一步地,所述芯片内位线电荷泵的最大驱动电流能力是指编程模块每发送一次编程脉冲,芯片内位线电荷泵在此脉冲期间可为芯片内需要执行编程操作的不同地址的存储单元施加编程电流的最大个数。
进一步地,所述芯片最大的编程长度是指芯片每次执行编程操作时可跨越的最大地址长度。
进一步地,对芯片内与所述实际编程数据对应的地址执行编程操作,具体过程如下:通过编程模块发送编程脉冲,芯片内位线电荷泵在此脉冲期间为芯片内与所述实际编程数据对应的地址的存储单元施加编程电流,执行编程操作。
进一步地,所述芯片内位线电荷泵包括至少2个位线电荷泵单元,全部位线电荷泵单元的驱动电流能力等于位线电荷泵的最大驱动电流能力。
进一步地,对芯片内与所述实际编程数据对应的地址执行编程操作,具体包括以下步骤:
s31:s31:编程模块发送编程脉冲,芯片内位线电荷泵在此脉冲期间为芯片内与所述实际编程数据对应的地址的存储单元施加编程电流,执行编程操作;
s32:判断芯片内与所述实际编程数据对应的地址的存储单元是否编程成功,是则跳转至s33,否则跳转至s31;
s33:判断所述需要编程的数据是否已经读取完毕,是则跳转至s34,否则跳转至S2;
s34:编程操作完成。
本技术方案还提供一种降低编程功耗的装置,包括:
数据接收模块,接收编程指令和需要编程的数据,并对所述需要编程的数据进行缓存;
数据读取模块,从缓存的数据中获取数据,得到实际编程数据,所述实际编程数据的长度不大于芯片最大的编程长度;
编程模块,在芯片内与所述实际编程数据对应的地址中需要编程的地址位数与芯片内位线电荷泵的最大驱动电流能力匹配时,对芯片内与所述实际编程数据对应的地址执行编程操作。
本技术方案还提供一种存储介质,所述存储介质中存储有计算机程序,当所述计算机程序在计算机上运行时,使得所述计算机执行上述任一项所述的方法。
本技术方案还提供一种终端,包括处理器和存储器,所述存储器中存储有计算机程序,所述处理器通过调用所述存储器中存储的所述计算机程序,用于执行上述任一项所述的方法。
由上述可知,传统每读取长度与位线电荷泵最大编程能力对应的编程数据,如果芯片内与该编程数据对应地址的存储单元需要编程,不管需要编程的存储单元有多少位,编程模块均会发送一次编程脉冲,位线电荷泵都需要在此脉冲内启动提供编程电流,在需要编程的存储单元的数量较少时,会导致功耗较大;本技术方案中,读取一定长度的编程数据后,先判断芯片内与该编程数据对应地址中需要编程的地址数量,如果地址数量足够,编程模块则发送一次编程脉冲,位线电荷泵在此脉冲内启动提供编程电流;如果地址数量不足,则再读取一定长度与的编程数据,直至芯片内与读取的实际编程数据对应的地址中需要编程的地址数足够,且读取的实际编程数据长度不大于芯片最大编程长度,编程模块才会发送一次编程脉冲,位线电荷泵才会在此脉冲内启动提供编程电流,这样可大大减小位线电荷泵功耗;而且位线电荷泵分为多个驱动电流能力较小的位线电荷泵单元,根据每次需要编程的地址个数控制位线电荷泵单元启闭数量,以减少输出的波纹和进一步减小能耗。
附图说明
图1是现有技术中的编程流程图。
图2是现有技术中需要进行编程操作的flash 存储单元示意图。
图3是现有技术中电路中常用的为要进行编程操作的存储单元提供电流的位线电荷泵示意图。
图4是本发明中降低编程功耗的方法的步骤流程图。
图5是本发明中降低编程功耗的装置的示意图。
图6是本发明中终端的示意图。
具体实施方式
下面将结合本申请实施例中附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本申请的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
如图4所示,一种降低编程功耗的方法,应用于flash芯片,具体包括以下步骤:
S1:接收编程指令和需要编程的数据,并对所述需要编程的数据进行缓存。
其中,所述编程指令包括编程操作指令和需要编程的地址。
其中,所述需要编程的数据根据数据宽度分别缓存在flash中至少一个数据锁存器中。
其中,对于缓存至数据锁存器中的需要编程的数据,还包括以下验证过程:
s11:读取芯片内与所述编程指令的地址对应的地址的数据;
s12:将所述芯片内对应的地址的数据与所述缓存的需要编程的数据进行比较,根据比较得出芯片内与所述编程指令的地址对应的地址需要编程的位数,并记录芯片内需要编程的地址。
如,若flash内部与所述编程指令的地址对应的地址的数据是0,则flash内部对应的地址就不需要编程。如果flash内部与所述编程指令的地址对应的地址的数据是1,而需要编程的数据是0,则flash内部对应的地址就需要编程;若需要编程的数据是1,flash内部对应的地址就不需要编程。
S2:从缓存的数据中获取数据,得到实际编程数据,所述实际编程数据的长度不大于芯片最大的编程长度。
其中,所述芯片最大的编程长度是指芯片每次执行编程操作时可以跨越的最大地址长度,一般为256bytes(1bytes等于8bit)。
S3:在芯片内与所述实际编程数据对应的地址中需要编程的地址位数与芯片内位线电荷泵的最大驱动电流能力匹配时,对芯片内与所述实际编程数据对应的地址执行编程操作。
其中,所述S3具体包括以下过程:判断芯片内与所述实际编程数据对应的地址中需要编程的地址位数是否与芯片内位线电荷泵的最大驱动电流能力对应,是则对芯片内与所述实际编程数据对应的地址执行编程操作,否则跳转至S2。
其中,所述芯片内位线电荷泵的最大驱动电流能力是指编程模块每发送一次编程脉冲,芯片内位线电荷泵在此脉冲期间可以为芯片内需要执行编程操作的不同地址的存储单元施加编程电流的最大个数。根据不同的需要(根据面积、驱动能力等的不同考虑),所述芯片内位线电荷泵的最大驱动电流能力可以为:编程模块每发送一次编程脉冲,芯片内位线电荷泵在此脉冲期间可以为芯片内8位(8bit)存储单元需要执行编程操作的存储单元施加编程电流;或者编程模块每发送一次编程脉冲,芯片内位线电荷泵在此脉冲期间可以为芯片内32位(32bit)存储单元需要执行编程操作的存储单元施加编程电流。
例如,每次从缓存的编程数据中读取32位编程数据,判断芯片内与这32位编程数据对应的地址中需要编程的地址位数是否达到32位,如果达到32位,则编程模块发送一次编程脉冲,控制芯片内位线电荷泵在此脉冲期间为芯片内与这32位编程数据对应的地址的存储单元施加编程电流,执行编程操作;若没有达到32位,则判断读取的实际编程数据(即多次读取32位编程数据后加起来的实际编程数据)的长度是否等于256bytes(此时芯片内与读取的实际编程数据对应的地址中需要编程的地址位数不足32位),是则编程模块发送一次编程脉冲,控制芯片内位线电荷泵在此脉冲期间为芯片内与读取的实际编程数据对应的地址中需要编程的地址的存储单元施加编程电流,执行编程操作;若读取的实际编程数据没有达到256bytes,则继续从缓存的编程数据中读取32位编程数据,直到芯片内与读取的实际编程数据对应的地址中需要编程的地址位数达到32位或者读取的实际编程数据的长度是否等于256bytes,才跳转至S4。
其中,所述S3中,编程模块发送编程脉冲,通过芯片内位线电荷泵为芯片内与所述实际编程数据对应的地址的存储单元施加编程电流,执行编程操作。
其中,所述S3具体包括以下步骤:
s31:编程模块发送编程脉冲,芯片内位线电荷泵在此脉冲期间为芯片内与所述实际编程数据对应的地址的存储单元施加编程电流,执行编程操作;
s32:判断芯片内与所述实际编程数据对应的地址的存储单元是否编程成功,是则跳转至s33,否则跳转至s31;
s33:判断所述需要编程的数据是否已经读取完毕,是则跳转至s34,否则跳转至S2;
s34:编程操作完成。
其中,所述芯片内位线电荷泵包括至少2个的位线电荷泵单元,每个位线电荷泵单元根据不同的需要(根据面积、驱动能力等的不同考虑)设置其最大驱动电流能力,各个位线电荷泵单元的最大驱动电流能力可以相同,也可以不同。通过将传统一个具有足够驱动电流能力的大位线电荷泵分成几个互相独立的位线电荷泵单元,每个位线电荷泵单元的驱动电流能力都比原来一个大的位线电荷泵的驱动电流能力弱,可以根据每次执行编程时需要施加编程电流的存储单元的数量控制位线电荷泵单元启闭的数量,以降低芯片内位线电荷泵的输出纹波(因为位线电荷泵的驱动电流功能越大,其输出的波纹也会越大,反之亦然)和功耗。
在s41中,当第一次编程脉冲期间,芯片内位线电荷泵为芯片内与所述实际编程数据对应的地址的存储单元施加编程电流时,启动全部位线电荷泵单元为芯片内对应的地址的存储单元施加编程电流(因为此时芯片内需要编程的存储单元的数量最大,如达到32位),经过第一次编程脉冲后,芯片内需要编程的存储单元可能会被全部编程成功,也有可能部分被编程成功,部分没有被编程成功,此时需要发送第二次编程脉冲继续控制为芯片内没有被编程成功的储存单元施加编程电流,此时因为芯片内没有被编程成功的储存单元的数量减小(没有达到32位),可以根据没有被编程成功的储存单元的数量选择启动某几个位线电荷泵单元(没有启动全部的位线电荷泵单元),后面每发送一次编程脉冲,可以根据芯片内没有被编程成功的储存单元的数量控制启动的位线电荷泵单元的数量,直到芯片内全部需要编程的存储单元均编程成功,相对于传统一个大的位线电荷泵,本技术方案分成多个位线电荷泵单元,不但可以减小能耗,也能减少输出的波纹。传统技术中,每读取长度与位线电荷泵最大编程能力对应的编程数据,如果芯片内与该编程数据对应地址的存储单元需要编程,不管需要编程的存储单元有多少位,位线电荷泵均会发送一次编程脉冲,在需要编程的存储单元的数量较少时,会导致功耗较大;本技术方案中,读取一定长度的编程数据后,先判断芯片内与该编程数据对应地址中需要编程的地址数量,如果地址数量足够,则发送一次编程脉冲,如果地址数量不足,则再读取一定长度与的编程数据,直至芯片内与读取的实际编程数据对应的地址中需要编程的地址数足够,且读取的实际编程数据长度不大于芯片最大编程长度,才会发送一次编程脉冲,这样可大大减小位线电荷泵功耗;而且位线电荷泵分为多个驱动电流能力较小的位线电荷泵单元,根据每次需要编程的地址个数控制位线电荷泵单元启闭数量,以减少输出的波纹和进一步减小能耗。
如图5所示,一种降低编程功耗的装置,包括:
数据接收模块101,接收编程指令和需要编程的数据,并对所述需要编程的数据进行缓存;
数据读取模块102,从缓存的数据中获取数据,得到实际编程数据,所述实际编程数据的长度不大于芯片最大的编程长度;
编程模块103,在芯片内与所述实际编程数据对应的地址中需要编程的地址位数与芯片内位线电荷泵的最大驱动电流能力匹配时,对芯片内与所述实际编程数据对应的地址执行编程操作。
请参照图6,本发明实施例还提供一种终端。如示,终端300包括处理器301和存储器302。其中,处理器301与存储器302电性连接。处理器301是终端300的控制中心,利用各种接口和线路连接整个终端的各个部分,通过运行或调用存储在存储器302内的计算机程序,以及调用存储在存储器302内的数据,执行终端的各种功能和处理数据,从而对终端300进行整体监控。
在本实施例中,终端300中的处理器301会按照如下的步骤,将一个或一个以上的计算机程序的进程对应的指令加载到存储器302中,并由处理器301来运行存储在存储器302中的计算机程序,从而实现各种功能:S1:接收编程指令和需要编程的数据,并对所述需要编程的数据进行缓存;S2:从缓存的数据中获取数据,得到实际编程数据,所述实际编程数据的长度不大于芯片最大的编程长度;S3:在芯片内与所述实际编程数据对应的地址中需要编程的地址位数与芯片内位线电荷泵的最大驱动电流能力匹配时,对芯片内与所述实际编程数据对应的地址执行编程操作。
存储器302可用于存储计算机程序和数据。存储器302存储的计算机程序中包含有可在处理器中执行的指令。计算机程序可以组成各种功能模块。处理器301通过调用存储在存储器302的计算机程序,从而执行各种功能应用以及数据处理。
本申请实施例提供一种存储介质,所述计算机程序被处理器执行时,执行上述实施例的任一可选的实现方式中的方法,以实现以下功能:S1:接收编程指令和需要编程的数据,并对所述需要编程的数据进行缓存;S2:从缓存的数据中获取数据,得到实际编程数据,所述实际编程数据的长度不大于芯片最大的编程长度;S3:在芯片内与所述实际编程数据对应的地址中需要编程的地址位数与芯片内位线电荷泵的最大驱动电流能力匹配时,对芯片内与所述实际编程数据对应的地址执行编程操作。其中,存储介质可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(Static RandomAccess Memory, 简称SRAM),电可擦除可编程只读存储器(Electrically ErasableProgrammable Read-Only Memory, 简称EEPROM),可擦除可编程只读存储器(ErasableProgrammable Read Only Memory, 简称EPROM),可编程只读存储器(Programmable Red-Only Memory, 简称PROM),只读存储器(Read-Only Memory, 简称ROM),磁存储器,快闪存储器,磁盘或光盘。
在本申请所提供的实施例中,应该理解到,所揭露装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
另外,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
再者,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。
以上所述仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。