微处理器及其所适用的初始化方法转让专利

申请号 : CN201010243782.3

文献号 : CN101930386B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : G·葛兰·亨利弟尼斯·K·詹

申请人 : 威盛电子股份有限公司

摘要 :

一种微处理器及其所适用的初始化方法。该微处理器包括:多个第一保险丝,根据多个控制值被选择性地熔断;多个第二保险丝,根据计算自上述控制值的错误修正值被选择性地一并熔断;控制硬件,接收控制值并将控制值提供至微处理器的电路以控制微处理器的运作;和状态机,序列地耦接至控制硬件、第一保险丝、和第二保险丝,将控制值自第一保险丝序列地扫描至控制硬件、并将控制值与错误修正值序列地扫描至第一缓存器。微处理器执行以下步骤:自第一缓存器读取控制值与错误修正值;使用错误修正值侦测并修正控制值中的错误;将修正的控制值写入第二缓存器;以及使状态机将修正的上述控制值自第二缓存器序列地扫描至控制硬件。

权利要求 :

1.一种微处理器,包括:

多个第一保险丝,根据多个控制值被选择性地熔断;

多个第二保险丝,根据基于上述控制值通过错误侦测与修正算法计算的一错误修正值被选择性地一并熔断;

一控制硬件,用以接收上述控制值并将上述控制值提供至上述微处理器的电路以控制上述微处理器的运作;以及一状态机,序列地耦接至上述控制硬件、上述多个第一保险丝、以及多个第二保险丝,用将上述控制值自上述多个第一保险丝序列地扫描至上述控制硬件、并将上述控制值与上述错误修正值序列地扫描至一第一缓存器,其中上述微处理器用以执行以下步骤:

自上述第一缓存器读取上述控制值与上述错误修正值;

使用上述错误修正值通过所述错误侦测与修正算法侦测并修正上述控制值中的一错误;

将修正的上述控制值写入一第二缓存器;以及

使上述状态机将修正的上述控制值自上述第二缓存器序列地扫描至上述控制硬件,其中第一缓存器是微码可读取的缓存器,而第二缓存器是微码可写入的缓存器。

2.如权利要求1所述的微处理器,其中上述状态机用以响应上述微处理器的一重设而将上述控制值自上述第一保险丝序列地扫描至上述控制硬件。

3.如权利要求1所述的微处理器,更包括:

一微码单元,用以执行上述读取步骤、上述侦测并修正步骤、上述写入步骤、以及上述使状态机将修正的上述控制值自上述第二缓存器序列地扫描至上述控制硬件的步骤,其中上述微码单元更用以使上述状态机将上述控制值与上述错误修正值序列地扫描至上述第一缓存器,其中上述微码单元包括由耦接至上述第一缓存器与上述第二缓存器的多个执行单元所执行的多个指令。

4.如权利要求1所述的微处理器,其中上述控制值的一部分包括多个地址信息,该地址信息用以针对上述控制值的每个数据信息向上述状态机指定上述控制硬件的一目的缓存器。

5.如权利要求1所述的微处理器,其中上述微处理器用以于无法使用上述错误修正值将上述控制值中的上述错误进行修正时,避免提取和执行使用者程序指令。

6.如权利要求1所述的微处理器,其中上述微处理器用以在无法使用上述错误修正值将上述控制值中的上述错误进行修正时,产生软件可读取的一错误状态值。

7.如权利要求1所述的微处理器,其中上述第一缓存器与上述第二缓存器是序列地耦接至上述状态机。

8.一种初始化方法,适用于初始化一微处理器,包括:

将多个控制值自多个第一保险丝序列地扫描至上述微处理器的电路以控制上述微处理器的运作,其中上述第一保险丝根据上述控制值被选择性地熔断;

将上述控制值与错误修正值分别自上述多个第一保险丝与多个第二保险丝序列地扫描至一第一缓存器,其中上述多个第二保险丝是根据计算自上述控制值的上述错误修正值被选择性地一并熔断;

自上述第一缓存器读取上述控制值与上述错误修正值;

使用上述错误修正值侦测并修正上述控制值中的一错误;

将修正的上述控制值写入一第二缓存器;以及

使修正的上述控制值从上述第二缓存器序列地扫描至一控制硬件。

9.如权利要求8所述的初始化方法,其中上述将多个控制值自多个第一保险丝序列地扫描至上述微处理器的电路的步骤是响应上述微处理器的一重设而执行。

10.如权利要求8所述的初始化方法,其中上述读取步骤、上述侦测并修正的步骤、上述写入步骤、以及上述使修正的上述控制值从上述第二缓存器序列地扫描至上述控制硬件的步骤是由上述微处理器的一微码单元所执行,其中上述微码单元用以发起将上述控制值与上述错误修正值分别自上述第一保险丝与上述第二保险丝序列地扫描至上述第一缓存器的步骤,其中上述微码单元包括由耦接至上述第一缓存器与上述第二缓存器的多个执行单元所执行的多个指令。

11.如权利要求8所述的初始化方法,其中上述控制值的一部分包括多个地址信息,该地址信息用以针对上述控制值的每个数据信息指定一目的缓存器。

12.如权利要求8所述的初始化方法,更包括:

于上述微处理器无法使用上述错误修正值修正上述控制值中的上述错误时,避免上述微处理器提取和执行使用者程序指令。

13.如权利要求8所述的初始化方法,更包括:

于上述微处理器无法使用上述错误修正值修正上述控制值中的上述错误时,产生软件可读取的一错误状态值。

14.如权利要求8所述的初始化方法,其中上述使修正的上述控制值从上述第二缓存器被序列地扫描至上述控制硬件的步骤是执行于上述微处理器提取并执行使用者程序指令之前。

说明书 :

微处理器及其所适用的初始化方法

技术领域

[0001] 本发明主要涉及微处理器的技术领域,特别是关于微处理器中的保险丝使用技术。

背景技术

[0002] 当代的微处理器中所包含的保险丝是可于微处理器的制造过程中被选择性地烧熔,且保险丝可根据读取自其中的控制值而被选择性地烧熔以控制微处理器的运作。通常而言,当非熔断保险丝被读取时会回传二进制0(binary zero),而当熔断保险丝被读取时则会回传二进制1(binary one)(或者可反向设定)。然而,本发明的发明人观察到该领域的微处理器所具有的熔断保险丝却会改变其值,也就是说,熔断保险丝会不正确地回传二进制0,即便其于微处理器的测试阶段中会正确地回传二进制1,这种情况被称为保险丝重长(re-growing)或保险丝再生长(re-growth),意即熔断保险丝在微处理器的持续运作过程中可被实质地改变,使其于被读取时回传非熔断值而不是回传熔断值。保险丝再生长则视其值会对微处理器的后续运作造成灾难性的结果,此外,由保险丝再生长所引起的问题亦很难在失败分析中被侦测出来。
[0003] 美国专利申请案12/609,207叙述针对此问题提出一种使用了错误侦测与修正(Error Detection And Correction,EDAC)的保险丝的解决方案,此解决方案中的保险丝是可修正的,也就是大部分的保险丝是设置于由微码所写入的控制硬件中,具体而言,该微码从保险丝读取数值、在需要时使用错误侦测与修正的保险丝去修改该数值、然后将修正后的数值写入硬件(例如:特定模块缓存器(Model Specific Register,MSR)、特征控制缓存器(Feature Control Register,FCR)、修补硬件(patch hardware)等)。然而,仍有些保险丝是无法由微码所修正的,意即,当芯片启动时,不可修正的保险丝中的数值被直接扫描(scan)至硬件缓存器,而未经过微码使用错误侦测与修正技术去修正该数值。举例来说,不可修正的保险丝有高速缓存修正保险丝、以及锁相回路(Phase Lock Loop,PLL)校正保险丝。在微处理器的一实施例中,微码无法读取不可修正的保险丝。
[0004] 因此,亟需一种方法可以决定不可修正的保险丝是否发生了保险丝再生长状况。

发明内容

[0005] 本发明的一实施例提供了一种微处理器,包括多个第一保险丝、多个第二保险丝、一控制硬件、以及一状态机。上述第一保险丝根据多个控制值被选择性地熔断。上述第二保险丝根据计算自上述控制值的一错误修正值被选择性地一并熔断。上述控制硬件用以接收上述控制值并将上述控制值提供至上述微处理器的电路以控制上述微处理器的运作。上述状态机序列地耦接至上述控制硬件、上述第一保险丝、以及第二保险丝,用将上述控制值自上述第一保险丝序列地扫描至上述控制硬件、并将上述控制值与上述错误修正值序列地扫描至一第一缓存器。其中上述微处理器用以执行以下步骤:自上述第一缓存器读取上述控制值与上述错误修正值;使用上述错误修正值侦测并修正上述控制值中的一错误;将修正的上述控制值写入一第二缓存器;以及使上述状态机将修正的上述控制值自上述第二缓存器序列地扫描至上述控制硬件。
[0006] 本发明的另一实施例提供了一种初始化方法,适用于初始化一微处理器。上述初始化方法包括以下步骤:将多个控制值自多个第一保险丝序列地扫描至上述微处理器的电路以控制上述微处理器的运作,其中上述第一保险丝根据上述控制值被选择性地熔断;将上述控制值与上述错误修正值分别自上述第一保险丝与多个第二保险丝序列地扫描至一第一缓存器,其中上述第二保险丝根据计算自上述控制值的上述错误修正值被选择性地一并熔断;自上述第一缓存器读取上述控制值与上述错误修正值;使用上述错误修正值侦测并修正上述控制值中的一错误;将修正的上述控制值写入一第二缓存器;以及使修正的上述控制值从上述第二缓存器被序列地扫描至一控制硬件。

附图说明

[0007] 图1是根据本发明所述的微处理器的示意图。
[0008] 图2是根据本发明所述制造图1的微处理器100的运作流程图。
[0009] 图3是显示图1的微处理器100的运作流程图。
[0010] 图4是根据本发明另一实施例所述的微处理器100的示意图。
[0011] 图5是显示制造图4的微处理器100的运作流程图。
[0012] 图6是显示图4的微处理器100的运作流程图。
[0013] 图7是根据本发明另一实施例所述的微处理器100的示意图。
[0014] 图8是显示制造图7的微处理器100的运作流程图。
[0015] 图9是显示图7的微处理器100的运作流程图。
[0016] 图10是显示图7的微处理器100执行特定模块缓存器写入指令的运作流程图。
[0017] 图11是显示图7的微处理器100执行特定模块缓存器读取指令的运作流程图。
[0018] 图12是根据本发明另一实施例所述的微处理器100的示意图。
[0019] 图13是根据本发明所述制造图12的微处理器100的运作流程图。
[0020] 图14是显示图12的微处理器100的运作流程图。
[0021] 【主要组件符号说明】
[0022] 100~微处理器;
[0023] 102~指令高速缓存;
[0024] 104~指令转译器;
[0025] 106~指令配送器;
[0026] 108~指令译码器;
[0027] 114~执行单元;
[0028] 116~微码单元;
[0029] 118、158~修正数据保险丝数值;
[0030] 122~重设微码;
[0031] 124、198~控制硬件;
[0032] 126、166~数据保险丝数值;
[0033] 128、168~错误侦测与修正保险丝数值;
[0034] 132、193~错误侦测与修正保险丝;
[0035] 134~控制值;
[0036] 136~保险丝烧熔电压输入;
[0037] 144~暂存装置;
[0038] 152~可修正数据保险丝;
[0039] 164~控制值;
[0040] 172~保险丝;
[0041] 174~特定模块缓存器;
[0042] 181~重设时保险丝测试选项的保险丝数值;
[0043] 182、184、188~签章;
[0044] 183~修正签章值;
[0045] 185、186~签章补码;
[0046] 191~扫描缓存器;
[0047] 192~不可修正数据保险丝;
[0048] 194~计数数量;
[0049] 195~数据保险丝;
[0050] 196~微码可读取的缓存器;
[0051] 197~微码可写入的缓存器;
[0052] 199~状态机。

具体实施方式

[0053] 本发明的实施例是使微处理器的微码能够读取不可修正的保险丝。当微处理器的一部分在制造时,便决定了其中将被熔断的不可修正的保险丝数量,举例来说,假设一微处理器的某一部份有1000个不可修正的保险丝,而其中的147个将被熔断,接着,该熔断数量被当作签章(signature)熔断在可修正的保险丝的一集合中,该集合的保险丝可透过上述错误侦测与修正技术由微码所修正。当微处理器重设(reset)而执行重设微码时,微处理器读取所有不可修正的保险丝并计数其中被熔断的保险丝数量,然后比对计数的数量与读取自可修正的保险丝的上述签章(于可修正的保险丝在需要时进行修正之后)。若计数的数量不同于上述签章,则不允许该部份离开重设程序、或将此错误输出至一软件可读取的缓存器。
[0054] 图1是根据本发明所述的微处理器的示意图。微处理器100包括多个保险丝172,在一实施例中,保险丝172为多晶硅(polysilicon)保险丝,但其它保险丝技术,例如金属保险丝,亦可应用在本发明的实施例中。保险丝172虽然是实质相同的结构,但逻辑上则可分为两个群组,即错误侦测与修正保险丝132与数据保险丝,而数据保险丝又可再分为可修正数据保险丝152与不可修正数据保险丝192,某一特定的保险丝172是否被配置为数据保险丝或错误侦测与修正保险丝132是依据微处理器100的制造者(manufacturer)所使用的错误侦测与修正算法而定。
[0055] 保险丝172设定使微处理器100的制造者可于输入136提供规定电压(prescribed voltage)以选择性地去个别熔断保险丝172。在一实施例中,制造者透过联合测试行动小组(Joint Test Action Group,JTAG)扫描接口指定(specify)要熔断哪个保险丝172。在一实施例中,每个保险丝172的一面为接地、而另一面则连接至一主动(active)装置,例如:微处理器100可读取的一晶体管。因此,若一保险丝172为非熔断时,则具有传导性且可读取到一低电压(转换后则为二进制0);反之,若一保险丝172为已熔断时,则不具有传导性且可读取到一高电压(转换后则为二进制1)。在其它实施例中,可使用相反的二进制值转换法。
[0056] 虽然保险丝172可于制造过程中被个别熔断且每个保险丝172构成(constitute)了单一二进制数字(位),但逻辑上,可修正数据保险丝152则视为单一实体(entity)并具有被熔断的单一共同(collective)数值,而错误侦测与修正保险丝132则视为另一单一实体并具有被熔断的单一共同数值。制造者使用一错误侦测与修正算法去计算熔断至错误侦测与修正保险丝132的单一共同数值,该错误侦测与修正算法是将该单一共同数值熔断至可修正数据保险丝152作为其输入,相关步骤细节于后续作进一步描述。
[0057] 微处理器100亦包括控制硬件124,控制硬件124是用以接收并储存控制值134、以及将控制值134提供至微处理器100的电路以控制微处理器100的运作。控制硬件124可包括以下组件:用以修补微码的微码修补硬件;微处理器100的特征控制缓存器,用以使能或中止微处理器100的功能或功能单元、以及/或用以指示微处理器100具有哪些功能或功能单元,其中微处理器100的特征或功能单元可为浮点单元(Floating Point Unit,FPU)、矩阵数学扩展(Matrix Math eXtension,MMX)单元、单指令多数据流扩展(Streaming SIMD Extensions,SSE)单元、高速缓存与转译后备缓冲区(Translation Lookaside Buffer,TLB)、呼叫/返回(call/return)堆栈、随机数产生器、加密引擎、混合乘加(fused-multiply-add)指令功能、微码修补相关功能、虚拟机器扩展(Virtual Machine eXtension,VMX)、效能监控功能、处理器步进(stepping)与系列信息、预取(prefetch)功能、分支预测功能、分页查表(table-walking)相关的功能、以及功率管理功能;微处理器100的设定缓存器,用以控制微处理器100中的一个或多个时钟信号的频率、控制微处理器
100的电压电平、或其它。需注意的是,除了上述组件,本发明的控制硬件124可包括的组件并不在此限制。
[0058] 在传统的微处理器中,控制值是读取自保险丝并被写入控制硬件,而并没有错误侦测与修正的优点。如上所述,如果一熔断保险丝发生保险丝再生长的情形而具有传导性并被错误地读取为0而非1,则该传统的微处理器极有可能因为写入不正确的值到控制硬件而将无法正常运作。然而,本发明的微处理器100亦包括错误侦测与修正保险丝132可用以侦测读取自可修正数据保险丝152的一错误值,并修正该错误值从而使正确的数值能被写入控制硬件,其中该错误值是由一再生长的保险丝172所引起。
[0059] 微处理器100更包括指令高速缓存102,用以高速缓存由微处理器100所提取并执行的程序指令,该程序指令可包括诸如系统软件或应用程序等使用者程序指令。
[0060] 微处理器100还包括指令转译器104,用以自指令高速缓存102接收指令,并于指令为微处理器100的宏指令集的指令时,将该指令(亦可称为宏指令)转译成实际由微处理器100的执行单元114所执行的一个或多个微指令。然而,当指令为微处理器100的宏指令集的指令时,指令转译器104将控制移交(transfer)给微指令的微码序列,其中该微码序列系储存于微码单元116的微码只读存储器中。
[0061] 微码单元116的微码只读存储器亦储存重设微码122的微指令的序列。当微处理器100重设时,微码单元116开始提取并执行重设微码122的微指令,重设微码122执行各式运算以初始化微处理器100去准备开始提取并执行使用者程序指令。特别是,重设微码122根据控制值134编程(program)微处理器100的控制硬件124。微处理器100根据读取自保险丝172的数值产生控制值134,其中保险丝172于制造过程中熔断。然而,如上所述,保险丝172在被熔断后仍有可能发生再生长的情况而使其值从熔断值改变为未熔断值,微处理器100亦包括错误侦测与修正保险丝132,用以使能微处理器100以修正读取自可修正数据保险丝152的数值中的错误,以下将详细说明。用以指定不可修正数据保险丝192于制造过程中被熔断的数量的签章188是在可修正数据保险丝152被熔断时储存于可修正数据保险丝152中。有利地,重设微码122计数不可修正数据保险丝192中被熔断的保险丝数量,并比对计数数量与签章188或于制造过程中储存于可修正数据保险丝152中的被熔断的不可修正数据保险丝192数量。此一机制使重设微码122能够侦测到不可修正数据保险丝192中的再生长保险丝,后续将作详细说明。
[0062] 微处理器100亦包括指令配送器(dispatcher)106,用以自指令转译器104或微码单元116接收微指令,例如重设微码122的指令,并将微指令配送至执行单元114。执行单元114包括一或多个整数单元,该整数单元包括用以执行算术与逻辑运算的算术与逻辑单元,特别是,执行单元114包括用以针对输入操作数执行布尔异或(Boolean XOR)运算,其中重设微码122是使用布尔异或运算去执行错误侦测与修正算法以侦测并修正读取自保险丝172的数值的错误。此外,执行单元114更用以针对输入操作数执行算术运算,其中重设微码122是使用该算术运算去计数不可修正数据保险丝192中的熔断保险丝数量并比对计数的数量与储存于可修正数据保险丝152的签章188,以侦测不可修正数据保险丝192中发生的保险丝再生长错误。执行单元114亦执行指令以自控制硬件124读取数据与写入数据至控制硬件124。
[0063] 执行单元114更执行指令以自暂存装置144读取数据与写入数据至暂存装置144。在一实施例中,暂存装置144可为一随机存取存储器(Random Access Memory,RAM)。特别是,根据图3所示,重设微码122读取可修正数据保险丝152并将读取的数值写入暂存装置
144作为数据保险丝数值126、读取错误侦测与修正保险丝132并将读取的数值写入暂存装置144作为错误侦测与修正保险丝数值128、以及读取数据保险丝数值126与错误侦测与修正保险丝数值128以产生修正数据保险丝数值118,其中重设微码122将修正数据保险丝数值118写入暂存装置144并接着将之读取出来以供写入控制硬件124之用。修正数据保险丝数值118包括读取自可修正数据保险丝152的签章188的修正签章值183。最后,由重设微码122所计数的不可修正数据保险丝192中的熔断保险丝数量储存于暂存装置144,后续将作详细说明。
[0064] 在读取完保险丝172、于需要时修正完数据保险丝数值126、写入至控制硬件124、以及开始提取并执行使用者程序指令之后,微处理器100为响应使用者程序指令请求读取或写入控制硬件124,而读取或写入部分的控制硬件124。在一实施例中,使用者程序指令为x86架构的特定模块缓存器读取(ReaD from Model-Specific Register,RDMSR)指令、以及特定模块缓存器写入(Write to Model-Specific Register,WRMSR)指令。
[0065] 如上所述,可修正数据保险丝152与不可修正数据保险丝192之间的一差异为不可修正数据保险丝192的数值164是直接被提供至电路,而未经过重设微码122使用错误侦测与修正保险丝132去修正。关于不可修正数据保险丝192的使用包括以下步骤,但本发明不限于此。若微处理器100的制造者决定高速缓存存储器中的一行(column)位单元(bitcell)损坏时,他/她可将不可修正数据保险丝192中的一者熔断以使高速缓存存储器使用另一行冗余位单元而非使用损坏那一行位单元。高速缓存存储器可包括以下组件,但本发明不局限于此:一L1高速缓存数据阵列、一L2高速缓存卷标阵列、以及一分支目标地址高速缓存阵列。某些不可修正数据保险丝192控制以下设定:针对微处理器100的各式锁相回路的工作周期(duty cycle)或其它控制;电荷泵浦(charge pump)设定;锁相回路的时钟频率;输入/输出焊接点(input/output pad)的设定,包括允许多任务侦错的功能;选择时钟是否于微处理器100中被搬移以增加频率;避免保险丝失效时所用的冗余保险丝;仅用于制造过程中的辨识用途的保险丝;设定电压识别号码的接脚(pin);以及用以控制电压与时钟倍增器(multiplier)的总线选择(Bus SELect,BSEL)接脚。
[0066] 图2是根据本发明所述用以制造如图1所示的微处理器100的操作流程图。流程开始于方块201。
[0067] 于方块201,微处理器100的制造者决定签章188,意即不可修正数据保险丝192中将被熔断的保险丝数量。流程继续进行至方块202。
[0068] 于方块202,处理器100的制造者决定要熔断至可修正数据保险丝152中的控制值,每个可修正数据保险丝152构成单一位,该单一位的二进制值则依据对应的保险丝为熔断或非熔断而设为0或1。自每个可修正数据保险丝152所读取的位值不是被直接写入控制硬件124的一位、就是用以产生将被写入控制硬件124的一位的位值,可对照如图3的方块132与316所示。因此,于方块202,该制造者决定哪些保险丝172将配置为可修正数据保险丝152、哪些保险丝172将配置为错误侦测与修正保险丝132,将每个可修正数据保险丝152与控制硬件124的一位关联在一起,并决定想要熔断至可修正数据保险丝152的位值。举例来说,该制造者可决定用一特定的可修正数据保险丝152去储存用以选择性地开关一预设微码值,该预设微码值是控制微处理器100的一特定分支预测功能是否开启,该制造者亦可决定是否熔断该特定的可修正数据保险丝152以提供该位值去开关预设微码值。该制造者针对每个可修正数据保险丝152执行以上步骤。以产生熔断至错误侦测与修正保险丝132的位值的角度来看(请见以下方块204的叙述),虽然每个可修正数据保险丝152皆构成单一位,但全部的可修正数据保险丝152被视为单一实体并具有被熔断的单一共同数值、或被视为多个各自具有单一共同数值的字(word),以下将于方块204作进一步叙述。如此一来,单一共同数值于制造微处理器100之前以及制造完后运作之前就已预先设定。另外,该控制值包括于方块201中所决定且将于方块206被熔断至可修正数据保险丝152的签章188。流程继续进行至方块204。
[0069] 于方块204,制造者针对于方块202中所决定的控制值使用错误侦测与修正算法,以计算出欲熔断至错误侦测与修正保险丝132的错误侦测与修正值。在一实施例中,错误侦测与修正算法可为例如该领域熟知的单错修正双错侦测(Signel Error Correction Double Error Detection,SECDED)的(72,64)汉明码(Hamming code)算法;然而,本发明的其它实施例亦可使用其它的错误侦测与修正算法。以下将说明的是垂直码(vertical code)算法。
[0070] 在图3所示的实施例中,于方块306,图1的重设微码122以软件执行错误侦测与修正算法以读取保险丝172、以及侦测与修正其中的错误。因此,在此实施例中,制造者在方块204使用了垂直码算法以计算错误侦测与修正值,且重设微码122在方块306使用了垂直码算法。在一实施例中,被用作为可修正数据保险丝152与错误侦测与修正保险丝132的保险丝172被设置为58个记忆库(bank),每个记忆库具有64个保险丝,意即每个记忆库为64位宽。前50个记忆库在逻辑上是被配置为错误侦测与修正保险丝132的记忆库,因此,在逻辑上,方块202所决定的控制值为50个控制字,每个控制字为64位,且错误侦测与修正算法产生了8个错误侦测与修正字,每个错误侦测与修正字为64位。制造者针对50个控制字的位截片(bit slices)使用该错误侦测与修正算法,也就是说,制造者针对50个控制字的第0个位使用该错误侦测与修正算法以产生8个错误侦测与修正字的第0个位、针对50个控制字的第1个位使用该错误侦测与修正算法以产生8个错误侦测与修正字的第
1个位、以此类推(由于该错误侦测与修正算法假设有64个输入位以产生8个错误侦测与修正字符但总共仅有50个控制字,所以制造者假设“遗缺的(missing)”14个控制字中所有的位皆为0)。
[0071] 另外,如美国专利申请案12/609,207中的图4与图5所示,另一实施例则使用了水平码算法。在该另一实施例中,一硬件错误侦测与修正单元以硬件执行错误侦测与修正算法以读取被用作为可修正数据保险丝152与错误侦测与修正保险丝132的保险丝172,并侦测与修正其中的错误。因此,在此实施例中,制造商使用一水平码算法以计算错误侦测与修正值,且错误侦测与修正单元使用了该水平码算法。在一实施例中,可修正数据保险丝152与错误侦测与修正保险丝132被设置为50个记忆库,每个记忆库具有72个保险丝,意即每个记忆库为72位宽。在逻辑上,每个记忆库中的前64个位被配置为可修正数据保险丝15,因此,在上个段落所述的实施例中,方块202所决定的控制值在逻辑上而言为50个控制字,每个控制字为64位;然而,在此实施例中,错误侦测与修正算法产生了50个错误侦测与修正演字,每个错误侦测与修正字为8位。制造商针对逐个记忆库使用该错误侦测与修正算法,也就是说,制造者针对关联于记忆库0的64位控制字使用该错误侦测与修正算法以产生关联于记忆库0的8位错误侦测与修正字、针对关联于记忆库1的64位控制字使用该错误侦测与修正算法以产生关联于记忆库1的8位错误侦测与修正字、以此类推。
[0072] 需注意的是,在上述垂直码算法与水平码算法的实施例中错误侦测与修正值是根据包括了方块201所决定的签章188的控制值所计算得到,且该控制值将于方块206被烧熔至可修正数据保险丝152。流程继续进行至方块206。
[0073] 于方块206,制造者将方块202所决定的控制值烧熔至可修正数据保险丝152,并将方块204所计算的错误侦测与修正值烧熔至错误侦测与修正保险丝132。此外,制造商将不可修正数据保险丝192烧熔,特别是烧熔掉在方块201中决定数量的不可修正数据保险丝192。流程结束于方块206。
[0074] 图3是显示图1的微处理器100的运作流程图。流程开始于方块302。
[0075] 于方块302,微处理器因重设而开始提取并执行重设微码122的指令。流程继续进行至方块304。
[0076] 于方块304,重设微码122读取可修正数据保险丝152以及错误侦测与修正保险丝132,并将数据保险丝数值126以及错误侦测与修正保险丝数值128写入暂存装置144。从可修正数据保险丝152以及错误侦测与修正保险丝132所读取出的数值包括签章188,签章
188即为不可修正数据保险丝192中被烧熔的保险丝数量。在一实施例中,微处理器100的微指令集包括一指令用来将保险丝172的一记忆库移至微处理器100的一通用缓存器(未绘示)、以及另一指令用来将一数值从通用缓存器移至暂存装置144。再者,其中一执行单元114用以执行上述指令。重设微码122使用关联于保险丝172的每个记忆库的一序列(a sequence),该序列包括一指令用以读取每个保险丝172的记忆库、以及另一指令用来将数据保险丝数值126以及错误侦测与修正保险丝数值128写入暂存装置144。流程继续进行至方块306。
[0077] 于方块306,重设微码122针对暂存装置144中的数据保险丝数值126以及错误侦测与修正保险丝数值128使用错误侦测与修正算法,以决定数据保险丝数值126中是否有错误,若有,则接着决定该错误是否可修正。在一实施例中,微处理器100的微指令集包括一指令用来将一数值从暂存装置144移至一通用缓存器、多个指令用以针对通用缓存器中的数值执行算术与逻辑运算(例如:异或、移位(shift)、或旋转(rotate))、以及另一指令用来将一数值从通用缓存器移至暂存装置144。再者,其中一执行单元114用以执行上述指令,重设微码122使用上述指令的一序列去针对暂存装置144中的数据保险丝数值126以及错误侦测与修正保险丝数值128使用错误侦测与修正算法,以决定数据保险丝数值126中是否有错误,若有,则接着决定该错误是否可修正。在一实施例中,重设微码122使用如图2所述的一垂直码算法。流程继续进行至方块308。
[0078] 于决策方块308,重设微码122根据方块306所执行的运算决定数据保险丝数值126中是否有错误,若有,流程继续进行至方块314;若否,则流程继续进行至方块312。
[0079] 于方块312,重设微码122使用数据保险丝数值126将控制值134写入控制硬件124。在一实施例中,重设微码122将数据保险丝数值126直接写入控制硬件124。在另一实施例中,重设微码122修改数据保险丝数值126以产生控制值134供写入控制硬件124。
举例来说,在一实施例中,重设微码122将数据保险丝数值126与一预设控制值作异或运算,其中该预设控制值是储存于重设微码122中的一常数,然后重设微码122将所得的结果写入控制硬件124,如此一来,使得数据保险丝数值126成为一开关机制以开关微码预设控制值。另外,由于控制硬件124可为上述各种硬件中的任何一者(例如:微码修补硬件、特征控制缓存器、以及设定缓存器),且数据保险丝数值126可具有对应于上述各种硬件的不同部分(portion)的控制值,所以重设微码122可将某些部分的数据保险丝数值126直接写入某些部分的控制硬件124,并可将其它部分的数据保险丝数值126在写入控制硬件124之前进行修改。再者,应可理解重设微码122可执行一序列的指令以自暂存装置144读取数据保险丝数值126,并将上述部分(或上述修改的部分)的数据保险丝数值126写入控制硬件124。流程继续进行至方块322。
[0080] 于决策方块314,重设微码122使用错误侦测与修正保险丝数值128以决定方块306或方块308所侦测到的错误是否为可修正的,若是,流程继续进行至方块316;若否,则流程继续进行至方块318。
[0081] 于决策方块316,重设微码122使用错误侦测与修正算法去修正错误的数据保险丝数值126,以产生修正数据保险丝数值118,然后使用修正数据保险丝数值118将控制值134写入控制硬件124。需注意的是,不论重设微码122是否将修正数据保险丝数值118当作控制值134写入控制硬件124,重设微码122都会使用错误侦测与修正算法去修正错误的数据保险丝数值126以产生修正数据保险丝数值118。也就是说,不论决策方块308是否发现错误,重设微码122都会产生修正数据保险丝数值118,使暂存装置144中的修正签章值
183可用以与决策方块324中的计数数量194(将于后续作进一步说明)作比对。如上述方块312的说明,重设微码122可将修正数据保险丝数值118、或修正数据保险丝数值118的一部分在写入控制硬件124之前作修改。如上述方块304中所述,由于从可修正数据保险丝152以及错误侦测与修正保险丝132所读取的数值包括签章188,所以有利地,于方块
316,可将签章188于需要时进行修正以作为数据保险丝数值修正的一部份,若签章188为不可修正的,此一条件将于决策方块314中被侦测出,使方块318能适当地处理此不可修正的错误。流程继续进行至方块322。
[0082] 于方块318,重设微码122避免微处理器100离开重设程序。若流程由决策方块314进行至方块318,是因为数据保险丝数值126的错误中的位数量过多而微处理器100无法使用错误侦测与修正保险丝数值128去进行修正,也就是说,重设微码122避免微处理器
100提取并执行使用者程序指令。在另一实施例中,重设微码122允许微处理器100离开重设程序,意即,允许微处理器100提取并执行例如基本输出输入系统(BIOS)或其它系统软件的使用者程序指令;然而,重设微码122传送一错误状态至系统软件以告知关于数据保险丝数值126中不可修正的错误。若流程是由决策方块324进行至方块318(将于后续作进一步说明),重设微码122则避免微处理器100离开重设程序,因为重设微码122决定了从暂存装置144中的修正数据保险丝数值118所读取的签章188与方块322中的计数数量
194并不相同。流程结束于方块318。
[0083] 于方块322,重设微码122读取不可修正数据保险丝192、计数其中被熔断的保险丝数量、以及将计数数量194写入暂存装置144,上述计数数量194为图1中所示的记数的已烧熔不可修正保险丝的数量194。流程继续进行至决策方块324。
[0084] 于决策方块324,重设微码122自暂存装置144中的修正数据保险丝数值118读取修正签章值183,并比对修正签章值183与方块322中的计数数量194以决定两者是否相同,若不同,流程继续进行至方块318;若相同,则流程继续进行至方块326。在另一实施例中,重设微码122自暂存装置144中的数据保险丝数值126读取该签章,并比对该签章与方块322中的计数数量194是否相同,也就是说,重设微码122所使用的是在方块306中可能未使用错误侦测与修正算法进行修正的签章。
[0085] 于方块326,重设微码122使微处理器100开始执行使用者程序指令。流程结束于方块326。
[0086] 关于图1至图3所述的不可修正数据保险丝192的再生长问题的解决方法,需注意到签章188是被熔断至保险丝172中,而保险丝172可能会再生长。签章188再生长的问题有一部份已根据本发明一实施例而有所改善,因为签章188可被熔断至可修正数据保险丝152,而可修正数据保险丝152是经过上述错误侦测与修正方案(scheme)所执行的错误侦测。然而,错误侦测与修正方案在能侦测的错误位上存在限制,因此,有可能当过多的可修正数据保险丝152发生再生长时,会使得无法侦测到签章188中的错误。针对此问题,以下将根据图4至图6作进一步说明。
[0087] 更具体说明,该问题是透过将签章188以及该签章的布尔补码186(请见图4)烧熔至可修正数据保险丝152。然后再从可修正数据保险丝152读取签章188以及该签章的布尔补码186,针对签章188执行布尔补码运算以产生一结果,并且比对该结果与读取自可修正数据保险丝152的布尔补码186。若比对结果不相同,表示侦测到错误。由于为了不侦测到签章188的错误,保险丝172中的签章188与其补码186需要将自己的状态反向(invert),所以此解决方法可能比图1至图3所示的错误侦测与修正方案更为可靠,而这则需要使签章188中的一保险丝172从熔断状态改为未熔断状态(如保险丝再生长),且使补码186中对应位的保险丝172从未熔断状态改为熔断状态,反之亦然。然而,尽管前述已清楚评述了关于保险丝172由熔断状态改为未熔断状态的问题(即本发明主要欲解决的问题),但尚未评述关于保险丝172由未熔断状态改为熔断状态的状况。因此,签章方案/签章的补码方案不太可能不去侦测不可修正数据保险丝192的签章188中的错误。
[0088] 图4是根据本发明另一实施例所述的微处理器100的示意图。图4的微处理器100类似于图1的微处理器100,故在此仅针对新增以及/或不同的组件作说明。其中一个差异是可修正数据保险丝152不仅包括代表不可修正数据保险丝192中的熔断保险丝数量的签章188,亦包括了代表签章188的布尔反转值的签章补码186。此外,自可修正数据保险丝152被读取至暂存装置144的数据保险丝数值126不仅包括签章184,还包括了签章补码185。再者,重设微码122计算出签章184的补码以作为签章182的补码。
[0089] 图5是显示制造图4的微处理器100的运作流程图。流程开始于方块201。
[0090] 于方块201,微处理器100的制造者确定一签章,该签章为不可修正数据保险丝192中将被熔断的保险丝数量。且微处理器100的制造者确定该签章的补码。流程继续进行至方块202。
[0091] 于方块202,微处理器100的制造者确定欲烧熔至可修正数据保险丝152的控制值。图5的方块202类似于图2的方块202,然而,需注意到的是该控制值不仅包括方块201所决定的签章,亦包括该签章的补码。流程继续进行至方块204。
[0092] 于方块204,该制造者针对方块202所确定的控制值使用错误侦测与修正算法,以计算将烧熔至错误侦测与修正保险丝132的错误侦测与修正值。图5的方块204类似于图2的方块204,然而,需注意到的是该错误侦测与修正值是根据图5的方块201确定的控制值所计算出来的,且该错误侦测与修正值包括该签章与该签章的补码。流程继续进行至方块206。
[0093] 于方块206,该制造者将方块202所确定的控制值烧熔至可修正数据保险丝152,并将方块204所计算的错误侦测与修正值烧熔至错误侦测与修正保险丝132,类似于图2的方块206。流程结束于方块206。
[0094] 图6是显示图4的微处理器100的运作流程图。图6所执行的步骤除了以下特别指出的差异处之外,其它步骤则类似于图3的步骤。
[0095] 于方块304,由重设微码122自可修正数据保险丝152读取出并写入至暂存装置144的数据保险丝数值126包括了签章184与签章补码185。流程从方块304继续往下进行至新的方块652。
[0096] 于方块652,重设微码122将来自暂存装置144的签章184作补码运算以产生一结果,然后比对该结果与来自暂存装置144的签章补码182。流程继续进行至新的决策方块654。
[0097] 于决策方块654,重设微码122决定方块652之比对是否相同,若是,流程继续往下进行方块306;若否,则流程继续往下进行方块318,因为微处理器100已决定了签章188以及/或签章补码186中发生了错误。
[0098] 图4至图6的实施例具有的一个优点是不需要由错误检查与修正(Error Checking and Correction,ECC)来修正保险丝172中的签章188,但签章补码186提供了签章188的完整性检查。
[0099] 关于图1至图6的实施例所说明的不可修正数据保险丝192的再生长问题的解决方案,其测试是响应处理器的重设而执行。如果在重设时侦测到保险丝再生长的错误,解决方法之一就是把发生错误的部分取消(kill),意即,重设微码122避免微处理器离开重设程序。然而,如果发生错误的部分自行取消,则整台计算机对基本输出输入系统而言就是当机的状态,因此对使用者而言也会是当机状态,意即该计算机无法执行任何程序代码、无法发出哔哔的信号声、无法开关信号灯、或产生任何影像信号告知使用者有错误发生。如此一来,则很难收集有意义的实地故障(field failure)信息以供故障分析与解决。
[0100] 解决方法之二就是让发生错误的部分继续执行并尽量尝试回报错误。然而,处理器本身可得的错误回报机制(即退除(absent)任何执行中的外部程序代码)很有限,特别是因为处理器的重设码并非可自由地写入存储器中,即使重设码可自由地写入存储器中,基本输出输入系统也很可能会将它重写掉。若重设时的处理器保险丝测试错误状态将被保留起来,则基本输出输入系统必须立即于开始执行时尽快读取该错误状态,而这需要系统制造者愿意让微处理器100的制造者在为处理器订作的基本输出输入系统新增程序代码,特别是用以读取处理器所回报的错误状态。然而,微处理器100的制造者可能无法在其所应用的所有系统中都这么做。
[0101] 有个方法是让保险丝测试成为使用者发起(user-initiated),而不是仅能够由重设所发起。所以,微处理器100中新增了一个特定模块缓存器,让使用者软件将一特定模块缓存器写入指令执行至该特定模块缓存器时,微处理器100执行上述任何一种或同时执行上述保险丝测试并报告侦测到的错误。这使得使用者软件能够将侦测到的错误呈报给使用者,此外,这也使得使用者能够选择要继续使用该系统或将该系统关闭。
[0102] 再者,是否在重设时执行保险丝测试乃是制造时可选用的一选项,其中是在制造时藉由选择性地烧熔一保险丝以指示该选项(例如:已烧熔保险丝指示不在重设时执行保险丝测试、非烧熔保险丝指示在重设时执行保险丝测试)。然而,保险丝并非一定可靠,所以与其烧熔单一保险丝以选择该选项,不如烧熔多个保险丝(如图7的保险丝187中的四个保险丝)并针对该多个保险丝执行或运算以决定选择了哪个选项。即便选择在重设时执行保险丝测试,仍可透过特定模块缓存器写入指令选择使用者发起的保险丝测试。
[0103] 图7是根据本发明另一实施例所述的微处理器100的示意图。图7的微处理器100类似于图1的微处理器100,故在此仅针对新增以及/或不同的组件作说明。其中一个差异是烧熔至可修正数据保险丝152的保险丝187为是否于重设时执行保险丝测试的一选项,另一个差异则是重设微码122不仅包括重设时的保险丝测试微码例程(microcode routines),亦包括使用者发起的保险丝测试微码例程。在一实施例中,重设时的保险丝测试微码例程与使用者发起的保险丝测试微码例程中的一有效部分为相同程序代码。此外,自可修正数据保险丝152读取至暂存装置144的数据保险丝数值126包括重设时的保险丝测试选项的保险丝数值181。再者,微处理器100包括可由使用者程序(例如基本输出输入系统或其它系统软件)写入的一特定模块缓存器174,其中,特定模块缓存器174是由使用者程序所写入以使微处理器100执行保险丝测试并回传一错误状态值至特定模块缓存器
174,让使用者程序透过特定模块缓存器读取指令去读取。最后,微处理器100的其它相关功能单元,诸如:指令转译器104、指令译码器108、执行单元114、以及重设微码122,则被修改以译码并执行导向至特定模块缓存器174中的特定模块缓存器写入指令与特定模块缓存器读取指令,将于后续根据图10与图11作进一步说明。
[0104] 图8是显示制造图7的微处理器100的运作流程图。流程开始于方块800。
[0105] 于方块800,微处理器100的制造者决定是否烧熔图7中的重设时保险丝测试选项的保险丝187。流程继续进行至方块201。
[0106] 于方块201,微处理器100的制造者决定一签章,该签章为不可修正数据保险丝192中将被烧熔的保险丝数量。流程继续进行至方块202。
[0107] 于方块202,微处理器100的制造者决定欲烧熔至可修正数据保险丝152的控制值,图8的方块202类似于图2的方块202,然而,需注意的是该控制值亦包括方块800所决定的保险丝187,且该控制值将于方块206中被烧熔至可修正数据保险丝152。流程继续进行至方块204。
[0108] 于方块204,微处理器100的制造者针对方块202所决定的控制值使用错误侦测与修正算法,以计算将烧熔至错误侦测与修正保险丝132的错误侦测与修正值。图8的方块204类似于图2的方块204,然而,需注意的是该错误侦测与修正值是根据方块202所决定的控制值所计算得到的。流程继续进行至方块206。
[0109] 于方块206,微处理器100的制造者将方块202所决定的控制值烧熔至可修正数据保险丝152,并将方块204所计算的错误侦测与修正值烧熔至错误侦测与修正保险丝132,类似于图2中的方块206。此外,该制造者烧熔不可修正数据保险丝192,特别是不可修正数据保险丝192中被烧熔的保险丝数量是在方块201所决定。流程继续进行至方块206。
[0110] 图9是显示图7的微处理器100的运作流程图。图9中所执行的步骤除了以下将说明的差异之外,其余步骤则类似于图3中所执行的步骤。于方块304自可修正数据保险丝152所读取的数值亦包括如上述重设时的保险丝测试选项的保险丝数值。
[0111] 此外,流程从方块304往下进行至新的方块903。于方块903,重设微码122针对读取自暂存装置144的重设时保险丝测试选项的保险丝数值181执行或运算以产生一选项位值。流程继续进行至新的决策方块905。
[0112] 于决策方块905,重设微码122决定方块903所产生的选项位值是否指示进行重设时的保险丝测试,若是,流程继续进行至方块306;若否,则流程结束。
[0113] 最后,流程从决策方块314的“否”分支进行至新的决策方块917。
[0114] 于决策方块917,重设微码122决定不可修正的故障是由重设时的保险丝测试所侦测到、抑或由使用者发起的保险丝测试所侦测到。若是由重设时的保险丝测试侦测到,流程继续进行至方块318;若是由使用者发起的保险丝测试侦测到,则流程继续进行至新的方块919。
[0115] 于方块919,使用者发起的保险丝测试的重设微码122将错误状态值加载至图7中保险丝测试的特定模块缓存器174。流程结束于方块919。
[0116] 图10是显示图7的微处理器100执行特定模块缓存器写入指令的运作流程图,其中,该特定模块缓存器写入指令被导向至图7的特定模块缓存器174。流程开始于方块1002。
[0117] 于方块1002,使用者程序执行被导向至特定模块缓存器174的一特定模块缓存器写入指令。流程继续进行至方块1004。
[0118] 于方块1004,指令转译器104译码该特定模块缓存器写入指令,并将控制转移至重设微码122中的特定模块缓存器写入处理程序(WRMSR hanlder),该特定模块缓存器写入处理程序会调用使用者发起的保险丝测试微码例程。流程继续进行至方块1006。
[0119] 于方块1006,使用者发起的保险丝测试微码例程执行图3、图6、以及/或图9中方块306至方块326所述的保险丝测试,特别是,重设微码122根据方块919的错误状态填入(populate)保险丝测试的特定模块缓存器174。流程结束于方块1006。
[0120] 图11是显示图7的微处理器100执行特定模块缓存器读取指令的运作流程图,其中,该特定模块缓存器读取指令被导向至图7的特定模块缓存器174。流程开始于方块1102。
[0121] 于方块1102,使用者程序执行被导向至特定模块缓存器174的一特定模块缓存器读取指令。流程继续进行至方块1104。
[0122] 于方块1104,指令转译器104译码该特定模块缓存器读取指令,并将控制转移至重设微码122中的特定模块缓存器读取处理程序(RDMSR hanlder),该特定模块缓存器读取处理程序会将保险丝测试的特定模块缓存器174中的数值复制到一般通用缓存器,例如EDX-EAX缓存器中,而EDX-EAX缓存器可由使用者程序所读取。流程结束于方块1104。
[0123] 虽然上述实施例是使用x86架构,但根据本发明的实施例所揭露的内容当可将本发明所述由使用者发起的保险丝测试的实施例稍作修改以应用于其它架构的处理器。微处理器中的保险丝所具有的广阔应用可实现许多重要的功能,因此需要有可靠的方法以得知何时发生保险丝再生长。图7至图11所示的实施例即藉由让制造者能够实地收集更多有用的失误数据,来协助完成此目标,此外,亦可提供使用者一个较具意义的失误指示,而不只是呈现一个当机的系统。
[0124] 如以上实施例所述,当微处理器启动时,某些控制值(即不可修正的保险丝中的控制值)被直接扫描至硬件缓存器,而不是让重设微码使用错误侦测与修正技术去修正该控制值。在微处理器的一实施例中,微码甚至无法读取不可修正的保险丝。上述其它实施例则使不可修正的保险丝能够被读取以侦测其中的控制值是否有错误。然而,上述的实施例并未使侦测到的错误能够被修正。
[0125] 以下将于图12至图14说明的实施例是使微码能够修正不可修正的保险丝,明确来说,这里所说的不可修正的保险丝包括了错误侦测与修正保险丝以及数据保险丝。重设时,不可修正的保险丝数值被读取至各自关联一保险丝记忆库的扫描缓存器。然后,一状态机将不可修正的数据与错误侦测与修正保险丝数值自扫描缓存器序列地扫描至一微码可读取的缓存器。该微码于需要时修正数据保险丝数值,并将修正数值写入一微码可写入的缓存器,使微码可写入的缓存器中的修正数值被序列地扫描回到保险丝记忆库中的扫描缓存器。该微码接着使扫描缓存器中的修正数值被序列地扫描至控制硬件(诸如高速缓存修正控制缓存器以及锁相回路调整控制缓存器)。
[0126] 图12是根据本发明另一实施例所述的微处理器100的示意图。图12的微处理器100类似于图1的微处理器100,包括了一指令高速缓存102、指令转译器104、指令配送器
106、执行单元114、微码单元116、重设微码122、一保险丝烧熔电压输入136、以及暂存装置
144。
[0127] 图12的微处理器100亦包括控制硬件124,控制硬件124用以接收并储存一控制值164、以及用将控制值164提供至微处理器100的电路(circuits)以控制微处理器100的运作。控制硬件124可控制以下步骤(但不限于此):挑选位单元的冗余行以取代高速缓存存储器中位单元里损坏的一行;针对微处理器100的各式锁相回路的工作周期或其它控制;电荷泵浦设定;锁相回路的时钟频率;输入/输出焊接点的设定,包括允许多任务侦错的功能;选择时钟是否于微处理器100中被搬移以增加频率;避免保险丝失效时所用的冗余保险丝;仅用于制造过程中的辨识用途的保险丝;设定电压识别号码的接脚;以及用以控制电压与时钟倍增器的总线选择接脚。
[0128] 处理器100还包括不可修正数据保险丝192,图12的不可修正数据保险丝192包括数据保险丝195以及错误侦测与修正保险丝193,错误侦测与修正保险丝193系提供重设微码122以修正数据保险丝195中的错误,例如由保险丝再生长所造成的错误,以下将作进一步说明。
[0129] 处理器100亦包括透过一并行接口耦接至数据保险丝195以及错误侦测与修正保险丝193的扫描缓存器191,微处理器100还包括一微码可读取的缓存器196与一微码可写入的缓存器197,且微码可读取的缓存器196与微码可写入的缓存器197皆耦接至执行单元114。在一实施例中,微码可读取的缓存器196与微码可写入的缓存器197皆为64位宽。微处理器100亦包括状态机199,状态机199是由个别的双向串行接口耦接至:扫描缓存器191、微码可读取的缓存器196、微码可写入的缓存器197、以及控制硬件124。在一实施例中,状态机199为通用片上处理器(Common On-chip Processor,COP)用以使用公知的联合测试行动小组机制去扫描储存组件之间的序列位串流。在一实施例中,该串行接口是运作于微处理器100的核心时钟频率的一部分;该部分于一实施例中为八分之一。此具有一优点,即不可修正数据保险丝192、状态机199、以及控制硬件124之间的距离相对地为远;此外,微码可读取的缓存器196与微码可写入的缓存器197是介接于微处理器100的平行域(如执行单元114)与微处理器100的串行域(例如:不可修正数据保险丝192、状态机
199、以及控制硬件124),并且与该平行域相对地为近、但与该串行域相对地为远,其中该平行域以全核心时钟频率运作,而该串行域是以上述核心时钟频率的一部分运作。
[0130] 再者,重设微码122用以执行以下步骤:读取数据保险丝195并将读取的数值写入暂存装置144作为数据保险丝数值166;读取错误侦测与修正保险丝193并将读取的数值写入暂存装置144作为错误侦测与修正保险丝数值168;以及读取数据保险丝数值166与错误侦测与修正保险丝数值168以产生一修正数据保险丝数值158,其中修正数据保险丝数值158写入暂存装置144然后再从暂存装置144读出以供写入微码可写入的缓存器197之用。
[0131] 图13是根据本发明所述制造图12的微处理器100的运作流程图。图12所示的步骤类似于美国专利申请案12/609,207的图2所述的步骤;然而,图12的步骤是针对图12的不可修正数据保险丝192(也就是数据保险丝195以及错误侦测与修正保险丝193)而执行,而不是针对图1的保险丝172而执行。流程开始于方块202。
[0132] 于方块202,微处理器100的制造者决定欲熔断至数据保险丝195的控制值,每个数据保险丝195构成具有一二进制值的单一位,且其二进制值视对应的数据保险丝195为已熔断或未熔断而设为0或1。读取自数据保险丝195的位值将被扫描至控制硬件124的一位,以下将于图14中进一步说明。因此,于方块202,该制造者决定哪些不可修正数据保险丝192将被配置为数据保险丝195、而哪些不可修正数据保险丝192将被配置为错误侦测与修正保险丝193,并且该制造者将每个数据保险丝195关联至控制硬件124的一位、以及决定欲熔断至数据保险丝195的位值。该制造者针对每个数据保险丝195执行以上步骤。以产生熔断至错误侦测与修正保险丝193的数值的角度来看(进一步说明请见以下方块204的叙述),虽然每个数据保险丝195皆构成单一位,但全部的数据保险丝195可视为单一实体并具有被熔断的单一共同数值、或被视为多个各自具有单一共同数值的字,以下将于方块204作进一步说明。如此一来,单一共同数值是在制造微处理器100之前以及制造完后运作之前就已预先设定。流程由方块202进行至方块204。
[0133] 于方块204,微处理器100的制造商针对方块202所决定的控制值使用错误侦测与修正算法,以计算将烧熔至错误侦测与修正保险丝193的错误侦测与修正值,该错误侦测与修正算法可为上述的算法之一,包括图2与图3所述的垂直与水平码算法。流程继续进行至方块206。
[0134] 于方块206,该制造商将方块202所决定的控制值烧熔至数据保险丝195,以及将方块204所计算的错误侦测与修正值烧熔至错误侦测与修正保险丝193。流程结束于方块206。
[0135] 图14是显示图12的微处理器100的运作流程图。图14中某些步骤方块在图12中以图画的编号1至6标示,并对照说明于以下叙述步骤1至步骤6。流程开始于方块1402。
[0136] 于方块1402,微处理器100因应重设而开始提取并执行重设微码122的指令。流程继续进行至方块1404。
[0137] 于方块1404,如图12的步骤1所示,不可修正数据保险丝192数值(也就是数据保险丝195数值以及错误侦测与修正保险丝193数值)加载至扫描缓存器191。流程继续进行至方块1406。
[0138] 于方块1406,如图12的步骤2所示,状态机199将方块1404所加载的数据保险丝195数值序列地扫描至控制硬件124,使得微处理器100可根据来自数据保险丝195的起始值进行运作,即使数据保险丝195中的一个或多个保险丝可能发生再生长。这是必要的程序,因为微处理器100无法在控制硬件124没有加载任何数值时正常地运作。在一实施例中,有1000个不可修正数据保险丝192以及将其读入的有效的扫描缓存器191(每个扫描缓存器191为32位);扫描缓存器191以连续的方式序列地连接起来,使得数值能够被序列地扫描进入或离开扫描缓存器191,从而省去有效的写入硬件,写入硬件需要使用一并行总线将每个扫描缓存器191连接至状态机199或微处理器100的其它组件。流程继续进行至方块1408。
[0139] 于方块1408,如图12的步骤3所示,重设微码122执行指令使状态机199将数据保险丝195数值以及错误侦测与修正保险丝193数值自扫描缓存器191读取至微码可读取的缓存器196。流程继续进行至方块1412。
[0140] 于方块1412,如图12的步骤4所示,重设微码122读取微码可读取的缓存器196,并将数据保险丝数值166以及错误侦测与修正保险丝数值168写入暂存装置144。然后,类似于图3的方块306,重设微码122针对数据保险丝数值166以及错误侦测与修正保险丝数值168使用错误侦测与修正算法以决定数据保险丝数值166是否有错误,若是,则决定该错误是否可修正。流程继续进行至方块1414。
[0141] 于方块1414,重设微码122根据方块1412所执行的作业决定数据保险丝数值166中是否有不可修正的错误,若是,流程继续进行至方块1416;若否,则流程继续进行至决策方块1418。
[0142] 于方块1416,因为数据保险丝数值166中的错误的位数量过多以致于无法使用微处理器100错误侦测与修正保险丝数值168去修正,所以重设微码122避免微处理器100离开重设程序。也就是说,重设微码122避免微处理器100去提取并执行使用者程序指令。在另一实施例中,重设微码122可允许微处理器100离开重设程序,意即去提取并执行如基本输出输入系统或其它系统软件的使用者程序指令;然而,类似于上述图3的方块318,重设微码122会传送一错误状态至系统软件以告知数据保险丝数值166中有一不可修正的错误。流程结束于方块1416。
[0143] 于方块1418,重设微码122于需要时使用错误侦测与修正算法去修正错误的数据保险丝数值166以产生修正数据保险丝数值158,并且如图12的步骤5所示,将修正数据保险丝数值158写入微码可写入的缓存器197,使状态机199将写入至微码可写入的缓存器197的修正数据保险丝数值158序列地扫描回扫描缓存器191。在一实施例中,微处理器100的微指令集包括了使状态机199执行上述作业的一指令。流程继续进行至方块1422。
[0144] 于方块1422,如图12的步骤6所示,重设微码122使状态机199从扫描缓存器191将修正的数值扫描至控制硬件124,以使用修正数据保险丝数值158控制微处理器100的运作,而非使用方块1406所扫描的初始值去控制微处理器100的运作。有利地是,如果在初始值中有任何可修正的错误,该错误于此也会被一并修正。流程继续进行至方块1424。
[0145] 于方块1424,重设微码122完成了微处理器100的初始化,然后让微处理器100开始提取并执行使用者程序指令。流程结束于方块1424。
[0146] 在一实施例中,状态机199自扫描缓存器191所接收到的数据保险丝195数值的一部分包括一地址信息,该地址信息是针对所关联的数据指定控制硬件缓存器124中的一目的位置,也就是说,状态机199处理数据保险丝195数值的该部分中的地址信息,并将该部分写入该地址信息所指定的控制硬件缓存器124。在此实施例中,如图12至图14所述,重设微码122修正数据保险丝数值166以产生修正数据保险丝数值158的步骤、以及使状态机199将修正数据保险丝数值158序列地扫描至控制硬件124的步骤意味着重设微码122不仅修正了数据保险丝数值166的数据部分,亦有利地修正了数据保险丝数值166的地址部分。相较于其它实施例中,微码自目的控制硬件缓存器读取数值并使用错误侦测与修正保险丝数值以针对自目的控制硬件缓存器所读取的数值执行错误侦测与修正,此实施例具有其它的优点例如:由重设微码122所执行的错误侦测与修正的计算比较不复杂,且当侦测到错误时需要修正的位也比较少。举例说明,假设不可修正数据保险丝192是以位单元的一冗余行去取代一高速缓存存储器中位单元里的一损坏行。假设高速缓存存储器有
1024行位单元,每一行在控制硬件124中具有一个6位缓存器用以指定64个冗余行中之一以取代一损坏行。也就是说,控制硬件124中有1024个可能的目的位置可供修正数据保险丝数值158的6位数据量写入,以使用64个冗余行中之一取代一损坏行。因此,假设一设定具有数据保险丝195中64个16位的地址/数据保险丝集合,更具体来说,前10个位为一地址,指示目的的控制硬件124中1024个6位数据缓存器的哪个数据缓存器需要从预设的0值作修改(altered),最后6个位则为新的数据数值。在此范例中,图12至图14所示的实施例需要有足够的错误侦测与修正保险丝193以侦测并修正数据保险丝数值166中的
1024位(64*16)。然而,在另一实施例中,微码是用以自目的控制硬件缓存器读取数值并使用错误侦测与修正保险丝去执行错误侦测与修正,由于该微码不会知道是控制硬件中的哪个缓存器发生错误,所以为了侦测并修正一错误,该微码则必须读取全部1024个控制缓存器,意即6144(1024*6)个位,因此,此实施例比图12至图14所示的实施例需要更多错误侦测与修正保险丝。
[0147] 由上述说明可发现,图12至图14所述的装置与方法优于图1至图11所述的装置与方法,因为图12至图14所示的实施例可同时侦测并修正不可修正数据保险丝192中的错误,而图1至图11所示的实施例仅能用以侦测错误。
[0148] 图12至图14所述的重设时的测试亦可执行为使用者发起的测试,类似于图7至图11所示的实施例。
[0149] 图12至图14所述的装置与方法具有的一优点是其使用了串行总线去连接扫描缓存器191、以及控制硬件198本质上可减少将修正保险丝数值传递给控制硬件124所需的线路数量,这是因为不可修正数据保险丝192在空间上可置于远离控制硬件124的地方,以及/或需要被写入修正数值的控制硬件124的数量很庞大。此外,提供一机制供重设微码122执行错误侦测与修正大大地简化了一解决方案的状态机199,在该解决方案中,状态机
199执行错误侦测与修正,或者在该解决方案中,错误侦测与修正是执行于保险丝数值被加载扫描缓存器191之时。
[0150] 本发明虽以各种实施例揭露如上,然而其仅为范例参考而非用以限定本发明的范围,任何熟习此项技艺者,在不脱离本发明的精神和范围内,当可做些许的更动与润饰。举例来说,软件可实现相关于本发明的装置与方法的功能、制造、模块化(modeling)、模拟(simulation)、描述(description)、以及/或测试等等。该软件可使用一般程序设计语言(如:C、C++)、硬件描述语言(Hardware Description Language,HDL)(如:Verilog HDL、VHDL等等)、或其它可得的程序来实作。且该软件可配置于任何公知的计算机可使用媒体中,例如:半导体、磁盘、或光盘(如只读记忆光盘(Compact Disc Read-Only Memory,CD-ROM)、数字多功能光盘(Digital Versatile Disc Read-Only Memory,DVD-ROM)等等)。本发明所述的装置与方法的实施例可包括于一半导体知识产权核心(semiconductor intellectual property core)中,例如:微处理器核心(如:嵌入于硬件描述语言中),再进一步转换为硬件的集成电路产品。另外,本发明所述的装置与方法可以硬件与软件的一组合方式嵌入。因此,上述实施例并非用以限定本发明的范围,本发明的保护范围当视后附的申请专利范围所界定者为准。特别是,本发明可实现于一微处理器装置,且该微处理器装置可使用于一般用途的计算机。最后,熟习此项技艺者应当可理解在不脱离本发明的精神和范围内,以上述所揭露的实施例与概念设计出与本发明相同目的的其它架构。