CN107085513B - 微处理器以及选择性解压缩微程序码的方法 - Google Patents
微处理器以及选择性解压缩微程序码的方法 Download PDFInfo
- Publication number
- CN107085513B CN107085513B CN201611196462.0A CN201611196462A CN107085513B CN 107085513 B CN107085513 B CN 107085513B CN 201611196462 A CN201611196462 A CN 201611196462A CN 107085513 B CN107085513 B CN 107085513B
- Authority
- CN
- China
- Prior art keywords
- microcode
- instructions
- instruction
- memory
- micro
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 46
- 230000015654 memory Effects 0.000 claims abstract description 135
- 230000006837 decompression Effects 0.000 claims abstract description 26
- 238000012545 processing Methods 0.000 claims description 60
- 230000006835 compression Effects 0.000 description 50
- 238000007906 compression Methods 0.000 description 44
- 230000008569 process Effects 0.000 description 15
- 230000004044 response Effects 0.000 description 15
- 238000010586 diagram Methods 0.000 description 8
- 238000012546 transfer Methods 0.000 description 8
- 239000004065 semiconductor Substances 0.000 description 5
- 230000008901 benefit Effects 0.000 description 4
- 239000004744 fabric Substances 0.000 description 3
- 238000004590 computer program Methods 0.000 description 2
- 235000015114 espresso Nutrition 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000015572 biosynthetic process Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000006073 displacement reaction Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000003786 synthesis reaction Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/3017—Runtime instruction translation, e.g. macros
- G06F9/30178—Runtime instruction translation, e.g. macros of compressed or encrypted instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
- G06F9/328—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for runtime instruction patching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3889—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
- G06F9/3891—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute organised in groups of units sharing resources, e.g. clusters
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
Abstract
本发明提供一种微处理器以及选择性解压缩微程序码的方法。该微处理器包括:多个存储器,上述存储器的每一个用以维持多个微程序码指令,其中上述存储器的至少一第一存储器用以提供多个压缩微程序码指令的多个M位宽微程序码字组,上述存储器的至少一第二存储器用以提供多个未压缩微程序码指令的多个N位宽微程序码字组,其中M以及N为大于零的整数且N大于M;以及一解压缩单元,在上述压缩微程序码指令自至少上述第一存储器存取之后且在执行前,由上述解压缩单元用以解压缩上述压缩微程序码指令。本发明能够降低微处理器的复杂度、减小微处理器的体积。
Description
本申请是申请日为2014年9月4日、申请号为201410447345.1、发明名称为“微处理器以及选择性解压缩微程序码的相关方法”的申请的分案申请。
技术领域
本发明有关于选择性压缩以及解压缩微程序码指令。
背景技术
现代先进的微处理器通常包括执行复杂及/或微处理器指令集架构的不常执行的指令微程序码。以微程序码实现指令集架构一些指令的好处为可降低微处理器其他功能单元(如执行单元)的复杂度。当指令集架构的指令数目以及复杂度增加时也需要微程序码,基于这项需求,微处理器会额外以非易失性存储器(如只读存储器(ROM))来储存微程序码。然而,增加存储器会消耗微处理器的实体资源,而这个问题将随着多核微处理器的核数目增加而加剧,因其中每一个核皆具有存储器用以储存微程序码。
发明内容
本发明提出一种微处理器。上述微处理器包括一或多个存储器,每一上述的一或多个存储器用以持有多个微程序码指令。至少一第一上述存储器用以提供多个压缩微程序码指令的M位宽微程序码字组,至少一第二上述存储器用以提供多个未压缩微程序码指令的N位宽微程序码字组,M以及N为大于零的整数,且N大于M。微处理器也包括一解压缩单元,在上述压缩微程序码指令自至少一上述第一存储器存取之后以及在上述压缩微程序码指令被执行之前,上述解压缩单元用以解压缩上述压缩微程序码指令。
本发明还提出一种选择性解压缩微程序码的方法。上述选择性解压缩微程序码的方法包括接收来自一存储器的一第一N位宽微程序码字组。上述选择性解压缩微程序码的方法也包括,判断上述第一N位宽微程序码字组的一既定部分是否为一既定数值。上述选择性解压缩微程序码的方法也包括,若上述既定部分并非上述既定数值,解压缩上述第一N位宽微程序码字组而产生一M位宽微程序码字组,其中M及N为大于零的整数,且M大于N。上述选择性解压缩微程序码的方法也包括,若上述既定部分为上述既定数值,接收来自上述存储器的一第二N位宽微程序码字组,并组合部分的上述第一N位宽微程序码字组以及上述第二N位宽微程序码字组而产生上述M位宽微程序码字组。
本发明还提出一种产生选择性压缩微程序码的方法。上述产生选择性压缩微程序码的方法包括接收一来源码,上述来源码包括多个微程序码组合语言指令,其中部分的上述微程序码组合语言指令的每一个皆以上述来源码的一指示所标示。产生选择性压缩微程序码的方法也包括,对于上述微程序码组合语言指令的每一个,若并非以上述指示所标示,则产生上述微程序码组合语言指令的一单一字组压缩二进制表示式,若由上述指示所标示,则产生上述微程序码组合语言指令的一多字组未压缩二进制表示式。
本发明还提出一种产生描述方法,适用于产生一解压缩微程序码装置的一描述。上述产生描述方法包括,接收一来源码,其中上述来源码包括多个微程序码组合逻辑语言指令。上述产生描述方法也包括,对于上述微程序码组合逻辑语言指令的每一个,产生一未压缩二进制表示式。上述产生描述方法也包括,对于上述微程序码组合语言指令的每一唯一指令,产生上述唯一指令的对应的上述未压缩二进制表示式的部分对应至一压缩二进制表示式的一对应关系。
本发明还提出一种微处理器。上述微处理器包括多个存储器,上述存储器的每一个用以持有多个微程序码指令。上述存储器的至少一第一存储器用以提供多个压缩微程序码指令的多个M位宽微程序码字组,并且上述存储器的至少一第二存储器用以提供多个未压缩微程序码指令的多个N位宽微程序码字组,其中M以及N为大于零的整数,且N大于M。上述微处理器也包括一解压缩单元,在上述压缩微程序码指令自至少上述第一存储器存取之后且于执行上述压缩微程序码指令之前,上述解压缩单元用以解压缩上述压缩微程序码指令。
本发明还提出一种选择性解压缩微程序码的方法,上述选择性解压缩微程序码的方法适用于解压缩具有多个存储器的一微处理器中的多个微程序码指令,上述存储器的每一个用以持有上述微程序码指令。上述选择性解压缩微程序码的方法包括,自上述存储器的至少一第一存储器存取上述压缩微程序码指令的多个M位宽微程序码字组。上述选择性解压缩微程序码的方法也包括,自上述存储器的至少一第二存储器存取多个未压缩微程序码指令的多个N位宽微程序码字组,其中M以及N是大于零的整数且N大于M。上述选择性解压缩微程序码的方法也包括,解压缩自上述第一存储器所存取的上述压缩微程序码指令。上述选择性解压缩微程序码的方法也包括,传送上述未压缩微程序指令而不需解压缩。
本发明还提出一种计算机程序产品,编程于至少一非暂态计算机可使用介质并与一计算装置一并使用。上述计算机程序产品包括,一计算机可用程序码体现于上述非暂态计算机可使用介质以指定一微处理器。上述计算机可用程序码包括,一第一程序码,指定多个存储器,每一上述存储器用以持有多个微程序码指令,其中上述存储器的至少一第一存储器用以提供多个压缩微程序码指令的多个M位宽微程序码字组。上述存储器的至少一第二存储器用以提供多个未压缩微程序码指令的多个N位宽微程序码字组,其中M以及N为大于零的整数且N大于M。上述计算机可用程序码也包括,一第二程序码,指定一解压缩单元,在上述压缩微程序码指令自上述第一存储器被存取后以及上述压缩微程序码指令被执行前,上述解压缩单元用以解压缩上述压缩微程序码指令。
本发明能够降低微处理器的复杂度、减小微处理器的体积。
附图说明
图1显示根据本发明一实施例所述的多核微处理器的方块图。
图2显示根据本发明图1实施例所述的处理核的详细方块图。
图3显示根据本发明图2实施例所述的解压缩单元的详细方块图。
图4显示根据本发明一实施例所述的由组合程序选择性压缩微程序码指令的流程图。
图5显示根据本发明一实施例所述的建立选择性压缩微程序码的流程图。
图6显示根据本发明一实施例所述的由组合程序组合微程序码的流程图。
图7显示根据本发明一实施例所述图2的复杂指令转译器(尤其是图3的解压缩单元)的动作流程图。
图8-图13显示根据本发明另一实施例所述的具有微程序码存储器的微处理器持有不同组合的压缩与解压缩的微程序码指令的方块图。
其中,附图中符号的简单说明如下:
100 微处理器
102 处理核
104 核微程序码只读存储器
106 仲裁逻辑
108 非核只读存储器
114 非核微程序码修补随机存取存储器
202 指令快取
204 简单指令转译器
206 暂存器别名表
208 保留站
212 执行单元
214 引退单元
216 指令存取单元
218 结构程序计数器
222 第一多工器
224 目标地址
226 微指令
232 非结构微程序码程序计数器
235 指令间接暂存器
236 微程序
237 微转译器
239 解压缩单元
242 结构指令
244 第一微指令
245 选择控制输入
246 第二微指令
247 第一微程序码指令
248 选择控制输入
251 第二微程序码指令
252 微程序码地址
253 未压缩微程序码指令
254 非结构微程序码存取地址
255 微指令信息
262 存储器子系统
264 暂存器
292 第二多工器
294 指令转译器
296 复杂指令转译器
306 修补内容可寻址存储器
308 修补地址
353 未压缩微程序码指令
355 38位结果
392 三端输入多工器
394 解压缩器
396 控制逻辑
398 缓冲器
402 第一微程序码组合语言指令
412 第一逃离指针
414 第二微程序码组合语言指令
432 第二逃离指针
434 下16位
436 上6位
438 上22位
1299 核修补随机存取存储器
502 来源码
504 组合语言
506 选择性压缩二进制微程序码
508 所有微程序码指令的列表
512 压缩程序
514 压缩表
516 解压缩描述
518 逻辑产生程序(ESPRESSO)
524 解压缩器暂存器传递语言文件
602~612、702~714 步骤。
具体实施方式
在此所述的微处理器,大多但非全部的微程序码指令压缩且维持于微程序码存储器中。微处理器包括一解压缩单元,用以选择性地对选择的压缩微程序码指令解压缩,例如图2的解压缩单元239。根据本发明的一实施例,维持于存储器的微程序码指令并未压缩,因而较存储器所维持的字节宽度更长。在此情况下,微程序码指令分为两个部分,并分别储存于存储器不同的两个字组中。在这些状况下,一既定数值(在此称为“跳出(escape)指针”)放置(例如,通过微程序码组合程序)于两字组序列第一字组的一既定部分。当解压缩单元侦测跳出指针存在于由存储器所读取的第一字组时,解压缩单元结合两字组的适当部分而产生未压缩微程序码指令。此方式有利于提供大多数维持于存储器中的微程序码指令能够被压缩,并使其宽度较不包括于选择性压缩机制的实现方式为短。
再者,许多实施例描述具有多个微程序码存储器的微处理器,至少一微程序码存储器具有压缩的微程序码指令的宽度以提供压缩微程序码指令,至少一微程序码存储器为具有非压缩微程序码指令的宽度以提供非压缩微程序码指令。在此详述压缩宽度以及非压缩宽度的核、非核以及修补微程序码存储器的各种组合。
请参考图1,图1显示根据本发明一实施例所述的多核微处理器100的方块图。微处理器100的实体位于一集成电路上,微处理器100包括许多处理核100、由许多处理核102所共用的非核只读存储器(ROM)108、由许多处理核102所共用的非核微程序码修补随机存取存储器(RAM)114、以及耦接处理核102至非核只读存储器108和非核微程序码修补随机存取存储器114的仲裁逻辑106(也称为控制逻辑)。每一处理核102包括对应的核微程序码只读存储器104,此对应的核微程序码只读存储器104并不与其他处理核102分享,而是专属于各自的处理核102。每一处理核102经由对应的总线112耦接至仲裁逻辑106。非核只读存储器108、非核微程序码修补随机存取存储器114、以及核微程序码只读存储器104皆为持有微程序码指令。
微处理器100包括称之为非核的部分。该非核部分为微处理器100的一部分但不属于任何处理核102的部分。非核只读存储器108以及非核微程序码修补随机存取存储器114位于微处理器100的非核部分。在一实施例中,处理核102是单一设计并重复复制。图1的实施例中显示四个处理核102,而其他实施例则具有不同数目的处理核102。仲裁逻辑106也安置于微处理器100的非核部分,当多个处理核102要求存取非核只读存储器108或非核微程序码修补随机存取存储器114时,由仲裁逻辑106执行仲裁决定。
非核只读存储器108提供某数量的字组(称为“J”)来储存微程序码指令,并可被所有处理核102所存取。每一核微程序码只读存储器104提供某数量的字组(称为“K”)来储存微程序码指令,并只能被对应的处理核102所存取。非核只读存储器108的J个字组与对应的核微程序码只读存储器104的K个字组,位于不同于处理核的微程序码存储器地址空间的地址空间上。总括来说,对于每一处理核,其对应的核微程序码只读存储器104与非核只读存储器108,提供J+K字组的储存空间给可被处理核102所存取的微程序码指令。
在一实施例中,非核只读存储器108具有J个可定址的存储器位置,每一个可定址的存储器位置皆为压缩微程序码指令的宽度。在一实施例中,每一非核只读存储器108具有K个可定址的存储器位置,每一个可定址的存储器位置皆为压缩微程序码指令的宽度。在一实施例中,压缩微程序码指定的宽度为28位,而非压缩或解压缩的微程序码指令的宽度为38位。
根据本发明的一实施例,非核只读存储器108包括为所有处理核102共用的单一读取端口,以及根据仲裁演算法用以授权处理核102使用读取端口的仲裁逻辑106。根据本发明的一实施例,若在一既定要求周期内仅有一处理核102要求存取非核只读存储器108时,则仲裁逻辑106允许此处理核102的要求;若在一既定要求周期内有多个处理核102要求存取非核只读存储器108时,则仲裁逻辑106依轮流法(round-robin)的顺序准予存取,但其他仲裁演算法亦可运用在本发明中。其他实施例中,可使非核只读存储器108对于每一处理核102均包括一读取端口。然而,应注意的是,当非核只读存储器108包括更多的读取端口时将增加更大的晶粒面积,因此与晶粒面积相关的技术功效就会降低。
利用非核只读存储器108的优点为,当从非核只读存储器108存取微程序码指令时,其可能以增加延迟时间的方式,作为降低微处理器100面积的代价。延迟时间的增加会造成每一处理核102的微程序码单元至非核只读存储器108之间更大的距离,也就是传送延迟会因额外的距离而增加,因而需要额外的管线级以及相关的额外时脉周期。此外,延迟时间的增加亦可归咎于因非核只读存储器108共用资源且必须分配给每个处理核102,并当多个处理核102要求存取非核只读存储器108时所造成的现象。再者,非核只读存储器108的共享本质可能导致变动的存取延迟时间,不像核微程序码只读存储器104具有固定的延迟时间。然而,在一些实施例中,增加及/或变动的延迟时间作为降低晶粒面积的代价。有利的是,非核只读存储器108的大小可利用在实施例所述的选择性微程序码压缩而进一步降低。
参考图2,图2显示根据本发明图1实施例所述的处理核102的详细方块图。处理核102包括一管线级,该管线级包括许多功能单元。在一实施例中,处理核102为一超纯量(superscalar)、非循序执行(out-of-order execution)、管线化数据的处理核。处理核102包括指令存取单元216、其再耦接至指令快取202、其再耦接至指令转译器294、其再耦接至暂存器别名表(RAT)206、其再耦接至保留站208、其再耦接至执行单元212、其再耦接至引退单元214。执行单元212自暂存器264(结构的或非结构的)以及存储器子系统262接收运算元。引退单元214引退微指令结果至暂存器264以及存储器子系统262。指令转译器294经由图1的总线112,耦接至仲裁逻辑106。存取单元216包括处理核102的结构程序计数器218,当引退单元214引退指令时,引退单元214更新结构程序计数器218。存取单元216提供结构指令存取地址至指令快取202。根据结构程序计数器218,存取单元216产生结构存取地址。此外,执行单元212可执行分支指令,且提供分支目标地址至存取单元216,用以产生结构存取地址。最后,存取单元216的分支预测器(图中并未显示)可提供预测分支目标地址,用以产生结构存取地址。结构程序计数器218与由指令转译器294所维持的指令非结构微程序码程序计数器224不同,并且由存取单元216所产生而传送至指令快取202的结构存取地址,与由存取单元216的微程序236(也称为控制逻辑)所产生的非结构微程序码存取地址254亦不同,这些将在以下详述。
指令快取202所快取的结构指令242,也称为微指令或ISA指令,由微处理器100(例如:x86、ARM、SPARC等等)的指令集架构所定义。指令转译器294翻译结构指令242成为处理核102微架构的微指令226,指令转译器294通常具有精简指令集(RISC)体系相关的特征。
指令转译器294以程序顺序提供微指令至暂存器别名表206。暂存器别名表206在引退单元214的重新排列缓冲器中,以程序顺序分配微指令的项目。暂存器别名表206执行暂存器264的重新命名。暂存器别名表206提供微指令至保留站208,当每一微指令的来源运算元可获得,且执行单元212能够执行该微指令时,微指令从保留站208被发送至执行单元212且以非循序方式来执行。引退单元214通过将执行单元212所执行微指令的结果,以程序顺序引退指令至处理核102的架构状态。执行单元212可包括载入单元、储存单元、整数单元、浮点数单元、分支单元、单一指令多重数据流计算机模组(Single instruction,multiple data,SIMD)单元等等。载入单元自第一阶(level-1,L1)数据快取中读出数据,储存单元将数据写入至第一阶数据快取。第二阶(level-2,L2)数据快取可作为第一阶数据快取以及指令快取202的备用储存装置。
指令转译器294自图2的指令快取202接收结构指令242的多个区块。结构指令242也称为微指令242或ISA指令242。指令转译器294转译结构指令242为提供至暂存器别名表206的实现微指令226。指令转译器294包括简单指令转译器(SIT)204、复杂指令转译器(CIT)296以及第二多工器292。简单指令转译器204输出实现第一微指令244以及微程序码地址252。复杂指令转译器296,也称为微程序码单元296,接收微程序码地址252,并提供实现第二微指令246。第二多工器292以一输入端自简单指令转译器204接收第一微指令244,并以另一输入端自复杂指令转译器296接收第二微指令246,且根据选择控制输入248提供实现微指令226至图2的执行单元212。
复杂指令转译器296包括微程序236、图1的核微程序码只读存储器104、指令间接暂存器(IIR)235、第一多工器222、解压缩单元239以及微转译器237。微程序236接收微程序码地址252,且维持非结构微程序码程序计数器(micro-PC)232。核微程序码只读存储器104接收根据非结构微程序码程序计数器232所存取的地址254。此外,非核只读存储器108也经由总线112,接收非结构微程序码存取地址254。第一多工器222的第一输入端接收来自非共用的核微程序码只读存储器104的微程序指令251,第二输入端则接收来自共用的非核只读存储器108的微程序码指令249(经由总线112),并根据由微程序236所产生的选择控制输入245而输出第一微程序码指令247。解压缩单元239接收来自第一多工器222的第一微程序码指令247,并且选择性地解压缩第一微程序码指令247,以产生未压缩微程序码指令253。微转译器237转译由解压缩单元239接收的未压缩微程序码指令253,以产生由复杂指令转译器296所输出的实现第二微指令246。由简单指令转译器204所产生的实现第一微指令244以及由复杂指令转译器296所产生的实现第二微指令246,皆为微处理器100微架构的微指令集的微指令226,并可由执行单元212管线执行。
第二多工器292由选择控制输入248所控制。通常第二多工器292选择来自简单指令转译器204的第一微指令244;然而,当简单指令转译器204遇到复杂结构指令242并转移控制权至(或经由设陷(traps)移转至)复杂指令转译器296时,简单指令转译器204控制选择控制输入248,而使得第二多工器292选择来自复杂指令转译器296的第二微指令246。当暂存器别名表206遭遇具有特殊位组的微指令226,以指出其是在顺序执行复杂结构指令242过程中最后的微指令226时(在此表示为“.T”位),暂存器别名表206控制选择控制输入248而使得第二多工器292回到选择来自简单指令转译器204的第一微指令244。此外,当引退单元214准备好引退微指令226但其状态指示此微指令226已造成一例外情况时,引退单元214控制选择控制输入248而使得第二多工器292选择来自复杂指令转译器296的第二微指令246。
简单指令转译器204接收结构指令242且将其解码,以决定结构指令242为简单微指令或复杂微指令。简单结构指令242是简单指令转译器204可为其发出所有实现微指令226以实现结构指令242的指令,亦即复杂指令转译器296不为简单结构指令242提供任何实现微指令。相反的,复杂结构指令242要求复杂指令转译器296提供若非全部、也是至少一部分的实现微指令226。在一实施例中,对结构指令242的子集合而言,简单指令转译器204发出实现结构指令242的第一部分微指令244以实现结构指令242,然后转移控制权至复杂指令转译器296,最后发出剩下微指令246来实现结构指令242。受控的第二多工器292首先将来自简单指令转译器204的实现微指令244转换成微指令226并提供至执行单元212,其次将来自复杂指令转译器296的实现微指令246转换成为微指令226并提供至执行单元212。简单执行转译器204知道由复杂指令转译器294所采用的各种微程序码程序的起始微程序码地址并用来产生各种复杂结构指令242的实现微指令226,并当简单指令转译器204解码一复杂结构指令242时,提供相关的微程序码地址252至复杂指令转译器296的非结构微程序码程序计数器232。简单指令转译器204发出的所有第一微指令244是被相对高比例执行的结构指令242,特别是结构指令242倾向由ISA机器语言程序以频繁的方式所执行,而仅有相对小比例需要复杂指令转译器296提供第二微指令246。在一实施例中,简单指令转译器204是利用众所周知的合成工具所合成的布林逻辑门方块。
复杂指令转译器296输出实现第二微指令246序列至第二多工器292。核微程序码只读存储器104或非核只读存储器108,储存微程序码程序的选择性压缩第二微程序码指令251以及选择性压缩微程序码指令249。核微程序码只读存储器104/非核只读存储器108输出选择性压缩第二微程序码指令251/选择性压缩微程序码指令249以响应非结构微程序码存取地址254,其中非结构微程序码存取地址254储存于非结构微程序码程序计数器232。通常,非结构微程序码程序计数器232自简单指令转译器204接收微程序码地址252的初始值,以响应简单指令转译器204所解码的复杂结构指令242。在其他情况下,比如响应一重置或例外时,非结构微程序码程序计数器232分别接收重置微程序码程序地址或适当的微程序码例外处理地址。一般来说,微程序236通过微程序码指令的大小(根据本发明的一实施例,微程序码指令的大小为核微程序码只读存储器104或非核只读存储器108中字组的大小)来递增非结构微程序码程序计数器232,用以依序通过微程序码程序。另外,微程序236依据由微转译器237所产生的目标地址224来更新非结构微程序码程序计数器232,以响应解码控制类型微程序码指令(例如分支指令);或响应控制类型微指令226的执行而由执行单元212所产生的目标地址来更新非结构微程序码程序计数器232;或是以位于核微程序码只读存储器104或非核只读存储器108的非序列位置来更新非结构微程序码程序计数器232以启动分支。核微程序码只读存储器104以及非核只读存储器108被制造于与微处理器100相同的半导体晶粒上。
除了实现复杂结构指令242的部分的简单结构指令242的第一微指令244,简单指令转译器204也产生微指令信息255,微指令信息255写入至指令间接暂存器(IIR)235。储存于指令间接暂存器235的微指令信息255包括有关结构指令242被转译的信息,例如辨别由结构指令242所指定的来源以及目标暂存器以及结构指令242的格式,诸如结构指令242是否操作于存储器的运算元或于微处理器100的一架构暂存器264。这样允许微程序码程序成为通用,也就是每一不同的来源及/或目标架构暂存器264不需要具有不同微程序码程序。特别的是,简单指令转译器204知道暂存器264,并在转译由结构指令242所提供的暂存器信息后,经由微指令信息255提供至暂存器264的适当暂存器中。微指令信息255也包括位移域、即时域、常数域、对于每一来源运算元以及微指令226本身的重新命名信息、指出实现结构指令242的微指令226序列的第一以及最后一个微指令的信息、以及由简单指令转译器204解码结构指令242时所收集的有用信息的其他位。
微转译器237接收来自解压缩单元239的未压缩微程序码指令253以及指令间接暂存器235的内容,并产生实现第二微指令246做响应。微转译器237根据指令间接暂存器235所接收的信息,例如根据结构指令242的格式以及由其指定的来源及/或目标架构暂存器264的组合,来转译某些未压缩微程序码指令253至微指令246的不同的序列。在一些状况下,大部分的微指令信息255与未压缩微程序码指令253做合并以产生实现第二微指令246。在一实施例中,每一未压缩微程序码指令253为38位宽,且每一第二微指令246大约为200位宽。在一实施例中,微转译器237能够自未压缩微程序码指令253,产生最多三个第二微指令246。微转译器237包括产生实现第二微指令246的布林逻辑门。
由于简单指令转译器204产生微指令信息255,故核微程序码只读存储器104与非核只读存储器108不需要储存由指令间接暂存器235所提供的微指令信息255,因此微转译器237所提供的一个优点为可减少核微程序码只读存储器104与非核只读存储器108的大小。再者,微程序码程序可包括较少的条件分支指令,因微程序码程序不需要包括针对每一不同微指令格式、以及针对每一来源及/或目标架构暂存器264的组合的个别程序。例如,若复杂结构指令242为存储器型式,简单指令转译器204可产生第一微指令244为开端,其包括第一微指令244以载入来自存储器的来源运算元而进入暂时暂存器264,而微转译器237可产生第二微指令246以从暂时暂存器将结果储存于存储器;若复杂结构指令242为暂存器格式,作为开端的第一微指令244可从结构指令242指定的来源暂存器移动来源运算元至暂时暂存器264,而微转译器237可产生第二微指令246以移动来自暂时暂存器的结果至由指令间接暂存器235所指定的架构目标暂存器264。在一实施例中,微转译器237在许多方面与申请日为2010年4月23日的美国专利案US 12/766,244中所述的微转译器237相似,该美国专利请求优先权至2009年8月14日的美国临时申请案号US61/234,008,其在2011年2月17号公开为美国公开号US2011/0040953的专利,每一个在此通过引用将其整体并入本文,并供各方面说明之用。
在另一实施例中,指令转译器294不包括微转译器237,而自核微程序码只读存储器104以及非核只读存储器108所存取的第二微程序码指令251以及微程序码指令249则在选择性解压缩的后,成为可由执行单元212执行的微指令。
应注意的是,非结构微程序码程序计数器232与结构程序计数器218不同;也就是,非结构微程序码程序计数器232不能维持结构指令242的地址,而维持于非结构微程序码程序计数器232的地址并不在系统存储器地址空间之内。
如上所述,第一微程序码指令247为储存于微处理器100的一或多个的核微程序码只读存储器104以及非核只读存储器108的非结构指令,且第一微程序码指令247是处理核102根据储存于非结构微程序码程序计数器232的非结构微程序码存取地址254所存取与使用,进而实现微处理器100的指令及结构指令242。未压缩微程序码指令253由微转译器237转译成第二微指令246而由执行单元212执行,或在本发明的另一实施例中,未压缩微程序码指令253直接由执行单元212执行(在此为第二微指令246)。未压缩微程序码指令253为非结构指令的意思为其并非微处理器100的指令集(ISA)结构的指令,而是根据与结构指令集不同的指令集所编码的。非结构微程序码程序计数器232并非由微处理器100的指令集结构所定义,且与结构定义程序计数器218有所不同。微程序码用以实现以下所述微处理器的指令集结构的某些或所有指令。响应于解码微程序码实现结构指令242,微处理器100,特别是简单指令转译器294,将转移控制权至与结构指令242相关的微程序码程序。微程序码程序包括微程序码指令。执行单元212执行未压缩微程序码指令253,或根据图2的实施例,未压缩微程序码指令253还转译成第二微指令246而被执行单元212所执行。由执行单元212执行未压缩微程序码指令253(或由未压缩微程序码指令253转译的第二微指令246)的结果是由结构指令242所定义的结果。因此,由执行单元212集体执行的关于结构指令242的微程序码程序(或由执行单元212集体执行的微程序码程序指令所转译的第二微指令246)来执行结构指令242;也就是由执行单元212集体执行的实现未压缩微程序码指令253(或由执行单元212集体执行的未压缩微程序码指令253转译的第二微指令246),执行结构指令242所指定的动作于结构指令242所指定的输入值,而产生结构指令242所定义的结果。此外,当为了调整微处理器而重置微处理器时,微程序码指令可被执行(或转译成被执行的微指令)。
根据本发明的一实施例,图1的仲裁逻辑106包括要求伫列(图中并未显示),其持有接收自处理核102并对非核只读存储器108或非核微程序码修补随机存取存储器114进行存取的要求。根据本发明的一实施例,每一介于仲裁逻辑106以及处理核102的总线112包括要求部分以及响应部分。关于要求部分,处理核102指定所要求的微程序指令字组的非结构微程序码存取地址254。关于响应部分,仲裁逻辑106提供微程序码指令字组、地址、核编号以及有效指针。微程序码指令字组、地址以及核编号仅于有效指针指示有效时才为有效。核编号指定仲裁逻辑106提供一响应至先前要求存取非核只读存储器108或非核微程序码修补随机存取存储器114的处理核102。地址指定由非核只读存储器108或非核微程序码修补随机存取存储器114所存取的微程序码指令字组的地址。根据本发明的一实施例,仲裁逻辑106于总线112设置延迟(Stall)信号至处理核102,用以指出仲裁逻辑106不能接收更多来自处理核102要求存取非核只读存储器108的请求。只要能够再次接收请求,仲裁逻辑106取消设置延迟信号。根据本发明的一实施例,若暂存器别名表206设置延迟信号至指令转译器294以指示无法接收更多的微指令226时,则指令转译器294清除任何正在进行的存取非核只读存储器108的动作。只要暂存器别名表取消设置延迟信号,微程序236会在传送至暂存器别名表206的最后微指令226的地址后的下一地址开始存取微程序码指令。根据本发明的另一实施例,指令转译器294储存正在存取非核只读存储器108或非核微程序码修补随机存取存储器114的状态,以便能避免重新存取相关的正在存取的微程序码指令。
非核只读存储器108的存取延迟大于对每一核微程序码只读存储器104的存取延迟。根据本发明的一实施例,核微程序码只读存储器104具有三个周期的存取延迟,并且非核只读存储器108的存取延迟在实施例中是可变的,其中其读取端口与多个处理核102相共用。
参考图3的方块图,其更详细显示根据本发明图2实施例所述的解压缩单元239,同样显示于图3的是修补内容可寻址存储器(CAM)306。当非结构微程序码存取地址254符合修补内容可寻址存储器306中项目之一的内容时,持有修补地址308的可寻址存储器306会将修补地址308从可寻址存储器306输出至微程序236,以响应非结构微程序码存取地址254。这种情况下,微程序236输出修补地址308作为非结构微程序码存取地址254而不是下一序列存取地址(或目标地址224),以响应非核微程序码修补随机存取存储器114在总线112上输出修补微程序码指令249。这样将引发从非核微程序码修补随机存取存储器114撷取修补微程序码指令249,而不是分别从非核只读存储器108或核微程序码只读存储器104撷取不想要的微程序码指令249或第二微程序码指令251。另一种做法是将可寻址存储器306以及非核微程序码修补随机存取存储器114的内容在响应包括系统软件的结构指令时加以载入,这些软件可以是基本输入输出系统(BIOS)或运作于微处理器100的操作系统。解压缩单元239包括解压缩器394、缓冲器398、三端输入多工器392以及控制逻辑396。
解压缩器394自图2的第一多工器222接收压缩的第一微程序码指令247,并解压缩此压缩的第一微程序码指令247而成未压缩微程序码指令353,且提供至三端输入多工器392的第一输入端。根据本发明的一实施例,解压缩器394包括由暂存器传递语言(RTL)码(如硬件描述(Verilog)码)所合成的可程序逻辑阵列(PLA),并由图6的可程序逻辑阵列产生器616自动产生。解压缩器394对压缩的第一微程序码指令247解压缩的方式的实施例,将于下文中详细叙述。
若控制逻辑396要求缓冲器398接收并载入28位的第一微程序码指令247的位[15:0],则缓冲器398遵循其要求而执行,否则缓冲器398维持其先前的数值。根据本发明的一实施例,在28位第一微程序码指令247的位[15:0]载入至缓冲器398的时脉周期后的下一个时脉周期中,缓冲器398的内容加上目前28位微程序码字组247的位[21:0],以产生三端输入多工器392的第二输入端的38位结果355。
控制逻辑396接收微程序码字组247的位[27:16],并决定其数值是否为既定的逃离指针数值。根据本发明的一实施例,既定逃离指针数值为0x3FF。若是如此,控制逻辑396控制暂存器398载入28位第一微程序码指令247的位[15:0]。此外,当第一多工器222提供下一个28位微程序码字组247时,控制逻辑396控制三端输入多工器392选择其第二输入端以提供未压缩微程序码指令253至微转译器237,也就是选择合并缓冲器398的16位内容与28位的微程序码字组247的位[21:0]的38位结果355。下一个28位微程序码字组247会是由非核只读存储器108/核微程序码只读存储器104所撷取的后续字组的微程序码指令249/后续字组的第二微程序码指令251,其跟随在载入至缓冲器398的字组247后面。
根据本发明的另一实施例,解压缩单元239可于相同时脉周期中接收具有逃离指针的微程序字组,以及两段未压缩微程序码指令。在此实施例中,缓冲器398被省略,且在该时脉周期时该相邻字组的适当部分被合并,并且提供至三端输入多工器392的第二输入端,而控制逻辑396则控制三端输入多工器392选择其第二输入端。
三端输入多工器392在第三输入端接收38位微程序码字组112,例如来自非核微程序码修补随机存取存储器114。若目前微程序码指令的来源是38位宽的存储器,例如来自非核微程序码修补随机存取存储器114,控制逻辑396控制三端输入多工器392以选择其第三输入端(也就是38位的微程序码字组112),否则控制逻辑396控制三端输入多工器392选择其第一输入端或第二输入端。若目前微程序码指令的来源是28位宽的存储器时,例如储存(除了压缩微程序码指令外)要求合并的未压缩微程序码字组的分离部分的非核只读存储器108或核微程序码只读存储器104、以及若先前字组包括逃离指针(即图4的第二逃离指针432)时,控制逻辑396控制三端输入多工器392选择其第二输入端(也就是38位的结果355)。若目前微程序码指令的来源为储存压缩微程序码指令(除了未压缩微程序码字组的分离部分以及逃离指针外)的28位宽的存储器,而且目前字组并未包括逃离指针时,控制逻辑控制三端输入多工器392选择其第一输入端(也就是解压缩器394的38位的未压缩微程序指令353)。
根据本发明的一实施例,由三端输入多工器392提供至微转译器237的38位未压缩微程序码指令253包括:根据一些指令格式,且通常为非立即指令的13位操作码域、5位的第一来源运算元地址域、5位的第二来源运算元地址域、5位的目标运算元地址域、指定运算元大小的4位大小域、指定每一5位运算元暂存器域如何由微转译器237进行解码的4位域、指定微程序码指令在执行x86指令的连续微程序码指令中是否为最后指令的一位“.T”域、以及一额外位。通常为立即指令的其他38位未压缩微程序码指令253的格式包括:包括16位即时数值的16位即时域,例如一即时运算元或跳跃指令的目标地址、以及上述其他域的子集合,如除了5位第二运算元域以外的域以及较小的操作码域。
请参考图4,其显示由组合程序选择性压缩微程序码指令的流程图。图4包括两个流程图,说明将第一微程序码组合语言指令402组合进单一字组压缩二进制指令404的范例,以及将由第一逃离指针412表示的第二微程序码组合语言指令414与包括逃离指针的多字组未压缩二进制指令进行组合的范例。
第一流程图说明将第一微程序码组合语言指令402组合进以单一字组储存于微程序码存储器的压缩二进制指令404,微程序码存储器如核微程序码只读存储器104或非核只读存储器108。图4的实施例中,单一字组为28位宽,也就是如图所示的核微程序码只读存储器104或非核只读存储器108的宽度。当单一字组压缩二进制指令404由核微程序码只读存储器104或非核只读存储器108读取出来时,如本发明所述,将经由图3的解压缩器394来解压缩为未压缩微程序码指令。在图4的实施例中。第一微程序码组合语言指令402将第一通用暂存器R2以及第二通用暂存器R3的内容相加,并将结果写入第三通用暂存器R4。在此实施例中,此为在组合之时存在压缩表项目的微程序码指令,其允许组合语言将其压缩,并在下文终将有详细描述。
第二流程图说明冠有第一逃离指针412的第二组合语言微程序码指令414组合至多字组未压缩二进制指令424的情形,多字组未压缩二进制指令424分离成两个28位字组。第一字组包括位于第一字组的既定位的第二逃离指针432。第二逃离指针432为图2的解压缩单元239(特别是控制逻辑396)用以响应与辨识,以将包含第二逃离指针432的字组的剩下部分434,与来自核微程序码只读存储器104或非核只读存储器108的下个字组的一部分438相结合。在本发明的一实施例中,逃离指针既定数值为0x3FF,第一字组的既定位是位[27:16]。然而既定位以及既定数值并非限定于实施例,而其他的实施例则为具有不同既定数值以及不同既定位。逃离指针为一既定字串(如:图4所示的“ESCAPE”),程序设计者可在微程序码来源码文件中,在微程序码指令前插入一行,这样会使得组合语言不会压缩随后的微程序码指令,但会分离该指令为两个具有压缩指令的长度的字组,且于二进制字组的开头包含第二逃离指针432。
第一字组的下16位为多字组未压缩二进制指令424的下16位434,第二字组的上22位为多字组未压缩二进制指令424的上22位438。当控制逻辑396于第一字组中侦测到第二逃离指针432位于开头的位置时,下16位434以及上22位438将由解压缩单元239加以组合。在实际操作上,第二字组的上6位436可全为零。在图4的实施例中,第二微程序码组合语言微程序码指令414将第二通用暂存器R3以及结构暂存器(例如,x86结构暂存器ESI)的内容相加,并将结果写入第三通用暂存器R4。在此实施例中,该微程序码指令在组合操作进行时压缩表项目并不存在,故需要包括第一逃离指针412以避免产生组合错误,这部分将于下文中做更详细的说明。
请参考图5的流程图,其说明建立选择性压缩微程序码的流程。流程开始于来源码502,其中来源码502由微程序码设计者所开发,而来源微程序码502可包括第一逃离指针412。组合程序504接收来源码502以及压缩表514。在一实施例中,压缩表514可包含于由以下所述的压缩程序512所产生的文件中。组合程序504使用压缩表514来组合来源码502,以产生选择性压缩二进制微程序码506。选择性压缩二进制微程序码506包括单一字组压缩二进制指令(如图4的单一字组压缩二进制指令404)以及多字组未压缩二进制指令,多字组未压缩二进制指令包括第二逃离指针432,如图4的多字组未压缩二进制指令424。来源码502通常包括多来源码文件,多来源码文件经由组合程序504的组合而产生选择性压缩二进制微程序码506。
组合程序504也产生所有微程序码指令的列表508,所有微程序码指令的列表508包含于选择性压缩二进制微程序码506之中。在一实施例中,所有微程序码指令的列表508是人类可读的清单,该清单包括在选择性压缩二进制微程序码506中的每一微程序码指令的项目。对于每一微程序码指令,该项目指定了:(1)其于核微程序码只读存储器104或非核只读存储器108的相关地址;(2)其未压缩二进制表示式,例如其38位二进制表示式;以及(3)一种与其组合语言表示式相似但经修正以方便压缩程序512产生压缩表514。根据微程序码指令是否由来源码502的第一逃离指针412所标示的微程序码指令,38位数值的未压缩二进制表示式,若非压缩为单一字组压缩二进制指定404,就是分离成图4的多字组未压缩二进制指令424的下16位434以及上22位438。
压缩程序512接收所有微程序码指令的列表508,并借此产生压缩表514。压缩表514为组合程序504的输入,随后组合程序504组合来源码502而成为选择性压缩二进制微程序码506。通常,随后的组合为新的或修改后的来源码502。此外,随后的组合可与原来用以产生压缩表514的来源微程序码502相同,例如当压缩表一开始是空的时候。
压缩程序512检查所有微程序码指令的列表508,并产生唯一指令表。举例来说,所有微程序码指令的列表508可包括多个具有一个指令的实例,其将R2减去R1并将结果放置于R3;然而,当产生唯一指令表时,压缩程序512将这些实例都当作一单一与唯一的微程序码。一个使得压缩微程序码有极高可能性的事实在于,对于许多微程序码指令而言,多个具有相同指令的实例可存在来源码502中。使微程序码指令单一化的的准则可根据不同实施例使用的压缩方法而改变,以下将通过一实施例做详细说明。在一实施例中,压缩程序512是以Python语言所撰写的程序。
在产生唯一指令表之后,压缩程序512指定每一唯一微程序码指令一对应的唯一数值。压缩表514包括一对一对应的唯一微程序码指令以及唯一压缩数值。在随后的组合实例中,组合程序504利用此对应关系来压缩并未由逃离指针标示的来源码502组合语言指令而成为压缩指令404。压缩数值变成单一字组压缩二进制指令404(或成为压缩二进制指令的一部分),解压缩器394解压缩该二进制数值而成为未压缩微程序指令353(或其一部分是未压缩微程序指令)。在一实施例中,仅对38位未压缩二进制表示式的一部分进行压缩,而剩下的位并未压缩。在一实施例中,将38位未压缩二进制表示法的22个位,压缩成28位压缩二进制指令404中的12个位,38位未压缩二进制表示式的剩下的16个位跳过未压缩程序而成为28位压缩二进制指令404的16位。如下所述,解压缩器394执行相反的相似流程。
在一实施例中,压缩器512产生三个压缩表514。压缩表514之一指定唯一压缩数值对应至即时跳跃微程序码指令;压缩表514之一指定唯一压缩数值对应至即时非跳跃微程序码指令;以及压缩表514之一指定唯一压缩数值对应至所有其他微程序码指令,在此称为“杂项(miscellaneous)”微程序码指令。在一实施例中,压缩的即时跳跃指令的28位压缩二进制指令404具有二进制“1”的数值于首位位(亦即位[27]),然而即时非跳跃微程序码指令以及杂项微程序码指令的28位压缩二进制指令404具有二进制“0”的数值于首位位,即时非跳跃微程序码指令的28位压缩二进制指令404在位[26:16]中的数值为0x000至0x2FF之间,而位于杂项微程序码指令的28位压缩二进制指令404的位[26:16]中的数值为0x300至0x7FF之间。在一实施例中,即时跳跃以及非即时跳跃的28位压缩二进制指令404的即时数值位于28位微程序码字组247的位[15:0]中。
压缩器512也产生解压缩描述516。解压缩描述516在概念上可理解为压缩表514的逆转,亦即解压缩描述516包括压缩表514的唯一压缩数值与唯一未压缩微程序码指令二进制表示式的一对一对应关系(或其一部分)。如上所述,解压缩器394可跳过压缩第一微程序码指令247的部分位(在一实施例为16位),使得解压缩描述516仅需包括部分的唯一12位压缩数值与未压缩微程序码指令二进制表示式的唯一22位的一对一对应关系。解压缩器394将唯一22位部分与跳过的16位部分结合以产生最终提供至微转译器237的38位未压缩微程序码指令253。因此,在一实施例中,解压缩描述516对应压缩表514的唯一12位压缩数值至唯一22位数值,且该对应关系用于制造或模拟输出唯一22位数值作为未压缩微程序码指令353的一部分,以响应接收对应的压缩第一微程序码指令247的唯一12位压缩数值的位[27:16]。
逻辑产生程序518(如众所皆知的ESPRESSO logic minimizer program)将解压缩描述516转变成解压缩器暂存器传递语言文件524,解压缩器暂存器传递语言文件524可用以制造或模拟解压缩器394。在一实施例中,解压缩器暂存器传递语言文件524可合成至形成解压缩器394的可程序逻辑阵列中。
一旦微处理器100的实例,特别是硬件的解压缩器394,利用解压缩器暂存器传递语言文件524所给定实例而被制造或模拟时,则由微处理器100的实例所执行的随后选择性压缩二进制微程序码506,必须由组合程序504利用压缩表514进行组合,其中压缩表514对应至产生解压缩器暂存器传递语言文件524的解压缩描述516。否则,解压缩器394可能不正确地解压缩选择性压缩二进制微程序码506。
举例来说,由微处理器100的模拟软件所执行的选择性压缩二进制微程序码506,必须由组合程序504利用压缩表514进行组合,其中压缩表514对应于在模拟软件中使用解压缩器暂存器传递语言文件524而产生的解压缩器描述516。根据另一实施例,其中载入至非核微程序码修补随机存取存储器114的修补微程序码被选择性地压缩,选择性压缩二进制微程序码506必须由组合程序504利用压缩表514进行组合,其中压缩表514对应至解压缩器暂存器传递语言文件524所产生的解压缩器描述516,并且解压缩器描述516用以制造微处理器100的实例。
根据另一实施例,微处理器具有许多半导体层,而通常核微程序码只读存储器104与非核只读存储器108被制造于最后一层,这样可提供给微程序码开发者一个继续发展微程序码的机会,尽管微处理器100需要先被制造的半导体层(通常包括解压缩器394)已被制造完成。在此状况下,必须由组合程序504利用压缩表514做组合,其中压缩表514对应至解压缩描述516,而解压缩描述516利用解压缩器暂存器传递语言文件524来制造微处理器100的实例。这点特别有利,因为能够在某些情况提供微程序码设计者在硬件设计者完成后数周的时间内继续开发微程序码。在此状况下,来源码502可包括未在所有微程序码指令的列表508中的新微程序码指令,其中所有微程序码指令的列表508用以自微处理器100的实例制造而产生解压缩器暂存器传递语言文件524。在此状况下,微程序码设计者需要在新微程序码指令之前插入第一逃离指针412至来源码502,如以下对图6步骤608的描述。
图6所示的流程图说明利用组合程序组合微程序码的流程。流程开始于步骤602。
在步骤602中,组合程序504接收图5的来源码502以及压缩表514。组合程序504利用压缩表514组合来源码502,来源码可包含逃离指针412。在组合实例开始时,压缩表514可为空的。要注意的是,微程序码开发者可能不知是否他已经插入了一新的微程序码指令至来源码502,例如在目前压缩表514并未具有一微程序码指令的对应关系。在此情况下,当组合程序504组合来源码502时就会产生相关的错误。流程则前进至步骤604。
在步骤604中,若组合程序504判断步骤602在组合中发生错误则流程前进至步骤606,否则流程前进至步骤612。特别的是,组合错误可能因为压缩表514不包括来源码502微程序码指令的对应关系所造成,其中来源码502微程序码指令并未由第一逃离指针412所标示。
步骤606中,组合程序504输出所有微程序码指令的列表508给来源码502,流程前进至步骤608。
步骤608中,在组合程序504因压缩表514并未包括对应关系而产生错误的该微程序码指令的前面,插入第一逃离指针412至来源码502中。在一实施例中,由微程序码设计者插入第一逃离指针412。在一实施例中,可通过一程序利用由组合程序504所产生的错误信息,自动插入第一逃离指针412。在另一组合来源码502的实例中流程将回到步骤602,直到没有错误产生为止。应注意的是,压缩表514在来源码502第一次被组合时是空的,在此状态下,组合程序504会对来源码502的所有微程序指令产生错误;然而,因为组合程序已产生所有微程序码指令的列表508,因此压缩器512可执行用以产生压缩表514,而相同的来源码502(没有插入第一逃离指针412的)可被重新组合而产生可由微处理器100的实例所执行的选择性压缩二进制微程序码506,其中微处理器100的实例包括解压缩器394的实例,在第二实例中,解压缩描述516产生解压缩器暂存器传递语言文件524,解压缩器暂存器传递语言文件524产生解压缩器394的实例,而解压缩描述516则由压缩器512所产生。
在步骤612中,组合程序504输出可用以制造微处理器100的所有微程序码指令的列表508、以及选择性压缩二进制微程序码506。具体而言,选择性压缩二进制微程序码506包括位于非核只读存储器108、核微程序码只读存储器104及/或非核微程序码修补随机存取存储器114的单一字组压缩二进制指令404以及多字组未压缩二进制指令424。流程结束于步骤612。
参考图7,所示的流程图说明图2的复杂指令转译器296的动作,尤其是图3的解压缩单元239的动作。流程开始于步骤702。
在步骤702中,图3的控制逻辑396接收图2的28位的压缩第一微程序码指令247的位[27:16],并对其解码。流程继续至步骤704。
在步骤704中,控制逻辑396判断是否在步骤702解码的目前28位的压缩第一微程序码指令247包括逃离指针。在一实施例中,若28位的压缩第一微程序码指令247的既定位等于一既定数值时,控制逻辑判断目前28位的压缩第一微程序码指令247包括逃离指针。在一实施例中,既定位为位[27:16],而既定数值为0x3FF,然而既定位以及既定数值并非做限定实施例之用。若目前28位的压缩第一微程序码指令247包括逃离指针,流程进行至步骤706;否则流程进行至步骤712。
在步骤706中,控制逻辑396控制缓冲器398载入28位的压缩第一微程序码指令247的位[15:0]。流程进行至步骤708。
在步骤708中,当下一28位的压缩第一微程序码指令247(例如,来自核微程序码只读存储器104或非核只读存储器108)到达时,控制逻辑396控制三端输入多工器392以选择由缓冲器398所输出的16位输出(例如,于步骤702解码的28位的压缩第一微程序码指令247的位[15:0])以及下一28位的压缩第一微程序码指令247的位[21:0]两者所结合的38位结果355,并输出此38位结果355作为38位未压缩微程序码指令253,其中此38位未压缩微程序码指令253在此情况下为未压缩的。在一实施例中,因为管线延迟或与其他处理核102争夺使用非核只读存储器108之故,下一28位的压缩第一微程序码指令247并未在一相对较大数量的时脉周期内到达。流程前进至步骤714。
在步骤712中,解压缩器394解压缩28位的压缩第一微程序码指令247成为38位的未压缩微程序码指令353。如上所述,在一实施例中,解压缩器394将28位的压缩第一微程序码指令247的12位对应至38位的未压缩微程序码指令353的22位,解压缩器394跳过28位的压缩第一微程序码指令247剩下的16位不进行对应,但这16位与对应的22位相结合而产生38位的未压缩微程序码指令353。在一实施例中,解压缩器394也包括多个多工器,其中多个多工器将对应的22位以及跳过的16位的每一位,导向至38位的未压缩微程序码指令353的各个位位置,以响应由解码28位的压缩第一微程序码指令247的逻辑所产生的选择信号。举例来说,在此实例中,压缩器512产生三个压缩表514以对应即时跳跃、即时非跳跃以及杂项微程序码指令,多工器直接根据三种类型的微程序码指令中,哪一种微程序码指令被压缩,而将对应的22位以及通过的16位导向至38位的未压缩微程序码指令353。举例来说,在一实施例中,在即时类型的微程序码指令的状态下,多个多工器将跳过的16位直接指向38位的未压缩微程序码指令353的即时域,尽管跳跃以及非跳跃的未压缩微程序码指令353的即时域位置不相同;然而在杂项指令的情况下,多个多工器将跳过的16位的子集合指向非即时的未压缩微程序码指令353的不同区域及/或子区域;并且多工器根据三种类型的压缩第一微程序码指令247的何者被解压缩,而将对应的22位的子集合指向不同的38位的未压缩微程序码指令353的区域及/或子区域。控制逻辑396控制三端输入多工器392自解压缩器394选择38位的未压缩微程序码指令353,并且输出选择结果353作为选择性压缩的38位未压缩微程序码指令253,在此情况下为对目前28位的压缩第一微程序码指令247解压缩,其中压缩第一微程序码指令247为步骤702所编码。流程前进制步骤714。
在步骤714,微转译器237转译选择性解压缩38位未压缩微程序码指令253成为第二微指令246,其中第二微指令246可由微处理器100的执行单元212所执行,流程结束于步骤714。
图8显示一实施例中非核只读存储器108为28位宽并维持压缩的微程序码字组,核微程序码只读存储器104为28位宽并维持压缩微程序码字组,以及非核微程序码修补随机存取存储器114为38位宽并维持非压缩微程序码字组。在另一实施例中,非核只读存储器108为38位宽并维持未压缩的微程序码字组而非压缩的微程序码字组,如图9、11、13所示,在此情况下三端输入多工器392可于一输入端接收来自非核只读存储器108的38位微程序码字组。在另一实施例,核微程序码只读存储器104为38位宽并维持非压缩微程序码字组而非压缩的微程序码字组,如图10所示,其中三端输入多工器392可于一输入端接收来自核微程序码只读存储器104的38位的微程序码字组。在另一实施例中,非核微程序码修补随机存取存储器114为28位宽并维持压缩微程序码字组而不是非压缩程序码字组,如图9所示,在此情况下来自非核微程序码修补随机存取存储器114的28位微程序码字组可提供至第一多工器222的一输入端,并选择以供应给三端输入多工器392、解压缩器394、控制逻辑396以及缓冲器398。再者,根据本发明的另一实施例,每一处理核102包括核修补随机存取存储器1299,核修补随机存取存储器1299的功能与非核微程序码修补随机存取存储器114,除了核修补随机存取存储器1299并非共用于多个处理核102而是各自对应至相对的处理核102,如图12、13所示。在图12的实施例中,核修补随机存取存储器1299为38位宽并维持未压缩微程序字组,在此情况下三端输入多工器392可于一输入端接收来自核修补随机存取存储器1299的38位微程序码字组。在图13的实施例中,核修补随机存取存储器1299为28位宽并维持压缩微程序码字组,在此情况下第一多工器222可在一输入端接收来自核修补随机存取存储器1299的28位微程序码字组。如上所述,在每一实施例中微程序码存储器为28位宽并维持压缩微程序码字组,微程序码存储器也可包括多字组未压缩二进制指令424,多字组未压缩二进制指令424可分为两个28位的字组。
在此所述的选择性压缩微程序码的性能的另一个优点,就是作为储存微程序码于微处理器的可程序非易失存储器越来越成为商业上可行的方式,微程序码可一直被开发直到微处理器100的零件的微程序码存储器的时间可被编程为止。再者,若零件/存储器可在现场被编程的,例如由使用者或现场技术人员,则使用者或技术人员还可在现场重新编程零件以修复错误。在任一情况中,新的来源微程序码502可能必须包括逃离指针,因为硬件的解压缩器394于该时间点被修复。
尽管所述的多个实施例中微程序码字组以及存储器皆被指定宽度,其中以范例叙述的三个实施例,其他实施例中的微程序码字组以及存储器可为不同宽度。再者,尽管在此所述的实施例中,压缩微程序码指令的宽度为特定宽度,并且未压缩微程序码指令的宽度为特定宽度,而这些实施例以范例的方式叙述,而其他实施例中各自的压缩以及非压缩微程序码指令可具有不同宽度。再者,尽管在此所述的多个实施例中使用选择性压缩微程序码指令于多核处理器,其他实施例包括单一微处理器,其中单一微处理器用以选择性压缩微程序码并包括具有压缩微程序码指令的微程序码存储器,而微程序码存储器具有未压缩微程序码指令亦可运用本发明而得以实施。最后,尽管在此所述的实施例在未压缩二进制表示式以及压缩二进制表示式之间具有特定对应关系,其他具有不同的对应关系的实施例则可能需要不同的微程序码指令集。特别的是,位的数目则多少与解压缩硬件可接受的延迟范围的需求有关。
当在此描述本发明的许多实施例,要知道这些实施例仅以范例的方式呈现而非限定于此。计算机相关领域技术人员皆了解,各种型式以及细节上的变形能够在不背离本发明的范围的情况下产生。举例来说,软件能够致能功能、制造、模拟、拟真、描述及/或测试在此所述的装置以及方法。这可经由使用一般的程序语言(例如:C、C++)、包括Verilog HDL、VHDL等等的硬件描述语言(hardware description languages,HDL)、或其他可得的程序语言。该软件可放置于任何已知的计算机可读介质,例如磁带(magnetic tape)、半导体、磁盘(magnetic disk)、或光盘(optical disc)(例如:CD-ROM、DVD-ROM等等),或是网络、有线、无线或其他通讯介质。在此描述的装置以及方法的实施例可包含于半导体智慧财产权核中,例如微处理器处理核(如体现或指定于硬件描述语言)以及转换制集成电路产品的硬件。此外,在此所述的装置以及方法可体现为硬件以及软件的组合。因此,本发明不应限定于任何在此所述的实施例,而应仅根据权利要求书的范围及其相似物来定义。特别的是,本发明可实现于微处理器装置,其中微处理器装置可用于通用计算机中。最后,该领域技术人员能够了解,他们能够使用揭露的概念以及特定的实施例最为基础而设计或调整其他架构,在不背离本发明于申请专利范围所定义的范围的情况下实现并完成本发明的相同目的。
Claims (5)
1.一种微处理器,其特征在于,包括:
多个存储器,分别用以维持多个微程序码指令,其中上述多个存储器的至少一第一存储器用以提供各自被合并为M位宽微程序码字组的多个压缩微程序码指令,其中上述多个存储器的至少一第二存储器用以提供各自被合并为N位宽微程序码字组的多个未压缩微程序码指令,其中M以及N为大于零的整数且N大于M;
解压缩单元,用以在上述多个压缩微程序码指令自上述多个存储器的上述至少一第一存储器被存取之后且被执行前,将M位宽压缩微程序码指令字组解压缩为N位宽未压缩微程序码指令字组;
多个处理核,其中,每一上述处理核包括核微程序码存储器;以及
第一非核微程序码存储器,共用于上述多个处理核,
其中,上述核微程序码存储器的每一个以及上述第一非核微程序码存储器是用以维持上述多个微程序码指令的上述多个存储器之一;
其中,上述核微程序码存储器的每一个是用以提供多个压缩微程序码指令的上述多个存储器的上述至少一第一存储器之一;
其中,上述第一非核微程序码存储器是用以提供多个未压缩微程序码指令的上述多个存储器的上述至少一第二存储器之一;以及
其中,上述第一非核微程序码存储器是能够写入的并且用以提供用于修补上述核微程序码存储器的压缩微程序码指令中的一或多个的修补微程序码指令,
其中,上述微处理器还包括:
第二非核微程序码存储器,共用于上述多个处理核,
其中,上述第一非核微程序码存储器还用以提供用于修补上述第二非核微程序码存储器的微程序码指令中的一或多个的修补微程序码指令。
2.根据权利要求1所述的微处理器,其特征在于,上述第二非核微程序码存储器位于所有上述处理核外部。
3.根据权利要求1所述的微处理器,其特征在于,上述解压缩单元还用以传送上述未压缩微程序码指令而不需解压缩。
4.一种用于解压缩微处理器中的微程序码指令的方法,其特征在于,所述微处理器具有分别用以维持多个微程序码指令的多个存储器,上述方法包括:
自上述多个存储器的至少一第一存储器存取各自被合并为M位宽微程序码字组的多个压缩微程序码指令;
自上述多个存储器的至少一第二存储器存取各自被合并为N位宽微程序码字组的多个未压缩微程序码指令,其中M以及N为大于零的整数且N大于M;
将自上述多个存储器的上述至少一第一存储器存取的M位宽压缩微程序码指令字组解压缩为N位宽未压缩微程序码指令字组;以及
传送未压缩微程序指令而不需解压缩,
其中,上述微处理器还包括各自包括核微程序码存储器的多个处理核以及共用于上述多个处理核的第一非核微程序码存储器,其中上述核微程序码存储器的每一个以及上述第一非核微程序码存储器是用以维持上述多个微程序码指令的上述多个存储器之一,
其中,自上述多个存储器的上述至少一第一存储器存取M位宽压缩微程序码指令的步骤包括:自上述核微程序码存储器的每一个存取上述M位宽压缩微程序码指令;以及
其中,自上述多个存储器的上述至少一第二存储器存取N位宽未压缩微程序码指令的步骤包括:自上述第一非核微程序码存储器存取上述N位宽未压缩微程序码指令;
其中,上述第一非核微程序码存储器是能够写入的,上述方法还包括:
自上述第一非核微程序码存储器存取用以修补上述核微程序码存储器的压缩微程序码指令中的一或多个的修补微程序码指令;
其中,上述微处理器还包括共用于上述多个处理核的第二非核微程序码存储器,上述方法还包括:
自上述第一非核微程序码存储器存取用以修补上述第二非核微程序码存储器的微程序码指令中的一或多个的修补微程序码指令。
5.根据权利要求4所述的用于解压缩微处理器中的微程序码指令的方法,其特征在于,上述第二非核微程序码存储器位于所有上述处理核外部。
Applications Claiming Priority (9)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201361893126P | 2013-10-18 | 2013-10-18 | |
US61/893,126 | 2013-10-18 | ||
US201361897327P | 2013-10-30 | 2013-10-30 | |
US61/897,327 | 2013-10-30 | ||
US14/088,620 US9372696B2 (en) | 2013-10-18 | 2013-11-25 | Microprocessor with compressed and uncompressed microcode memories |
US14/088,565 | 2013-11-25 | ||
US14/088,565 US9361097B2 (en) | 2013-10-18 | 2013-11-25 | Selectively compressed microcode |
US14/088,620 | 2013-11-25 | ||
CN201410447345.1A CN104216682B (zh) | 2013-10-18 | 2014-09-04 | 微处理器以及选择性解压缩微程序码的相关方法 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410447345.1A Division CN104216682B (zh) | 2013-10-18 | 2014-09-04 | 微处理器以及选择性解压缩微程序码的相关方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107085513A CN107085513A (zh) | 2017-08-22 |
CN107085513B true CN107085513B (zh) | 2020-06-12 |
Family
ID=52098223
Family Applications (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611196464.XA Active CN107092464B (zh) | 2013-10-18 | 2014-09-04 | 产生选择性压缩微程序码和选择性解压缩微程序码的方法 |
CN201611196462.0A Active CN107085513B (zh) | 2013-10-18 | 2014-09-04 | 微处理器以及选择性解压缩微程序码的方法 |
CN201410447345.1A Active CN104216682B (zh) | 2013-10-18 | 2014-09-04 | 微处理器以及选择性解压缩微程序码的相关方法 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611196464.XA Active CN107092464B (zh) | 2013-10-18 | 2014-09-04 | 产生选择性压缩微程序码和选择性解压缩微程序码的方法 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410447345.1A Active CN104216682B (zh) | 2013-10-18 | 2014-09-04 | 微处理器以及选择性解压缩微程序码的相关方法 |
Country Status (2)
Country | Link |
---|---|
CN (3) | CN107092464B (zh) |
TW (1) | TWI522910B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016130915A1 (en) * | 2015-02-13 | 2016-08-18 | Google Inc. | Transparent hardware-assisted memory decompression |
TWI582586B (zh) * | 2016-06-01 | 2017-05-11 | 神雲科技股份有限公司 | 輸出電腦系統的機器檢查例外資訊的方法 |
CN107656854A (zh) * | 2016-07-26 | 2018-02-02 | 佛山市顺德区顺达电脑厂有限公司 | 输出计算机系统的机器检查例外信息的方法 |
CN111384965B (zh) * | 2018-12-28 | 2022-06-17 | 上海寒武纪信息科技有限公司 | 数据压缩解压装置和数据解压方法 |
US11262938B2 (en) * | 2020-05-05 | 2022-03-01 | Silicon Motion, Inc. | Method and apparatus for performing access management of a memory device with aid of dedicated bit information |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5784585A (en) * | 1994-04-05 | 1998-07-21 | Motorola, Inc. | Computer system for executing instruction stream containing mixed compressed and uncompressed instructions by automatically detecting and expanding compressed instructions |
US6199126B1 (en) * | 1997-09-23 | 2001-03-06 | International Business Machines Corporation | Processor transparent on-the-fly instruction stream decompression |
CN101398752A (zh) * | 2007-09-29 | 2009-04-01 | 国际商业机器公司 | 重叠指令存取单元和重叠指令存取方法 |
CN101866279A (zh) * | 2009-08-14 | 2010-10-20 | 威盛电子股份有限公司 | 微处理器及其相关方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6691305B1 (en) * | 1999-11-10 | 2004-02-10 | Nec Corporation | Object code compression using different schemes for different instruction types |
US8621153B2 (en) * | 2009-12-26 | 2013-12-31 | Intel Corporation | Microcode refactoring and caching |
-
2014
- 2014-07-30 TW TW103125973A patent/TWI522910B/zh active
- 2014-09-04 CN CN201611196464.XA patent/CN107092464B/zh active Active
- 2014-09-04 CN CN201611196462.0A patent/CN107085513B/zh active Active
- 2014-09-04 CN CN201410447345.1A patent/CN104216682B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5784585A (en) * | 1994-04-05 | 1998-07-21 | Motorola, Inc. | Computer system for executing instruction stream containing mixed compressed and uncompressed instructions by automatically detecting and expanding compressed instructions |
US6199126B1 (en) * | 1997-09-23 | 2001-03-06 | International Business Machines Corporation | Processor transparent on-the-fly instruction stream decompression |
CN101398752A (zh) * | 2007-09-29 | 2009-04-01 | 国际商业机器公司 | 重叠指令存取单元和重叠指令存取方法 |
CN101866279A (zh) * | 2009-08-14 | 2010-10-20 | 威盛电子股份有限公司 | 微处理器及其相关方法 |
Also Published As
Publication number | Publication date |
---|---|
CN107085513A (zh) | 2017-08-22 |
CN107092464B (zh) | 2020-06-23 |
CN104216682A (zh) | 2014-12-17 |
CN104216682B (zh) | 2017-04-19 |
TW201516861A (zh) | 2015-05-01 |
CN107092464A (zh) | 2017-08-25 |
TWI522910B (zh) | 2016-02-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9372696B2 (en) | Microprocessor with compressed and uncompressed microcode memories | |
JP6849274B2 (ja) | 融合された単一のサイクルのインクリメント−比較−ジャンプを実施するための命令及びロジック | |
US10642617B2 (en) | Processor with an expandable instruction set architecture for dynamically configuring execution resources | |
US8601239B2 (en) | Extended register addressing using prefix instruction | |
US7473293B2 (en) | Processor for executing instructions containing either single operation or packed plurality of operations dependent upon instruction status indicator | |
US10768930B2 (en) | Processor supporting arithmetic instructions with branch on overflow and methods | |
US5598546A (en) | Dual-architecture super-scalar pipeline | |
CN107085513B (zh) | 微处理器以及选择性解压缩微程序码的方法 | |
JP6761565B2 (ja) | アウトオブオーダーハードウェアソフトウェア協調設計プロセッサにおいてスタック同期命令を用いてプレディケート値のスタックを実装し維持する方法および装置 | |
US7802078B2 (en) | REP MOVE string instruction execution by selecting loop microinstruction sequence or unrolled sequence based on flag state indicative of low count repeat | |
JPS6339931B2 (zh) | ||
KR20160075639A (ko) | 이미디에이트 핸들링 및 플래그 핸들링을 위한 프로세서 및 방법 | |
US9830155B2 (en) | Microprocessor using compressed and uncompressed microcode storage | |
US6012138A (en) | Dynamically variable length CPU pipeline for efficiently executing two instruction sets | |
EP3316130A1 (en) | Conversion system for a processor with an expandable instruction set architecture for dynamically configuring execution resources | |
US9483263B2 (en) | Uncore microcode ROM | |
KR20220091361A (ko) | 내용 어드레싱 가능 데이터 구조들을 사용한 효율적인 디플레이트 압축 해제 방법 및 장치 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |