CN103064654A - 集成电路、电子系统及提供otp内存配置可更新的方法 - Google Patents

集成电路、电子系统及提供otp内存配置可更新的方法 Download PDF

Info

Publication number
CN103064654A
CN103064654A CN 201110327131 CN201110327131A CN103064654A CN 103064654 A CN103064654 A CN 103064654A CN 201110327131 CN201110327131 CN 201110327131 CN 201110327131 A CN201110327131 A CN 201110327131A CN 103064654 A CN103064654 A CN 103064654A
Authority
CN
China
Prior art keywords
module
instruction
internal memory
code
otp
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN 201110327131
Other languages
English (en)
Inventor
庄建祥
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Individual
Original Assignee
Individual
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Individual filed Critical Individual
Priority to CN 201110327131 priority Critical patent/CN103064654A/zh
Publication of CN103064654A publication Critical patent/CN103064654A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明公开了一种使用单次性可编程(OTP)内存作为相当于一个多次可编程(MTP)内存的方法、装置与系统。以此方法使用OTP内存可以允许更新编码一次或多次,但仍然保持小尺寸和相对容易加工制造的优点。该编码可以是处理器的程序代码,例如开机启动码,开机启动码内核或其它指令码。就某方面而言,一个OTP内存能够功能运作像是一个MTP,是透过智能化的使用无运作(No Operations,NOP)指令。随后如果在程序代码中的一个特定子程序或函数需要修改,编写一个指令(如JUMP指令)进入NOP的地址,使某些特定存在的指令可以被绕过,并且执行一个新模块的指令码。

Description

集成电路、电子系统及提供OTP内存配置可更新的方法
技术领域
本发明涉及到一种方法、装置与系统,使用单次性可编程(OTP)内存作为相当于一个多次性编程(MTP)内存,允许编码可以更新一次或多次,但仍然保持小尺寸和相对易于加工制造的优点。
背景技术
一个微处理器分别使用编码内存(code memory)和数据内存(data memory)来储存临时数据和指令。
来自高速缓存器或临时数据内存,例如快取或主存储器(main memory)的数据,透过编码内存内的代码或指令,经由取出、译码、执行指令,然后回存至缓存器(register)、高速缓存(flash memory)或主存储器。在一般的电子系统(如计算器)中,整个程序执行码通常储存在非挥发性内存,如硬盘机(harddisk driver)或固态闪存。编码内存的子集系统,例如主存储器或指令高速缓存,以DRAM或SRAM等挥发性内存建构而成,或整合在微处理器里面。对于大多数嵌入式系统,为了降低成本,编码内存倾向于以具有小体积且可以和微控制单元(MCU)一起嵌入的闪存来实现。
图1为一个微控制单元MCU 20的图例,包含编码内存21,数据内存22,执行单元(execution unit)24和I/O输出输入周边电路23。在传统的微控制单元里,编码内存21使用一个闪存储存执行指令。
数据内存22使用SRAM来储存临时数据,或是使用在微控制单元MCU 20外部的大容量DRAM内存的一个子集。执行单元24通常是一个算术逻辑运算器(ALU)。
输出输入周边电路23,如定时器、输出输入端口、GPIO、ADC、DAC等,作为微控制单元MCU 20和外部输入输出装置的接口。对于一个8位MCU,程序内存21的大小高达64KB,数据内存22的大小可达64KB。代码和数据内存的容量有提高的倾向,以便应用于16位或者甚至是32位微控制器。
系统单芯片(SoC)以内建嵌入式处理器来做复杂的运算任务,而非仰赖于随机逻辑电路硬连接(hard-wired)而成。对于高阶系统芯片,编码内存非常大,所以倾向于以外部闪存来储存;但开机ROM、或开机ROM的内核(boot ROMkernel),是内建在系统单芯片内,以便能够快速启动微处理器。内核或开机ROM对于SoC非常重要,因为如果内核或开机ROM有错误,该系统单芯片将无法启动。
图2显示一个SoC 30与外部开机ROM 33的区块图。该SoC 30内有一个嵌入式处理器31和一个开机ROM内核32。嵌入式处理器31可以为32位、64位处理器或是数字信号处理器(DSP),它使用一个开机ROM内核32来开机启动处理器31。开机ROM内核32提供初始指令以启动嵌入式处理器31。随后更多来自于外部开机ROM 33的指令被加载以完成处理器初始化,并开始正常操作。对于一个典型32位处理器的系统芯片,外部开机ROM大小约1至2MB。内核(kernel)的大小可以很容易地在控制在16KB的范围内。内核最好以可编程ROM(PROM)来建构,尤其是现场可编程ROM(field programmableROM),如此开机启动码才方便于制造出厂后可以修改。
系统芯片中的理想开机ROM内核可能是一个嵌入式闪存或多次可编程(Multi-time programmable,MTP)内存,以便开机启动码可以在大多数应用中多次修改。闪存通常可以编程约20,000次,但闪存往往落后先进CMOS制程两到三个世代,而且需要额外约7至8道光罩,成本过于昂贵。MTP内存虽然可以使用相同逻辑制程制造,且仅需要额外增加几片光罩,但是缺点是内存单元尺寸非常大,比相同制程技术下的SRAM单元约大10倍。这使得MTP内存应用于启动开机码内核变得不切实际。相较之下,单次性可编程(OTP)内存具有小体积,制程技术简单,以及低成本的优点;但是储存单元只能被编程一次,因此并不足以胜任开机ROM内核或是编码内存的应用。
因此,有必要改进设计,使OTP内存可应用于处理器执行的开机码内核、开机码或编码内存储存指令,相较于传统的快闪或MTP内存,能够更快速上市、更强健设计,以及降低成本。
发明内容
本发明的一目的为提供使用单次性可编程(OTP)内存作为相当于一个多次性编程(MTP)内存,允许编码可以更新一次或多次,但仍然保持小尺寸和相对易于加工制造的优点。该编码可以是处理器的程序代码,例如开机启动码,开机启动码内核或其它指令码。OTP内存可以以标准CMOS制程制造,来取代昂贵的FLASH内存或多次性可编程(MTP)内存,提供诸如微处理器,微控制器单元(MCU),嵌入式处理器,或数字信号处理器(DSP)等运用。
因此本发明提供一种集成电路,包括:一处理器;一单次性可编程(OTP)内存,作为与该处理器结合运作的内存的一部分或全部;一指令码,提供给该处理器使用,该指令码被编程到该OTP内存,该指令码有多个模块,其中至少一个模块有至少有一个无操作(NOP)指令,且以下列方式进行组态更新:编程一新模块进入OTP内存未使用部分,以及编程一个模块呼叫或分岔指令进入至少一个NOP指令,以跳转到该新模块起始地址,或是执行后之一新目标地址。
本发明提供一种电子系统,包括:一处理器;一单次性可编程(OTP)内存,作为与该处理器结合运作的编码内存的一部分或全部;及一指令码,提供给该处理器使用,该指令码被编程到该OTP内存,并且指令码有多个模块,其中至少有一模块有至少有一个无操作(NOP)指令并以下列方式进行组态更新:编程一新模块进入OTP内存未使用部分,以及编程一个模块呼叫或分岔指令进入至少一个NOP指令,以跳转到该新模块起始地址,或是执行后之一新目标地址。
本发明提供一种OTP内存配置可更新的方法,该方法包括:储存指令码到OTP内存;该OTP内存与处理器结合运作以执行指令码;该指令码有多个模块;并且至少一个模块有至少一个无操作(NOP)空间为NOP指令;
随后,编程一个新模块到OTP内存之前未使用到的部分来储存额外附加的指令码;另外再编程一个模块呼叫或是分岔指令进入NOP空间,以便将程序执行指向此新模块的附加指令码。
本发明提供一种非短暂性计算机可读取媒介,至少包括,计算机程序码储存,以便编程OTP内存,使其配置为可更新,此计算机可读取媒介包括:计算机程序码储存指令码到该OTP内存;其中该OTP内存与处理器结合运作以执行储存的指令码;该指令码有多个模块;至少一个模块有至少一个无操作(NOP)空间为(NOP)指令;计算机程序码随后被编程一新模块到该OTP内存之前未使用到的部分来储存额外附加的指令码;及计算机程序码编程一个指令进入该NOP空间,以便随后将程序执行指向该新模块的附加指令码。
藉由本发明,可提供小尺寸和相对易于加工制造的多次性编程(MTP)内存。
附图说明
图1为一MCU内包含一个编码内存的区块图;
图2为一SoC内包含一个开机启动ROM内核的区块图;
图3为一储存在内存记忆空间里的程序的执行示意图;
图4(a)为一具体实例示意图,修改编码使OTP应用相当于MTP;
图4(b)为一具体实施示意图,插入编码使OTP应用相当于MTP;
图4(c)为一具体实施示意图,删除编码使OTP应用相当于MTP;
图5为一具体实施示意图,更改编码多次使OTP应用相当于MTP;
图6(a)为本发明一具体实施方法流程图,显示依据本发明规划一个程序的流程,使OTP应用相当于MTP;
图6(b)为本发明另一具体实施方法流程图,显示本发明规划一程序的流程,使OTP应用相当于MTP;
图7(a)为本发明另一实施流程图,显示藉由修改编码使OTP被用作相当于MTP的方法;
图7(b)为本发明另一实施流程图,显示藉由插入编码使OTP被用作相当于MTP的方法;
图7(c)为本发明另一实施流程图,显示藉由删除编码使OTP被用作相当于MTP的方法;
图8为本发明另一实施例,显示一个单次性可编程(OTP)内存一部分的方块图;
图9为本发明另一实施例,显示了一个简化的电子系统的方块图,其处理器搭配使用的OTP内存包含了部分初始已程序化编码和未程序化编码,其功能系用作为MTP。
其中,附图标记:
微控制单元20                代码内存21
数据内存22                  执行单元24
I/O输出输入周边电路23
SoC 30                            开机ROM 33
嵌入式处理器31                    开机ROM内核32
程序40                            主模块41
模块42,43
程序50,50’,50”,60            主模块51,51’,51”,61
子程序模块52,53,57,53’,62,63,67,68
方法70,80,90,90’,90”
步骤71-75,81-85,91-98,91’-98’,91”-98”
OTP内存110 OTP                    内存阵列111
X方向译码器112                    X地址线缓冲器113
Y方向通路控制闸门114
Y方向译码器115                    Y地址线缓冲器116
感应放大器117                     编程电路118
控制逻辑电路119
电子系统200                       处理器202
OTP内存204                        初始已程序化区域206
初始未程序化区域208
具体实施方式
就某方面而言,依据本发明,一个OTP内存能够功能运作像是一个MTP,是透过智能化的使用无操作指令(No Operations,NOPs)。在正常操作中,NOPs指令的执行,只是浪费了几个时钟或处理周期之外,系统没有发生任何反应。处理器的NOP程序代码需要与OTP初始状态的指令字符一致,亦即NOP都是0且0是OTP的初始状态(initial state或是virgin state)。
在具体实施中,程序代码储存在OTP内存中。在主程序中,程序代码以子程序或函数模块化,以便每个模块可以进行修补。一个或多个NOP指令可以插入子程序或函数程序代码的起始端。之后,若程序代码中特定的子程序或函数需要做修改,可以编写一个指令(如JUMP指令)进入NOP,使某些特定已存在的指令群可以被绕过(bypass),改成执行一个新模块的指令码。此新模块可以被编写入一个未使用到的内存记忆空间。同样地,可以透过编程插入一组程序代码区块进入新子程序里,然后编程一个NOP指令来呼叫这个子程序。要删除一个编码区块,可以用一个JUMP指令搭配合适的目标地址并将其编程入一个NOP空间,以便跟随在NOP后面的指令区块可以被跳过。
图3为一个储存在内存映像空间中传统程序40的执行示意图。该程序40起始于一个主模块41,对应于起始地址和结束地址。在主模块41里面包含许多子程序或函数模块。除了分岔(branch)或跳转(jump)指令之外,其它指令均依照内存映像地址由低向高地址顺序执行。当一个指令遇到一个子程序或函数,下一个指令将跳转到该子程序或函数的起始地址。从本质上而言,CALLSUB_A指令的行为就像“JUMP M[A]”,其中A为模块SUB_A的起始地址,如图3中的模块42。指令沿着子程序SUB_A内部继续执行,直到遇到RET SUB_A。指令RET SUB_A是另一种分岔指令的形式,将程序分岔回CALL SUB_A指令的下一项指令。如果CALL SUB_A指令在内存地址CALL_A,而且指令大小为8位,其返回到SUB_A将是JUMP M[CALL_SUB_A]+1。以现今计算器技术而言,内存映像是以字节为基础,亦即一个地址仅指向一个字节而已。
如果一个指令有32位,如现今大多数嵌入式处理器、一般用途微处理器或DSP,指令A的下一个指令实际上是位置于A+32/8,或A+4。
在一般情况下,呼叫一个子程序和从子程序返回,不仅仅是跳转功能,还牵涉到结构状态储存和回复。如果遇到另外一个CALL SUB_B,程序执行将跳到模块SUB_B,如图3中的模块43,并继续在子程序SUB_B内执行,直到抵达SUB_B结尾,才又跳回呼叫指令的下一条指令。同样的程序不断进行,直到主模块41遇到“结束”指令,才停止程序执行。子程序或函数可以在一个程序内以蜂巢式结构嵌套多次呼叫。
图4(a)为依据本发明一实施例的一个OTP内存内的程序代码被修改过的程序50示意图。该程序50被提供来用作相当于MTP,以作为编码内存。该程序50有一个的主模块51,以及呼叫映像内存中的两个子程序SUB_A和SUB_B。为了筹备将来可以修改编码,在子程序模块A52的起始地址插入一个NOP指令。从本质上来讲,当经由SUB_A呼叫子程序模块52,一个NOP指令首先被予以执行。执行一个NOP指令,除了浪费一个执行周期之外,并没有任何状态改变。当一个子程序模块A 52中发现有错误,一个新的子程序模块A’57可以被程序化设定在同一个OTP内存的空白空间(blank space)里,并且子程序模块A 52起始端的NOP指令被程序化编写成CALL SUB_A’。透过使用这种方法,有错误的子程序模块A52可以直接被绕过,并不用像传统的MTP需要擦除和重新编程编码内存。同样的方法也可以应用到子程序模块B 53。
为了使这个方法有效,OTP初始状态的指令字符需要与微处理器或处理器的NOP代码一致。在大多数微处理器中,NOP代码是一个全部为0的字符。只要OTP初始状态被设置为0,此方法可以正常运作令人满意。以上叙明仅供例证用途。此发明技术可以扩充相同的绕道技巧方案,实施应用到一个或多个指令组,模块,子程序或函数,而且可以蜂巢式结构嵌套。
图4(b)为依据本发明另一实施例示意图,此实施例使用OTP内存的程序50’插入程序代码,使其运作相当于一个MTP。该程序50’内建在一个内存映像位置内,并且有一个模块abc 51’。NOP指令已经插入在内存地址102H;其中H指的是十六进制。此NOP指令允许一个指令集区块可以插进101H和103H地址之间,透过编程一个新的指令CALL SUB_Z进入102H地址,以及在OTP内的一个空白空间内编程一个子程序SUB_Z 53’指令集区块。当执行102H地址上的指令CALL SUB_Z,执行流程将跳转到新建立的子程序SUB_Z 53’的起始地址,并且继续执行。然后在完成子程序SUB_Z 53’之后,执行流程返回到103H。其效果是,一个SUB_Z 53’指令集区块被插入在101H和103H之间。以上叙述仅供例证用途。此发明内的技术可以在任何内存(诸如主程序、子程序或函数)的地址上插入NOP指令;在重新编程之后,可以以任何数量插入一个或多个指令。此外,子程序或函数可以蜂巢式结构嵌套。
图4(c)为示依据本发明另一实施例示意图,此实施例使用OTP内存的程序50”,删除程序代码,其运作相当于一个MTP。该程序50”内建在一个内存映像位置内,并且有一个模块abc 51”。一个NOP指令已经插入在内存地址102H。此NOP指令藉由在102H地址上编程一个“JUMP 106H”指令,使得介于103H和105H地址之间的一个指令集区块被删除。透过指令“JUMP 106H”取代一个NOP指令,当程序执行至地址102H时将跳转到地址106H,因此绕过地址102H和106H之间的指令群区块。从实质效果而言,介于地址102H和106H之间的一个指令集合区块,被有效地删除了或是绕过忽略。在大多数微处理器里,JUMP指令的目标地址,可以是一个绝对的内存地址、相对内存地址,或是地址偏移(address offset)缓存器的内存地址。如果只有少数几个指令要删除或着绕过,一个参照到现在地址加上偏移量的跳转指令,仅使用一个NOP指令就可以达成;否则,可能需要一个以上的NOP指令来建立目标地址(targetaddress)。
以上叙述仅供例证用途。此发明内的技术可以在任何内存,诸如主程序、子程序或函数,的地址上插入NOP指令;在重新编程后,可以以任何数量插入一个或多个指令。此外,子程序或函数可以蜂巢式结构嵌套。
图5为示依据本发明另一实施例示意图,显示使用OTP内存操作多次修改程序代码的程序60。该程序60有一个主模块61和子程序模块A62、B63储存在内存映像里。主模块61内包含两个呼叫子程序SUB_A和SUB_B。为了筹备将来可以修改代码,两个NOP字组插进子程序模块A62的起始地址。当呼叫子程序模块A62时,此两个NOP指令首先被执行,除了浪费两个执行周期之外,并没有任何状态改变。当在子程序模块A62内发现一个错误,一个新的子程序模块A’67被程序化设定在同一个OTP内存的空白空间,同时子程序模块A起始端的第二个NOP指令被编程为CALL SUB_A’。透过使用这种方法,有错误的子程序模块A62可以直接被绕过,并不用像传统的MTP需要擦除和重新编程编码内存。倘若后来在子程序模块A’内发现更多的错误,一个更新的子程序模块A”可以被程序化设定在相同OTP内存的另一个空白空间,而在子程序模块A起始端的第一个NOP指令重新被编程为CALL SUB_A”。在这种情况下,先前的子程序模块A和A’可以被绕过。同样的方案同样可以应用到子程序模块B63。
一般来说,在一个模块的起始端置入n项NOP指令,则允许该模块进行修改n次,这相当于一个n次的MTP,其中n为正整数。透过预先建置n个NOP指令在一个内存位置,此方案也同样适用于插入编码区块n次,或删除编码区块n次。编程NOP指令总是先从内存映像位置中最后的NOP指令开始。为了让此方法正常运作,OTP初始状态的指令字符需要与微处理器的NOP代码一致。在大多数微处理器中,NOP代码是一个全部为0的字符。只要OTP初始初始状态被设置为0,此方法可以正常运作令人满意。
以上叙明仅供例证用途。此发明技术可以扩充相同的绕道技巧方案,实施应用到一个或多个指令组,模块,子程序或函数,而且可以蜂巢式结构嵌套。
此外,程序代码的多次修改,可以由下列方式达成。提供任何编程进OTP的新模块一个或多个NOP指令;然后新模块可以进一步透过编程一个或多个NOP指令来达到修改的目的。
图6(a)为依据本发明另一实施例的准备程序的方法70流程图,该方法使一个OTP内存可以用作相当于一个MTP。第一步骤71是写一个结构化的程序,其中包含有许多子程序或函数的模块。如果有任何更新,结构化编程可以相对容易地进行修改。子程序或函数也可以蜂巢式结构嵌套,不限层数。
程序编写准备完成之后,可以被编译成汇编语言,如步骤71。
第二步骤72,在有可能被修改的子程序或函数的开端或任何地方,插入n个空格符组或NOP指令。例如,若内存起始地址是A,则可以在内存地址A,A+1,...,A+(n-1)插入NOP指令。此n个空格符组允许子程序或函数进行修改,譬如,在同一个OTP内存内有效地插入或删除,编程程序代码至多n次。
第三步骤73,对已插入NOP指令且有修改的子程序或函数,进行指针更新。在插入NOP指令之后,子程序或函数的起始地址在内存映像位置中将会变动。因此,被呼叫指令的目标地址也同样发生了移动。
第四步骤74,将生成的汇编语言码转换成二进制代码。
最后一步骤75,将二进制代码编程写入OTP内存。
以上叙明仅供例证用途。此发明所开发的技术,可以根据不同的需求,任意指配NOP指令的数量,以及对所有子程序或函数之全部或部分,放置NOP在任何位置上。
图6(b)为依据本发明另一实施例的准备程序的方法80流程图,此方法使一个OTP内存可以操作相当于一个MTP。第一步骤81,写一个结构化的程序,其中包含有许多子程序或函数的模块。
第二步骤82,在有可能被修改的子程序或函数的开端或任何地方,插入n个NOP指令的汇编语言码。将汇编语言码插入以高级语言编写的程序里面称为“内嵌”(inlining)。
第三步骤83,编译混合的高级语言与汇编语言码为一个完全的汇编语言码。
第四步骤84,转换汇编语言码成二进制代码。
最后步骤85,将二进制代码编程写入OTP内存。
以上叙明仅供例证用途。此发明所开发的技术,可以根据不同的需求,任意指配NOP指令的数量,以及对所有子程序或函数的全部或部分,放置NOP在任何位置上。
图7(a)为显示依据本发明另一实施例的更新方法90,当储存的代码其中一部分需要进行修改时,此方法更新本发明OTP内存。
在第一步骤91,确定哪些子程序或函数进行修改。举例,子程序A将被修改i次,n>=i>=0。
第二个步骤92,判别修改的数量是否超过允许上限,亦即,判别i是否大于n。如果是,停止该方法90,并回报错误状态99。在这种情况下,OTP内存不能进一步被修改。
判别结果如果为否定,则进入第三步骤93,新的子程序码Ai可以建立进入OTP内存的备用内存空间(spare memory space)。
然后,在第四步骤94中,更改子程序A,编程一个呼叫指令指向新的子程序Ai。此呼叫指令以下列方式插入子程序A:修改子程序A内第n-i个项目来指向子程序Ai,亦即改变在M[A+n-i]地址上的NOP为CALL SUB_Ai。换言之,在大多数情况下重新编程NOP指令应该由执行顺序中最后可用的NOP指令开始。
在最后一步骤95中,将含有子程序Ai的新编码编程写入相同的OTP内存。在步骤95之后,OTP内存内的编码已顺利修改,方法90可以停止并回报停止状态98。
以上叙明仅供例证用途。此发明所开发的技术,NOP指令的数量可以改变,子程序或函数的数量可以改变,而且子程序或函数可以蜂巢式结构嵌套。
图7(b)为显示依据本发明另一实施例的更新方法90’,当一部分代码需要进行插入时,此方法更新本发明的OTP内存。在第一步骤91’中,确定哪一个编码区块要被插入,其内存地址内已经有n个NOP指令在M,M+1,M+2,…,M+n-1地址上。插入由位于地址M+n-1,M+n-2,…直到M的NOP开始编程。
第二个步骤92’,判别插入的数量是否超过允许上限,亦即,判别i是否大于n。如果是,停止该方法90’,并回报错误状态99’。在这种情况下,OTP内存不能进一步被修改。
判别结果如果为否定,则进入第三步骤93’,新的代码区块被编写入新子程序SUB_Ai并写入OTP内存的一个备用内存空间。
然后,在第四步骤94’中,在地址M+n-i上的NOP被改变来呼叫SUB_Ai。换言之,大多数情况下,重新编程NOP指令应该由执行顺序中最后可用的NOP指令开始。
在最后一步骤95’中,新增加的编码可以编程写入相同的OTP内存。
在步骤95’之后,OTP内存内的编码已顺利修改,方法90’可以停止并回报停止状态98’。
以上叙明仅供例证用途。此发明所开发的技术,NOP指令的数量可以改变,子程序或函数的数量可以改变,而且子程序或函数可以蜂巢式结构嵌套。
图7(c)为显示依据本发明另一实施例的更新方法90”,当一部分代码需要进行删除时,此方法更新本发明的OTP内存。在第一步骤91”中,确定哪一个代码区块要被删除,以及找出附近的内存地址,其内部已经有n个NOP指令在M,M+1,M+2,…,M+n-1地址上。删除程序由位于地址M+n-1,M+n-2,…直到M的NOP开始编程。
第二个步骤92”,判别删除的数量是否超过允许上限,亦即,判别i是否大于n。如果是,停止该方法90”,并回报错误状态99”。在这种情况下,OTP内存不能进一步被修改。
判别结果如果为否定,则进入第三步骤94”,位于M+n-i地址上最后的NOP被改变成JUMP At。At为目标地址。
介于M+n-i和At内存地址之间的所有指令将被有效地删除,或者更确切地说,被忽略绕过。大多数情况下,重新编程NOP指令应该由执行顺序中最后可用的NOP指令开始。
在最后一步骤95”中,新增加的编码可以编程写入相同的OTP内存。
在步骤95”之后,OTP内存内的编码已顺利修改,方法90”可以停止并回报停止状态98”。
以上叙明仅供例证用途。此发明所开发的技术,NOP指令的数量可以改变,子程序或函数的数量可以改变,而且子程序或函数可以蜂巢式结构嵌套;以上皆为包含在此发明的范畴之内。
图8显示一个单次性可编程(OTP)内存一部分的方块图110。OTP内存110提供数据储存能力,但它只能被程序编写一次。OTP内存包含至少有一个OTP内存阵列111,X方向译码器112,X地址线缓冲器113,Y方向通路控制闸门114,Y方向译码器115,Y地址线缓冲器116,感应放大器117,编程电路118和控制逻辑电路119。
OTP内存阵列111可以组织成一个二维度的阵列,搭配X选择器和Y选择器操作。OTP内存阵列111包括众多个储存单元。内存单元,透过如前述的各种具体实施方法作程序修改,可以进行编程或配置为支持重新编程功能。例如,对OTP内存阵列111的初始编程包含NOP指令,之后以程序化改变来修改程序代码,以此方式对编写存入OTP内存阵列的编码作程序执行。例如,程序的修改可以经由分岔或是跳转到新程序位置来达成;此新程序位置可以是新编码或是原本已经存在的编码。
若欲选择某一列来编程或是读取,必须选择适当的X地址信号。此信号从X地址线缓冲器113开始传递,通过X译码器112,来启动打开该列。若欲选择某一行来编程或是读取,必须选择适当的Y地址信号。此信号从Y地址线缓冲器116开始旅行,通过Y译码器115,来开启Y通路控制闸114。每次读取时,至少一个储存单元的数据被读出;位数据由储存单元,经过Y通路控制闸114,感应放大器117,必要时再加上缓冲器,最后由输出端口Q输出。每次写入时,至少一个储存单元的被编写;外部数据由输入端口D输入,经过编程电路118,Y通路控制闸114,最后抵达OTP内存单元。
控制逻辑电路119负责产生适当的信号,开启X译码器、Y译码器,行、列、编程电路或感应放大器。对于一个较大型的OTP内存,X或Y前置译码器可能是必要的。另外,在OTP内存写入过程中,也许需要高电位。因此,控制逻辑电路119还必须负责启动触发电荷泵电路;X译码器112、Y译码器115和编程电路118中还需要包含高压电路。
图9显示了一个简化的电子系统200的具体实施方块图。此电子系统200可以代表一个电路基板(如印刷电路板,挠性电路),集成电路(如微处理器,系统芯片,ASIC,图形控制器,微控制器)之类。电子系统200也可以在一个电子产品中至少一部分来实现,如计算器(个人计算机,桌上型计算机,平板计算机,笔记型计算机,掌上计算机),家用电器,以及其它各种消费电子设备(如移动电话)。
电子系统200包含一个处理器202和OTP内存204。
OTP内存204储存编码或指令,由处理器202来执行。该编码可以使用于任何用途,包括开机启动码,实用程序代码,操作系统代码,设备驱动程序码等。如图9所显示,OTP内存204可以包括一个初始已程序化区域(initiallyprogrammed section)206和一个初始未程序化区域(initiallyun-programmed section)208。根据以上讨论的本发明具体实施例,驻留在初始已设定区域206的初始码可以透过初始已提供的NOPs指令(No Operations)来修改(例如,删除,修复,补充,修改或更改)。这些NOPs指令同样也是储存在初始已设定区域206的初始码。这些NOP指令被提供和执行,但没有做任何事,只是浪费几个时钟周期。
实施过程中,在初始已设定区域206的NOP指令,以OTP内存单元原生状态(native state)而形成,因此尚未被编程过。因此,即使是内存单元仅可单次性编程,这些特殊的单元(亦即储存NOP指令的初始已设定区域206部份)最初没有被编程过,因此在之后可以被编程。最初,初始未程序化区域208是空的或是没有被编程,因此在之后也可以被编程。由上述说明可知,在此OTP内存204包含一无操作(NOP)空间,包含所有以OTP内存单元原生状态(native state)或是初始状态而形成的NOP指令,该原生状态(或是初始状态)例如但是不限定为都是“0”的状态。再者,该无操作(NOP)空间可包含初始已设定区域206部份的NOP指令及/或初始未程序化区域208。
初始码被储存在OTP内存204内的初始已设定区域206,并由处理器202在适当的时机来加以执行。在一段时间之后,因为各种原因,此编码需要被修改。在这种情况下,位于OTP内存204初始已设定区域206内的一个或多个NOP指令,可以被编程成一个主动性指令,如分岔,呼叫或是跳转指令。此主动指令可以改变由处理器202执行的程序代码。主动指令可以跳转或分岔到初始已设定区域206内的其它初始码位置;或是可以跳转或分岔到如子程序或是函数等新编码位置。此新编码被储存在OTP内存204初始未程序化区域208内;此区域空间初始均保留为空白。只要还有NOP指令可供使用来进行编程或是重新编程,此操作可以重复或继续。
以上所叙述的发明,其各面向、特征、具体实施方案和履行实现,可以单独或以各种组合来加以利用。本发明较佳以软件,硬件,或硬件和软件的组合来实现。本发明也可以计算器可读媒体的编码形式存在。计算器可读媒体可以是任何数据储存设备,它可以储存数据然后经由一个计算器系统来读取。计算器可读媒体的实例一般包括只读存储器和随机存取内存。更具体有形实体的例子,包括闪存,OTP内存,EEPROM内存,储存卡,CDROM,DVD,硬盘,磁带和光学数据储存设备。计算器可读媒体,也可以分散在网络计算器系统上,以分布式的方式储存和执行计算器可读码。
以上所述仅为本发明的较佳具体实例,非因此即局限本发明的专利保护范围,故举凡运用本发明内容所为的等效变化,均同理皆包含于本发明的范围内。

Claims (20)

1.一种集成电路,其特征在于,包括:
一处理器;
一单次性可编程内存,作为与该处理器结合运作的内存的一部分或全部;
一指令码,提供给该处理器使用,该指令码被编程到该单次性可编程内存,该指令码有多个模块,
其中至少一个模块有至少有一个无操作指令,且以下列方式进行组态更新:编程一新模块进入单次性可编程内存未使用部分,以及编程一个模块呼叫或分岔指令进入至少一个无操作指令,以跳转到该新模块起始地址,或是任何地址。
2.如权利要求1所述的集成电路,其特征在于,该处理器中的该无操作指令码是在单次性可编程内存内为初始状态的指令字符。
3.如权利要求1所述的集成电路,其特征在于,在一个内含至少一个无操作指令的模块内,包括n个无操作指令,以便在模块内的指令码能够被重新编程至多n次,其中n为一正整数。
4.如权利要求3所述的集成电路,其特征在于,至少有一个模块可以下列重复编程的方式被更新n次:对不同的模块呼叫,或是分岔指令到n个无操作指令其中之一,并由顺序连贯的无操作指令群中最后一个开始编程。
5.如权利要求1所述的集成电路,其特征在于,新模块包含至少一个无操作指令。
6.如权利要求1所述的集成电路,其特征在于,至少有一个模块包含一群指令,一个子程序或一个函数。
7.如权利要求1所述的集成电路,其特征在于,至少有一个模块被呼叫包含在另一个模块里面。
8.一种电子系统,其特征在于,包括:
一处理器;
一单次性可编程内存,作为与该处理器结合运作的编码内存的一部分或全部;及
一指令码,提供给该处理器使用,该指令码被编程到该单次性可编程内存,并且指令码有多个模块,
其中至少有一模块有至少有一个无操作指令并以下列方式进行组态更新:编程一新模块进入单次性可编程内存未使用部分,以及编程一个模块呼叫或分岔指令进入至少一个无操作指令,以跳转到该新模块起始地址,或是执行后之一新目标地址。
9.如权利要求8所述的电子系统,其特征在于,在该处理器中的无操作指令码是个在单次性可编程内存内为初始状态的指令字符。
10.如权利要求8所述的电子系统,其特征在于,在一个内含至少一个无操作指令的模块内,包括n个无操作指令,使无操作空间可以被重新编程n次以修改部份程序代码n次,其中n为一正整数。
11.如权利要求10所述的电子系统,其特征在于,至少有一个模块可以下列重复编程的方式被更新n次:呼叫新模块,或是分岔指令到一个无操作指令,并由顺序连贯的无操作指令群中最后一个开始编程。
12.如权利要求8所述的电子系统,其特征在于,该新模块包含至少一个无操作指令。
13.如权利要求8所述的电子系统,其特征在于,模块是一群指令,子程序或函数。
14.如权利要求8所述的电子系统,其特征在于,模块被呼叫包含在另一个模块里面。
15.一种提供单次性可编程内存配置可更新的方法,其特征在于,该方法包括:
储存指令码到单次性可编程内存;
该单次性可编程内存与处理器结合运作以执行指令码;
该指令码有多个模块;并且
至少一个模块有至少一个无操作空间为无操作指令;
随后,编程一个新模块到单次性可编程内存之前未使用到的部分来储存额外附加的指令码;
另外再编程一个模块呼叫或是分岔指令进入无操作空间,以便将程序执行指向此新模块的附加指令码。
16.如权利要求15所述的方法,其特征在于,在该无操作空间上编程一个分岔或跳转指令,以分岔到该新模块的起始地址。
17.如权利要求15所述的方法,其特征在于,在该无操作空间上编程一个模块呼叫指令,以分岔到该新模块的起始地址。
18.如权利要求15所述的方法,其特征在于,该新模块包含一群指令,一个子程序或一个函数。
19.如权利要求15所述的方法,其特征在于,该新模块被呼叫包含在另一个模块里面。
20.一种非短暂性计算机可读取媒介,其特征在于,至少包括,计算机指令码储存,以便编程单次性可编程内存,使其配置为可更新,此计算机可读取媒介包括:
计算机指令码储存指令码到该单次性可编程内存;其中该单次性可编程内存与处理器结合运作以执行储存的指令码;该指令码有多个模块;至少一个模块有至少一个无操作空间为无操作指令;
计算机指令码随后被编程一新模块到该单次性可编程内存之前未使用到的部分来储存额外附加的指令码;及
计算机指令码编程一个指令进入该无操作空间,以便随后将程序执行指向该新模块的附加指令码。
CN 201110327131 2011-10-19 2011-10-19 集成电路、电子系统及提供otp内存配置可更新的方法 Pending CN103064654A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 201110327131 CN103064654A (zh) 2011-10-19 2011-10-19 集成电路、电子系统及提供otp内存配置可更新的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 201110327131 CN103064654A (zh) 2011-10-19 2011-10-19 集成电路、电子系统及提供otp内存配置可更新的方法

Publications (1)

Publication Number Publication Date
CN103064654A true CN103064654A (zh) 2013-04-24

Family

ID=48107292

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 201110327131 Pending CN103064654A (zh) 2011-10-19 2011-10-19 集成电路、电子系统及提供otp内存配置可更新的方法

Country Status (1)

Country Link
CN (1) CN103064654A (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108388443A (zh) * 2018-02-28 2018-08-10 芯海科技(深圳)股份有限公司 一种otp芯片汇编程序二次打补丁方法
CN108446242A (zh) * 2018-03-07 2018-08-24 珠海昇生微电子有限责任公司 一种固化代码的替换方法及系统
CN110187920A (zh) * 2019-04-01 2019-08-30 深圳市德名利电子有限公司 基于otp的主控芯片的boot代码扩展方法
CN111782288A (zh) * 2020-06-30 2020-10-16 联想(北京)有限公司 电子设备及其控制方法
CN113094071A (zh) * 2021-04-25 2021-07-09 珠海市一微星科技有限公司 一种微控制单元、其控制方法及其固件升级方法
CN116088953A (zh) * 2023-03-15 2023-05-09 无锡前诺德半导体有限公司 修改电路默认参数的方法及初始化参数选择电路

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108388443A (zh) * 2018-02-28 2018-08-10 芯海科技(深圳)股份有限公司 一种otp芯片汇编程序二次打补丁方法
CN108446242A (zh) * 2018-03-07 2018-08-24 珠海昇生微电子有限责任公司 一种固化代码的替换方法及系统
CN110187920A (zh) * 2019-04-01 2019-08-30 深圳市德名利电子有限公司 基于otp的主控芯片的boot代码扩展方法
CN110187920B (zh) * 2019-04-01 2022-06-10 深圳市德明利技术股份有限公司 基于otp的主控芯片的boot代码扩展方法
CN111782288A (zh) * 2020-06-30 2020-10-16 联想(北京)有限公司 电子设备及其控制方法
CN113094071A (zh) * 2021-04-25 2021-07-09 珠海市一微星科技有限公司 一种微控制单元、其控制方法及其固件升级方法
CN116088953A (zh) * 2023-03-15 2023-05-09 无锡前诺德半导体有限公司 修改电路默认参数的方法及初始化参数选择电路

Similar Documents

Publication Publication Date Title
CN103064654A (zh) 集成电路、电子系统及提供otp内存配置可更新的方法
JP5295379B2 (ja) 組み込みプラットフォームにおけるプログラムの動的リンキング方法および組み込みプラットフォーム
US20120047322A1 (en) Method and System of Using One-Time Programmable Memory as Multi-Time Programmable in Code Memory of Processors
CN1838088B (zh) 探测具有限制性调用约定代码的方法
CN107704285B (zh) 现场可编程门阵列多版本配置芯片、系统和方法
CN101221514B (zh) 选择处理器对程序而言遵循的架构级别的方法、处理器及系统
CN101236487A (zh) 存储器子系统的多字元储存/读取方法以及其电路
US20080184072A1 (en) Firmware ROM Patch Method
CN101553789A (zh) 管理快闪存储器中挂起请求的方法及系统
CN103348323A (zh) 动态二进制优化
EP2356562A1 (en) Developing applications at runtime
CN103927187A (zh) 嵌入式系统程序执行方法
CN102486733A (zh) 引导程序的升级方法和装置
CN104090765A (zh) 一种手机游戏转网页游戏的方法及装置
US20170102924A1 (en) Software architecture for embedded systems
KR100604877B1 (ko) 내장 시스템의 메모리 어드레스의 매핑을 제어하는 장치와방법
CN104679547A (zh) 一种mcu中的系统配置信息的读取方法和系统
CN104517044A (zh) 一种防止二进制文件被反编译的方法和装置
CN106201608A (zh) 计算机uefi固件更新方法
CN101334737A (zh) 一种嵌入式设备的启动或复位方法
CN100377086C (zh) 嵌入式系统中直接从文件系统运行程序的实现方法
US10191725B2 (en) Rearrangeable code optimization modules
CN109240729A (zh) 一种修复固件代码的方法及系统
CN112445540B (zh) 程序运行方法、系统、终端及存储介质
CN108399068A (zh) 函数程序持久化的方法、电子设备及存储介质

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C05 Deemed withdrawal (patent law before 1993)
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20130424