CN1378140A - 内存处理方法和处理系统 - Google Patents

内存处理方法和处理系统 Download PDF

Info

Publication number
CN1378140A
CN1378140A CN 01110415 CN01110415A CN1378140A CN 1378140 A CN1378140 A CN 1378140A CN 01110415 CN01110415 CN 01110415 CN 01110415 A CN01110415 A CN 01110415A CN 1378140 A CN1378140 A CN 1378140A
Authority
CN
China
Prior art keywords
mentioned
internal memory
object code
code
frame hopping
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.)
Granted
Application number
CN 01110415
Other languages
English (en)
Other versions
CN1209707C (zh
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.)
Winbond Electronics Corp
Original Assignee
Winbond Electronics Corp
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 Winbond Electronics Corp filed Critical Winbond Electronics Corp
Priority to CN 01110415 priority Critical patent/CN1209707C/zh
Publication of CN1378140A publication Critical patent/CN1378140A/zh
Application granted granted Critical
Publication of CN1209707C publication Critical patent/CN1209707C/zh
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Design And Manufacture Of Integrated Circuits (AREA)

Abstract

一种内存的处理方法,可以加载一原始码所编译的可执行目的码至具有缺陷的内存中。首先,设置对应于原始码的多个预编目的码,每一预编目的码分别具有至少一跳码地址范围。接着测试此内存,找出其中的缺陷地址。因此根据测试所得的结果,加载系统可以从预编目的码中选择出具有与其匹配的跳码地址范围的可执行目的码,加载至此内存。由于跳码地址范围可以涵盖内存中的缺陷地址,因此内存中的缺陷内存单元不会影响到加载程序的运作。

Description

内存处理方法和处理系统
本发明是有关于一种具有局部缺陷的内存的处理方法和系统,特别是属于一种处理方法和系统,能够对于一原始程序代码(sourcecode),预先根据内存各种可能的缺陷分布类型,修改并取得(例如经由编辑(compile)及连结(link)而得出)对应的目的码或机器码,然后根据待加载内存的实际缺陷分布类型,选择出对应的目的码或机器码加以加载并且执行。
以往如果内存IC内存在任何缺陷存储单元(defective memorycells)时,一般是不会将这样的内存IC在市面上贩售。为了减少因单一或少数缺陷而废弃整个IC的情况,目前有许多技术可以让局部缺陷的内存IC,在操作上如同完全正常的内存IC。
例如,美国专利NO.4939694中即揭露一种能够自我测试(self-testing)和自我修补(self-repairing)的内存系统。此内存系统可以在使用现场进行自我测试,以便定位出其中的缺陷存储单元。一旦发现任何缺陷存储单元,此内存系统便会使用一种称为错误修正码引擎(error correction code engine)的装置,对于这些缺陷存储单元进行修补。如果错误修正码引擎无法负荷,则内存系统便会取代掉这些缺陷存储单元。
另外在美国专利No.5644541中则是利用替换内存(substitutionmemory)来处理含有缺陷存储单元的半导体内存。当半导体内存在数个已知位置的错误位时,则利用一映像逻辑(mapping logic)将所有需要存取到这些错误位的存取请求,导向到替换内存内良好的存储单元,借此取代原本的缺陷存储单元。
美国专利No.5278847中则是揭露一种使用错误侦测/修正码(error detecting and correcting code,EDAC)的容错(fault-tolerating)存储系统。储存数据的可靠度可以利用对于每个数据字符加入EDAC编码和增加备用位(spare-bit)而达成。
美国专利No.5579266中则是利用雷射修补技术和可程化熔丝修补技术来处理缺陷存储单元,可以利用冗余内存来取代缺陷内存。
其中像是美国专利NO.4939694中所揭露的错误检测和修补技术、美国专利No.5278847中所揭露的编码和备用位技术,亦或是美国专利No.5644541中所揭露的存取导向技术,不仅会增加硬件设计上的因难度,同时在可执行机器码每次执行时也会造成程序执行上的负担。另,如美国专利No.5579266所揭露的冗余内存技术,在硬件设计上或是在实际进行修补的程序上也都十分复杂。
另一方面,一般可执行的机器码或目的码(object code),是由计算机程序的原始码,利用编辑器(compiler)、连结器(linker)等所产生。目的码则可以直接加载内存中来执行。第1图表示一般单芯片计算机(single chip computer)或单芯片系统(system-on-a-chip)的系统配置图。如图所示,此系统包括CPU(central processing unit,或称微处理器)1、RAM(random access memory,随机存取内存)3、ROM(read-only memory,只读存储器)5、I/O界面7以及外部储存装置9,例如硬盘机、软盘机或CD-ROM等等。在正常操作情况下,CPU 1会通过数据/地址总线10,由I/O界面7或是外部储存装置9将预备执行的机器码或目的码,加载到RAM 3中。一般目的码中包含了三个部分,分别为指令(instruction)、数据(data)和堆栈(stack)。CPU 1会从指令部分的程序进入点(entry point)开始执行此目的码。
第2图表示一般目的码在执行(execution)时的流程图。首先,取得程序进入点(S100)。接着取得下一个指令的地址(address)(S101),并且根据此地址,读取下一个指令中的操作码(opcode)(S102)。接着将操作码进行译码(S103),并且根据指令形式来判断是否需要操作数(operand)。如果此指令需要操作数,则再从后续地址中读取操作数(S104)。最后根据操作码所代表的指令动作以及操作数所代表的数据内容或参考地址,执行该指令(S105)。如果此指令为程序终止指令(S106),则机器程序代码执行完成(S107),否则回到步骤S2取得下一个指令的地址。必须说明的是,每个指令并不一定包含相同的位组长度,这与所采用的CPU类型有关。一般CPU所采用的指令集可分为可变长度码字指令集和固定长度码字指令集。
在上述执行流程中,主要是针对目的码中的指令部分。如果相同的执行程序应用于数据部分或是堆栈部分,其译码结果则会完全错乱。当某个数据字节由CPU 1译码成某个错误的操作码后,则会根据错误的操作码让后面数个数据被误认为操作数。一般CPU 1是无法通过标准的撷取和译码动作来辨认出何者为指令部分,何者为数据部分或堆栈部分。另外,程序代码的指令部分和数据/堆栈部分亦不可以任意地加以分断,指令部分的分断必须根据各指令的格式而定,亦即各指令(包含操作数和操作码)的位组长度。而数据/堆栈部分一般是无法分断的,这是因此在数据/堆栈部分中可能包含只有在执行时才能判断的数据关连性,例如数据结构中的数组。
有鉴于此,本发明的主要目的,在于提供一种内存的处理方法和处理系统,能够在不改变硬件配置和不增加软件执行负担的前提下,加载适当的目的码至具有缺陷的内存IC,仍然能够正常地执行。
本发明的目的可以通过以下措施来达到:
一种内存的处理方法,用以加载一可执行目的码至上述内存,其包括下列步骤:
设置多个预编目的码,分别具有至少一跳码地址范围;
侦测上述内存的缺陷地址;
根据侦测所得的结果,由上述预编目的码中选择具有与其匹配的跳码地址范围的可执行目的码;以及
加载上述可执行目的码至上述内存中以供执行。
一种内存的处理系统,用以加载一原始码所编译的可执行目的码至上述内存,其包括:
一储存装置,用以至少储存对应于上述原始码的多个预编目的码,每一预编目的码分别具有至少一跳码地址范围;
一处理单元,用以根据上述内存的缺陷地址,由上述预编目的码中选择具有与其匹配的跳码地址范围的可执行目的码;以及
一界面电路,用以加载上述可执行目的码至上述内存。
一种内存的处理系统,用以加载一可执行目的码,其包括:
一内存,置于一集成电路上;
一储存装置,用以至少储存对应于上述原始码的多个预编目的码,每一预编目的码分别具有至少一跳码地址范围;以及
一处理单元,置于上述集成电路上,用以测试上述内存的缺陷地址,并且由上述预编目的码中选择具有与其匹配的跳码地址范围的可执行目的码,加载上述内存。
本发明相比现有技术具有如下优点:
因此本发明提出一种内存的处理方法,可以加载一原始码所编译的可执行目的码至内存中。首先,设置根据原始码产生的多个预编目的码,每一预编目的码分别具有至少一跳码地址范围。接着测试此内存,找出其中的缺陷地址,例如使用测试器来测试。将测试结果(以缺陷地址或缺陷分布类型表示)直接传送到加载系统,或是先储存于内存中的卷标内存,再由加载系统自行读出。因此根据测试所得的结果,加载系统可以从预编目的码中选择出具有与其匹配的跳码地址范围的可执行目的码,加载至上述内存。另外,可以通过表示预编目的码及其对应的跳码地址范围的跳码地址表,让加载系统在选择时可以直接比对跳码地址表,决定适合的可执行目的码。
另外,要产生上述的预编目的码,可以通过修改原始码或是目的码的方式来达成。例如修改原始码的方式中,可先根据跳码地址范围来修改原始码,再编译修改的原始码,来产生预编目的码。在修改目的码的方式中,则是编译原始码产生一标准目的码,再根据跳码地址范围来修改标准目的码,产生所需要的预编目的码。
在修改目的码的方式中,如果跳码地址范围是在目的码的数据区中,可以在编译上述原始码时,产生数据区配置于不同地址的多个标准目的码,而在修改标准目的码时,修改跳码地址范围不在其数据区的标准目的码。另一种处理数据区的方式则是当跳码地址范围置于标准目的码的数据区时,修改原始码来分割上述数据区。也就是将原来数据区扩充为一扩充数据区,借以包含跳码地址范围,并且对于每一存取数据区的指令,可加入一判断指令,用来决定在上述扩充数据区的实际位置。
另外,如果所有预编目的码的跳码地址范围都不匹配测出的缺陷地址,也可以根据缺陷地址,现场编译原始码或修正一动态预编目的码来产生可执行目的码。在动态预编目的码中具有多个跳码区域码,调整跳码区域的位置,即可涵盖测出的缺陷地址。
另外,本发明亦提出一种内存的处理系统,用以加载原始码所编译的可执行目的码至内存中;其中包括:一储存装置,用以储存对应于原始码的多个预编目的码,每一预编目的码分别具有至少一跳码地址范围;一处理单元,用以根据内存的缺陷地址,由预编目的码中选择出具有与其匹配的跳码地址范围的可执行目的码;以及一界面电路,用以加载可执行目的码至内存。此配置适用于将一特定程序加载海量存储器IC的情况。
另外,本发明亦提出一种内存的处理系统,用以加载一原始码所编译的可执行目的码;其中包括:一内存,置于一集成电路上;一储存装置,可储存对应于原始码的多个预编目的码,预编目的码可具有零个或至少一跳码地址范围;以及一处理单元,置于集成电路上,用以测试内存中是否含缺陷地址,并且由预编目的码中选择具有与其匹配的跳码地址范围的可执行目的码或无跳码地址的预设目的码(default object code),加载内存。此配置则适用于微处理机或单芯片计算机等等中的内存IC。
根据以上所述,本发明的局部缺陷内存的处理方法具有下列的特点:
1.利用此方法,即使是具有一定程度缺陷的内存IC。只要配合适当的加载系统,就可以让适当的目的码加载于此内存IC中,正常地执行各种处理。特别是对于某些大规模集成电路而言,以前往往因为芯片内存上的某个缺陷而使得整颗IC报废,本发明正可以解决此一问题。换言之,让实际产品出厂的合格率大于内存IC制程上的合格率,借此可以大幅降低整体生产成本。
2.现有技术对于有缺陷的内存IC通常是利用硬件方式来部分处理,需要修改内存IC的内部配置,并不适用于所有的使用者;另外利用硬件方式修正缺陷,在实际应用上的弹性很小,如果遇到不是预设的缺陷分布类型,即是非常少量的缺陷内存,也不一定可以成功修复。相对地,本发明则具有使用普遍性和弹性化的优势。
3.本发明中使用了储存媒体来储存对应各种缺陷分布类型的预编目的码。由于目前高容量且便宜的储存媒介大量出现,例如硬盘、光盘、超微型储存媒体等,都使得此一特性在实务上可以获得充分的支持,非常适合于海量存储器IC的程序化生产作业上。
4.另外,本发明中列举了数种预编目的码的产生方式,但是并非用以限定本发明,实施者可以因应不同的情况来选择最适当的预编目的码产生方式。但是必须说明的是,对于同一原始码,只需要编译及连结一次所有需要的预编目的码,便可以适用于所有加载目的码的内存IC,因此适合于海量存储器IC(例如掩膜只读存储器Mask ROM、快擦写存储器或电可擦可编程只读存储器EEPROM)的程序化生产作业上。
5.本发明也可以适用在已通过硬件修复处理过(例如利用冗余(redundant)字符线或位线进行修复),但是仍然有许多缺陷存储单元无法正常修复的内存IC,像是缺陷存储单元的数量超过冗余修复处理方式的极限部分。
为使本发明的上述目的、特征和优点能更明显易懂,下文特举一较佳实施例,并配合附图,作详细说明如下:
第1图表示现有单芯片计算机或单芯片系统的系统配置图。
第2图表示现有目的码在执行时的流程图。
第3图表示本发明第一实施例中,局部缺陷内存处理系统的配置图。
第4图表示本发明第一实施例中,局部缺陷内存处理方法的流程图。
第5图表示本发明第一实施例中,在理想状态下各预编目的码的跳码地址范围的示意图。
第6图表示本发明第一实施例中,利用修改原始码来产生预编目的码的数据流图。
第7图表示本发明第一实施例中,利用修改目的码来产生预编目的码的数据流图。
第8图表示第7图的目的码修正模块的处理方法流程图。
第9图表示本发明第一实施例中对于目的码进行扫描的流程图。
第10图表示本发明第一实施例中连接移动码和未移动部分的示意图。
第11图表示本发明第一实施例中修正参考地址的示意图。
第12图表示本发明第一实施例中,在产生预编目的码时针对数据区处理的目的码示意图。
第13A图和第13B、13C图分别表示在本发明第一实施例中,分割数据区而进行修正前和修正后的原始码列表。
第14图表示本发明第二实施例中,局部缺陷内存处理系统的配置图。
第15图表示本发明第三实施例中,局部缺陷内存处理系统的配置图。
第16图表示本发明第三实施例中,局部缺陷内存处理方法的流程图,
第17图表示本发明第四实施例中,适用于现场编译的动态预编目的码格式以及其修正格式的示意图。
第18图表示在本发明第五实施例中,对应于字符线(word-line)错误所设计的预编目的码的示意图。
第19图表示在本发明第五实施例中,对应于位线(bit-line)错误所设计的预编目的码的示意图。
第20图表示本发明第六实施例中的预编目的码产生方法的流程图。
符号说明:
1~CPU;3~RAM;5~ROM;7~I/O界面;9~外部储存装置;10~数据/地址总线;20~加载系统;22~外部总线;32~外部测试器;30、31~外部内存IC;31a~卷标内存;40~跳码地址表;50~未编辑原始码;51~跳码地址范围#i;55~原始码修正模块;52~已修正原始码;57~编辑/连结器;53~预编目的码OBJi;60~已编辑目的码;61~跳码地址范围#i;65~目的码修正模块;62~预编目的码OBJi。
本发明的局部缺陷内存处理方法和系统,主要是预先准备多个对应于不同缺陷分布类型的预编目的码(pre-compiled object codes),在加载时则根据实际待加载内存IC的缺陷分布类型,选择出适当的预编目的码,直接加载内存IC中。上述的缺陷分布类型是指内存IC中出现缺陷的地址分布,可能是单一存储地址,可能是连续数个存储地址,也可能是分散的数段存储地址区块。上述所有的预编目的码是由同一原始码(source code)所编译、连结产生,但是个别在对应的跳码地址区域(skipped address range)内则填入伪码(dummy code)取代,例如无作用的NOP指令,并且利用跳跃指令来连接被分断的码,例如JMP指令,再加上参考地址的修正处理,因此可以执行相同的功能。以下配合图式,详细说明本发明各实施例的技术内容。
第一实施例
第3图表示本发明第一实施例中局部缺陷内存处理系统的配置图。在第3图所示的情况中,加载系统20中包括CPU 1、RAM 3、ROM 5、I/O界面7以及储存媒体9,其相关数据已于第1图中说明,故此处不再重复。在本实施例中,加载系统20预备将一原始码所编译出的可执行目的码,加载到外部内存IC 30中。此一外部内存IC 30可以是单纯的内存IC,例如快快擦写存储器(flash memory)或是电子可抹式PROM(electrically erasable programmable read-only memory),也可以是单芯片计算机(system on chip,SOC)或微控制器内部的内存。外部内存IC 30是利用一测试器32进行测试,决定其中是否包含缺陷内存单元。此测试器32可以包含在加载系统20中,亦可以另为单独的测试器,或是内建于单芯片计算机或微控制器内的自我测试电路。一般测试方式是写入固定测试类型(test pattern)后再读出,借此决定出是否有无法正常写入/读出的内存单元。在加载系统20的储存媒体9中则是储存多个预编目的码OBJ0~OBJn,这些预编目的码均由同一原始码产生并且都是可执行的机器码,但是分别具有一段或数段填入伪码的跳码地址范围,用来对应于不同的缺陷分布类型(可包含零缺陷类型)。其中,预编目的码OBJ0表示未填入上述目的的伪码的标准目的码。因此,如果外部内存IC 30包含缺陷存储单元并且已知外部内存IC 30的缺陷分布类型,加载系统20中的CPU 1便可以选择出对应的预编目的码,让此预编目的码中的跳码地址范围涵盖外部内存IC 30中的缺陷内存单元,因此,此缺陷内存IC 30仍然能够正常储存可执行的目的码或机器码。
第4图表示本发明第一实施例的局部缺陷内存处理方法的流程图。首先在步骤S1,加载系统20提供由同一原始码所编译的预编目的码OBJ0~OBJn,其分别对应于不同的缺陷分布类型。第5图表示在理想状态下各预编目的码的跳码地址范围的示意图。在第5图中,预编目的码OBJ1的跳码地址范围K1包含≥2X个地址,其它预编目的码OBJ2、OBJ3、…中的跳码地址范围K2、K3、…也包含近似的地址范围,而相邻预编目的码之间则有≥X个地址的重叠区。在此模式下,可以保证涵盖X个地址长度以下的任何连续缺陷地址。举例来说,如果标准目的码OBJ0的长度为10000个字节,操作者希望能够解决缺陷地址范围不超过5%(即500个字节)的缺陷,则可以产生跳码地址范围为≥2X=1000字节的预编目的码,并且各预编目的码之间跳码地址范围会重叠≥500个字节,因此利用20个预编目的码(其中包含标准目的码OBJ0)便可以涵盖单一缺陷区域或各缺陷内存单元不超过500个地址范围的情况。
不过,受限于可分断点的位置以及必须在跳码地址范围前加入JMP指令来连接被分断的程序代码,跳码地址范围不会如上述理想情况一样,实际上会有数个字节的差距。因此在本实施例中,储存媒体9中同时储存一跳码地址表40,其中标示各预编目的码的码号,以及其跳码地址范围的开始地址和结束地址。例如预编目的码OBJ1的跳码地址范围K1,其开始地址为Addr_1a,其结束地址为Addr_1b。事实上,预编目的码也可以涵盖两个以上的跳码地址范围,例如预编目的码OBJn的两个跳码地址范围分别是从Addr_na到Addr_nb以及从Addr_nc到Addr_nd。如果配合上述例子来说明,对于一个长度为10000个地址的目的码而言,具有两个跳码地址范围的预编目的码数量为(19*18)/2=171。利用跳码地址表40,加载系统20可以正确的决定出不同缺陷分布类型所对应的预编目的码。至于如何由一原始码产生不同的预编目的码,则稍后详述。
回到第4图,接着在步骤S2,测试器32对于外部内存IC 30进行侦知或测试,以决定出其缺陷分布类型或缺陷地址。例如,对于快擦写存储器存储IC及EEPROM等独立内存IC,可以利用一般测试器(tester)进行测试;对于SOC或微控制器中的内存IC,则可以利用其本身的内建测试例程(built-in test routine)进行测试。要检查存储单元是否为缺陷,可以将数据”1”和”0”分别写入每个存储单元,再读出其数据是否正确,如果写入数据和读出数据不吻合,就表示这个存储单元有缺陷,反之则无。
接着在步骤S3,将测试所得到的缺陷分布类型或缺陷地址传送到加载系统20中。接着在步骤S4,CPU 1便可以根据所得到的缺陷分布类型或缺陷地址,比对跳码地址表40,找出匹配的预编目的码。如果可以找到匹配的预编目的码,则在步骤S5加载至外部内存IC 30,由于其缺陷存储单元不会用来储存有用的程序代码,因此在步骤S7便可以正常的执行。另一方面,实际上预编目的码的数量是有限的,例如在本实施例中是预先编辑最多两个跳码地址范围的预编目的码,但是如果外部内存IC 30的缺陷数量十分分散或是包含非常大量的缺陷,就不一定可以找到对应的预编目的码。对于此情况,一种处理方式是直接舍弃此一内存IC,另一种处理方式则如步骤S6,根据原始码和已知的缺陷分布类型,在现场直接编译出一对应目的码并且加载,新产生的目的码可以再储存于储存媒体9并且加入索引于跳码地址表40中,供后续使用。如果在步骤S8判断出尚有下一颗含内存IC,则回到步骤S2重复上述的步骤,如果没有则结束此流程
在上述流程的步骤S1和步骤S6中,都需要对于同一原始码产生在既定位置上(对于预编目的码即是指定的跳码地址范围,对于现场编辑的目的码即是已知的缺陷分布地址)填入伪码的可执行目的码。要产生这样的目的码可以通过两种方式,第一种是在原始码上修改,第二种是在编译后的目的码上修改,以下分别详细这两种产生方式。
修改原始码
修改原始码的产生方式,主要是在原始码编译前或是编译过程中,对于原始码本身做修改,让其产生具有对应跳码地址范围的目的码。例如可以在原始码中加入编译器指令,让编译器可以在第一次编译的地址计算过程中,将跳码地址范围内的伪码插入,而将其它正常机器码依序编译于其它位置上,建立连接码的跳跃指令,跳过跳码地址范围的部分。因此编译后的目的码即具有对应的跳码地址范围,并且为可执行的状态。
第6图表示本发明第一实施例中利用修改原始码的方式来产生预编目的码的数据流图。在第6图中,原始码修正模块55将未编译原始码50读入,并且根据已知的跳码地址范围(#i)51,在未编译原始码50中加入对应指令,以告知所需要的跳码地址范围。如此产生的已修正原始码52便可以通过编译/连结器57产生所需要的预编目的码(OBJi)53。
修正目的码
利用修正原始码的方式虽然可以解决产生预编目的码的问题,但是编译效率往往由编译器本身决定,而且对于不同的程序语言必须发展对应的编译器来处理。另一种解决方式则是直接修正目的码,对于任何程序语言所写的原始码都可以适用。第7图表示本发明第一实施例中利用修改目的码的方式来产生预编目的码的数据流图。先利用编译器来编译原始码,产生已编译目的码60(亦即上述的OBJ0)。目的码修正模块65则根据预设的跳码地址范围(#i)61,修正已编译目的码60,产生所需要的预编目的码(OBJi)62。目的码修正模块65的作用是将预定跳码地址范围内的码移动到其它地址上,连接移动码和原来部分的执行顺序,并且修正其中的参考地址(reference addresses)。
第8图表示第7图中目的码修正模块65的处理方法的一例的流程图。首先在步骤S10,决定已编译目的码60的多个可分断点(例如对于已编译目的码60进行扫描,以便找出其中的所有可分断点)。在一般机器码中,指令部分中的个别指令间均为可分断点,这是因为个别指令即使被分断,CPU在执行时仍可以正确译码出正确的指令讯息;相对地,数据部分和堆栈部分原则上是不可分断的,这是因为数据和堆栈之间可能具有在执行时才可能检查出来的相关性,例如数组数据。另一方面,CPU无法直接分辨出机器码中的指令部分和其它部分,所以使用对已编译目的码60中的指令部分整个进行扫描的方式,可以决定出所有的可分断点。
第9图表示本实施例中的扫描方法的流程图。此处所谓的”扫描”,是包含撷取操作码、译码、撷取操作数这些动作,但是不需要执行。为了扫描已编译目的码60的整个指令部分,必须特别处理一般机器程序代码中常见的两种特殊型态,即分支(branch)和循环(loop)。
分支型态一般是由条件分支指令(conditional branchinstruction)所造成,例如JNE、JE、JG等等,会在执行时产生两种不同的指令执行顺序。在扫描过程中,为了确定处理到所有的指令,因此两种指令执行顺序都需要加以扫描。在本实施例中,扫描过程中会建立第一数据表71,当遇到任何条件分支指令时,会将该分支指令的下一地址或该分支指令的分支目的地址(branch-to address)储存于第一数据表71中。借此,当主要指令执行顺序完成扫描后,便可以根据第一数据表71进行其它执行顺序的扫描。另外需要说明的是,一般分支指令还包含一种无条件分支指令(unconditional branchinstruction),例如JMP,但是由于这种指令并不会造成两条不同的执行顺序,因此本实施例中不特别处理,可以依照指令中的目的地址(branch-to address)继续扫描。另一方面,循环型态则会造成扫描无法终止,在本实施例中,则是在扫描过程中建立第二数据表72,用来记录已经被扫描过的地址范围,而每扫描一个指令,即会更新第二数据表72。当重复扫描到循环内部时,便可以根据第二数据表72判断出已扫描过此部分,因此可以防止继续扫描后续的指令。
以下详细说明第9图中扫描步骤的动作。首先在步骤S20,取得程序进入点。接着在步骤S21,取得并指定下一个指令的地址,并且在步骤S22,读取下一个指令中的操作码并且进行译码。如果此指令需要操作数,则在步骤S23中从后续地址中读取操作数。此时所读取者为一完整指令,因此可以记录为一可分断点。接着在步骤S24中,判断目前指令是否为条件分支指令,如果是,则可以在步骤S25中将此条件分支指令的分支目的地址或者是下一地址加入到第一数据表71中,再从另一地址继续扫描。接着在步骤S26决定出扫描的下一个地址。在步骤S27先判断此地址的指令是否为返回指令(例如RET)或程序结束指令(例如END)。如果下一个地址的指令不是返回指令或是程序结束指令,则在步骤S31中根据第二数据表72来判断此一地址是否为已扫描地址范围。如果此下一个地址亦非已扫描地址范围,则在步骤S32修改第二数据表72以便更新已扫描地址范围之后,继续处理下一个指令。如果在步骤S27中下一个地址的指令是返回指令或是程序结束指令,亦或在步骤S31中下一个地址为已扫描过的地址范围,则在步骤S28判断第一数据表71中是否仍有待扫描地址。如果仍有,则在步骤S29从第一数据表71中取得一待扫描地址并且将其从第一数据表30中移去,再在步骤S32修改第二数据表72中的已扫描地址范围,继续处理此一待扫描地址的后续指令。如果第一数据表71中已经没有待扫描地址时,则表示已经扫描完成全部的指令,并且得到所有的可分断点以及已编译目的码60中的指令部分和数据/堆栈部分。在第9图中,虚线框H1表示处理分支型态的相关步骤,虚线框H2则表示处理循环型态的相关步骤。
回到第8图,在步骤S11中,设定跳码地址范围#i。接着在步骤S12中,根据扫描产生的已编译目的码60的可分断点以及跳码地址范围#i,可以决定出包含且最接近跳码地址范围#i的两个可分断点,每一个完整指令之间,皆为可分断点。必须注意的是,对于多个跳码地址范围的情况来说,可以用相同方式分别求出对应的可分断点,为简化说明,以下描述均以单一跳码地址范围为例。上述的第一个分断点和第二个分断点之间的指令部分(也可能包含数据/堆栈部分)则需要被移动到其它的地址上,以达到加入跳码地址范围的目的。在本实施例中,可分断点是选择以最接近缺陷地址但是与缺陷地址之间仍存在数个字节者为准,这可以用来储存连接指令JUMP。
接着在步骤S13,将可分断点之间的码移动到其它的地址上。在完成移动码的重新寻址后,如果移动码包含指令部分,接着在步骤S14中必须插入连接指令,以便维持原来的程序执行顺序。最简单的方式是插入两个无条件分支指令(JMP)来达成连接的目的。第一个无条件分支指令是插入于第一个分断点的地址上,其分支目的地址是指向移动后的码;第二个无条件分支指令是插入于移动码的后面,而其分支目的地址指向第二个分断点的地址。因此,当执行到第一个分断点地址上的指令时,可以通过第一个无条件分支指令,跳到移动后的码继续执行;当完成移动的码指令后,则通过第二个无条件分支指令跳回到第二个分断点地址上的指令。
第10图表示本实施例中连接移动码和未移动部分之间的示意图。如图所示,已编译目的码60包含了各区域码A-G。假设区域码E对应于预定的跳码地址范围,则可以根据区域码E的前后分别决定出第一个分断点和第二个分断点。当将区域码E移动至新的地址范围内,即出现移动后的区域码E’。符号66和67分别表示插入的第一个及第二个无条件分支指令。当区域码D执行完成后,即通过第一个无条件分支指令66跳到区域码E’;当区域码E’执行完成后,则再通过第二个无条件分支指令67跳回区域码F。因此,原来程序执行顺序可以维持,仅需要多执行两个无条件分支指令即可。
当完成步骤S14的连接动作后,接着在步骤S15中处理一般机器程序代码中常见的参考地址。参考第11图,其表示本实施例中修正参考地址的示意图。如图所示,有三种参考地址类型会与移动后区域码E有关,分别标示为R1、R2、R3。R1表示区域码E中指令的参考地址指向区域码E中地址的情况;R2表示其它码的参考地址指向区域码E中地址的情况;R3表示区域码E中指令的参考地址指向其它未移动区域码的情况。这些参考地址必须在区域码E移动后为区域码E’后,修正其参考地址(即R1’,R2’,R3’),以便产生可执行的预编目的码OBJi。
要修正参考地址,可以对于整个已编译目的码60重新进行扫描,以便找出与区域码E相关的参考地址。一般参考地址又可以细分为两种寻址模式(addressing modes),分别为相对地址寻址模式(relativeaddressing mode)和绝对地址寻址模式(absolute addressing mode)。如果与上述三种参考地址情况一并考虑,则共有六种类型。在R1的参考地址中,只有绝对地址寻址模式的参考地址才需要修正。在R3的参考地址中,只有相对地址寻址模式的参考地址才需要修正。而在R2的参考地址中,则相对及绝对地址都需要修正。当修正上述绝对地址寻址模式的参考地址时(均是指向区段程序代码E),则在此参考地址中加入区域码E和移动后区域码E’之间的相对位移量即可。若要修正上述相对地址寻址模式的参考地址,亦可以利用区域码E和移动后区域码E’之间的相对位移量来达成。至此,便可以产生可执行的预编目的码OBJi。
接着,在步骤S16,判断是否需要产生其它的预编目的码,如果有,则回到步骤S11重新执行各步骤;如果没有,即结束产生预编目的码的作业。另外,每一个预编目的码所对应的跳码地址范围,除了建立上述跳码地址范围的方式外,也可以记录在每一个预编目的码的档头(file header)部分。
在第9图的处理方式可以判断出指令部分以及数据部分,不过由于一般数据区是为不可分割的,因此若有大块数据区对应于缺陷内存地址时,则在决定可分断点以及移动程序代码后,会浪费比较大的地址空间。第12图表示本发明第一实施例中针对存在大区块数据区情况的一种处理方式示意图。符号80表示依照一般编译器所产生的标准目的码,亦即前述的OBJ0。在目的码80中包含区域码C1~C7,其中区域码C2为不可分割的数据区,例如T[1]~T[10000]。假设一预编目的码的跳码地址范围Ki如第12图所示,位于区域码C2内。如果利用第8图的处理方式来处理,会在区域码C2的开始地址和结束地址加1上设定可分断点,再整个移动到其它地址上(例如接在区域码C7之后)。不过,这样的处理方式可能会浪费大量的地址空间,同时如果所加载内存IC的内存空间不大时,很容易发生无法加载的情况。对于这样情况,本实施例中亦提出两种解决方式。
第一种方式是利用码重排(code shuffle)方式产生新目的码,例如第12图中的81。目的码81中的区域码C2’对应于目的码80的区域码C2,其中区域码C2和C2’之间可以部分重叠。要产生目的码81,可以通过原始码的修改,让编译器将原来的区域码C2寻址于区域码C2’的地址,或者是直接利用修改目的码80。利用目的码80和81来产生预编目的码OBJ1~OBJn,可以避免直接移动数据/堆栈区而浪费大量的地址空间。详言之,如果预定的跳码地址范围是在区域码C2上,则可以利用目的码81来修正产生所对应的预编目的码。由于在目的码81中区域码C2的相对地址上为一般的程序代码,包含许多的可分断点,因此可以移动最少的程序代码来产生预编目的码。如果预定的跳码地址范围是在区域码C2’上,则可以利用目的码80来修正产生所对应的预编目的码,亦具有相同的效果。
第二种方式则是分割数据区,例如第12图的82。如图所示,原来的区域码C2被分割为T[1]~T[IDF]的子区域码C2a以及T[IDF+JDF+1]到T[10000+JDF]的子区域码C2b,两者间的JDF个字节则对应于跳码地址范围Ki。要产生具有分割数据区的目的码82,必须修改原始码才能达到此目的,以下以一实例来说明。
第13A图和第13B、13C图分别表示修正前和修正后的原始码列表。在第13A图的原始码中,首先宣告具有10000个存储地址的数组T(程序行100)。而在主程序中(程序行101至130之间),依序由装置DEV1将数据传送到数组T(程序行110~111),再由数组T传送数据到装置DEV2(程序行120~121)。例如此原始码可以适用于数字相机的内存数据处理上,装置DEV1可以是电荷耦合器件CCD(Charge Coupled Device)传感器,让感测到的影像数据传送到数字相机的内存上;而装置DEV2则可以是通用串行总线USB(Universal Serial Bus)界面电路,让储存中的影像数据通过USB界面电路传送到外部(例如计算机)。要将数组T所对应的数据区分割,可以将第13A图中的原始码修改成第13B图的程序代码。
在第13B图的修正原始码中,程序行200~201分别宣告两个常数:IDF和JDF,其中常数IDF表示预定跳码地址范围Ki的开始位置在数组T中对应项的前一项,JDF表示预定跳码地址范围Ki的长度。在一般程序语言中,常数宣告并不占用存储码,而其实际数值亦可随预定跳码地址范围Ki而修正。接着在程序行210中,宣告具有10000+JDF个存储地址的数组T,其包括原来数组长度以及插入其中的预定跳码地址范围Ki的长度。在主程序中(程序行211至250之间),首先设两个中间参数I2和I3,分别指出子区域码C2a在新数组T(10000+JDF)中的结束项以及子区域码C2b在新数组T(10000+JDF)中的开始项。接着在程序行230~237之间处理由装置DEV1输入数据至T(10000+JDF),其中程序行230~233处理子区域码C2a,程序行234~237处理子区域码C2b;接着在程序行240~247之间处理将T(10000+JDF)中数据送到装置DEV2,其中程序行240~243处理子区域码C2a,列244~247处理子区域码C2b。在处理过程中不会储存或送出位于T(IDF+1)到T(IDF+JDF)之间的存储地址,亦即达到跳码的作用。此方式比较适合于整体性处理大型数组数据的情况,例如数字相机等等。
第13C图则是另一种修正原始码的方式,其修正的方式是利用DO循环和条件判断来处理所有有关于此数据区的读取和写入动作。程序行300~301分别宣告常数IDF和JDF,其意义与第13B图中相同。在程序行310中,宣告具有10000+JDF个存储地址的数组T,其包括原来数组长度以及插入其中的预定跳码地址范围Ki的长度。在主程序中(程序行320至350之间),程序行330~336是处理从装置DEV1传送数据到数组T。在程序行330上建立DO循环,处理所有数组T的项。接着程序行332判断目前指针I是在子区域码C2a或子区域码C2b。如果是在子区域码C2a,则指针K即等于I;如果是在子区域码C2b,则指针K等于I+JDF。程序行335则利用指针K来描述装置DEV1所要传送数据的地址。另外,程序行340~346是处理从数组T传送数据到装置DEV2。同样地利用相同方式处理,但是在程序行345是利用指针K来描述数组T中那一个地址的数据传送到装置DEV2。由于在处理过程中不会储存或送出在T(IDF+1)到T(IDF+JDF)之间存储地址的数据,也可以达到跳码的作用。实际上,程序行332~334以及程序行342~344之中的判断步骤,可以加到所有需要存取到数组T的程序行前方,以决定出K值(其代表在数组T的真正位置)。换言之,第13C图中的原始码改法更具弹性,不仅可以适用于整个数组的处理情况,也可以针对个别位置也可以处理。
根据本实施例,可以从对应于不同缺陷分布类型的预编目的码中,选择出适当的预编目的码,直接加载内存IC,让有缺陷的内存IC仍然能够储存可执行的程序代码。另外,本实施例亦可适用于将程序代码至少部份设定于ROM中,而将数据区码置于RAM(例如快擦写存储器、电可擦可编程只读存储器EEPROM等等)。此时,在第13B、13C图中的参考IDF和JDF则可设定为在该RAM中内存地址的内容,以便依据该数据区缺陷内存地址,而更改IDF和JDF的内容。
第二实施例
在第一实施例的应用环境中,是利用一加载系统对于外部内存IC写入可执行的目的码,但是其中利用各种预编目的码来配合对应缺陷分布类型的处理方式,也可以适用于其它写入内存IC的应用上。
第14图表示本发明第二实施例中局部缺陷内存处理系统的配置图。在第14图所示的配置中,是由独立系统21自行加载程序代码至内部的待加载内存4中,此独立系统21可以是单芯片计算机、微电脑系统或是微控制器,而其中的待加载内存4可以是RAM或是其它非易失存储器(non-volatile memory)。独立系统21中的ROM 5可以储存如第4图所示流程的程序代码,CPU 1则执行此程序代码,外部的储存媒体9则储存着预先编译好的各种预编目的码。CPU 1对于待加载内存4进行测试,找出其缺陷分布类型,再由储存媒体9中比对适当的预编目的码,便可以加载到待加载内存4中。除了在测试缺陷时可以采用本身的CPU进行处理外,其它基本处理流程与第一实施例相同。借此,本发明不仅可以适用于单独内存IC的缺陷处理,也可以适用于单芯片计算机或微控制器等子系统中的内存缺陷处理。
第三实施例
在第一实施例的第4图处理流程中,在步骤S3需要传递缺陷分布类型或缺陷地址到加载系统20中。然而在实际执行上,如果加载系统20与外部内存IC 30之间需要进行通讯,这意味着在两者间必须建立通讯协议,同时需要测试器32或其它装置执行此一通讯动作,这样不仅使得整个目的码加载配置变得较复杂,同时在程序加载时也需要配置测试器或其它装置来协助处理。因此本实施例即针对此一问题提出更适合于生产线上的解决方案。
第15图表示本发明第三实施例中局部缺陷内存处理系统的配置图,其方块配置基本上与第一实施例相同,除了在外部内存IC 31中包含一卷标内存(TAG)31a。此卷标内存31a可以是外部内存IC中特别植入的内存部分,或是其中特定的位置(例如开始部分)。当测试器32对外部内存IC 31进行测试时,可以将缺陷分布类型或是缺陷地址记录于卷标内存31a上,其中缺陷分布类型可以由实际测出的缺陷地址加以判断。当测试器32完成整批内存IC的测试后,送到加载系统20进行码加载处理。因此,加载系统20可以直接读出卷标内存31a中所储存的缺陷分布类型或是缺陷地址。通过此方式,在程序代码加载时,测试器32或其它装置不需要负责缺陷讯息的传送动作,因此更适合于生产线上的应用。
第16图表示本发明第三实施例的局部缺陷内存处理方法的流程图,基本上与第一实施例大致相同,除了以步骤S0取代步骤S2,以步骤S3’取代步骤S3。在步骤S0中,测试器除了测试内存IC的缺陷外,还需要将结果记录于卷标内存中;在步骤S3’中,加载系统中的CPU可以直接读取卷标存储中的缺陷分布类型,不需要再通过通讯协议来取得缺陷讯息。利用此方式,本发明的缺陷内存IC处理方式更适合于产业上的利用,同时不会增加成本。
如前所述,卷标内存可以直接以内存IC的内部存储器来实现,例如置于开始部分。在此情况中,可以让编译器产生预编目的码时,即在开始部分预留一段不使用的地址,例如4个字节,即可以达到此目的。或者是以特定码作为卷标码的开始和结束数据,例如开始数据可以设定为55,结束数据可以为AA等等。利用此方式,更可以确定该内存IC中是否含有卷标码信息。另外,本实施例中虽然是以内存IC内部的卷标内存来达到自动化的目的,但是利用其它标记方式也可以到相同的效果,仍不脱离本发明的范围。
第四实施例
在第一实施例的第4图处理流程中,在步骤S6会针对目前预编目的码无法支持的缺陷分布类型,现场编译出对应的目的码。不过如要利用类似第9图所示的方式,利用扫描标准目的码(即预编目的码OBJ0),用来决定出可分断点,及产生对应目的码,在现场处理效率上可能较低。本实施例中则提出一种适合于现场编译目的码的处理方式。
第17图表示本发明第四实施例中适用于现场编译的动态预编目的码格式以及其修正格式的示意图。如图所示,符号90表示适用于现场编译的动态预编目的码格式。动态预编目的码90中包含数个可分断的区域码C10~C14,各区域码之间则插入跳码区域码J1~J5,每个跳码区域码的长度可以很短,而且可以用来连接被分断的各区域码C10~C14。举例来说,每个区域码C10~C14的长度可以设为大约100个字节,每个跳码区域码J1~J5则固定为5个字节。以8086汇编语言为例,这些跳码区域码J1~J5中的指令可以表示为:
EB 03          JMP $+5
90              NOP
90          NOP
90          NOP
这些跳码区域码J1~J5中NOP指令部分即对应于上述的跳码地址范围,可以用来预留缺陷位置的跳码空间,换言之,每个跳码区域码至少可以处理连续3个字节以下的缺陷地址(即NOP指令的位置)。另外,上述跳码区域码J1~J5中NOP指令部分亦可以至少部分换为地址相关信息,以显示一个或多个邻近的可分断点的码地址。
在第17图中,符号96表示待加载内存IC,其中符号97表示缺陷地址。如图所示,缺陷地址97是位于区域码C13中。符号92和94分别表示两种产生对应目的码的方式。目的码92是将区域码C13首尾两个跳码区域码J3和J4组合成一个新的跳码区域码J34,其中的NOP指令部分(共有8个)可以用来涵盖缺陷地址97。另外,原来的区域码C13则分割成子区域码C13a和C13b。必须说明的是,子区域码C13a和子区域码C13b之间的分断点,可以自该最接近的上一个可分断点扫描原来的区域码C13来决定,如此可以大幅简化处理的流程。再加上部分被影响到的参考地址修正处理,即可完成一对应目的码。
另外,如果缺陷地址97的长度很小而且区域码C13中分断点地址适当时,也可以单独使用一个跳码区域码来涵盖缺陷地址97,如第17图中的目的码94。在目的码94中,是将原来的跳码区域码J4移动到区域码C13中的可分断点,即成为跳码区域码J4’,而区域码C13亦以一可分断点被分割成子区域码C13c和子区域码C13d。再加上部分被影响到的参考地址修正处理,即可完成一对应目的码。
基本上,利用动态预编目的码90的格式来现场产生可执行目的码,只需要作小幅度的码移动和相关参考地址修正即可达成。举例来说,在目的码92中,等效上是将子区域码C13a向上移动5个字节,将子区域码C13b向下移动5个字节;在目的码94中,等效上是将子区域码C13d向下移动5个字节,而子区域码C13c则不移动。对于更长的缺陷地址,则可以移动更多的跳码区域码来涵盖其范围。借此,可以通过较小幅度的修改来达到产生对应目的码的效果。事实上,第17图的动态预编目的码90的格式,非常适合处理多量但长度很短的缺陷地址情况。如第17图所示,移动跳码区域码J1或J2的位置可以盖住缺陷地址98,移动跳码区域码J5的位置可以盖住缺陷地址99。通常这种情况中,内存IC中缺陷内存的总数量并不大,但是由于分布过于分散,因此可能无法找到对应的预编目的码,而通过修改动态预编目的码90,便可以很快地产生可以确实地储存于这种缺陷分布条件下的内存IC中。
第五实施例
在第一实施例中,每个跳码地址范围包含约(≥)2X个地址,而各跳码地址范围之间则具有约(≥)X个地址重叠,这种跳码地址范围分割方式是根据一般性的通则而定。事实上,内存IC由于本身具有特定的配置,所以通常缺陷本身也会呈现特定的型态,一般内存IC的内存单元配置可以参考Betty Prince,”Semiconductor Memories”一书,此处不再赘述,仅就其与缺陷型态有关部分进行说明。一般内存IC(例如DRAM)是由呈数组排列的多个内存单元所构成,而每个内存单元则置于垂直相交的位线(bit line)和字符线(word line)的交会点上。利用字符线来选择同一列上的所有内存单元,再利用位线读出或写入数据。假设晶圆上出现缺陷的位置是在某个字符线上(例如呈开路或与相邻字符线短路),实际上会造成这条字符线上所有内存单元均无法正常动作。如果从整颗内存IC的角度来看,会侦测出连续的缺陷地址,长度为一条字符线所连接内存元对应的位组长度的整数倍。举例来说,如果一条字符线连接256个内存单元,也就是32个字节,所以一种可能发生的缺陷分布类型即为连续32个字节的缺陷地址,或是其整数倍,例如64或96个字节。以下称这种由于字符线缺陷所造成的缺陷分布为”字符线错误”。
由于字符线错误所造成的缺陷地址范围是每条字符线对应位数的整数倍,所以在跳码地址范围的配置上可以根据此特性加以调整。第18图表示在本实施例中对应于字符线错误所设计的预编目的码的示意图。如图所示,各预编目的码OBJ_w1~OBJ_wn中的跳码地址范围K1~Kn,基本上是依循序方式配置至少W个字节的地址空间,其中W表示此内存IC中,每条字符线所连接内存单元(位)对应的位组长度的整数倍。但是受限于程序代码中分断点的位置,实际上每个预编目的码OBJ_w1~OBJ_wn的长度会略大于W个字节。另外,被分断的程序代码之间可以利用JUMP加以连接,基本上与第一实施例中描述相同,此处不再赘述。借此,可以更容易找到匹配实际缺陷分布类型的预编目的码。
除了上述的字符线错误外,内存IC中还有另一种可能发生的缺陷型态,即”位线错误”。与字符线错误一样,位线错误会造成所有连接于此位线的内存单元都无法正常工作。不同的是,连接于同一位线上的内存单元,并不是处于连续地址的字节上。如果以上述的例子来说,一个位线错误所造成的缺陷分布类型,会在每隔32个位发生一次,不是局限于单一地址范围内。换言之,要在第一实施例或是本实施例中针对字符线所设计的预编目的码中找出匹配者,几乎不太可能,因此有必要特别针对此一特定缺陷形态准备对应的预编目的码。
第19图表示在本实施例中对应于位线错误所设计的预编目的码的示意图。如图所示,在预编目的码OBJ_b1~OBJ_bn中,会以每隔32个字节的方式配置不连续的跳码地址范围,其中P00~P03分别代表连续的页(page)地址,长度为32个字节。在每一页地址范围内,配置于各预编目的码OBJ_b1~OBJ_bn跳码地址范围会以部分重叠的方式涵盖所有可以的位线错误。借此,可以更容易找到匹配实际缺陷分布类型的预编目的码。
第六实施例
在第一实施例中,预编目的码OBJ0~OBJn的产生是参考预先设定的跳码地址范围#i,再修正未编译原始码(参考第6图)或修正标准目的码(参考第7图),以便产生所需要的预编目的码。在本实施例中则再揭露另一种可行的产生方式,其特征在于不需要预先设定跳码地址范围,而是从具有各种跳码地址范围的目的码中选择出适当的部分,再建立对应的跳码地址范围表。
第20图表示本发明第六实施例中的预编目的码产生方法的流程图。首先在步骤S41,提供一未编译原始码。接着在步骤S42中,可以选择性地重排(shuffle)此原始码,这可以让由此原始码所产生的目的码可以随机地调整。接着在步骤S43中,在原始码中插入特定样式的伪码,所插入的特定样式伪码在经过后续编译处理后的机器码,呈现可供辨识的型态;也就是说,可以决定出此伪码所编译的机器码在目的码中的地址。举例来说,可以在两个指令行之间,插入具有特定初始值的数组(如重复00 09),或是插入特定的指令行。在插入数据的情况中,由于后续编译器可以自动连接被分割的程序代码,因此不需要加入跳跃指令(JMP);如果是插入指令行的情况,则必须在插入指令行的最前面加上跳跃指令来连接被分割的程序代码。
接着在步骤S44中,则对插入此伪码的原始码进行编译和连结,产生对应的中段目的码。由于其中的伪码也会被一并进行编译,因此可以在步骤S45中,据此辨识出此中段目的码的跳码地址范围,也就是伪码对应机器码的地址范围。接着在步骤S46中,则判断是否产生下一个中段目的码,如果有,则重复步骤S42到S45之间的处理,产生新的中段目的码。最后,可以获得许多中段目的码和其中所包含的跳码地址范围。根据这些辨识出的跳码地址范围,在步骤S47中便可以选择出适合的预编目的码,并且建立其跳码地址范围表,其类似于第一实施例第5图中所示的情况。
本发明虽以较佳实施例揭露如上,然其并非用以限定本发明,任何熟习此项技艺者,在不脱离本发明的精神和范围内,当可做些许的更动与润饰,因此本发明的保护范围当视后附的权利要求保护范围为准。

Claims (40)

1.一种内存的处理方法,用以加载一可执行目的码至上述内存,其特征是:该方法包括下列步骤:
设置多个预编目的码,分别具有至少一跳码地址范围;
侦测上述内存的缺陷地址;
根据侦测所得的结果,由上述预编目的码中选择具有与其匹配的跳码地址范围的可执行目的码;以及
加载上述可执行目的码至上述内存中以供执行。
2.如权利要求1所述的内存的处理方法,其特征是:该侦测步骤中包含测试上述内存的缺陷地址。
3.如权利要求2所述的内存的处理方法,其特征是:该方法还包括下列步骤:
写入测试所得的上述缺陷地址于上述内存中的一卷标内存。
4.如权利要求1所述的内存的处理方法,其特征是:上述内存包含一卷标内存;上述卷标内存储存上述内存的缺陷内存相关信息;上述侦测方法包括由上述卷标内存读出上述缺陷地址。
5.如权利要求4所述的内存的处理方法,其特征是:上述缺陷内存相关信息包括上述缺陷内存的地址相关信息。
6.如权利要求4所述的内存的处理方法,其特征是:上述缺陷内存相关信息包括上述缺陷内存的分布类型相关信息。
7.如权利要求1所述的内存的处理方法,其特征是:该方法还包括下列步骤:
判断侦测所得的上述缺陷地址所对应的缺陷分布类型;
写入上述缺陷分布类型于上述内存中的一卷标内存;以及
由上述卷标内存读出上述缺陷分布类型。
8.如权利要求1所述的内存的处理方法,其特征是:该方法还包括下列步骤:
设置对应于上述原始码的标准目的码;以及
当上述内存不包含缺陷地址时,加载上述标准目的码至上述内存。
9.如权利要求1所述的内存的处理方法,其特征是:该方法还包括一步骤:设置一跳码地址表,用以表示上述预编目的码及其对应的跳码地址范围;在上述选择步骤中,是根据上述跳码地址表决定上述可执行目的码。
10.如权利要求1所述的内存的处理方法,其特征是:上述预编目的码中相邻跳码地址范围之间具有一重叠区域,其长度大约为上述跳码地址范围的一半。
11.如权利要求1所述的内存的处理方法,其特征是:上述预编目的码的跳码地址范围是根据上述内存的一字符线上内存单元所对应的地址范围而设置。
12.如权利要求1所述的内存的处理方法,其特征是:上述预编目的码的跳码地址范围是根据上述内存的一位线上内存单元所对应的地址范围而设置。
13.如权利要求1所述的内存的处理方法,其特征是:产生上述预编目的码的步骤包括:
根据上述跳码地址范围,修改一原始码;以及
编译修改的上述原始码,产生上述预编目的码。
14.如权利要求1所述的内存的处理方法,其特征是:产生上述预编目的码的步骤包括:
产生一标准目的码;以及
根据上述跳码地址范围,修改上述标准目的码,产生上述预编目的码。
15.如权利要求14所述的内存的处理方法,其特征是:上述标准目的码是由一原始码编译而得。
16.如权利要求14所述的内存的处理方法,其特征是:修改上述标准目的码的步骤包括下列步骤:
根据上述跳码地址范围,决定上述标准目的码的第一分断点和第二分断点;
移动上述第一分断点和上述第二分断点之间的区段程序代码,至第一地址和第二地址之间;
连接移动后的上述区段程序代码与上述标准目的码中未移动部分的执行顺序;以及
修正上述区段程序代码与上述标准目的码中未移动部分之间的参考地址。
17.如权利要求16所述的内存的处理方法,其特征是:该方法还包括下列步骤:
扫描上述原始程序代码,决定上述标准目的码的多个分断点。
18.如权利要求14所述的内存的处理方法,其特征是:上述标准目的码包含至少一数据区。
19.如权利要求18所述的内存的处理方法,其特征是:更产生多个标准目的码,其中上述数据区是配置于不同地址;在修改上述标准目的码的步骤中,是修改上述跳码地址范围不在该数据区的标准目的码。
20.如权利要求18所述的内存的处理方法,其特征是:该方法还包括一步骤:当上述跳码地址范围置于上述标准目的码的数据区时,则分割上述数据区。
21.如权利要求20所述的内存的处理方法,其特征是:分割上述数据区的步骤中,是扩充上述数据区为一扩充数据区以包含上述跳码地址范围,并且对于每一存取上述数据区的指令,加入一判断指令,借以决定在上述扩充数据区的实际位置。
22.如权利要求1所述的内存的处理方法,其特征是:产生上述预编目的码的步骤包括:
提供一原始码;
分别插入至少一跳码于上述原始码中;
分别编译插入跳码后的原始码,产生多个中段目的码;
分别辨识上述中段目的码的跳码地址范围;以及
根据上述中段目的码的跳码地址范围,由上述中段目的码中选择出所需的多个预编目的码。
23.如权利要求22所述的内存的处理方法,其特征是:上述跳码包含伪码。
24.如权利要求22所述的内存的处理方法,其特征是:上述跳码包含可辨识的伪码;并且上述处理方法是根据上述可辨识的伪码,分别辨识上述中段目的码的跳码地址范围。
25.如权利要求22所述的内存的处理方法,其特征是:该方法还包括一步骤:对上述原始码进行码重排(code shuffle)处理,用以产生部分的上述中段目的码。
26.如权利要求22所述的内存的处理方法,其特征是:在插入具有可辨识样式的伪码的步骤中,同时插入跳跃指令用以连接上述原始码中被插入的程序代码顺序。
27.如权利要求22所述的内存的处理方法,其特征是:该方法还包括一步骤:
根据所选择的多个预编目的码,产生一跳码地址范围表。
28.如权利要求1所述的内存的处理方法,其特征是:该方法还包括一步骤:当上述预编目的码的跳码地址范围不匹配上述缺陷地址,则根据上述缺陷地址,产生另一可执行目的码。
29.如权利要求28所述的内存的处理方法,其特征是:产生上述另一可执行目的码的步骤包括:
根据上述缺陷地址,修改一原始码;以及
编译修改的上述原始码,产生上述可执行目的码。
30.如权利要求28所述的内存的处理方法,其特征是:产生上述另一可执行目的码的步骤包括:
编译一原始码,产生一标准目的码;以及
根据上述缺陷地址,修改上述标准目的码,产生上述可执行目的码。
31.如权利要求1所述的内存的处理方法,其特征是:该方法还包括一步骤:当上述预编目的码的跳码地址范围不匹配上述缺陷地址,则根据上述缺陷地址,修正一动态预编目的码产生上述可执行目的码,上述动态预编目的码中具有多个跳码区域码。
32.如权利要求31所述的内存的处理方法,其特征是:上述动态预编目的码中包含至少一分断地址相关信息。
33.一种内存的处理系统,用以加载一原始码所编译的可执行目的码至上述内存,其特征是:该处理系统包括:
一储存装置,用以至少储存对应于上述原始码的多个预编目的码,每一预编目的码分别具有至少一跳码地址范围;
一处理单元,用以根据上述内存的缺陷地址,由上述预编目的码中选择具有与其匹配的跳码地址范围的可执行目的码;以及
一界面电路,用以加载上述可执行目的码至上述内存。
34.如权利要求33所述的内存的处理系统,其特征是:上述储存装置还储存一跳码地址表,用以表示上述预编目的码及其对应的跳码地址范围;在上述处理单元是根据上述跳码地址表,由上述预编目的码中决定上述可执行目的码。
35.如权利要求33所述的内存的处理系统,其特征是:上述储存装置还储存对应于上述原始码的标准目的码;当上述内存不包含缺陷地址时,上述处理单元将上述标准目的码加载至上述内存。
36.如权利要求33所述的内存的处理系统,其特征是:该系统还包含一测试器,用以测试上述内存。
37.如权利要求36所述的内存的处理系统,其特征是:上述内存中包含一卷标内存,上述测试器将上述缺陷地址记录于上述卷标内存,上述处理单元由上述卷标内存读出上述缺陷地址。
38.一种内存的处理系统,用以加载一可执行目的码,其特征是:该处理系统包括:
一内存,置于一集成电路上;
一储存装置,用以至少储存对应于上述原始码的多个预编目的码,每一预编目的码分别具有至少一跳码地址范围;以及
一处理单元,置于上述集成电路上,用以测试上述内存的缺陷地址,并且由上述预编目的码中选择具有与其匹配的跳码地址范围的可执行目的码,加载上述内存。
39.如权利要求38所述的内存的处理系统,其特征是:上述储存装置还储存一跳码地址表,用以表示上述预编目的码及其对应的跳码地址范围;在上述处理单元是根据上述跳码地址表,由上述预编目的码中决定上述可执行目的码。
40.如权利要求38所述的内存的处理系统,其特征是:上述储存装置还储存对应于上述原始码的标准目的码;当上述内存不包含缺陷地址时,上述处理单元将上述标准目的码加载至上述内存。
CN 01110415 2001-04-03 2001-04-03 内存处理方法和处理系统 Expired - Fee Related CN1209707C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 01110415 CN1209707C (zh) 2001-04-03 2001-04-03 内存处理方法和处理系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 01110415 CN1209707C (zh) 2001-04-03 2001-04-03 内存处理方法和处理系统

Publications (2)

Publication Number Publication Date
CN1378140A true CN1378140A (zh) 2002-11-06
CN1209707C CN1209707C (zh) 2005-07-06

Family

ID=4658582

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 01110415 Expired - Fee Related CN1209707C (zh) 2001-04-03 2001-04-03 内存处理方法和处理系统

Country Status (1)

Country Link
CN (1) CN1209707C (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101526912A (zh) * 2008-03-04 2009-09-09 英业达股份有限公司 内存干扰测试的系统与方法
CN103077011A (zh) * 2012-10-09 2013-05-01 华为技术有限公司 一种在JavaScript脚本语言中预生成机器码指令的方法和装置
CN103279424A (zh) * 2013-05-15 2013-09-04 建荣集成电路科技(珠海)有限公司 一种Nand Flash的坏列管理装置和方法
CN104077271A (zh) * 2013-03-27 2014-10-01 珠海全志科技股份有限公司 晶圆图数据的处理方法及系统
CN111624933A (zh) * 2019-02-28 2020-09-04 发那科株式会社 用于顺控程序的追踪的顺控程序处理装置

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101526912A (zh) * 2008-03-04 2009-09-09 英业达股份有限公司 内存干扰测试的系统与方法
CN103077011A (zh) * 2012-10-09 2013-05-01 华为技术有限公司 一种在JavaScript脚本语言中预生成机器码指令的方法和装置
CN103077011B (zh) * 2012-10-09 2015-12-09 华为技术有限公司 一种在JavaScript脚本语言中预生成机器码指令的方法和装置
CN104077271A (zh) * 2013-03-27 2014-10-01 珠海全志科技股份有限公司 晶圆图数据的处理方法及系统
CN103279424A (zh) * 2013-05-15 2013-09-04 建荣集成电路科技(珠海)有限公司 一种Nand Flash的坏列管理装置和方法
CN111624933A (zh) * 2019-02-28 2020-09-04 发那科株式会社 用于顺控程序的追踪的顺控程序处理装置
CN111624933B (zh) * 2019-02-28 2024-02-20 发那科株式会社 用于顺控程序的追踪的顺控程序处理装置

Also Published As

Publication number Publication date
CN1209707C (zh) 2005-07-06

Similar Documents

Publication Publication Date Title
US8566372B2 (en) Method and device for dynamically loading relocatable file
CN101937340B (zh) 使用补丁对软件进行动态升级与控制的方法和装置
CN1324467C (zh) 基于标记的链接
US6879528B2 (en) Control method of nonvolatile memory
EP0591360A1 (en) Method and apparatus for modifying relocatable object code files and monitoring programs
JP2005032259A (ja) 共有ライブラリーシステム及び前記システム構築方法
CN1677571A (zh) 非易失性存储设备
CN1409323A (zh) 用于存储存储器测试信息的方法和装置
US6829722B2 (en) System and method of processing memory
TW408264B (en) System and method for loading executable program into partly damaged memory chip
CN1209707C (zh) 内存处理方法和处理系统
US6141768A (en) Self-corrective memory system and method
CN1525323A (zh) 处理器以及用于产生在处理器中使用的程序的编译器
JP2011028648A (ja) オブジェクトコード生成システム、及びオブジェクトコード生成方法
CN1295778C (zh) 一种验证芯片硬件行为与软件模拟行为的一致性的方法
CN1489766A (zh) 分析和修复存储器的方法和装置
AU638999B2 (en) Incremental compiler for source-code development system
CN1168005C (zh) 局部缺陷内存的处理方法和系统
US6370655B1 (en) Method and system for reversed-sequence code loading into partially defective memory
CN116450159A (zh) 多核dsp芯片ft-m6678的boot优化方法
CN1231840C (zh) 编译程序器和用来在存储区域内确定数据的存储单元的方法
US6691246B1 (en) System and method of processing partially defective memories
CN1400527A (zh) 改写引导程序的无线电通讯设备、方法和程序
JP4687720B2 (ja) メモリコントローラ、メモリコントローラを備えるフラッシュメモリシステム、並びにフラッシュメモリの制御方法
JP2001117766A (ja) マスクromのパッチ機能を備えた情報処理装置

Legal Events

Date Code Title Description
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C06 Publication
PB01 Publication
C14 Grant of patent or utility model
GR01 Patent grant
C17 Cessation of patent right
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20050706