执行实时微码修补之装置及方法

文档序号:6463625阅读:172来源:国知局
专利名称:执行实时微码修补之装置及方法
技术领域
本发明涉及微电子领域,而且特别涉及微处理器中用以执行微码修补的 装置及方法。
背景技术
目前,于每一时钟周期中,微处理器被设计用以执行许多指令,并于任 一特定时钟周期中,提供许多可以执行最大指令数量之特征。
一般而言,一
时钟周期被视为分配给微处理器之每一流水线级(pipeline stage)之间隔时 间,用以执行将结果传送至下一个流水线级所需之处理工作。而现今之处理 器包括许多流水线级, 一部分被平行配置,用以允许同时或并行之处理工作 (task),因此多重指令得以平行执行。为了同步每一级之指令执行,将一核 心时钟信号提供至每一流水线级。该核心时钟信号,由一外部时钟产生电路 所提供,通常为一总线时钟信号频率之倍数。
任何本领域普通技术人员应当了解, 一 当前流水线微处理器之主要级可 划分为由存储器读取指令(即读取级逻辑单元);对特定处理器而言,将 指令转译至为唯一 (原生)之相关微指令序列(转译级逻辑单元);执行该
相关微指令序列(执行级逻辑单元);及将执行结果写入至指定位置(写入 级逻辑单元)。
上述读取及转译级,是被描述于当前使用宏(macro)指令之一复杂指 令集(CISC)之上下文中,例如常见之x86指令集架构(ISA)。利用一 单一宏指令以指定一些低级硬件操作,因此,任何本领域普通技术人员应了 解到,从存储器(例如外部存储器或高速緩存)读取一宏指令之前,需先 将该宏指令转换为对应之微指令序列(亦称为原生指令),是用以指定一个 或多个低级硬件操作。随着这转换,该微指令通常平行地被分派至各种执行 级单元用以执行,从而产生结果或执行所指定之低级操作。
因此,此技术领域将重点投注于开发快速及效能良好之架构,用以将宏 指令转换至相关微指令序列,及用以将微指令最佳化地分派至执行级资源。有一些不同的方法用以执行转换操作,但大部分的方法一般通过硬件及一只
读存储器(ROM )之索引存储器,以直接转换(意即转译)之组合为其特征。
直接转译之资源通常为转译器、解码器、转译逻辑单元等,而索引存储器之
资源通常为微码只读存储器(microcode ROM )或^:指令只读存储器(micro instruction ROM )。
举例而言,指定一非常简单操作之一特定宏指令,也许仅通过一转译器 直接进行转译,或许将被转换至一个或多个相关微指令,而指定一非常复杂 操作(例如 一三角函数)之另一特定宏指令,则可被转译为一单一微指令, 以指定该微码只读存储器之一地址(即一微码只读存储器之入口点),包括 上百笔连续存放微指令之一序列,且该序列中之每一微指令是指定执行该复 杂操作所需之一低级操作。
任何本领域普通技术人员应当了解,储存于该微码只读存储器之复杂微 指令序列容易产生错误。当设计及制造新微处理器时,需依靠系统设计者提 供检测及修正这些错误的方法,以使整体变动的影响减到最小。于进行大量 生产前所采取之检测错误技术,为使实验室或侦错环境更弹性化,或许会牺 牲指令处理量(throughput)及一特定部分之速度。举例而言,于一新设计 中,在对硅进行变动前,实验室通常会提供用以仿真及测试微码变化影响的 装置。除此之外,根据所提供之修正选择,制造部分之微码错误修正弹性上 会优先考虑该部分之速度及处理量。另外,若于出货后检测出微码错误,亦 可提供将修正分发给消费者之技术,以此方式,消费者便能执行该部分之修 正。此修正通常被称为修补(patch )、微码修补(microcode patch )、市场工 程修改(field engineering change; field ECs )等其它名称。
微码修补之较佳方式,是以一个或多个替代之微码指令,简单地取代或 置换一特定之微码指令。因此,于该微码只读存储器中,当检测到该特定之 微码指令被存取时,其对应之置换微码指令接着进行取代之操作。理论上, 此为一直接之方式。然而,实际上,于操作环境中,由于需不影响部分之处 理量,用于微码修补的装置往往非常复杂。
于美国专利第6438664号中,McGrath是针对许多微码修补方法之优缺 点进行讨论,包括当遇到引起问题之微码时,以及遇到引起问题之微码前, 立即从外部存储器读取欲置换之微码。在遇到问题微码前预先读取时,则该 置换微码是储存于一可变位置中,当需要时用以取代该问题微码。此外,于一处理器中,McGrath提供一些随机存取存储器(RAM),用以执行微码修 补。于处理器操作期间,该随机存取存储器由外部存储器载入修补,由该微 码只读存储器存取一微码线,以使得能够一旦修补时,则从该随机存取存储 器读取及执行该修补,以取代该微码线。McGrath揭示一些匹配寄存器,用 以储存微码只读存储器地址,是与随机存取存储器之修补相关。当发现一匹 配地址时,则允许该随机存取存储器进行取代。进一步,McGrath提到此方 法虽然有效,但当控制权由该微码只读存储器切换至该随机存取存储器时, 于流水线中,亦会产生两周期泡沫(two-cycle bubble)之限制。意即,根据 McGrath所揭露之技术,为牺牲效能及处理量之微码修补。
因此,需要一种执行一微码修补的装置及方法,不造成一微处理器流水 线级之延迟。进一步,更需要一种执行实时替代微码的装置,用以将微码只 读存储器中之一微指令以一置换微码指令取代之,而不影响该微处理器之效 能。
此外,亦需一种执行微码修补之技术,用以将一单一微码只读存储器指 令,置换为一个以上之替代微码指令,即为一对多之微码修补,其中,存取 该微码修补并不会造成额外之延迟。
进一步,更需要一种弹性装置,用以存取储存于外部存储器之微码修补, 于设计微处理器时,将存取微码修补时所造成之影响减至最小,并允许于该 替代码中,交错宏及微指令。于处理器调试、及对应复杂操作所需之微码例 程(routine)之仿真期间,此一装置之设计特别适用。
同时,亦需一种不需通过微处理器执行指令,便可从一外部来源将微码 修补载入一微处理器之技术。

发明内容
本发明,于其它应用中,用以解决上述之问题,及解决传统技术之限制、 缺点和其它相关问题。本发明提供一种快速且弹性执行微码修补之优越技 术。于一实施例中,是提供一种执行实时微码修补之装置。该装置包括一 修补阵列、 一多工器、及一随机存取存储器。该修补阵列接收一微码只读存 储器地址,并于该修补阵列中,确定该微码只读存储器地址是否匹配多个入 口其中之一。当该微码只读存储器地址匹配时,该修补阵列输出一对应之分 支指令,并设定一命中信号。该分支指令指定一微码分支目标地址。该多工
9器由该修补阵列接收该分支指令,及接收一微指令,其对应于一微码只读存 储器之微码只读存储器地址。该多工器,根据该命中信号之状态,将该微指 令或该对应之分支指令提供至一指令寄存器。该随机存取存储器储存多个修 补指令,用以取代微指令,进行执行之操作。所述修补指令中,将第一个储 存于上述随机存取存储器之一位置,对应于该微码分支目标地址。
根据上述,本发明一方面是于一微处理器之一转译级内部,实现一装置, 用以执行一对多微码修补,对应于微码只读存储器所储存之一微指令。该装
置包括 一相联阵列内部之多个入口、 一多工器、及一随机存取存储器。该
相联阵列接收对应于该微指令之一微码只读存储器地址。所述入口之一与该 微码只读存储器地址匹配,且所述入口之一提供一分支指令。该分支指令指 定一微码分支目标地址。该相联阵列设定一命中信号,用以回应上述微码只 读存储器地址之接收。该多工器,耦接该相联阵列及该微码只读存储器。该 多工器接收该分支指令及该微指令,并根据该命中信号之状态,将该微指令 或该分支指令提供至一指令寄存器。该随机存取存储器储存一修补指令序列 用以执行,而非执行该微指令。于该修补指令序列内,将一第一修补指令储 存于该随机存取存储器之一位置,对应于该微码分支目标地址。
再者,本发明另一方面是实现一种执行一对多微码修补之方法,是对应
于储存于微码只读存储器之一微指令。该方法包括于一微处理器之一转译 级内,同时将一微码只读存储器地址提供至一微码只读存储器及一修补阵 列;于该修补阵列中,判断该微码只读存储器地址是否匹配多个入口其中之 一,并输出一对应之分支指令及设定一命中信号,该分支指令指定一微码分 支目标地址;为回应该命中信号之设定,将该对应之分支指令传递至一指令 寄存器用以执行;以及,转移至一微码随机存取存储器之一位置,对应于该 微码分支目标地址,随后并执行一或多个修补指令,其储存于该微码随机存 取存储器之该位置。


图1是显示于一微处理器中执行微码修补之一传统装置框图2是显示根据本发明实施例,于一处理器中, 一转译级之细节框图;
图3是显示根据本发明实施例之一实时微码修补装置框图4是显示根据本发明实施例之一种执行实时微码修补方法流程图;图5是显示根据本发明实施例之一装置框图,用以执行一对多之微码修
补操作;
图6是显示根据本发明实施例之一种实现一对多微码修补方法流程图; 图7是显示根据本发明实施例之一装置框图,用以从存储器执行一微码 修补;
图8是显示根据本发明实施例之一示范封装宏指令格式; 图9是显示根据本发明实施例之一转译旁路码。
主要组件符号说明
100 微码修补装置; 101 查找表;
102 匹配寄存器0、匹配寄存器7;
103 比较器;
104 地址增加器;
105、 305、 505、 705 微码只读存j渚器; 106 修补随机存取存储器;
107、 214、 307、 313、 507、 513、 707、 713~多工器;
108、 308、 508、 708 地址定序器;
109、 309、 509、 709 下一个地址寄存器;
110、 310、 510、 710 指令寄存器; 200 转译级; 221 模式检测器; 223 原生指令路由器; 211 指令长度解码器; 212~转译器; 213 控制只读存储器; 300 实时微码修补装置;
331、531、731 系统存储器5
332、334、532、 534、 732、734 修补lt据;
333、533、733 基本输入输出系统(只读存储器
311、511、711 修补载入器:
312、512、712 修补阵列;304、 504、 704 地址增加器;
321、 521、 721 熔丝阵列;
323、 523、 723、 727 机器特定寄存器;
500~—对多微码修补装置;
551、 751 修补随机存取存储器;
700 微码修补装置;
754 保存上下文阵列;
755 中断/ 4丸行/交换逻辑单元;及
728 标志寄存器。
具体实施例方式
关于上述所讨论的装置,用以于现今之一处理器内部,执行一微码修补, 如图1所示,是用以强调说明所述装置之限制。随后之图2至图9,是用以 显示本发明之相关讨论。本发明提供一种兼具弹性及效能之技术,于一微处 理器中,用以规划及实现微码只读存储器之修补。本发明在执行修补之环境 上更具弹性,且与传统技术相较下,具有能更迅速实现修补的装置。
请参考图1,是显示一传统装置框图,用以于一微处理器中执行微码修 补。该框图是描述一传统的微码修补装置100,例如,可用于一目前之微处 理器之转译级内部。该装置100包括一微码只读存储器105,耦接一修补随 机存取存储器106。为便于讨论,配置该随机存取存储器106,用以将置换 微指令储存于一微码存储地址空间之上方64个位置中,从地址0x00至 OxC3f。因此,配置该微码地址空间上方64个位置,作为随机存取存储器106, 以对应只读存储器105。通过一微码地址总线ADDR存取该微码地址空间 OxOO-OxC3f,而该只读存储器105及该随机存取存储器106,将已编入索引 之微指令序列输出至一指令寄存器110。该指令寄存器110,将微指令提供 给微处理器之下一个级(未示出)执行。
该地址总线ADDR,由一下一个地址寄存器109接收一微码地址,其输 入耦接一多工器107之输出。该多工器之输出为四个多工器输入其中之一。 该多工器输入为一递增地址,是由一地址增加器104、 一下一个入口点地址 NEXT ENTRY POINT、 一分支目标地址BR TGT、及一〗奮补地址所产生。该 地址增加器104增加总线ADDR所提供之一前次微码地址,用以于一下一个连续微码地址之位置,使能一微指令之索引,例如可为微指令序列所利 用。于该指令寄存器110中,目前指令之分支目标字段提供该分支目标地址, 以使能执行微码只读存储器105之分支。该下一个入口点为微码只读存储器 105中之一位置,是包含微指令,对应于一后续之微指令序列。于该随机存 取存储器106中,该修补地址为一替代之微指令位置,用以取代储存于微码 只读存储器105之现有微指令。 一地址定序器108,耦接该指令寄存器110, 产生一选择总线值SEL,以指示该多工器107由四个输入选择其一。该地址 定序器108判断该指令寄存器110之微指令类型。当该微指令包括一后续微 指令,是储存于微码只读存储器105或随机存取存储器106时,则配置SEL 使该多工器107选择该递增地址作为输入。当该微指令为一分支指令时,则 配置SEL,指示该多工器107将该分支目标地址提供至该下一个地址寄存器 109。当该微指令为一微指令序列之最后一个微指令时,则该地址定序器108 指示该多工器107,用以通过SEL将下一个入口点地址提供至下一个地址寄 存器。一^1而言,下一个入口点地址是通过一直接转译器(未示出)转译一 后续之宏指令而产生。为求简洁,在此不加赘述与该转译器之相互作用。
该装置100亦显示8个匹配寄存器102,其中,每一个均耦接一比较器 103。此外,经由总线ADDR,该比较器103接收该微码地址,是由该下一 个地址寄存器109所提供。该比较器103输出一选择总线SEL[7:0],用以于 一查找表101中,由8个入口选择其中之一,且亦耦接该地址定序器108, 指示已检测到用一微码地址,用以执行一修补。于该查找表101之8个入口 中,每一个为一微码修补地址,被提供至总线PATCH ADDR,作为该多工 器107之一输入。
图1之配置,为目前用以执行微码修补所使用之代表装置。于操作中, 通过基本输入输出系统(BIOS )之指令,或者,于处理器电力开启(power-up ) 或重置(reset)后,通过操作系统所执行之指令,该只读存储器105内部之 一微码序列是被配置由外部存储器(未示出)载入该匹配寄存器102、该查 找表IOI、及该修补随机存取存储器106。因此,于总线ADDR上,当下一 个4鼓码地址与该载入之匹配寄存器102之一内容匹配时,则该比较器103设 定SEL[7:0],以于该查找表101中选择该对应之修补地址,并指示该地址定 序器108,将该下一个地址寄存器109目前之内容(即引起问题之微码地址) 替换为该查找表101所提供之修补地址。该地址定序器108因而改变SEL之值,用以选择该修补地址,作为该下一个地址寄存器109之输入,因此,
由该下一个地址寄存器109提供该修补地址,并于该修补随机存取存储器 106中指示该入口点,作为置换微指令,随后输出至该指令寄存器110。
图l之配置,对于通过市场工程修改进行微码修补而言是有帮助的,且 利用已知之技术,易于通过执行储存于基本输入输出系统或操作系统之指令 来载入。然而,如McGrath所述,且如同本发明人所观察到的,必须进行一 微指令取代时(意即,当该比较器103指示一匹配时),于存取该对应之微 码指令前,由该下一个地址寄存器现在所输出之地址,必须以该查找表IOI 所读取之一修补地址取代之。McGrath提到这会于流水线中产生两周期泡沫 之延迟。此外,本发明人已注意到,此一延迟于最高操作条件下是不被允许 的,再者,就效能角度来看,于流水线中产生任一延迟是极为不利的。效能 因此被限制,进而使现今之微码修补技术受到局限。
本发明借助提供一微码修补装置及方法,用以克服上述之限制,当存取 该修补时,并不会于流水线中产生任何额外延迟,使得执行一对一 (one-to-one)或一对多(one-to-many )修补时,并不影响处理器之处理量。 本发明亦提供一种弹性化装置,用以执行修补,于仿真及调试时,适合牺 牲弹性以求完全的效能、具高度弹性但稍微影响效能、或最大弹性之情况。 以下将配合图2至图9详细叙述本发明。
请参考图2,是显示根据本发明实施例之一微处理器之一转译级200之 细节框图。该转译级200是被配置,以支持一对一微码修补操作、 一对多微 码修补操作,且具读取及执行存于系统存储器之微指令之弹性。根据本发明 之一实施例, 一对一微码修补操作为取代一单一微码只读存储器位置所储存 内容之搡作。举例而言,从微码只读存储器地址0x001E所取得之一38位微 码只读存储器输出,以一38位之置换之加以取代,即视为一对一微码修补, 而不需管该38位输出是否为一明确(explicit )微指令、 一序连(concatenated ) 微指令、或多个微指令之一编码。同样地, 一对多微码修补操作,是将一单 一微码只读存储器位置之内容,以一个以上之置换加以取代。于上述例子中, 将该38位微码只读存储器输出,例如,以三个38位置换加以取代,即视为 一对多微码修补。该转译级200包括 一宏指令总线201,用以从系统存储 器(未示出),分配通过读取级逻辑单元(未示出)所读取之指令。
将该宏指令分配至旁路逻辑(bypass logic )单元220、 一指令长度解码器211、 一转译器212及一控制只读存储器213。如上所述,该控制只读存 储器213用以排序一内部微码只读存储器之微指令,并执行实时(realtime) 一对一及一对多微码修补,以下将配合图3至图7,加以详细叙述。该旁路 逻辑单元220内部,宏指令被提供至一模式检测器221及一原生指令(native instruction)路由器223。该模式检测器221提供一旁路信号组,包括 一旁 路使能信号224及一禁能信号222。该禁能信号222被传递至该长度解码器 211、该转译器212及该控制只读存储器213。该旁路使能信号224作为一多 工器(mux) 214之一控制信号。该原生指令路由器223、该转译器212及该 控制只读存储器213所输出之微指令,作为该多工器214之输入。该多工器 214由该旁路使能信号224控制,用以允许将三个微指令输入之任一个传送 至一原生指令总线215,或使该原生指令路由器223之输出无法通过该原生 总线215传送。为避免争用之情况,借助该禁能信号222及HO信号216控 制该原生指令路由器223、该转译器212及该控制只读存储器213,于任一 时间,仅传送一微指令输入至该多工器214。
本发明之转译级200,是被配置用以执行如上所述之功能及操作。根据 本发明之实施例,该转译级200包括数字逻辑单元、模拟逻辑单元、电路、 装置、或机器特定(machine specific)指令、或数字逻辑单元、模拟逻辑单 元、电路、装置或机器特定指令之一组合、或用以执行前述本发明功能及操 作之等效组件。于该转译级200内,执行该功能及操作所使用之组件,可与 其它电路、微码等共享,用以于该处理器内部,执行其它功能及操作。根据 本应用之范围,机器特定指令用以表示一个或多个机器特定指令。 一机器特 定指令为一单元执行之层级指令。举例来说,机器特定指令可通过一精简指
令集(RISC)微处理器直接执行。对一复杂指令集(CISC)微处理器而言, 例如x86兼容微处理器,则将x86指令转译至相关之机器特定指令,并通 过一单元或该复杂指令集微处理器内之单元,直接执行该相关之机器特定指 令。
于一正常操作模式下,通过该读取级,由外部存储器读取一应用程序之 宏指令,并提供至该宏指令总线201。通常,因为宏指令并不依循一固定之 长度标准,因此,该指令长度解码器211评估该总线201上之比特流,再决 定每一宏指令之位长度。于一实施例中,通过一长度总线LEN,将每一宏指 令之位长度传送至该转译器212。于是,该转译器212由该宏指令总线201取得所指示之位量。当该转译器212直接转译一已取得之宏指令时,该转译
器212执行将该宏指令转译至相关原生指令之操作。然后,该转译器212将 该原生指令提供至该多工器214。当该控制只读存储器213译码该已取得之 宏指令时,该转译器212产生一对应之微码只读存储器入口点地址,并通过 一远端(handoff)总线HO,将该入口点地址提供给该控制只读存储器213, 使该控制只读存储器213从该微码只读存储器接收该微指令。之后,该控制 只读存储器213由其内部之微码只读存储器中读取该对应之微指令,并将这 些微指令提供给该多工器214。因此,于正常操作模式下,该转译器212或 该控制只读存储器213,通过该多工器214,将取得之微指令传送至该原生 指令总线215。
于一实施例中,该转译级逻辑单元200是被配置用以存取一机器特定寄 存器202,包括一旁路模式使能(BE)位203。对程序设计者而言,该机器 特定寄存器202并未见于架构上,但可借助一加密接口 ( encrypted interface ) 之特别程序加以写入。为此,值得一提的是,当该BE位203被设定(assert) 时,该微处理器是于一转译旁路模式中,而当该BE位203被解除(deassert ) 时,则该微处理器恢复为正常搡作模式。
于正常操作期间,于该旁路逻辑单元220中,该模式检测器2"监视该 BE位203之状态及总线201上所显示之指令。当该BE位203被设定时, 则该模式检测器221设定该旁路使能信号224,接着使能原生指令,使其从 该原生指令路由器223,经由该多工器214,传递至该原生指令总线215,其 中,原生指令是由该转译器212及该控制只读存储器213所提供。于一实施 例中,针对由该宏指令总线201所读取之一对应宏指令,该禁能信号222禁 止该转译器212及该控制只读存储器213执行指令转译功能。因此,当该转 译级200操作于正常操作模式时(即该BE位203被解除时),该旁路逻辑单 元220解除该旁路使能信号224,接着禁能该原生指令路由器2",并指示 该多工器214,由该转译器212或该控制只读存储器213选择原生指令来执 行。当该转译级200于旁路模式时(即该BE位203被设定时),则该旁路逻 辑单元220设定该旁路使能信号224,然后使能该原生指令路由器223及该 模式检测器221。
于旁路模式中,该模式检测器控制该禁能信号222之状态,当禁能信号 被解除时,则禁能该原生指令路由器223,且该转译器212以及该控制只读存储器213操作于正常模式。由该宏指令总线201读取宏指令,并通过该控 制只读存储器213加以转译及取得。然而,于此模式中,通过封装该模式检 测器221所检测到一特定封装(wrapper)宏指令之原生指令, 一程序设计者 可将原生指令交错于存于存储器之一宏指令流程中。于一实施例中,该封装 宏指令,为一未使用(unused)或一无效(invalid)宏指令,可于其它方面 产生一异常(exception )。因此,通过设定该BE位203,有助于一调试器将 本发明之一处理器设定成一原生旁路模式,但可继续使用特定指令集架构之 所有宏指令。除此之外,为支持调试或仿真功能,程序设计者可利用该封装 宏指令来内嵌(embed) —原生指令,接着,使能可编程存取于其它方面无 法利用之原生资源。举例来说,于本发明之一微处理器内,许多原生资源(例 如暂时储存寄存器、计数器、状态指示器等)于宏指令执行期间被利用, 但无法存取。然而,当该微处理器于旁路模式时,借助使用该封装指令,用 以存取这些原生资源之原生指令,可被交错于该宏指令中。
于旁路模式中,该模式检测器221监视由该宏指令总线201所得之指令。 当检测到一封装指令时,该模式检测器设定禁能信号,接着使能该原生指令 路由器223,并禁能该转译器212以及控制只读存储器213。当被使能时, 该原生指令路由器223从该封装宏指令内部去除该原生指令,并将该原生指 令传递至该多工器214及该原生指令总线215。于一实施例中,所有原生指 令具一固定位长度。于一特定实施例中,原生指令为38位。于一实施例中, 通过该封装指令所提供之原生指令,与通过该转译器212以及控制只读存储 器213所提供一样,是包括一个或多个机器特定指令之编码,随后,并由耦 接至该原生指令总线215之一机器特定转译器(微转译器),转译为一个或 多个机器特定指令。该微转译器(未示出)将该机器特定指令提供给之后的 流水线级执行。于一更传统的实施例中,通过该封装指令、该转译器212、 及控制只读存储器213所提供之原生指令,直接被提供至之后的流水线级执 行。
请参考图3,是显示根据本发明实施例之一实时微码修补装置300框图。 该修补装置300可内嵌于控制只读存储器内,其操作在正常或原生旁路模式 下,例如图2所显示之控制只读存储器213。该实时微码修补装置300是 被配置用以执行一对一微码修补操作,通常与读取微指令所需时钟周期相 同。意即,本发明是被配置用以一对一微码修补,而不会于一处理器流水线中产生任何额外延迟。
该一对一修补装置300包括一微码只读存储器305。于一实施例中,该 微码只读存储器具有20480 ( 0x5000)个38位之入口,并被设置于一 32K 微码地址空间内。亦可涵盖其它实施例。通过一农t码地址总线ADDR存取 该微码地址空间,且该微码只读存储器305依照该微码地址总线ADDR之 值,将微指令序列提供给一多工器313。该多工器313之输出是耦接一指令 寄存器310。于该微处理器中,该指令寄存器310将微指令提供给之后的级 (未示出)执行。于一实施例中,该微指令为多个机器特定指令,其为一38 位编码。于此实施例中,将该指令寄存器310之内容提供给一微转译器(未 示出),用以将该编码译码为机器特定指令,及用以将该机器特定指令分派 至流水线中之功能单元。
该地址总线ADDR,由一下一个地址寄存器309接收一微码地址,其中, 该下一个地址寄存器309之输入是耦接一多工器307之输出。是由该多工器 的三个输入中,选择其中之一作为该多工器之输出。该多工器之输入包括 由一地址增加器304所产生之一递增地址INC ADDR、 一下一个入口点地址 NEXT ENTRY POINT、及一分支目标地址BR TGT。该地址增加器304增加 总线ADDR所提供之一前次微码只读存储器地址,用以于一下一个连续微 码地址之位置,使能一微指令之索引,例如可为微指令序列所使用。该分 支目标地址,由目前该指令寄存器310中, 一微指令之分支目标字段所提供, 以执行微码只读存储器305之分支。这些分支之类型亦为微码分支。该下一 个入口点为微码只读存储器305中之一位置,是包含微指令,对应于一后续 之微指令序列,例如与一下一个宏指令相关。于一实施例中,通过一远端 总线,从本发明之一转译器,将该下一个入口点提供至该修补装置,例如 图2所示之转译器212及远端总线216。 一地址定序器308,是耦接该指令 寄存器310,并于一总线SEL上产生一值,以指示该多工器307由三个输入 选择一个。该地址定序器308判断该指令寄存器310之微指令类型。意即, 当该微指令包括一后续微指令,是储存于微码只读存储器305时,则设定 SEL,以指示该多工器307选择该递增地址作为输入。当该微指令为一分支 指令时,则配置SEL,以指示该多工器307将该分支目标地址提供至该下一 个地址寄存器309。当该微指令为一微指令序列之最后一个微指令时,则该 地址定序器308指示该多工器307,通过SEL,将下一个入口点地址提供至下一个地址寄存器。于一实施例中,当下一个入口点被提供至该多工器307, 用来存取一微码序列剩余之微指令时,该转译器可直接转译一个或多个初始 微指令,并供以执行。
该微码修补装置300亦包括一修补阵列312,是耦接该微码地址总线 ADDR,并产生一修补指令输出PATCH INSTRUCTION及一命中信号HIT。 于一实施例中,该修补阵列312为一快速相联阵列,用以根据总线ADDR 之值,提供32个入口以供查询。于另一实施例中,该^奮补阵列312包括 一内容可寻址存4诸器(content-addressable memory; CAM ),是包括32个入 口 。任何本领域普通技术人员应当了解, 一内容可寻址存储器是被配置用以 接收一数据之实体输入(于此实施例中,意即,该下一个地址寄存器309之 内容),并针对整个内容执行一极快速搜寻(意即,32个入口),以判断是否 有一入口对应于所提供之输入。若有,则该内容可寻址存储器输出一相关之 数据片段。根据本发明,该相关之数据片段为一修补指令,对应于所提供之 地址。将该修补指令输出至该多工器313,并设定命中信号HIT。命中信号 HIT是耦接该多工器313之一选择输入。当命中信号HIT未被设定时,该多 工器313选择该微码只读存储器作为输出。当命中信号HIT被设定时,该多 工器313选择将该修补指令传递至该指令寄存器310,而非选择该微码只读 存储器304所输出之微指令。
因此,该修补阵列312执行微指令之存取,该微指令是对应总线ADDR 所提供之^1码只读存储器地址,同时,对该^1码只读存储器305进行存取, 并将该微码修补指令提供至该多工器313,与该微码只读存储器305之输出 平行。因为平行地存取该修补阵列312与该微码只读存储器305,当执行本 发明之一对一微码修补时,并不会产生任何额外延迟。
该修补装置300包括一修补载入器311,通过一载入总线LOAD耦接该 修补阵列312,并且利用传统的技术,于操作上耦接系统存储器332及一基 本输入输出系统之只读存储器(BIOS ROM) 333。该修补载入器311耦接一 重置信号RESET、 一熔丝阵列321内部之一修补熔丝F 322,且能够存取一 机器特定寄存器323内部之一修补位P 324。并依指示利用该修补载入器3] 1 , 将基本输入输出系统333之修补数据334、或位于系统存储器331之修补数 据332,载入作为该修补阵列312之内容。于一实施例中,于重置或电力开 启后,执行该基本输入输出系统333之指令,以指示该修补载入器311检查该熔丝322之状态。当该熔丝322于一状态(例如未熔断或熔断)时,指 示应载入该修补数据334,接着,配置该修补载入器311,用以从该基本输 入输出系统333取得该修补数据334,且该修补载入器311载入该修补阵列 312。于另一实施例中,于电力开启或重置后,通过该基本输入输出系统333 之指令检测出该熔丝322之状态,用以指示该修补载入器311,从系统存储 器331中,由一指定修补数据位置332取得该修补数据。于一实施例中,在 执行该基本输入输出系统333之指令前先执行修补,而于读取该基本输入输 出系统333之指令前,及重置之后,配置该装置300,评估该炫丝322之状 态。若该熔丝322指示一修补将被载入,则该修补载入器311从该基本输入 输出系统之只读存储器333之指定区域读取修补数据334,并将数据载入该 修补阵列312。当该修补被载入后,从该基本输入输出系统333读取指令, 用以启动该微处理器。此实施例特别有助于当该基本输入输出系统333内部 之指令,需要利用一修补,以适当地启动该微处理器之情况。当该基本输入 输出系统333必须于一特定状态适当地启动该微处理器时,此实施例更有助 于修补初始常数及寄存器之值。于另一实施例中,该修补载入器311监视该 机器特定寄存器323之修补位324之状态。于此实施例中,该机器特定寄存 器302并未见于架构上,但可借助一特别程序加以写入。举例来说,通过利 用特权指令(privileged instructions )之一力口密接口, 一实施例可具有写入寄 存器321之功能。于此应用中,值得一提的是,当该修补位P324被设定时, 指示该修补载入器311,从系统存储器331取得该修补数据332,并将修补 地址及修补指令载入修补阵列312。
与现今之微码修补技术相比较,本发明的装置300,可于电力开启/重 置期间,或者,于执行指令特权序列后,使能载入微码修补。除此之外,本 发明克服传统方法之限制,提供一种技术,以一对一之基础,实时地置换载 入之修补。当执行本发明之微码修补时,并不会于流水线中产生任何额外之 延迟。因此,当于一特定微码指令之一个或多个位发现错误时,图3的装置 300是极为有用的。进一步,该微码只读存储器305内部之任何位置均可进 行修补。那即是,当内部检测出一错误时,例如 一序列之第10个微指令, 该序列包含40个微指令,是对应于一单一宏指令所指定之一执行,接着, 将一个一对一修补指令载入该修补阵列312,其地址与该微码只读存储器305 中,第10个微指令所储存之位置相同。请参考图4,是显示根据本发明实施例之一种执行实时微码修补方法流
程图400。流程起始于步骤401,本发明之一微处理器进行电力开启或重置。 流程继续进行步骤402。
于决策步骤402中,于该微处理器中,评估并判断一熔丝阵列321内部 之一修补熔丝322是否为熔断状态。如果不是,则进行步骤404。若该熔丝 322为熔断状态,则将该修补数据载入一修补阵列312,即进行流程之步骤 403。
于步骤403中, 一修补载入器311从基本输入输出系统存储器333之一 指定修补数据位置334取得该修补数据,并将该修补数据载入该修补阵列 312。流程接着进入步骤404。
于步骤404中,读取级逻辑单元开始从基本输入输出系统333读取欲执 行之指令,用以配置及初始化该^:处理器及处理系统。当指令执行后,流程 接着进入步骤405。
于步骤405中,该微处理器依次读取及执行该程序流程内部之指令。流 程接着进入决策步骤406。
于步骤406中,评估并判断一机器特定寄存器323内部之一修补字段324 是否被设定为一状态,用以指示需将一修补载入该修补阵列312。若该修补 字段324指示不需载入一修补,流程进入步骤408。若该修补字段324指示 需载入一修补,流程进入步骤407。
于步骤407中,该修补载入器311从系统存储器331之一修补数据位置 332取得该修补数据,并将该修补数据载入该修.补阵列312。流程接着进行 步骤408。
于步骤408中,该微处理器继续读取及执行指令。直接将宏指令转译为 微指令,以及/或者从微码只读存储器305取得相关之微指令。于微码只读 存储器305中,将位置之地址提供给该修补阵列312,同时将地址提供至该 微码只读存储器305。接着流程进行决策步骤409。
于步骤409中,评估并判断供给该修补阵列312之一微码地址是否与一 载入地址相匹配。如果不匹配,流程接着进入步骤411。若于该阵列312中, 一地址确实匹配(命中),则流程进行步骤410。
于步骤410中,该》务补阵列312 *#出对应于该匹配地址之一#~补指令, 并设定一命中信号HIT,以指示一多工器313选择将该修补指令,而非将该微码只读存储器305所取得之微指令,置入一指令寄存器310。接着,流程 进入步骤411。
于步骤411中,该微处理器继续读取及执行指令,而流程进入步骤405。
图3及图4之讨论,是着重于本发明对于一对一取代微码指令所提供之 改善,而且不影响效能。但本发明亦适用于执行一对多之微码修补,且提供 传统技术所没有的效能效益,如上述图1所讨论之技术。以下将参考图5及 图6,针对执行一对多微码修补的装置进行讨论。
请参考图5,是显示根据本发明实施例之一装置500框图,用以执行一 对多之微码修补操作。如上所述, 一个一对多之微码修补操作可视为将一单 一微码只读存储器位置(意即, 一微指令)所储存内容,以多个微指令取代。 该修补装置500可实现于控制只读存储器逻辑单元内,是操作于正常或原生 旁路模式下,如图2所示之控制只读存储器213。除此之外,本发明之一对 多微码修补装置500,是被配置用以执行一对多微码修补,其中,于一微处 理器流水线中,仅产生一单一周期之延迟。该延迟是起因于,将一微码分支 操作之执行,作为一对多修补之第一项操作,用以将微码读取至微码地址空 间之一修补随机存取存储器(RAM)区域,将进一步详述如下。因此,相较 于传统修补装置,如图1所示,本发明之一对多修补操作,对处理量 (throughput)提供显著之改善。
该一对多修补装置500包括一微码只读存储器505。于一实施例中,该 微码只读存储器505具有20480 ( 0x5000 )个38位之入口 ,并设置于一 32K 微码地址空间内。亦可涵盖其它实施例。该装置500亦包括一微码修补随机 存取存储器551,占用微码地址空间部分未使用之位置。于一实施例中,该 微码修补随机存取存储器551包括256个38位之入口 ,占用该微码地址空 间上方256个位置(意即,从位置0x7F00至0x7FFF )。该微码地址空间, 包括只读存储器505及随机存取存储器551,均通过一微码地址总线ADDR 存取,且该微码只读存储器505及微码随机存取存储器551,依照该微码地 址总线ADDR之值,将微指令序列提供给一多工器513。该多工器513之输 出是耦接一指令寄存器510。于该微处理器中,该指令寄存器510将微指令 提供给之后的级(未示出)执行。于一实施例中,该微指令为多个机器特定 指令,其为一38位编码。于此实施例中,将该指令寄存器510之内容提供 给一微转译器(未示出),用以译码及分派至功能单元。该地址总线ADDR,由一下一个地址寄存器509接收一微码地址,其中, 该下一个地址寄存器509之输入是耦接一多工器507之输出。该多工器之输 出,是从该多工器的三个输入中选择其一。该多工器之输入包括由一地址 增加器504所产生之一递增地址INC ADDR、 一下一个入口点地址NEXT ENTRY、及一分支目标地址BR TGT。该地址增加器504增加总线ADDR 所提供之一前次微码只读存储器地址,用以于下一个连续微码地址之位置, 使能一微指令之索引,例如可为微指令序列所使用。该分支目标地址,由 目前该指令寄存器510中, 一微指令之分支目标字段所提供,用以执行微码 只读存储器505及/或微码随机存取存储器551之分支。该下一个入口点为 微码只读存储器505或微码随机存取存储器551中之位置,是包含微指令, 对应于一后续之微指令序列,例如与一下一个宏指令相关。于一实施例中, 通过一远端总线,将该下一个入口点NEXT ENTRY POINT从本发明之一转 译器提供至该修补装置500,例如图2所示之转译器212及远端总线216。 一地址定序器508,是耦接该指令寄存器510,并于一总线SEL上产生一值, 用以指示该多工器507由三个输入选择一个。该地址定序器508判断该指令 寄存器510之微指令类型。意即,当该微指令包括一后续微指令,储存于微 码只读存储器505或微码随机存取存储器551时,则设定SEL,指示该多工 器507选择该递增地址作为输入。当该微指令为一分支指令时,则配置SEL, 指示该多工器507将该分支目标地址提供至该下一个地址寄存器509。当该 微指令为一微指令序列之最后一个微指令时,则该地址定序器508指示该多 工器507,用以通过SEL将下一个入口点地址提供至下一个地址寄存器。于 一实施例中,当下一个入口点被提供至该多工器507,用来存取一微码序列 剩余之微指令时,同时,该转译器可直接转译一个或多个初始微指令,并供 以执行。
如上述图3及图4所示之一对一修补装置300,进一步,该微码修补装 置500包括一修补阵列512,是耦接该微码地址总线ADDR,并产生一修补 指令输出PATCH INSTRUCTION及一命中输出HIT。于一实施例中,该修 补阵列512为一快速相联阵列,用以根据总线ADDR之值,提供32个入口 以供查询。于另一实施例中,该修补阵列512包括一内容可寻址存储器,是 包括32个入口。该修补阵列512接收该下一个地址寄存器509之内容,并 针对整个内容执行一极快速搜寻(意即,32个入口),以判断是否有一入口对应于所提供之输入。若有,则该修补阵列512输出一修补指令,对应于所
提供之地址。将该修补指令输出至该多工器513,并设定命中信号HIT。命 中信号HIT是耦接该多工器513之一选择输入。当命中信号HIT未被设定 时,该多工器513适当地选择该微码只读存储器或微码随机存取存储器作为 输出。当命中信号HIT被设定时,该多工器513选择将该修补指令,而非将 该微码只读存储器550 /该微码随机存取存储器551所输出之微指令,传递 至该指令寄存器510。
该修补随机存取存储器551,于该微码地址空间内部,为挥发性及可载 入位置之一集合,用于一对多之微码修补。于该微码只读存储器505中,当 一特定地址之一单一微指令需要以具有多个微指令之一微码修补取代时,如 下所述,则所述多个置换微指令是储存于该随机存取存储器551之一置换位 置,其中,所述多个置换微指令之第一微指令,是储存于该随机存取存储器 551之第一位置,且其中, 一微码分支指令被载入该修补阵列512,作为对 应该特定地址之数据,该微码分支指令具有一分支目标地址,为该随机存取 存储器551之第一位置。因此,当欲进行修补之微指令之特定地址被供应至 总线ADDR时,将同时被供应至该修补阵列512。而当该微码只读存储器 505之内容被存取时,该修补阵列512将该储存之微码分支指令提供至该多 工器513,与该微码只读存储器505之输出平行。因为总线ADDR之内容与 该修补阵列512匹配,命中信号HIT因此被设定,而通过该多工器513,将 经由该修补阵列512所取得之该微码分支指令,传递至该指令寄存器510, 且无产生额外之延迟。该地址定序器508注意到, 一微码分支指令是于该指 令寄存器510内部,而该分支目标地址,于该修补随机存取存储器55之上 述第一位置,是输入至该多工器507。因此,该地址定序器508指示该多工 器507,通过SEL,选择该分支目标地址,接着经由总线ADDR提供给该微 码地址空间,以及选择该修补随机存取存储器551之上述第一位置,意即, 包含一对多微码修补之第一微指令位置。通过该地址增加器504所提供之递 增地址,从该随机存取存储器551存取修补之后续微指令,直到该地址定序 器508读取及检测到该修补序列之一最后微指令,指示该多工器507选择下 一个入口点。另外,载入该随机存取存储器551之修补,亦包括一微指令, 使一分支回到该微码只读存储器505之一位置。
该修补装置500包括一修补载入器511,通过一载入总线LOAD耦接该修补阵列512,并通过一载入随机存取存储器总线LOADRM耦接该修补随 机存取存储器551,进一步,利用传统的技术,于操作上耦接系统存储器532 及基本输入输出系统之只读存储器533。该修补载入器511耦接一重置信号 RESET、 一熔丝阵列521内部之一》务补熔丝F 522,且能够存取一机器特定 寄存器523内部之一修补位P524。并依指示利用该修补载入器511,将基本 输入输出系统533之修补数据534、或位于系统存储器531之修补数据532, 载入作为该修补阵列512及该修补随机存取存储器551之内容。
操作上,载入该修补阵列512及该修补随机存取存储器551之执行方法, 与图3的装置300载入该修补阵列312之方式大致相同,差异处在于,所供 应之修补数据532、 534,包含了载入该阵列512及该修补随机存取存储器 551两者之所需数据,以及,根据该熔丝522之状态、载入只读存储器533 之指令、及机器特定寄存器523内修补位524之状态,该修补载入器511将 数据载入该阵列512及该修补随机存取存储器551,与前述图3所标示之组 件类似。
因此,于电力开启/重置期间,或者,于通常于架构上并未提供之指令 执行期间,本发明的装置500能够载入一对多之微码修补,以快于传统技术 之方式,用以存取一对多微码修补。图5的装置500,有助于当发现错误时, 需利用多个微指令作为一修补,用以取代已烧录至微码'只读存储器505之一 微指令。除此之外,该一对多的装置500,使一对多之微码修补易于实现, 并将修补所影响之效能减至最低。进一步,本发明之一对多修补方法与一对 一修补所需的方法一致,其中, 一对一修补简单地取代一微码分支,为随机 存取存储器551之一目标地址,是包含一对多之修补。
请参考图6,是显示根据本发明实施例之一种实现一对多微码修补方法 流程图600。流程起始于步骤601,其中,本发明之一微处理器进行电力开 启或重置。接着,流程进行决策步骤602。
于决策步骤602中,于该微处理器中,评估并判断一熔丝阵列521内部 之一修补熔丝522是否为熔断状态。如果不是,则流程进行步骤604。若该 炫丝522为熔断状态,则将该修补数据载入一修补阵列512及修补随机存取 存储器551,接着,进行流程之步骤603。
于步骤603中, 一修补载入器511从基本输入输出系统存储器533之一 指定修补数据位置534取得该修补数据,并将该修补数据载入该修补阵列512及修补随机存取存储器551。该修补数据包括一微码分支指令,被载入 该修补阵列512,其中,该微码分支指令之目标地址为修补随机存取存储器 551之一位置,为该一对多微码修补之第一微指令。该修补数据亦包括该一 对多微码修补,由该修补载入器511载入至随机存取存储器551之目标位置。 流程继续进行步骤604。
于步骤604中,读取级逻辑单元开始从基本输入输出系统533读取欲执 行之指令,用以配置及初始化该微处理器及处理系统。当指令执行后,流程
接着进入步骤605。
于步骤605中,该微处理器依次读取及执行该程序流程内部之指令。流 程接着进行决策步骤606。 .
于步骤606中,评估并判断一机器特定寄存器523内部之一修补字段524 是否被设定为一状态,用以指示需将一修补载入该修补阵列512及该修补随 机存取存储器551。若该修补字段524指示不需载入一修补,则流程进入步 骤608。若该修补字段524指示需载入一修补,则流程进入步骤607。
于步骤607中,该修补载入器511从系统存储器531之一修补数据位置 532取得该修补数据,并将该修补数据载入该修补阵列512及修补随机存取 存储器551,如上述之步骤604。流程接着进行步骤608。
于步骤608中,该微处理器继续读取及执行指令。直接将宏指令转译为 微指令,以及/或者从微码只读存储器505取得相关之微指令。于微码只读 存储器505中,将位置之地址提供给该修补阵列512,同时将地址提供至该 微码只读存储器505。接着,流程进入决策步骤609。
于步骤609中,评估并判断供给该修补阵列512之一微码地址是否与一 载入地址相匹配。如果不匹配,则流程进行步骤613。若于该阵列512中, 一地址确实匹配(命中),则流程进入步骤610。
于步骤610中,该修补阵列512输出对应于该匹配地址之一替代指令, 并设定一命中信号HIT,以指示一多工器513选择将该替代指令,而非将该 微码只读存储器505所取得之微指令,置入一指令寄存器510。接着,流程 进入决策步骤611。
于决策步骤611中,评估并判断该指令寄存器510之替代指令,是否为 一微码分支指令,于该修补随机存取存储器551中具有一目标地址。若是, 则前进至步骤612。如果不是,则流程进入步骤613。于步骤612中,将该微码分支指令之分支目标地址提供至总线ADDR, 以执行该微码分支,此外,于该修补随机存取存储器551中,取得该一对多 修补之第一微指令位置。流程接着进行步骤613。
于步骤613中,该微处理器继续读取及执行指令,而流程进入步骤605。 本发明之一对一微码修补及一对多微码修补之效能已详述如上,现在, 请参考图7至图9,是显示利用前述的装置及方法,允许从系统存储器执行 微码修补,进而执行更具弹性之测试、仿真、及调试操作之细节。于此应用 中,所述修补之执行模式,称之为转译旁路模式或原生旁路模式。此一操作 模式已配合图2详述如上,其中,已揭示微指令可与宏指令交错,作为一程 序流程的一部分,储存于系统存储器中。于一实施例中,宏指令为x86宏指 令,通过一x86兼容微处理器执行。现在,将配合以下之图示,针对一程序 设计者、 一发明者、或一调试器,详细说明如何利用本发明进入及离开转译 旁路模式,以及,如何将原生指令与宏指令交错于一程序流程内部,通过插 入微码指令,对目前之微码例程进行调试,并且允许存取原生资源,例如 机器特定寄存器、隐藏寄存器等,以及,对应于微码例程之原生指令,在将 其烧录至只读存储器之前,如何进行测试。除此之外,特定微码例程可被编 程至系统存储器,并执行边界条件测试、作业测试、硬件调试、及其它测试 活动。
请参考图7,是显示根据本发明实施例之一装置700,用以从系统存储 器执行一微码修补。该装置700,与前述第5-6图所示之一对多修补装置500 大致相同,额外增加执行存储器731所储存之微码序列所需之组件及物件, 相对于一修补阵列712或修补随机存取存储器751所储存之序列。于图7中, 该装置700之组件操作,与图5中,该装置500之组件操作大致相同,是将 图中许多数字以"7"取代。
于图5的装置500中,除了共同的组件之外,该装置700包括中断/执 行/交换逻辑单元755,用以存取一机器特定寄存器727内部之一旁路使能 (BE)位729,及一标志寄存器728内部之一旁路开启(BO)位730。该装 置700亦包括旁路码(bypass code) 735,是储存于系统存储器731中。该 旁路码735,可包括多个封装(wrapper-encapsulated)孩吏指令或宏指令之一 程序流程,具有封装微指令交错在其中。该旁路码735,为该程序流程,由 该微处理器执行,以代替一特定之微指令。该装置700亦显示微指令之一使能旁路序列752,是被载入该修补随机 存取存储器751内部。该使能旁路序列752用于转译级,用以储存一先前宏 指令之上下文,并于进入转译旁路模式前进行转译及执行操作。该上下文是 储存于一保存上下文阵列754中。于一实施例中,该保存上下文阵列754为 一个或多个机器特定寄存器。示范之上下文信息包括该先前宏指令之地址、 它的下一个指令指标等。需将与该先前宏指令相关之信息充份储存于该保存 上下文阵列754中,以便于转译旁路模式结束时,可以恢复正常宏指令程序 流程之执行。为了恢复正常宏指令程序流程,将微指令之一恢复上下文序列 753载入该修补随机存取存储器751。为终止转译旁路模式,于该旁路码735 中,执行一微码分支指令,具有一分支目标地址,用以指定该恢复上下文微 码序列753之位置。于一实施例中,该恢复上下文序列753可固定储存于微 码只读存储器705中,以代替被载入该修补随机存取存储器751 。
于操作中,如上所述,将数据载入该修补阵列712或修补随机存取存储 器751。于该微指令之微码只读存储器地址,将一微码分支指令载入该修补 阵列712,该微指令将被取代、仿真、测试等。该修补阵列712之微码分支 指令,包括一第一微指令之一分支目标地址,是于修补随机存取存储器751 之使能旁路序列752中。当欲被置换之微指令地址被提供至总线ADDR时, 该修补阵列712发送并执行该微码分支指令,以指示流程进入该修补随机存 取存储器751之使能旁路序列752。该使能旁路序列752,是包括微指令, 用以指示该中断/执行/交换逻辑单元755设定该旁路使能(BE)位729, 进而指示转译逻辑单元200,如图2所示,旁路模式已被使能。使能旁路序 列之最后一个微指令包括一分支,对应于储存在系统存储器731里的旁路码 735。尔后,如图2所示,该旁路逻辑单元220执行检测封装(wrapper)指 令所需之操作、从该封装指令内部去除该原生指令、以及将原生指令传递到 该原生总线215。
当该微处理器于转译旁路模式时,通过传统技术,中断及其它任务控制 权转移事件(下文统称为"中断,')发出信号通知该中断/执行/交换逻辑 单元755。当处理一中断时,于该寄存器727中,检查旁路使能(BE)位729 之状态,以判断该微处理器是否操作于原生旁路模式。若是,先储存该状态, 再借助设定该标志寄存器728之旁^各开启(BO )位730,以处理该中断。需 注意,该标志寄存器728为该微处理器内部之一结构化寄存器(architecturalregister),于任务控制权转移期间保存其状态,并于控制权回复时恢复其状 态。于一x86之实施例中,该标志寄存器728包括一x86兼容处理器之标志 寄存器(EFLAGS),而该旁路开启(BO)位730包括上述标志寄存器之第 31个位。当设定旁路使能(BE)位729 (使能该旁路模式)时,若发生一中 断,则于处理该中断之前,该中断/执行/交换還辑单元755设定该标志 寄存器728之旁路开启(BO)位730。除此之外,清除旁路使能(BE )位 729,从而禁能原生旁路模式。在从中断回复之前,若一封装宏指令是于具 控制权之一中断服务例程或其它应用程序内部,则该指令转译级200将根据 控制指令集架构之结构规格,用以解译该封装宏指令,于一实施例中,包括 产生一异常(exception )。如此一来,对于服务所述事件之操作系统模块, 或具程序控制权之其它应用程序而言,应用程序可利用交错原生指令,而不 会产生问题。从一中断事件回复至利用原生旁路模式之一应用程序时,该中 断/执行/交换逻辑单元755检查该标志寄存器728之旁路开启(BO)位 730的状态。假使该位730指出原生旁路模式之前被使能过,则设定该旁路 使能(BE)位729为一再使能(re-enable)旁路模式。接着,将控制权回复 至该应用程序,随后再度执行宏指令(包括封装指令)。于原生旁路模式之 应用程序可检查旁路开启(BO)位730之状态,以判断是否发生一中断, 也许改变了在中断发生前所使用之任一原生资源之状态或内容。于中断事件 时,因为原生资源并非结构性可存续, 一中断处置器,或具程序控制权之其 它应用程序,可以改变目前应用程序所使用之一原生资源的状态,该应用程 序是于旁路模式。于一选择性实施例中,于原生旁路模式时,该标志寄存器 728于该微处理器内部包括一原生寄存器,其内容借助执行一程序流程内部 之原生指令而被清除。根据该选择性实施例,从中断回复之后,该中断/执 行/交换逻辑单元755将该标志寄存器728之值设定为一非零(non-zero) 值,因此,提供一手段,让该原生旁路应用能够判断是否发生一中断。于另 一实施例中,该标志寄存器728是包括具有旁路开启(BO)位730之一 结构化标志寄存器以及一原生寄存器,如上所述,提供了两种指示给该原生 旁路应用,以表明发生一中断。
如上所述,对该恢复上下文序列753执行一微码分支,以终止转译旁路 模式。于一实施例中,该恢复上下文序列753,指示该转译级重新载入储存 于保存上下文阵列754之宏指令上下文,及指示该中断/执行/交换逻辑
29单元755设定该旁蹈"使能(BE )位729,从而使该转i奪逻辑单元200回复至 正常操作模式。该恢复上下文序列753之最后一个微码指令被执行后,指示 一地址定序器708—序列之最后一个微指令已被执行,然后,在储存上下文 之后,进入转译旁路模式之前,将对应于一宏指令之下一个入口点提供给该 多工器707。于一选择性实施例中,亦考虑该使能旁路序列752包括微指令, 以于转译旁路模式期间,指示该中断/执行/交换逻辑单元755完全禁能
中断。根据此实施例,保存存储器所需执行之唯一操作,为储存目前之中断 遮罩、于转译旁路模式期间遮蔽中断,然后,在回复到正常操作模式之前, 恢复该中断遮罩。
请参考图8,是显示根据本发明实施例之一示范封装宏指令800。该封 装宏指令800,是包括 一运算码(opcode )字段801及一原生指令字段802。 于一较佳实施例中,该运算码字段801包括一无效或一未使用运算码值,是 根据所使用之指令集架构。于一选^^性实施例中,可利用一有效(valid)运 算码,其限制为,于转译旁路模式中,避免执行具有该有效运算码之指令。
该原生指令字段802包括一个或多个欲执行之微指令。于一实施例中, 是将一个微指令内嵌于该原生指令字段802内部。于另一实施例中,是将三 个微指令之38位编码内嵌于该原生指令字段802内部。于第三实施例中, 是将欲依序执行之多个微指令提供给该原生指令字段802。
请参考图9,是显示根据本发明实施例之一转译旁路码卯0。该转译旁 路码900显示交错于该程序流程900之一些封装宏指令901、 902、 904,亦 包括数个有效宏指令903。如上所述,将该旁路码900载入系统存储器,于 该旁路码900中,将第一个指令之地址,作为一最后一个微指令内部之一分 支目标地址,该最后一个微指令是于该使能旁路序列752内部(图7),而该 序列是被载入该修补随机存取存储器751。因此,该使能旁路序列752执行 让该微处理器进入转译旁路模式所需之操作,以对该旁路码900之第一个指 令901执行一分支。当该第一个指令901进入该转译级时,旁路逻辑单元检 测该无效/未使用运算码、从其内部去除该内嵌之原生指令、以及将该原生 指令提供到该原生总线上用以执行。
当最后一个封装指令904被提供至该转译级时,旁路逻辑单元从其内部 去除该内嵌之原生指令,该原生指令为一微码分支,对应于储存在该修补随 机存取存储器751内部之恢复上下文序列753之第一位置。因此,对应于该恢复上下文序列753之程序流程分支,用以恢复正常操作所需之上下文,并
终止转译旁路模式。
虽然本发明已以较佳实施例揭露如上,然其并非用以限定本发明,任何 本领域普通技术人员,在不脱离本发明之精神和范围内,当可作些许之更动 与润饰,因此本发明之保护范围当视后附之申请专利范围所界定者为准。
权利要求
1. 一种执行一对多微码修补之装置,包括一修补阵列,被配置用以接收一微码只读存储器地址,及用以判断于上述修补阵列中,上述微码只读存储器地址是否匹配多个入口其中之一,并被配置用以输出一对应之分支指令,及当上述微码只读存储器地址匹配时,用以设定一命中信号;一多工器,被配置用以由上述修补阵列接收上述分支指令,并用以接收一微指令,其对应于一微码只读存储器之上述微码只读存储器地址,且被配置用以根据上述命中信号之状态,将上述微指令或上述对应之分支指令提供至一指令寄存器,其中,上述分支指令指定一微码分支目标地址;以及一随机存取存储器,被配置用以储存多个修补指令,其中,上述修补指令取代上述微指令被执行,且其中,将上述修补指令之第一个储存于上述随机存取存储器之一位置,对应于上述微码分支目标地址。
2. 如权利要求1所述的执行一对多微码修补之装置,其中,上述微码 只读存储器搡作上耦接一转译器,是于一微处理器之一转译级内,且其中, 上述微码只读存储器地址是对应于上述转译器所提供之下一个入口点。
3. 如权利要求1所述的执行一对多微码修补之装置,其中,上述入口 包括32个入口,且其中,每一入口包括一对应之微码只读存储器地址及该 对应之分支指令。
4. 如权利要求1所述的执行一对多微码修补之装置,更包括 一修补载入器,操作上耦接至系统存储器及一基本输入输出系统之只读存储器,是被配置用以从上述系统存储器取得上述对应之分支指令及上述修 补指令,以及,用以将上述对应之分支指令载入上述修补阵列,并用以将上 述修补指令载入上述随机存取存储器。
5. 如权利要求4所述的执行一对多微码修补之装置,其中,于转译一 微处理器重置信号后,及执行储存于上述基本输入输出系统之只读存储器之 指令前,上述修补载入器载入上述对应之分支指令及上述修补指令,且其中, 上述分支指令及上述修补指令储存于上述基本输入输出系统之只读存储器。
6. 如权利要求4所述的执行一对多微码修补之装置,其中,上述修补 载入器是根据一机器特定寄存器内 一修补位之状态来执行特权搡作系统指令,并根据上述之执行,载入上述对应之分支指令及上述修补指令。
7. —种执行一对多微码修补之方法,该微码修补是对应于储存于微码 只读存储器之一微指令,该方法包括于一微处理器之一转译级内,将一微码只读存储器地址同时提供至一微码只读存储器及一修补阵列;于该修补阵列中,判断该微码只读存储器地址是否匹配多个入口其中之 一,并输出一对应之分支指令及设定一命中信号,其中,该分支指令指定一微码分支目标地址;回应该命中信号之设定,将该对应之分支指令传递至一指令寄存器用以 执行;以及转移至一微码随机存取存储器之一位置,对应于该微码分支目标地址, 随后并执行一或多个修补指令,其储存于该微码随机存取存储器之该位置。
8. 如权利要求7所述的执行一对多微码修补之方法,其中,该微码只 读存储器地址,由一转译器提供,以回应下一个入口点之产生。
9. 如权利要求7所述的执行一对多微码修补之方法,其中,所述入口 包括32个入口,且其中,每一入口包括一对应之微码只读存储器地址及该 对应之分支指令。
10. 如权利要求7所述的执行一对多微码修补之方法,更包括由系统存储器取得该分支指令及该一或多个修补指令,并将该分支指令 载入该修补阵列,及将该一或多个修补指令载入该微码随机存取存储器。
11. 如权利要求7所述的执行一对多微码修补之方法,更包括 于转译一微处理器重置信号后,及执行储存于基本输入输出系统之只读存储器之指令前,由该基本输入输出系统之只读存储器取得该分支指令及该 一或多个修补指令,并将该分支指令载入该修补阵列,及将该一或多个修补 指令载入该微码随机存取存储器。
12. 如权利要求11所述的执行一对多微码修补之方法,其中,上述载 入,是以执行特权操作系统指令为根据,并根据一机器特定寄存器内一修补 位之状态来进行上述执行。
13. —种执行微码修补之装置,该微码修补来自于系统存储器,该装置 包括一修补阵列,被配置用以接收一微码只读存储器地址,及用以判断于上述修补阵列中,上述微码只读存储器地址是否匹配多个入口其中之一,并被 配置用以输出一对应之分支指令,及当上述微码只读存储器地址匹配时,用以设定一命中信号;一多工器,被配置用以由上述修补阵列接收上述分支指令,并用以接收 一微指令,其对应于一微码只读存储器之上述微码只读存储器地址,且被配 置用以根据上述命中信号之状态,将上述微指令或上述对应之分支指令提供至一指令寄存器,其中,上述分支指令指定一微码分支目标地址;一随机存取存储器,被配置用以储存微指令之一使能旁路序列,其中, 上述使能旁路序列取代上述微指令被执行,且其中,于上述使能旁路序列中, 将一第一微指令储存于上述随机存取存储器之一位置,对应于上述微码分支 目标地址,且其中,于上述使能旁路序列中,最后一个微指令是指定一分支 到系统存储器之一旁路位置,且其中,上述使能旁路序列之执行使一微处理 器进入旁路模式;以及旁路逻辑单元,当上述微处理器进入上述旁路模式时被使能,并被配置 用以检测从系统存储器所读取之封装指令、从上述封装指令内部去除原生指 令、以及将上述原生指令直接提供至一原生指令总线执行。
14. 如权利要求13所述的执行微码修补之装置,其中,上述微码只读 存储器操作上耦接一转译器,是于一微处理器之一转译级内,且其中,上述 微码只读存储器地址是对应于上述转译器所提供之下一个入口点。
15. 如权利要求13所述的执行微码修补之装置,其中,上述入口包括 32个入口,且其中,每一入口包括一对应之卩鼓码只读存储器地址及该对应之 分支指令。
16. 如权利要求13所述的执行微码修补之装置,更包括 一修补载入器,操作上耦接至系统存储器及一基本输入输出系统之只读存储器,是被配置用以从该系统存储器取得上述对应之分支指令及上述微指 令之使能旁路序列,以及,用以将上述对应之分支指令载入上述修补阵列, 并用以将上述微指令之使能旁路序列载入上述随机存取存储器。
17. 如权利要求16所述的执行微码修补之装置,其中,于转译一微处 理器重置信号后,及执行储存于上述基本输入输出系统之只读存储器之指令 前,上述修补载入器载入上述对应之分支指令及上述微指令之使能旁路序 列,且其中,上述分支指令及上述微指令之使能旁路序列,是储存于上述基本输入输出系统之只读存储器。
18. 如权利要求16所述的执行微码修补之装置,其中,上述修补载入 器是根据一机器特定寄存器内 一修补位之状态来执行特权操作系统指令,并 根据上述之执行,载入上述对应之分支指令及上述微指令之使能旁路序列。
19. 一种执行微码修补之方法,该微码修补来自于系统存储器,是对应 于储存于微码只读存储器之一微指令,该方法包括于一微处理器之一转译级内,将一微码只读存储器地址同时提供至一微 码只读存储器及一修补阵列;于该修补阵列中,判断该微码只读存储器地址是否匹配多个入口其中之 一,并输出一对应之分支指令及设定一命中信号,其中,该分支指令指定一 微码分支目标地址;回应该命中信号之设定,将该对应之分支指令传递至一指令寄存器用以 执行;先转移至一微码随机存取存储器之一位置,对应于该微码分支目标地 址,随后并执行一使能旁路序列,其储存于该微码随机存取存储器之该位置, 其中,随后之执行包括让一微处理器进入原生旁路模式及转移至系统存储器 之一旁路位置;以及从该旁路位置读取指令、检测封装指令、从该封装指令内部去除原生指 令、及将该原生指令直接提供至一原生指令总线执行。
20. 如权利要求19所述的执行微码修补之方法,其中,该微码只读存 储器地址,由一转译器提供,以回应下一个入口点之产生。
21. 如权利要求19所述的执行微码修补之方法,其中,所述入口包括 32个入口,且其中,每一入口包括一对应之4敬码只读存4诸器地址及该对应之 分支指令。
22. 如权利要求19所述的执行微码修补之方法,更包括 由该系统存储器取得该分支指令及该使能旁路序列,并将该分支指令载入该修补阵列,及将该使能旁路序列载入该微码随机存取存储器。
23. 如权利要求19所述的执行微码修补之方法> 更包括 于转译一微处理器重置信号后,及执行基本输入输出系统之只读存储器之指令前,由基本输入输出系统之只读存储器取得该分支指令及该使能旁路 序列,并将该分支指令载入该修补阵列,及将该使能旁路序列载入该微码随机存取存储器。
24.如权利要求23所述的执行微码修补之方法,其中,上述载入,是 以执行特权操作系统指令为根据,并根据一机器特定寄存器内 一修补位之状 态来进行上述执行。
全文摘要
一种快速及弹性执行实时微码修补之装置。于一实施例中,提供一种执行实时微码修补之装置。该装置包括一修补阵列及一多工器。该修补阵列接收一微码只读存储器地址,并于该修补阵列中,判断该微码只读存储器地址是否匹配多个入口其中之一。当该微码只读存储器地址匹配时,该修补阵列输出一对应之修补指令及设定一命中信号。该多工器,由该修补阵列接收该修补指令,并接收一微指令,系对应于一微码只读存储器之微码只读存储器地址。该多工器,根据该命中信号之状态,将该微指令或该对应之修补指令,提供给一指令寄存器。
文档编号G06F9/24GK101286116SQ20081010878
公开日2008年10月15日 申请日期2008年6月2日 优先权日2007年7月24日
发明者G·葛兰·亨利, 泰瑞·派克斯 申请人:威盛电子股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1