CN104424128B - 变长指令字处理器系统和方法 - Google Patents
变长指令字处理器系统和方法 Download PDFInfo
- Publication number
- CN104424128B CN104424128B CN201410399873.4A CN201410399873A CN104424128B CN 104424128 B CN104424128 B CN 104424128B CN 201410399873 A CN201410399873 A CN 201410399873A CN 104424128 B CN104424128 B CN 104424128B
- Authority
- CN
- China
- Prior art keywords
- instruction
- micro
- block
- address
- branch
- 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 120
- 238000013507 mapping Methods 0.000 claims abstract description 314
- 238000012545 processing Methods 0.000 claims abstract description 14
- 238000004364 calculation method Methods 0.000 claims abstract description 7
- 230000015654 memory Effects 0.000 claims description 579
- 238000006243 chemical reaction Methods 0.000 claims description 51
- 230000006870 function Effects 0.000 claims description 27
- 230000007704 transition Effects 0.000 claims description 18
- 230000002441 reversible effect Effects 0.000 claims description 14
- 238000013519 translation Methods 0.000 claims description 12
- 241000287107 Passer Species 0.000 claims description 8
- 238000002360 preparation method Methods 0.000 claims description 6
- 239000003550 marker Substances 0.000 claims description 3
- 230000008569 process Effects 0.000 description 29
- 238000012546 transfer Methods 0.000 description 27
- 238000010586 diagram Methods 0.000 description 12
- 230000008520 organization Effects 0.000 description 12
- 230000002829 reductive effect Effects 0.000 description 8
- 238000003672 processing method Methods 0.000 description 6
- 230000009471 action Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 230000008901 benefit Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 239000000284 extract Substances 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000036961 partial effect Effects 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000001174 ascending effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000005429 filling process Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 230000000670 limiting effect Effects 0.000 description 1
- 230000000873 masking effect Effects 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- COCAUCFPFHUGAA-MGNBDDOMSA-N n-[3-[(1s,7s)-5-amino-4-thia-6-azabicyclo[5.1.0]oct-5-en-7-yl]-4-fluorophenyl]-5-chloropyridine-2-carboxamide Chemical compound C=1C=C(F)C([C@@]23N=C(SCC[C@@H]2C3)N)=CC=1NC(=O)C1=CC=C(Cl)C=N1 COCAUCFPFHUGAA-MGNBDDOMSA-N 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
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/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
-
- 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/22—Microcontrol or microprogram arrangements
- G06F9/26—Address formation of the next micro-instruction ; Microprogram storage or retrieval arrangements
-
- 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/22—Microcontrol or microprogram arrangements
- G06F9/26—Address formation of the next micro-instruction ; Microprogram storage or retrieval arrangements
- G06F9/261—Microinstruction address formation
-
- 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/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30032—Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
-
- 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/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
-
- 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
- G06F9/30149—Instruction analysis, e.g. decoding, instruction word fields of variable length 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/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/323—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for indirect branch 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3818—Decoding for concurrent execution
- G06F9/382—Pipelined decoding, e.g. using predecoding
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)
- Advance Control (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明提供了一种将一种指令集中的指令的地址映射为另一种指令集中的地址的系统和方法,应用于计算领域时能提高处理一种指令集中指令的系统处理另一种指令集中指令时的效率。
Description
技术领域
本发明涉及计算机,通讯及集成电路领域。
背景技术
变长指令(Variable Length Instruction)指的是字长不固定的指令。例如,在某个变长指令集中,指令的字长可以是1个字节、2个字节、3个字节、4个字节,或更多字节。定长指令(Fixed Length Instruction)指的是字长固定的指令。例如,在某个定长指令集中,所有指令的字长都4个字节。通常,变长指令集被用于复杂指令集计算机(ComplexInstruction Set Computer,CISC)中,而定长指令集被用于精简指令集计算机(ReducedInstruction Set Computer)中。通常而言,定长指令集中每条指令都完成一个操作(或动作)能更好地利用流水线的带来的执行效率;而变长指令集之中有些指令往往需要分步完成多个操作(或动作)导致流水线经常处于暂停状态,降低了流水线吞吐率,从而降低了处理器系统的整体性能。
对上述问题的一种解决方法是采用一个执行定长指令集指令的处理器核产生变长指令地址,根据该变长指令地址从存储器中获取指令,在执行该变长指令前将所述变长指令转换成一条或多条定长指令,再由该处理器核执行这些定长指令,从而提高流水线吞吐率。然而,所述转换会增加流水线的深度,使得分支预测错误时需要清空更多级数的流水线,依然会导致处理器系统性能的降低。
此外,现有的处理器体系结构普遍采用缓存将更低级存储器中的部分内容复制在其中,使这些内容能被更高级存储器或处理器核快速存取,以保证流水线的持续运行。基本的缓存结构通常在缓存缺失之后,才将低级存储媒介中的内容填充到缓存中,使得流水线不得不暂停以等待缺失部分被填充到缓存中。一些新的缓存结构,如:牺牲缓存、跟踪缓存以及预取等都是基于上述基本缓存结构并改善上述结构。然而,随着日渐扩大的处理器/存储器速度鸿沟,现行体系结构,特别是多种缓存缺失,已成为是制约现代处理器性能提升的最严重瓶颈。
本发明提出的方法与系统装置能直接解决上述或其他的一个或多个困难。
发明内容
本发明提出了一种变长指令字处理器系统,其特征在于,包括:处理器核,所述处理器核用以执行微操作;转换器,所述转换器用以将指令转换为微操作;微操作存储器,所述微操作存储器用以存储转换得到的微操作;映射模块,所述映射模块用以存储指令与微操作之间的地址映射关系。
可选的,所述转换器将指令块内地址转换为微操作块内地址。
可选的,所述转换器将分支指令的分支增量转换为补偿后的分支增量;所述补偿后的分支增量等于所述分支指令本身的块内地址与所述分支指令的分支增量之和。
可选的,所述变长指令字处理器系统还包括:结束标志存储器,所述结束标志存储器用以存储微操作存储器中每个微操作块的最后一个微操作的位置信息。
可选的,微操作存储器根据转换器对处理器核输出的完整指令地址或部分指令地址转换得到的微操作地址输出相应的微操作供处理器核执行。
可选的,所述变长指令字处理器系统还包括:微操作读缓冲,所述微操作读缓冲主动向处理器输出微操作供执行;和所述微操作读缓冲中的每一个微操作对应一个令牌传递器,所述令牌传递器用于传递令牌;所述微操作读缓冲主动向处理器核输出令牌所在的令牌传递器对应的微操作供处理器核执行。
可选的,所述变长指令字处理器系统还包括:轨道表,所述轨道表用以存储分支微操作的分支目标微操作地址信息;循迹器,所述循迹器前行到处理器核当前正在执行的微操作之后的第一个分支微操作,并输出该分支微操作的下一微操作的地址和目标微操作的地址;和当所述下一微操作或目标微操作尚未存储在微操作存储器中时,向微操作存储器填充所述下一微操作或目标微操作。
可选的,微操作存储器根据转换器对处理器核输出的部分指令地址转换得到的偏移地址从由循迹器指向的微操作块中输出相应的微操作供处理器核执行。
可选的,当按地址顺序执行同一微操作块内的微操作时,所述令牌从当前令牌传递器向相邻的令牌传递器传递;和当执行不同微操作块中的微操作时,所述令牌通过全局总线当前令牌传递器向相应的令牌传递器传递。
可选的,所述变长指令字处理器系统还包括更多低层次存储器;所述低层次存储器中存储的是指令或微操作。
可选的,所述转换器将不同指令集的指令转换为一种指令集的指令。
本发明还提出了一种变长指令字处理器方法,其特征在于,将指令转换为微操作,并建立指令地址和微操作地址之间的映射关系;根据所述映射关系将处理器核输出的指令地址转换为微操作地址,并根据所述微操作地址向处理器核输出相应微操作供执行;或直接根据处理器核输出的微操作地址向处理器核输出相应微操作供执行。
可选的,指令块地址与微操作块地址相等,并建立指令块内地址和微操作块内地址之间的映射关系。
可选的,通过转换对每个微操作块的最后一个微操作的位置进行标记。
可选的,根据指令的指令块地址找到微操作块,并将指令块内地址转换为微操作地址以从所述微操作块内找到相应微操作;且所述微操作是所述指令对应的至少一个微操作中的第一个微操作。
可选的,通过对指令块内从第一条指令到待寻址指令之间的指令数目计数,并对相应微操作块内从第一个微操作到待寻址微操作之间的对应每条指令的第一个微操作的微操作数目计数,将指令地址转换为微操作地址。
可选的,将分支指令块内地址与分支增量相加,得到相应分支微操作的补偿后的分支增量;和通过将分支微操作对应的微操作块的块地址和补偿后的分支增量相加,即可得到所述分支微操作对应的分支目标微操作地址。
可选的,在向缓存填充微操作时,计算所有分支微操作的目标微操作地址,并将所述目标微操作地址或所述目标微操作地址映射后的地址信息存储在轨道表中;和当执行到分支微操作时,直接得到所述目标微操作的位置信息。
可选的,在部分或全部所述分支微操作被执行前,预先将相应目标微操作填充到缓存中,并更新轨道表中的相应信息;和当执行到分支微操作时,直接得到所述目标微操作在缓存中的位置信息,或直接从缓存中找到所述目标微操作。
可选的,所述转换还能将一种或多种指令集的指令转换为另一种指令集的指令。
可选的,在所述系统中,所述转换器可以分多次将指令块转换为微操作块。
可选的,在所述系统中还包含一个移位器;当第一次对指令块进行转换且只转换从指令块中某条指令开始直到指令块结束的这一部分指令时,将转换得到的微操作按微操作块的最小地址边界对齐;当对所述指令块中部分或全部未转换的部分进行转换时,先由所述移位器将已转换部分的微操作移位存储到微操作块的合适位置,再将本次转换得到的微操作填入该微操作块的相应位置中。
可选的,在所述系统中,每次对指令块转换时,记录被转换指令在指令块中的位置信息以及转换得到的微操作在微操作块中的位置信息;当对所述指令块中部分或全部未转换的部分进行转换时,根据所述位置信息将已转换部分的微操作移位存储到微操作块的合适位置,再将本次转换得到的微操作填入该微操作块的相应位置中。
可选的,在所述系统中,当第一次对指令块进行转换且只转换从指令块中某条指令开始直到指令块结束的这一部分指令时,将转换得到的微操作按微操作块的最大地址边界对齐,并记录被转换指令在指令块中的位置信息以及转换得到的微操作在微操作块中的位置信息;当对所述指令块中部分或全部未转换的部分进行转换时,将本次转换得到的微操作与该微操作块中已转换的微操作拼接,使得全部转换得到的微操作按微操作块的最大地址边界对齐。
可选的,在所述系统中,每个微操作块中还记录了其顺序地址下一微操作块第一个微操作的位置信息。
可选的,在所述方法中,所述转换可以分多次将指令块转换为微操作块。
可选的,在所述方法中,当第一次对指令块进行转换且只转换从指令块中某条指令开始直到指令块结束的这一部分指令时,将转换得到的微操作按微操作块的最小地址边界对齐;当对所述指令块中部分或全部未转换的部分进行转换时,先将已转换部分的微操作移位存储到微操作块的合适位置,再将本次转换得到的微操作填入该微操作块的相应位置中。
可选的,在所述方法中,每次对指令决转换时,记录被转换指令在指令块中的位置信息以及转换得到的微操作在微操作块中的位置信息;当对所述指令块中部分或全部未转换的部分进行转换时,根据所述位置信息将已转换部分的微操作移位存储到微操作块的合适位置,再将本次转换得到的微操作填入该微操作块的相应位置中。
可选的,在所述方法中,当第一次对指令块进行转换且只转换从指令块中某条指令开始直到指令块结束的这一部分指令时,将转换得到的微操作按微操作块的最大地址边界对齐,并记录被转换指令在指令块中的位置信息以及转换得到的微操作在微操作块中的位置信息;当对所述指令块中部分或全部未转换的部分进行转换时,将本次转换得到的微操作与该微操作块中已转换的微操作拼接,使得全部转换得到的微操作按微操作块的最大地址边界对齐。
可选的,在所述方法中,每个微操作块中还记录了其顺序地址下一微操作块第一个微操作的位置信息。
对于本领域专业人士,还可以在本发明的说明、权利要求和附图的启发下,理解、领会本发明所包含其他方面内容。
有益效果
本发明所述处理器系统中最接近处理器核的缓存系统中存储的是微操作,且处理器核能直接对微操作寻址,直接由微操作存储器向处理器核提供微操作,不需要像现行复杂指令集计算机中向指令存储器寻址,在将指令转换成微操作,能降低流水线深度,提高流水线效率。特别在分支预测错误时,能减少浪费的流水线周期。
本发明所述处理器系统中的缓存系统与传统缓存系统仅在缓存缺失后才填充的机制不同,而是在处理器执行一条指令之前就对指令缓存系统中的微操作读缓冲进行填充,可以消除或充分掩盖隐藏因缓存缺失造成的运算单元等待时间。此外,本发明所述处理器系统中的的缓存系统能由微操作读缓冲主动向处理器核输出指令供执行,避免了在读取缓存的时延关键路径上的标签匹配,所以能运行在较高的时钟频率,且功耗也比传统缓存系统显著降低。
对于本领域专业人士而言,本发明的其他优点和应用是显见的。
附图说明
图1A是本发明所述的微操作存储器的一种组织方式;
图1B是本发明所述的微操作存储器的另一种组织方式;
图1C是低层次存储器中微操作数的存放方式;
图1D是包含本发明所述指令缓存系统的基本处理器系统的一个实施例;
图2是本发明所述指令缓存系统的基本处理器系统的另一个实施例;
图3是本发明所述改进的处理器核中指令地址生成的实施例;
图4是本发明所述指令块与微操作块对应关系的示意图;
图5A是本发明所述映射模块进行地址映射的一个实施例;
图5B是本发明所述映射模块进行地址映射的另一个实施例;
图5C是本发明所述映射模块进行地址映射的另一个实施例;
图6是本发明所述基于轨道表的处理器系统的一个实施例;
图7A是本发明所述轨迹点格式的实施例;
图7B是根据本发明技术方案使用轨道表建立新轨道的方法的一个实施例;
图7C是本发明所述循迹器读指针移动的实施例;
图8是本发明所述填充微操作读缓冲及由微操作读缓冲直接向处理器核提供微操作以供执行的实施例;
图9是本发明所述控制单元进行匹配的一个实施例;
图10是本发明所述传递令牌信号的一种实施例;
图11是本发明所述处理器系统的另一个实施例;
图12是本发明所述指令地址产生模块的另一个实施例;
图13是本发明所述处理器系统的又一个实施例;
图14是本发明所述指令地址产生模块的另一个实施例;
图15A是本发明所述包含多级缓存的处理器系统的一个实施例;
图15B是本发明所述包含多级缓存的处理器系统的另一个实施例;
图16是本发明所述包含多级缓存的处理器系统的另一个实施例;
图17是本发明所述包含多级缓存的处理器系统的另一个实施例;
图18是本发明所述包含多级缓存的处理器系统的另一个实施例;
图19是本发明所述包含多级缓存的处理器系统的另一个实施例;
图20A是本发明技术方案最终产生的映射关系的一个例子;
图20B是本发明所述产生映射关系的一种方法的实施例;
图20C是本发明所述指令块内地址转换器的一个实施例;
图20D是本发明所述产生映射关系的另一种方法的实施例;
图20E是本发明所述产生映射关系的另一种方法的实施例;
图20F是本发明所述对顺序地址下一指令块产生映射关系的一种实施例;
图20G是本发明所述产生映射关系的另一种方法的实施例。
具体实施方式
以下结合附图和具体实施例对本发明提出的高性能缓存系统和方法作进一步详细说明。根据下面说明和权利要求书,本发明的优点和特征将更清楚。需说明的是,附图均采用非常简化的形式且均使用非精准的比例,仅用以方便、明晰地辅助说明本发明实施例的目的。
需要说明的是,为了清楚地说明本发明的内容,本发明特举多个实施例以进一步阐释本发明的不同实现方式,其中,该多个实施例是列举式并非穷举式。此外,为了说明的简洁,前实施例中已提及的内容往往在后实施例中予以省略,因此,后实施例中未提及的内容可相应参考前实施例。
虽然该发明可以以多种形式的修改和替换来扩展,说明书中也列出了一些具体的实施图例并进行详细阐述。应当理解的是,发明者的出发点不是将该发明限于所阐述的特定实施例,正相反,发明者的出发点在于保护所有基于由本权利声明定义的精神或范围内进行的改进、等效转换和修改。同样的元器件号码可能被用于所有附图以代表相同的或类似的部分。
本发明所述的变长指令地址(Variable Length Instruction Address)指的是指令在主存储器中的存储地址,即可以根据该地址在主存储器中找到这条指令。在此为简单明了起见,均假设虚拟地址等于物理地址,对于需要进行地址映射的情况,本发明所述方法也可适用。在本发明中,当前指令可以指当前正在被处理器核执行或获取的指令;当前指令块可以指含有当前正被处理器执行的指令的指令块。
为便于说明,在本说明书中,术语“指令”代表变长指令,术语“微操作”代表定长指令;术语“指令块”代表指令地址高位相同的一组连续的指令,术语“微操作块”代表指令地址高位相同的一组连续的微操作。此外,在本发明中,如果一条变长指令所占的所有字节的地址高位不完全相同,即该指令跨越了两个指令块,则将该指令作为前一个指令块的最后一条指令,而该指令之后的一条指令作为后一个指令块的第一条指令。
在本发明中,分支微操作(Branch Micro-Op)或分支点(Branch Point)指的是任何适当的能导致处理器核改变执行流(Execution Flow)(如:非按顺序执行指令或微操作)的微操作形式。分支微操作指一条进行分支操作的微操作。微操作地址指微操作本身的地址,该地址由指令块地址和微操作偏移地址构成。分支目标指令指的是分支微操作造成的分支转移所转向的目标指令,分支目标指令地址指的是分支目标指令的指令地址。分支目标微操作指的是分支目标指令对应的第一个微操作,分支目标微操作地址指的是分支目标微操作的微操作地址,该地址由指令块地址和微操作偏移地址构成。
根据本发明技术方案,每条变长的指令先被转换一条或多条微操作,再由处理器核执行这些微操作,从而实现与直接执行所述变长指令相同的功能。请参考图1A,其为微操作存储器的一种组织方式。其中指令块110的块地址为8,块内共有8个字节,放置不等数目的变长指令,其块内偏移量(Offset)以字节(Byte)表示。指令块111、112是指令块110之后顺序的两个指令块。微操作数的组织是每块含有4个定长的微操作,如微操作块120、121、123是顺序的三个微操作块,其块地址分别为8、16、24,其块内偏移量以微操作为单位,在此例中以一个微操作占据一个字(Word)为例,以便于说明。在指令块110中字节0为部分不完整的指令,其起始字节在块地址为‘0’的指令块(此处未显示),从字节1开始是一个三字节的指令A,从字节4开始是个二字节的指令B,从字节6开始是个四字节的指令C,其后两个字节位于指令块111中的字节0和字节1,指令块111中从字节2开始是个三字节的指令D,从指令块111中字节5开始是一个二字节指令E。这四个指令被转换成相应的执行同样功能的微操作A、B、C、D存储在微操作处理器的微操作块120中,依次放置在0、1、2、3号字。因为微操作块120已被填满,指令E则被存放在顺序下一个微操作块121中的0号字。其他指令和微操作块的按同样规律放置,不再赘述。因为一个微操作块中的微操作数不一定等于相应的指令块中的字节数,所以有必要为这种组织方式统一提供一个块中最大地址偏移量,当微操作块地址指向最后一个微操作时,提示其顺序下一个微操作是存储在下一个微操作块中的0号字中。当微操作顺序执行时,处理器只要为微操作存储器的地址在每个时钟周期提供一个为‘1’的增量,就可从微操作存储器中顺序读出微操作。如当前地址指向8-2(此处第一个数字为块地址,第二个数字为块内偏移量),即120行第二个字C微操作,下一个时钟周期地址加‘1’为8-3,即指令D,此时块中最大地址偏移量与地址的偏移量3匹配,提示已到达微操作块的最后一个微操作。再下一个时钟周期,在前述提示下,处理器核产生的相应地址为16-0,即地址块121中的第一个微操作。当然,也可以使微操作存储器中一个微操作块的微操作数等于指令块中的字节数,如此即不需要块内结束标志的设置,在地址指向块内最后一个微操作数时加‘1’即可自动指向下一个指令块中第一个微操作。
这种微操作数组织方式的存储器,当指令非顺序执行时(如分支时),需要进行指令地址到微操作地址的映射,因为由编译器是按分支源指令与分支目标指令在存储器中的相对放置位置而给出分支增量。例如,当指令地址为8-6的指令(即指令C)是一条分支指令,作一个分支增量为16的跳转,系统以8-6的数值(实际上是8+6=14)加上16的增量,其结果是30,也就是分支目标指令地址24-6,即112指令块中H指令。相应地,微操作块120中的地址为8-2的微操作C是分支微操作,其分支增量为指令转换时从指令处获得的增量16。由微操作数执行这个增量为16的跳转,要进行三步映射。第一步是分支源的映射,将8-2的微操作地址映射为8-6的指令地址。第二步需映射中间块(即非分支源指令块,也非分支目标指令块)中指令字节与微操作数的换算关系(如分支增量较大,分支源指令块与非分支目标指令块之间可以有很多中间块,每一个块之间的字节数与微操作数的映射关系都不一样)。第三步为在分支目标中将分支目标指令块内地址偏移量映射成分支目标微操作的块地址偏移量。结合这三个映射与分支增量来求分支目标微操作的地址(在此例中为16-3)。
第二种微操作数的存储组织方式请见图1B。其中,110、111、112仍为图1A中的变长指令。130、131、132为第二种微操作数的存储方式,在130微操作数块中存储了三条微操作数,对应110中的三条指令,其3号操作数位置为空置。微操作块131、132也按同样方式组织,即微操作块含有相应指令块中的指令同样数目的微操作数,并不一定填满整个微操作块。这样,使得微操作的块地址与指令块的块地址相同,例如块地址为24(112指令块)的H指令,其相应微操作也在块地址为24的132微操作块。第二种存储方式下每个微操作块放置的微操作的数目不同,所以有必要为每个微操作块单独设立其相应的最大块内偏移量。当地址指向一个微操作块中最后一个微操作时,该最大块内偏移量提示系统顺序下一条微操作存储在顺序下一个指令块中的第一个微操作。
当微操作顺序执行时,处理器只要为第二种微操作存储器的地址在每个时钟周期提供一个为‘1’的增量,就可从微操作存储器中顺序读出微操作。此例中如当前地址指向8-2,此时块中最大地址偏移量与地址的偏移量2匹配,提示已到达微操作块的最后一个微操作。再下一个时钟周期,在前述提示下,处理器核产生的相应地址为16-0,即地址块121(顺序下一个指令块)中的第一个微操作。
第二种微操作数组织方式的存储器,当指令非顺序执行时(如分支时),只需要进行两步指令地址与微操作地址之间的映射。例如,当微操作地址为8-2的微操作是一条分支微操作,作一个分支增量为16的跳转。首先,要作分支源映射,即将8-2的微操作地址(微操作C)映射为8-6的指令地址(指令C)。系统以8-6的数值(实际上是8+6=14)加上分支增量16,其结果是30,也就是分支目标指令地址24-6,即相当于112指令块中H指令。然后进行分支目标映射,映射出地址为24的指令块中第6字节的相应微操作的地址(在此情况下为24-1,即H微操作)。其中,中间块指令与微操作间的映射步骤被省略,因为在第二种微操作存储方式中微操作块中的微操作与相应指令块中的指令是数目相等的,等于一个固定映射,可以从计算中消去。以微操作块120中分支微操作C(地址8-2)为例,其分支增量为16。按上例中方法,先映射出分支源微操作相应的分支源指令的块内偏移量6,然后结合微操作块地址(与指令块地址一样)算出其指令地址为8+6=14,然后加上分支增量16,其结果是分支目标指令地址为30,即8-6。之后还有将指令块地址偏移量6映射为微操作块地址2的步骤。
本发明中的实施例都使用第二种组织方式的微操作存储。因此在实施例中指令块地址与微操作块地址是相等的,可以互换。但指令块内偏移与微操作块内偏移通常不相等,需要经过查表映射。即使在更低层次的存储器中,当该存储器中的一个微操作块能存储多个高层次存储器微操作块时仍保持这种组织方式,请见图1C为一低层次存储器中微操作数的存放方式。此例显示存储器中每个微操作块可以存放16个微操作,相当于更高层次微操作处理器的2个微操作块。其中,微操作块140块地址为0,存放的是相当于地址为0的微操作块及图1B中微操作块130(块地址为8);其中,微操作块141块地址为16,其存放的是相当于图1B中微操作块131(块地址为16)及图1B中微操作块132(块地址为24)。低层次存储器中的微操作块仍然以高层次存储器微操作块为单位,保持了高层次存储器中微操作块与相应指令块的对应关系。
进一步地,可以将分支源映射步骤消去。其方法一是每一个分支微操作数都存储有其相应指令的块内偏移量,而不需另行查表获得。当程序执行到一条分支微操作时,以存储的分支指令块内偏移量计算;分支目标指令地址=分支源微操作块地址+分支源指令块内偏移量+分支增量。其方法二是以稀疏矩阵放置微操作,使微操作的块内偏移量等于指令的块内偏移量,分支目标指令地址=分支源微操作块地址+分支源微操作块内偏移量+分支增量。这种存储方式需要有机制预先检测空置微操作数,并且在顺序执行时越过这些空置的微操作数。第三种方法是在将指令转换成微操作数时对其分支增量作补偿,其方法是补偿后分支增量(Compensated Branch Offset)=分支源指令块内偏移量(Address offset)+分支增量(Branch Offset),并将该补偿后分支增量放进微操作中代替原来的分支增量。
使用补偿后分支增量的操作方式是,在指令转换时,即算出补偿后分支增量=分支源指令块内偏移量+分支增量(22=6+16),并将该补偿后分支增量存放进微操作中代替原来的分支增量。当执行到分支微操作C时(130块中地址8-2),系统即计算分支指令目标地址=微指令块地址+补偿后分支增量(30=8+22),该地址已经指向微指令块132(地址为24)。剩余的工作只是作一步指令块内偏移到微指令块内偏移的映射(在地址为24的块中为6→1)就能获得准确分支目标微操作地址24-1。在图2实施例中使用了这个方法。
更进一步,可以在指令转换时即计算出分支目标微操作地址,并存储在与该分支源微操作对应的存储器。在此方法中,则微操作进行分支操作时不需进行任何块内偏移映射。在图6实施例中将详细描述这个方法。
在本说明书中,指令块与微操作块一一对应,因此所述指令块的块地址与所述微操作块的块地址相同。但由于指令块中指令的数目与微操作块中微操作的数目不一定相同,因此指令的块内偏移地址与相应微操作的块内偏移地址不一定相同。
请参考图1D,其为包含本发明所述指令缓存系统的基本处理器系统的一个实施例。在图1D中,所述处理器系统包含指令缓存系统和处理器核(CPU Core)111。其中,处理器核111产生存储器寻址地址是对应于变长指令的地址,而内部执行单元执行的是微操作。指令缓存系统则包含微操作存储器103、标签存储器105、映射模块107和转换器109。应当理解的是,这里列出各种部件的目的是为了便于描述,还可以包含其他部件,而某些部件可以被省略。这里的各种部件可以分布在多个系统中,可以是物理上存在的或是虚拟的,可以是硬件实现(如:集成电路)、软件实现或由硬件和软件组合实现。
转换器109用于将送到缓存系统的包含变长指令的指令块转换为微操作块。具体地,可以根据每条变长的指令所包含的操作(或动作)的多少将其转换为相应数目个定长的微操作。此外,在将一个指令块转换为一个微操作块的同时,可以得到所述指令块中的每条指令的指令块内偏移地址与其对应的一个或多个微操作的微操作块内偏移地址的对应关系。
微操作存储器103用于存储经转换器109转换得到的微操作,可以包含任何合适的存储设备,如:寄存器(register)或寄存器堆(register file)、静态存储器(SRAM)、动态存储器(DRAM)、闪存存储器(flash memory)、硬盘、固态磁盘(Solid State Disk)以及任何一种合适的存储器件或未来的新形态存储器。微操作存储器103可以作为系统的一个缓存工作,或当有其他缓存存在时作为一级缓存工作;且可以被分割成复数个被称为存储块(Memory Block)的存储片段的用于存储处理器核111要访问的微操作。这样,微操作存储器103中每个存储块的大小均与指令块可能具有的最多的操作(或动作)的数目相同,且在微操作存储器103的每个存储块中存储了一个微操作块。
例如,若一个指令块最多包含16条指令,且每条指令最多转换为3条微操作,则微操作存储器103的每个存储块可以包含48条微操作。由于微操作块中包含的微操作数目小于等于存储块可容纳的微操作数目,因此存储块可以采用稀疏的方式存储微操作。
标签存储器105的行与存储微操作存储器103的行一一对应,每一行用于存储微操作存储器103中对应的微操作块的块地址。由于指令块的块地址与对应微操作块的块地址相同,因此标签存储器105每一行存储的同时也是微操作存储器103中相应微操作块对应的指令块的块地址。
映射模块107用于存储所述指令块内偏移地址与微操作块内偏移地址之间的对应关系,并能根据一个指令块内偏移地址转换得到该指令对应的一个或多个微操作中第一个微操作在其所在的微操作块中的块内偏移地址。
当处理器核111执行一条指令时,处理器核111首先需要从更低层次的存储器中读入指令。在这里,存储器的层次指的是存储器与处理器核111之间的接近程度。越接近处理器核111的层次越高。此外,一个高层次的存储器通常比低层次的存储器速度快但容量小。
根据本发明所述技术方案,当指令块被送到缓存系统时,首先由转换器109将该指令块中的所有指令转换为对应的一条或多条微操作,再将所有转换得到的微操作填入由替换算法(如:LRU算法)指定的微操作存储器103存储块中,并将该指令块的块地址(即微操作块的块地址)填入标签存储器105中与所述存储块对应的行中。与此同时,将转换器109转换时确定的指令块内偏移地址和微操作块内偏移地址的对应关系填入映射模块107中。
当处理器核111需要获取指令时,将指令地址的高位部分(即指令块地址)送到标签存储器105进行匹配,并将指令地址的低位部分(即指令块内偏移量)送到映射模块107。映射模块107根据之前存储的对应关系将所述指令地址的低位部分转换为微操作块内偏移量。
若所述指令地址高位部分在标签存储器105中匹配成功,则匹配成功项对应的存储块就是所述处理器核111所需指令对应的微操作所在的存储块,此时根据映射模块107转换得到的微操作块内偏移量,可以从该存储块中读出所述指令对应的微操作,并送到处理器核111供执行。
若所述指令地址高位部分在标签存储器105中匹配不成功,则处理器核111所需指令对应的微操作尚未存储在微操作存储器103中。此时,所述指令地址被送到更低层次存储器获取相应指令块。当该指令块被送到缓存系统时,按之前实施例所述方法,经转换后被填入微操作存储器103中并相应更新标签存储器105和映射模块107。与此同时,转换得到的微操作被送到处理器核111供执行。
在图1D实施例中用两维地址对微操作存储器103进行寻址,即用匹配得到的第一地址(BNX)找到微操作存储器103的行,用映射得到的第二地址(BNY)找到微操作存储器103的列。根据本发明技术方案,也可以仅在处理分支目标指令地址时通过转换器109对转换产生BNY,除此以外均由处理器核111直接产生BNY,对微操作存储器103的列进行寻址。
此外,本发明所述的转换器还可以用于将不同指令集的指令转换为同一种指令集的指令。例如,可以将转换器109输入的指令集B的指令转换成指令集A的相应指令,使得本发明所述的处理器系统能同时支持指令集A和指令集B。执行指令集A时,转换器109只执行将指令转换为微操作的功能,不执行指令集转换的功能。当执行指令集B时,转换器109不但执行将指令转换为微操作的功能,也执行指令集转换的功能,或直接将指令集B的指令转换为指令集A中相应指令对应的微操作。所述转换是发生在微操作被存进指微操作存储器103之前,因此微操作存储器103中只有指令集A的微操作。因此,当处理器核需要微操作时,只要在微操作存储器103中命中,就不需要等待指令集的转换。
请参考图2,其为本发明所述指令缓存系统的基本处理器系统的另一个实施例。在图2中,所述处理器系统包含处理器核211和指令缓存系统。指令缓存系统则包含微操作存储器103、标签存储器105、结束标志存储器205、映射模块107和转换器109。其中,微操作存储器103、标签存储器105、映射模块107和转换器109的功能与图1实施例中的相同。另外,处理器核211提供‘TAKEN’信号320控制选择器207和213。‘TAKEN’信号是处理器核211对一条分支微操作的判断。当执行的微操作是分支微操作且分支成功时,‘TAKEN’信号320为‘1’;当执行的微操作是分支微操作且分支不成功时,或当执行的微操作不是分支微操作时,‘TAKEN’信号320为‘0’。
处理器核211为改进的处理器核,其输出的指令地址由顺序微操作块地址221、顺序微操作块内偏移地址223,分支目标微操作块地址225和分支目标微操作块内偏移地址227组成。选择器207在TAKEN信号320的控制下,选择送往标签存储器105的块地址。选择器213在TAKEN信号320的控制下,选择送往微操作存储器103的块内偏移地址。当TAKEN信号320为‘0’时,选择器207选择顺序微操作块地址221,送往标签存储器105作匹配以选择微操作存储器103中的一个微操作块;选择器213在TAKEN信号320的控制下,选择顺序微操作块内偏移地址223,从该操作块中选择一个微操作读出,送往处理器核211执行。当TAKEN信号320为‘0’时,选择器207选择分支目标微操作块地址225,送往标签存储器105作匹配以选择微操作存储器103中的一个微操作块;选择器213在TAKEN信号320的控制下,选择分支目标微操作块内偏移地址227经映射模块107映射所得的操作块内偏移地址230,从该操作块中选择一个微操作读出,送往处理器核211执行。
其中,顺序指令块地址或分支指令块地址经标签存储器105匹配得到BNX信号232后可以找到该块地址代表的指令块对应的微操作块在微操作存储器103中的位置;指令偏移地址227仅在处理器核211获取分支目标指令时有效,表示了该分支目标指令在其所在指令块中偏移量,如图1D实施例所述,该指令偏移地址由映射模块107转换为BNY信号234后可以在微操作存储器103中由所述BNX指向的行中找到相应的微操作;微操作偏移地址223则可以直接被用作BNY对微操作存储器103中的列寻址。
结束标志存储器205的行与标签存储器105的行(及微操作存储器103的存储块)一一对应,存储了每个微操作块中最后一个微操作对应的BNY。由于指令经转换器109转换后得到的微操作的数目与指令原本数目不一定相同,因此可以在处理器核211读取微操作的同时在结束标记存储器205中检查该微操作是否为当前微操作块中的最后一个微操作。若该微操作不是当前微操作块中的最后一个微操作,则下一微操作的列地址就是该微操作的BNY加一;否则,下一微操作就是下一微操作块的第一个微操作。
根据本发明技术方案,结束标志存储器205也可以有其他任何合适的组织形式。例如,结束标志存储器205的每一行可以包含与每个微操作块中最大微操作数相同数目的表项,且在每行与相应微操作块最后一个微操作对应的表项中存储‘1’,在该行其他表项中存储‘0’。在此情况下,处理器核211读取一个微操作的同时也读取其在结束标志存储器205中对应的表项。若该表项的值为‘0’,则表示处理器核211当前读取的微操作不是其所在微操作块中的最后一个微操作;若该表项的值为‘1’,则表示处理器核211当前读取的微操作是其所在微操作块中的最后一个微操作。
根据本发明技术方案,当处理器核211按顺序执行指令时,若当前微操作不是当前微操作块中的最后一个微操作,则表示下一微操作与当前微操作位于同一个微操作块(即同一个指令块)中,此时可以通过由选择器207选择处理器核211通过总线221输出的保持不变的顺序指令块地址送标签存储器105匹配、对微操作偏移地址累加得到新的寻址地址223并由选择器213选择后在微操作存储器103中找到下一微操作。若当前微操作对应的是当前微操作块的结束标记,则表示下一微操作与当前微操作不属于同一个微操作块时,即下一微操作是当前微操作块的下一微操作块中的第一个微操作,因此可以通过由选择器207选择处理器核211通过总线221输出的经增一的顺序指令块地址送标签存储器105匹配、对微操作偏移地址清零(‘0’)得到新的寻址地址223并由选择器213选择后在微操作存储器103中找到下一微操作。
当处理器核211因分支转移等原因执行非连续指令(即目标微操作)时,选择器207选择处理器核211通过总线225输出的目标指令块地址送标签存储器105匹配。这样,可以通过对目标指令地址中的指令块地址送标签存储器105匹配、指令偏移地址227送映射模块107转换得到相应的微操作偏移地址并由选择器213选择后在微操作存储器103中找到目标微操作。
根据本发明技术方案,当处理器核211执行分支指令时,可以由处理器核211内部的运算单元计算分支目标指令。例如,可以由处理器核211中的加法器对所述分支指令本身地址及分支增量相加,从而得到分支目标地址。也可以由指令地址生成模块直接使用指令块地址和补偿后的分支增量计算分支目标指令。此时,可以在转换器109对所述分支指令转换的过程中计算前述补偿后的分支增量,其值可以通过被转换的分支指令的指令块偏移地址与分支增量相加得到(即补偿后的分支增量=分支指令的指令块内偏移地址+分支增量),并存储在微操作存储器103中的所述分支指令对应的微操作中。通常情况下,分支目标地址等于分支指令地址加上分支增量,而分支指令地址等于分支指令块地址加上分支指令块内偏移量。因此,在本发明中,分支目标地址就等于分支指令块地址加上补偿后的分支增量。
请参考图3,其为本发明所述改进的处理器核中指令地址生成的实施例。与传统的指令地址生成结构不同,在本实施例中,存储器地址被分为块地址(即微操作地址高位部分,在此例中与指令地址高位部分同)和块内偏移地址(即指令或微操作地址低位部分)两部分进行处理。如图3所示,当执行顺序微操作时,由寄存器301输出微操作块地址221、寄存器305输出微操作块内偏移地址223(BNY);当执行分支目标指令时,由寄存器303输出指令块地址225、寄存器307输出指令块内地址偏移量227。选择器315和317则由表示分支转移是否发生的TAKEN信号320控制。选择器321由比较器337的输出控制。
具体地,当处理器核211执行顺序微操作时,则选择器315在TAKEN信号320为‘0’的选择从寄存器305送来的当前微操作偏移地址223,并送到累加器313加一,等待选择器321的选择。同时,若处理器核211当前执行的微操作不是微操作块中的最后一个微操作,则比较器337对微操作偏移地址234和从结束标志存储器送来的表示该微操作块最后一个微操作的偏移地址319匹配不成功,因此选择器321选择从累加器313输出的微操作偏移地址作为下一时钟周期的微操作偏移地址。同时,加法器323将从寄存器301反馈来的指令块地址和接收到的匹配不成功信号(即‘0’)相加,并用得到的结果作为新的指令块地址,从而保持指令块地址不变。这样,由寄存器301输出的指令块地址221在下一时钟周期保持不变,由图2中为‘0’的TAKEN信号320控制下的选择器207选择后由标签存储器105匹配得到原BNX,即指向微操作存储器103中的块不变;下一时钟周期由寄存器305输出的微操作偏移地址223增一,由图2中为‘0’的TAKEN信号320控制下的选择器213选择后作为BNY指向所述块中的相应微操作,即实现了向处理器核211提供同一指令块(微操作块)内顺序执行的下一个微操作的功能。
若处理器核211当前执行的微操作是微操作块中的最后一个微操作,则此时从结束标志存储器205送来的表示该指令块对应的微操作块最后一个微操作的偏移地址319与当前微操作偏移地址234在比较器337中匹配成功,因此选择器321选择‘0’作为新的微操作偏移地址。同时,加法器323接收到匹配成功信号(即‘1’),因此对从寄存器301送来的指令块地址和所述‘1’相加,并用得到的结果作为新的指令块地址,从而使指令块地址增一。这样,由寄存器301输出的指令块地址221增一,经图2中选择器207选择后由标签存储器105匹配得到的BNX指向原微操作块按顺序执行的下一微操作块在微操作存储器103中对应的行;由寄存器305输出的微操作偏移地址223为‘0’,由选择器213选择后作为BNY指向所述行中的第一个微操作,即实现了向处理器核211提供按顺序执行的下一指令块(微操作块)内第一个微操作的功能。
若处理器核211执行分支微操作且分支转移发生,则此时由加法器325对从寄存器301送来的微操作块地址(即分支源块地址)和从该微操作中含有的补偿后的分支增量350的高位部分327相加,得到新的指令块地址并存储在寄存器303中,并将补偿后的分支增量350的低位部分329作为分支目标指令块内偏移地址存储在寄存器307中。这样,由寄存器303输出分支目标指令块地址225,经选择器207选择后(此时TAKEN信号320为‘1’)由标签存储器105匹配得到的BNX指向所述分支指令块在微操作存储器103中对应的微操作块;由寄存器307输出的分支目标指令块内偏移地址227,经映射模块107转换为微操作偏移地址230后并由选择器213选择后(此时TAKEN信号320为‘1’)作为BNY234指向所述行中的相应微操作(即所述分支目标指令对应的第一个微操作),将其读出,实现向处理器核211提供分支目标指令对应的第一个微操作的功能。
此时,为‘1’的TAKEN信号320,控制选择器317选择分支目标微操作块地址225送往加法器323的一个输入,与比较器337的输出相加。为‘1’的TAKEN信号320控制选择器315选择上述微操作偏移地址230送至增量器313增‘1’。同时经选择器213选择的微操作块内偏移234(BNY)与操作块中结束标志319作比较。如果不匹配(即分支目标微操作不是微操作块中最后一条微操作),则比较器337输出339为‘0’。块地址225与此‘0’相加后其值没有改变,在下一个时钟周期被存进寄存器301。比较器输出339也控制选择器321选择增量器313的输出使微操作偏移地址230增‘1’后,在下一个时钟周期被放进寄存器305。如此,使得下一时钟周期经总线221、223送出的微操作地址为分支目标地址+‘1’。此时,为‘0’的TAKEN信号320控制选择器207、213选择总线221、223的地址作为BNX、BNY访问微操作存储器103。
如果匹配(即分支目标微操作是微操作块中最后一条微操作),则比较器337输出339为‘1’。块地址225与此‘1’相加后,在下一个时钟周期被存进寄存器301。比较器输出339也控制选择器321选择‘0’,在下一个时钟周期放进寄存器305。如此,使得下一时钟周期经总线221送出的微操作块地址为分支目标指令块的下一个指令块的地址;使得总线223送出的微操作偏移地址为‘0’;指向分支目标指令块的顺序下一个指令块中第一个微操作的地址。此时,为‘0’的TAKEN信号320控制选择器207、213选择总线221、223的地址作为BNX、BNY访问微操作存储器103。如此周而复始,使得本发明的流水线开始于微操作存储器103中读取。流水线不需要从转换之前的变长指令开始,节省了变长指令转换为微操作所需要的流水线段。
此外,正如之前所述,分支目标指令地址也可以由处理器核211内含有的运算单元计算。在这种情况下,可以省略图3中的相应模块以实现同样功能,在此不再赘述。
根据本发明技术方案,当一个指令块被送到缓存系统201时,首先被转换器109转换为微操作块。请参考图4,其为本发明所述指令块与微操作块对应关系的示意图。在本实施例中,假设一个指令块的长度为16个字节(从字节0到字节15),且每个微操作的长度为4个字节。如图4所示,指令块401中包含了6条变长指令。如之前实施例所述,指令块中的字节0是上一条指令的最后一个字节,因此属于上一指令块,即本指令块中的变长指令从指令块的字节1开始。其中,指令403占3个字节(字节1、2和3),指令405占5个字节(字节4、5、6、7和8),指令407占2个字节(字节9和10),指令409占1个字节(字节11),指令411占3个字节(字节12、13和14),指令413在本指令块中占1个字节,其余部分在下一指令块中。
在本实施例中,假设指令405可以被转换为2个微操作(即微操作425和427),指令403、407、409、411和413均可以被转换为1个微操作,分别为微操作423、429、431、433和435,则经转换器109转换后得到的微操作块421中包含了7个微操作(从微操作0到微操作7)。因此,结束标志存储器205中相应行记录了最后一个微操作的块内偏移量(即‘6’)。
根据本发明技术方案,映射模块107可以有不同的组织形式。下面将结合图4实施例对指令地址与微操作地址之间的映射进行说明。请参考图5A,其为本发明所述映射模块进行地址映射的一个实施例。在本实施例中,映射模块的行与微操作存储器103的存储块一一对应,可以将接收到的指令地址偏移量转换为微操作地址偏移量。采用图4实施例相同的例子,如图5A所示,映射模块107中每行对应微操作存储器103的一行,其表项数目与指令块包含的字节数相同,即16个表项(从第0号表项到第15号表项)。每个与指令起始地址对应的表项中存储了微操作存储器103中该指令对应的第一个微操作的块内偏移地址。
例如,指令块401中的指令403的起始地址为指令块内偏移地址‘1’,且指令403对应的微操作423的起始地址为微操作块内偏移地址‘0’。因此,在映射模块107中相应行501的第1号表项503中存储了指令403对应的微操作423的起始地址‘0’。
又如,指令块421中的指令405的起始地址为指令块内偏移地址‘4’,且指令405对应微操作425和427,其中第一个微操作为微操作425,其起始地址为微操作块内偏移地址‘1’。因此,在映射模块107中相应行501的第4号表项505中存储了指令405对应的第一个微操作425的起始地址‘1’。
以此类推,在映射模块107中相应行501的第9号表项507中存储了指令407对应的微操作429的起始地址‘3’;第11号表项509中存储了指令409对应的微操作431的起始地址‘4’;第12号表项511中存储了指令411对应的微操作433的起始地址‘5’;第15号表项513中存储了指令413对应的微操作434的起始地址‘6’。
因此,可以直接根据处理器核211输出的指令地址偏移量的值在映射模块107中的相应行的对应表项中读出该指令对应的第一个微操作在微操作存储器103相应行中的位置。这样,当发生分支转移时,处理器核211输出分支目标指令地址,其中指令块地址部分经标签存储器105匹配后得到BNX,并指向微操作存储器103中的行,而根据偏移地址部分则可直接从映射模块107中所述BNX指向的行中读出微操作偏移地址BNY,从而在微操作存储器103中找到该分支目标指令对应的第一个微操作。之后,在按前述实施例中微操作偏移地址BNY累加的方法,依次找到后续的微操作。
进一步地,可以对映射模块107中存储的内容进行压缩,用更小的存储空间实现与图5A相同的功能。请参考图5B,其为本发明所述映射模块进行地址映射的另一个实施例。在本实施例中,映射模块107中每两行构成一组映射关系,每组映射关系对应微操作存储器103中的一行。此外,每组映射关系中包含的两行的表项数目相等,且等于指令块中最多可能包含的指令的数目。在每组映射关系中,所述两行的第一行中按表项顺序依次存储了相应指令块中各条指令的块内偏移地址,而第二行中按表项顺序依次存储了相应指令块中各条指令对应的第一个微操作的微操作偏移地址。这样,所述两行中对应的表项(即位于同一列的表项)构成了了指令块内偏移地址和微操作偏移地址的对应关系。
例如,行521和531构成了所述的一组映射关系。其中行521包含了指令块内偏移地址,行531包含了微操作偏移地址。依然采用图4中的例子,如图5B所示,行521中的表项内容从左至右依次为‘1’、‘4’、‘9’、‘11’、‘12’和‘15’,分别对应了指令403、405、407、409、411和413在其所在指令块中的偏移地址;行531中的表项内容从左至右依次为‘0’、‘1’、‘3’、‘4’、‘5’和‘6’,分别对应了微操作423、425、429、431、433和435在其所在微操作块中的偏移地址,而这些微操作正是上述指令各自的第一个微操作。这样,行521和531就构成了指令块401与微操作块421之间的映射关系。
同样地,可以直接根据处理器核211输出的指令地址偏移量的值在映射模块107的相应组映射关系中的第一行进行匹配,并输出匹配成功项对应的第二行表项,作为BNY对微操作存储器103进行列寻址。例如,当处理器核211需要获取指令405时,输出的指令地址中的块地址部分经标签存储器105匹配后得到BNX,并根据指令地址偏移量‘4’,在所述BNX对应的映射关系中的第一行521中进行匹配,且第1个表项525匹配成功,因此输出该表项对应的第二行中的表项535的值‘1’作为BNY,并用所述BNX和BNY对微操作存储器103进行寻址,从而读出处理器核211所需指令。其他操作与图5A相同,在此不再赘述。
此外,还可以进一步地对映射模块107压缩。请参考图5C,其为本发明所述映射模块进行地址映射的另一个实施例。本实施例与图5B实施例类似,用两行(如行551和571)构成一组映射关系,对应微操作存储器103中的一行。不同的是,在图5C中,每组映射关系中的第一行(即行551)中的每个表项对应一个指令块内偏移地址,即表项数目与指令块包含的字节数相同。因此,在本实施例中,行551有16个表项。而每个表项内只存储一位(bit)数据(即‘0’或‘1’),其中‘0’表示该表项对应的指令块内偏移地址不是一条指令的起始位置,‘1’表示该表项对应的指令块地址偏移量是一条指令的起始位置。
每组映射关系中的第二行(即行571)中的每个表项对应一个微操作块内偏移地址,即表项数目与微操作块最大可能包含的微操作个数相同。且每个表项内也只存储一位数据(即‘0’或‘1’),其中‘0’表示该表项对应的微操作不是其相应指令的第一个微操作,‘1’表示该表项对应的微操作是其相应指令的第一个微操作。
这样,通过分别对行551和571中的‘1’进行计数就可以将指令块内偏移地址转换为微操作块内偏移地址。具体地,当处理器核211送来一个指令块内偏移地址时,可以在行551中从最左边的表项开始向右对‘1’进行计数,直至到达所述指令块内偏移地址对应的表项,此时可以得到一个指令表项计数值。之后,在行571中从最左边的表项开始向右对‘1’进行计数,直至计数达到所述指令表项计数值。此时最后一个参与计数的表项就对应了所述指令块内偏移地址对应的指令相应的第一个微操作在微操作存储器103中BNY。
例如,处理器核211需要获取指令407,即送来的指令块内偏移地址为‘9’,则从行551最左边的表项开始计数,直至第9个表项。由于第1个表项、第4个表项和第9个表项中的值为‘1’,因此得到的指令表项计数值为‘3’。在从行551最左边的表项开始计数,直至计数值为‘3’。由于第0个表项、第1个表项和第3个表项的值为‘1’,因此当计数到第3个表项时,计数值达到‘3’,表示所述第3个表项对应的微操作就是指令407相应的第一个微操作,即BNY等于3。
当然,对于本实施例所述映射关系,也可以从右向左进行计数,并得到类似结果,在此不再赘述。此外,对于本实施例所述映射关系,还可以采用求和的方法进行地址映射。例如在图5C中,可以设该计数值为‘0’,将行551中从最左边的的表项开始,直到指令块内偏移地址指向的表项的值对所述计数值进行累加,同时对行571中从最左边的的表项开始对每个表项的值对所述计数值进行累减。这样,当所述计数值再次为‘0’时,在行571中到达的表项对应的微操作就是所述指令对应的微操作。
回到图2,当一个指令块被送到指令缓存系统201时,首先按图4实施例所述方法在转换器109中从指令块转换为微操作块、对该指令块中的每条分支指令计算补偿后的分支增量,所述微操作及补偿后的分支增量被存储在微操作存储器103中按替换算法(如LRU算法)确定的存储块中,并将该指令块的指令块地址存储在标签存储器105的相应行中。同时,转换器109产生指令与微操作之间的映射关系,存储在映射模块107的相应行中,并将最后一个微操作对应的微操作地址存储在结束标志存储器205中。至此,完成了将一个指令块转换成微操作存储在指令缓存系统201的操作过程。
当处理器211没有执行分支微操作、或执行分支微操作但分支转移没有发生时,若当前BNY指向的不是当前微操作块中的最后一个微操作,则按之前所述方法,根据由选择器207选择总线221输出的原指令块地址送往标签存储器105匹配得到BNX,及由选择器213选择处理器核211输出的增一后的BNY,从微操作存储器103中读出相应的微操作供处理器核211执行。
若当前BNY指向的是当前微操作块中的最后一个微操作,则按之前所述方法,根据由选择器207选择总线221输出的下一指令块地址送往标签存储器105匹配。此时,若匹配成功,则表示所述下一指令块对应的微操作块已经存储在微操作存储器103中,可以由选择器213选择处理器核211输出的‘0’作为BNY,从微操作存储器103中由匹配得到的BNX指向的存储块中读出相应的微操作供处理器核211执行。若匹配不成功,则表示所述下一指令块对应的微操作块尚未存储在微操作存储器103中。此时,向更低层次存储器输出所述指令块地址,等到所述指令块被取来时,按之前所述方法转换为微操作块后存储到微操作存储器103中由替换算法确定的BNX指向的存储块中,并在标签存储器105、映射模块107和结束标志存储器205由所述BNX指向的行填入相应内容。同时,由选择器213选择处理器核211输出的‘0’作为BNY,从所述微操作块中输出相应的微操作供处理器核211执行。
当处理器211执行分支指令且分支转移发生时,按之前所述方法计算分支目标指令块地址和分支目标指令块内偏移地址。选择器207选择从处理器核211通过总线211输出的分支目标指令块地址送到标签存储器105匹配。若匹配成功,则表示所述分支目标指令块对应的微操作块已经存储在微操作存储器103中,匹配成功项对应的BNX指向所述分支目标指令对应的微操作块在微操作存储器103中的位置,以及相应映射信息和结束标志信息分别在映射模块107和结束标志存储器205中的位置。此时,处理器核211输出的分支指令块内偏移地址被送到映射模块107中,根据由所述BNX指向的行中包含的映射关系即可转换为微操作偏移地址,并由选择器213选择作为BNY。根据所述BNX及BNY即可在微操作存储器103中读出所述分支目标指令对应的第一个微操作供处理器核211执行。
若匹配不成功,则表示所述分支目标指令块对应的微操作块尚未存储在微操作存储器103中。此时,向更低层次存储器输出所述分支目标指令块地址,等到所述分支目标指令块被取来时,按之前所述方法转换为微操作块后存储到微操作存储器103中由替换算法确定的BNX指向的存储块中,并在标签存储器105、映射模块107和结束标志存储器205由所述BNX指向的行填入相应内容。之后,处理器核211输出的分支指令块内偏移地址被送到映射模块107中,根据由所述BNX指向的行中包含的映射关系即可转换为微操作偏移地址,并由选择器213选择作为BNY,从所述微操作块中输出相应的微操作供处理器核211执行。
根据本发明技术方案,虽然上述各个实施例均采用直接寻址的方式计算分支目标地址,但是也可以使用间接寻址的方式。当采用间接寻址方式时,需要首先确定寄存器值(如:基地址寄存器值),从而计算分支目标地址。在这种情况下,可以由处理器核211计算得到分支目标地址(如使用处理器核211中的运算单元进行分支目标地址计算)后,再按上述方法完成后续操作,此过程不再赘述。
根据本发明技术方案,还可以对所述处理器系统进行改进,通过在轨道表中建立微操作之间的联系,使处理器核执行分支微操作之前事先计算出分支目标指令地址,将分支目标指令地址映射为分支目标微操作地址,并预取所述分支目标微操作所在的微操作块。从而使得从分支目标指令地址分支目标微操作地址的映射过程不在处理器核获取分支指令目标微操作的关键路径上;也从而掩盖分支转移时微操作缓存缺失造成的部分或全部等待时间。请参考图6,其为本发明所述基于轨道表的处理器系统的一个实施例。
如图6所示,所述处理器系统包含一个主动表(Active list)604、一个扫描转换器608、一个轨道表(Track table)610、一个循迹器(Tracker)614、一个映射模块107、一个微操作存储器606、一个微操作读缓冲607和一个处理器核611。应当理解的是,这里列出各种部件的目的是为了便于描述,还可以包含其他部件,而某些部件可以被省略。这里的各种部件可以分布在多个系统中,可以是物理上存在的或是虚拟的,可以是硬件实现(如:集成电路)、软件实现或由硬件和软件组合实现。
在本实施例中,微操作读缓冲607的容量比微操作存储器606小,访问时延也更短。微操作存储器606和微操作读缓冲607可以包含任何合适的存储设备。指令存储器606可以作为系统的一个缓存工作,或当有其他缓存存在时作为一级缓存工作;且可以被分割成复数个被称为存储块的存储片段的用于存储处理器核611要访问的指令对应的微操作。
从更低层次的存储器获取指令块经扫描转换器转换为微操作块后首先被填充到微操作存储器606中。之后,根据具体执行情况,相应微操作块被从微操作存储器606填充微操作读缓冲607中,以备处理器核611读取。在这里,术语“填充(Fill)”表示将指令(或微操作)从较低层次的存储器移动到较高层次的存储器中,术语“存储器访问”(Memory Access)表示处理器核611从存储器(微操作读缓冲607)中读取微操作。
主动表604中的表项与微操作存储器606中的存储块一一对应。主动表604中的每个表项存储了一个指令块地址,其表项地址称为块号(BNX),指明了该指令块地址对应的微操作块存储在微操作存储器606中的哪个存储块中。本发明所述的块号指的就是存储块在微操作存储器606中的位置。可以通过将扫描转换器608审查、计算得到的分支目标指令地址中的指令块地址与主动表604中存储的指令块地址匹配确定该分支目标指令对应的微操作块是否已经存储在微操作块存储器606中。如果分支目标指令所在的指令块对应的微操作块尚未被填充到微操作存储器606中,那么从更低层次存储器获取将该指令块并经扫描转换器转换为微操作后填充到微操作存储器606中的同时,在主动表604中建立相应的指令块地址与块号的匹配对。
扫描转换器608可以对从低层次的存储器填充到微操作存储器606的每一条指令进行审查、转换,并提取出某些信息,如:指令(或微操作)类型、指令(或微操作)源地址和分支指令的分支增量,并基于这些信息计算出分支目标地址。例如,指令(或微操作)类型可以包括条件分支指令(或微操作)、无条件分支指令(或微操作)和其他指令(或微操作)等。指令(或微操作)类别还可以包括条件分支指令(或微操作)的子类别,如相等时分支转移、大于时分支转移等。在某些情况下,可以认为无条件分支指令(或微操作)是条件分支指令(或微操作)的一种特例,即条件总是成立。此外,还可以包括其他信息。
扫描转换器608对从低层存储器送来的指令块进行审查并转换。可以先审查后转换,或先转换后审查,或审查与转换同时进行。审查是指对指令或由指令转换而成的微操作进行简单译码以识别其类型。审查的原则是识别出分支源指令或分支源微操作(包括条件分支与无条件分支),计算并匹配、映射出分支目标微操作地址(由分支目标微操作的块号BNX及块内偏移BNY组成),并将该分支目标微操作地址存放进轨道表中,由分支源微操作微操作地址所指出的表项中。
与图1实施例类似,本实施例中的扫描转换器608还可以用于将不同指令集的指令转换为同一种指令集的指令。例如,可以将扫描转换器608输入的指令集B的指令转换成指令集A的相应指令,使得本发明所述的处理器系统能同时支持指令集A和指令集B。执行指令集A时,扫描转换器608只执行审查和将指令转换为微操作的功能,不执行指令集转换的功能。当执行指令集B时,转换器109不但执行审查和将指令转换为微操作的功能,也执行指令集转换的功能,或直接将指令集B的指令转换为指令集A中相应指令对应的微操作。
轨道表610含有复数个轨迹点(Track Point)。一个轨迹点是轨道表中的一个表项,可含有至少一条微操作的信息,比如微操作类别信息、分支目标指令地址,或分支目标微操作地址等。在本发明中轨迹点本身的轨迹表地址与该轨迹点所代表微操作的微操作地址相关(Correspond);而分支微操作轨迹点中含有分支目标微操作的轨迹表地址,且该轨迹表地址与分支目标微操作地址相关。与微操作存储器606中一系列连续微操作所构成的一个微操作块相对应的复数个连续的轨迹点称为一条轨道。该微操作块与相应的轨道由同一个块号(即BNX)指示。轨道表含有至少一条轨道。一条轨道中的总的轨迹点数可以等于轨道表610中一行中的表项总数。轨道表610也可以有其它的组织形式。
可以用块号(BNX)和偏移地址(BNY)来表示轨迹点(微操作)在轨道表中的位置信息;其中BNX表示该轨迹点对应微操作的块号(指向轨道表中一条轨道及微操作存储器中相应的一个存储块),BNY表示该轨迹点(及对应微操作)在该轨道(存储块)中的相对位置(偏移量,Address Offset)。一套BNX及BNY对应轨道表中的一个轨迹点,即可以根据一套BNX及BNY从轨道表中找到对应的轨迹点。相应地,在扫描转换器608提取出指令块中的相关信息,并将这些信息存储到轨道表610由这些微操作对应的BNX指出的轨道中由BNY指出的表项。如果该表项(轨迹点)的类型代表一条分支微操作,可以根据内容中含的BNX(目标块号)确定分支目标的轨道,并根据BNY(偏移地址)确定目标轨道中的一个特定的轨迹点(表项)。这样,轨道表的分支轨迹点是一个以轨道表项地址对应分支源地址、表项内容对应分支目标微操作地址来代表一个分支微操作的表项。所述分支目标微操作地址可以由含有该分支源微操作的块地址(等于相应的分支源指令块地址)加上该分支指令的块内偏移量,并再加上分支转移到目标微操作的分支增量得到的指令地址经映射而得到。即分支目标指令地址=分支微操作的块地址+分支指令块内偏移量+分支增量。而分支目标微操作地址是由分支目标指令地址经由映射器107映射所得。
所述计算得到的分支目标指令地址622的高位部分624(即指令块地址)被送往主动表604与其中的内容匹配以获得该分支目标微操作对应轨迹点的分支目标微操作块号634(BNX),低位部分626(即分支目标指令块内偏移)被送往映射模块107,经映射后得到分支目标微操作块内偏移636(BNY)。所述BNX与BNY被存进轨道表中代表分支源的表项中。分支目标微操作块号634与分支目标微操作块内偏移636一起作为分支目标微操作地址632(BN)被写入轨道表中,由分支源微操作地址指向的表项。该分支源微操作地址由分支源微操作的块号BNX及块内偏移BNY组成。例如,当扫描转换器在审查、转换将要存放到微操作存储器606中微操作块号BNX为29的一个指令地址为1200的指令块时发现从字节3开始有一条分支指令,其分支增量为67个字节。则分支目标指令地址622为1200+67=1267,其中高位624(其值为1260)被送往主动表604匹配得到分支目标块号634(BNX)为81号;其中低位634(其值为7表示是指令块中7号字节)被送往映射模块107与第81行的映射值作映射获得相应的微操作块内偏移636为2(即微操作块内2号微操作);如此则分支目标微操作地址632为81-2。扫描转换模块608在转换从字节3开始的分支源地址时将转换所得的相应微操作按顺序将其写入了第0号微操作(此处字节1与2都是上一指令块中开始的指令的结尾部分,所以字节3开始的分支指令是本指令块的第一条指令)。所以在此与该分支指令对应的分支微操作,其微操作地址620是在微操作块29第0号微操作,即29-0。所以扫描转换模块608即将其值为81-2的分支目标微操作地址632在微操作地址总线620控制下写入轨道表610中29-0表项(29号轨道0号表项)。扫描转换模块608另外也控制将3号指令字节与0号微操作块内偏移存储在映射器107中的29行,以便今后审查其他指令时用以映射。当整个指令块的审查、转换完成后,将相应的结束标志存储到结束标志存储器205的相应行中。
在图1实施例中,曾经指出过由分支指令转换而得的分支微操作在进行分支时要进行三步映射,分支源微操作块内偏移映射、中间微操作块地址映射及分支目标微操作块内偏移映射。在本发明所有实施例中,因为微操作块的存储格式为操作块与原始指令块一一对应,所以不需要中间微操作块的地址映射。在本实施例中,也不需要分支源微操作块内偏移映射,因为在作分支目标计算时使用的是原始指令块内偏移,而不是分支源微操作块内偏移。剩余的分支目标微操作块地址映射在本实施例中是在指令转换微操作数时实施,存进轨道表610的已经是完成全部映射后的分支目标微操作地址。在处理器核将作分支转移时,可以用轨道表610中存有的该分支目标微操作地址不经任何映射和计算,直接寻址指令缓存606获得该分支目标微操作,供给处理器核611。在实施例图6中及后续使用轨道表的实施例中,都使用这种方法。
总结一下,当审查到的指令是分支指令时,计算其分支目标指令地址,并将所述分支目标指令地址中的块地址部分送到主动表604匹配。如果匹配成功,则得到分支目标指令对应的微操作所在的微操作块的块号(BNX),根据映射模块107中由该BNX指向的行中存储的映射关系得到所述分支目标指令对应的分支目标微操作的微操作偏移地址BNY,并将该BNX及BNY写进轨道表中与所述分支微操作对应的轨迹点中。如果匹配不成功,则该分支目标指令地址直接存储在所述分支微操作对应的轨迹点中。
微操作读缓冲607中至少存储了包含当前微操作块在内的一个微操作块。需要说明的是,微操作读缓冲607中的每一行与微操作存储器606的微操作块可以含有相同数目或较少数目个微操作。如果微操作读缓冲607中的每行含有与微操作存储器606中微操作块同样数目的微操作,即一个行等于一个微操作块,则该行可以用对应的微操作块块号(即BNX)表示。如果微操作读缓冲607中的每行含有比微操作存储器606中微操作块少的微操作,即多个行等于一个微操作块,则微操作读缓冲607中的每一行可以用相应的微操作块的块号BN的最低位(Lsb)再低一位的位置处(less significant)加上至少一个地址位;此地址位指出该行在一个微操作块中的位置,也即同一微操作块中的行偏移地址。例如一个块号BN为‘111’的微操作块含有微操作读缓冲607中的两个行,则其中占据低位地址的行对应的号码为‘1110’;占据高位地址的行对应的号码为‘1111’。
为了便于说明,在之后的描述中以微操作读缓冲607中的每一行与微操作存储器606的微操作块含有相同数目的微操作为例进行说明。
在本发明中,微操作读缓冲607可以根据当前处理器核611执行微操作的执行情况,主动提供微操作给处理器核611执行。
轨道表610中的轨道和微操作存储器606中的存储块一一对应,且都由同一指针指向。处理器核611将要执行的任何指令对应的微操作,都可以在执行前被填充到微操作存储器606及微操作读缓冲607中。为了在一条轨道中建立与下一条轨道的联系,在每条轨道代表最后一个微操作的轨迹点后再设一个结束轨迹点,其中存放顺序执行下一条轨道(微操作块)的块号BNX。如果微操作存储器606中可以存储多个微操作块,那么在当前微操作块被执行时,把顺序执行下一个微操作块也取到微操作存储器606中及微操作读缓冲607中,以备提供给处理器核611执行。下一微操作块对应的指令块地址可以用当前微操作块对应的指令块地址加上一个指令块的地址长度来求得。该地址如前述被送到主动表604匹配,得到所述指令块地址对应的微操作块在微操作存储器103中的BNX,同时该BNX被存进当前轨道的结束轨迹点。
对于结束轨迹点,则只需要将指令块地址加上指令块长度,就可以得到下一微操作块对应的指令块地址,之后可以按同样方法进行匹配以确定所述下一微操作块的BNX。对于结束轨迹点,其下一轨迹点的BNY恒为‘0’。
当新轨道被建立时,可以将新建轨道放置在轨道表610中的一个可被替换的行中。如果所述新轨道包含一个分支点(对应一个分支微操作),那么在所述行中的一个表项内建立一个分支点。可以根据分支微操作地址确定所述分支点在轨道表610中的行及表项的位置。举例而言,可以根据分支微操作地址对应的指令块地址确定行,并根据分支微操作地址的微操作块内偏移量确定该行中的一个表项。
轨道表行中的每个表项或轨迹点可以包含一种内容格式,所述格式包括类型区域、第一地址(XADDR)区域和第二地址(YADDR)区域。此外,轨道表行中的每个表项或轨迹点还可以包含另一种内容格式,即类型区域和分支目标指令地址区域。类型区域可以表示轨迹点对应的微操作的类型。如之前所述,微操作类型可以包括条件分支微操作、无条件分支微操作和其他微操作。XADDR区域也被称为第一维地址或简称为第一地址。YADDR区域也被称为第二维地址或简称为第二地址。
新轨迹点的内容可以对应分支目标微操作。换句话说,分支点的内容存储了分支目标微操作地址信息。举例而言,轨道表610中的对应于一个分支目标微操作的特定的行的相应块号BNX被作为第一地址存储到所述分支点的内容中。此外,所述分支目标微操作的在其所在的微操作块中的偏移量BNY被作为第二地址存储到所述分支点的内容中。所述微操作块内偏移量BNY可以根据分支微操作地址对应的指令块地址和分支增量计算并经映射模块107转换得到。
轨道表中所有轨道的结束轨迹点都被标记为一个特殊的轨迹点,其内容包含了一个必定分支转移的类别信息,以及按顺序执行微操作时的下一微操作所在的下一轨道的位置信息。由于该下一微操作对应于下一轨道的第一个轨迹点,因此该特殊轨迹点的内容可以只包含类型区域和第一地址(XADDR)信息,或除了包含类型区域和第一地址(XADDR)信息,还包含一个常数(如:‘0’)。
根据本发明技术方案,处理器系统可以如之前实施例所述,具有一个独立的结束标志存储器205;然而,根据轨道表610中的结束轨迹点就可以确定对应微操作块中的最后一个微操作,因此也可以省略之前实施例中的结束标志存储器205。
请参考图7A,其为本发明所述轨迹点格式的实施例。在本实施例中,对于非结束轨迹点,其轨迹点格式可以包括微操作类型732、第一地址734和第二地址736,其中一条轨道的至少两个轨迹点的微操作类型能被同时读出。因此,在实际存储时,可以将轨道中所有非结束轨迹点的微操作类型存储在一起,而将这些非结束轨迹点的第一地址和第二地址存储在一起。对于结束轨迹点,其轨迹点格式可以包括微操作类型732、第一地址734和值为‘0’的常数738。同样地,结束轨迹点的微操作类型732也可以和非结束轨迹点的微操作类型存储在一起,而第一地址734和常数738则可以存储在该轨道所有非结束轨迹点的第一地址、第二地址之后。此外,由于结束轨迹点的第二地址就是常数738的值‘0’,因此可以不存储该常数,当循迹器614指向结束轨迹点时直接产生第二地址‘0’。
请参考图7B,其为根据本发明技术方案使用轨道表建立新轨道的方法的一个实施例。如图7B所示,一个已建立的轨道740(用BNX0表示)可以包含三个分支微操作对应的分支点742、744和746。当审查分支点742时,一条新轨道748(用BNX=1表示的下一个可用行)被建立起来用于存储分支点742的目标微操作,且轨道表610中的所述轨道的号码或所述行号(即BNX=1)被记录在分支点742中作为第一地址。类似地,当审查分支点744时,在轨道表610中另一条新轨道350(用BNX=2表示)被建立起来,且轨道号码被记录在分支点744中;当审查分支点746时,在轨道表610中另一条新轨道752(用BNX=3表示)被建立起来,且轨道号码被记录在分支点746中。这样,单条轨道中对应全部分支点的新轨道可以被建立起来。
根据本发明技术方案,每个分支微操作的轨迹点中存储的第二地址就是该分支微操作的分支目标微操作在其所在微操作块中的偏移量。
上述各个实施例采用直接寻址的方式计算分支目标指令(微操作)地址并实现指令块(微操作块)的预取。然而,也可以使用间接寻址的方式。当采用间接寻址方式时,需要首先确定寄存器值(如:基地址寄存器值),从而计算分支目标指令地址。由于寄存器的值是因指令执行的结果而改变的,因此对于一条间接寻址分支微操作来说,在最后更新其基地址寄存器值的指令已计算得到新值、但尚未将该值写入基地址寄存器时可以根据需要通过旁路(bypass)路径取得该新值进行目标地址的计算及后续操作。
请参考图7C,其为本发明所述循迹器读指针移动的实施例。在本实施例中,循迹器读指针越过轨道表中的非分支微操作,移动到轨道表中下一分支点并等待处理器核611分支判断结果。为便于说明,图7中省略了与本实施例说明内容无关的部分或部件。在本实施例中,假设轨道表610中存储的微操作类型等微操作信息均按微操作块内偏移地址从小到大从左到右排列,即当按顺序执行这些微操作时,各个微操作信息及相应微操作类型的访问顺序为从左向右。另假设轨道表610中指令类型为‘0’代表相应的微操作为非分支微操作,微操作类型为‘1’代表相应的微操作为分支微操作。
在本实施例冲,任一时刻可以读出轨道表610中由第一地址794(块号,BNX)指出的一条轨道中由第二地址796(偏移地址,BNY)指出的代表微操作的表项,也可以读出轨道表610中由第一地址794指出的一条轨道中代表微操作类型的复数个表项甚至所有表项。
在轨道表610中每一行中微操作地址最大的一个微操作的表项的右方再增设一个结束表项以存放顺序执行下一个微操作的地址。结束表项的微操作类型总是被设定为‘1’。结束表项中微操作信息的第一地址是下一个微操作对应的块号,第二地址(BNY)恒定为零,指向该下一个微操作所在轨道的第一项。结束表项被定义为等同于一个无条件分支微操作。当循迹器指向一个结束表项时总会产生一个内部控制信号使选择器788选择轨道表610的输出780;也会产生一个内部控制信号使寄存器790更新。该内部信号可以由轨道表610中结束表项中含有的特殊位触发;也可以由第二地址796指向结束表项来触发。
在图7C中,循迹器614中主要包括了移位器782、前导零计数器784、加法器786、选择器788和寄存器790。其中移位器782将从轨道表610读出的代表复数条指令的复数个微操作类型798向左移位,其移动位数由寄存器790输出的第二地址指针796决定。移位器782输出的移位后微操作类型799的最左边一位是步进位(STEP Bit)。该步进位的信号与从处理器核611来的BRANCH信号共同决定寄存器790的更新。选择器788由控制信号TAKEN控制,其输出791为下一地址(Next Address),其中含有第一地址部分及第二地址部分。当TAKEN为‘1’(分支成功)时,选择器788选择轨道表610的输出780(含有分支目标微操作的第一地址及第二地址)做为输出791。当TAKEN为‘0’(分支不成功)时,选择器788选择现第一地址794作为输出791第一地址部分,加法器输出797做为输出791第二地址部分。微操作类型799被送到前导零计数器784以计算下一个‘1’微操作类型(代表相应微操作为分支微操作)前有多少个‘0’微操作类型(代表相应微操作为非分支微操作),其中不管步进位是‘0’或‘1’都被计算为一位‘0’。得出的前导‘0’的数目795(步进数STEP Number)则被送到加法器786与寄存器790输出的第二地址796相加以得出下一分支微操作地址797。请注意,此下一分支微操作地址就是当前微操作下一个分支微操作的第二地址,而在此之前的非分支微操作则会被循迹器614跳过(Skip)。
当第二地址指向代表一个微操作的表项时,受第二地址控制的移位器也将轨道表610输出的复数个微操作类型统一向左移位。此时代表轨道表610所读出微操作的微操作类型被移位到微操作类型799中的最左面的步进位。移位微操作类型799被送入前导零计数器计算下一条分支微操作之前微操作的条数。此时前导零计数器784的输出795即是循迹器应该前进的步长。此步长与第二地址796由加法器786相加后即得出下一分支微操作地址797。
当移位后微操作类型799中的步进位信号为‘0’时,这表示第二地址796所指向的轨道表610中的表项为非分支微操作,此时该步进位信号控制寄存器790更新,而选择器788在为‘0’的TAKEN信号792控制下选择下一分支微操作地址797成为第二地址796,第一地址794保持不变。此时新的第一第二地址指向同一轨道中的下一个分支微操作,此分支微操作前的非分支微操作均被跳过。新的第二地址控制移位器796将微操作类型798移位,使代表此分支微操作的微操作类型位落到微操作类型799的步进位上供下一步操作。
当移位后微操作类型799中的步进位信号为‘1’时,这表示第二地址所指向的轨道表610中的表项代表分支微操作。此时该步进位信号不影响寄存器790更新,寄存器790由处理器核611来的BRANCH信号793控制更新。此时加法器输出797是当前分支微操作同一轨道上的下一个分支微操作的地址,同时存储器输出780是当前分支微操作的分支目标微操作地址。
当BRANCH信号为‘1’时,选择器788的输出791更新寄存器790。如果此时处理器核来的TAKEN信号792为‘0’时,代表处理器核611决定在这个分支点选择顺序执行,此时选择器788选择下一分支微操作地址797。此时寄存器790输出的第一地址794不变,下一分支微操作地址797成为新的第二地址796。此时新的第一第二地址指向同一轨道中的下一个分支微操作。新的第二地址控制移位器796将微操作类型798移位,使代表此分支微操作的微操作类型位落到微操作类型799的步进位上供下一步操作。
如果此时处理器核611来的TAKEN信号792为‘1’时,代表处理器核611决定在这个分支点选择程序跳转到分支目标微操作,此时选择器788选择从轨道表610中读出的分支目标微操作地址780成为由寄存器790输出的第一地址794及未来第二地址795。此时BRANCH信号793控制寄存器790锁存上述第一第二地址成为新的第一第二地址。该新的第一第二地址指向可能不在同一轨道上的分支目标微操作地址。新的第二地址控制移位器796将指令类型798移位,使代表此分支微操作的微操作类型位落到微操作类型799的步进位上供下一步操作。
当第二地址指向轨迹表结束表项(下一行表项)时,如前所述内部控制信号控制选择器788选择轨道表610的输出780,并更新寄存器790。此时新的第一地址794为轨道表610的结束表项中记载的下一轨道的第一地址,第二地址为零。此时第二地址控制控制移位器796将微操作类型798移零位,开始下一步操作。如此周而复始,循迹器614与轨道表610配合,会跳过轨道表中的非分支微操作而总是指向分支微操作。
回到图6,当循迹器614的读指针631指向一个分支点时,该轨迹点内容被经由总线652读出。若该分支点中存储的是分支目标微操作地址BNX和BNY,则由该轨迹点内容中的分支目标微操作的BNX被用于对微操作存储器606寻址,可以读出包含该分支目标微操作在内的微操作块。该微操作块可以被填充到微操作读缓冲607中,以备分支转移发生后提供相应分支目标指令给处理器核611执行。具体操作可以先将总线652上的BNX、BNY送到指令读缓存607匹配,如匹配成功,则分支目标指令微操作块已在微操作读缓冲607中,不需要作后续操作。如果匹配不成功,微操作读缓冲607可以将BNX地址通过总线660送往指令微操作存储器606,读出相应微操作块经692总线存进微操作读缓冲607。同时,该地址也经总线661送往块内结束标志存储器205从中读出该指令块的结束标志送到微操作读缓冲607中与相应的微操作块一并存储。
若该分支点中存储的是分支目标指令地址,则该分支目标指令地址经总线652送出,其块地址部分经总线654被送到主动表604匹配。如果匹配成功,则得到该分支目标指令对应的微操作所在的微操作块的块号(BNX),根据映射模块107中由该BNX指向的行中存储的映射关系得到该分支目标指令对应的分支目标微操作的微操作偏移地址BNY,并将该BNX及BNY经由总线632写进该分支点中,以替换原来存储的分支目标指令地址。同时,所述BNX被用于对微操作存储器606寻址,可以读出包含该分支目标微操作在内的微操作块。该微操作块可以被填充到微操作读缓冲607中,以备分支转移发生后提供相应分支目标指令给处理器核611执行。
如果匹配不成功,则该分支目标指令地址被送到低层存储器以获取对应指令块。同时主动表604中的替换逻辑分配一个块号(BNX)给该指令块;该指令地址高位(即指令块地址)被存进主动表604中该BNX指示的表项,取来的指令块经扫描转换器转换成微操作块后,经由总线691被填充到微操作存储器103由该BNX指向的存储块,并将转换时产生的地址映射关系存储在映射模块107由该BNX指向的行中,同时根据所述映射关系得到所述分支目标指令对应的分支目标微操作的微操作偏移地址BNY,并将该BNX及BNY经由总线632写进轨道表中相应表项替换原来匹配不成功的分支目标指令地址。同时,所述BNX被用于对微操作存储器606寻址,可以读出包含该分支目标微操作在内的微操作块。该微操作块可以被填充到微操作读缓冲607中,以备分支转移发生后提供相应分支目标指令给处理器核611执行。
另外,轨道表610也经由总线658将当前正在执行的微操作块的顺序下一个微操作块的结束轨迹点内容送出。若该结束轨迹点中存储的是分支目标微操作地址BNX和BNY,则将BNX、BNY经总线658送到指令读缓存607匹配,如匹配成功,则下一微操作块已在微操作读缓冲607中,不需要作后续操作。如果匹配不成功,微操作读缓冲607可以将BNX地址通过总线660送往指令微操作存储器606,读出相应微操作块经692总线存进微操作读缓冲607。同时,该地址也经总线661送往块内结束标志存储器205从中读出该指令块的结束标志也送到微操作读缓冲607中与相应的微操作块一并存储。
若该分支点中存储的是指令块地址,则该指令块地址经总线658送出,经总线654被送到主动表604匹配。如果匹配成功,则得到该下一微操作块的块号(BNX),并将该BNX经由总线632写进该结束轨迹点中,以替换原来存储的指令块地址。同时,所述BNX被用于对微操作存储器606寻址,可以读出包含该分支目标微操作在内的微操作块。该微操作块可以被填充到微操作读缓冲607中,以备分支转移发生后提供相应分支目标指令给处理器核611执行。
如果匹配不成功,则该指令块地址被送到低层存储器以获取对应指令块。同时主动表604中的替换逻辑分配一个块号(BNX)给该指令块;该指令地址高位(即指令块地址)被存进主动表604中该BNX指示的表项,取来的指令块经扫描转换器109转换成微操作块后,经由总线691被填充到微操作存储器103由该BNX指向的存储块,并将转换时产生的地址映射关系存储在映射模块107由该BNX指向的行中,同时根据所述映射关系得到所述分支目标指令对应的分支目标微操作的微操作偏移地址BNY,并将该BNX经由总线632写进轨道表中相应结束轨迹点表项替换原来匹配不成功的指令块地址。同时,所述BNX被用于对微操作存储器606寻址,可以读出该下一微操作块。该微操作块可以被填充到微操作读缓冲607中,以备执行到当前微操作块最后一条微操作后,提供下一微操作块处理器核611执行。
当处理器核611执行循迹器614指向的分支微操作时,若所述分支微操作没有发生分支转移,则处理器核611送出的TAKEN信号320为‘0’,循迹器614的读指针631指向该分支微操作后的第一个分支点,或在该分支微操作后的轨迹点中没有分支点的情况下指向该轨道的结束轨迹点。TAKEN信号320为‘0’也使得微操作读缓冲607中令牌继续传递给分支微操作后的顺序微操作的相应令牌传递器,提供该分支微操作之后的顺序微操作给处理器核611执行。
若所述分支微操作成功发生分支转移,则处理器核611送出的TAKEN信号320为‘1’。微操作读缓冲607在TAKEN信号320为‘1’的控制下清除所有令牌传递器,并以经总线652送出的分支源表项中存储的分支目标微操作地址BNX和BNY译码,在分支目标微操作相应的令牌传递器处注入令牌,提供分支目标微操作及其之后的顺序微操作给处理器核611执行。此时,分支目标微操作块经过上述分支目标与微操作读缓冲中地址存储器的匹配过程已经存进微操作读缓冲607或至少在存储的过程中。循迹器614也在TAKEN信号320为‘1’的控制下选择经总线652送出的分支源表项中存储的分支目标微操作地址BNX和BNY锁存进循迹器614成为新的循迹器地址指针631,使指针631指向轨道表中的分支目标微操作对应的轨迹点。此后循迹器614移动读指针指向分支目标微操作块(新的当前微操作块)对应轨道中该分支目标微操作之后的第一个分支点,或在该分支目标微操作后的轨迹点中没有分支点的情况下指向该轨道的结束轨迹点。
若循迹器614指向的是轨道中的结束轨迹点,循迹器614的读指针更新为该最后轨迹点中的位置内容值,即指向下一轨道的第一个轨迹点,从而指向新的当前微操作块。当微操作读缓冲中的令牌到达一个微操作块中由结束标志标明的令牌传递器时,会被传递到下一微操作块总线上,并控制相应微操作经总线693送往处理器核611供执行,此后如无成功的分支,则令牌顺序传递。同时,循迹器614移动读指针631指向新的当前微操作块对应轨道中的第一个分支点,或在该轨道没有分支点的情况下指向该轨道的结束轨迹点。依次重复上述过程,即可在处理器核611执行微操作前将该微操作填充到微操作存储器606及微操作读缓冲607中,使得处理器核611在对该微操作的获取时延最短,从而提高处理器性能。
根据本发明所述技术方案,当主动表604表项已满且需要建立新的块地址/行号匹配对时,需要对主动表604进行替换,即从主动表604中移除一个已有的块地址/行号匹配对,代以新的块地址/行号匹配对;从微操作存储器606中移除相应的微操作块,代以新的微操作块。轨道表610中每个分支点的内容包含了其分支目标微操作轨迹点的块号(即第一地址)和偏移地址(即第二地址)。如果尚在轨道表610中存储的分支目标轨迹点的块号对应的主动表604中匹配对及相应的微操作存储块被替换,则会产生块号未变、但块号所代表的存储内容已改变的情况,导致该分支点将指向错误的微操作块。可以增加一个相关表(correlation table),记录主动表604中每个匹配对是否在轨道表中作为轨迹点中分支目标的相关信息。主动表(或微操作存储器)根据相关表中记录的信息,只替换没有作为分支目标的轨道为新的轨道。
请参考图8,其为本发明所述填充微操作读缓冲及由微操作读缓冲直接向处理器核提供微操作以供执行的实施例。为便于说明,在图8中只显示了轨道表610、循迹器614、微操作存储器606、微操作读缓冲607、微操作读缓冲相应的控制单元801和处理器核611,省略了其他部分。
在图8中,循迹器614的读指针831沿轨道表610中当前微操作块对应的轨道移动并停止在当前微操作对应轨迹点之后的第一个分支点处,并读出该轨迹点的内容833送往控制单元801。同时,从当前轨道读出的结束轨迹点的内容(即下一微操作块对应轨道的第一个轨迹点地址835)也被送到控制单元801。
控制单元801中存储了微操作读缓冲607中各行存储的微操作对应的块地址。在本实施例中,以微操作读缓冲607中的每一行存储了微操作存储器606中一个微操作块,且循迹器614读指针631指向的分支点的内容是BNX和BNY、即微操作存储器607中已经存储了相应的分支目标微操作块为例进行说明。对于所述分支点的内容是分支目标指令地址的情况,根据本发明技术方案,先按之前实施例所述方法从低层次存储器获取所述分支目标指令块,转换后填充到微操作存储器606,并将所述分支点内容相应更新为BNX和BNY,该过程不再赘述。
控制单元801对接收到的分支目标轨迹点地址和下一轨道第一个轨迹点的地址中的第一地址部分(BNX)分别进行匹配。若对分支目标轨迹点BNX和/或下一轨道BNX的匹配成功,则说明对应的微操作块已经存储在微操作读缓冲607中;否则需要将相应BNX送往微操作存储器606读出对应指令块并填充到微操作读缓冲607的可用行中。微操作读缓冲607可用行的确定方法可以采用如主动表604替换时采用的可用行确定方法,在此不再赘述。
进一步地,可以根据分支目标轨迹点地址中的第二地址部分(BNY)在微操作读缓冲607中找到对应的分支目标微操作。请参考图9,其为本发明所述控制单元进行匹配的一个实施例。为了便于说明,图9中显示了微操作读缓冲607中的一个微操作块901,及控制单元801中与该微操作块对应的控制单元子逻辑903。在本实施例中,微操作块901由8个微操作构成,按微操作地址递增顺序从上向下分别对应微操作块901中的每一项。控制单元子逻辑903包括第一地址存储器905、比较器907和911,以及目标译码器915。其中,第一地址存储器905中存储了微操作块901对应的块号(BNX)。比较器907将从总线835接收到的下一微操作块BNX与第一地址存储器905中的BNX进行匹配,若匹配成功,则比较器907输出的匹配成功信号指向微操作块901的第一个微操作(即图9中最上一项微操作),表示微操作块901就是当前微操作块的下一微操作块,且其指向的微操作就是当前微操作块执行完毕后处理器核611所需的下一微操作;若匹配不成功,则比较器907输出的信号无效,表示微操作块901不是当前微操作块的下一微操作块。
比较器911将从总线833接收到的分支目标微操作BNX与第一地址存储器905中的BNX进行匹配,若匹配成功,表示微操作块901就是所述分支目标微操作所在的微操作块,将比较器911输出的匹配成功信号作为使能信号送往目标译码器915,控制目标译码器915对接收到的分支目标微操作BNY进行译码,并根据译码结果925指向微操作块901中的一个微操作,该微操作就是所述分支目标微操作。所匹配不成功,则表示微操作块901不是所述分支目标微操作所在的微操作块,因此不向目标译码器915输出使能信号,从而阻止目标译码器915的译码。
回到图8,当循迹器614的读指针831指向一个新的轨道时,先读出该轨道的结束轨迹点内容835并送往控制单元801进行匹配。若匹配不成功,则说明在微操作读缓冲607中尚未存储该轨道对应的下一微操作块,则控制单元801将该下一微操作块BNX送往微操作存储器606读出对应微操作块并填充到微操作读缓冲607中。同时可以确定所述下一微操作块在微操作读缓冲607中的位置。若匹配成功,则说明在微操作读缓冲607中已经存储了该轨道对应的下一微操作块,可以直接确定所述下一微操作块在微操作读缓冲607中的位置。
循迹器614的读指针831则按之前实施例所述方法提前移动并停止在当前微操作对应的轨迹点之后的第一个分支点,并从轨道表610中读出分支目标轨迹点的BNX和BNY。此时,分支目标轨迹点的BNX和BNY被送往控制单元801并按图9实施例所述方法进行匹配。若匹配不成功,则说明在微操作读缓冲607中尚未存储该分支目标微操作所在的微操作块,则控制单元801将分支目标轨迹点的BNX(即其所在微操作块的BNX)送往微操作存储器606读出对应微操作块并填充到微操作读缓冲607中,并确定所述分支目标微操作在微操作读缓冲607中的位置。若匹配成功,则说明在微操作读缓冲607中已经存储了该分支目标微操作所在的微操作块,因此可以确定所述分支目标微操作在微操作读缓冲607中的位置。
这样,通过控制单元801中的匹配,可以在微操作读缓冲607中找到分支目标微操作和下一微操作块的第一个微操作。
根据本发明技术方案,控制单元801接收的时钟由系统时钟与处理器核611的流水线执行情况组合形成。即在任意一个系统始终周期内,若处理器核611需要读取一个微操作,则控制单元801接收到一个有效的时钟信号;若处理器核611因流水线暂停等原因,暂时不需要读取新的微操作,则控制单元801不会接收到时钟信号。这样,所述时钟信号表明了处理器核611当前是否需要获取微操作,因此控制单元801可以根据该时钟信号,在每个有效的时钟周期向处理器核611提供一个微操作。具体地,控制单元801中存储了对应微操作读缓冲607中当前被输出给处理器核611的微操作对应的令牌(Token)信号。即,所述令牌信号对应的微操作,就是当前输出给处理器核611所需的当前微操作。对于控制单元801而言,在每个有效时钟周期均对所述令牌信号进行传递,从而将令牌信号传递、对应到下一次处理器核611所需的微操作。这样,控制单元801可以根据令牌信号所在位置,主动向处理器核111输出正确的指令。
需要注意的时,本实施例给出的仅是控制单元801向处理器核611主动按需提供微操作的一个例子。从本发明的方案出发,可以采用其他各种合适的握手信号或通讯协议来保证控制单元801向处理器核611主动按需提供微操作,对于本领域普通技术人员来说,这些都应属于本发明所附权利要求的保护范围。
请参考图10,其为本发明所述传递令牌信号的一种实施例。为便于说明,图10只显示了轨道表1010、微操作存储器606、循迹器614、控制单元1001和包含了令牌传递器的微操作读缓冲607,其中令牌传递器1011、1013、1015和1017分别对应微操作1071、1073、1075和1077。微操作存储器606和循迹器614均与之前实施例中的相同。
此外,在本实施例中,每个微操作块对应的第一个令牌传递器中的令牌信号寄存器的输入均来源与一个与门,该与门的一个输入来源于全局总线1022,另一个输入来源于该微操作块对应的下一BNX比较器的输出。
在本实施例中,当没有分支转移发生时,微操作读缓冲607中的令牌传递器继续依次传递令牌信号,从而向处理器核611提供令牌信号所在令牌传递器对应的指令以供处理器核611执行,使得处理器核611依次执行顺序微操作。
当令牌信号从当前微操作块对应的最后一个令牌传递器传递到下一微操作块对应的第一个令牌传递器时,假设图10中的微操作1073是当前微操作块的最后一个微操作,微操作1075是下一微操作块的第一个微操作。当令牌信号位于微操作1073对应的令牌传递器1013时,控制微操作1073从总线1003输出。同时,令牌信号从总线1005输出送往或逻辑1007。或逻辑1007的其他输入来源于微操作读缓冲607中其他微操作块对应的最后一个令牌传递器,即,在微操作读缓冲607中的微操作块数目与或逻辑1007的输入数目相等且一一对应。这样,只要令牌信号被传递到任何一个微操作块对应的最后一个令牌传递器,则之后该令牌信号会被传递到或逻辑1007作为其输出。
进一步地,或逻辑1007的输出被送到微操作读缓冲607中每个微操作块对应第一个令牌传递器,如令牌传递器1015。每个微操作块对应的第一个令牌传递器的另一个输入则来源于该微操作块对应的用于确定下一微操作块的比较器(如比较器1033和1035)。从轨道表1010中当前轨道的结束轨迹点中读出的BNX被送到控制单元1001中的所有下一BNX比较器与相应的微操作块的BNX进行匹配。由于令牌传递器1015对应所述下一微操作块的第一个微操作,因此控制单元1001的所有下一BNX比较器中只有下一BNX比较器1035输出匹配成功的结果(即‘1’),其他的下一BNX比较器均输出匹配不成功的结果(即‘0’)。这样,令牌传递器1015之前的与门1019输出‘1’并写入令牌信号寄存器1009中,而其他所有令牌传递器中的令牌信号寄存器的值均为‘0’,从而将令牌信号正确地传递到下一微操作块第一个微操作对应的令牌传递器中,以继续向处理器核611输出正确的微操作供执行。
另一方面,当分支转移发生、需要将令牌信号从当前微操作对应的令牌传递器传递到分支目标微操作对应的令牌传递器时,假设图10中的令牌传递器1017是分支转移发生时令牌信号所在的令牌传递器,微操作1073是所述分支转移对应的分支目标微操作。在本实施例中,当处理器核611产生表示分支转移发生的TAKEN信号320时,该信号被送到所有令牌信号寄存器的复位端,从而清除令牌信号。同时从轨道表1010中读出的分支目标轨迹点BNX也被送到所有目标BNX比较器进行匹配。在本实施例中,由于微操作1073是所述分支转移对应的分支目标微操作,因此只有该微操作块对应的目标BNX比较器1029的比较结果为‘1’,从而控制目标译码器1021对分支目标轨迹点BNY进行译码。根据译码结果,目标译码器1021的输出1039为‘1’,并经过或门1041写入令牌信号寄存器1041,从而在下一周期可以通过总线1003向处理器核611输出分支目标微操作1073。
回到图6,当从低层次存储器获取到一个指令块时,扫描转换器608对所述指令块审查并提取出相关信息,并对其中的直接分支指令,通过对指令块地址、指令块内偏移地址及分支增量三者相加得到分支目标指令地址。同时,并将所述指令块转换为微操作块。相应地,根据由替换算法确定的BNX,所述微操作块被填充到微操作存储器606由该BNX指向的存储块中,其块地址被填充到主动表604中由该BNX指向的行中,相应的映射关系被存储到映射模块107中由该BNX指向的行中。
所述分支目标指令地址中的块地址部分送往主动表604匹配。若匹配成功并得到一个BNX,则根据映射模块107由该BNX指向的行存储的映射关系,将所述分支目标指令地址中的块内偏移地址转换为微操作偏移地址BNY,并将所述BNX和BNY存储到轨道表610中所述分支微操作对应的分支点中。若匹配不成功,则将所述分支目标指令地址直接存储在所述微操作对应的分支点中。以此类推,直至完成整个指令块的审查、提取、转换和填充。
微操作读缓冲607按之前实施例所述方法向处理器核611输出微操作供执行。循迹器614的读指针则提前移动到当前处理器核611正在执行的微操作之后的第一个分支微操作在轨道表610中对应的分支点,并读出该分支点的内容;同时,读出结束轨迹点的内容。
当从轨道表610中读出的分支点内容包含的是BNX和BNY时,将所述BNX送往微操作读缓冲607的所有控制单元进行匹配。若匹配成功,则由匹配成功的控制单元中的目标译码器对所述BNY进行译码,从而在微操作读缓冲607中找到分支目标微操作。若匹配不成功,则根据所述BNX从微操作存储器606中读出相应的微操作块填充到微操作读缓冲607中按替换算法确定的存储块中,同时由该存储块对应的控制单元中的目标译码器对所述BNY进行译码,从而在微操作读缓冲607中找到所述分支目标微操作。
当从轨道表610中读出的分支点内容包含的是分支目标指令地址时,将所述分支目标指令地址中的块地址部分送往主动表604进行匹配。若匹配成功,则将匹配得到的BNX送往微操作读缓冲607的所有控制单元进行匹配,以在微操作读缓冲607中找到所述分支目标微操作。该过程与之前实施例所述相同。
若匹配不成功,则按之前实施例所述方法从低层次存储器获取该分支目标微操作对应的指令块,进行相应的转换、审查及填充,得到所述分支目标微操作对应的BNX和BNY。同时将转换得到的微操作块填充到微操作读缓冲607中按替换算法确定的存储块中,同时由该存储块对应的控制单元中的目标译码器对所述BNY进行译码,从而在微操作读缓冲607中找到所述分支目标微操作。
相应地,可以根据从轨道表610中读出的结束轨迹点内容的不同进行类似的操作。该操作过程与对分支点的处理过程类似,不同之处在于,结束轨迹点内容对应的BNY恒为‘0’,因此不需要对BNY译码即可在BNX指向的微操作块中找到所需微操作。
这样,在处理器核611执行分支微操作之前,微操作读缓冲607就已经找到了所述分支微操作的分支目标微操作;同样地,在处理器核611执行到微操作块的最后一个微操作之前,微操作读缓冲607就已经找到了所述最后一个微操作按顺序执行的后一微操作。
当令牌信号传递到一条分支微操作时,所述分支微操作被主动送给处理器核611执行。之后,继续按顺序依次传递令牌信号,并将对应微操作送处理器核611执行,直到处理器核611执行所述分支微操作产生执行结果。若所述执行结果为分支转移没有发生,则继续传递令牌信号并输出对应微操作送处理器核611执行;循迹器614中,在TAKEN信号792的控制下选择器788选择来源于加法器786的输出,其输出在BRANCH信号793的控制下被存储到寄存器790中以更新读指针794指向下一个分支点。之后的操作过程如前所述。
若所述执行结果为分支转移成功发生,则处理器核611清除所述分支微操作之后已执行的微操作的执行结果或中间结果;同时按之前实施例所述方法将令牌信号传递到目标微操作对应的令牌信号传递器,向处理器核611输出所述目标微操作及其后微操作供执行;循迹器614中,在TAKEN信号792的控制下选择器788选择来源于轨道表610的输出,其输出在BRANCH信号793的控制下被存储到寄存器790中以更新读指针794指向分支目标微操作对应的轨迹点,并按之前实施例所述方法移动读指针794直至指向所述分支目标微操作轨迹点之后的第一个分支点。这样,新的下一轨道BNX和下一分支点的BNX及BNY均被读出并送到微操作读缓冲607,从而在微操作读缓冲607中找到相应的下一微操作块及分支目标微操作块。之后的操作过程如前所述。
可选地,微操作读缓冲607也可以仅提供下一微操作块,而由微操作存储器606提供所述分支目标微操作块。在这种情况下,可以将分支目标微操作的BNX送到微操作存储器606进行寻址,找到分支目标微操作块,并由分支目标微操作的BNY从所述分支目标微操作块中找到分支目标微操作,准备好供处理器核611执行。此时,若分支转移没有发生,则循迹器614读指针794指向下一分支点,读出分支目标微操作的BNX和BNY,并按同样方法在微操作存储器606中找到相应的分支目标微操作块并准备好分支目标微操作供处理器核611执行。若分支转移成功发生,则将所述已经准备好的分支目标微操作块填充到微操作读缓冲607,并将令牌信号传递到微操作读缓冲607中所述分支目标微操作对应的令牌传递器,以及将所述已经准备好的分支目标微操作送往处理器核611执行。之后的操作过程如前所述。
随着处理器核611的执行,若当前轨道的剩余轨迹点中已经没有分支点,则循迹器614读指针794指向结束轨迹点,并将该结束轨迹点的内容(即下一轨道的BNX和‘0’)作为读指针794的值,从而指向下一轨道;之后按前述实施例相同方法移动读指针794指向所述轨道中的第一个分支点。
当令牌信号到达当前微操作块的最后一条微操作对应的令牌信号传递器并输出相应微操作后,所述令牌信号被传递到下一微操作块第一个微操作对应的令牌信号传递器,并继续依次输出对应微操作及传递令牌信号,直到到达循迹器614读指针794之前指向的所述第一个分支点。之后的操作过程如前所述。
根据本发明技术方案,还可以对之前实施例中的部件进行组合,形成更多形式的处理器系统,以实现同样的功能。请参考图11,其为本发明所述处理器系统的另一个实施例。
如图11所示,所述处理器系统包含一个标签存储器105、一个转换器109、一个映射模块107、一个微操作存储器1106、一个微操作读缓冲1107和一个处理器核211。其中,标签存储器105和映射模块107与图2实施例中的对应部件功能相同。
微操作存储器1106和微操作读缓冲1107的结构与功能与图6实施例中的微操作存储器606及微操作读缓冲607类似。不同之处在于,微操作存储器1106中的存储块与标签存储器105中的行一一对应,可以按图2实施例所述方法根据标签存储器105中对块地址匹配成功项得到的BNX找到微操作存储器1106中的对应微操作块。而微操作读缓冲1107中的控制单元中的寄存器存储的不是对应微操作块的BNX,而是该微操作块的指令块地址。此外,在本实施例中,表示微操作块最后一个微操作的结束标志被存储在微操作存储器1106中对应每个微操作块的最后一个微操作,以及微操作读缓冲1107中每个微操作块的最后一个微操作对应的令牌传递器中。这样,当令牌信号被传递到微操作块的最后一个微操作时,微操作读缓冲1107不但输出对应微操作供处理器1111执行,还输出所述结束标志以更新指令块地址。
此外,在本实施例中,对于分支微操作,在微操作读缓冲1107中存储的不是对应的分支增量,而是补偿后的分支增量。所述补偿后的分支增量可通过之前实施例所述方法得到。
处理器核1111的结构和功能与图2实施例中的处理器核相似。不同之处在于,处理器核1111中的指令地址产生模块只生成指令地址中的块地址部分。请参考图12,其为本发明所述指令地址产生模块的另一个实施例。
在图12中,当执行顺序微操作时,由寄存器1201输出指令块地址;当执行分支目标指令时,由寄存器1203输出指令块地址。选择器1217则由表示分支转移是否发生的TAKEN信号320控制。
具体地,当处理器核1111执行顺序微操作时,若处理器核1111当前执行的微操作不是微操作块中的最后一个微操作,则选择器1217选择寄存器1201的输出反馈给寄存器1201,从而保持寄存器1201的值不变(即指令块地址不变),即从总线1121输出的是原指令块地址。
若处理器核1111当前执行的微操作是微操作块中的最后一个微操作,则,选择器1217选择来源于寄存器1201的值作为加法器1223的一个输入;加法器1223的另一个输入是来源于微操作读缓冲1107的表示当前微操作是所在微操作块中的最后一个微操作的信号1221(值为‘1’),从而对寄存器1201中存储的指令块地址进行增一操作,并将增一后的值存回寄存器1201作为新的指令块地址。这样,从总线1121输出的是下一指令块地址。
若处理器核1111执行分支微操作且分支转移发生,则此时由加法器1225对从寄存器1201送来的当前指令块地址和从微操作读缓冲1107送来的补偿后的分支增量的高位部分相加,得到新的指令块地址并存储在寄存器1203中。这样,从总线1125输出的是分支目标指令块地址。
需要说明的是,在本实施例中,指令块地址产生模块位于处理器核1111内部,并分别通过总线1121和1125输出供选择后在标签存储器105匹配。然而所述指令块地址产生模块也可以独立存在与处理器核1111之外,此情况下所有操作过程与该模块位于处理器核1111内的情况相同,在此不另行说明。
回到图11,处理器核1111通过总线1121和1125输出的指令块地址经选择器1119选择后被被送到微操作读缓冲1107的控制单元与存储在其中的指令块地址进行匹配,以确定所述块地址对应的指令块对应的微操作块是否已经存储在微操作读缓冲1107中。若尚未存储在微操作读缓冲1107中则使用上述方法在被处理器核211执行到所述微操作块前将其存储到微操作读缓冲1107中。所述指令块地址还被送到标签存储器105中进行匹配以确定所述块地址对应的指令块对应的微操作块是否已经存储在微操作存储器1106中,以及当所述微操作块已经存储在微操作存储器1106中时其对应的块号BNX。微操作读缓冲1107如图6实施例所述,随着令牌信号的传递,依次输出对应的微操作供处理器核1111执行。
具体地,当处理器核1111按地址顺序执行微操作、且未执行到当前微操作块最后一个微操作时,由于指令块地址没有改变,因此不需要进行指令块地址在微操作读缓冲1107及标签存储器105中的匹配;微操作读缓冲1107中的令牌信号在当前微操作块对应的令牌信号传递器中依次传递,并输出对应微操作供处理器核1111执行。
对于按地址顺序执行时的下一微操作块,选择器1119选择来源于总线1121的指令块地址(即下一微操作块对应的指令块地址),并在微操作读缓冲1107对该指令块地址进行匹配。
若指令块地址在微操作读缓冲1107的控制单元中匹配成功,则对应的微操作块就是所述下一微操作块。
若指令块地址在微操作读缓冲1107的控制单元中匹配不成功,则将所述指令块地址送到标签存储器105匹配。在这种情况下,若匹配成功,则得到BNX,并将微操作存储器1106中由该BNX指向的微操作块填充到微操作读缓冲1107中由替换算法确定的存储块中,使得微操作读缓冲1107包含所述下一微操作块。
若指令块地址在标签存储器105匹配不成功,则对该指令块地址低位补‘0’,构成完整的指令地址(即所述指令块地址对应的第一条指令的指令地址),再如之前实施例所述,将所述指令地址送往更低层次存储器获取对应指令块。获取来的指令块经转换器109转换为微操作块填充到微操作存储器1106中由替换算法确定的BNX指向的存储块中,并将转换得到的映射关系存储在映射模块107中由所述BNX指向的行中。同时,所述微操作块也被填充到微操作读缓冲1107中由替换算法确定的存储块中,使得微操作读缓冲1107包含所述下一微操作块。
这样,当令牌信号被传递到当前微操作块的最后一个微操作对应的令牌信号传递器时(即处理器核1111执行到所述最后一个微操作时),令牌信号受结束标志的控制,从当前微操作块最后一个微操作对应的令牌传递器直接传递到所述下一微操作块(即前述匹配成功的微操作块)的第一个微操作对应的令牌传递器,之后随着令牌信号的传递,依次输出对应的微操作供处理器核1111执行的过程如前所述。
当微操作读缓冲1107向处理器核1111输出分支微操作供执行时,可以如图12实施例所述通过对该分支微操作的块地址加上补偿后的分支增量的高位计算出分支目标指令块地址。所述指令块地址被送到微操作读缓冲1107中的控制单元进行块地址匹配,并将所述指令块地址送到标签存储器105进行块地址匹配。
若指令块地址在微操作读缓冲1107的控制单元中匹配成功,则匹配成功的微操作块就是所述分支目标指令对应的分支微操作块。此时,由于微操作存储器1106中包含了微操作读缓冲1107中的所有微操作块,因此在标签存储器105中的指令块地址匹配必定成功并得到BNX。之后,所述补偿后的分支增量中的低位部分1131作为指令块内偏移地址被送到映射模块107由所述BNX指向的映射关系转换为微操作偏移地址1133。根据微操作偏移地址1133即可在微操作读缓冲1107中匹配成功的微操作块中找到分支目标微操作。
若指令块地址在微操作读缓冲1107的控制单元中匹配不成功,则将所述指令块地址送到标签存储器105匹配。在这种情况下,若匹配成功,则得到BNX,并将微操作存储器1106中由该BNX指向的微操作块填充到微操作读缓冲1107中由替换算法确定的存储块中,使得微操作读缓冲1107包含所述分支目标微操作块。同时,所述补偿后的分支增量中的低位部分1131作为指令块内偏移地址被送到映射模块107由所述BNX指向的映射关系转换为微操作偏移地址1133。根据微操作偏移地址1133即可在微操作读缓冲1107中的所述分支目标微操作块中找到分支目标微操作。
这样,当处理器核1111尚未产生所述分支微操作的执行结果时,令牌信号继续按地址顺序依次传递并输出微操作供处理器核1111执行;当处理器核1111执行所述分支微操作并产生执行结果时,若分支转移没有发生,则令牌信号继续逐级依次传递输出对应的微操作供处理器核1111执行。若分支转移发生,则清除所述分支微操作之后已经被执行的微操作对应的执行结果及中间结果,并按图6实施例所述方法中止令牌信号的继续传递,对微操作读缓冲1107中所述BNX、BNY对应的令牌信号传递器注入令牌信号,使得微操作读缓冲1107输出相应的分支目标微操作供处理器核1111执行。之后,随着令牌信号的传递,依次输出对应的微操作供处理器核1111执行的过程如前所述。
请参考图13,其为本发明所述处理器系统的又一个实施例。如图13所示,所述处理器系统包含一个主动表604、一个扫描转换器608、一个轨道表610、一个循迹器614、一个映射模块107、一个微操作存储器606、一个选择器207、一个选择器213和一个处理器核1311。其中,主动表604、扫描转换器608、轨道表610、循迹器614、映射模块107和微操作存储器606与图6实施例中相应部件的功能和结构相同。选择器207和213与图2实施例中相应部件的功能和结构相同。
处理器核1311的结构和功能与图2实施例中的处理器核相似。不同之处在于,处理器核1311中的指令地址产生模块只生成指令地址中的偏移地址部分。请参考图14,其为本发明所述指令地址产生模块的另一个实施例。
在图14中,当执行顺序微操作时,由寄存器1405输出微操作偏移地址1323;当执行分支目标指令时,由寄存器1407输出指令偏移地址1327。选择器1415则由表示分支转移是否发生的TAKEN信号320控制。选择器1421受比较器1427的输出结果控制。
具体地,当处理器核1311执行顺序微操作时,选择器1415选择寄存器1405的输出1323送到增量器1413进行增一操作,增一后的值(即下一个微操作的偏移地址)被送到选择器1421。选择器1421的另一个输入为全‘0’。比较器1427的一个输入来源于由映射模块107送来的BNY信号234,另一个输入来源于存储在轨道表610中结束轨迹点位置信息319。当比较器1427的比较结果1439为不等时,表示所述增一后的微操作偏移地址不是结束轨迹点,因此,选择器1421受比较结果1439控制,选择来源于增量器1413的输出存储到寄存器1405中,实现微操作偏移地址增一。当比较器1427的比较结果1439为相等时,表示所述增一后的微操作偏移地址就是结束轨迹点,因此,选择器1421受比较结果1439控制,选择全‘0’存储到寄存器1405中,实现微操作偏移地址清‘0’。寄存器1405输出的微操作偏移地址1323被作为BNY用于顺序执行微操作时在微操作存储器606中进行列寻址。
当循迹器614读指针631指向一个分支点时,从轨道表610读出相应分支点内容。若所述分支点内容包含的是BNX、BNY,则使用所述BNY就可以对微操作存储器606中进行列寻址。若所述轨迹点内容包含的是分支目标指令地址,则所述分支目标指令地址中的低位部分1429被存储在寄存器1407中并作为指令偏移地址输1327出。
需要说明的是,在本实施例中,指令地址产生模块位于处理器核1311内部。然而所述指令地址产生模块也可以独立存在与处理器核1311之外,此情况下所有操作过程与该模块位于处理器核1311内的情况相同,在此不另行说明。
回到图13,与图6实施例所述方法类似,扫描转换器608对接收到的指令块进行审查和转换,在轨道表610中建立相应的轨道,并将转换得到的微操作块存储在微操作存储器606中。循迹器614读指针631指向当前微操作对应的轨迹点之后的第一个分支点,并读出所述分支点的内容。
若所述分支点内容包含的是BNX和BNY,则微操作存储器606中由所述BNX及BNY指向的微操作就是分支目标微操作。同时,所述BNY被送到如图14所示的指令地址产生模块作为选择器1415的输入1417。
若所述分支点内容包含的是分支目标指令地址,则所述分支目标指令地址中的指令块地址部分被送到主动表604匹配。若指令块地址在主动表604中匹配成功,则得到该指令块对应的BNX,并将所述分支目标指令地址中的指令偏移地址送到映射模块107中根据由所述BNX指向的映射关系转换为微操作偏移地址BNY。这样,微操作存储器606中由所述BNX及BNY指向的微操作就是分支目标微操作。同时,所述BNY被送到如图14所示的指令地址产生模块作为选择器1415的输入1417。
若指令块地址在主动表604中匹配不成功,则按之前实施例所述方法将所述分支目标指令地址送往低层次存储器以获取对应指令块。当所述指令块被获取到时,扫描转换器608对所述指令块进行审查,在轨道表610中建立相应轨道,并将所述指令决转换为微操作块并填充到微操作存储器606中由替换算法确定的BNX指向的存储块中,同时将转换时生成的映射关系存储在映射模块107中由所述BNX指向的行中。在转换过程中,同时也产生了所述分支目标指令对应的微操作的偏移地址BNY。这样,微操作存储器606中由所述BNX及BNY指向的微操作就是分支目标微操作。同时,所述BNY被送到如图14所示的指令地址产生模块作为选择器1415的输入1417。
当处理器核1311尚未执行到所述分支微操作,或执行所述分支微操作但尚未产生执行结果时,向处理器核1311由循迹器614读指针631中BNX指向微操作存储器606的一个微操作块中由指令地址产生模块中寄存器1405输出的BNY指向的一个微操作供执行。
当处理器核1311执行分支微操作产生执行结果时,若分支转移没有发生,则循迹器614读指针631继续移动指向下一个分支点并重复上述操作。若分支转移成功发生,则清除所述分支微操作之后已经被执行的微操作对应的执行结果及中间结果,根据轨道表610的分支点内容中包含的BNX和BNY从微操作存储器606中读出所述分支目标微操作供处理器核1311执行。同时,循迹器614读指针631的值也相应更新为所述BNX和BNY,并继续移动直到指向所述分支目标微操作之后的第一个分支点。所述BNY还被送到指令地址产生模块作为选择器1415的输入1417,并被选择器1415选择后送往增量器1413以计算下一微操作对应的BNY。后续操作与之前实施例所述相同,在此不再赘述。
根据本发明技术方案,可以对图2实施例进行扩展,以支持更多层次的缓存结构。请参考图15A,其为本发明所述包含多级缓存的处理器系统的一个实施例。
在图15A中,所述处理器系统包含微操作存储器103、标签存储器105、结束标志存储器205、映射模块107、转换器109、二级指令存储器1503、二级标签存储器1505和处理器核211。其中,微操作存储器103、标签存储器105、结束标志存储器205、映射模块107、转换器109和处理器核211与图2实施例中的相应部件的结构和功能相同。
在图15A中,微操作存储器103相当于存储了微操作的一级缓存,标签存储器105相当于一级标签存储器。而二级指令存储器1503则是存储了指令的二级缓存,二级标签存储器1505则是与二级指令存储器1503对应的标签存储器。
在本实施例中,转换器109位于微操作存储器103和二级指令存储器1503之间,只有从二级指令存储器1503输出向微操作存储器103填充的指令块才会被转换并产生映射关系。因此,一级缓存系统(包括微操作存储器103、标签存储器105、结束标志存储器205、映射模块107和转换器109)的操作过程与图2实施例相同,而二级缓存系统(包括二级指令存储器1503和二级标签存储器1505)的操作过程与传统的二级缓存系统相同,在此均不再说明。
根据本发明技术方案,也可以将转换器放置在二级缓存之外,使得二级缓存中也存储微操作。请参考图15B,其为本发明所述包含多级缓存的处理器系统的另一个实施例。
在图15B中,所述处理器系统包含微操作存储器103、标签存储器105、结束标志存储器205、映射模块107、转换器1559、二级微操作存储器1553、二级标签存储器1555、映射模块1557、结束标志存储器1561和处理器核211。其中,微操作存储器103、标签存储器105、结束标志存储器205、映射模块107和处理器核211与图15A实施例中的相应部件的结构和功能相同。
在图15B中,微操作存储器103、标签存储器105、结束标志存储器205和映射模块107构成了一级缓存系统,二级微操作存储器1553、二级标签存储器1555、映射模块1557和结束标志存储器1561构成了二级缓存系统。与图15A类似,微操作存储器103相当于存储了微操作的一级缓存,标签存储器105相当于一级标签存储器。不同之处在于,二级微操作存储器1553是存储了微操作的二级缓存,而二级标签存储器1555是与二级指令存储器1553对应的标签存储器,映射模块1557中存储了二级微操作存储器1553中各个微操作偏移地址与相应的指令偏移地址之间的映射关系。
在本实施例中,转换器1559位于二级微操作存储器1553之外,因此从更低层次存储器送来的指令块先经转换器1559转换为微操作块后再填充到二级微操作存储器1503中由替换算法确定的存储块中。相应地,指令块地址及转换产生的映射关系被分别填充到二级标签存储器1555及映射模块1557的相应行中,并将微操作的最后一个微操作位置信息填充到结束标志存储器1561的相应行中。
具体地,当处理器核211所需的微操作的块地址在标签存储器105中匹配成功时,即所需微操作位于微操作存储器1553中,则处理器核211取指、执行的过程如图2实施例所述,在此不再说明。
当处理器核211所需的微操作的块地址在标签存储器105中匹配不成功时,该块地址被送到二级标签存储器1555进行匹配。若所述块地址在二级标签存储器1555中匹配成功,则得到匹配成功项对应的二级块号BN2X。根据所述BN2X对二级微操作存储器1553寻址,读出对应的微操作块并填充到微操作存储器103中由替换算法确定的一级块号BN1X指向的存储块中;同时从映射模块1557中读出由所述BN2X指向的映射关系并填充到映射模块107中由所述BN1X指向的行中,从而完成将微操作块从二级缓存填充到一级缓存的操作。之后处理器核211从一级缓存系统获取微操作的过程如前所述。
若所述块地址在二级标签存储器1555中匹配不成功,则对该指令块地址低位补‘0’,构成完整的指令地址(即所述指令块地址对应的第一条指令的指令地址),再如之前实施例所述,将所述指令地址送往更低层次存储器获取对应指令块。当所述指令块被送到二级缓存时,转换器1559将所述指令块转换微操作块、产生相应的映射关系,并得到结束标志(即最后一个微操作对应的位置信息)。所述指令块地址被填充到二级标签存储器1555中由替换算法确定的二级块号BN2X指向的行中;所述微操作块被填充到二级微操作存储器1553中由所述BN2X指向的存储块中;所述映射关系被填充到映射模块1557中由所述BN2X指向的行中;所述结束标志被填充到结束标志存储器1561中由所述BN2X指向的行中。这样就完成了指令块填充到二级缓存的过程。
所述指令块地址、微操作块、映射关系和结束标志也被分别填充到一级缓存中的标签存储器105、微操作存储器103、映射模块107和结束标志存储器205中由替换算法确定的一级块号BN1X指向的行或存储块中。该过程及处理器核211从一级缓存获取微操作的过程如前所述。
需要说明的是,本实施例所述结构和操作过程还可以被扩展到更多层次的缓存系统中。
根据本发明技术方案,还可以对图6实施例进行扩展,以支持更多层次的缓存结构。请参考图16,其为本发明所述包含多级缓存的处理器系统的另一个实施例。
在图16中,所述处理器系统包含轨道表1601、一级微操作存储器1603、二级指令存储器1605、标签存储器1607、映射模块1609、循迹器1613、扫描转换器1615和处理器核1611。其中,轨道表1601、一级微操作存储器1603、循迹器1613和扫描转换器1615构成了一级缓存系统;二级指令存储器1605、标签存储器1607和映射模块1609构成了二级缓存系统。
在本实施例中,二级指令存储器1605中的存储块与标签存储器1607中的行及映射模块1609中的行一一对应,并由同一个BN2X指向。二级指令存储器1605中的存储块用于存储指令块,所述指令块的块地址被存储在标签存储器1607的对应行中。二级指令存储器1605中的指令在其所在二级指令块中的偏移地址为BN2Y(即指令地址的低位部分)。
与图6实施例类似,一级微操作存储器1603中的存储块与轨道表1601中的行(轨道)一一对应,并由同一个BN1X指向。一级微操作存储器1603的存储块用于存储与指令块对应的微操作块。一级微操作存储器1603中的微操作在其所在一级微操作块中的偏移地址为BN1Y。
在本实施例中,二级指令块的大小与一级微操作块对应的指令块大小相同。映射模块1609中存储了每个一级微操作块与二级缓存系统中二级指令块的对应关系,以及每个一级微操作块中指令偏移地址和微操作偏移地址的映射关系。
具体地,若一个二级指令块对应的微操作块已经被存储在一级缓存系统中,则在映射模块1609中由所述二级指令块的BN2X指向的行有效,其中存储了所述微操作块在一级缓存系统中的BN1X,以及所述微操作块的映射关系。若一个二级指令块对应的微操作块尚未被存储在一级缓存系统中,则在映射模块1609中由所述二级指令块的BN2X指向的行无效。这样,映射模块1609可以根据接收到的BN2X和BN2Y,在所述BN2X指向的行有效时,输出对应的BN1X和BN1Y。
扫描转换器1615用于审查从二级指令存储器1605填充到一级微操作存储器1603的指令块并在轨道表1601中由所述BN1X指向的行中建立相应轨道,同时将所述指令块转换为微操作块,将该微操作块填充到微操作存储器1603中由替换算法确定的BN1X指向的存储块中,并将转换得到的映射关系与所述BN1X一起填充到映射模块1609中由所述被填充的指令块的BN2X指向的行中并记为有效。
轨道表1601中的分支点内容可以是分支目标微操作在一级缓存系统中的位置信息(即BN1X和BN1Y),或分支目标指令在二级缓存系统中的位置信息(即BN2X和BN2Y)。具体地,扫描转换器1615计算得到的分支目标指令地址的块地址部分被送到标签存储器1607匹配。若所述块地址在标签存储器1607中匹配成功,则得到所述分支目标指令对应的BN2X。根据该BN2X及分支目标指令地址低位部分(BN2Y)对映射模块1609寻址,若读出的内容为有效,则表示所述分支目标指令所在的指令块对应的微操作块已经存储在一级缓存系统中,得到对应的BN1X、根据所述BN2X指向的行中的映射关系转换得到BN1Y,并将所述BN1X和BN1Y经选择器1621选择后作为轨迹点内容存储到所述分支点中。若读出的内容为无效,则表示所述分支目标指令所在的指令块对应的微操作块尚未存储在一级缓存系统中,直接将所述BN2X和分支目标指令地址低位部分(BN2Y)经选择器1621选择后作为轨迹点内容存储到所述分支点中。
若所述块地址在标签存储器1607中匹配不成功,则对该指令块地址低位补‘0’,构成完整的指令地址(即所述指令块地址对应的第一条指令的指令地址),再如之前实施例所述,将所述指令地址送往更低层次存储器获取对应指令块。当所述指令块被送到二级缓存时,将所述块地址填充到标签存储器1607中由替换算法确定的BN2X指向的行中,将所述指令块填充到所述BN2X指向的存储块中,并将映射模块1609中所述BN2X指向的行置为无效。所述所述BN2X和分支目标指令地址低位部分(BN2Y)经选择器1621选择后作为轨迹点内容存储到所述分支点中。
循迹器1613的按之前实施例所述方法移动读指针1631指向轨道表1601中处理器核1611正在执行的微操作之后的第一个分支点,并读出分支点内容。若读出的分支点内容是BN1X和BN1Y,则表示所述分支指令的分支目标微操作已经存储在一级缓存系统中,可以直接供处理器核1611读取。若读出的分支点内容是BN2X和BN2Y,则表示所述分支指令的分支目标微操作可能尚未存储在一级缓存系统中。此时,将所述BN2X和BN2Y送往映射模块1609寻址,若映射模块1609中由所述BN2X指向的行有效,则可以读出对应的BN1X,并根据映射关系将所述BN2Y转换为BN1Y。这样,所述分支指令的分支目标微操作已经存储在一级缓存系统中,可以直接供处理器核1611读取。同时,所述BN1X和BN1Y经选择器1621选择后作为轨迹点内容被填回所述分支点中。
若映射模块1609中由所述BN2X指向的行无效,则表示所述分支指令的分支目标微操作尚未存储在一级缓存系统中。此时,二级指令存储器1605将所述BN2X指向的指令块送往扫描转换器1615审查及转换,在轨道表1601中由替换算法确定的BN1X指向的行中建立对应轨道,并将转换得到的微操作块填充到一级微操作存储器1603中由所述BN1X指向的存储块中。同时,所述BN1X和转换得到的映射关系被填充到映射模块1609中由所述BN2X指向的行中并记为有效。这样,所述分支指令的分支目标微操作已经存储在一级缓存系统中,可以直接供处理器核1611读取。同时,所述BN1X和BN1Y经选择器1621选择后作为轨迹点内容被填回所述分支点中。
处理器核1611按之前实施例所述方法输出微操作偏移地址在微操作存储器1603中由循迹器1613读指针1631指向的存储块中读出所需微操作。对于顺序执行微操作、执行分支微操作时分支转移没有发生、执行分支微操作时分支转移成功发生等情况的具体操作过程均与之前实施例所述相同,在此不再说明。此外,在本实施例中采用的是由处理器核输出微操作偏移地址的方式获取微操作。然而,本实施例的两层缓存结构也适用于由微操作读缓冲直接输出微操作供处理器核执行的情况,由于操作过程类似,在此也不再具体说明。
在图16实施例中,映射模块1609的行与标签存储器1607的行及二级指令存储器1605的存储块一一对应,因此其中的有些行中的映射关系可能是无效的。为了减少映射模块的大小,也可以将映射模块的行改为与轨道表中的行及一级微操作存储器中的存储块一一对应,这样,映射模块中的每行映射关系都是有效的。请参考图17,其为本发明所述包含多级缓存的处理器系统的另一个实施例。
在图17中,所述处理器系统包含轨道表1601、一级微操作存储器1603、二级指令存储器1605、标签存储器1607、块号存储器1707、映射模块1709、循迹器1613、扫描转换器1615和处理器核1611。其中,轨道表1601、一级微操作存储器1603、循迹器1613、映射模块1709和扫描转换器1615构成了一级缓存系统;二级指令存储器1605、标签存储器1607和块号存储器1707构成了二级缓存系统。
在本实施例中,轨道表1601、一级微操作存储器1603、二级指令存储器1605、标签存储器1607、循迹器1613、扫描转换器1615和处理器核1611与图16实施例中的相应部件相同。不同之处在于,块号存储器1707中的行与标签存储器1607的行及二级指令存储器1605的存储块一一对应,并由同一个BN2X指向。具体地,若一个二级指令块对应的微操作块已经被存储在一级缓存系统中,则在块号存储器1707由所述二级指令块的BN2X指向的行有效,其中存储了所述微操作块在一级缓存系统中的BN1X。若一个二级指令块对应的微操作块尚未被存储在一级缓存系统中,则在块号存储器1707中由所述二级指令块的BN2X指向的行无效。这样,块号存储器1707可以根据接收到的BN2X,在所述BN2X指向的行有效时,输出对应的BN1X。此外,映射模块1709中的行与轨道表1601中的行及一级微操作存储器1603中的存储块一一对应,并由同一个BN1X指向。在此,映射模块1709与图6实施例中的映射模块107类似,存储了相应微操作块与指令块的地址映射关系。这样,在本实施例中,图16实施例的映射模块1607被拆分为块号存储器1707和映射模块1709两部分,用较小的面积实现了同样的功能。
在本实施例中,当扫描转换器1615计算得到的分支目标指令地址的块地址部分被送到标签存储器1607匹配成功且得到BN2X时,由所述BN2X在块号存储器1707中寻址,若读出的行有效,表示所述BN2X指向的指令块对应的微操作块已经被存储在一级微操作存储器1603由所述读出的BN1X指向的存储块中。此时,所述分支目标指令地址的低位部分(即BN2Y)则根据映射模块1709中由所述读出的BN1X指向的映射关系转换为BN1Y。所述BN1X和BN1Y经选择器1621选择后作为轨迹点内容被填充到所述分支点中。若读出的行无效,则直接将所述BN2X和BN2Y经选择器1621选择后作为轨迹点内容被填充到所述分支点中
类似地,当循迹器1613读指针1631指向的分支点的内容为BN2X和BN2Y时,所述BN2X被送到块号存储器1707寻址,若块号存储器1707中由所述BN2X指向的行有效,则可以读出对应的BN1X,并根据映射模块1709中由所述读出的BN1X指向的映射关系将所述BN2Y转换为BN1Y。这样,所述分支指令的分支目标微操作已经存储在一级缓存系统中,可以直接供处理器核1611读取。同时,所述BN1X和BN1Y经选择器1621选择后作为轨迹点内容被填回所述分支点中。
若块号存储器1707中由所述BN2X指向的行无效,则表示所述分支指令的分支目标微操作尚未存储在一级缓存系统中。此时,二级指令存储器1605将所述BN2X指向的指令块送往扫描转换器1615审查及转换,在轨道表1601中由替换算法确定的BN1X指向的行中建立对应轨道,并将转换得到的微操作块填充到一级微操作存储器1603中由所述BN1X指向的存储块中,及将转换得到的映射关系存储在映射模块1709中由所述BN1X指向的行中。同时,所述BN1X被填充到块号存储器1707中由所述BN2X指向的行中并记为有效。这样,所述分支指令的分支目标微操作已经存储在一级缓存系统中,可以直接供处理器核1611读取。同时,所述BN1X和BN1Y经选择器1621选择后作为轨迹点内容被填回所述分支点中。
在本实施例中,其它操作与图16实施例中的相应操作相同,在此不再详细说明。
根据本发明技术方案,还可以对图16或图17实施例进一步扩展,以支持更多层次的缓存结构。请参考图18,其为本发明所述包含多级缓存的处理器系统的另一个实施例。
在图18中,所述处理器系统包含一级轨道表1801、一级微操作存储器1803、二级微操作存储器1805、二级轨道表1807、映射模块1809、循迹器1813、扫描转换器1815、微操作读缓冲1817、三级指令存储器1819、标签存储器1821和处理器核1811。其中,一级轨道表1801、一级微操作存储器1803、循迹器1813和微操作读缓冲1817构成了一级缓存系统;扫描转换器1815、二级指令存储器1805、二级轨道表1807和映射模块1809构成了二级缓存系统;三级指令存储器1819和标签存储器1821构成了三级缓存系统。
在本实施例中,一级轨道表1801中的行与一级微操作存储器1803中的存储块一一对应,且由同一个BN1X指向。一级微操作存储器1803中存储的是一级微操作块,并在轨道表1801中建有相应的轨道。
二级轨道表1807中的行与二级微操作存储器1805中的存储块及映射模块1809中的行一一对应,且由同一个BN2X指向。二级微操作存储器1805中存储的是二级微操作块,并在轨道表1807中建有相应的轨道。映射模块1809中的行存储了二级微操作存储器1805中的对应微操作块的微操作偏移地址和指令地址之间的映射关系。二级轨道表1807中的每行中还存储了相应二级微操作块是否已经存储在一级缓存系统中的信息。为便于说明,在本实施例中,以一级微操作块对应的一级指令块的大小是二级微操作块对应的二级指令块的一半,而二级微操作块对应的二级指令块的大小是三极指令块的一半为例进行说明。对于其他情况,均可以此类推。
具体地,对于二级轨道表1807中的每一行,最多可以存储两个相应的BN1X。例如,若一个二级微操作块对应的两个一级微操作块均已经存储在一级微操作存储器1803中,则将这两个一级微操作块各自对应的BN1X存储在二级轨道表1807中由所述二级微操作块的BN2X指向的行中。又如,若所述两个一级微操作块中只有一个存储在一级微操作存储器1803中,则将所述已存储的一级微操作块对应的BN1X存储在二级轨道表1807中由所述BN2X指向的行中,而该行中的另一个存储BN1X的项为无效。再如,若所述两个一级微操作块均未存储在一级微操作存储器1803中,则二级轨道表1807中由所述BN2X指向的行中的两个存储BN1X的项均为无效。
标签存储器1821中的行与三级指令存储器1819中的存储块一一对应,且由同一个BN3X指向。三级指令存储器1819中存储的是三级指令块,其对应的指令块地址存储在标签存储器1821中由同一个BN3X指向的行中。标签存储器1821的所述行中还存储了指令块对应的微操作块是否已经存储在一级或二级缓存系统中的信息。需要注意的是,存储在一级缓存系统中的微操作块是存储在二级缓存系统中的微操作块的子集,因此如果标签存储器1821中的存在一个有效的BN1X,则必定存在对应的有效的BN2X。此外,根据二级微操作块和一级微操作块的包含关系,映射模块1809还可以将BN2Y转换为BN1Y,或直接将BN3Y转换为BN1Y。
具体地,对于标签存储器1821中的每一行,最多可以存储两个相应的BN2X和四个相应的BN1X。例如,若一个三级指令块对应的两个二级指令块对应的二级微操作块均已经存储在二级微操作存储器1805中,则将这两个二级微操作块各自对应的BN2X存储在标签存储器1821中由所述三级指令块的BN3X指向的行中。又如,若所述两个二级微操作块中只有一个存储在二级微操作存储器1805中,则将所述已存储的二级微操作块对应的BN2X存储在标签存储器1821中由所述BN3X指向的行中,而该行中的另一个存储BN2X的项为无效。再如,若所述两个二级微操作块均未存储在二级微操作存储器1805中,则标签存储器1821中由所述BN3X指向的行中的两个存储BN2X的项均为无效。类似地,根据三级指令块对应的四个一级指令块对应的一级微操作块在一级缓存系统中的存储情况,标签存储器1821中由所述三级指令块的BN3X指向的行中的四个存储BN1X的项可以被相应设置为全部有效(即有BN1X值)、部分有效(即有BN1X值)或全部无效。
扫描转换器1815审查从三级指令存储器1819填充到二级微操作存储器1805的指令块并在二级轨道表1807中由替换算法确定的BN2X指向的行中建立相应轨道,并将所述指令块转换为微操作块,将该微操作块填充到二级微操作存储器1805中由所述BN2X指向的存储块中,并将所述BN2X填充到标签存储器1821中由所述BN3X指向的行中,及将转换得到的映射关系填充到映射模块1809中由所述BN2X指向的行中。
二级轨道表1807中的分支点内容可以是分支目标微操作在一级缓存系统中的位置信息(即BN1X和BN1Y),或分支目标微操作在二级缓存系统中的位置信息(即BN2X和BN2Y),或分支目标指令在三级缓存系统中的位置信息(即BN3X和BN3Y)。
具体地,扫描转换器1815计算得到的分支目标指令地址的块地址部分被送到标签存储器1821匹配。若所述块地址在标签存储器1821中匹配成功,则得到所述分支目标指令对应的BN3X。同时,根据所述分支目标指令的偏移地址(即BN3Y)可以确定其位于所述三级指令块包含的哪一个一级指令块(或二级指令块)中,并以此读出存储在标签存储器1821中所述匹配成功行中相应存储的BN1X或BN2X。
若能读出有效的BN1X及相应的BN2X,则表示所述分支目标指令所在的指令块对应的微操作块已经存储在一级缓存系统中,根据映射模块1809中由所述BN2X指向的行中的映射关系将所述BN3Y转换为BN1Y,并将所述BN1X和BN1Y经选择器1821选择后作为轨迹点内容存储到二级轨道表1807的所述分支点中。
若只能读出有效的BN2X但没有有效的BN1X,则表示所述分支目标指令所在的指令块对应的微操作块已经存储在二级缓存系统中,根据映射模块1809中由所述BN2X指向的行中的映射关系将所述BN3Y转换为BN2Y,并将所述BN2X和BN2Y经选择器1821选择后作为轨迹点内容存储到二级轨道表1807的所述分支点中。
若没有有效的BN1X或BN2X,则表示所述分支目标指令所在的指令块对应的微操作块尚未存储在一级或二级缓存系统中,此时直接将所述BN3X和BN3Y经选择器1821选择后作为轨迹点内容存储到二级轨道表1807的所述分支点中。
一级轨道表1801中的分支点内容可以是分支目标微操作在一级缓存系统中的位置信息(即BN1X和BN1Y),或分支目标微操作在二级缓存系统中的位置信息(即BN2X和BN2Y)。
当循迹器1813读指针指向一级轨道表1801中的分支点时,读出分支点内容。若读出的分支点内容是BN1X和BN1Y,则表示所述分支指令的分支目标微操作已经存储在一级缓存系统中,可以直接供处理器核1811读取。若读出的分支点内容是BN2X和BN2Y,则表示所述分支指令的分支目标微操作可能尚未存储在一级缓存系统中。此时,将所述BN2X送到二级轨道表1807寻址,并根据所述BN2Y从存储在该行的两个BN1X项中读出相应的一个。
若读出的BN1X是有效的,则表示所述微操作块已经存储在一级缓存系统中。此时,可以根据映射模块1809中由所述BN2X指向的映射关系将所述BN2Y转换为BN1Y。所述BN1X和BN1Y经选择器1821选择后作为轨迹点内容被填回一级轨道表1801的所述分支点中。
若读出的BN1X是无效的,则表示所述微操作块尚未存储在一级缓存系统中。此时,可以将二级微操作存储器1805中由所述BN2X指向的二级微操作块中相应的一级微操作块填充到一级微操作存储器1803中由替换算法确定的BN1X指向的存储块,并将二级轨道表1807中由所述BN2X指向的轨道中相应的一级轨道填充到一级轨道表1801中由所述BN1X指向的行中。在此过程中,若被填充的轨迹点内容是BN1X和BN1Y,或BN2X和BN2Y,则可以直接将所述轨迹点内容经选择器1823选择后填充到一级轨道表1801的相应轨迹点中。
若被填充的轨迹点内容是BN3X和BN3Y,则根据所述BN3Y可以确定其位于所述三级指令块包含的哪一个一级指令块(或二级指令块)中,并以此读出存储在标签存储器1821中所述BN3X指向的行中相应存储的BN1X或BN2X。若能读出有效的BN1X及相应的BN2X(或只能读出有效的BN2X),则表示所述BN3X和BN3Y指向的微操作块已经存储在一级缓存系统(或二级缓存系统)中,根据映射模块1809中由所述BN2X指向的行中的映射关系将所述BN3Y转换为BN1Y(或BN2Y),并将所述BN1X和BN1Y(或BN2X和BN2Y)经选择器1823选择后作为轨迹点内容存储到一级轨道表1801的所述被填充的轨迹点中。
若没有有效的BN1X或BN2X,则表示所述BN3X和BN3Y指向的微操作块尚未存储在一级或二级缓存系统中,此时,可以根据所述BN3Y确定三级指令存储器1819中由所述BN3X指向的三级指令块中需要被填充的二级缓存系统的二级指令块,并由扫描转换器1815对所述二级指令块进行审查、转换,在二级轨道表1807由替换算法确定的BN2X指向的行中建立相应轨道,并将转换得到的二级微操作块填充到二级微操作存储器1805中由所述BN2X指向的存储决,及将转换得到的映射关系填充到映射模块由所述BN2X指向的行的过程如前所述。根据所述映射关系,可以将所述BN3Y转换为BN2Y。所述BN2X和BN2Y经选择器1823选择后作为轨迹点内容存储到一级轨道表1801的所述被填充的轨迹点中。
经过如上过程,就可以保证一级轨道表1801中的分支点内容都是BN1X和BN1Y或BN2X和BN2Y,且循迹器1813读指针1831指向的分支点的内容是BN1X和BN1Y。即,处理器核1811近期可能执行到的微操作均被提前填充到二级微操作存储器1805中,而立即可能执行到微操作均被提前填充到一级微操作存储器1803中,从而掩盖或缩短了向处理器核1811提供微操作的等待时间。
在本实施例中,其他操作过程与之前实施例所述相同,在此不再赘述。
请参考图19,其为本发明所述包含多级缓存的处理器系统的另一个实施例。在图19中,所述处理器系统包含一级轨道表1901、一级微操作存储器1803、二级微操作存储器1805、块号存储器1907、映射模块1809、循迹器1813、扫描转换器1815、扫描器1915、微操作读缓冲1817、三级指令存储器1819、标签存储器1821和处理器核1811。其中,扫描器1915、一级轨道表1901、一级微操作存储器1803、循迹器1813和微操作读缓冲1817构成了一级缓存系统;扫描转换器1815、二级指令存储器1805、块号存储器1907和映射模块1809构成了二级缓存系统;三级指令存储器1819和标签存储器1821构成了三级缓存系统。
在本实施例中,处理器核1811、一级微操作存储器1803、二级微操作存储器1805、映射模块1809、循迹器1813、扫描转换器1815、微操作读缓冲1817、三级指令存储器1819和标签存储器1821与图18实施例中的相应部件相同。
一级轨道表1901也与图18中的一级轨道表1801类似,其行与一级微操作存储器1803中的存储块一一对应,且由同一个BN1X指向。不同之处在于,一级轨道表1901中的分支点内容可以是分支目标微操作在一级缓存系统中的位置信息(即BN1X和BN1Y),或分支目标微操作在二级缓存系统中的位置信息(即BN2X和BN2Y),或分支目标微操作在三级缓存系统中的位置信息(即BN32X和BN3Y)。
此外,在本实施例中没有图18实施例中的二级轨道表1807,而是用块号存储器1907存储了每个二级块号对应的一级块号信息(即图18中二级轨道表1807中的一级块号信息)。同时,扫描器1915用于对从二级微操作存储器1805向一级微操作存储器1803填充的一级微操作块进行审查并在一级轨道表1901中建立相应轨道。
具体地,当从二级微操作存储器1805送来的一级微操作块被存储到一级微操作存储器1803中由替换算法确定的BN1X指向的存储块时,扫描器1915审查所述微操作块并计算其中分支微操作块的分支目标指令地址。所述分支目标指令地址中的块地址部分被送到标签存储器1821进行匹配。所述分支目标指令地址中的低位部分就是指令偏移地址BN3Y。
若所述块地址在标签存储器1821中匹配成功得到BN3X,且能读出有效的BN1X及相应的BN2X(或只能读出有效的BN2X),则表示所述BN3X和BN3Y指向的微操作块已经存储在一级缓存系统(或二级缓存系统)中,根据映射模块1809中由所述BN2X指向的行中的映射关系将所述BN3Y转换为BN1Y(或BN2Y),并将所述BN1X和BN1Y(或BN2X和BN2Y)经选择器1923选择后作为轨迹点内容存储到一级轨道表1901的所述被填充的轨迹点中。
若所述块地址在标签存储器1821中匹配不成功,则表示所述分支目标指令块对应的微操作块尚未存储在一级缓存系统或二级缓存系统中。此时,将所述分支目标指令地址送往更低层次存储器,并将获取到的。当所述分支目标指令块填充到三级指令存储器1819中由替换算法确定的BN3X指向的存储块中,并将所述BN3X和BN3Y经选择器1923选择后作为轨迹点内容存储到一级轨道表1901的所述被填充的轨迹点中。
当循迹器1813读指针指向一级轨道表1901中的分支点时,读出分支点内容。若读出的分支点内容是BN1X和BN1Y,则表示所述分支指令的分支目标微操作已经存储在一级缓存系统中,可以直接供处理器核1811读取。
若读出的分支点内容是BN2X和BN2Y,则表示所述分支指令的分支目标微操作可能尚未存储在一级缓存系统中。此时,将所述BN2X送到块号存储器1907寻址,并根据所述BN2Y从存储在该行的两个BN1X项中读出相应的一个。若读出的BN1X是有效的,则表示所述微操作块已经存储在一级缓存系统中。此时,可以根据映射模块1809中由所述BN2X指向的映射关系将所述BN2Y转换为BN1Y。所述BN1X和BN1Y经选择器1923选择后作为轨迹点内容被填回一级轨道表1901的所述分支点中。若读出的BN1X是无效的,则表示所述微操作块尚未存储在一级缓存系统中。此时,可以将二级微操作存储器1805中由所述BN2X指向的二级微操作块中相应的一级微操作块填充到一级微操作存储器1803中由替换算法确定的BN1X指向的存储块,同时由扫描器1915对所述微操作块进行审查并在一级轨道表1901中由所述BN1X指向的行中建立相应轨道。同时,可以根据映射模块1809中由所述BN2X指向的映射关系将所述BN2Y转换为BN1Y。所述BN1X和BN1Y经选择器1923选择后作为轨迹点内容被填回一级轨道表1901的所述分支点中。
若读出的分支点内容是BN3X和BN3Y,则表示所述分支指令的分支目标微操作可能尚未存储在一级缓存系统或二级存储系统中。此时,将所述BN3X送到标签存储器1821中寻址,并根据所述BN3Y从存储在该行的四个BN1X和两个BN2X项中读出相应的BN1X和BN2X。若读出的BN1X是有效的(此时BN2X也有效),则表示所述微操作块已经存储在一级缓存系统中。此时,可以根据映射模块1809中由所述BN2X指向的映射关系将所述BN3Y转换为BN1Y。所述BN1X和BN1Y经选择器1923选择后作为轨迹点内容被填回一级轨道表1901的所述分支点中。若读出的BN1X无效但BN2X有效,则表示所述微操作块已经存储在二级缓存系统中。此时,可以将二级微操作存储器1805中由所述BN2X指向的二级微操作块中相应的一级微操作块填充到一级微操作存储器1803中由替换算法确定的BN1X指向的存储块,同时由扫描器1915对所述微操作块进行审查并在一级轨道表1901中由所述BN1X指向的行中建立相应轨道。同时,所述BN1X被填充到标签存储器中所述BN3X指向的行中的相应位置,并根据映射模块1809中由所述BN2X指向的映射关系将所述BN3Y转换为BN1Y。所述BN1X和BN1Y经选择器1923选择后作为轨迹点内容被填回一级轨道表1901的所述分支点中。若读出的BN2X无效,则表示所述微操作块尚未存储在二级缓存系统中。此时,可以将三级指令存储器1819中由所述BN3X指向的三级指令块中相应的二级指令块经扫描转换器1815审查、转换,并将转换得到的二级微操作块填充到二级微操作存储器1805中由替换算法确定的BN2X指向的存储块,及将转换得到的映射关系存储在映射模块1907中由所述BN2X指向的行中。在此过程中,按之前所述方法,将审查得到的分支微操作的分支目标指令块都填充到三级指令存储器1819中。之后,再按之前实施例所述方法,将所述二级微操作块填充到一级微操作存储器1803中并得到相应的BN1X和BN1Y。所述BN1X和BN1Y经选择器1923选择后作为轨迹点内容被填回一级轨道表1901的所述分支点中。此外,所述BN1X和BN2X被存储到标签存储器1821中由所述BN3X指向的行中,所述BN1X被存储到块号存储器1907中由所述BN2X指向的行中。
在本实施例中,其他操作过程与之前实施例所述相同,在此不再赘述。
根据本发明技术方案,还可以对图18或图19实施例按同样方法进一步扩展,以支持更多层次的缓存结构。
根据本发明技术方案,在转换器将指令转换为微操作块的过程中将指令块内偏移地址和微操作块内偏移地址的对应关系填入映射模块107。具体地,在此过程中,可以通过判断指令块中各指令的起始地址建立所述对应关系。下面以图5C实施例所述映射模块的格式进行说明,并假设一个指令块由8个字节(从左往右依次为第0字节到第7字节)构成,而一个微操作块由6个微操作(从左往右依次为第0个微操作到第5个微操作)构成。对于其他格式的映射模块(例如图5A实施例或图5B实施例所述映射模块的格式),也可以按此方法类推得到。
请参考图20A,其为根据本发明技术方案最终产生的映射关系的一个例子。与图5C实施例所述相同,本实施例的映射模块用两行(如行2001和2003)构成一组映射关系,对应微操作存储器103中的一行(如行2005),且每组映射关系中的行2001中的每个表项对应一个指令块内字节偏移地址,即表项数目与指令块包含的字节数相同,从左往右依次为第0项到第7项,分别对应第0字节到第7字节;而行2003中的每个表项对应行2005中的一个微操作,从左往右依次为第0项到第5项,分别对应第0个微操作到第5个微操作。在行2001和2003中,最左边的项是地址最小项(LSB),最右边的项是地址最大项(MSB)。
如图20A所示,行2001对应的指令块共包含3条指令(指令A占用2个字节、指令B占用3个字节、指令C占用2个字节),且该指令块第1个字节属于顺序地址的前一指令块最后一条指令;行2001对应的指令A被转换为1个微操作(微操作p),指令B被转换为2条微操作(微操作q和r),指令C被转换为2个微操作(微操作s和t)。因此在行2001中第1、3、6项的值为‘1’,其余项为‘0’;在行2003中第0、1、3项的值为‘1’,其余为‘0’。又由于行2003中的项与微操作存储器103中的行2005中的微操作一一对应,因此在行2005中共有5个微操作(如图20A阴影部分2007所示)。
下面以图20A所示的映射情况对本发明所述各种产生映射关系的方法进行说明。请参考图20B,其为本发明所述产生映射关系的一种方法的实施例。假设分支目标指令是指令B,即分支目标地址为指令B对应的地址(即指令块的第3字节),且这是第一次以该指令块为分支目标的分支转移。那么从该地址开始,可以找到指令B和C,并得到这两条指令各自的长度。具体地,当转换器对该分支目标指令所在的指令块进行转换时,该分支目标指令地址(即第3字节)必定是一条指令(即指令B)的开始位置,从该位置开始检测所述指令块的后续部分,可以依次发现第4、5字节也属于指令B,而第6字节为另一条指令C的开始位置,且第7字节也属于指令C。因此,可以在映射模块的行2001的第3项开始依次填入‘10010’,以表示指令B、C对应的字节位置。
同时,转换器按前述方法将指令B、C各转换为2个微操作,并得到对应关系‘1010’,填入行2003从地址最小项(LSB)开始的位置中,如图20B中状态1所示。由于这是第一次以该指令块为分支目标的分支转移,行2001和2003的其余表项均被填入‘0’,可以使用图5C实施例所述方法,通过行2001和2003中的‘1’进行计数就可以将指令块内偏移地址转换为微操作块内偏移地址。相应地,转换得到的4个微操作也被填入微操作存储器中行2005从地址最小项(LSB)开始的位置中,如图20B中阴影部分2017所示。
之后,假设有分支指令的分支目标指令为该指令块中尚未被转换并填充到微操作存储器中的指令(例如指令A),则可以有两种处理方法。第一种处理方法是:转换器从指令A对应的地址(第1字节)开始重复上述过程,即检测到指令A、B、C各自的起始位置和长度后,得到‘1010010’填充到行2001从指令A对应的项(即第1项)开始的位置中,并将转换得到的微操作对应关系‘11010’填充到行2003从地址最小项(LSB)开始的位置中,且行2001和2003的其余表项均被填入‘0’;以及将转换得到的5个微操作填充到微操作存储器中行2005从地址最小项(LSB)开始的位置中,从而分别覆盖行2001、2003、2005中的原有内容。此时,行2001、2003、2005的内容分别如图20B中状态2的行2011、2013和2015所示。其中行2015中的阴影部分2017中存储的是指令B、C对应的4个微操作,而阴影部分2019存储的是指令A对应的1个微操作。
第二种处理方法是:计算行2001中第1个‘1’所在位置(即‘3’)和本次分支目标指令在指令块中的字节位置(即‘1’)的指令字节差值(即计算得到‘2’),并由转换器对指令块中所述分支目标指令的字节位置(即‘1’)开始的连续该指令字节差值个字节(即第1、2字节)如前转换为微操作。并由两个移位器(图中未显示)以该转换得到的微操作数目(即‘1’)作为移位位数分别对行2003、2005进行右移(即各右移1个表项),并将对应关系填充到行2003从地址最小项(LSB)开始的因右移空出的位置中,以及将转换得到的微操作填充到行2004从地址最小项(LSB)开始的因右移空出的位置中。同时,转换器检测指令A的起始位置和长度得到的‘10’填充到行2001从指令A对应的项(即第1项)开始的位置中,并保持其余项内容不变。这样,得到的结果与第一种方法相同,如图20B中状态2的行2011、2013和2015所示。或者,可以在每次转换时在寄存器(图中未显示)中记录起始指令字节位置,在下一次转换时,将之前记录的起始指令字节位置减去本次转换的起始指令字节位置得到所述指令字节差值,再如前进行后续操作。
在本实施例中,由于扫描器对分支指令进行审查时,计算得到的分支目标指令地址被送到映射模块根据当时存储的地址对应关系转换为微操作地址,而该微操作地址与微操作存储器中的微操作是一一对应的,且这些微操作地址也被存入轨道表以备分支时直接调用。因此,当微操作存储器中的行2015被右移后,其中的微操作(如‘q’、‘r’、‘s’、‘t’)对应的微操作地址也发生了改变。此时,必须对轨道表中所有已经存在的以这些微操作(即‘q’、‘s’)为分支目标的分支微操作轨迹点内容进行相应修改,保证这些分支微操作轨迹点中包含的分支目标BN仍然指向移位后的该微操作。这样,可以根据轨道表输出的轨迹点内容,直接在微操作存储器中找到正确的微操作。
凡是指令块已部分转换且再有分支指令的分支目标指令为该指令块中尚未被转换并填充到微操作存储器中的指令,则可以按上述方法处理,更新映射模块、微操作存储器和轨道表中的相应内容,保证指令块内地址能被正确映射为微操作块内地址后从微操作存储器中找到正确的微操作。
此外,在对微操作块建立轨道的过程中,产生其下一微操作块第一个微操作的BNY地址时要检查本微操作块最后一条指令的最后一个字节,其下一个字节的位置在所述下一个微操作块对应的行2001中是否为‘1’。如不是,则需要如前执行进一步转换。如是,则将该下一个微操作块中第一条微操作的块内地址放入正被处理的微操作块中结束轨迹点中的BNY域。
当映射模块中的对应关系已建立后,后续指令块变换为微操作时,其中的分支指令的以字节为单位的分支偏移量要被计算并换算成微操作地址存入轨道表。该分支目标地址中的指令块地址转换为微操作块地址的方法已在图1、图2实施例中详述。这里描述一下用如图20A中对应关系由指令块内地址转换器确定微操作块内地址BNY的具体方法。
请参考图20C,其为本发明所述指令块内地址转换器的一个实施例。在本实施例中,以外部指令偏移地址转换为内部指令偏移地址为例进行说明。其中,从映射模块送来的映射关系格式如图20A实施例所述。
选择器阵列2081中选择器的列数与外部指令块包含的偏移地址个数相等而行数为列数加一,即9行和8列。为了清晰起见,在图20C中只显示了4行、3列,分别为自下向上的最初4行和自左向右的最初3列。行号以最下一行为第0行,以上各行的行号依次递增。列号以最左面一列为0列,其右方各列的列号依次递增,每列对应一个外部指令中的偏移地址。第0列各选择器的输入A和B均为‘0’,除了第0行选择器的A输入为‘1’。第0行所有选择器的输入B均为‘0’。其他列选择器的输入A来源于前一列同一行选择器的输出值,输入B来源于前一列下一行选择器的输出值。
选择器阵列2083的结构与选择器阵列2081类似,具有相同的行数。不同之处在于选择器阵列2083中选择器的列数与内部指令块包含的指令条数相等,即6列。同样地,为了清晰起见,在图20C中只显示了4行、5列,分别为自下向上的最初4行和自左向右的最初5列。行号与列号的设置与2081相同。此外,选择器阵列2083中的第0行所有选择器的输入B均为‘0’;最上一行(应为第8行,但为了便于显示,在图20C中为第4行)所有选择器的输入A均为‘0’,且第0行(最下一行)各选择器的输出均被送到编码器2089按输出的列为‘1’的位置编码。其他选择器的输入A来源于前一列上一行选择器的输出值,输入B来源于前一列同一行选择器的输出值;且第0列的输入A来源于选择器阵列2081上一行选择器的输出值,输入B来源于选择器阵列2081同一行选择器的输出值。
译码器2085对外部指令偏移地址2091进行译码,得到的掩码值送往掩码器2087。由于一个外部指令块包含8个偏移地址,因此该掩码值的宽度为8位,其中该外部指令偏移地址对应的掩码位及其之前的掩码位的值均为‘1’,该外部指令偏移地址对应的掩码位之后的掩码位的值均为‘0’。之后,将该掩码值与从映射模块送来的映射关系中的行2001进行按位与操作,从而保留行2001中该外部指令偏移地址对应的掩码位及其之前掩码位对应的值,并将其余值清零,得到一个8位的控制字送往选择器阵列2081。
该控制字的每一位控制选择器阵列2081中的一列选择器。当该位为‘1’时,相应列的选择器全部选择输入B;当该位为‘0’时,相应列的选择器全部选择输入A。即,对于选择器阵列2081中的每一列选择器,若对应的控制位为‘1’,则选择来源于前一列下一行的输出值作为输入,使得前一列的输出值整体上移一行,并在最下一行补‘0’,作为本列的输出;若对应的控制位为‘0’,则选择来源于前一列同一行的输出值作为输入,保持前一列的输出值作为本列的输出。这样,控制字中有多少个‘1’,选择器阵列2081第一列的输入就会被上移多少行,即选择器阵列2081的输入中的唯一一个‘1’被上移了相应行数。由于选择器阵列2081的行数和列数与外部指令块包含的偏移地址个数相等,因此选择器阵列2081的输出中包含且仅包含一个‘1’,且这个‘1’所在的行的位置由控制字中有多少个‘1’确定。
同时,从映射模块送来的映射关系中的行2003直接作为控制字被送往选择器阵列2083。与选择器阵列2081中类似,该控制字的每一位控制选择器阵列2083中的一列选择器。当该位为‘1’时,相应列的选择器全部选择输入A;当该位为‘0’时,相应列的选择器全部选择输入B。即,对于选择器阵列2083中的每一列选择器,若对应的控制位为‘1’,则选择来源于前一列上一行的输出值作为输入,使得前一列的输出值整体下移一行,并在最上一行补‘0’,作为本列的输出;若对应的控制位为‘0’,则选择来源于前一列同一行的输出值作为输入,保持前一列的输出值作为本列的输出。这样,每经过控制字中的一个‘1’,选择器阵列2083的输入就会被下移一行,即所述输入中的唯一一个‘1’被下移了一行。因此,当编码器2089接收到从选择器阵列2083最下一行送来的‘1’时,即可根据该‘1’所在的列的位置生成对应的内部指令偏移地址2093。
以图20A中的映射关系为例,若外部指令偏移地址2091值为‘3’(即对应外部指令块中的第四个字节也即指令B),则掩码器2087输出的掩码值为‘11110000’,与行2001中的值‘01010010’进行按位与操作后得到‘01010000’,即控制字中有两个‘1’。这样,选择器阵列2081的输入中的‘1’被上移两行,即输出的‘1’位于的第2行。因此,所述‘1’在选择器阵列2083中经2个值为‘1’的控制位对应的选择器列之后到达编码器2089,因为行2003中的值为‘11010’,使得选择器阵列2083在第0列、第1列对输入的‘1’各降一行,最后在第1列向编码器2089输出的值为‘1’,对应内部指令块中的第二条指令(偏移地址为‘1’)。编码器2089按此编码得到‘1’,从而将外部指令‘B’的偏移地址值‘3’转换为内部指令‘q’的偏移地址值‘1’通过总线2093输出。
当一条分支指令被转换为相应微操作时,如前所述其微操作块地址BNX与指令块地址一致;而对于微操作块内地址BNY,则需要根据该微操作块地址BNX从映射模块中读出相应的对应关系分别作为行2001和2003的内容送到指令块内地址转换器,并从总线2091输入指令块内地址,从而由总线2093输出微操作块内地址BNY。所述微操作块地址BNX和微操作块内地址BNY一同被作为BN存入轨道表备用。
请参考图20D,其为本发明所述产生映射关系的另一种方法的实施例。本实施例与图20B实施例类似,都是将转换得到的对应关系和微操作填充到行2003和2005从地址最小项(LSB)开始的位置中。不同之处在于,在本实施例中,记录了行2003的终点。
在本实施例中,对某个指令块第一次转换的过程与图20B实施例相同。然而,在之后的再次转换中,可以不需要对行2003、2005中的内容进行右移,而是直接填充新的内容到未使用的表项中,记录并更新相应的填充位置信息。当需要将指令决内地址映射为微操作块内地址时,可以根据之前记录的填充位置信息,结合映射模块中行2001、2003存储的对应关系,完成地址映射。进一步地,由于微操作存储器中的内容没有被右移,因此已保存在轨道表中的分支微操作轨迹点内容不需要被更改。
具体地,依然以图20B实施例中的两次分支转移(第一次以指令B为分支目标指令,第二次以指令A为分支目标指令)为例进行说明。在本实施例中,映射模块中行2001的填充过程与图20B相同。即:在处理第一次分支转移时,从行2001的第3项开始依次填入‘10010’,其余项均填入‘0’,如图20D中状态1的行2001所示;在处理第二次分支转移时,从行2001的第1项位置开始依次填入‘10’,并保持其余项内容不变,如图20D中状态2的行2011所示。
对于映射模块中的行2003,则处理第一次分支转移时的填充过程与图20B相同,如图20D中状态1的行2003和2005所示。此外,在处理第一次分支转移时还需要记录这些微操作在行2003(或行2005)中的结束位置(在本例中为
‘3’,如图20D中的指针2027所指位置)。当循迹器读指针指向轨道表中的该位置时,表示已经到达其所在的微操作块中实际上的最后一个微操作,之后循迹器读指针将被更新指向顺序地址的下一微操作块对应的轨道上。
在处理第二次分支转移时,首先如图20B实施例所述,根据计算得到的指令字节差值,由转换器对指令块中所述分支目标指令的字节位置(即‘1’)开始的连续该指令字节差值个字节(即第1、2字节)如前转换为微操作,并得到对应关系(即‘1’),并填充到行2003中从地址最大项(MSB)开始的位置中,如图20D中状态2的行2023所示。相应地,将本次转换得到的指令A对应的微操作‘p’填充到微操作存储器的行2005中的对应位置2009(即最右边一项)中,如图20D中状态2的行2025所示。图中2017是处理第一次分支转移时所填充的微操作。
在本实施例中,还需要记录所述从映射模块中2003行地址最大项(MSB)开始填充的位数(即‘1’位),以便映射模块将指令块内地址转换为微操作块内地址时作为移位位数使用,如图20D的移位位数2021所示。该移位位数就是该行起始微操作向左循环移位的位数,在此处为‘1’,即本该在LSB位置的该行第一个微操作被向左循环移位(Rotate)一位,现位于MSB。这样就在映射模块中建立了这两次分支转移的完整地址对应关系。此外,由于行2013(或行2025)的地址最大项(即第5项)并不一定对应该微操作块的最后一个微操作(最后一个微操作的实际位置由指针2027指向),因此只要指针2027不是指向地址最大项,则在对该地址最大项对应的微操作完成循迹、输出后,循迹器继续从同一行(轨道)中的地址最小项(即第‘0’项)开始循迹。
在本实施例中,当轨道表输出分支轨迹点内容时,需要根据该内容中的第一地址在映射模块中找到相应的对应关系,再根据该对应关系通过指令块内地址转换器将第二地址(即指令的字节地址)转换为微操作地址,从而在微操作存储器中找到正确的微操作。具体地,以所述第一地址对应行2011和2023包含的对应关系为例,在映射模块进行地址转换时,首先将行2011和行2023的值读出,然后由一个移位器(图中未显示)根据移位位数2021的值对行2023的值进行循环右移之后,再按图20C所述指令块内地址转换器将该指令块内地址转换为相应的值通过总线2093输出,最后再以微操作块长度为模,将总线2093的输出模减移位位数即可得到该指令块内地址对应的微操作在微操作存储器行2025中的实际地址。
以图20D中行2011、2013、2025及移位位数2021显示的情况为例,假设某条分支指令的分支目标为指令A,则扫描器审查产生的指令块内地址为‘1’。行2011和2013中的值被读出后,根据移位位数2021的值‘1’,行2013的内容经移位器被循环右移1位得到‘11010’,与行2011的内容‘01010010’一同被送到指令块内地址转换器。指令块内地址转换器据此将输入的指令块内地址‘1’转换后,从总线2093输出‘0’。由于微操作块长度为‘6’,因此以‘6’为模对总线2093输出的‘0’模减‘1’(即移位位数)之后,得到‘5’,表示指令A对应行2025中的第5个微操作。这样,就可以将所述‘5’作为该分支指令对应的分支微操作的分支目标微操作的第二地址写入轨道表的相应轨迹点中。之后,可以根据轨道表输出的轨迹点内容直接查找到微操作,且无需如图20B实施例那样反复更新轨道表中的内容。
请参考图20E,其为本发明所述产生映射关系的另一种方法的实施例。本实施例可以视为图20B实施例和图20D实施例的结合。即:采用图20B实施例所述方法在映射模块中建立地址对应关系,并记录移位位数2021;以及采用图20D实施例所述方法在轨道表中存储轨迹点内容,并在微操作存储器中存储微操作。这样,在处理完第一次分支转移后,映射模块中的内容如图20E中状态1的行2001和2003所示,微操作存储器中的内容如图20E中状态1的行2005所示,移位位数2021是‘0’。在处理完第二次分支转移后,映射模块中的内容如图20E中状态2的行2011和2013所示,微操作存储器中的内容如图20E中状态2的行2025所示,且所记录的移位位数2021为‘1’。即存储在映射模块的行2013中的微操作位置信息已经是移位后的(按地址最小项对齐),而存储在轨道表中的轨迹点及微操作存储器中的微操作均是不移位的。
在本实施例中,在填充微操作行,如2005,时不进行移位,但填充映射模块中对应微操作行的映射行,如2003时需进行移位,并记录移位位数2021。当映射模块进行地址转换时,将行2011和行2023的值读出直接送到图20C所述指令块内地址转换器进行转换,之后再对指令块内地址转换器总线2093输出的值按图20D实施例所述方法模减移位位数2021,得到微操作块内地址,此地址可被存入轨道表,根据该微操作块内地址可直接对微操作存储器的行2025寻址,读出相应的微操作。因为轨道表中存放的始终是不移位的微操作块内地址,因此不需如同图20B实施例一般修改轨道表中的地址。
这样,在图20B实施例中,建立地址对应关系和填充微操作时都可能需要移位,而使用地址对应关系转换地址及读出微操作的过程中不需要移位。在图20D实施例中,建立地址对应关系、填充微操作及读出微操作的过程中不需要移位,而使用地址对应关系转换地址的过程中可能需要移位。在图20E实施例中,建立地址对应关系时可能需要移位,而填充微操作、使用地址对应关系转换地址及读出微操作的过程中不需要移位。因此可以根据应用本发明技术方案时的具体情况,选择不同的方法。
此外,当采用图20B实施例所述方法时,由于在建立地址对应关系时已经进行了移位,因此该对应关系是按最小地址(LSB)对齐的,因此在其顺序地址的上一指令块对应的结束轨迹点中的第二地址(BNY)必定是‘0’。而在采用图20D和图20E实施例所述方法时,该对应关系并没有按最小地址(LSB)对齐,因此在其顺序地址的上一指令块对应的结束轨迹点中的第二地址(BNY)不一定是‘0’。例如,在图20D实施例中,微操作块中的第一个微操作的位置对应行2023中的第5项,因此其顺序地址的上一指令块对应的结束轨迹点中的第二地址(BNY)是‘5’。因此在轨道表的结束轨迹点中存放的顺序下条轨道的地址时,不能仅保存第一地址BNX。而是要第一地址BNX,第二地址BNY一起保存,因为此时第二地址不能保证为‘0’,不可省略。该BNY可由顺序下一行中的移位数2021计算得到,或者由本行中最后一条指令的长度和该指令的起始位置计算得到。
请参考图20F,其为本发明所述对顺序地址下一指令块产生映射关系的一种实施例。根据本发明技术方案,若一个指令块的最后一条指令的一部分位于顺序地址的下一指令块中,则所述下一指令块中的该部分内容被归属于所述分支目标指令块中。在本实施例中,映射模块中除存储了地址对应关系外,还记录了每个指令块最后一条指令中位于下一指令块中的内容的长度。这样,在对分支目标指令做地址映射时,可以先在映射模块中查找该指令块顺序地址的上一指令块的相应信息。若在映射模块中所述上一指令块的相应信息已经存在,则可以读出该信息中记录的所述长度值,根据该长度值即可在所述分支目标指令块中找到属于该指令块的第一条指令的起始位置,并从该位置开始对所述分支目标指令块进行转换,从而避免如图20B、图20D或图20E实施例中可能发生的对同一指令块多次转换的情况。
依然以指令B为分支目标指令为例进行说明。转换器首先在映射模块中查找该分支目标指令块(即指令B所在的指令块)的顺序地址的上一指令块是否已经建立了地址对应关系。
若该上一指令块的地址对应关系尚未建立,则按图20B、图20D或图20E实施例所述方法在映射模块中建立地址对应关系并填充微操作存储器,具体过程在此不再重复。
若该上一指令块的地址对应关系已经建立(例如图20F中的行2049),则可以从读出该上一指令块中最后一条指令在其下一指令块(即该分支目标指令块)中的长度值2047。在本实施例中长度值2047的值为‘1’,表示该分支目标指令块中从最小地址(LSB)开始有‘1’个字节(即第0字节)的内容属于所述上一指令块,因此该分支目标指令块的第一条指令从第1字节开始。这样,转换器就可以直接从所述第1字节开始进行转换,直到该指令块中所有指令都转换完毕。
具体地,由于已知起始指令的位置,因此转换器可以检测到该分支目标指令块中所有3条指令的位置,得到‘01010010’填充到行2001的相应位置中,结果如图20F的行2041所示。同时,转换器转换生成这3条指令对应的5个微操作填充到行2005地址最小项(LSB)开始的位置中,并将转换得到的对应关系‘11010’填充到行2003地址最小项(LSB)开始的位置中,并将结果如图20F的行2045和2043所示。如果指令转换是从一行指令到下一行顺序指令,则下一行的指令的起始字节可从本行的最后一条指令的起始位置及该指令的长度算出,与此实施例相同。
在此过程中,若所述分支目标指令块的最后一条指令全部位于该分支目标指令块中,则产生并记录该分支目标指令块对应的所述长度值‘0’,以备以后使用。若所述分支目标指令块的最后一条指令有部分位于该分支目标指令块的顺序地址的下一指令块中,则将其位于下一指令块中的那部分的字节数作为该分支目标指令块对应的相应长度值并记录,以备以后使用。如图20F中2037中记录的‘2’,提示该行顺序下一行的第一条指令从第二字节开始。
此外,还可以对上述方法进行改进,以避免建立地址对应关系、使用地址对应关系或读出微操作时所需的移位。请参考图20G,其为本发明所述产生映射关系的另一种方法的实施例。本方法的基本思路与图20B实施例类似,根据分支目标指令的位置,分段对分支指令块中的指令转换并填充映射模块和微操作存储器。不同之处在于,本方法将转换得到的微操作及其位置信息分别填充到行2005和2003中从地址最大项(MSB)开始倒序填充。
所述倒序填充的具体可以有两种实现方法。以微操作的倒序填充为例,第一种方法是:转换器从指令块中的待转换指令按顺序进行转换,依次产生相应的微操作,并存储在一个缓冲存储器(图中未显示)中。等到该指令块的最后一条指令被转换完毕后,再从该缓冲存储器中存储的最后一个微操作起向行2005的地址最大项开始倒序填充,直到缓冲存储器中的全部微操作均被填充完毕。第二种方法是;先按顺序对待转换指令进行指令区分(parsing),判断出每条指令的起始字节位置,然后再从最后一条指令开始按倒序进行转换,依次产生相应的微操作,并按相同的倒序从行2005的地址最大项开始进行填充,直到所述待转换指令全部被转换填充完毕。
依然以图20B实施例中的两次分支转移为例进行说明。在处理第一次分支转移时,转换器从指令B开始检测所述指令块的后续部分,一共发现指令B和指令C,并得到其位置信息‘10010’填充到行2001中这些指令对应的位置中。同时,转换器按前述方法将指令B、C各转换为2个微操作,并得到对应关系‘1010’,在行2003从地址最大项(MSB)开始往较小地址方向填入,并记录填入内容的起始位置(在本实施例中为第2项)。由于这是第一次以该指令块为分支目标的分支转移,行2001和2003的其余表项均被填入‘0’,结果如图20G中状态1的行2061所示。这样,依然可以使用图5C实施例所述方法,通过行2001和2003中的‘1’进行计数就可以将指令块内偏移地址转换为微操作块内偏移地址。相应地,转换得到的4个微操作在微操作存储器中行2005从地址最大项(MSB)开始往较小地址方向倒序填入,如图20G中状态1的行2065的阴影部分2017所示。
在处理第二次分支转移时,与图20B实施例所述方法类似,也可以有两种处理方法。第一种处理方法是:转换器从指令A对应的地址(第1字节)开始重复上述过程,即检测到指令A、B、C各自的起始位置和长度后,得到‘1010010’填充到行2001中这些指令对应的位置中,并将转换得到的微操作对应关系‘11010’填充到行2003从地址最大项(MSB)开始的位置中,且行2001和2003的其余表项均被填入‘0’;以及将转换得到的5个微操作倒序填充到微操作存储器中行2005从地址最大项(MSB)开始的位置中,从而分别覆盖行2001、2003、2005中的原有内容。结果如图20G中状态2的行2071、2073和2075所示。其中行2075中的阴影部分2017中存储的是指令B、C对应的4个微操作,而阴影部分2019存储的是指令A对应的1个微操作。
第二种处理方法是:分别在寄存器2068和2069中记录行2061和2063中每次填充的最后位置(在本例中第一次填充后这两个位置分别对应指令B和微操作q的起始位置),转换器如前所述仅转换到上次填充的最后位置之前的一个字节,即对指令A进行转换,将指令A的位置信息按倒序填充到行2003中从所述记录的上一次填充的最后位置(即第3项)开始往较小地址方向倒序填充,并保持其余项内容不变;将转换得到的对应关系(即‘1’)按倒序填充到行2003中从所述记录的上一次填充的最后位置(即第2项)开始往较小地址方向倒序填充,并保持其余项内容不变。同时,将转换得到的指令A对应的微操作从行2005从所述记录的起始位置(即第2项)开始往较小地址方向倒序填充,并保持其余项内容不变。这样,得到的结果与第一种方法相同,如图20G中状态2的行2071、2073和2075所示。
此外,由于图20G实施例中的地址对应关系不是按最小地址(LSB)对齐,而是按最大地址(MSB)对齐的,因此其第一个微操作对应的位置不一定是‘0’。即,在其顺序地址的上一指令块对应的结束轨迹点中的第二地址(BNY)不一定是‘0’。具体地,在图20G实施例中,微操作块中的第一个微操作的位置对应行2023中的第1项,因此其顺序地址的上一指令块对应的结束轨迹点中的第二地址(BNY)是‘1’。如同在图20D和图20E的实施例中一般,此例中结束轨迹点中的下一行地址也有必要包含第二地址BNY。
虽然本说明书的上述实施例都是对指令转换为微操作进行说明,但是,根据本发明技术方案,还可以将这些方法推广到对不同指令集之间的指令转换,并可以根据映射模块中存储的地址对应关系,通过偏移地址转换器从一种指令(以下简称为外部指令)的指令块内偏移地址得到另一种指令(以下简称为内部指令)对应的指令块内偏移地址。此时,本说明书之前所述的变长指令及微操作可以分别视为外部指令和内部指令的一种特例。
根据本发明技术方案和构思,还可以有其他任何合适的改动。对于本领域普通技术人员来说,所有这些替换、调整和改进都应属于本发明所附权利要求的保护范围。
Claims (32)
1.一种将第一指令集中第一指令的地址映射为第二指令集中第二指令的地址的系统,包括:
第一存储器,用于存储第一指令,每个第一指令在第一存储器中具有对应的第一指令地址;
转换器,连接到第一存储器,用于将将第一指令转换为第二指令;
第二存储器,连接到转换器用于存储第二指令;
处理器核,连接到第二存储器,用于处理第二指令;和
映射模块,连接到转换器,处理器核和第二存储器;
在此,指令块是一组具有相同高位指令地址的连续指令,指令地址的高位部分是块地址,低位部分是块内偏移量;其特征在于,
第二存储器配置为配备有复数个第二存储块,每个第二存储块用于存储一个第二指令集中第二指令的块,一个第二指令集中第二指令的块与第一存储器中一个第一指令集中的第一指令的块相对应,因此第一指令地址的块地址可以寻址一个第二指令的块;
所述转换器,还用于提取第一指令的块中的第一指令与第二指令的块中的对应第二指令之间的块内偏移量映射关系;
映射模块配备有存储元件,该存储元件用于记录所述提取的每个指令块的块内偏移量映射关系。
2.如权利要求1所述的系统,其特征在于,处理器核产生第一指令地址;所述第一指令地址的块地址用于寻址所述映射模块的存储元件,以选择对应的块内偏移量映射关系记录;
映射模块,用于根据所选择的块内偏移量映射关系,将第一指令地址的块内偏移量映射为第二指令地址的块内偏移量;和
第一指令块地址和映射得到的第二指令块内偏移量量用于寻址第二存储器,第二存储器向处理器核提供第二指令集中的第二指令。
3.如权利要求1所述的系统,其特征在于,块内偏移量映射关系配置为由两行二进制位表示;
两行的第一行中的每个比特对应于第一指令的块中各第一指令的块内偏移量,其中比特‘1’表示第一指令起点的块内偏移量,而比特‘0’表示非第一指令起点的块内偏移量;
两行的第二行中的每个比特对应于第二指令块中的第二指令的块内偏移量,其中比特‘1’表示第二指令起点的块内偏移量,而比特‘0’表示非第二指令起点的块内偏移量;
块内偏移量映射模块转换第一指令地址的块内偏移量,如下所示:计数从两行的第一行的一端开始直到第一指令的块内偏移量的位‘1’的数量,然后计数两行中第二行的位置从同一端开始的位‘1’的相同数目,其位置是相应的第二指令地址的块内偏移量。
4.如权利要求3所述的系统,其特征在于,块内偏移量映射模块进一步包括:掩码器,计数器,反向计数器和编码器;
掩码器限制从两行中第一行一端到第一指令的块内偏移量的范围;
计数器包括第一选择器阵列,其接收掩码器提供的受限范围内的两行中第一行,有效输出信号在第一选择器阵列复数个输出上的位置代表计数,初始计数位置位于表示数‘0’的位置,每个限制范围内的两行中第一行中位‘1’将位置移动到表示一个较高计数的位置;
反向计数器包括第二选择器阵列,连接至第一选择器阵列的输出,接收计数,并且从与两行中第一行相同的一端开始接收两行中第二行的行位,每个第二行的位‘1’将有效信号移动到表示一个较低计数值的位置,第二选择器在计数值达到‘0’时输出位置指示,有效信号在第二选择器阵列复数个输出上的位置表示与第一指令对应的第二指令的起始位置;
编码器连接至第二选择器阵列,将第二选择器阵列复数个输出上的有效信号的位置编码,以产生第二指令的块内偏移量。
5.如权利要求4所述的系统,其特征在于,所述第一选择器阵列被配置为包括以二维阵列组织的复数个双输入选择器;
一列选择器的输出被配置为连接到选择器阵列的后一列的同一行上的选择器的第一输入,也连接到选择器阵列的后一列的高一行上的选择器的第二输入;
复数个控制位,每个控制位控制阵列中的一列选择器;
当控制位为‘0’时,相应列中的每个选择器选择其第一个输入,从而选择器列输出前一列同一行上的位置指示符;
当控制位为‘1’时,相应列中的每个选择器选择其第二输入,从而选择器列输出前一列低一行上的位置指示符;
位置指示符在最后一列选择器的复数个输出上的位置表示“1”控制位的数量。
6.如权利要求4所述的系统,其特征在于,所述第二选择器阵列被配置为包括以二维阵列组织的复数个双输入选择器;
一列选择器的输出被配置为连接到选择器阵列的后一列的同一行上的选择器的第一输入,也连接到选择器阵列的后一列的低一行上的选择器的第二输入;
数组第一列中的选择器配置为接收第一个选择器数组的行输出;复数个控制位中的每一个被配置为对应于第二指令地址的块内偏移量,并且每个控制位被配置为控制阵列中的列中的选择器;
当控制位为‘0’时,相应列中的每个选择器选择其第一个输入,从而选择器列输出前一列同一行上的位置指示符;
当控制位为‘1’时,相应列中的每个选择器选择其第二输入,从而选择器列输出前一列高一行的位置指示符;
最低行的选择器被指定为与零计数相关联,最低行的选择器被指定为与零计数相关联,最低行上的选择器的每个选择器输出对应一个内部指令块内偏移量。
7.如权利要求2所述的系统,其特征在于,还包括选择器;处理器内核产生分支判断,顺序指令地址以及第一指令地址格式的分支目标指令地址;
分支目标指令地址的块地址用于寻址映射模块的存储元件,以选择所存储的块内偏移量映射关系,基于所选择的块内偏移量映射关系,映射模块还用于将分支目标指令地址的块内偏移量映射为,第二指令地址的块内偏移量;
当分支判断为“不分支”时,控制选择器顺序指令地址以寻址第二存储器;和
当分支判决为“分支”时,控制选择器选择以分支目标指令地址的块地址和映射得到的第二指令的块内偏移量以寻址第二存储器;
第二存储器向处理器核提供第二指令集的第二指令。
8.如权利要求7所述的系统,其特征在于,由映射模块或独立的结束标志存储器存储第二存储器中每个第二存储块的最后一条第二指令的块内偏移量信息。
9.如权利要求8所述的系统,其特征在于,当第二指令不是第二指令块中的最后一条指令时,所述顺序指令地址为此前顺序指令地址的块地址,以及此前顺序指令地址的块内偏移量加上一条第二指令长度的增量;
当第二指令是第二指令块中的最后一条指令时,顺序指令地址为此前指令块地址加上长度为一个块的增量地址,以及该增量地址所指向的块中第一条第二指令的块内偏移量。
10.如权利要求7所述的系统,其特征在于,所述转换器将分支指令的分支增量转换为补偿后的分支增量记录在第二指令中;所述补偿后的分支增量等于所述分支指令的块内地址与所述分支指令的分支增量之和。
11.如权利要求2所述的系统,其特征在于,所述转换器被配置为将指令从复数个指令集的指令转换为所述第二指令集中的第二指令,从而所述系统被配置为支持复数个指令集。
12.如权利要求2所述的系统,其特征还在于,扫描转换器,标签存储器,轨道表和循迹器;
扫描转换器为具有扫描功能的转换器,用于将来自第一存储器的每个第一指令转换为第二指令,至少提取指令类型信息,及计算分支目标第一指令地址;
标签存储器用于将分支目标第一指令的块地址映射为相应的第二存储器块号;
映射模块块内偏移量关系,将目标第一指令的块内偏移量映射为第二指令的块内偏移量,其映射基于存储在映射模块存储元件中的,由分支目标第一指令的块地址寻址的块内偏移量映射关系;
轨道地址包括块地址和块内偏移量,块地址是第二存储块编号,块内偏移量是第二指令的块内偏移量;
轨道表为存储器,其中每个存储单元对应于至少一条第二存储器中的第二指令;
每个轨迹点中包含指令类型信息;
对应于分支第二指令的轨迹点还包含以轨道地址格式存储的经计算和映射得到的分支目标地址;
循迹器连接到轨道表并产生轨道地址,轨道地址寻址轨道表以读出轨迹点。
13.如权利要求12所述的系统,其特征在于,当从轨道表读出的指令类型是非分支类型或是条件分支类型且处理器核产生的分支判断是“不分支”时,轨道地址保持相同的块地址不变但增加第二指令的块内偏移量;
当从轨道表读出的指令类型是无条件分支类型或是条件分支指令且处理器核产生的分支判断是“分支”时,轨道地址是从轨道表读出的地址;
轨道地址的块地址直接寻址第二存储器以获取第二指令集的第二指令块;
轨道地址的块内偏移量从所选择的第二指令块中选择第二指令。
14.如权利要求12所述的系统,其特征在于循迹器进一步包括:移位器,前导状态计数器和加法器;
循迹器根据一行输入状态在分支判断控制下产生轨道地址,所述一行输入状态以一种状态代表第一条件,使用另一种状态代表第二条件,循迹器生成满足分支条件和第一条件的轨道地址;
移位器接收输入状态行,用于将输入状态行移位;
前导状态检测器连接移位器的输出,用于计数,该计数为下一个第一条件状态之前的第二条件状态的数量;
加法器连接至前导状态检测器的输出以及轨道地址,用于将所述计数和轨道地址中的块内偏移量相加以产生下一个块内偏移量;
分支判断来自处理器核;
当分支判断为“不分支”时,轨道地址是保持不变的轨道块地址和所述下一个块内偏移量;
当分支判断为“分支”时,轨道地址是从轨道表读出的轨迹点中的地址;
轨道地址中的块内偏移量控制移位器,用于移位所述输入状态行。
15.如权利要求2所述的系统,其特征在于还包括读缓冲器,读缓冲器连接第二存储器和处理器核;
读缓冲器被配置为包含至少一个第二指令块及其第二地址;
所述读缓冲器还被配置为包括令牌传递器,所述令牌传递器将令牌从一条指令传递到其顺序的下一指令;
读缓冲器被配置为将输入的第二地址与包含在读缓冲器中的第二指令的块的第二地址进行比较;
当地址匹配时,将令牌插入与匹配地址相关联的位置处的令牌传递器;
读缓冲器输出令牌所在的指令。
16.一种将第一指令集的第一指令的地址映射到第二指令集的第二指令的地址的方法,将每一条第一指令转换为功能对应的单数或复数条第二指令,将转换所得的第二指令按第二指令地址存储,并建立第一指令地址和第二指令地址之间的映射关系;
其特征在于:
使第一指令块地址与第二指令块地址相等,并在转换时记录第一指令的块内偏移量和动能对应的单数条第二指令块内偏移量,从而得到并记录第一指令在第一指令块内的块内偏移量与第二指令在第二指令块内的块内偏移量之间的映射关系;
在此指令块是指在存储器中的一行指令;指令地址寻址存储器指向一条指令,分为高位的块地址与低位的块内偏移量;块地址指向存储器中的一行即一个指令块;指令块内偏移量指向一行中的一条指令。
17.如权利要求16所述的方法,其特征在于,根据所述映射关系将处理器核输出的第一指令地址转换为第二指令地址,并根据所述第二指令地址寻址存储的第二指令向处理器核输出相应第二指令供执行。
18.如权利要求17所述的方法,其特征还在于,第二指令集中的第二指令是微操作集中的微操作。
19.如权利要求16所述的方法,其特征在于,通过对第一指令块内从一端到待寻址第一指令之间的第一指令数目计数,并对相应第二指令块内从同一端到待寻址第二指令之间的对应每条第一指令的第一条第二指令的数目计数,将第一指令地址的块内偏移量转换为第二指令地址的块内偏移量。
20.如权利要求16所述的方法,其特征在于,将块内偏移量映射关系记录为两行表项;
第一行中的每个表项对应于第一指令的地址的块内偏移量;
第一行的表项中每个第一状态代表一条第一指令的起始位置,第一行表项中每个第二状态代表非起始位置;
第二行中的每个表项对应于第二指令的地址的块内偏移量;
第二行的表项中每个第一状态代表一条第二指令的起始位置,第二行表项中每个第二状态代表非起始位置。
21.如权利要求20所述的方法,其特征还在于,所述偏移量映射由范围限定,计数,反计数以及编码完成;限定从所述第一行表项中的一端到输入的第一指令块内偏移量范围,从一个初始值对该范围中代表第一指令起始位置的第一状态进行计数;以获得的计数值从所述第二行表项从与上述第一行表项中的同一端开始,对代表第二指令起始位置的第一状态进行反计数,反计数值达到初始值的第二行表项位置即为映射得到的第二指令位置,对该位置进行地址编码得到第二指令块内偏移量。
22.如权利要求17所述的方法,其特征在于,处理顺序第二指令,即不改变程序执行流程的第二指令时,以不经映射的顺序下一块内偏移量从第二指令的指令块中选择顺序下一个第二指令。
23.如权利要求17所述的方法,其特征还在于,对每个第二指令块的最后一条第二指令的位置进行标记;
当顺序第二指令不是第二指令的指令块的最后一条指令时,以同一指令块中的顺序下一条第二指令作为下一条第二指令;
当顺序第二指令是第二指令的指令块的最后一条指令时,以顺序下一个第二指令的指令块中的第一条第二指令作为下一条第二指令。
24.如权利要求17所述的方法,其特征在于,将分支第一指令块内地址与第一指令分支增量相加,得到相应分支第二指令的补偿后分支增量;和
通过将分支第二指令对应的第二指令块的块地址和补偿后分支增量相加,即可得到所述分支第二指令对应的分支目标第一指令地址。
25.如权利要求17所述的方法,其特征在于,在向第二存储器填充第二指令时,计算所有分支第二指令的分支目标第一指令地址,并将所述目标第一指令地址映射为目标第二指令地址信息存储在轨道表中;和
当执行到分支第二指令时,直接得到所述分支目标第二指令的位置信息。
26.如权利要求25所述的方法,其特征在于,在每条轨道代表最后一个微操作的表项后再设一个结束表项,其中存放一个必定分支转移的类别信息以及顺序执行下一条轨道的块号;
当地址指针指向结束表项时,使所述地址指针指向顺序下一条轨道的第一个表项以及顺序下一个第二指令块的第一条第二指令。
27.如权利要求17所述的方法,其特征在于,所述转换还能将一种或多种指令集的指令转换为另一种指令集的指令。
28.如权利要求17所述的方法,其特征还在于,其特征在于,每个第二块中还记录了其顺序地址下一第二指令块第一条第二指令的位置信息。
29.如权利要求16所述的方法,其特征在于,从入口位置开始执行至少一轮指令转换操作,将第一指令块转换为第二指令块;
所述入口位置为分支目标第一指令,或第一指令块中的第一条第一指令。
30.如权利要求29所述的方法,其特征在于,当第一次对第一指令块进行转换且只转换从第一指令块中某条第一指令开始直到指令块结束的这一部分第一指令时,将转换得到的第二指令按第二存储块的最大地址边界对齐,并记录被转换第一指令在第一指令块中的位置信息以及转换得到的第二指令在第二存储块中的位置信息;和
当对所述第一指令块中部分或全部未转换的部分进行转换时,将本次转换得到的第二指令与该第二存储块中已转换的第二指令拼接,使得全部转换得到的第二指令接第二存储块的最大地址边界对齐。
31.权利要求29所述的方法,其特征在于,当第一次对第一指令块进行转换且只转换从第一指令块中某条第一指令开始直到指令块结束的这一部分第一指令时,将转换得到的第二指令按第二存储块的最小地址边界对齐;和
当对所述第一指令块中部分或全部未转换的部分进行转换时,先将已转换部分的第二指令移位存储到第二指令块的合适位置,再将本次转换得到的第二指令填入该第二指令块的相应位置中。
32.如权利要求29所述的方法,其特征在于,当第一次对第一指令块进行转换且只转换从第一指令块中某条第一指令开始直到指令块结束的这一部分第一指令时,将转换得到的第二指令按第二存储块的最小地址边界对齐;和
当对所述第一指令块中部分或全部未转换的部分进行转换时,从第二指令块的最高地址边界开始以逆序存储新转换的第二指令;
根据其第一指令偏移地址存储新生成的对应第一指令的行,但是将已有的块内偏移量映射关系部分第二行移位到更高的块内偏移量位置,将新生成的块内偏移量映射关系部分第二行插入块内偏移量最低位置,记录移位位数;
当使用所述块内偏移量映射关系映射第二地址偏移量时,使用所述记录的移位位数调整第二地址偏移量,将结果用于寻址第二指令块。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410399873.4A CN104424128B (zh) | 2013-08-19 | 2014-08-14 | 变长指令字处理器系统和方法 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2013103626864 | 2013-08-19 | ||
CN201310362686 | 2013-08-19 | ||
CN201410399873.4A CN104424128B (zh) | 2013-08-19 | 2014-08-14 | 变长指令字处理器系统和方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104424128A CN104424128A (zh) | 2015-03-18 |
CN104424128B true CN104424128B (zh) | 2019-12-13 |
Family
ID=52483073
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410399873.4A Active CN104424128B (zh) | 2013-08-19 | 2014-08-14 | 变长指令字处理器系统和方法 |
Country Status (4)
Country | Link |
---|---|
US (2) | US10140126B2 (zh) |
EP (1) | EP3037956A4 (zh) |
CN (1) | CN104424128B (zh) |
WO (1) | WO2015024482A1 (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106384723B (zh) * | 2016-10-28 | 2019-08-20 | 北京北方华创微电子装备有限公司 | 具有多级主工艺步骤的热处理设备工艺控制装置及方法 |
CN109101275B (zh) * | 2018-06-26 | 2021-07-23 | 飞腾技术(长沙)有限公司 | 一种基于移位的指令提取与缓冲方法及超标量微处理器 |
US10884751B2 (en) * | 2018-07-13 | 2021-01-05 | Advanced Micro Devices, Inc. | Method and apparatus for virtualizing the micro-op cache |
US10572386B1 (en) | 2018-09-12 | 2020-02-25 | International Business Machines Corporation | Increased parallelization efficiency in tiering environments |
GB2577738B (en) | 2018-10-05 | 2021-02-24 | Advanced Risc Mach Ltd | An apparatus and method for providing decoded instructions |
EP3942407A1 (en) * | 2019-03-21 | 2022-01-26 | Unify Patente GmbH & Co. KG | Processor device and a method for parallel processing instructions in a processor device |
US20210373896A1 (en) * | 2020-06-01 | 2021-12-02 | Advanced Micro Devices, Inc. | Merged branch target buffer entries |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4890218A (en) * | 1986-07-02 | 1989-12-26 | Raytheon Company | Variable length instruction decoding apparatus having cross coupled first and second microengines |
US5293592A (en) * | 1989-04-07 | 1994-03-08 | Intel Corporatino | Decoder for pipelined system having portion indicating type of address generation and other portion controlling address generation within pipeline |
CN102841865A (zh) * | 2011-06-24 | 2012-12-26 | 上海芯豪微电子有限公司 | 高性能缓存系统和方法 |
Family Cites Families (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5452423A (en) * | 1991-06-13 | 1995-09-19 | Chips And Technologies, Inc. | Two-ROM multibyte microcode address selection method and apparatus |
US5586277A (en) * | 1994-03-01 | 1996-12-17 | Intel Corporation | Method for parallel steering of fixed length fields containing a variable length instruction from an instruction buffer to parallel decoders |
GB2307072B (en) * | 1994-06-10 | 1998-05-13 | Advanced Risc Mach Ltd | Interoperability with multiple instruction sets |
US5742802A (en) * | 1996-02-16 | 1998-04-21 | International Business Machines Corporation | Method and system for efficiently mapping guest instruction in an emulation assist unit |
KR19990076967A (ko) * | 1996-11-04 | 1999-10-25 | 요트.게.아. 롤페즈 | 처리 장치 및 메모리내의 명령 판독 |
US5819097A (en) * | 1996-12-09 | 1998-10-06 | Allen Bradley Company, Llc | Industrial controller compiler with expandable instruction set |
US6185671B1 (en) * | 1998-03-31 | 2001-02-06 | Intel Corporation | Checking data type of operands specified by an instruction using attributes in a tagged array architecture |
US7032100B1 (en) * | 1999-12-17 | 2006-04-18 | Koninklijke Philips Electronics N.V. | Simple algorithmic cryptography engine |
US6934832B1 (en) * | 2000-01-18 | 2005-08-23 | Ati International Srl | Exception mechanism for a computer |
CN101299185B (zh) * | 2003-08-18 | 2010-10-06 | 上海海尔集成电路有限公司 | 一种基于cisc结构的微处理器结构 |
GB2435116B (en) * | 2006-02-10 | 2010-04-07 | Imagination Tech Ltd | Selecting between instruction sets in a microprocessors |
US7472260B2 (en) * | 2006-10-10 | 2008-12-30 | P.A. Semi, Inc. | Early retirement of store operation past exception reporting pipeline stage in strongly ordered processor with load/store queue entry retained until completion |
US8949106B2 (en) * | 2009-09-18 | 2015-02-03 | International Business Machines Corporation | Just in time compiler in spatially aware emulation of a guest computer instruction set |
WO2011066459A2 (en) * | 2009-11-25 | 2011-06-03 | Howard University | Multiple-memory application-specific digital signal processor |
US20110296096A1 (en) * | 2010-05-28 | 2011-12-01 | Xiang Zou | Method And Apparatus For Virtualized Microcode Sequencing |
GB2484489A (en) * | 2010-10-12 | 2012-04-18 | Advanced Risc Mach Ltd | Instruction decoder using an instruction set identifier to determine the decode rules to use. |
WO2012103359A2 (en) * | 2011-01-27 | 2012-08-02 | Soft Machines, Inc. | Hardware acceleration components for translating guest instructions to native instructions |
US9141389B2 (en) * | 2011-04-07 | 2015-09-22 | Via Technologies, Inc. | Heterogeneous ISA microprocessor with shared hardware ISA registers |
US8918608B2 (en) * | 2012-01-09 | 2014-12-23 | Ravello Systems Ltd. | Techniques for handling memory accesses by processor-independent executable code in a multi-processor environment |
CN102662635A (zh) | 2012-03-21 | 2012-09-12 | 清华大学 | 超长指令字变长指令实现方法及实现该方法的处理器 |
-
2014
- 2014-08-14 CN CN201410399873.4A patent/CN104424128B/zh active Active
- 2014-08-15 EP EP14837824.3A patent/EP3037956A4/en not_active Withdrawn
- 2014-08-15 US US14/913,352 patent/US10140126B2/en active Active
- 2014-08-15 WO PCT/CN2014/084540 patent/WO2015024482A1/zh active Application Filing
-
2018
- 2018-10-05 US US16/153,063 patent/US20190065205A1/en not_active Abandoned
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4890218A (en) * | 1986-07-02 | 1989-12-26 | Raytheon Company | Variable length instruction decoding apparatus having cross coupled first and second microengines |
US5293592A (en) * | 1989-04-07 | 1994-03-08 | Intel Corporatino | Decoder for pipelined system having portion indicating type of address generation and other portion controlling address generation within pipeline |
CN102841865A (zh) * | 2011-06-24 | 2012-12-26 | 上海芯豪微电子有限公司 | 高性能缓存系统和方法 |
Also Published As
Publication number | Publication date |
---|---|
US20190065205A1 (en) | 2019-02-28 |
WO2015024482A1 (zh) | 2015-02-26 |
EP3037956A4 (en) | 2017-05-17 |
US20160202985A1 (en) | 2016-07-14 |
EP3037956A1 (en) | 2016-06-29 |
US10140126B2 (en) | 2018-11-27 |
CN104424128A (zh) | 2015-03-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104424128B (zh) | 变长指令字处理器系统和方法 | |
CN102110058B (zh) | 一种低缺失率、低缺失惩罚的缓存方法和装置 | |
US10387157B2 (en) | System and method for instruction set conversion based on mapping of both block address and block offset | |
CN104679481B (zh) | 一种指令集转换系统和方法 | |
CN110069285B (zh) | 一种检测分支预测的方法及处理器 | |
CN104731719B (zh) | 一种缓存系统和方法 | |
FI80532B (fi) | Centralenhet foer databehandlingssystem. | |
US20150186293A1 (en) | High-performance cache system and method | |
CN104657285B (zh) | 一种数据缓存系统和方法 | |
JP6467605B2 (ja) | 命令処理システムと方法 | |
CN107818053B (zh) | 用于存取高速缓存的方法与装置 | |
US9753855B2 (en) | High-performance instruction cache system and method | |
US9141388B2 (en) | High-performance cache system and method | |
KR100335672B1 (ko) | 메모리페이지크로싱예측주석을사용하는실제주소지정데이타기억구조로부터의빠른데이타검색 | |
US10275358B2 (en) | High-performance instruction cache system and method | |
US11301250B2 (en) | Data prefetching auxiliary circuit, data prefetching method, and microprocessor | |
CN112579175B (zh) | 分支预测方法、分支预测装置和处理器核 | |
US9569219B2 (en) | Low-miss-rate and low-miss-penalty cache system and method | |
TW201638774A (zh) | 一種基於指令和資料推送的處理器系統和方法 | |
CN104424132B (zh) | 高性能指令缓存系统和方法 | |
TWI636362B (zh) | 高性能快取方法和裝置 | |
US20150193348A1 (en) | High-performance data cache system and method | |
CN116627505A (zh) | 指令缓存及操作方法、处理器核及指令处理方法 | |
CN116627506A (zh) | 微指令缓存及操作方法、处理器核及指令处理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP02 | Change in the address of a patent holder |
Address after: 201203 501, No. 14, Lane 328, Yuqing Road, Pudong New Area, Shanghai Patentee after: SHANGHAI XINHAO MICROELECTRONICS Co.,Ltd. Address before: 200092, B, block 1398, Siping Road, Shanghai, Yangpu District 1202 Patentee before: SHANGHAI XINHAO MICROELECTRONICS Co.,Ltd. |
|
CP02 | Change in the address of a patent holder |