首页 / 专利库 / 电脑零配件 / 微指令翻译器 / 分支预测器 / 一种指令集转换系统和方法

一种指令集转换系统和方法

阅读:734发布:2020-05-08

专利汇可以提供一种指令集转换系统和方法专利检索,专利查询,专利分析的服务。并且本 发明 提供了一种指令集转换系统和方法,能将外部指令转换为内部指令供处理器核执行,且可以通过配置,很方便地扩展处理器系统支持的指令集;本发明还提供了内部指令地址和外部指令地址的实时转换方法,使得处理器核能直接在较高层次缓存中读取内部指令,减少流 水 线深度。,下面是一种指令集转换系统和方法专利的具体信息内容。

1.一种指令集转换方法,其特征包括:
以转换规则定义外部指令集中的外部指令与内部指令集中的内部指令之间的转换关系;
通过在第一存储器中存储所述转换规则进行配置;根据所述配置将外部指令集中的外部指令转换为属于内部指令集的内部指令;
将转换所得到的每一条内部指令存储在指令存储器中的存储中,存储块是具有相同存储器高位地址的连续指令,存储器高位地址称为块地址,存储器低位地址称为块内偏移量;
对填充到指令存储器的指令进行审查,提取出相应的指令信息;指向即将执行的指令的读指针根据所述指令信息而非指令本身的功能确定如何更新;
至少在第二存储器中存储外部指令的块内偏移量与内部指令的块内偏移量之间的映射关系;
由处理器核控制产生待执行外部指令的地址;
将待执行外部指令地址中的块地址映射为相应的指令存储器地址的块地址;
根据第二存储器中存储的块内偏移量映射关系将待执行外部指令的块内偏移量映射为相应的指令存储器地址的块内偏移量;
以相应的指令存储器地址的块地址及相应的指令存储器的块内偏移量寻址指令存储器,使指令存储器提供相应待执行外部指令的内部指令;
处理器核执行相应待执行外部指令的内部指令。
2.如权利要求1所述的指令集转换方法,其特征在于,根据程序执行流及处理器核执行指令的反馈向处理器核提供后续指令;所述处理器核执行指令的反馈是处理器核执行分支指令时产生的分支转移是否发生的信号
3.如权利要求1所述的指令集转换方法,其特征在于,对于需要被转换的外部指令:
提取出外部指令中包含指令类型在内的各个指令域;
根据提取出的指令类型查找对应的内部指令的指令类型和指令转换控制信息;
根据所述指令转换控制信息对提取出的相应指令域进行移位;和对所述内部指令类型及移位后的指令域进行拼接,构成相应的内部指令,从而将外部指令转换为内部指令。
4.如权利要求3所述的指令集转换方法,其特征在于,
一条外部指令被转换为一条内部指令;其中,该外部指令的指令地址对应内部指令的指令地址;或
一条外部指令被转换为多条内部指令;其中,该外部指令的指令地址对应所述多条内部指令中第一条内部指令的指令地址。
5.如权利要求4所述的指令集转换方法,其特征在于,
多条外部指令被转换为一条内部指令;其中,所述多条外部指令中第一条外部指令的指令地址对应该内部指令的指令地址。
6.如权利要求3所述的指令集转换方法,其特征在于,建立外部指令地址和内部指令地址之间的映射关系。
7.如权利要求6所述的指令集转换方法,其特征在于,所述外部指令地址和内部指令地址之间的映射关系包括:
外部指令地址和内部指令块地址之间的映射关系;
外部指令块内地址和内部指令块内地址之间的映射关系。
8.如权利要求7所述的指令集转换方法,其特征在于,用一种数据结构表示外部指令地址和内部指令块地址之间的映射关系;
所述数据结构中存储了内部指令块地址,且所述内部指令块地址同时按外部指令块地址和外部指令块内地址进行排序。
9.如权利要求8所述的指令集转换方法,其特征在于,在所述数据结构中,如果一个外部指令地址对应的内部指令块地址存在,则根据所述外部指令地址中的外部指令块地址和外部指令块内地址,在该数据结构中找到对应的位置,读出其中存储的内部指令块地址。
10.如权利要求8所述的指令集转换方法,其特征在于,在所述数据结构中,如果一个外部指令地址对应的内部指令块地址不存在,则根据所述外部指令地址中的外部指令块地址和外部指令块内地址,找到其插入位置,并在位置中存储该外部指令地址对应的内部指令块地址。
11.如权利要求7所述的指令集转换方法,其特征在于,根据所述外部指令地址中的块地址和内部指令块地址之间的映射关系,对外部指令地址进行转换得到对应的内部指令块地址。
12.如权利要求11所述的指令集转换方法,其特征在于,根据所述外部指令块内地址和内部指令块内地址之间的映射关系,对外部指令块内地址进行转换得到对应的内部指令块内地址。
13.如权利要求6所述的指令集转换方法,其特征在于,对于任意一个外部指令地址,通过正向移位逻辑,从初始值开始,对从该地址所在的外部指令块起始地址开始至该外部指令地址之间的外部指令条数进行计数;其中,每经过一条所述外部指令,正向移一位,最终得到一个移位结果;
通过反向移位逻辑,从所述外部指令块对应的内部指令块的起始地址开始对每条外部指令对应的第一条内部指令的条数进行计数;其中,每经过一条所述内部指令,反向移一位,直到移位结果恢复为所述初始值;和
此时对应的内部指令块内地址即对应所述外部指令的块内地址。
14.如权利要求6所述的指令集转换方法,其特征在于,通过地址计算,将栈寄存器操作转换为对寄存器堆的操作,使得处理器核内部的寄存器堆能作为栈寄存器使用。
15.如权利要求6所述的指令集转换方法,其特征在于,所述转换能将一种或多种指令集的指令转换为一种指令集的指令。
16.如权利要求1所述的指令集转换方法,其特征在于,当读指针指向一条有条件分支指令,且其后一条是无条件分支指令时,则根据处理器核对有条件分支指令的执行结果:
若分支转移发生,读指针被更新为所述有条件分支指令的分支目标寻址地址值;若分支转移没有发生,读指针被更新为所述无条件分支指令的分支目标寻址地址值;
使得处理器核不需要单独一个时钟周期执行所述无条件分支指令。
17.如权利要求1所述的指令集转换方法,其特征在于,当处理器核执行到分支指令时,根据分支预测选择顺序执行下一指令和分支目标指令中的一个作为后续指令执行,并保存另一个的寻址地址;
若分支转移结果与分支预测一致,则继续执行后续指令;
若分支转移结果与分支预测不一致,则清空流线,并从所述保存的寻址地址对应的指令重新执行。
18.一种指令集转换系统,包括:
处理器核,用于执行内部指令;
转换器,用于将外部指令转换为内部指令,并建立外部指令地址和内部指令地址之间的映射关系;
地址映射模块,用于存储所述外部指令地址和内部指令地址之间的映射关系,并对外部指令地址和内部指令地址之间进行转换;
缓存,用于存储转换得到的内部指令,并根据内部指令地址输出相应内部供处理器核执行;
转换器将转换所得到的每一条内部指令存储在缓存中的存储块中;存储块是具有相同存储器高位地址的连续指令,存储器高位地址称为块地址,存储器低位地址称为块内偏移量;
至少在地址映射模块中存储外部指令的块内偏移量与内部指令的块内偏移量之间的映射关系;
由处理器核控制产生待执行外部指令的地址;并将待执行外部指令地址中的块地址映射为相应的缓存地址的块地址;
根据地址映射模块中存储的块内偏移量映射关系将待执行外部指令的块内偏移量映射为相应的缓存地址的块内偏移量;
以相应的缓存地址的块地址及相应的缓存的块内偏移量寻址缓存,使缓存提供相应待执行外部指令的内部指令;
处理器核执行相应待执行外部指令的内部指令;
其特征在于,所述系统还包括一个循迹系统;所述循迹系统根据存储在其中的程序执行流及处理器核执行指令的反馈,同时对所述程序执行流及缓存寻址,并从缓存中读出后续指令送往处理器核供执行;
对填充到缓存的指令进行审查,提取出相应的指令信息;循迹系统中指向即将执行的指令的读指针根据所述指令信息而非指令本身的功能确定如何更新。
19.如权利要求18所述的指令集转换系统,其特征在于,所述转换器进一步包括:
存储器,用于存储外部指令类型与内部指令类型的对应关系,及相应外部指令和内部指令之间各个指令域的对应关系;
对齐器,用于将外部指令移位对齐,并在外部指令跨越指令块边界的情况下,将该外部指令移位到一个指令块并对齐;
提取器,用于提取出外部指令中的各个指令域;其中,提取出的指令类型被用于对所述存储器寻址,以读出所述外部指令对应的指令转换控制信息及相应的内部指令类型,并根据所述控制信息对提取出的指令域进行移位;
指令拼接器,用于对所述内部指令类型和移位后的指令域进行拼接,构成内部指令。
20.如权利要求19所述的指令集转换系统,其特征在于,所述地址映射模块进一步包括:
块地址映射模块,用于存储外部指令块地址与内部指令块地址之间的映射关系,并将外部指令块地址转换为内部指令块地址;和
偏移地址映射模块,用于存储外部指令块内地址与内部指令块内地址之间的映射关系,并将外部指令块内地址转换为内部指令块内地址。
21.如权利要求20所述的指令集转换系统,其特征在于,所述处理器核执行指令的反馈是处理器核执行分支指令时产生的分支转移是否发生的信号。
22.如权利要求20所述的指令集转换系统,其特征在于,地址映射模块中还包含一个正向移位逻辑和一个反向移位逻辑;
对于任意一个外部指令地址,通过正向移位逻辑,从初始值开始,对从该地址所在的外部指令块起始地址开始至该外部指令地址之间的外部指令条数进行计数;其中,每经过一条所述外部指令,正向移一位,最终得到一个移位结果;
通过反向移位逻辑,从所述外部指令块对应的内部指令块的起始地址开始对每条外部指令对应的第一条内部指令的条数进行计数;其中,每经过一条所述内部指令,反向移一位,直到移位结果恢复为所述初始值;和
此时对应的内部指令块内地址即对应所述外部指令的块内地址。
23.如权利要求22所述的指令集转换系统,其特征在于,处理器核内的寄存器堆被用做栈寄存器;所述系统还包含:
栈顶指针寄存器,用于存储当前栈顶指针,该指针指向寄存器堆中的一个寄存器;
加法器,用于计算栈顶指针加一的值,对应当前栈顶之上的寄存器的位置;
减法器,用于计算栈顶指针减一的值,对应当前栈顶寄存器之下的寄存器的位置;
栈底控制模块,用于检测栈寄存器是否即将为空或即将为满,并在栈寄存器即将为满时将栈底位置的至少一个寄存器的值送往存储器保存,并相应调整栈底指针,使得栈寄存器不会溢出;或
在栈寄存器即将为空时,相应调整栈底指针,并将之前送到存储器保存的至少一个寄存器的值存回栈底,使得栈寄存器能继续提供操作数供处理器核执行。
24.如权利要求18所述的指令集转换系统,其特征在于,同时从轨道表中读出读指针指向的轨迹点及其后一个轨迹点中存储的所述指令信息。
25.如权利要求24所述的指令集转换系统,其特征在于,当读指针指向一条有条件分支指令,且其后一条是无条件分支指令时,则根据处理器核对有条件分支指令的执行结果:
若分支转移发生,读指针被更新为所述有条件分支指令的分支目标寻址地址值;若分支转移没有发生,读指针被更新为所述无条件分支指令的分支目标寻址地址值;
使得处理器核不需要单独一个时钟周期执行所述无条件分支指令。
26.如权利要求21所述的指令集转换系统,其特征在于,所述循迹系统还包括一个寄存器,用于存储顺序执行下一指令和分支目标指令中的一个寻址地址;
当处理器核执行到分支指令时,根据分支预测选择顺序执行下一指令和分支目标指令中的一个作为后续指令执行,并将另一个的寻址地址存储在所述寄存器中;
若分支转移结果与分支预测一致,则继续执行后续指令;
若分支转移结果与分支预测不一致,则清空流水线,并从所述寄存器中保存的寻址地址对应的指令重新执行。
27.如权利要求24所述的指令集转换系统,其特征在于,所述轨道表中每条轨道的最后一个轨迹点之后再增加一个结束轨迹点;所述结束轨迹点的指令类型为无条件分支指令,其分支目标寻址地址为顺序执行下一轨道第一个轨迹点的寻址地址;当读指针指向结束轨迹点时,缓存输出空指令。
28.如权利要求27所述的指令集转换系统,其特征在于,所述轨道表中每条轨道的最后一个轨迹点之后再增加一个结束轨迹点;所述结束轨迹点的指令类型为无条件分支指令,其分支目标寻址地址为顺序执行下一轨道第一个轨迹点的寻址地址;且
当结束轨迹点之前的轨迹点不是分支点时,将该结束轨迹点的指令类型及分支目标寻址地址作为该轨迹点的指令类型及分支目标寻址地址。
29.一种指令集转换系统,其特征在于包括:
一个第一存储器,用于存储属于第一指令集的复数条计算机指令;
一个指令转换器,用于将所述属于第一指令集的复数条计算机指令转换为复数条内部指令,所述内部指令属于一种第二指令集;
一个指令存储器,用于存储由指令转换器转换得到的所述复数条内部指令;所述内部指令存储在指令存储器中的存储块中,存储块是具有相同存储器高位地址的连续指令,存储器高位地址称为块地址,存储器低位地址称为块内偏移量;
对填充到指令存储器的指令进行审查,提取出相应的指令信息;指向即将执行的指令的读指针根据所述指令信息而非指令本身的功能确定如何更新;和
一个连接所述指令存储器的处理器核,用于在不需要访问所述复数条计算机指令、以及不需要指令转换器参与的情况下,将待执行第一指令集指令地址中的块地址映射为相应的指令存储器地址的块地址,并将待执行第一指令集指令的块内偏移量映射为相应的指令存储器地址的块内偏移量,进而从指令存储器中读取并执行所述复数条内部指令。
30.如权利要求29所述的系统,其特征在于:
指令转换器包含一个存储器,所述存储器根据配置用于存储第一指令集和第二指令集之间的映射关系;和
指令转换器根据存储在其中的第一指令集和第二指令集之间的映射关系将属于第一指令集的所述复数条计算机指令转换为属于第二指令集的所述复数条内部指令。
31.如权利要求29或30所述的系统,其特征在于进一步包括:
一个连接指令转换器和处理器核的地址转换器,用于将所述复数条计算机指令中的目标计算机指令地址转换为所述复数条内部指令中的目标指令的内部地址。
32.如权利要求31所述的系统,其特征在于在地址转换器转换地址时:
将所述目标计算机指令地址映射为内部指令块地址;
将所述目标计算机指令地址映射为内部指令在所述块地址对应的指令块中的块内偏移地址;和
合并所述块地址和块内偏移地址,构成内部地址。
33.如权利要求32所述的系统,其特征在于:
根据计算机指令地址中的块地址和所述内部指令块地址之间的块地址映射关系映射产生所述块地址。
34.如权利要求33所述的系统,其特征在于:由地址转换器存储所述块地址映射关系。
35.如权利要求33所述的系统,其特征在于:由硬件逻辑根据一个映射关系表映射产生所述块内偏移地址。
36.如权利要求32所述的系统,其特征在于进一步包括:
一个结束标志存储器,用于存储内部指令块的结束指令的内部指令地址;所述结束指令就是转移到顺序地址的下一内部指令块前的最后一条内部指令。
37.如权利要求32所述的系统,其特征在于进一步包括:一个下块地址存储器,用于存储顺序地址下一内部指令块的块地址。
38.如权利要求32所述的系统,其特征在于进一步包括:一个分支目标缓冲,用于存储了分支目标的内部指令地址。
39.如权利要求30所述的系统,其特征在于:
所述第一存储器存储了属于一个第三指令集的复数条计算机指令;
指令转换器根据配置在所述存储器中存储了第三指令集和第二指令集之间的映射关系;和
指令转换器根据存储在其中的第三指令集和第二指令集之间的映射关系将属于第三指令集的所述复数条计算机指令转换为属于第二指令集的所述复数条内部指令。
40.如权利要求39所述的系统,其特征在于在所述系统上运行一个第一线程指令序列和一个第二线程指令序列;其中:
第一线程指令序列由第一指令集的复数条计算机指令构成;
第二线程指令序列由第三指令集的复数条计算机指令构成;
所述指令转换器根据配置在所述存储器中同时存储了第一指令集和第二指令集之间的映射关系,以及第三指令集和第二指令集之间的映射关系;和
指令转换器根据线程号选择所述第一指令集和第二指令集之间的映射关系及第三指令集和第二指令集之间的映射关系中的一个,将该线程的所述复数条计算机指令转换为属于第二指令集的所述复数条内部指令。
41.如权利要求30所述的系统,其特征在于:
所述复数条计算机指令中的每一条均至少包含一个内容为指令类型的指令域;
所述复数条内部指令中的每一条均至少包含一个内容为指令类型的指令域;
所述复数条计算机指令和所述复数条内部指令一一对应;和
所述映射关系包括每条计算机指令的指令类型和每条内部指令的指令类型之间的映射关系,以及每条计算机指令中除指令类型之外的指令域与每条内部指令中除指令类型之外的指令域之间的映射关系。
42.如权利要求30所述的系统,其特征在于:
所述复数条计算机指令中的每一条均至少包含一个内容为指令类型的指令域;
所述复数条内部指令中的每一条均至少包含一个内容为指令类型的指令域;
所述复数条计算机指令和所述复数条内部指令的总数不相等;和
所述复数条计算机指令中的每一条均被映射为所述复数条内部指令中的一条或多条。
43.如权利要求41或42所述的系统,其特征在于:
所述计算机指令的指令域中至少包含一个指令类型;和
指令转换器至少利用所述指令类型对指令转换器中的存储器寻址读出相应的映射关系。
44.如权利要求43所述的系统,其特征在于:
所述映射关系包含一个移位逻辑;和
所述复数条内部指令中至少一条指令的一个指令域通过对相应计算机指令的相应指令域移位产生。
45.一种用于指令集转换系统的指令集转换方法,其特征在于包括:
将属于第一指令集的复数条计算机指令存储在一个第一存储器中;
由一个指令转换器将所述复数条计算机指令转换为属于一个第二指令集的复数条内部指令;
将由指令转换器转换得到的所述复数条内部指令存储在一个指令存储器中;所述内部指令存储在指令存储器中的存储块中,存储块是具有相同存储器高位地址的连续指令,存储器高位地址称为块地址,存储器低位地址称为块内偏移量;
对填充到指令存储器的指令进行审查,提取出相应的指令信息;指向即将执行的指令的读指针根据所述指令信息而非指令本身的功能确定如何更新;和
由一个连接所述指令存储器的处理器核在不需要访问所述复数条计算机指令、以及不需要指令转换器参与的情况下,将待执行第一指令集指令地址中的块地址映射为相应的指令存储器地址的块地址,并将待执行第一指令集指令的块内偏移量映射为相应的指令存储器地址的块内偏移量,进而从指令存储器中读取并执行所述复数条内部指令。
46.如权利要求45所述的方法,其特征在于:
通过将第一指令集和第二指令集映射关系存储到指令转换器的存储器中,对指令转换器进行配置;和
指令转换器根据存储在其中的第一指令集和第二指令集之间的映射关系将属于第一指令集的所述复数条计算机指令转换为属于第二指令集的所述复数条内部指令。
47.如权利要求45或46所述的方法,其特征在于:
通过一个连接指令转换器和处理器核的地址转换器将所述复数条计算机指令中的目标计算机指令地址转换为所述复数条内部指令中的目标指令的内部地址。
48.如权利要求47所述的方法,其特征在于在地址转换器转换地址时:
将所述目标计算机指令地址映射为内部指令块地址;
将所述目标计算机指令地址映射为内部指令在所述块地址对应的指令块中的块内偏移地址;和
合并所述块地址和块内偏移地址,构成内部地址。
49.如权利要求48所述的方法,其特征在于:
根据计算机指令地址中的块地址和所述内部指令块地址之间的块地址映射关系映射产生所述块地址。
50.如权利要求49所述的方法,其特征在于:由地址转换器存储所述块地址映射关系。
51.如权利要求49所述的方法,其特征在于:由硬件逻辑根据一个映射关系表映射产生所述块内偏移地址。
52.如权利要求48所述的方法,其特征在于进一步包括:
由一个结束标志存储器存储内部指令块的结束指令的内部指令地址;所述结束指令就是转移到顺序地址的下一内部指令块前的最后一条内部指令。
53.如权利要求48所述的方法,其特征在于进一步包括:由一个下块地址存储器存储顺序地址下一内部指令块的块地址。
54.如权利要求48所述的方法,其特征在于进一步包括:由一个分支目标缓冲存储了分支目标的内部指令地址。
55.如权利要求46所述的方法,其特征在于:
将属于一个第三指令集的复数条计算机指令存储在所述第一存储器中;
由指令转换器根据配置在所述存储器中存储了第三指令集和第二指令集之间的映射关系;和
由指令转换器根据存储在其中的第三指令集和第二指令集之间的映射关系将属于第三指令集的所述复数条计算机指令转换为属于第二指令集的所述复数条内部指令。
56.如权利要求55所述的方法,其特征在于运行一个第一线程指令序列和一个第二线程指令序列;其中:
第一线程指令序列由第一指令集的复数条计算机指令构成;
第二线程指令序列由第三指令集的复数条计算机指令构成;
由所述指令转换器根据配置在所述存储器中同时存储第一指令集和第二指令集之间的映射关系,以及第三指令集和第二指令集之间的映射关系;和
由指令转换器根据线程号选择所述第一指令集和第二指令集之间的映射关系及第三指令集和第二指令集之间的映射关系中的一个,将该线程的所述复数条计算机指令转换为属于第二指令集的所述复数条内部指令。
57.如权利要求46所述的方法,其特征在于:
所述复数条计算机指令中的每一条均至少包含一个内容为指令类型的指令域;
所述复数条内部指令中的每一条均至少包含一个内容为指令类型的指令域;
所述复数条计算机指令和所述复数条内部指令一一对应;和
所述映射关系包括每条计算机指令的指令类型和每条内部指令的指令类型之间的映射关系,以及每条计算机指令中除指令类型之外的指令域与每条内部指令中除指令类型之外的指令域之间的映射关系。
58.如权利要求46所述的方法,其特征在于:
所述复数条计算机指令中的每一条均至少包含一个内容为指令类型的指令域;
所述复数条内部指令中的每一条均至少包含一个内容为指令类型的指令域;
所述复数条计算机指令和所述复数条内部指令的总数不相等;和
所述复数条计算机指令中的每一条均被映射为所述复数条内部指令中的一条或多条。
59.如权利要求57或58所述的方法,其特征在于:
所述计算机指令的指令域中至少包含一个指令类型;和
指令转换器至少利用所述指令类型对指令转换器中的存储器寻址读出相应的映射关系。
60.如权利要求59所述的方法,其特征在于:
所述复数条内部指令中至少一条指令的一个指令域通过对相应计算机指令的相应指令域移位产生。

说明书全文

一种指令集转换系统和方法

技术领域

[0001] 本发明涉及计算机,通讯及集成电路领域。

背景技术

[0002] 目前,如果需要在某个处理器核上执行属于不同指令集的程序,最常用的方法是使用软件虚拟机(或虚拟层)。虚拟机的作用是对由处理器核不支持的指令集(外部指令集)组成的程序进行翻译或解释,生成处理器核本身支持的指令集(内部指令集)对应的指令后供执行。一般地,采用解释的方法,是在运行过程中实时地由虚拟机通过软件方法将外部指令中的包括操作码、操作数等各个域依次取出,然后用存储器中实现的栈结构,根据不同操作码对操作数进行相应操作。因此,需要执行很多条内部指令才能实现任意一条外部指令的功能,效率很低。而采用翻译的方法,在程序执行前先执行类似软件编译的过程,将该程序转换成完全由内部指令集组成的形式。这样在执行程序时,效率比较高,但软件编译本身依然有不小的开销。
[0003] 第二种解决方法是在处理器核内部包含对应不同指令集的指令译码器,在执行不同指令集的指令时用相应的指令译码进行译码并交后续流线操作。这种方法在执行效率上几乎没有损失,但增加的指令译码器会导致硬件开销增大,提高了处理器芯片的成本。此外,由于多种指令译码器是事先用硬件在处理器核内实现的,缺乏扩展性,无法支持新的指令集。
[0004] 第三种解决方法是在处理器核的外部增加一个转换模,将外部指令集转换为内部指令集后供处理器核执行。这种转换模块可以是用软件实现的,但一般来说,用软件进行解释虽然易于扩展,但效率太低。这种转换模块也可以是用硬件实现的,但难于扩展,且无法充分利用缓存存储转换得到的内部指令。
[0005] 具体地,若该转换模块位于缓存和处理器核之间,则缓存中存储的是外部指令,必须经过转换才能供处理器核执行。这样,无论是否缓存命中,都要经过该转换步骤,对同样的外部指令进行多次重复性的转换,不但增加了功耗,而且加深了处理器核的流水线,从而增加了硬件开销和分支预测失败时的性能损失。
[0006] 若该转换模块位于缓存之外(即缓存位于转换模块和处理器核之间),则缓存中存储的是转换得到的内部指令,即根据内部指令地址对缓存寻址,而处理器核执行分支指令计算得到的分支目标指令地址是外部指令地址。由于内部指令和外部指令并不是一一对应的(如:一条外部指令可以对应多条内部指令),因此必须记录内部指令地址与外部指令地址对应关系,才能在分支转移时,将分支目标指令的外部指令地址转换为内部指令地址并以此在缓存中找到正确的指令。记录内部指令地址与外部指令地址对应关系的难点在于如何有效地储存,以及如何有效地转换。否则,一旦发生分支转移,只能根据外部指令地址从转换模块以外的更低层次存储器中读取指令经转换模块转换后再存储到缓存中并供处理器核执行,依然严重影响执行效率。该问题的一种方法是用基于程序执行路径跟踪缓存(trace cache)代替传统的基于地址匹配的缓存。但跟踪缓存中会存储大量地址重复、但位于不同路径上的指令,造成很大的容量浪费,导致跟踪缓存的性能不高。
[0007] 本发明提出的方法与系统装置能直接解决上述或其他的一个或多个困难。

发明内容

[0008] 本发明提出了一种指令集转换方法,所述方法包括:将外部指令转换为内部指令,并建立外部指令地址和内部指令地址之间的映射关系;将所述内部指令存储在处理器核能直接访问的缓存中;直接根据该内部指令地址对缓存寻址读出相应的内部指令供处理器核执行;或根据所述映射关系将处理器核输出的外部指令地址转换为内部指令地址后,对缓存寻址读出相应的内部指令供处理器核执行。
[0009] 可选的,在所述方法中,根据程序执行流及处理器核执行指令的反馈向处理器核提供后续指令;所述处理器核执行指令的反馈可以是处理器核执行分支指令时产生的分支转移是否发生的信号
[0010] 可选的,在所述方法中,对于需要被转换的外部指令提取出外部指令中包含指令类型在内的各个指令域;根据提取出的指令类型查找对应的内部指令的指令类型和指令转换控制信息;根据所述指令转换控制信息对提取出的相应指令域进行移位;对所述内部指令类型及移位后的指令域进行拼接,构成相应的内部指令,从而将外部指令转换为内部指令。
[0011] 可选的,在所述方法中,一条外部指令被转换为一条内部指令;其中,该外部指令的指令地址对应内部指令的指令地址;或一条外部指令被转换为多条内部指令;其中,该外部指令的指令地址对应所述多条内部指令中第一条内部指令的指令地址。
[0012] 可选的,在所述方法中,多条外部指令被转换为一条内部指令;其中,所述多条外部指令中第一条外部指令的指令地址对应该内部指令的指令地址。
[0013] 可选的,在所述方法中,建立外部指令地址和内部指令地址之间的映射关系。
[0014] 可选的,在所述方法中,所述外部指令地址和内部指令地址之间的映射关系包括:外部指令地址和内部指令块地址之间的映射关系、外部指令块内地址和内部指令块内地址之间的映射关系。
[0015] 可选的,在所述方法中,可以用一种数据结构表示外部指令地址和内部指令块地址之间的映射关系;所述数据结构中存储了内部指令块地址,且所述内部指令块地址同时按外部指令块地址和外部指令块内地址进行排序。
[0016] 可选的,在所述数据结构中,如果一个外部指令地址对应的内部指令块地址存在,则可以根据所述外部指令地址中的外部指令块地址和外部指令块内地址,在该数据结构中找到对应的位置,读出其中存储的内部指令块地址。
[0017] 可选的,在所述数据结构中,如果一个外部指令地址对应的内部指令块地址不存在,则可以根据所述外部指令地址中的外部指令块地址和外部指令块内地址,找到其插入位置,并在位置中存储该外部指令地址对应的内部指令块地址。
[0018] 可选的,在所述方法中,根据所述外部指令块地址和内部指令块地址之间的映射关系,可以对外部指令地址进行转换得到对应的内部指令块地址。
[0019] 可选的,在所述方法中,根据所述外部指令块内地址和内部指令块内地址之间的映射关系,可以对外部指令块内地址进行转换得到对应的内部指令块内地址。
[0020] 可选的,在所述方法中,对于任意一个外部指令地址,通过正向移位逻辑,从初始值开始,对从该地址所在的外部指令块起始地址开始至该外部指令地址之间的外部指令条数进行计数;其中,每经过一条所述外部指令,正向移一位,最终得到一个移位结果;通过反向移位逻辑,从所述外部指令块对应的内部指令块的起始地址开始对每条外部指令对应的第一条内部指令的条数进行计数;其中,每经过一条所述内部指令,反向移一位,直到移位结果恢复为所述初始值;此时对应的内部指令块内地址即对应所述外部指令的块内地址。
[0021] 可选的,在所述方法中,通过地址计算,将栈寄存器操作转换为对寄存器堆的操作,使得处理器核内部的寄存器堆能作为栈寄存器使用。
[0022] 可选的,在所述方法中,所述转换能将一种或多种指令集的指令转换为一种指令集的指令。
[0023] 本发明还提出了一种指令集转换系统,所述系统包括:处理器核,用于执行内部指令;转换器,用于将外部指令转换为内部指令,并建立外部指令地址和内部指令地址之间的映射关系;地址映射模块,用于存储所述外部指令地址和内部指令地址之间的映射关系,并对外部指令地址和内部指令地址之间进行转换;缓存,用于存储转换得到的内部指令,并根据内部指令地址输出相应内部供处理器核执行。
[0024] 可选的,在所述系统中,所述转换器进一步包括:存储器,用于存储外部指令类型与内部指令类型的对应关系,及相应外部指令和内部指令之间各个指令域的对应关系;对齐器,用于将外部指令移位对齐,并在外部指令跨越指令块边界的情况下,将该外部指令移位到一个指令块并对齐;提取器,用于提取出外部指令中的各个指令域;其中,提取出的指令类型被用于对所述存储器寻址,以读出所述外部指令对应的指令转换控制信息及相应的内部指令类型,并根据所述控制信息对提取出的指令域进行移位;指令拼接器,用于对所述内部指令类型和移位后的指令域进行拼接,构成内部指令。
[0025] 可选的,在所述系统中,所述地址映射模块进一步包括:块地址映射模块,用于存储外部指令块地址与内部指令块地址之间的映射关系,并将外部指令块地址转换为内部指令块地址;偏移地址映射模块,用于存储外部指令块内地址与内部指令块内地址之间的映射关系,并将外部指令块内地址转换为内部指令块内地址。
[0026] 可选的,所述系统还包括一个循迹系统;所述循迹系统根据存储在其中的程序执行流及处理器核执行指令的反馈,同时对所述程序执行流及缓存寻址,并从缓存中读出后续指令送往处理器核供执行;所述处理器核执行指令的反馈可以是处理器核执行分支指令时产生的分支转移是否发生的信号。
[0027] 可选的,在所述系统中,地址映射模块中还包含一个正向移位逻辑和一个反向移位逻辑;对于任意一个外部指令地址,通过正向移位逻辑,从初始值开始,对从该地址所在的外部指令块起始地址开始至该外部指令地址之间的外部指令条数进行计数;其中,每经过一条所述外部指令,正向移一位,最终得到一个移位结果;通过反向移位逻辑,从所述外部指令块对应的内部指令块的起始地址开始对每条外部指令对应的第一条内部指令的条数进行计数;其中,每经过一条所述内部指令,反向移一位,直到移位结果恢复为所述初始值;此时对应的内部指令块内地址即对应所述外部指令的块内地址。
[0028] 可选的,在所述系统中,处理器核内的寄存器堆可以被用做栈寄存器;所述系统还包含:栈顶指针寄存器,用于存储当前栈顶指针,该指针指向寄存器堆中的一个寄存器;加法器,用于计算栈顶指针加一的值,对应当前栈顶之上的寄存器的位置;减法器,用于计算栈顶指针减一的值,对应当前栈顶寄存器之下的寄存器的位置;栈底控制模块,用于检测栈寄存器是否即将为空或即将为满,并在栈寄存器即将为满时将栈底位置的至少一个寄存器的值送往存储器保存,并相应调整栈底指针,使得栈寄存器不会溢出;或在栈寄存器即将为空时,相应调整栈底指针,并将之前送到存储器保存的至少一个寄存器的值存回栈底,使得栈寄存器能继续提供操作数供处理器核执行。
[0029] 可选的,在所述方法中,对填充到一级缓存的指令进行审查,提取出相应的指令信息;第一读指针根据所述指令信息而非指令本身的功能确定如何更新。
[0030] 可选的,在所述方法中,当第一读指针指向一条有条件分支指令,且其后一条是无条件分支指令时,则根据处理器核对有条件分支指令的执行结果:若分支转移发生,第一读指针被更新为所述有条件分支指令的分支目标寻址地址值;若分支转移没有发生,第一读指针被更新为所述无条件分支指令的分支目标寻址地址值;使得处理器核不需要单独一个时钟周期执行所述无条件分支指令。
[0031] 可选的,在所述方法中,当处理器核执行到分支指令时,根据分支预测选择顺序执行下一指令和分支目标指令中的一个作为后续指令执行,并保存另一个的寻址地址;若分支转移结果与分支预测一致,则继续执行后续指令;若分支转移结果与分支预测不一致,则清空流水线,并从所述保存的寻址地址对应的指令重新执行。
[0032] 可选的,在所述系统中,第一读指针根据所述指令信息而非指令本身的功能确定如何更新。
[0033] 可选的,在所述系统中,同时从轨道表中读出第一读指针指向的轨迹点及其后一个轨迹点中存储的所述指令信息。
[0034] 可选的,在所述系统中,当第一读指针指向一条有条件分支指令,且其后一条是无条件分支指令时,则根据处理器核对有条件分支指令的执行结果:若分支转移发生,第一读指针被更新为所述有条件分支指令的分支目标寻址地址值;若分支转移没有发生,第一读指针被更新为所述无条件分支指令的分支目标寻址地址值;使得处理器核不需要单独一个时钟周期执行所述无条件分支指令。
[0035] 可选的,在所述系统中,所述循迹系统还包括一个寄存器,用于存储顺序执行下一指令和分支目标指令中的一个寻址地址;当处理器核执行到分支指令时,根据分支预测选择顺序执行下一指令和分支目标指令中的一个作为后续指令执行,并将另一个的寻址地址存储在所述寄存器中;若分支转移结果与分支预测一致,则继续执行后续指令;若分支转移结果与分支预测不一致,则清空流水线,并从所述寄存器中保存的寻址地址对应的指令重新执行。
[0036] 可选的,在所述系统中,所述轨道表中每条轨道的最后一个轨迹点之后再增加一个结束轨迹点;所述结束轨迹点的指令类型为无条件分支指令,其分支目标寻址地址为顺序执行下一轨道第一个轨迹点的寻址地址;当第一读指针指向结束轨迹点时,一级缓存输出空指令。
[0037] 可选的,在所述系统中,所述轨道表中每条轨道的最后一个轨迹点之后再增加一个结束轨迹点;所述结束轨迹点的指令类型为无条件分支指令,其分支目标寻址地址为顺序执行下一轨道第一个轨迹点的寻址地址;当结束轨迹点之前的轨迹点不是分支点时,可以将该结束轨迹点的指令类型及分支目标寻址地址作为该轨迹点的指令类型及分支目标寻址地址。
[0038] 本发明还提出了一种能执行一种或多种指令集的处理器系统,包括:一个第一存储器,用于存储属于第一指令集的复数条计算机指令;一个指令转换器,用于将所述属于第一指令集的复数条计算机指令转换为复数条内部指令,所述内部指令属于一种第二指令集;一个第二存储器,用于存储由指令转换器转换得到的所述复数条内部指令;一个连接所述第二存储器的处理器核,用于在不需要访问所述复数条计算机指令、以及不需要指令转换器参与的情况下,从第二存储器中读取并执行所述复数条内部指令。
[0039] 可选的,在所述系统中,指令转换器包含一个存储器,所述存储器可以根据配置用于存储第一指令集和第二指令集之间的映射关系;指令转换器根据存储在其中的第一指令集和第二指令集之间的映射关系将属于第一指令集的所述复数条计算机指令转换为属于第二指令集的所述复数条内部指令。
[0040] 可选的,所述系统进一步包括:一个连接指令转换器和处理器核的地址转换器,用于将所述复数条计算机指令中的目标计算机指令地址转换为所述复数条内部指令中的目标指令的内部地址。
[0041] 可选的,在所述系统中,在地址转换器转换地址时:将所述目标计算机指令地址映射为内部指令块地址;将所述目标计算机指令地址映射为内部指令在所述块地址对应的指令块中的块内偏移地址;合并所述块地址和块内偏移地址,构成内部地址。
[0042] 可选的,在所述系统中,根据所述计算机指令块地址和所述内部指令块地址之间的块地址映射关系映射产生所述块地址。
[0043] 可选的,在所述系统中,由地址转换器存储所述块地址映射关系;由硬件逻辑根据一个映射关系表映射产生所述块内偏移地址。
[0044] 可选的,所述系统进一步包括:一个结束标志存储器,用于存储内部指令块的结束指令的内部指令地址;所述结束指令就是转移到顺序地址的下一内部指令块前的最后一条内部指令。
[0045] 可选的,所述系统进一步包括:一个下块地址存储器,用于存储顺序地址下一内部指令块的块地址;一个分支目标缓冲,用于存储了分支目标的内部指令地址。
[0046] 可选的,在所述系统中,所述第一存储器存储了属于一个第三指令集的复数条计算机指令;指令转换器根据配置在所述存储器中存储了第三指令集和第二指令集之间的映射关系;指令转换器根据存储在其中的第三指令集和第二指令集之间的映射关系将属于第三指令集的所述复数条计算机指令转换为属于第二指令集的所述复数条内部指令。
[0047] 可选的,在所述系统上运行一个第一线程指令序列和一个第二线程指令序列;其中:第一线程指令序列由第一指令集的复数条计算机指令构成;第二线程指令序列由第三指令集的复数条计算机指令构成;所述指令转换器根据配置在所述存储器中同时存储了第一指令集和第二指令集之间的映射关系,以及第三指令集和第二指令集之间的映射关系;指令转换器根据线程号选择所述第一指令集和第二指令集之间的映射关系及第三指令集和第二指令集之间的映射关系中的一个,将该线程的所述复数条计算机指令转换为属于第二指令集的所述复数条内部指令。
[0048] 可选的,在所述系统中,所述复数条计算机指令中的每一条均至少包含一个内容为指令类型的指令域;所述复数条内部指令中的每一条均至少包含一个内容为指令类型的指令域;所述复数条计算机指令和所述复数条内部指令一一对应;所述映射关系包括每条计算机指令的指令类型和每条内部指令的指令类型之间的映射关系,以及每条计算机指令中除指令类型之外的指令域与每条内部指令中除指令类型之外的指令域之间的映射关系。
[0049] 可选的,在所述系统中,所述复数条计算机指令中的每一条均至少包含一个内容为指令类型的指令域;所述复数条内部指令中的每一条均至少包含一个内容为指令类型的指令域;所述复数条计算机指令和所述复数条内部指令的总数不相等;所述复数条计算机指令中的每一条均被映射为所述复数条内部指令中的一条或多条。
[0050] 可选的,在所述系统中,所述映射关系包含一个移位逻辑;所述复数条内部指令中至少一条指令的一个指令域通过对相应计算机指令的相应指令域移位产生。
[0051] 可选的,在所述系统中,所述计算机指令的指令域中至少包含一个指令类型;指令转换器至少利用所述指令类型对指令转换器中的存储器寻址读出相应的映射关系。
[0052] 本发明还提出一种用于执行一种或多种指令集的处理器系统的方法,所述方法包括:将属于第一指令集的复数条计算机指令存储在一个第一存储器中;由一个指令转换器将所述复数条计算机指令转换为属于一个第二指令集的复数条内部指令;将由指令转换器转换得到的所述复数条内部指令存储在一个第二存储器中;由一个连接所述第二存储器的处理器核在不需要访问所述复数条计算机指令、以及不需要指令转换器参与的情况下,从第二存储器中读取并执行所述复数条内部指令。
[0053] 可选的,在所述方法中,通过将第一指令集和第二指令集映射关系存储到指令转换器的存储器中,对指令转换器进行配置;指令转换器根据存储在其中的第一指令集和第二指令集之间的映射关系将属于第一指令集的所述复数条计算机指令转换为属于第二指令集的所述复数条内部指令。
[0054] 可选的,在所述方法中,通过一个连接指令转换器和处理器核的地址转换器将所述复数条计算机指令中的目标计算机指令地址转换为所述复数条内部指令中的目标指令的内部地址。
[0055] 可选的,在所述方法中,在地址转换器转换地址时:将所述目标计算机指令地址映射为内部指令块地址;将所述目标计算机指令地址映射为内部指令在所述块地址对应的指令块中的块内偏移地址;合并所述块地址和块内偏移地址,构成内部地址。
[0056] 可选的,在所述方法中,根据所述计算机指令块地址和所述内部指令块地址之间的块地址映射关系映射产生所述块地址。
[0057] 可选的,在所述方法中,由地址转换器存储所述块地址映射关系;由硬件逻辑根据一个映射关系表映射产生所述块内偏移地址。
[0058] 可选的,所述方法进一步包括:由一个结束标志存储器存储内部指令块的结束指令的内部指令地址;所述结束指令就是转移到顺序地址的下一内部指令块前的最后一条内部指令。
[0059] 可选的,所述方法进一步包括:由一个下块地址存储器存储顺序地址下一内部指令块的块地址;由一个分支目标缓冲存储了分支目标的内部指令地址。
[0060] 可选的,在所述方法中,将属于一个第三指令集的复数条计算机指令存储在所述第一存储器中;由指令转换器根据配置在所述存储器中存储了第三指令集和第二指令集之间的映射关系;由指令转换器根据存储在其中的第三指令集和第二指令集之间的映射关系将属于第三指令集的所述复数条计算机指令转换为属于第二指令集的所述复数条内部指令。
[0061] 可选的,在所述方法中,运行一个第一线程指令序列和一个第二线程指令序列;其中:第一线程指令序列由第一指令集的复数条计算机指令构成;第二线程指令序列由第三指令集的复数条计算机指令构成;由所述指令转换器根据配置在所述存储器中同时存储第一指令集和第二指令集之间的映射关系,以及第三指令集和第二指令集之间的映射关系;由指令转换器根据线程号选择所述第一指令集和第二指令集之间的映射关系及第三指令集和第二指令集之间的映射关系中的一个,将该线程的所述复数条计算机指令转换为属于第二指令集的所述复数条内部指令。
[0062] 可选的,在所述方法中,所述复数条计算机指令中的每一条均至少包含一个内容为指令类型的指令域;所述复数条内部指令中的每一条均至少包含一个内容为指令类型的指令域;所述复数条计算机指令和所述复数条内部指令一一对应;所述映射关系包括每条计算机指令的指令类型和每条内部指令的指令类型之间的映射关系,以及每条计算机指令中除指令类型之外的指令域与每条内部指令中除指令类型之外的指令域之间的映射关系。
[0063] 可选的,在所述方法中,所述复数条计算机指令中的每一条均至少包含一个内容为指令类型的指令域;所述复数条内部指令中的每一条均至少包含一个内容为指令类型的指令域;所述复数条计算机指令和所述复数条内部指令的总数不相等;所述复数条计算机指令中的每一条均被映射为所述复数条内部指令中的一条或多条。
[0064] 可选的,在所述方法中,所述复数条内部指令中至少一条指令的一个指令域通过对相应计算机指令的相应指令域移位产生。
[0065] 可选的,在所述方法中,所述计算机指令的指令域中至少包含一个指令类型;指令转换器至少利用所述指令类型对指令转换器中的存储器寻址读出相应的映射关系。
[0066] 对于本领域专业人士,还可以在本发明的说明、权利要求附图的启发下,理解、领会本发明所包含其他方面内容。
[0067] 有益效果
[0068] 本发明所述处理器系统中最接近处理器核的缓存系统(即较高层次缓存) 中存储的是处理器核本身支持的内部指令集,而存储在主存储器或较低层次缓存中的是外部指令集。通过对转换器配置,可以使得相应的外部指令集被转换为内部指令集供处理器核执行。因此,能很方便地扩展处理器系统支持的指令集。
[0069] 本发明根据程序执行流及处理器核执行指令的反馈,直接由较高层次缓存向处理器核提供内部指令,降低了流水线深度,提高了流水线效率。特别在分支预测错误时,能减少浪费的流水线周期。
[0070] 对于本领域专业人士而言,本发明的其他优点和应用是显见的。

附图说明

[0071] 图1是本发明所述处理器系统的一个示意图;
[0072] 图2是本发明所述转换器的一个实施例
[0073] 图3A是本发明所述对齐器的一个实施例;
[0074] 图3B是本发明所述对齐器运行过程的一个实施例;
[0075] 图4A是本发明所述提取器的一个实施例;
[0076] 图4B是本发明所述提取器运行过程的一个实施例;
[0077] 图5A是本发明所述映射信息的一个示意图;
[0078] 图5B是本发明所述映射信息的另一个示意图;
[0079] 图5C是本发明所述映射信息存储器运行的一个实施例;
[0080] 图5D是本发明所述映射信息存储器运行的另一个实施例;
[0081] 图5E是本发明所述映射信息存储器运行的另一个实施例;
[0082] 图5F是本发明所述指令拼接器的一个实施例;
[0083] 图6是本发明所述包含多层缓存的处理器系统的一个实施例;
[0084] 图7A是本发明所述基于轨道表的缓存结构的实施例;
[0085] 图7B是本发明所述扫描转换器的一个实施例;
[0086] 图8A是本发明所述外部指令块与内部指令块对应关系的示意图;
[0087] 图8B是本发明所述偏移地址映射关系存储形式的一个实施例;
[0088] 图8C是本发明所述偏移地址转换器的一个实施例;
[0089] 图8D是本发明所述块地址映射模块的一个实施例;
[0090] 图9A~9F是本发明所述包含多层缓存的处理器系统运行过程的示意图;
[0091] 图10A是本发明所述操作数栈的一个实施例;
[0092] 图10B是本发明所述更新栈底的一个实施例;
[0093] 图10C是本发明所述更新栈底的另一个实施例;
[0094] 图11A是本发明所述基于轨道表的缓存结构的另一个实施例;
[0095] 图11B是本发明支持猜测执行的实施例;
[0096] 图12是本发明所述包含可配置转换器的处理器系统的一个实施例;
[0097] 图13A是本发明所述可配置转换器的一个框图实施例;
[0098] 图13B是本发明所述可配置转换器中存储器的一个实施例;
[0099] 图13C是本发明所述可配置转换器中存储器的另一个实施例;
[0100] 图14是本发明所述包含可配置转换器和地址映射模块的处理器系统的一个实施例;
[0101] 图15是本发明所述包含可配置转换器和地址映射模块的处理器系统的另一个实施例;
[0102] 图16是本发明所述包含分支目标表的处理器系统的一个实施例;
[0103] 图17是本发明所述包含分支目标表和循迹器的处理器系统的另一个实施例;
[0104] 图18A是本发明所述下块地址存储器格式的一个实施例;
[0105] 图18B是本发明所述下块地址存储器格式的另一个实施例;
[0106] 图18C是所述两个存储层次处理器系统中外部指令地址格式的一个示意图;
[0107] 图19是本发明所述包含两层指令存储器的处理器系统的一个实施例;
[0108] 图20是本发明所述两个存储层次处理器系统中标签存储器结构的一个示意图;
[0109] 图21是本发明所述外部指令边界不对齐情况下指令存储器存储内部指令的一个实施例;
[0110] 图22是本发明所述块地址映射模块的另一个实施例;
[0111] 图23是本发明所述包含轨道表的处理器系统的一个实施例;
[0112] 图24是本发明所述利用寄存器堆实现栈操作功能的处理系统的一个实施例。

具体实施方式

[0113] 以下结合附图和具体实施例对本发明提出的高性能缓存系统和方法作进一步详细说明。根据下面说明和权利要求书,本发明的优点和特征将更清楚。需说明的是,附图均采用非常简化的形式且均使用非精准的比例,仅用以方便、明晰地辅助说明本发明实施例的目的。
[0114] 需要说明的是,为了清楚地说明本发明的内容,本发明特举多个实施例以进一步阐释本发明的不同实现方式,其中,该多个实施例是列举式并非穷举式。此外,为了说明的简洁,前实施例中已提及的内容往往在后实施例中予以省略,因此,后实施例中未提及的内容可相应参考前实施例。
[0115] 虽然该发明可以以多种形式的修改和替换来扩展,说明书中也列出了一些具体的实施图例并进行详细阐述。应当理解的是,发明者的出发点不是将该发明限于所阐述的特定实施例,正相反,发明者的出发点在于保护所有基于由本权利声明定义的精神或范围内进行的改进、等效转换和修改。同样的元器件号码可能被用于所有附图以代表相同的或类似的部分。
[0116] 本发明所述的指令地址(Instruction Address)指的是指令在主存储器中的存储地址,即可以根据该地址在主存储器中找到这条指令。在此为简单明了起见,均假设虚拟地址等于物理地址,对于需要进行地址映射的情况,本发明所述方法也可适用。在本发明中,当前指令可以指当前正在被处理器核执行或获取的指令;当前指令块可以指含有当前正被处理器执行的指令的指令块。
[0117] 为便于说明,在本说明书中,术语“外部指令集(Guest Instrution Set)”代表本发明所述处理器系统执行的程序对应的指令集,“外部指令集”中包含的指令即“外部指令”;术语“内部指令集(Host Instruction Set)”代表本发明所述处理器系统中处理器核本身支持的指令集,“内部指令集”中包含的指令即“内部指令”;术语“指令块”代表指令地址高位相同的一组连续的指令;术语“指令域”是指令字中的代表同一内容的连续区域(Field),如第一操作码(Op-code) 域、第二操作码域、第一源寄存器(Source Register)域、第二源寄存器域、目标寄存器(Tatget Register)域、立即数(immediate)域等。此外,在本发明中,内部指令集是定长指令集,即每条目标指令的字长是固定的(如:32位);而外部指令集可以是定长指令集,也可以是变长指令集。如果外部指令集是变长的,且一条变长外部指令所占的所有字节的地址高位不完全相同,即该指令跨越了两个指令块,则将该外部指令作为前一个指令块的最后一条指令,而该指令之后的一条指令作为后一个指令块的第一条指令。
[0118] 在本发明中,分支指令(Branch Instruction)或分支点(Branch Point)指的是任何适当的能导致处理器核改变执行流(Execution Flow)(如:非按顺序执行指令或微操作)的指令形式。分支指令地址指分支指令本身的指令地址,该地址由指令块地址和指令偏移地址构成。分支目标指令指的是分支指令造成的分支转移所转向的目标指令,分支目标指令地址指的是分支目标指令的指令地址。
[0119] 根据本发明技术方案,每条外部指令先被转换成单数条或复数条内部指令;或复数条外部指令被转换成单数条或复数条内部指令;再由处理器核执行,从而实现与直接执行所述外部指令相同的功能。请参考图1,其为本发明所述处理器系统的一个示意图。其中,存储器103中存储了需要被执行的程序的可执行代码,且该可执行代码是由外部指令集的指令构成;每条所述外部指令先被送到转换器200转换为对应的单数条或复数条内部指令,再被送到处理器核101 执行。在本发明中转换器200可以是固定结构的,即仅支持将特定的外部指令集转换为内部指令集;也可以是可配置的,即可以根据配置,将一种或多种外部指令集转换为内部指令集。在此,可以认为所述固定结构的转换器是可配置的转换器的特例,因此在本说明书,仅对可配置的转换器进行说明。
[0120] 请参考图2,其为本发明所述转换器的一个实施例。在本实施例中,转换器 200由存储器201、对齐器203、提取阵列205、指令拼接器207和操作码拼接器209构成。其中,对齐器203将外部指令移位对齐,并在外部指令跨越指令块边界的情况下,将该外部指令移位到一个指令块并对齐。
[0121] 请参考图3A,其为本发明所述对齐器的一个实施例。在本实施例中,对齐器203由控制器301、缓冲303、305和循环移位器307构成。在此,假设一条外部指令的字长的单位为字节,且一个指令块可以容纳最长的外部指令的全部字节。因此,本实施例采用两个缓冲分别存储两个连续的指令块。这样,正被处理的一条外部指令可以完全位于缓冲303中一个指令块中;或跨越了指令块边界(即该指令的头在一个缓冲303中指令块的尾部,而剩余部分在缓冲305 中指令块头部)。选择器312、314、316、318和320按顺序由左到右各对应一个字节,在译码器327控制下对其相应字节选择缓冲303或305中内容送往循环移位器307的输入。
[0122] 控制器301中有寄存器321及加法器323,其位数为m,而2m等于存储器 303,305的字节宽度。寄存器321存储了当前被转换的外部指令的起始偏移地址(SA,Start Address)。该SA经编码器327编码后作为选择信号控制缓冲303 及305的输出选择器312、314、316、318和320,相应从缓冲303中选出偏移地址大于等于SA的字节及从缓冲305中选出偏移地址小于SA的字节,一同送往循环移位器307。经总线313被送到循环移位器307作为移位位数(Shift Amount)。
[0123] 这样,循环移位器307的输入中,偏移地址大于等于该SA的部分就是所述外部指令的头部353,而偏移地址小于该SA的部分就是所述外部指令的尾部 355,且可能在所述尾部之后还有后续外部指令的一部分内容。因此,循环移位器307根据从总线313接收到的移位位数(即SA)进行循环左移,即可将所述外部指令的头部353移至指令块的起始位置,将该外部指令的尾部355置于同一个指令块中头部右面的位置,并将该指令块从循环移位器307输出。
[0124] 该指令块中外部指令经检测后其外部指令长度会由存储器201经总线325 送出。该长度经总线325送到控制器301中的加法器323与总线313上的移位位数相加,其结果就是下一条外部指令的起始偏移地址SA存入寄存器321中。此外,若加法器323的进位输出为‘0’,表示所述下一条外部指令的起始位置位于缓冲303中,可直接按上述方法进行对齐。若加法器323的进位输出为‘1’,则表示所述下一条外部指令的起始位置位于缓冲305中。此时,在该进位输出的控制下,缓冲305中的内容被填充到缓冲303中,同时新的一个后续指令块被填充到缓冲305中,使得所述下一条外部指令的起始位置仍然位于缓冲303 中,并按上述方法进行对齐。
[0125] 请参考图3B,其为本发明所述对齐器运行过程的一个实施例。外部指令351 跨越了指令块边界。其中,头部353位于指令块357中,尾部355位于指令块 359中。根据本发明技术方案,指令块357和359分别存储在缓冲303和305中,并经选择器选择、拼接后形成如指令块361的形式作为循环移位器307的输入。此时,指令块361由三部分组成,从左到右依次是外部指令351的尾部355、外部指令351的后续指令的一部分363,以及外部指令351的头部353。
[0126] 移位器307根据所述外部指令头部353起始字节在指令块中的偏移地址313 为移位位移进行循环左移,使得外部指令351的起始地址与指令块的起始位置对齐。在本实施例中,循环移位得到的指令块365中除了外部指令351外,还有其后续指令的一部分363,该部分对后续操作没有任何影响,可以忽略。
[0127] 回到图2,经对齐器203移位对齐后的外部指令被送到提取阵列205中根据指令类型提取出各个指令域。提取阵列205由若干个结构相同的提取器构成。在此,提取器的数目大于等于外部指令集中任意指令包含的指令域的最大数目。在本发明所述处理器系统支持的所有外部指令集中,若指令最多包含n个指令域,则提取阵列205由n个提取器构成,且每个提取器均接收同样的外部指令作为输入,并根据存储器201送来的控制信号输出需要提取出的信息。
[0128] 请参考图4A,其为本发明所述提取器的一个实施例。在本实施例中,提取器由循环移位器401和掩码器403构成。其中,循环移位器401根据接收到的移位位数,将输入的外部指令字循环移位,从而将指令中的特定指令域移至相应位置。掩码器403则对移位后的指令与掩码字进行按位与(Bit AND)操作,使得提取器的输出中除了所述特定指令域之外,其他部分为全‘0’。这样,就可以将外部指令的指令域移至内部指令对应的指令域的位置。
[0129] 请参考图4B,其为本发明所述提取器运行过程的一个实施例。本实施例对外部指令451中的指令域453的移位、掩码进行说明。其中,循环移位器401 的移位位数等于指令域在内部指令和外部指令中的差值。例如,指令域453位于外部指令451的第10、11、12位(Bit),而在对应的内部指令中该指令域应位于第6、7、8位,则对应的移位位数为左移4位(即‘10’减‘6’)。这样,外部指令451经循环移位器401移位后得到如图4B中的移位后指令455的形式。
[0130] 在本实施例中,由于该指令域位于内部指令的第6、7、8位。因此,掩码字457的第6、7、8位均为‘1’,其他位均为‘0’。这样,移位后指令455在掩码器403中与掩码字457按位与后作为提取器的输出,即如图4B中的提取器输出459的形式。
[0131] 回到图2,提取阵列205中的一部分提取器用于提取外部指令的操作码域,另一部分提取器则提取外部指令的其他指令域。例如,假设外部指令集的指令中操作码域最多有三个,那么在提取阵列205中,提取器211、213和215用于提取操作码域(称为操作码提取器),剩余的提取器(如提取器221、223、225 和227)用于提取其他指令域(称为其他域提取器)。在此,提取器211、213和 215提取出的操作码分别被移位至不同位置互不重叠,并被送到操作码拼接器 209进行按位或(Bit OR)操作,从而得到完整的操作码。该完整操作码被作为寻址地址送到存储器201。
[0132] 当一个提取器被用于提取操作码域时,该提取器的控制信号(如:移位位数、掩码字等)均来源于相应的寄存器。例如,在图2中,寄存器212中的控制信号经选择器222选择后用于控制提取器211;寄存器214中的控制信号经选择器224选择后用于控制提取器213;寄存器216中的控制信号经选择器226选择后用于控制提取器215。
[0133] 当一个提取器被用于提取其他指令域时,该提取器的控制信号均来源于存储器201。存储器201由若干行映射信息构成,分为直接访问区及间接访问区。每行映射信息对应一个寻址地址。由于每个寻址地址对应一个完整的内部指令操作码,因此,一行或多行映射信息对应所述外部指令集之中的一条或多条外部指令,其中存储了相应的提取信息。所述提取信息包括该外部指令对应的内部指令的操作码、该外部指令除操作码域以外的各个指令域起始位置及宽度、所述指令域与相应的内部指令的指令域的位置关系等。
[0134] 在本发明中,可以根据外部指令的操作码直接对存储器201的直接访问区寻址,找到对应的那行映射信息。具体地,可以将操作码拼接器209输出的完整操作码本身作为对直接访问区的寻址地址,读出相应行中的映射信息。而存储器201的间接访问区则必须根据其他行映射信息中的索引值(即行地址信息) 访问。例如,当一条外部指令对应多条内部指令时,可以先以该外部指令的完整操作码作为寻址地址在直接访问区中读出所述多条内部指令中第一条内部指令对应的映射信息,从而转换出第一条内部指令。而该映射信息中包含了所述多条内部指令中第二条内部指令对应的映射信息在间接访问区中的索引值。因此,根据该索引值,即可在间接访问区中找到所述第二条内部指令对应的映射信息,从而转换出第二条内部指令。如此反复,直到转换得到所述多条内部指令中的最后一条内部指令为止。
[0135] 请参考图5A,其为本发明所述映射信息的一个示意图。图5A所示的映射信息一行即对应一条外部指令,即该外部指令对应一条内部指令。映射信息501 由内部指令操作码503、外部指令长度505、若干个提取器配置信息(如提取器配置信息507、509、511、513)和结束标志515构成。其中,内部指令操作码 503就是所述外部指令对应的内部指令的操作码。
外部指令长度505是所述外部指令本身的指令字长度,被送到对齐器203作为外部指令长度值325与当前指令起始点相加用于计算下一外部指令的起始点。结束标志515中存储了全‘0’,用以表示该行是外部指令对应的最后一行内部指令映射信息。
[0136] 映射信息501中提取器配置信息的数目与提取器的个数相同,且一一对应。每个提取器配置信息由三部分构成:移位位数(R)、掩码值中‘1’的开始位置 (B)和掩码值中‘1’的个数(W)。其中,移位位数R被送到相应提取器用于控制循环移位器401的移位;开始位置B和个数W则被用于确定掩码值中‘1’的位置,即从B开始的连续W个掩码位的值为‘1’,其余掩码位的值为‘0’。
[0137] 请参考图5B,其为本发明所述映射信息的另一个示意图。图5B所示的映射信息多行对应一种外部指令,即该外部指令对应多条内部指令。在此以一条外部指令对应三条内部指令为例,这三条内部指令相应信息对应的映射信息分别为映射信息551、561和571。其中映射信息551位于存储器201中的直接访问区可由外部指令中提取的操作码译码后直接寻址的地址区域。而映射信息561 和571位于存储器201中的间接访问区,必须根据直接访问区内映射信息(如映射信息551)中存储的索引值寻址访问。与图5A中的映射信息501类似,映射信息551也由内部指令操作码503、外部指令长度505、若干个提取器配置信息(如提取器配置信息507、509、511、513)和结束标志515构成。而映射信息561和571中也包含了内部指令操作码503、若干个提取器配置信息(如提取器配置信息507、509、511、513)和结束标志515,但可以不包含外部指令长度505。其中,三行映射信息中的内部指令操作码503分别对应了所述外部指令对应的三条内部指令的操作码。映射信息551中的外部指令长度505是所述外部指令本身的指令字长度,被送到对齐器203作为外部指令长度值325用于计算下一外部指令的起始点。在本实施例中,映射信息551和561的结束区标示并非结束而是指向下一条映射信息的地址。对于其他情况也可以此类推。映射信息551和561的指令字长度505中各存储了指向后续映射信息的索引。即,映射信息551的指令字长度505中存储了映射信息561在存储器201中的索引值,映射信息561的指令字长度505中存储了映射信息571在存储器201中的索引值。而映射信息571中作为多条内部指令对应一条外部指令的最后一条内部指令信息,其指令字长度505才给出该外部指令的指令长度。作为所述外部指令对应的最后一行映射信息,映射信息571的结束标志515中存储了全‘0’。这样,根据操作码提取器提取到的完整操作码可以找到第一行映射信息,之后在各行映射信息的结束标志515的控制下,存储器201可以正确地输出一条外部指令对应的所有内部指令的映射信息,从而正确地进行指令集转换。
[0138] 回到图2,对于对齐器203输出的任意一条外部指令,由操作码提取器提取出的完整操作码作为寻址地址可以从存储器201中读出相应的内部指令操作码 503经总线230送往指令拼接器207,及读出对应该外部指令各个指令域的提取信息并分别送到各个其他域提取器。每个其他域提取器根据所述提取信息中的域起始位置、域宽度及移位位数信息,将外部指令相应的指令域移至特定位置,并进行掩码操作,使得其他域提取器的输出除了所述移位后的指令域之外均为‘0’。
[0139] 这样,所述外部指令中除操作码域以外的所有指令域在各个其他域提取器中被移至内部指令所需的指令域后,输出到指令拼接器207进行按位或操作,并拼接在存储器201输出的内部指令操作码之后,形成符合内部指令集格式的内部指令。该内部指令被送往处理器核执行,从而实现相应的外部指令的功能。
[0140] 请参考图5C、5D和5E,其为本发明所述映射信息存储器运行的三个实施例。在这些实施例中,存储器201分为直接访问区531和间接访问区533。其中,间接访问区的地址比直接访问区高,例如外部指令操作码所形成的地址为n位,存储器201的地址为n+1位。当地址的最高位为‘0’访问直接访问区531,当地址的最高位为‘1’访问间接访问区533。
[0141] 存储器201中每行映射信息都包含了一个两位的结束标志(如图由Y位和 Z位构成),用于表示与该行映射信息对应的外部指令及内部指令之间的转换关系,即是一条外部指令对应一条内部指令,还是一条外部指令对应多条内部指令,还是多条外部指令对应一条内部指令,控制转换器以哪一种方式处理下一条指令。具体地,图5C中的标志535的值‘00’表示该行映射信息对应当前的外部指令,即一条外部指令对应一条内部指令;图5D中的标志545的值‘10’表示该行映射信息不但对应当前的外部指令,还对应其后一条外部指令,即多条外部指令对应一条内部指令;图5E中的标志555的值‘01’表示该行映射信息及该行映射信息中索引值指向的映射信息一同对应当前的外部指令,即一条外部指令对应多条内部指令。所述标志中的Y位被用于表示是否对下一条外部指令进行转换。具体地,若Y位为‘0’,表示对当前外部指令(或包含当前外部指令在内的若干连续外部指令)的转换已经完成,下一周期开始对下一外部指令的转换。若Y位为‘1’,表示当前外部指令的转换尚未完成,下一周期将继续进行相关转换,不能开始下一外部指令的转换。
[0142] 在本实施例中,所述标志被存储到寄存器537,同时该行映射信息中索引值被存储到寄存器539供下一条指令转换使用。寄存器537中存储的前一外部指令的所述标志就可以在处理当前外部指令时被用于控制选择器541(由所述标志中的A位控制)和地址拼接逻辑543(由所述标志中的B位控制)。
[0143] 图中寄存器537的Y输出控制一个二路选择器。当Y值为‘0’时,选择来自于从外部指令中操作码作为存储器201的地址,当Y值为‘1’时,选择存在寄存器539中的从存储器201中前一条指令的索引值作为当前指令转换时的存储器201地址。Z值是作为一个地址高位拼接到来自于从外部指令中操作码而形成的地址。当Z值为‘0’时,存储器201上的地址指向直接访问区,当Z值为‘1’时,存储器201上的地址指向间接访问区。图中圆圈表示总线拼接。
[0144] 在图5C实施例中,前一外部指令对应的结束值YZ为‘00’,且该内部指令可以根据相应的映射信息按之前所述方法产生,那么当前外部指令应对应至少一条新的内部指令。此时地址拼接逻辑543的一个输入是来源于操作码拼接器209的当前外部指令的完整操作码,另一个输入是寄存器537中标志的Z位 (‘0’),即在所述完整操作码之前拼接全‘0’,因此地址拼接逻辑543的输出依然是当前外部指令的完整操作码,对应直接访问区531的地址。而选择器541 受标志中的Y位(‘0’)控制,选择来源于或逻辑的输出作为存储器201的寻址地址。这样,即可从存储器201的直接访问区531中读出当前外部指令对应的映射信息,按之前所述方法对相应指令域移位及掩码,并送往指令拼接器207。又因为标志中的Y位为‘0’,因此下一周期即可开始对下一外部指令进行转换。
[0145] 请参考图5F,其为本发明所述指令拼接器的一个实施例。其中,寄存器563 中存储的是已经转换完毕得到的内部指令或尚位转换完毕得到的中间转换结果。所述标志中的Z位被存储在寄存器561中,并在下个周期送往与逻辑567,以及经反相器反相后输出作为表示寄存器563中的内部指令是否已转换完成的信号。与逻辑567的另一个输入来源于寄存器563中存储的值,其输出被送往或逻辑569。或逻辑569的另一个输入是来源于总线559的从各个提取器送来的移位掩码得到的结果。寄存器563的输出就是指令拼接器207的输出667。
[0146] 对于图5C实施例所述情况,由于标志的Z位为‘0’,因此在下一周期,与逻辑567的输出为‘0’,则或逻辑569的输出就是各个提取器移位掩码得到的结果。这些结果在寄存器563中拼接成一条完整的内部指令。此时反相器565 输出的值为‘1’(即上述Z位的反相值),表示转换完毕,且寄存器563中存储的内容就是转换得到的内部指令。这样,就完成了一条外部指令向一条内部指令的转换,并在下一周期输出,同时转换器开始读下一条外部指令的转换。
[0147] 在图5D实施例中,前一外部指令对应的标志值为‘10’,表示该外部指令对应多条内部指令,且上一次映射信息对应的内部指令尚不足以完成该转换,那么在完成对前一外部指令的转换之前,不能对当前外部指令进行转换。此时,寄存器539中存储的就是所述上一次映射信息中包含的索引值,即所述上一次映射信息的后一个映射信息(这两个映射信息均对应所述前一外部指令)在间接访问区533中的寻址地址。选择器541则受标志中的Y位(‘1’)控制,选择寄存器539输出的所述索引值。由于该索引值对应的存储器201地址空间位于间接访问区533,因此可从间接访问区533中读出所述前一外部指令对应的映射信息,按之前所述方法对相应指令域移位及掩码,并送往指令拼接器207。由于标志中的Y位为‘1’,因此下一周期继续对当前外部指令转换,不能开始下一外部指令的转换。
[0148] 此时,在指令拼接器207中,标志的Z位为‘0’,因此在下一周期,与逻辑567的输出为‘0’,则或逻辑569的输出就是各个提取器移位掩码得到的结果。这些结果在寄存器563中拼接成一条完整的内部指令。此时反相器565输出的值为‘1’(即上述Z位的反相值),表示转换完毕,且寄存器563中存储的内容就是转换得到的内部指令。这样,在一条外部指令向对应多条内部指令转换过程中,生成了所述多条内部指令中的一条,并在下一周期输出。同时,从下一周期开始,重复上述过程,直到对应的映射信息中的标志的Y位为‘0’,表示该映射信息对应的内部指令是所述多条内部指令中的最后一条,并在下一周期输出该内部指令,完成了一条外部指令向多条内部指令的转换,同时转换器开始读下一条外部指令的转换。
[0149] 在图5E实施例中,前一外部指令对应的标志值为‘01’,表示该外部指令及其后一条外部指令(即当前外部指令)对应同一条内部指令,那么应该继续对当前外部指令进行转换,直至产生所述多条外部指令对应的同一条内部指令。此时,地址拼接逻辑543的一个输入是来源于操作码拼接器209的当前外部指令的完整操作码,另一个输入是寄存器537中标志的Z位(‘1’),即在所述完整操作码之前拼接一个额外地址,使得地址拼接逻辑543的输出是对应间接访问区533的地址。而选择器541受标志中的Y位(‘0’)控制,选择来源于或逻辑的输出作为存储器201的寻址地址。这样,即可从存储器201的间接访问区 533中读出相应的映射信息,即根据所述前一外部指令及当前外部指令共同对应的映射信息。之后,按之前所述方法对相应指令域移位及掩码,并送往指令拼接器207。
[0150] 此时,在指令拼接器207中,标志的Z位为‘1’,因此在下一周期,与逻辑567的输出是存储在寄存器563中的值(即转换的中间结果),则或逻辑569 的输出就是当前各个提取器移位掩码得到的结果与所述中间结果的经组合(如按位或操作)得到的结果。这些结果在寄存器563中进一步被拼接成新的中间结果。此时反相器565输出的值为‘0’(即上述Z位的反相值),表示转换仍未完毕。又由于标志中的Y位为‘0’,转换器开始对下一外部指令开始转换,则重复上述过程,连续多条外部指令相应指令域的移位掩码结果经或逻辑569被组合到一起,将多条外部指令转换为一条内部指令,直到所述Z位为‘0’,表示当前外部指令是所述内部指令对应的多条外部指令中的最后一条。此时,反相器565输出的值为‘1’(即上述Z位的反相值),表示转换完毕,且寄存器563 中存储的内容就是转换得到的内部指令。这样,完成了多条外部指令向一条内部指令的转换,
[0151] 需要说明的是,在本发明中,存储器201可以由可重复擦写的随机存储器 (RAM)构成,根据所需支持的不同外部指令集向该随机存储器写入不同的映射信息;也可以由只读存储器(ROM)构成,即固定支持一种或多种外部指令集;还可以由能够实现同样功能的逻辑电路构成,固定支持一种或多种外部指令集。可以将缓冲器的一部分指定作为存储器201使用而不做缓存使用。
[0152] 此外,如果外部指令是定长的,且规定提取器的长度等于指令字的长度,则转换器200中可以省去对齐器203。根据本发明技术方案,转换器200可以根据配置支持不同的外部指令集。那么当其中一种外部指令集的指令长度与提取器的长度相同时,可以由选择器204直接选择外部指令送往各个提取器;否则选择器204选择对齐器203的输出送往各个提取器。其他操作与之前实施例所述相同,在此不再赘述。
[0153] 根据本发明技术方案,可以在处理器系统不同层次的缓存中存储不同的指令集的指令,以提高处理器系统的性能。例如,可以在处理器系统的二级缓存中存储外部指令,在一级缓存中存储内部指令,并在所述外部指令被填充到一级缓存的过程中进行指令集转换。请参考图6,其为本发明所述包含多层缓存的处理器系统的一个实施例。
[0154] 在图6中,处理器系统由处理器核601、主动表604、扫描转换器608、轨道表610、替换模块611、循迹器614、块地址映射模块620、偏移地址映射模块618、偏移地址转换器622、减法器928、一级缓存602,二级缓存606和选择器640、660、680、638、692、694及696构成。图6中的空心圆圈表示总线的拼接。图6中没有显示的还有一个控制器,该控制器接收从块地址映射模块 620、扫描转换器608、主动表604、轨道表610及替换模块611的输出控制各功能模块的操作。
[0155] 在本发明中,二级缓存606中存储的是外部指令,而一级缓存602中存储的是相应的内部指令。可以用第一地址和第二地址来表示指令在一级缓存或二级缓存中的位置信息。在此,第一地址和第二地址可以是一级缓存的寻址地址,也可以是二级缓存的寻址地址。
[0156] 当一条内部指令已经被存储在一级缓存602中时,可以用BN1X表示该内部指令所在指令块的一级块号(即指向一级缓存中相应的一个一级指令块),并用BN1Y表示该内部指令的一级块内偏移量(即该内部指令在一级指令块中的相对位置)。当一条外部指令已经被存储在二级缓存606中时,可以用BN2X表示该外部指令所在指令块的二级块号(即指向二级缓存中相应的一个二级指令块),并用BN2Y表示该外部指令的二级块内偏移量(即该外部指令在二级指令块中的相对位置)。为了便于说明,可以用BN1代表BN1X和BN1Y,用BN2 代表BN2X和BN2Y。由于本发明中凡在一级缓存中的内部指令对应的外部指令在二级缓存中均有存储,因此对于一级缓存中存储的内部指令,可以用BN1 或BN2表示。
[0157] 主动表604中的表项与二级缓存606中的存储块一一对应。主动表604中的每个表项存储了一个二级指令块地址与一个二级块号BN2X的匹配对,指明了该指令块地址对应的二级指令块存储在二级缓存606中的哪个存储块中。在本发明中,可以根据一个二级指令块地址在主动表604中进行匹配,并在匹配成功的情况下得到一个BN2X;也可以根据一个BN2X对主动表604寻址,以读出对应的二级指令块地址。
[0158] 当外部指令从二级缓存608向一级缓存602填充时,扫描转换器608计算外部指令中分支指令的分支目标地址,外部指令且由608中的指令转换器200 转换成内部指令。计算得到的分支目标地址被送至主动表604与其中存储的指令块地址匹配确定该分支目标是否已经存储在二级缓存606中。如果匹配不成功,则分支目标指令所在的指令块尚未被填充到二级缓存606中,那么在将该指令块更低层存储器填充到二级缓存606中的同时,在主动表604中建立相应的二级指令块地址与二级块号的匹配对。
[0159] 扫描转换器608对从二级缓存606向一级缓存602填充的指令块(外部指令)进行转换和审查,并提取出对应内部指令的轨迹点信息填充到轨道表610 的相应表项中,从而建立该二级指令块对应的至少一个一级指令块的轨道。具体地,在建立轨道时,首先由替换模块611产生一个BN1X指向一条可用轨道。在本发明中,替换模块611可以根据替换算法(如LRU算法)确定可用轨道。
[0160] 具体地,扫描转换器608对从二级缓存606填充到一级缓存602的每一条外部指令进行审查,并提取出某些信息,如:指令类型、指令源地址和分支指令的分支增量,并基于这些信息计算出分支目标地址。对于直接分支指令,可以通过对该指令所在指令块的块地址、该指令在指令块中的偏移量和分支增量 (Branch Offset)三者相加得到分支目标地址。所述指令块地址可以是从主动表 604中读出并被直接送往扫描转换器608中加法器的。也可以在扫描转换器608 中增加用于存储当前指令块地址的寄存器,这样主动表604就不需要实时地送出指令块地址。在本实施例中,直接分支指令的分支目标地址由扫描转换器608 产生,而间接分支指令的分支目标地址由处理器核601产生,且这两者对应的都是外部指令地址。此外,扫描转换器608还将所述每一条外部指令转换为对应的一条或多条内部指令,且在转换过程中不改变分支指令的分支增量,即外部分支指令中的分支增量与其对应的内部分支指令中的分支增量相等,保证处理器核601产生的间接分支指令的分支目标地址的正确性。
[0161] 块地址映射模块620中对应每个二级缓存块的每一行有复数个表项,每个表项中存储与此二级缓存块中一部分(称为二级缓存块的子块)对应的一级缓存块的一级块号(BN1X)以及该二级缓存子块在二级缓存块内的起始偏移量 (BN2Y)。其中各表项中的BN2Y由左向右递增排列。当一个新的表项被加入块地址映射模块620中的一行时,其BN2Y会由比较器924与该行上现有其他表项的BN2Y值比较,并由移位器926将BN2Y值大于新表项的BN2Y值的表项右移,空出位置供新表项存放。
[0162] 块地址映射模块620中的行与主动表604中的行及二级缓存606中的存储块一一对应,并由同一个BN2X指向。块地址映射模块620用于存储对应二级块号与一级块号的对应关系,如图6所示,其表项格式680包括一级块号BN1X 和二级块内偏移量。这样,对于一个BN2,可以根据其中的BN2X找到块地址映射模块620中的一行,再用其中的BN2Y在该行各个表项中存储的有效的BN2Y进行比较,即可读出相应比较成功的表项中的BN1X(即该BN2Y对应的外部指令的相应内部指令对应的BN1X),从而将BN2X转换为相应的BN1X,或得到比较不成功的结果(即该BN2Y对应的外部指令的相应内部指令尚未存储在一级缓存602中)。
[0163] 本实施例中,轨道表610的格式为686或688。686由三部分构成:格式 (TYPE),二级块号(BN2X)及二级块内偏移(BN2Y)。其中格式中含指令类型地址,包括非分支指令,无条件直接分支指令,有条件直接分支指令,无条件间接分支指令,有条件间接分支指令。在此,有条件直接分支指令、无条件直接分支指令、有条件间接分支指令和无条件间接分支指令可以统称为分支指令,其对应的轨迹点为分支点。格式中还包含地址类型,其在686格式中是二级缓存地址BN2。688的格式也由三部分构成:格式(TYPE),一级块号(BN1X) 及一级块内偏移(BN1Y)。688格式中指令类型与686的相同,但是地址类型在 688中固定为一级缓存地址BN1。本实施例中,块地址映射模块620中的存储器 920的格式如684所示,其为一级缓存块地址BN1X与二级缓存块内偏移地址 BN2Y的组合。
[0164] 轨道表610含有复数个轨迹点(track point)。一个轨迹点是轨道表中的一个表项,可含有至少一条指令的信息,比如指令类别信息、分支目标地址等。在本发明中轨迹点本身的轨迹点地址与该轨迹点所代表指令的指令地址相关 (correspond);而分支指令轨迹点中含有分支目标的轨迹点地址,且该轨迹点地址与分支目标指令地址相关。与一级缓存602中一系列连续内部指令所构成的一个一级指令块相对应的复数个连续的轨迹点称为一条轨道。该一级指令块与相应的轨道由同一个一级块号BN1X指示。轨道表含有至少一条轨道。一条轨道中的总的轨迹点数可以等于轨道表610中一行中的表项总数。这样,轨道表就成为一个以轨道表项地址对应分支源地址、表项内容对应分支目标地址来代表一条分支指令的表。此外,在轨道表610的每一行中还可以额外增加一个二级块号表项,用于记录该行第一个轨迹点对应的外部指令的BN2。这样,就可以在某个一级指令块被替换时,将以该行为分支目标的其他轨道表行中的该 BN1转换为相应的BN2,使该行可以被其他指令行写入而不致引起错误。
[0165] 轨道表610中记录了程序运行的可能路径或程序执行流的可能流向,因此循迹器614可以根据轨道表610中的程序流和处理器核601的反馈沿程序流循迹。因为在一级缓存器602中存有与轨道表表项相应的内部指令,一级缓存器 602以循迹器614的输出总线631为读地址,跟随循迹器614所遵循的程序流而通过总线695送出指令供处理器核601执行。轨道表610中某些分支目标是用二级缓存器地址BN2记录的,其目的是仅将需用的外部指令转换成内部指令存到一级缓存器,使得一级缓存器可以有较二级缓存器更小的容量和更快的速度。当循迹器614读出的表项中分支以BN2记录时,此时要将该BN2送往块地址映射模块
620等模块匹配或扫描转换模块608转换获得BN1地址,将指令填充到一级缓存602中BN1地址,也将该BN1地址填回轨道表中该表项中,循迹器 614沿该BN1并根据处理器核601反馈的指令执行结果(如:分支指令的执行结果),控制一级缓存602向处理器核601输出指令供执行。
[0166] 在本发明中,可以用所述第一地址和第二地址来表示轨迹点在轨道表中的位置信息。而直接分支点的指令类型中则还可以包含分支目标寻址地址是以 BN1表示(即分支目标为BN1的直接分支指令)还是以BN2表示(即分支目标为BN2的直接分支指令)的信息。当一个分支点中存储的是BN1时,说明该分支点的分支目标内部指令所在的内部指令块已经被存储在一级缓存602中由该 BN1X指向的存储块中,且根据该BN1Y可以从中找到所述分支目标内部指令。当一个分支点中存储的是BN2时,说明该分支点的分支目标外部指令所在的外部指令块已经被存储在二级缓存606中由该BN2X指向的存储块中,且根据该 BN2Y可以从中找到所述分支目标外部指令,但无法直接确定该分支目标外部指令对应的内部指令是否已经存储在一级缓存602中。
[0167] 偏移地址映射模块618中的行与轨道表610中的行及一级缓存602中的存储块一一对应,并由同一个BN1X指向。偏移地址映射模块618用于存储二级缓存606中的外部指令偏移地址与一级缓存602中的内部指令偏移地址之间的对应关系。偏移地址转换器622则可以根据偏移地址映射模块618送来的由 BN1X指向的映射关系(即BN2Y和BN1Y的映射关系),将接收到的BN2Y转换为相应的BN1Y,或将接收到的BN1Y转换为相应的BN2Y。
[0168] 因此,当需要将BN2转换为BN1时,首先根据BN2X和BN2Y,在块地址映射模块620中转换得到BN1X,再根据偏移地址映射模块618中由该BN1X 指向的行中的映射关系,将BN2Y转换为BN1Y,从而完成BN2向BN1的转换。
[0169] 当需要将BN1转换为BN2时,首先从轨道表610中由BN1X指向的行中的所述额外表项中读出相应的BN2,其中BN2X就是所述BN1X指向的内部指令块对应的外部指令块号,BN2Y就是所述BN1X指向的内部指令块对应的外部指令在其所在外部指令块中的起始位置。根据偏移地址映射模块618中由该 BN1X指向的行中的映射关系及所述起始位置,即可将BN1Y转换为BN2Y,从而完成BN1向BN2的转换。
[0170] 在图6中,主要的总线有三类:外部指令地址总线、BN1总线和BN2总线。其中,外部指令地址总线主要有总线657、683和675;BN1总线主要有总线631 和693;BN2总线主要有总线633和687。此外,还有其他一些总线,如BN2X 总线639、BN2Y总线637,以及映射关系总线691。
[0171] 具体地,总线675上的内容是主动表604中由BN2X指向的行中存储的外部指令块地址(即二级缓存块地址)。该地址被送回扫描转换器608以计算直接分支指令的分支目标地址。
[0172] 总线657上的内容是扫描转换器608在审查发现分支指令时输出的直接分支指令的分支目标指令地址,总线683上的内容是处理器核601在执行间接分支指令时输出的分支目标指令地址。总线657和683的格式均与外部指令地址格式相同。其中,块地址部分(高位部分)被选择器680选择后经总线681送往主动表604与其中储存的外部指令块地址匹配以获得一个二级块号BN2X并经总线671从二级缓存器606中读取外部指令。总线671的格式为BN2X,与总线657上外部指令地址偏移部分(低位部分)的BN2Y拼接成一个完整的BN2 地址送往轨道表611存储。总线671上BN2X也被送到选择器640。选择器640 选择总线671及轨道表610输出经总线633而来的BN2X中的一个作为BN2X 放上总线639,用以读取块地址映射模块620中的一行数据进行BN2到BN1的映射。
[0173] 总线637是三输入选择器638的输出,三输入选择器638选择总线633、657 或683上的BN2Y送到块地址映射模块620,在由总线639上的BN2X指向的行中匹配出相应的BN1X
[0174] 总线633是轨道表610的输出,其格式可以是BN1或BN2。当其格式为BN2时被送到块地址映射模块620及偏移地址映射模块618中将BN2X映射为 BN1X。其映射还需要将该BN2中的BN2Y经总线637送往减法器928与块地址映射模块620输出的相应的二级子存储块的起始地址相减以获得正确的净块内偏移地址供偏移地址转换器622使用,将BN2Y转换为BN1Y。所述BN1X 和BN1Y合并为BN1被写回轨道表610。总线633上的BN2X还可以被送到主动表604读出对应的外部指令块地址经总线657送往扫描转换器608,与总线 633直接送往扫描转换器608的BN2Y一同构成外部指令地址。此外,总线633 上的BN2X还可以经总线673送往二级缓存606读出对应的外部指令块。
[0175] 总线631是循迹器614的输出,其格式为BN1。该输出被送到一级缓存602 作为地址以读取指令供处理器核601使用。
[0176] 总线693是替换模块611的输出,格式为BN1X,其意义为向扫描转换器 608提供下一个可用的一级块号BN1X(或轨道号),供扫描转换器608填充转换所得的内部指令。总线693上的BN1X也与来自总线657的BN2Y共同放上总线665(及构成块地址映射模块620中表项内容)送往选择器940以供按地址顺序存放于块地址映射模块620。因此,665总线上的格式为BN1X和BN2Y。总线693控制一级缓存602的写入块地址与来自扫描转换模块608输出的BN1Y 总线669作为写入块内偏移地址,控制将扫描转换器608转换得到的内部指令经总线
667填充到一级缓存602。同时,总线693与总线669还共同寻址将与内部指令相应的格式(由扫描转换模块608经总线687送出)、分支目标(由总线 671上的BN2X与总线657上的BN2Y拼接到总线687)经总线687同步写入轨道表610。
[0177] 总线687将其上的指令类型、BN2Y与来自总线671的BN2X拼接成一个完整的轨迹点内容送往轨道表610存储。
[0178] 总线954是块地址映射模块620的输出,其中的BN1X用于从偏移地址映射模块618中读取相应的偏移地址映射信息送往偏移地址转换器622;其中的 BN2Y输出送往减法器928与总线633上送来的BN2Y值相减,其结果被送往偏移地址转换器622。偏移地址转换器
622根据输入将总线954上的BN2Y映射成BN1Y地址。来自总线954的BN1X地址与偏移地址转换器622输出的BN1Y 地址被拼接成完整BN1,经总线685送往三输入选择器692的一个输入端。
[0179] 选择器692选择总线685上的BN1、总线687上的BN2或总线693上的 BN1(其中总线693送来的BN1X被加上为‘0’的BN1Y拼接成完整的BN1) 送往轨道表610作为写入的轨迹点内容。
[0180] 请参考图7A,其为本发明所述基于轨道表的缓存结构的实施例。为了便于说明,在图7A中只显示了部分器件或部件。如之前实施例所述,轨道表610的行与一级缓存602的存储块一一对应,且轨道表行(即轨道)中的表项(即轨迹点)数目比一级存储块中的指令数目多一个。其中,轨道的最后一个轨迹点中存储了指向顺序执行的下一轨道的位置,其余表项与一级存储块中的指令一一对应,并存储了程序执行流信息(如指令类型、分支目标地址等),且轨道中从左向右的每个轨迹点对应的地址递增。
[0181] 轨道表610的读端口在循迹器614输出的读指针631的寻址下,输出相应轨迹点内容并放上总线633,而控制器则检测所述总线633上的内容。
[0182] 如果该内容中的指令类型是非分支指令,选择器738选择增量器736的输出使得循迹器向右移动达到下一个地址(即更大的地址)。
[0183] 如果该内容中的指令类型是无条件分支,则选择器738选择总线633上的分支目标地址,使得读指针631转到由总线633上分支目标地址对应的轨迹点位置。
[0184] 如果该内容中的指令类型是有条件分支,则循迹器614暂停更新并等待,直到处理器核601产生分支转移是否发生的TAKEN信号635。如果分支转移没有发生,则如之前非分支指令的做法运行,如果分支转移发生,则如之前无条件分支指令的做法运行。
[0185] 轨道表610写端口对应的写入地址有两个来源,分别是选择器694(BN1X) 和696(BN1Y)。当建立轨道时,替换模块611输出行地址BN1X,而扫描转换器608输出列地址BN1Y。当循迹器614读出的轨迹点内容中存储的是BN2时,该BN2被送往块地址映射模块620或扫描转换器608等产生/生成BN1,该BN1 需要被写回该轨迹点中(即读出、修改及写回,read modify write);当循迹器614 读出的轨迹点内容中的指令类型是间接分支指令时,将处理器核601产生的间接分支目标地址送往主动表604、块地址映射模块620等产生/生成BN1,该BN1 也需要被写回该轨迹点中。在这两种情况下,轨道表610的写入地址均是当时的读出地址。
[0186] 轨道表610写端口本身有三个来源:总线685、687和693,经选择器692 选择后作为写入内容。其中总线685上的值是块地址映射模块620和偏移地址转换器622输出的BN1,总线687上的值是二级缓存地址形式(BN2)的分支目标地址,而总线693上的值是将被写入轨道最后一个表项中的指向顺序执行下一轨道的BN1。
[0187] 在本实施例中,在外部指令被转换为内部指令的同时,扫描转换器608审查、提取出相应信息。本实施例中,轨道表内容共有三部分:若该内部指令是非分支指令或间接分支指令,则选择器694选择由替换模块611产生的该内部指令对应的BN1X 693作为轨道表610写地址中的第一地址,选择器696选择扫描转换器608输出的该分支内部指令在其所在指令块中的块内偏移量669作为轨道表610写地址中的第二地址,将该指令类型(即非分支指令或间接分支指令)作为写入内容写入轨道表610中,完成该轨迹点的建立。
[0188] 若该内部指令是直接分支指令,则扫描转换器608计算分支目标地址。所述分支目标地址中的块地址经总线657被送到主动表604匹配。若匹配成功,得到匹配成功项对应的BN2X经总线671、639送往块地址映射模块620,并将所述分支目标地址中的块内偏移量(即BN2Y)经总线657、637送往块地址映射模块620。在块地址映射模块620中由所述BN2X指向的行中查找对应的 BN1X。若存在有效的BN1X,则从偏移地址映射模块618中读出该BN1X指向的行中的映射关系并送往偏移地址转换器622将所述BN2Y转换为BN1Y。选择器694选择由替换模块611产生的该内部指令对应的BN1X 693作为轨道表 610写地址中的第一地址,选择器696选择扫描转换器608输出的该分支内部指令在其所在指令块中的块内偏移量669作为轨道表610写地址中的第二地址,而所述BN1X和BN1Y被合并为BN1放上总线693并经选择器692选择后与所述提取出的指令类型一同作为轨迹点内容写入轨道表610中,完成该轨迹点的建立。此时该轨迹点中包含的是BN1。
[0189] 若在块地址映射模块620不存在该BN2X及BN2Y对应的有效BN1X,则选择器694选择由替换模块611产生的该内部指令对应的BN1X 693作为轨道表 610写地址中的第一地址,选择器696选择扫描转换器608输出的该分支内部指令在其所在指令块中的块内偏移量669作为轨道表610写地址中的第二地址,将总线671上的该BN2X和扫描转换器608输出的该BN2Y拼接成BN2放上总线687并经选择器692选择后与所述提取出的指令类型一同作为轨迹点内容写入轨道表610中,完成该轨迹点的建立。此时该轨迹点中包含的是BN2。
[0190] 若所述分支目标地址中的块地址在主动表604中不成功,表示该分支目标地址对应的外部指令尚未存储在二级缓存606中,则根据替换算法(如LRU算法)分配一个二级存储块的块号BN2X,并将该分支目标地址送往更低层次的存储器取回相应指令块存储到二级缓存606由所述BN2X指向的存储块中。选择器694选择由替换模块611产生的该内部指令对应的BN1X 693作为轨道表610 写地址中的第一地址,选择器696选择扫描转换器608输出的该分支内部指令在其所在指令块中的块内偏移量669作为轨道表610写地址中的第二地址,直接将该BN2X及所述分支目标地址中的块内偏移地址(及BN2Y)合并为BN2 放上总线687并经选择器692选择后与所述提取出的指令类型一同作为轨迹点内容写入轨道表610中,完成该轨迹点的建立。此时该轨迹点中包含的是BN2。
[0191] 在上述过程中,轨道表610的写地址中的第一地址(BNX)还经总线745 指向偏移地址映射模块618中的相应行,使得每个内部指令块与相应的外部指令的映射关系被存储到所述行中。此外,若被转换填充的外部指令对应的内部指令多于一个一级存储块可以容纳的数目时,超出部分依次填充到由替换模块 611新产生的BN1X指向的一级存储块并建立相应轨道。重复上述过程,即可实现从二级缓存向一级缓存转换、填充指令并建立相应的轨道。
[0192] 循迹器614则由寄存器740、增量器736和选择器738组成,其读指针631 (即寄存器740的输出)指向轨道表110中处理器核601即将执行的指令(即当前指令)对应的轨迹点,并读出轨迹点内容经总线633送往选择器738。同时,读指针631对一级缓存602寻址,读出该当前指令并送往处理器核601供执行。
[0193] 若所述轨迹点内容中的指令类型显示该指令为非分支指令,则选择器738 选择来源于增量器736的对寄存器740的值增一的结果作为输出送回寄存器 740,使得下一周期寄存器740的值增一,即读指针631指向下一个轨迹点并从一级缓存602中读出对应内部指令供处理器核601执行。
[0194] 若所述轨迹点内容中的指令类型显示该指令为分支目标为BN1的无条件直接分支指令,则选择器738选择该BN1作为输出送回寄存器740,使得下一周期寄存器740的值被更新为该BN1,即读指针631指向分支目标内部指令对应的轨迹点并从一级缓存602中读出该分支目标内部指令供处理器核601执行。
[0195] 若所述轨迹点内容中的指令类型显示该指令为分支目标为BN1的有条件直接分支指令,则选择器738根据处理器核执行该分支指令时产生的表示分支转移是否发生的TAKEN信号635进行选择,同时暂停寄存器740的更新直至处理器核601送来有效的TAKEN信号635。此时,若TAKEN信号635的值为‘1’,表示分支转移发生,选择轨道表输出的BN1作为送回寄存器740,使得下一周期寄存器740的值被更新为该BN1,即读指针631指向分支目标内部指令对应的轨迹点并从一级缓存602中读出该分支目标内部指令供处理器核601执行。若TAKEN信号635的值为‘0’,表示分支转移没有发生,则选择增量器736 的对寄存器740的值增一的结果作为输出送回寄存器740,使得下一周期寄存器 740的值增一,即读指针631指向下一个轨迹点并从一级缓存602中读出对应内部指令经总线695供处理器核601执行。
[0196] 若所述轨迹点内容中的指令类型显示该指令为分支目标为BN2的直接分支指令(包括有条件、无条件两种情况),则该BN2被送往块地址映射模块620。在块地址映射模块
620中,若存在该BN2对应的有效BN1X,则输出该BN1X,且由偏移地址转换器622将该BN2中的BN2Y转换为对应的BN1Y,并将所述 BN1X和BN1Y合并为BN1放上总线685。此时,选择器694选择读指针631 值(即分支指令本身对应的分支点BN1)中的BN1X作为写地址中的第一地址,选择器696选择读指针631值中的BN1Y作为写地址中的第二地址,选择器692 选择总线685上的BN1作为写入内容回该分支点中。若不存在该BN2对应的有效BN1X,则由替换模块611产生一个BN1X,在轨道表610(及一级缓存602) 中指定一条可用轨道(及对应的一个存储块)。
同时,将二级缓存606中从所述 BN2对应的外部指令开始直至其所在二级指令块结束的所有外部指令经扫描转换器608转换及审查,提取出对应内部指令的轨迹点信息填充到轨道表610中由所述BN1X指向的行,并将产生的BN1X和BN2X之间的映射关系存储到偏移地址映射模块618中,以及将转换得到的内部指令填充到一级缓存602中由所述BN1X指向的存储块中。需要说明的是,由于从分支目标外部指令开始转换、填充,因此该分支目标外部指令对应的内部指令在其所在一级存储块中必定是第一条指令,即BN1Y的值为‘0’。这样,所述分支点的分支目标指令就被存储在一级缓存602中,且所述BN2中的BN2X被转换为分支目标内部指令对应的BN1X(由替换模块611产生),与BN1Y(值为‘0’)一同合并为BN1 放上总线693。
此时,选择器694、696选择读指针631的值(即分支指令本身对应的分支点)作为写地址,选择器692选择总线693上的BN1作为写入内容写回该分支点中。如此,轨道表610输出的轨迹点内容包含的是BN1。之后的操作与上述分支目标为BN1的直接分支指令中的情况相同,在此不再赘述。
[0197] 若所述轨迹点内容中的指令类型显示该指令为间接分支指令(包括有条件、无条件两种情况),则将处理器核601对该分支指令执行时产生的分支目标地址中的块地址送往主动表604匹配。若匹配成功,则可以得到匹配成功项对应的 BN2X,并以分支目标地址中的块内偏移量作为BN2Y,并以该BN2X和BN2Y 值送往块地址映射模块620匹配,如命中获得相应的BN1值,则之后的操作与上述分支目标为BN1的直接分支指令中的情况相同;若不命中,则之后的操作与上述分支目标为BN2的直接分支指令中的情况相同,在此不再赘述。若匹配不成功,表示该分支目标地址对应的外部指令尚未存储在二级缓存606中,则根据替换算法(如LRU算法)由主动表604分配一个二级存储块的块号BN2X,并将该分支目标地址送往更低层次的存储器取回相应指令块存储到二级缓存 606由所述BN2X指向的存储块中。再按之前所述方法,将该外部指令块转换后填充到一级缓存602中并建立相应轨道、记录映射关系,以及将所述BN2被转换为BN1填回该分支点中(在此过程中产生的BN2并不会被填充到轨道表610 中,而直接将对应的BN1填充到轨道表610中),使得轨道表610输出的轨迹点内容包含的是BN1。之后的操作与上述分支目标为BN1的直接分支指令中的情况相同,在此不再赘述。
[0198] 若下一次循迹器重新读出含该间接分支目标的表项时,该表项的指令类型是间接分支指令,但是地址类型是BN1,控制器据此认定该间接分支指令此前已访问过,可以用该BN1地址猜测执行,但是经过BN1地址反求出相应的外部指令地址(如:通过该BN1X对应的轨道中存储的BN2X对主动表604寻址读出外部指令块地址,并通过618转换得到外部指令块内地址,从而得到完整的外部指令地址),待处理器核601执行该间接分支指令产生分支目标地址时将该分支目标地址与反求出的外部指令地址比较。如果相同,则继续执行。如果不相同,则清空分支点后的指令,不保存其结果,从处理器核601提供的分支目标地址开始执行并将该地址如前例映射成BN1后存入该分支点。
[0199] 回到图6,扫描转换器608负责将外部指令转换成内部指令填充到一级缓存。过程中扫描转换器608也计算外部指令的分支目标地址,提取指令的类型并将目标地址与类型信息填充到与一级缓存内部指令填充的相应轨道表表项。请参考图7B,其为本发明所述扫描转换器的一个实施例。
[0200] 在本实施例中,扫描转换器608接受来自两个来源的输入。第一个来源是当轨道表610经总线633送出一个直接分支外部指令地址BN2,此BN2在块地址映射模块620中匹配未命中,此时所需的外部指令块已经存储在二级缓存606 中,主动表604中也有相应的外部指令(PC)高位地址,但尚未被转换成内部指令存储在一级缓存602中。总线633上的BN2X地址被送往主动表604中读出相应的PC高位,经总线675送往扫描转换器608,总线633上的块内偏移量 BN2Y也被送到扫描转换器608中。此时,选择器660也选择将总线633上的 BN2X放上总线673向二级缓存606提供块地址。
[0201] 第二个来源是当轨道表610经总线633送出一个间接分支外部指令类型且其地址格式为外部指令地址格式,表示该间接分支指令的目标需由处理器核601 计算。此时,控制器将处理器核601执行相应间接条件分支指令时得到的外部分支目标地址经总线683、选择器680、总线681送往主动表604匹配。如果不匹配,表示分支目标的外部指令块尚不在二级缓存606中,此时主动表将总线 681上外部指令地址送往低层存储器读取相应指令块并填充到二级缓存606中由主动表604分配,经选择器660、总线673指向的二级缓存606中的二级缓存块。同时,该外部指令的高位被存入主动表中的对应标签域。如果匹配,主动表604 经选择器660和总线673指向与匹配标签相应的二级缓存606中的二级缓存块。同时,总线683上的PC地址被送进扫描转换器608。
[0202] 请参照图7B的扫描转换器608内部结构。扫描转换器608中包含转换器 200,直接分支目标地址计算器792,块内偏移映射生成器796,控制器790与输入选择器798,799。其中,控制器790接受各模块来的状态信号并控制各模块协同工作。
[0203] 选择器798选择来自总线675或总线683的PC高位地址存入寄存器788。选择器799选择来自总线633或683的PC低位地址(BN2Y)存入寄存器321。其中,来自总线675及总线633的地址用于将轨道表中的BN2转换成BN1地址,过程中将相应的外部指令翻译成内部指令并存储到一级缓存602。而来自总线683的地址是用于将间接分支目标相应的外部指令翻译成内部指令并存储到一级缓存器并将该一级缓存器块号BN1X连同块内偏移量BN1Y存储到轨道表610 中间接分支指令相应的表项。不管来自哪个来源,选择器798、799选择之后,其操作是相同的。以下以BN2转换成BN1地址为例。
[0204] 二级缓存606的地址为BN2,此例中其格式为‘8XYY’。其中‘8X’为块地址BN2X,其值为‘80’~‘82’。二级缓存606中每个二级缓存块(图中一行) 有32个字节,其块内偏移量BN2Y为其块内字节(byte)地址‘YY’,其值为‘0’~‘31’,字节中储存变长的外部指令。一级缓存602地址为BN1,其格式为‘7XY’,其中‘7X’为块地址BN1X,其值为‘70’~‘75’。一级缓存602 中的每个一级指令块(图中一行)有4条定长内部指令,其块内偏移量BNY1 为其块内字(word)地址‘Y’,为易于理解及与BN2Y区分,其值在此实施例中以字母为A~D标注;在此实施例中一条内部指令的长是一个字(word),内部指令也可以有其他的长度。轨道表610中每行有A~E五个表项,其中A~D四个表项对应于一级缓存602中A~D四条内部指令,表项E用于存放该行顺序下一个一级缓存块的地址。
[0205] 直接分支目标地址计算器792中有三输入加法器760用以计算直接分支目标地址。直接分支目标地址计算器792中还有一个边界比较器772,其输入与总线679相连。边界比较器772中存储了一个二级缓存块中的最大地址(此实施例中为‘31’),总线679上的BN2Y值越过二级缓存块的边界时(大于‘31’),边界比较器772会产生一个二级缓存地址越界信号通知控制器790。直接分支目标地址计算器792还有一个选择器774,控制器790可以控制该选择器选择转换器200输出的分支偏移量或者全‘0’,送往加法器760。选择全‘0’时,计算顺序下一外部指令块地址。
[0206] 请参照图6,设循迹器614指向轨道表中某表项并从该表项中读出其类型为直接分支指令,其分支目标为BN2地址‘8024’,其意义为二级缓存606中第‘80’号二级缓存块中块内偏移量为‘24’的外部指令。该BN2地址经总线633送往块地址映射模块620匹配。其BN2X值经选择器640选择后经总线639选择块地址映射模块620中块地址存储模块920存储的‘80’行表项内容中的BN2Y,与总线633上经选择器638选择后经总线637送进的BN2Y比较。比较结果为不命中,即该分支指令是存储于二级缓存器的外部指令,但尚未转换成内部指令存入一级缓存602。控制器接收到该不命中信号,即控制以总线633上的BN2X 在主动表604中第‘80’行读取其中标签(假设为‘9132’)经总线675送至扫描转换模块608。请参考图7B,控制器也控制608中选择器798选择总线675,选择器799选择总线633,也通知扫描转换器608中控制器790开始转换指令。
[0207] 控制器790控制寄存器756存入选择器798的输出(‘9132’),也控制寄存器321存入选择器799的输出(‘24’,二进制为‘1100’)。即该分支目标的PC 地址为‘913224’,存储在二级缓存中第‘80’行,故其BN2地址为‘8024’。假设二级缓存606一次读取16个字节,寄存器321上的4位块内偏移地址仅有最高位被从总线679送往二级缓存606,与来自总线673的块地址合成地址‘8016’,从二级缓存606中读取相应字节经总线677送进转换器200中的对齐器203。此时对齐器203输入的最低字节为字节‘16’,转换器200即以寄存器 321上的低3位二进制‘100’作为原始移位量将第‘24’字节移到对齐器203 输出的最低字节,开始指令转换。转换器200中的存储器201中对应每条指令会给出一个信号786控制块内偏移映射生成器796记录相应指令的块内偏移量。存储器201另外送出总线788用以控制796中逻辑780与764以禁止某些块内偏移量的记录,以实现多条内部或外部指令与一条内部或外部指令对应时的映射。
[0208] 寄存器321上的二进制值‘1100’经总线679被送到译码器762译成独热码(one-hot-code)‘00000000000000000000000100000000’,经与或门764存储进存储器766。相应地,计数器776在一段外部指令开始被转换时,被置位为‘0’,其输出总线669上的值‘000’也被译码器778译成独热码‘1000’经逻辑门780 送往存储器782存储。块内偏移映射生成器796中还有移位器768及寄存器770,总线679上的值在一个外部指令段开始转换时被存入寄存器770,以控制移位器768的移位。在此例中,‘1100’被存入寄存器770控制移位器768左移
24位,使寄存器766中对应于字节‘24’的信息被移位到字节‘0’的位置放上总线691。
[0209] 替换模块611给正在转换生成的内部指令按置换规则分配了一级缓存602 中的‘72’号一级缓存块。控制器控制选择器692选择总线693上的BN1X地址‘72’连同BN1Y地址A(‘00’)写入轨道表610中。此时选择器694、696 选择总线631上地址,所以BN1地址‘72A’被写入某表项取代原来的BN2地址‘8026’,但不改变原来的指令类型。若循迹器614在该某表项处根据指令类型和/或处理器核601的控制信号决定分支,则会以该‘72A’放上总线631指向轨道表610中‘72’行第一个表项继续执行。
[0210] 替换模块611通过总线693送出BN1X地址‘72’选择602中的‘72’号一级缓存块,也选择了轨道表610中与偏移地址映射模块618中的第‘72’行供扫描转换器608产生的内部指令及相应程序流,块内偏移信息填充。总线669 被送出扫描转换器608,送到一级缓存602及轨道表610作为一级缓存块的块内偏移地址BN1Y供填充一级缓存块及相应轨道表使用。位于二级缓存606中从 BN2地址为‘8024’开始的分支指令经转换器200转换生成了一条非分支内部指令,从总线667送往一级缓存器602填充进‘72’号一级缓存块的A项(块内偏移为‘00’),其相应的指令类型(非分支指令)也由存储器201输出经总线687送往轨道表610存储在‘72A’项。
[0211] 控制器也控制将总线633上的BN2Y值‘24’经选择器698选择后与总线 693上的BN1X地址‘72’拼接成BN1X,BN2Y的形式‘7224’经总线665写入块地址映射模块620中的块地址存储模块920中由总线633上的BN2X经选择器640选择后由总线639寻址的‘80’行中最左面的表项。该表项由总线633 上的BN2Y‘24’值经选择器638选择后经总线637送入块地址映射模块620 中与该行中各表项的BN2Y值‘32’比较决定而确定。该值及其位置表示二级缓存器中‘80’号二级缓存块第‘24’字节开始的外部指令段被存于‘72’号一级缓存块中,且二级缓存器‘80’行中字节地址小于‘24’的外部指令还未被转换成内部指令。具体结构与操作见图8A-8D实施例。
[0212] 转换器201在转换过程中检测到上述外部非分支指令的长度为2个字节,经总线325控制对齐器203将经总线677输入的外部指令继续左移2位开始指令转换。此字节长度也被送往加法器323与寄存器321的内容相加,其和‘26’再次存入寄存器321。寄存器321的输出再次由译码器762译为独热码‘0000000000000000000000000100000’,并与寄存器766中的内容经与或门764 进行按位‘或’操作,其结果‘0000000000000000000000010100000’再次被存入寄存器766,其意义为‘80’号二级缓存块中第‘24’字节与‘26’字节各是一条外部指令的起始字节。
[0213] 转换器200转换开始于‘26’字节的外部指令,转换过程中发现该指令为一条4个字节长的直接分支指令,转换器对其分支偏移量不作任何修改与转换得到的内部指令的其他部分一并直接放上总线667。其分支指令类型也如前例由总线687输出。计数器776也在总线786的控制下增‘1’,总线669值为‘001’。控制器790根据该指令为分支指令控制加法器760将存储器756中的PC高位地址与寄存器321中的块内偏移量及从总线667中对应分支偏移量的部分798(假设此时该值为‘24’)相加,其和(sum)即为分支目标的PC地址‘913316’放上总线657输出。该和中的低位BN2Y(不大于二级缓存块内字节数的部分)被拼接到总线687上输出。
[0214] 总线657上的PC地址的高位经选择器680,总线681被送往主动表604匹配,其结果为不命中。主动表604即将该‘9133’PC高位地址经总线681送往低层存储器读取相应的外部指令块。主动表604也分配二级缓存器中‘81’号二级缓存块供此外部指令块存放。二级缓存块号BN2X(‘81’)也经总线671 送出与总线687上的低位BN2Y(‘18’)拼接成完整的BN2与在总线687上的直接分支指令类型,经选择器692送往轨道表610,写入由替换模块611经总线 693指向的‘72’行中由总线669指向的B项(地址‘001’)。同时,转换所得的内部分支指令经由总线667被写进一级缓存器602中‘72B’项。
[0215] 总线669上的值‘001’也被译码器778译为独热码‘0100’与寄存器782 中的值作‘或’操作值‘1100’存回寄存器782,代表内部指令块中第一条和第二条都各自对应一条外部指令。如果一条内部指令对应的不是一条外部指令的起始字节(即一条外部指令转换成多条内部指令时相应的第一条内部指令后的内部指令),则存储器201的内容通过总线788送出的信号(如图5D中的结束值YZ为‘10’的情况)会控制与或门780,使得寄存器782中的信号与全‘0’进行‘或’操作,使寄存器782中相应该指令的位被记录成‘0’,表示该内部指令不对应一条外部指令,使得该指令不会成为一个分支目标。另一方面,当有多条外部指令被融合成一条内部指令时,存储器201的内容通过总线788(如图5E中的结束值YZ为‘01’的情况)送出的信号会控制与或门764‘擦去’该多条外部指令第一条指令后的其他指令的相应记录,使得外部指令和内部指令的条数能够一致。当一段外部指令转换成相应的内部指令后,寄存器782与 766中‘1’的数目是一样的,虽然所处的位置不相同。在寄存器766中‘1’的位置是代表外部指令起始字节的字节地址。在寄存器782中‘1’的位置是代表内部指令起始指令的指令地址。
[0216] 存储器201在转换过程中检测到上述始于26字节的外部指令的长度为4个字节,经总线325控制对齐器203将经总线677输入的外部指令再左移4位开始指令转换。此字节长度也被送往加法器323与寄存器321的内容相加,其和‘30’再次存入寄存器321。寄存器321的输出再次由译码器762译为独热码,并与寄存器766中存储的内容进行按位‘或’操作,得到的结果‘0000000000000000000000010100010’再次被存入寄存器766。计数器776也依前例增‘1’,使总线669指向C项。
[0217] 转换器200在转换过程中从存储器201中经总线325读出上述始于‘30’字节的外部指令的长度为4个字节,此字节长度也被送往加法器323与寄存器 321的内容相加,其和‘34’再次存入寄存器321。寄存器321的输出679与比较器772中存储的二级缓存块字节数‘31’比较,此时根据比较结果通知控制器790已越过二级缓存块边界。控制器790据此控制选择器774选择全‘0’,也控制加法器760将存储器756中的PC高位地址与寄存器321中的块内偏移量及从总线667中送来的全‘0’相加以求顺序下一个外部指令块地址。其结果PC 地址‘913302’由总线657送出,其中PC地址中高位‘9133’被送往主动表 604匹配,得到BN2X值‘81’(之前因PC地址‘913326’匹配未命中,由主动表604分配)。该BN2X值经选择器660、总线673选择二级缓存606中‘81’号二级缓存块,依前例转换器200依前例读取‘81’号二级缓存块中‘0’~‘15’字节进转换器200,从中提取‘0’~‘1’字节移位拼接到已在转换器200中的‘80’号二级缓存块‘30’~‘31’字节后完成该外部指令的转换。转换得到的内部指令从总线
667送入一级缓存602中‘72C’项存储。寄存器782中的内容也依前例更新为‘1110’。
[0218] 因在转换指令时已越过二级缓存块边界。控制器790此时据此控制转换器 200停止转换指令,也控制计数器776再增一位,使总线669上的地址指向‘72D’项。控制器也使总线671上的BN2X值‘81’,经选择器640及总线639送至块地址映射模块620中块地址存储模块920,选择其中‘81’行的内容读出与经总线657、选择器638、总线637送进块地址映射模块
620的BN2Y地址‘02’进行比较。如果匹配命中则将匹配所得的BN1连同控制器产生的无条件分支指令类型经总线685,选择器692存进轨道表610中‘72D’表项。现在匹配结果为不命中,其意义为相应的外部指令块已在二级缓存中,但尚未被转换为内部指令。此时控制器790产生一个直接分支指令类型放上总线687与来自加法器760 的低位BN2Y(对应于块内偏移字节数)‘02’一同由总线687输出。控制器使总线671上的BN2X值与已在总线687上的BN2Y地址拼合成BN2地址‘8102’,连同无条件分支指令类型一起经选择器692写入轨道表‘72D’项。此时,并无相应的内部指令,所以一级缓存602中的‘72D’项没有被填充。
[0219] 此时,控制器790也控制将寄存器766中内容经移位器768左移24位后,其值为‘10100010’,此格式即图8B中行751的数据格式。放上总线691;控制器790也控制将寄存器
782中内容‘1110’放上总线691。寄存器782中的格式即如图8B中行771的数据格式。总线691上的内容被送往偏移地址映射模块618 中由一级缓存置换器611指向的第‘72’行写入,以供以后对该行进行外部与内部指令的块内偏移映射时用。
[0220] 至此,扫描转换器608协同其他模块完成了对一段外部指令的转换,提取该段指令中的程序流(program flow)信息,并将程序流信息与转换得到的内部指令存入轨道表610及一级缓存602中的相应表项。使得本实施例可以经由循迹器614读取并遵循轨道表610中程序流将相应内部指令供给寄存器核执行。此时块地址映射模块620与轨道表610中的数值可参考图9A。
[0221] 在一段外部指令的转换过程中,也有可能一级缓存块先于二级指令段被填满。计数器776中也有相当于边界比较器772的比较器,在越过一级缓存块的边界的情况下通知控制器790。控制器790在此情况下向一级缓存块置换器611 请求一个新的一级缓存块并控制将此新缓存块的BN1X地址连同为‘0’的BN1Y 地址经总线693和选择器692写入轨道表中填充满了的行的最后一项中。轨道表中每行都比相应的一级缓存块中多一项,以在一级缓存块写满的情况下程序流可以延续到下一新增轨道。因为新增的一级缓存块是从第一项开始填充,因此其BN1Y地址固定为‘00’。此后,计数器776被重置。替换模块611通过总线693指向新的一级缓存块及相应轨道表中的行。之后转换出的内部指令及相应程序流信息就从总线963指向的缓存块及轨道表行的A表项开始填充。
[0222] 请参考图8A,其为本发明所述外部指令块与内部指令块对应关系的示意图。在本发明中,外部指令集可以是定长指令集,也可以是变长指令集。为了不失一般性,在本说明书中主要以变长的外部指令集为例进行说明,定长外部指令集可以作为变长外部指令集的一种特例。
[0223] 在本实施例中,假设一个外部指令块的长度为16个字节(从字节0到字节 15),且每条内部指令的长度为4个字节。如图8A所示,外部指令块701中包含了6条变长指令。如之前实施例所述,外部指令块中的字节0是上一条指令的最后一个字节,因此属于上一外部指令块,即本外部指令块中的外部指令从指令块的字节1开始。其中,外部指令703占3个字节(字节1、2和3),外部指令705占5个字节(字节4、5、6、7和8),外部指令707占2个字节(字节 9和10),外部指令709占1个字节(字节11),外部指令711占3个字节(字节12、13和14),外部指令713在本外部指令块中占1个字节,其余部分在下一外部指令块中。
[0224] 在本实施例中,假设外部指令705可以被转换为2个内部指令(即内部指令725和727),外部指令703、707、709、711和713均可以被转换为1个内部指令,分别为内部指令723、
729、731、733和735,则经扫描转换器608转换后得到的内部指令块721中包含了7条内部指令(从内部指令0到内部指令7)。此外,在扫描转换器608进行指令块转换的同时,也产生了外部指令块内偏移地址BN2Y和内部指令块内偏移地址BN1Y的对应关系。该对应关系被存储在偏移地址映射模块618中。
[0225] 需要说明的是,在本发明中,一条外部指令可能被转换为一条或多条内部指令。为了不失一般性,在本说明书中主要以一条外部指令对应多条内部指令为例进行说明,而一条外部指令对应一条内部指令的情况是一种特例。即,当一条外部指令对应一条内部指令时,该外部指令对应的第一条内部指令和最后一条内部指令均是所述外部指令对应那一条内部指令。
[0226] 请参考图8B,其为本发明所述偏移地址映射关系存储形式的一个实施例。在本实施例中,行751和771构成一组映射关系,分别对应外部指令块和内部指令块,以存储图8A实施例中的外部指令和内部指令之间的偏移地址映射关系。其中,行751有16个表项,每个表项内只存储一位(bit)数据(即‘0’或‘1’),其中‘0’表示该表项对应的外部指令偏移地址不是一条外部指令的起始位置,‘1’表示该表项对应的外部指令偏移地址是一条外部指令的起始位置。
[0227] 每组映射关系中的第二行(即行771)中的每个表项对应一个内部指令偏移地址,即表项数目与内部指令块最大可能包含的内部指令个数相同。且每个表项内也只存储一位数据(即‘0’或‘1’),其中‘0’表示该表项对应的内部指令不是其相应外部指令的第一条内部指令,‘1’表示该表项对应的内部指令是其相应外部指令的第一条内部指令。
[0228] 这样,通过分别对行751和771中的‘1’进行操作就可以将外部指令偏移地址转换为内部指令偏移地址。请参考图8C,其为本发明所述偏移地址转换器 622的一个实施例。在本实施例中,以外部指令偏移地址转换为内部指令偏移地址为例进行说明。其中,从偏移地址映射模块618送来的映射关系格式如图8B 实施例所述。
[0229] 选择器阵列801中选择器的列数与外部指令块包含的偏移地址个数相等而行数为列数加一,即17行和16列。为了清晰起见,在图8C中只显示了4行、 3列,分别为自左向右的最初4行和自下向上的最初3列。行号以最下一行为第 0行,以上各行的行号依次递增。列号以最左面一列为0列,其右方各列的列号依次递增,每列对应一个外部指令中的偏移地址。第0列各选择器的输入A 和B均为‘0’,除了第0行选择器的A输入为‘1’。第0行所有选择器的输入 B均为‘0’。其他列选择器的输入A来源于前一列同一行选择器的输出值,输入B来源于前一列下一行选择器的输出值。
[0230] 选择器阵列803的结构与选择器阵列801类似,具有相同的行数。不同之处在于选择器阵列803中选择器的列数与内部指令块包含的指令条数相等。同样地,为了清晰起见,在图8C中只显示了4行、5列,分别为自左向右的最初 4行和自下向上的最初5列。行号与列号的设置与801相同。此外,选择器阵列 803中的第0行所有选择器的输入B均为‘0’;最后一行(16行)所有选择器的输入A均为‘0’,且第0行各选择器的输出均被送到编码器809按输出的列的位置编码。其他选择器的输入A来源于前一列上一行选择器的输出值,输入 B来源于前一列同一行选择器的输出值;且第0列的输入A来源于选择器阵列 801上一行选择器的输出值,输入B来源于选择器阵列801同一行选择器的输出值。
[0231] 译码器805对外部指令偏移地址进行译码,得到的掩码值送往掩码器807。由于一个外部指令块包含16个偏移地址,因此该掩码值的宽度为16位,其中该外部指令偏移地址对应的掩码位及其之前的掩码位的值均为‘1’,该外部指令偏移地址对应的掩码位之后的掩码位的值均为‘0’。之后,将该掩码值与从偏移地址映射模块618送来的映射关系中的行751进行按位与操作,从而保留行751中该外部指令偏移地址对应的掩码位及其之前掩码位对应的值,并将其余值清零,得到一个16位的控制字送往选择器阵列801。
[0232] 该控制字的每一位控制选择器阵列801中的一列选择器。当该位为‘1’时,相应列的选择器全部选择输入B;当该位为‘0’时,相应列的选择器全部选择输入A。即,对于选择器阵列801中的每一列选择器,若对应的控制位为‘1’,则选择来源于前一列下一行的输出值作为输入,使得前一列的输出值整体上移一行,并在最下一行补‘0’,作为本列的输出;若对应的控制位为‘0’,则选择来源于前一列同一行的输出值作为输入,保持前一列的输出值作为本列的输出。这样,控制字中有多少个‘1’,选择器阵列801第一列的输入就会被上移多少行,即选择器阵列801的输入中的唯一一个‘1’被上移了相应行数。由于选择器阵列801的行数和列数与外部指令块包含的偏移地址个数相等,因此选择器阵列801的输出中包含且仅包含一个‘1’,且这个‘1’所在的行的位置由控制字确定。
[0233] 同时,从偏移地址映射模块618送来的映射关系中的行771直接作为控制字被送往选择器阵列803。与选择器阵列801中类似,该控制字的每一位控制选择器阵列803中的一列选择器。当该位为‘1’时,相应列的选择器全部选择输入A;当该位为‘0’时,相应列的选择器全部选择输入B。即,对于选择器阵列803中的每一列选择器,若对应的控制位为‘1’,则选择来源于前一列上一行的输出值作为输入,使得前一列的输出值整体下移一行,并在最上一行补‘0’,作为本列的输出;若对应的控制位为‘0’,则选择来源于前一列同一行的输出值作为输入,保持前一列的输出值作为本列的输出。这样,每经过控制字中的一个‘1’,选择器阵列803的输入就会被下移一行,即所述输入中的唯一一个‘1’被下移了一行。因此,当编码器809接收到从选择器阵列803最下一行送来的‘1’时,即可根据该‘1’所在的列的位置生成对应的内部指令偏移地址。
[0234] 以图8B中的映射关系为例,若外部指令偏移地址为‘9’(即对应外部指令块中的第十个字节也即第三条指令),则掩码器807输出的掩码值为‘1111111111000000’,与行751中的值‘0100100001011001’进行按位与操作后得到‘0100100001000000’,即控制字中有三个‘1’。这样,选择器阵列801 的输入中的‘1’被上移三行,即输出的‘1’位于的第3行。因此,所述‘1’在选择器阵列803中经3个值为‘1’的控制位对应的选择器列之后到达编码器 809,因为行771中的值为1101111,使得选择器阵列803在第0,第1及第3 列对输入的‘1’各降一行,最后在第3列向编码器809输出的值为‘1’,对应内部指令块中的第四条指令(偏移地址为‘3’)。编码器809按此编码得到‘3’,从而将外部指令偏移地址值‘4’转换为内部指令偏移地址值‘3’。
[0235] 根据本发明技术方案,可以通过将待排序的BN2Y值与块地址映射模块620 各表项中存储的BN2Y值比较以将当前被写入的BN1X和BN2Y存储到正确位置。请参考图8D,其为本发明所述块地址映射模块的一个实施例。
[0236] 在本实施例中,块地址映射模块620包含块地址存储模块920、比较模块 924、移位器926、多路选择器940、多路选择器942及一些选择器控制逻辑。各个功能模块又分成基本相同的复数个列(如:R、S和T)。其每列中各有其自有的块地址存储模块920、比较模块924、移位器926、多路选择器940及多路选择器942。其中块地址存储模块920为一个由复数个表项组织成复数行与复数列组成(如图8D中存储模块970、971及972)的存储器阵列。其每个表项中有两部分:一级缓存块号(BN1X)及二级缓存块内位移(BN2Y)。存储器阵列由地址639选出其中一行由总线950输出;也同样由总线639选出一行将总线 952上的数据写入该行。块地址存储模块920中某列被排序功能模块中每一列各有其相应的比较模块924用于比较块内偏移BN2Y。除比较模块924外各功能模块与总线的位宽均等于块地址存储模块920表项宽度用于传输表项。比较模块 924是位宽为BN2Y的大于比较器,当某列中总线950上的BN2Y大于从总线 635上送入的BN2Y时,该列比较器输出为‘1’;当总线950上的BN2Y小于等于总线635上的BN2Y时,该列比较器输出为‘0’。当比较器输出为‘0’时,选择器940选择本列总线
950上的表项内容放上总线952。当比较器输出为‘1’时,其右面一列的选择器选择比较器所在列950上数据经移位器926移位后的数据放上总线952。即当比较器输出为‘1’时,控制器将本列950上数据右移一列。当某列的比较器输出为‘1’,而其左面一列比较器输出为‘0’时,则该某列选择总线665上数据放上总线952。总线952按列将选择器940的输出送至块地址存储模块920。例如:选择器976的输出只送回存储模块970、选择器977 的输出只送回存储模块971。当某列的比较器输出为‘0’,而其右面的一列比较器的输出为‘1’时,则控制逻辑选择该列总线950上数据放上总线954送往轨道表610与块内偏移映射器逻辑618等。
[0237] 假设每行二级指令块中的最大偏移地址为‘31’(即偏移地址范围为‘0’~‘31’),则当一个二级指令块被写入二级缓存606时,其二级块内偏移地址 (BN2Y)982均被设为‘32’,其意义是本行最大偏移地址加‘1’。现假设总线 639上的高位(BN2X)为‘81’选出620中的一行,其中存储模块970、971 和972列中表项内的BN2Y均为‘32’。从总线637送进的是BN2Y,此时值为‘18’。其意义为以BN2地址‘8118’匹配排序。比较模块924比较的结果为比较器输出973、974和975均为‘1’(输出973为‘1’即表示在块地址存储模块920中尚无对应总线637上的BN2Y的有效表项),控制选择器940中选择器 977和978选择C输入,即移位器926的输出放上总线952;而选择器976选择总线665上的数据放上总线952。总线952上的数据被写入块地址存储模块920 中刚才读出的同一行。其结果是存储模块970中表项存储了从总线
665送进的数据,存储模块971中表项存储了原来存储模块970中表项数据,存储模块972 中表项存储了原来存储模块971中表项数据。图中未显示的右方各列相应的比较器的来自总线950的BN2Y输入都为‘32’大于‘18’,所以比较结果都为‘1’,各自控制相应列的数据右移。
即BN2Y值大于新来的数据的BN2Y值的都被右移使得包括新数据在内的各表项按BN2Y值的升序排列。控制器检测比较模块 924中最左边的一个比较器的输出973以判定输入的BN2Y值有无对应的一级缓存块。如比较器输出973为‘1’,表示输入的BN2Y无对应的一级缓存块。
如比较器输出973为‘0’,表示输入的BN2Y有对应的一级缓存块。
[0238] 假设上述行又被总线639上‘81’号地址读出,此时存储模块970、971和 972表项中相应BN2Y值为‘18’、‘32’和‘32’,与从总线637送来的BN2Y 值‘27’由比较模块924中的相应比较器相比。其结果为比较器输出973为‘0’,比较器输出974及975均为‘1’。比较器输出973使得选择器976选A输入将本列总线950上数据放上总线952;比较器输出974使得选择器978选C输入,即移位器926的输出;比较器输出975使得其右方一列的选择器选C输入,即移位器的输出。而比较器输出973为‘0’与比较器输出974为‘1’使得选择器977选择B输入即总线665上的数据。写回块地址存储模块920之后存储模块970中表项数据的BN2Y值为‘18’,存储模块971中表项数据的BN2Y值为‘27’,存储模块972中表项数据的BN2Y值为‘32’,在其他右方各项中均为‘32’。如此则表项中数据是根据其BN2Y值排序,其相应的一级缓存块号也被按二级存储块内偏移排序,使得可以根据一个外部指令的BN2地址映射得到相应的内部指令的BN1地址。
[0239] 假设一个新的BN2地址‘8123’从总线639及637送入。此时‘81’行被读出,存储模块970、971和972表项中的BN2Y值分别为‘18’、‘27’和‘32’。总线637中送入的BN2Y值为‘23’。
经比较模块924比较得到比较器输出973 为‘0’、输出974和975均为‘1’。此时选择器954的控制上只有信号979为‘1’ (信号979是比较器输出973与输出974的异或),存储模块970中表项上的内容被放上总线954送往块内偏移映射逻辑(包含块内偏移映射模块618,偏移地址转换器622和减法器928)。表项内容中的一级缓存块号BN1X被作为地址从块内偏移映射模块618中读出与该一级缓存块相应行中的映射关系送往偏移地址转换器622。总线637上的BN2Y(二级缓存块内偏移量)由减法器928减去总线954上的BN2Y(其为该二级缓存块内的与该一级缓存器对应的二级子缓存块的起始地址),其差(23-18=5)即为总线637上的BN2Y在该二级子缓存块的净地址偏移量。偏移地址转换器622根据该偏移量及上述映射关系即可求出相应的一级缓存块内偏移量BN1Y(该对应关系中二级缓存偏移量为字节5处必为‘1’标识一条外部指令的第一个字节开始,由偏移地址转换器622求出与该外部指令对应的内部指令一级缓存偏移量)。由总线954上的BN1X与此BN1Y 拼接即获得指向与上述二级缓存地址‘8123’对应的一级缓存地址BN1。该BN1 可被放入轨道表611中表项以便循迹器查找。
[0240] 以下结合图6、图8D、图9A~图9F进行说明,其中图9A~9F为图6实施例运行过程的示意图。
[0241] 在图9A~图9F中显示了运行时块地址存储模块920、二级缓存606、偏移地址映射模块618、轨道表610及一级缓存602中的相应内容。其中,块地址存储模块920中每一行与二级缓存606中一个二级缓存块对应,也与主动表604 中一个外部指令块地址对应。偏移地址映射模块618与轨道表610的一行对应于一级缓存602中一个一级缓存块。图6中主动表604还负责按置换规则为新取进的外部指令块在二级缓存606中分配二级缓存块,替换模块611负责按置换规则为内部指令在一级缓存602中分配一级缓存块。图中一级缓存器601中的阴影部分表示已填充的内部指令。
[0242] 二级缓存606的寻址地址为BN2,其格式为‘8XYY’。其中‘8X’为块地址BN2X。为便于说明,此例中二级缓存606是一个路组缓存,其块地址即为索引地址(index),其值为‘80’~‘82’,其相应标签(即块地址)存放在主动表中相同索引地址的行。二级缓存606中每个二级缓存块(图中一行)有32个字节,其块内偏移量BN2Y为其块内字节(byte)地址‘YY’,其值为‘0’~‘31’。其中储存变长的外部指令,图中每个分隔代表一条不同长度的外部指令,在此实施例中外部指令的长度从2个字节到8个字节不等。
[0243] 一级缓存602则是在轨道表610与块地址存储模块920协同控制下的一个全相连缓存,其地址为BN1,其格式为‘7XY’,其中‘7X’为块地址BN1X,其值为‘70’~‘75’。一级缓存602中的每个一级指令块(图中一行)有4条定长内部指令,其块内偏移量BNY1为其块内字(word)地址‘Y’,为易于理解及与BN2Y区分,其值在此实施例中以字母为A~D标注;在此实施例中一条内部指令的长是一个字(word),内部指令也可以有其他的长度。轨道表610中每行也有A~D四个表项对应于一级缓存602中A~D四条内部指令。轨道表610 中每行还有一个E表项,用于存放其下一指令块的地址。轨道表610中的每个表项储存一个类型,循迹器根据类型决定下一步的地址。表项还可以存储一个指针指向该表项所代表的指令的目标地址,其格式既可以为BN2,也可以为 BN1。偏移地址映射模块618每行与一个一级缓存块及其相应的轨道表中一行对应。
[0244] 块地址存储模块920中每一行与二级缓存606中一个二级缓存块对应。二级缓存620中每一行中有复数个表项(如:R、S、T、U、V)。每个表项可与一级缓存中的一个一级指令块相对应。块地址存储模块920中各表项内容含有其相应的一级缓存块的块地址BN1X,及该一级缓存块中的第一个内部指令在二级缓冲块中相应的外部指令在该二级缓存块中的地址BN2Y。当一个二级缓存块被写入时,其块地址存储模块920中相应的行中的BN2Y地址全被重置为‘32’,其意义为其顺序下一个二级缓存块中的第一个字节。
[0245] 图9A为开始状态,其时二级缓存606中二级缓存块‘80’已被填充,而二级缓存块‘81’和‘82’尚未填充。‘80’号块中从字节‘24’开始的外部指令正被扫描转换器608转换为内部指令格式经总线667向一级缓存602中一级缓存块‘72’按顺序填充。‘80’块中字节‘24’~‘25’是一条外部指令,其相应内部指令被填充进‘72’号块A项;‘80’块中字节‘26’~‘29’是一条外部指令,其相应内部指令被填充进‘72’号块B项;‘80’块中从字节‘30’开始是一条4个字节长的外部指令,其相应内部指令将被填充进‘72’号块C项。
[0246] 转换格式过程中,扫描转换器608发现开始于‘80’号块‘26’字节的外部指令是一条分支指令,并以该缓存块在主动表604中存储的缓存块地址加块内偏移量‘26’,再加上分支偏移量计算出其分支目标。该分支目标高位经总线 657送往主动表604中匹配未命中,经主动表604按分配新的二级缓存块‘81’号缓存块(即BN2X为‘81’);主动表604也向低层存储器送出该分支目标高位以读取相应外部指令块存入‘81’号缓存块。相应扫描转换器608中‘81’行的BN2Y全被重置为‘32’。该新分配的二级缓存块号由主动表604经总线671 送出,与扫描转换器608输出的总线657上的分支目标低位(‘18’号字节)在总线687上拼接成一个BN2地址。扫描转换器608也得出与外部指令‘8026’ (即‘80’块‘26’字节)相应的内部指令地址为‘72B’(即‘72’号一级存储块中第二个字),于是扫描转换器608的地址总线669指向轨道表610中‘72’行B列中表项,写入经总线687传来的表项内容。因此,轨道表610中‘72B’表项内容为BN2地址‘8118’。
[0247] 总线657上的分支目标的低位(BNY2值‘18’)被选择器638选择后放上比较模块924的一个输入637与来自块地址存储模块920的‘81’行(由主动表604分配的BN2X值‘81’被选择器640选择及经总线639送达)的各表项内容比较,发现该为‘18’的值小于所有表项内容(即‘18’<‘32’),因此 BN1X值‘72’与BN2Y值‘18’(地址在第‘18’号字节的分支目标外部指令被写入了‘72’号第一存储块)被写入块地址存储模块920中的‘81’行中的R 项。此时,R项的值为‘7218’。
[0248] 扫描转换器608继续转换格式到二级缓存606中‘80’块的字节‘30’,发现该指令长度为4个字节,超出本块2个字节,于是在本二级缓存块地址加‘30’ (块内偏移)加‘4’(指令字节数),产生下一外部指令块地址。该下一缓存块地址也被总线657送往主动表604匹配,发现该外部指令块已在(或正在从低层存储器读入)‘81’号二级缓存块,扫描转换器608即从‘81’号缓存块中读取需要的数据以完成开始于‘80’号二级缓存块字节‘30’的外部指令的转换,并将转换所得的内部指令按顺序填充进一级缓存器‘72’块C项。因为这是‘80’号二级存储块上最后一条外部指令,扫描转换器608要向轨道表610提供顺序下一条指令地址。此时,匹配所得的BN2X地址被主动表604从总线671送出,与总线657上的低位BN2Y(30+4=
34,抛弃超出32个字节宽的部分,得值‘2’) 在总线687上合成一个BN2地址‘8102’。本实施例处理指令流从一个指令块的最后一条指令转移到其顺序下一条指令的方式是将其视为一条无条件分支指令,即把总线687上的BN2地址作为一个目标地址,放到轨道表中一个指令块最后一道指令(地址‘72C’)之后的表项,且类型设为无条件分支。因此,扫描转换器608经总线661送出其值为‘72D’的地址,控制轨道表在‘72’行D 项写入BN2地址‘8102’。
[0249] 循迹器614从轨道表‘72’行A项开始读取轨道表中内容,因该行中A项不是分支指令,循迹器继续往右读取。循迹器614从‘72’行B项读出‘8118’判断是一个BN2地址,即将该地址经总线631送往块地址存储模块920及二级缓存606。该BN2地址从块地址存储模块920中读出其‘81’行的表项内容。控制逻辑发现块地址存储模块920中‘81’行所有的一级缓存块号都为无效,据此判断该BN2地址的相应外部指令尚未被转换成内部指令,即控制二级缓存 606顺序读出地址从‘8118’开始的部分‘81’号二级缓存块直到‘8131’(‘81’块最后一个字节)上的外部指令提供给扫描转换器608进行格式转换。
[0250] 扫描转换器608也因此向替换模块611请求一个可被替换的一级指令块号。替换模块611遵循一定的规则,比如LRU替换算法,以确定可替换的一级存储块,此时按顺序是‘70’、‘71’、‘73’、‘74’、‘75’。因此,按顺序提供‘70’号一级存储块供填充。扫描转换器608即据此将从二级缓存606中‘8118’开始的外部指令转换成的内部指令按顺序填入一级缓存602中‘70’号存储块中A、 B、C、D各项,并将BN1地址‘70A’写入轨道表610中‘72B’表项,代替原BN2地址‘8118’。这是基于在二级缓存器中‘8118’地址开始的外部指令的相应内部指令被存储在从‘70A’开始的一级缓存块内。请见图9B。
[0251] 扫描转换器608发现‘70’号一级存储块的D项被填充后,‘81’号二级存储块中地址为‘8118’~‘8131’的指令尚未被转换完毕,只转换到地址为‘8126’的外部指令。于是向替换模块611请求一个可被替换的一级指令块号。替换模块611按顺序提供‘71’号一级存储块。于是控制器将替换模块611产生的BNX 值‘73A’连同控制器产生的无条件分支指令类型‘71A’(‘71’号一级缓存块中的第一条指令的地址)依前例写入轨道表610中‘70’行中E项以供循迹器614执行到此时跳转到‘71’号缓存块的第一条指令。扫描转换器608也继续转换外部指令并按顺序填入‘71’号一级存储块。扫描转换器608也将地址为‘8118’~‘8126’中每条外部指令的第一个字节的块内偏移地址BN2Y以及相应内部指令的块内偏移地址BN1Y以图7B例中的格式存入块内偏移映射器 618中循迹器指针631指向的‘70’行。
[0252] 从总线657中送出的BNY2值‘27’被送往比较模块924与‘81’行各表项比较。结果发现该BNY2值大于R表项中的BNY2值‘18’,但小于S表项及其他表项中的BNY2值(均为‘32’)。值‘7127’被填入块地址存储模块920 中‘81’行的S表项,原R表项值‘7018’不变,原T、U、V表项的值均右移一个表项。
[0253] 因为扫描转换器608在‘8118’~‘8131’的外部指令中未发现分支指令,所以轨道表610中‘70’行中的A、B、C、D各项中没有分支目标的记录。扫描转换器608发现‘81’行中从‘26’字节开始的外部指令结束于‘31’字节,没有延伸到下一个指令块,而且该外部指令相应的内部指令结束于‘71’号存储块B项。因此,将如前例计算,匹配而分配得到的下一外部指令地址‘8200’存入轨道表610中‘71’行C项。主动表604如前例向低层存储器读取‘82’号二级缓存块的相应外部指令块以填充‘82’号二级缓存块。请见图9C。
[0254] 处理器核执行轨道表中‘72B’项中的分支指令,其判断结果经信号635送往循迹器614。此时,该结果为不分支。循迹器614据此移向轨道表中同一行中下一轨迹点‘72C’读出后,发现为非分支指令,移向下一个表项‘72D’。读出后发现是一条目标为‘8102’的无条件分支地址。控制器判断此为BN2地址,经总线633送出。总线633中高位被送到块地址存储模块920,读出其中‘81’行各表项内容送入比较模块924的一组输入端,而总线633中低位(其值为‘02’) 经选择器638选择后送到比较模块924的另一个输入端637相比较。比较结果为
637上的BNY2值小于所有表项中的值,控制逻辑据此判断BN2地址为‘8102’的外部指令尚未有相应的内部指令存于一级指令块中。控制逻辑控制二级缓存 606从总线633送来的BN2X地址‘81’及总线679上送来的地址‘00’开始送外部指令到扫描转换器608以转换为内部指令。
[0255] 扫描转换器608如前例请求并获得‘73’号一级缓存块以顺序填充转换所得的内部指令。同时,因为总线637上的BNY2地址‘02’小于所有‘81’行中所有表项内容,如前例,值‘7302’(代表BNY2为‘02’的外部指令的相应内部指令被放入‘73’号一级指令块)被放入‘81’行R表项中,而原‘81’行各表项都各右移一个表项。并且新值被写入的表项(此时为R表项)中的BNY2 值‘18’被送往扫描转换器608以通知扫描转换器608只需转换到‘18’字节前一个字节,即‘17’字节即可。
[0256] 在转换所得的内部指令被填充入‘73’号一级缓存块的同时,替换模块611 产生的BNX值‘73A’连同控制器产生的无条件分支指令类型被写入轨道表610 中‘72D’,将其中的BN2值‘8102’替换为BN1值‘73A’。循迹器614读指针631此时仍指向‘72D’项,所以在总线633上读出了‘73A’的值。控制逻辑判断这是BN1值,据此控制一级缓存用73A’地址读出相应内部指令供处理器核601使用。
[0257] 扫描转换器608转换到‘81’行第‘9’字节结束的外部指令时,发现第‘73’号一级指令块已填到D项,据此请求得到‘74’号一级指令块继续转换并填充从第‘10’字节开始的外部指令。如前例替换模块611产生的BNX值‘74A’连同控制器产生的无条件分支指令类型填入轨道表610中‘73’行E项。从总线657中送出的BNY2值‘10’如前例被送往比较模块924与‘81’行各表项比较。结果发现该BNY2值大于R表项中的BNY2值‘02’,但小于S表项中的BNY2值‘18’及其他表项中的BNY2值。依前例,值‘7410’被填入块地址存储模块920中‘81’行的S表项,原R表项值不变,原T、U、V表项的值均右移一个表项。
[0258] 扫描转换器608继续转换外部指令并填充到一级缓存602。在字节‘17’结束的外部指令是填充到‘74’号一级缓存块中B项。此时,扫描转换器608发现已遇到此前比较模块924送来的限度‘18‘,并以该限度在块地址存储器920 中81行匹配得到‘70’,即以‘70A’即无条件分支指令类型存入轨道表610中‘74’行C项存储。另一种实施方式可以将BN2地址‘8118’存入轨道表610 中‘74’行C项存储留待循迹器将其读出时在映射为。请见图9D。
[0259] 在上述指令转换与一级缓存602填充的同时,循迹器614在继续沿‘73’号轨道前行,因为轨道表中‘73B’、‘73C’、‘73D’表项都为非分支指令,循迹器在这些表项处都不停留,从‘73E’表项读出了无条件分支指令目标‘74A’,即转移到‘74’行从A项开始前行。循迹器在‘74C’表项读出无条件分支指令目标‘70A’。即转移到‘70’行继续前行,在‘70E’表项读出无条件分支转移指令,目标‘71A’。循迹器614即转移到‘71’行继续前行在‘71C’表项读出表项内容为无条件分支指令,目标‘8200’。控制器判断该目标为二级缓存块地址,于是通过总线631将该地址送往块地址存储模块920,匹配发现‘82’号二级缓存块并无有效的一级缓存块。该匹配结果使扫描转换器608开始将‘82’号缓存块中所有外部指令转换为内部指令,从替换模块611提供的‘75’号一级存储块开始填充进一级缓存器602。同时,扫描转换器608也将转换时提取的指令类型及计算得到的分支目标同步填充进轨道表610中相应表项。控制器也控制将置换模块911产生的BN1地址‘75A’连同无条件分支指令类型,写入轨道表610中循迹器614正指向的表项‘71C’。该表项新内容被从轨道表中读出,经总线631直接送往一级缓存602读出内部指令供处理器核601使用。
[0260] 请见图9E.循迹器614沿‘75’行前行在‘75B’处遇到一条条件分支指令,其目标为‘8116’,该值为‘8116’的BN2被送往块地址存储模块920匹配,发现其BN2Y值‘16’大于‘81’行S表项中BN2Y值‘10’,但小于T表项中BN2Y 值‘18’。
[0261] 经图8D中比较模块924比较得到比较器输出973和974均为‘0’、输出975 为‘1’。此时选择器954的控制上只有信号981为‘1’(信号981是输出974 与输出975的异或),存储模块971中表项上的内容‘7410’被放上总线954送往块内偏移映射逻辑(包含块内偏移映射模块618,偏移地址转换器622和减法器928)。表项内容中的一级缓存块号BN1X被作为地址从块内偏移映射模块618 中读出第74行中的映射关系送往偏移地址转换器622。总线637上的BN2Y(二级缓存块内偏移量)由减法器928减去总线954上的BN2Y(其为该二级缓存块内的与该一级缓存器对应的二级子缓存块的起始地址),其差(16-10=6)即为总线633上的BN2Y在该二级子缓存块的净地址偏移量。偏移地址转换器622根据该净偏移量及上述映射关系即可求出相应的一级缓存块内偏移量BN1Y。由总线954上的BN1X与此BN1Y拼接即获得指向与上述二级缓存地址‘8116’对应的一级缓存地址BN1值‘74B’。该BN1值可被放入轨道表611中‘75B’表项取代原有的‘8116’以便循迹器614根据此BN1值及处理器核601的反馈控制一级缓存602读取指令。扫描转换器608继续转换二级缓存器606上‘82’行上的外部指令,在填完‘75’号一级缓存块后获分配‘77’号缓存块作为下一顺序缓存块。请参照图9F。
[0262] 在轨道表中循迹器需用的分支指令地址都由BN2转换为BN1后,循迹器 614读出该等值后即可直接无间断(除等待处理器核601经总线635送来的条件分支决定外)控制一级指令缓存向处理器核601提供指令。
[0263] 进一步地,根据本发明技术方案,所述处理器系统不但可以支持对应不同处理器平台的各种外部指令集(二进制码指令集),也可以支持对应虚拟机的字节码指令集,如作为JAVATM解释器输入的字节码指令。此时,可以采用与之前实施例相同的方法将一条字节码指令转换为一条或多条内部指令供处理器核执行。鉴于字节码指令的特殊性,还可以在转换过程中做一些改进以提高性能。例如,对于一条需要常数进行运算的字节码指令,因为该常数是存储在存储器中的常量池内,因此按之前实施例所述方法会被转换为一条数据读取指令及相应的运算指令。然而,可以在扫描转换器审查发现该字节码指令是读取常数的指令时,提前将该常数从存储器中填充到数据缓存中。这样,当处理器核执行到该字节码指令对应的第一条内部指令(即数据读取指令)时,不会发生因数据读取造成的缓存缺失。
[0264] 更进一步地,还可以在提前从存储器中获取到该常数时,直接将该常数以立即数的形式嵌入到相应的内部指令(即运算指令)中,从而可以省去所述数据读取指令。这样,当处理器核执行到该字节码指令对应的内部指令(即已嵌入该常数的运算指令)时,可以直接进行运算,从而进一步提高了处理器系统的性能。
[0265] 此外,对于字节码指令中的栈运算指令,也可以用本发明所述的方法转换为对应的内部指令供处理器核执行,从而省去将字节码指令翻译为机器码指令的过程。在本发明中,一次栈运算被转换为一条内部指令,且该类内部指令的操作数不是寄存器堆中的寄存器值,而是操作数栈中位于栈顶的若干个寄存器值。此时,可以对处理器核中现有的寄存器堆增加相应的控制逻辑,使得该寄存器堆能用做栈寄存器。
[0266] 请参考图10A,其为本发明所述操作数栈的一个实施例。在本实施例中,以一个栈运算最多需要两个操作数并得到一个运算结果为例进行说明。对于其他情况,也可以此类推。
[0267] 在图10A中,寄存器堆1001同时支持两个读操作和一个写操作。其中,译码器1003、1005分别对送来的两个寄存器号译码后分别送往第一读端口和第二读端口,从总线1013和
1015读出对应的寄存器值。译码器1007则对将被写入的寄存器的寄存器号进行译码,并送往写端口,使得总线1017上的值可以被写入对应的寄存器。寄存器1011中存储了栈顶指针值,即该寄存器堆作为操作数栈使用时栈顶指向的寄存器号。寄存器1011中的值通过总线
1045被送到选择器1053、1055和1057,以及减量器1031、增量器1041和控制器1019。其中,减量器1031和增量器1041分别对总线1045送来的栈顶指针值进行减一和增一的操作,并将相应结果分别通过总线1043和1047送往选择器1053、1055和1057。由于寄存器堆1001的容量有限,在作为操作数栈使用时若容量已满或接近满(即栈顶指针离栈底指针的距离达到一定程度)时,需要将栈底的一部分操作数按顺序存储到外部存储器(或缓存)中,并移动栈底指针,使得这部分寄存器可以容纳新被压入栈中的操作数,从而构成一个类似循环缓冲(Circular Buffer) 的结构。同样地,当操作数栈已空或接近空(即栈顶指针离栈底指针的距离达到一定程度)时,需要将之前存储到外部存储器(或缓存)中的那部分操作数按逆序填充回操作数栈中,同时移动栈底指针,使得操作数栈能继续提供操作数。在本实施例中,控制器1019根据该栈顶指针值,产生一个新的栈底指针值经译码器1009译码后控制寄存器堆1001将原栈底指针和所述新栈底指针之间的寄存器值存储到外部存储器中,或从外部存储器将相应操作数填充到寄存器堆1001中原栈底指针和所述新栈底指针之间的寄存器中。
[0268] 相应地,在内部指令中有一个指令域表示该内部指令是寄存器运算指令还是栈运算指令,该指令域的值通过控制线1021被送到选择器1033、1035和1037。当该内部指令是栈运算指令时,选择器1033、1035和1037均选择输入A并分别送往译码器1003、1005和1007;当该内部指令是寄存器运算指令时,选择器 1033、1035和1037均选择输入B并分别送往译码器1003、1005和1007。
[0269] 这样,若一条内部指令是寄存器运算指令,则两个源寄存器号和一个目标寄存器号分别通过总线1023、1025和1027被选择器1033、1035和1037选择及经译码器1003、1005和1007译码后对寄存器堆寻址,从而读出及写入相应的寄存器值。该操作与现有技术类似,在此不再赘述。
[0270] 若一条内部指令是栈运算指令,则上述三个存储寄存器号的指令域被用于存储栈顶指针移动信息。例如,对于一条从栈顶取出两个操作数运算并将结果存回栈顶减一的栈运算指令,其中一个操作数对应的寄存器号就是寄存器1011 中存储的栈顶指针值,另一个操作数对应的寄存器号是该栈顶指针值减一,而运算结果对应的寄存器号也是该栈顶指针值减一。即,将位于栈顶的两个操作数出栈运算后,再将运算结果压回栈顶。此时,选择器1053受总线1023上的指令域控制,选择输入D(当前栈顶指针值),从寄存器堆中读出第一个操作数;选择器1055受总线1025上的指令域控制,选择输入H(当前栈顶指针值减一),从寄存器堆中读出第二个操作数;选择器1057受总线1027上指令域控制,选择输入K(当前栈顶指针值减一),经译码后选中将被写回的寄存器。同时,选择器1051受总线1029上指令域控制,选择输入N(当前栈顶指针值减一)作为新的栈顶指针值写回寄存器1011,完成栈顶指针更新。
[0271] 又如,对于一条将操作数压入操作数栈的指令,选择器1057受总线1027 上指令域控制,选择输入I(当前栈顶指针值加一),经译码后选中相应寄存器,从而将操作数写入该寄存器,实现压栈操作。同时,选择器1051受总线1029 上指令域控制,选择输入L(当前栈顶指针值加一)作为新的栈顶指针值写回寄存器1011,完成栈顶指针更新。
[0272] 又如,对于一条将操作数从操作数栈出栈的指令,选择器1053受总线1023 上指令域控制,选择输入D(当前栈顶指针值),经译码后选中相应寄存器读出操作数,实现出栈操作。同时,选择器1051受总线1029上指令域控制,选择输入N(当前栈顶指针值减一)作为新的栈顶指针值写回寄存器1011,完成栈顶指针更新。
[0273] 此外,控制器1019中存储了当前栈底指针值,并对从寄存器1011送来的当前栈顶指针值进行判断。若栈底指针值与栈顶指针值接近到一定程度,说明操作数栈接近空,若之前有操作数被存储到外部存储器(或缓存),则需要将一定数目的操作数从外部存储器(或缓存)填充到寄存器堆中栈底以外部分,并更新栈底指针值。相应地,若栈底指针值与栈顶指针值远离到一定程度,说明操作数栈接近满,则需要将一定数目的操作数从寄存器中栈底开始部分存储到外部存储器(或缓存)中,并更新栈底指针值。
[0274] 请参考图10B,其为本发明所述更新栈底的一个实施例。在本实施例中,假设当栈底指针值与栈顶指针值相差‘3’的时表示操作数栈接近空,且每次填入一个操作数。在某一时刻,栈底指针指向寄存器1073,栈顶指针指向寄存器1079。执行一个出栈操作后,栈顶指针指向寄存器1077。此时,栈底指针值与栈顶指针值相差‘3’,则控制器1019发出信号从外部存储器(或缓存)取回之前存储出去的最后一个操作数,并将该操作数填充到栈底指针值减一位置的寄存器(即寄存器1071),同时对栈底指针值减一,使得栈底指针指向寄存器1071,保持栈中操作数的数目大于‘3’。
[0275] 请参考图10C,其为本发明所述更新栈底的另一个实施例。在本实施例中,假设当栈底指针值与栈顶指针值相差‘7’的时表示操作数栈接近满,且每次向外部存储器(或缓存)存储一个操作数。在某一时刻,栈底指针指向寄存器1081,栈顶指针指向寄存器1091。执行一个入栈操作后,栈顶指针指向寄存器1093。此时,栈底指针值与栈顶指针值相差‘7’,则控制器1019发出信号将栈底指针指向的那个操作数存储到外部存储器(或缓存)中,同时对栈底指针值加一,使得栈底指针指向寄存器1083,保持栈中操作数的数目小于‘7’。
[0276] 根据本发明技术方案,每次填充或存储多个操作数的方法与图10B和图10C 的实施例中所述类似,在此不再说明。此外,在上述实施例中通过对栈顶指针值和栈底指针值之间的差值做判断以确定操作数栈是否接近空或满。然而,也可以根据栈顶指针值的变化来判断。例如,自上一次调整栈底指针值以来,若栈项指针值累计增加或减少到一定程度,即可进行相应的操作。
[0277] 在图7A实施例中,将结束轨迹点视为一个无条件分支点,因此当循迹器读指针631指向结束轨迹点之前的那个轨迹点(即指令块中的最后一条指令),且该轨迹点不是分支点,或是分支转移没有发生的分支点时,循迹器读指针631 继续更新、移动到结束轨迹点,并输出BN1送往一级缓存602。由于结束轨迹点不对应于真实的指令,循迹器读指针631要到下一个时钟周期才会更新为下一轨道的第一个轨迹点,因此在本时钟周期内,一级缓存602还需要向处理器核601输出一条空指令(即不会改变处理器核内部状态的指令,例如NOP)供执行。在本发明中,可以对送到一级缓存602的寻址地址进行判断,一旦发现寻址地址对应结束轨迹点,则不需要访问一级缓存602,直接输出空指令供处理器核601执行。然而,这样做的缺点是使得处理器核601多花费一个时钟周期用于执行无用的空指令。因此,可以对图7A进行改进,使得循迹器读指针631 指向结束轨迹点的前一轨迹点时,根据该轨迹点的指令类型及处理器核601执行该指令的反馈,在下一时钟周期直接指向分支目标轨迹点或下一轨道的第一个轨迹点。
[0278] 请参考图11A,其为本发明所述基于轨道表的缓存结构的另一个实施例。本实施例中的处理器核601、一级缓存602、扫描转换器608、二级缓存606、替换模块611、偏移地址映射模块618和选择器692、696、694均与图7A实施例相同。不同之处在于,轨道表610每次输出两个轨迹点的内容(循迹器读指针 631指向的轨迹点内容1182及其后的一个轨迹点内容1183),而循迹器中则增加了类型译码器1152、控制器1154和选择器1116。其中控制器1154执行图7A 中未显示的控制器的类似功能,此处将其显示以便于说明较复杂的功能与操作。
[0279] 在本实施例中,轨道表610的读端口在循迹器输出的读指针631的寻址下,输出两个相邻轨迹点的内容并放上总线1117与总线1121,控制器1154则检测所述总线1117上的指令类型,类型译码器1152检测所述总线1121上的指令类型。在任一时刻,从轨道表610中读出两个表项:当前表项1182及其顺序下一个(右方)表项1183。当前表项1182中的内容经总线1117读出送往选择器738 的一个输入及控制器1154。下一表项1183则经总线1121送出,送往类型译码器1152译码,其结果控制选择器1116。选择器1116的一个输入来源于总线1121,另一个输入来源于读指针631中的BN1X及增量器736送来的增一后的BN1Y (即读指针
631中的BN1Y值增一)。类型译码器1152只对无条件分支指令类型译码,若总线1121上的类型为无条件分支指令类型,则控制选择器1116选择输出总线1121上的内容;若任何其他类型,则选择来源于总线631的BN1X与增量器736输出的增一后的BN1Y。
[0280] 以下先考虑总线1121上的类型(即顺序下一个表项)不是无条件分支指令类型。此时,选择器1116选择来自增量器736的输出送往选择器738的一个输入。
[0281] 如果控制器1154译出总线1117上(即当前表项1182中的内容)的指令类型是非分支指令,控制器1154控制选择器738选择由选择器1116选择的增量器 736的输出作为寄存器740的输入。来自处理器核601的控制信号1111控制该输入存入寄存器740,使得循迹器向右移动达到下一个地址(即顺序更大的地址 BNX1不变,BNY1+‘1’)。在本实施例中,控制信号1111是处理器核601向循迹器提供的反馈信号,此控制信号1111在处理器核正常工作时一直为‘1’,使循迹器中寄存器740每个时钟周期都更新,使读指针631指向轨道表中一个新的表项及一级缓存602中一条新的指令以供处理器核执行。当处理器核601 中工作异常,需要停流水线或者不能执行新的指令时,则控制信号1111为‘0’,使寄存器740停止更新,循迹器及指针631保持原来状态不变,一级缓存602 暂停向处理器核601提供新的指令。
[0282] 如果总线1117上该内容中的指令类型是无条件分支,则控制器1154控制选择器738选择总线1117上的分支目标地址,使得读指针631跳转到由总线1117 上分支目标地址对应的轨迹点位置。
[0283] 如果总线1117上的指令类型是直接有条件分支,则控制器1154控制循迹器暂停更新并等待,直到处理器核601产生分支转移是否发生的TAKEN信号635。此时寄存器740不仅受控制信号1111控制,也受处理器核601产生的一个表示 Taken信号635是否有效的信号1161控制,需要信号1161显示TAKEN信号635 有效且控制信号1111也有效时,寄存器740才更新。如果分支转移没有发生 (TAKEN信号635为‘0’),则选择器738选择选择器1116的输出,如之前执行非分支指令的方式运行;如果分支转移发生(TAKEN信号113为‘1’),则选择器738选择总线1117,将其上的分支目标地址存入寄存器740,指针631 指向轨道表中分支目标的相应表项,及一级缓存602中的分支目标指令,将其读出供处理器核601执行。
[0284] 如果总线1117上的指令类型是BN2分支类型,则控制器1154控制循迹器中寄存器740暂停更新并等待,按前例将该BN2转换获得BN1地址,并写回轨道表中的原来间接分支表项。该表项经总线1117读出,此后处理与前例相同。循迹器沿该BN1并根据处理器核601反馈的指令执行结果(如:分支指令的执行结果),控制一级缓存602向处理器核601输出指令供执行。
[0285] 如果分支转移没有发生,则如之前非分支指令的做法运行,如果分支转移发生,则如之前无条件分支指令的做法运行。
[0286] 如果该内容中的指令类型是间接分支,控制器1154控制循迹器中寄存器740 暂停更新,并等待处理器核601经总线683送出分支目标地址,并如前例被送往主动表604、块地址映射模块620匹配,以后操作与上例同。
[0287] 如果表项1183中是无条件分支指令,则分支类型译码器1152对总线1121 上的指令类型译码,使得选择器1116选择总线1121上的分支目标而不选择经增量器736提供的BN1(所述BN1即BN1X、BN1Y+‘1’),如此当处理器核601 执行完表项1182相应的指令后,并不执行表项1183对应的指令(因为表项1183 对应的可能是结束轨迹点,在一级缓存602中并无指令与其对应),而是直接执行表项1183中所含的分支目标地址的相应指令。
[0288] 如果表项1182中是一条非分支指令,则如上所述执行完该指令后所执行的下一条指令就是表项1183中的分支目标所指向的指令。如果表项1182中是一条无条件分支指令,则执行完该指令后所执行的下一条指令就是表项1182中的分支目标所指向的指令,表项1183对该过程不产生影响。如果表项1182中是一条条件分支指令,则执行完该指令后所执行的下一条指令取决于处理器核601 所产生的TAKEN信号635。如判断为分支转移发生
(TAKEN信号635为‘1’),则选择器738选择总线1117上的分支目标,表示TAKEN信号635有效的信号 1161控制将该目标存入寄存器740,使指针631指向该分支目标,下一条执行的指令就是表项1182中分支目标地址所指向的指令。如判断为分支转移不发生 (TAKEN信号635为‘0’),则选择器738选择经选择器1116输出的总线1121 上的分支目标,表示TAKEN信号635有效的信号1161与控制信号1111控制将来自1183的无条件分支目标存入寄存器740使指针
631指向该分支目标,下一条执行的指令就是表项1183中的无条件分支目标地址所指向的指令。
[0289] 结束轨迹点中的无条件分支目标其地址也可以是二级缓存地址BN2。类型译码器1152在译码总线1121上读出的表项的指令类型时如果发现该地址为 BN2格式,也可以将该总线1121输出的BN2放上总线1117按前例转换为BN1 存回该表项。为了清晰及便于说明起见,这个路径在图11A中没有画出。
[0290] 图11A例中该条件分支指令的类型判断可以有四种方式。第一种方式为只有一种无条件分支类型,即对程序中原有的无条件分支指令,与本发明所添加的结束轨迹点中控制跳转到下一轨道起始表项的无条件跳转操作不加区分。这种方式会使得程序中原有的条件分支指令被跳过,不被处理器核601执行,但是程序流在轨道表610与循迹器的控制下,可以正确执行该分支指令的目标指令及其后续指令。这样,节省了原来执行该无条件分支指令所占的时钟周期。但处理器核601中因为未执行该指令,程序计数器PC值会有误差,如果需要保持精确PC值则需进行补偿。本发明中的缓存系统不需要PC即能正确向处理器核601提供其将要执行的指令供其不间断地执行。如果需要获得某个时刻的PC 值时(如调试时),每行轨道表中都记载了该一级指令块相应的二级缓存块地址 BN2X及二级缓存子块地址。由此,BN2X从主动表604中可读出相应的标签,与二级缓存块地址,子块地址及指针631中BNY的数值拼接,就是正在执行的指令的PC值。
[0291] 第二种方式为有两种无条件分支类型。其中,一种为结束点无条件分支类型对应轨道中每条轨道的结束点。对于这种结束点无条件分支类型,类型译码器1152将其视为该结束点不对应程序中一条指令,由此控制选择器1116选择总线1121上的分支目标,在执行完总线1117上的指令后直接跳转到总线1121上的分支目标地址。另一类对应程序中的无条件分支类型,类型译码器1152在译出这种类型时不将其作为分支处理,控制选择器1116选择增量器736的输出。当执行完总线1117上的表项内容的相应指令后,下一条执行的指令为其顺序下一条指令,即程序中原有的无条件分支指令。这种方式下处理器核中的PC则一直保持正确的值。
[0292] 第三种方式为对图11A实施例进行改进,在扫描转换器608对指令块审查的过程中,如果发现一级指令块的倒数第二条指令不是有条件分支指令,且最后一条指令为非分支指令,扫描转换器608在这种情况下将结束轨迹点合并到该最后一条指令对应的轨迹点中。即,将该最后一条指令的指令类型标记为无条件分支指令,并将下一指令块第一条指令对应的BN1或BN2(若是BN2则循迹器读出时会按前例将其转换为BN1)作为轨迹点内容存储在该最后一条指令对应的轨迹点中。这样,当循迹器读指针631指向该指令对应的轨迹点时,除了从一级缓存602中读出该指令供处理器核601正常执行外,控制器1154将总线1117上指令类型译码发现是无条件分支类型,因此控制选择器738选择总线 1117,在下一时钟周期将读指针631更新为该无条件分支的分支目标BN1(即下一指令块第一条指令对应的BN1)。此时,处理器核601不需要浪费一个时钟周期执行空指令。
[0293] 在扫描转换器608对指令块审查的过程中,如果发现一级指令块的最后一条指令(对应一条轨道中最后一个轨迹点)为分支指令,扫描转换器608在这种情况下不将结束轨迹点合并到该指令对应的轨迹点中,而将结束轨迹点的内容放置在每条轨道最后一条指令对应的轨迹点之后(右方)的轨迹点。当该最后一条指令是无条件分支指令时,控制器1154按总线1117上的无条件分支类型控制选择器738选择总线1117上的分支目标放上指针631,跳转至该目标,结束轨迹点不会被执行。当该最后一条指令是条件分支指令时,控制器1154按总线1117上的条件分支类型控制循迹器暂停,等待处理器核601产生的分支判断信号635。此时类型译码器1152译出总线1121上的指令类型为无条件分支,控制选择器1116选择总线1121。当分支判断信号635为‘分支’,控制器1154控制选择器738选择总线1117上的条件分支目标放上指针631。当分支判断信号 635为‘不分支’,控制器1154控制选择器738选择1116选择器的输出,将总线1121上的无条件分支目标放上指针631。一级缓存602按指针
631送出指令供处理器核601执行。
[0294] 上述三种方式都既适用于定长的指令或变长的指令。即并不要求结束轨迹点在轨道中的固定位置。此外,若结束轨迹点在轨道中的位置是固定的,则可以根据读指针631中BN1Y的值判断是否已经到达最后一条指令。第四种方式为轨道表中只有一种无条件分支类型,但循迹器根据该类型在轨道中所处位置将其分为两种类型。此方式中,指针631中的BN1Y被送进类型译码器1152而总线1121上的指令类型不需要译码。当所述BN1Y指向一条轨道中最后一个表项时,类型译码器1152控制选择器1116选择总线1121上的分支目标,在执行完总线1117上的指令后直接跳转到总线1121上的分支目标地址。当所述BN1Y 指向一条轨道中除最后一个表项之外的其他表项时,类型译码器1152控制选择器1116选择增量器736的输出。当执行完总线1117上的表项内容的相应指令后,下一条执行的指令为其顺序下一条指令。这种方式下处理器核中的PC则一直保持正确的值。这种方式适应定长指令。
[0295] 此外,当从总线1117上读出的轨道表610表项经控制模块1154译码其类型为条件分支指令时,本发明可以控制处理器核601沿分支中的一支猜测执行(speculate execution),以提高处理器的执行效率。请参见图11B,其为本发明支持猜测执行的实施例。
图11B中循迹器中与图11A中循迹器相比增添了选择器1162及寄存器1164,用于选择、存储分支猜测执行未选中的另一支暂存,以备猜测错误时使用。猜测执行方向可以由现有的静态预测,或动态分支预测(branch prediction)技术决定,也可由存于轨道表中对应分支指令的表项中的分支预测域决定。
[0296] 以猜测不分支为例,控制器1154在译出总线1117上的一个条件分支类型并获得不分支的预测值时,控制选择器1162及寄存器1164选择总线1117上的分支目标地址存入寄存器1164。同时控制器1154控制选择器738选择1116选择器的输出(其为分支指令的顺序下一条指令)供存入寄存器740,使指针631控制一级缓存602提供分支指令后的顺序下一条指令供处理器核601执行,并向处理器核标记这条指令为猜测执行。指针631也指向轨道表610中分支指令后顺序第一个表项,使其被放上总线1117。之后控制器1154按总线1117上的指令类型决定循迹器的后续方向,继续向处理器核提供指令。所有这些指令都被标记为猜测执行。当总线1161通知分支判断信号635为有效时,控制器1154 将预测的分支方向与635上的分支方向比较。若比较结果相同,则沿原猜测方向继续执行。若比较结果不同,此时控制器1154向处理器核601发送‘猜测错误’的信号,使处理器核清除所有带猜测执行标记的指令及其中间执行结果。同时控制器1154控制选择器738选择寄存器1164的输出,使分支未被猜测执行的一支的地址被用于控制一级缓存器602向处理器核601提供指令,并沿此继续执行。
[0297] 若猜测为分支,则控制器1154在译出总线1117上的一个条件分支类型并获得进行分支的预测值时,控制选择器1162及寄存器1164选择1116选择器的输出(其为分支指令的顺序下一条指令)存入寄存器1164。同时控制器1154控制选择器738选择总线1117上的分支目标地址供存入寄存器740,使指针631控制一级缓存602提供分支指令的分支目标指令供处理器核601执行,并向处理器核标记这条指令为猜测执行。指针631也指向总线1117上的分支目标地址指向的轨道表610中表项,使其被放上总线1117。之后控制器1154按总线1117 上的指令类型决定循迹器的后续方向,继续向处理器核提供指令。所有这些指令都被标记为猜测执行。当总线1161通知分支判断信号635为有效时,控制器 1154将预测的分支方向与分支判断信号635上的分支方向比较。若比较结果相同,则沿原猜测方向继续执行。若比较结果不同,此时控制器1154向处理器核 601发送‘猜测错误’的信号,使处理器核清除所有带猜测执行标记的指令及其中间执行结果。同时控制器1154控制选择器738选择寄存器1164的输出,使分支未被猜测执行的一支的地址被用于控制一级缓存器602向处理器核601提供指令,并沿此继续执行。
[0298] 现有的指令集转换技术通常用一个固定指令转换模块(有时将其称为译码器)将一种外部计算机指令集转换为内部指令集(有时称为微操作)后供执行内部指令集的处理器核执行。通常该转换模块位于存储外部指令的缓存和处理器核之间,处理器核提供的外部指令地址寻址缓存读出外部指令经转换模块转换为内部指令后供给处理器核执行。对外部指令的重复转换,不仅大幅增加功耗,而且时延较长的指令转换器在指令执行的关键路径上,需要较深的指令缓冲器(Instruction Buffer),大幅加深了处理器核的流水线,从而增加了硬件开销和分支预测失败时的性能损失。当转换模块位于缓存之前时,缓存内存储的是可被处理器核直接执行的内部指令,但因为内部指令(一般是定长指令)和外部指令(可以是变长指令)一般不是一一对应的,因此在分支转移时缺乏可靠地将分支目标指令的外部指令地址(一般由外部指令编译器产生的分支偏移量及外部分支指令地址相加产生,上述两者都以外部指令地址表达)转换为内部指令地址并以此在缓存中寻址正确的内部指令的方法及系统。导致现有的处理器宁愿承受上述因重复转换同一指令导致的功耗、性能、成本等损失,而将指令转换模块置于缓存与处理器核之间,而在一级指令缓存器存储外部指令的原因。虽然使用跟踪缓存、指令循环缓冲器等可以在程序执行路径(trace)命中或执行循环代码时避免所述实时地址转换,但跟踪缓存中会同时重复存储位于不同路径上的同一指令,造成很大的容量浪费,导致跟踪缓存的性能不高。这些存储器在某些特定条件下可以用特定的指令地址寻址,但无法让处理器核在任意条件下用指令地址可靠,高效地对存储内部指令的存储器实现如同正常缓存方式的寻址,不可避免地要经常,重复读取外部指令将其经转换器转换为内部指令,或者使用低效的软件方式将外部指令地址翻译成内部指令地址。总之,现有技术缺乏可靠,高效的方法及系统将外部指令地址转换为内部指令地址,是影响虚拟机效率的瓶颈。另外现有的指令转换器都是将固定的一种或少数种特定的外部指令集转换为内部指令集。
[0299] 采用本发明所述的指令集转换系统和方法则可以将转换得到的内部指令存储在缓存中,并由地址映射模块完成对处理器核产生的外部指令地址向内部指令地址的转换,使得处理器核可以直接对已经存储在缓存中的内部指令寻址,而不需要处理器核反复对存储外部指令的缓存寻址,读出外部指令后经指令转换器转换为内部指令后供处理器核执行,多次反复的对一级缓存中的同一外部指令进行转换,从而避免上述功耗,关键路径上长时延,及额外的硬件开销成本问题。本发明所述的可配置指令转换器可以根据配置将任意种不特定的外部指令集转换为内部指令集。
[0300] 本发明所述的指令集转换系统主要由转换器和地址映射模块两大部分组成。本发明所述的转换器可以是固定转换也可以是可配置的。根据本发明技术方案,当一个处理器核可执行的指令集(即内部指令集)中的指令与任意需要运行的指令集(即外部指令集)中的指令一一对应时,可配置转换器就可以与处理器核共同使用,将外部指令转换为内容指令供所述处理器核执行。此时,外部指令中分支指令对应的分支目标地址与该分支指令对应的内部指令的分支目标地址是相同的,不需要进行外部地址到内部地址的映射。请参考图12,其为本发明所述包含可配置转换器的处理器系统的一个实施例。在本实施例中,外部指令1205经可配置转换器1202转换后被存储在指令存储器1203中,供处理器核1201直接执行。在此,指令存储器1203中存储的是内部指令,可配置转换器1202的功能和结构与图2实施例中的转换器200类似。由于外部指令和内部指令一一对应,因此外部指令地址与内部指令地址是相同的,当处理器核 1201执行一条分支指令,如果不执行分支,则以分支指令地址增‘1’作为下条指令的地址送到指令存储器1203读取内部指令供处理器核1201执行;如执行分支,按外部指令的分支偏移量加上分支指令的地址产生的外部指令分支目标地址,与内部指令分支目标地址相同;因此可以直接使用该外部指令分支目标地址对指令存储器1203寻址,从中读出分支目标内部指令。不需要将外部指令地址转换为内部指令地址。当执行非分支指令时,其下条指令的地址产生方式与上述分支指令不执行分支时相同。
[0301] 采用本发明所述的可配置转换器的处理器系统能够根据需要进行配置,从而执行不同的外部指令集。请参考图13A,其为本发明所述可配置转换器的一个框图实施例。在本实施例中,存储器201如图2所述存储了内部指令集和外部指令集的转换规则。提取器1302(即图2中操作码提取器211,213,215)则如前所述从总线1205送来的外部指令中抽取出外部指令操作码作为寻址地址经总线1307送到存储器201寻址读出对应于该外部指令的转换规则,其中的掩膜及移位控制信号经总线1308控制移位模块1303(即图2中221,223,225,227) 对外部指令中各个指令域(如操作数的寄存器堆地址)提取,掩膜并移位到内部指令的格式规定的位置;其中的内部指令操作码也经总线1309送出,并按规则移位到内部指令格式规定的位置,与上述掩码、移位后的指令在合并模块 1304(与图2中207相似)中合并为内部指令,经总线1306输出。这样,本发明所述可配置转换器就完成了将外部指令转换为内部指令的操作;改变存储器 1301中的转换规则就可以使指令转换器与执行内部指令的处理器核的组合执行不同的外部指令集。
[0302] 此外,还可以在所述可配置转换器中增加一个寄存器用于存储外部指令是定长(Fix Length)还是变长(Variable Length)的信息。当该寄存器被配置为定长(例如被配置为‘0’)时,则表示外部指令在外部指令块中的边界是对齐的,因此在转换时可以从外部指令块的起始地址开始转换。当该寄存器被配置为变长(例如被配置为‘1’)时,则表示外部指令在外部指令块中的边界不一定对齐,此时只能对目标指令开始直至该外部指令块中最后一条尚未被转换的指令进行转换。
[0303] 进一步,可以在存储器1301中存储复数种外部指令集的转换规则,其中每种外部指令集各有其地址空间,不同的程序线程选择不同的转换规则地址空间。此时在图2中控制提取外部指令操作码的寄存器212,214,216之外再增设一个寄存器存储该线程对应的指令集转换规则的存储器201基地址。另将上述寄存器增设为复数组,每组对应一种外部指令集,由选择器选择。并在处理器的存储器管理器MMU中的线程号存储器(一般在TLB中)对应每条线程添加一个存储域,存储选择上述复数组寄存器的选择信号。请参考图13B,其为本发明所述可配置转换器中存储器的一个实施例。例如寄存器组1311存储的是P指令集的操作码提取位置及其相应指令转换规则在存储器201中的基地址‘m’;寄存器组1311存储的是Q指令集的操作码提取位置及其相应指令转换规则在存储器201中的基地址‘n’。
[0304] 当线程J的外部指令由指令转换器转换时,MMU中J线程的选择信号316 控制选择器315选择寄存器组1311的输出。此时,操作码提取器1302(即图2 中操作码提取器211,213,215)受寄存器组1311的控制对被转换的外部指令提取操作码;该操作码与也来自寄存器组1311的基地址‘m’被加法器1318相加后作为地址对转换规则存储器201寻址,控制指令转换器的操作,将P指令集指令转换成内部指令存入图12中指令存储器1203。当线程K的外部指令由指令转换器转换时,MMU中K线程的存储器的选择信号316控制选择器315选择寄存器组1313的输出。此时,操作码提取器1302受寄存器组1313的控制对被转换的外部指令提取操作码;该操作码与也来自寄存器组1313的基地址‘n’被加法器1318相加后作为地址对转换规则存储器201寻址,控制指令转换器的操作,将Q指令集指令转换成内部指令存入图
12中指令存储器1203。如此处理器核在从J线程切换到K线程时,实际上是从执行P指令集指令转换为执行 Q指令集指令。如此可实现在一个本发明所公开的虚拟机中执行含有复数种外部指令集中的指令的程序。当然用复数个指令转换器,每个负责转换一种外部指令集,也可实现同样的功能。
[0305] 某些计算机指令集中的指令上的复数个域之间是正交的(Othogonal),即这些域之间是独立的,比如有些指令集除操作码域外还用指令中某些域中的编码来代表对特定存储器或寄存器的寻址,这些域也需要由转换规则进行映射,而非对外部指令中的地址进行移位就满足内部指令的要求。此时可以用复数个转换规则存储器及相应逻辑对应复数个正交的指令域,使得转换规则存储器的总表项数(行数)控制在一个合理的数目。请参考图13C,其为本发明所述可配置转换器中存储器的另一个实施例。与图13A相比,图13C中增添了一个转换规则存储器1321及其专用的提取器1322(与1302同样功能),及移位逻辑1323 (与1303同样功能)。另外还新增了如同图13B例中的寄存器组1311及1313 的寄存器组(图
13C中位显示)以控制新增的存储器1321及其相应逻辑。新增的逻辑中存储器1321及掩膜移位逻辑1323的输出都被送到合并其1304与原有存储器201及掩膜移位逻辑1303的输出合并。两套存储器及其相应逻辑可以分工协同处理同一计算机指令集,各负责外部指令上部分域的转换,在合并器1304 中合并成内部指令。两套存储器及其相应逻辑还可以独立操作,各自独立负责将一种外部指令转换为内部指令,实现如图13B的功能。为此可增设一个可写的寄存器,由这个寄存器的状态决定图13C的指令转换器是以协作,或独立方式操作。
[0306] 此外图13A中合并模块1304还要根据内部指令的转换顺序产生与外部指令的映射关系,例如图8A或图8B所示的例子,以供填写块地址偏移映射器YMAP 等。合并模块1304还产生写地址,控制将内部指令填入指令存储器1203等。如果内部指令是定长的则每对指令存储器1203写进一条指令,一级缓存写地址加上一个固定长度,如4个字节。如果内部指令是变长的则存储器1301中对应该指令的转换规则中要记载该指令的长度,每对指令存储器1203写进一条指令,一级缓存写地址加上从存储器1301输出的该指令的长度,作为下一指令的起始地址。也可以将一个内部指令块的复数条内部指令分次存入一个缓冲器,将整个内部指令块一起写入指令存储器1203。也可以由其他模块产生上述映射关系及写地址,如在图7A,图7B中由扫描转换器中负责扫描的部分负责。
[0307] 采用本发明所述可配置转换器的处理器系统可以在外部指令集与内部指令集的指令一一对应的情况下工作。然而,当两种指令集的指令不一一对应时,会有一条外部指令被转换为多条内部指令,或多条外部指令被合并为一条内部指令的情况发生;又或者外部指令或内部指令中至少一种为变长指令;从而有可能导致外部指令的分支目标地址与相应内部指令的分支目标地址不一一对应。此时,可以用本发明所述的地址映射模块结合指令转换器实现指令集转换及指令地址的映射。请参考图14,其为本发明所述包含指令转换器和地址映射模块的处理器系统的一个实施例。在本实施例中,外部指令经转换器1202转换后被存储在指令存储器1203中,供处理器核1201直接执行。即指令存储器1203 中存储的是内部指令,且指令存储器1203根据内部指令地址寻址输出相应的内部指令。在转换过程中,转换器1202还产生外部指令与相应内部指令的对应关系存储到地址映射模块1404中。当处理器核1201按指令顺序执行指令存储器 1203中的内部指令时,其程序计数器PC每次增加‘1’,使得相应的内部指令地址增‘1’,从而对指令存储器1203寻址以读出下一条内部指令。当处理器核 1201执行分支指令产生分支目标地址时,由于该分支目标地址是以外部指令地址形式表示的,因此被送到地址映射模块1404按前述方法转换为对应的内部指令地址后再送到指令存储器1203寻址以读出相应的内部指令(即分支目标指 令)。具体地,若地址映射模块1404中已经存储了所述外部指令地址对应的映 射关系,则说明该外部指令对应的内部指令已经被存储在指令存储器1203中, 可以直接将所述外部指令地址转换为内部指令地址输出。若地址映射模块1404 中尚未存储所述外部指令地址对应的映射关系,则说明该外部指令尚未被转换 为内部指令。此时,由转换器1202将包含所述外部指令在内的至少一条外部指 令转换后存储到指令存储器1203中,并将对应的映射关系存储到地址映射模块 1404中,这样就可以将所述外部指令地址转换为内部指令地址输出。在此,转 换器1202可以是固定将一种特定外部指令转换为内部指令的转换器,也可以是 图2,图3A-3B,图4A-
4B,图5A-5F及图13A、B中公开的可配置指令转换器。
[0308] 根据本发明技术方案,地址映射模块1404可以由映射表构成。所述映射表 可以由外部指令地址寻址,其表项内存储了相应内部指令的地址。在此基础上, 所述映射表可以有多种具体实现方式。
[0309] 方式一:映射表中的每个表项均由外部指令地址的最小单位(例如:字节) 寻址,每个表项中都存储了该表项对应的外部指令对应的内部指令所在的内部 指令块的块地址(即内部指令块在指令存储器1203中的块号),以及内部指令 在所述内部指令块中的块内地址偏移地址。这样,在对外部指令地址进行转换 时,可以根据所述外部指令地址对映射表的表项寻址,读出相应表项中的内部 指令块地址及块内偏移地址,完成地址转换。
[0310] 方式二:当外部指令的长度不固定时,可以对方式一所述映射表进行压缩 以消除空的表项。以外部指令按字节寻址为例,由于外部指令长度不固定,只 有每条外部指令起始地址字节才占据一个表项,存储该外部指令的块内偏移以 及相应的内部指令块内偏移地址,而其余外部地址非起始地址字节不占据表项。 在此,映射表每行对应一个外部指令块,可以由外部指令块地址寻址。这样, 在对外部指令地址进行转换时,可以根据所述外部指令的块地址对映射表的行 寻址,读出整行内容。之后,用所述外部指令的块内偏移地址对该行所有表项 中的外部指令块内偏移地址进行匹配,选择并输出匹配成功项中存储的内部指 令地址,完成地址转换。
[0311] 方式三:映射表中的每行由两部分组成,第一部分包含数据的位数与一个外部指令块包含多少个最小地址单位相同(例如,数据位数与外部指令块包含的字节数相同),第二部分包含数据的位数与一个内部指令块可能包含的最多内部指令数相同。第一部分中对应各外部指令起始地址(即起始字节)的数据置为‘1’,其余均为‘0’,而第二部分中对应各外部指令相应第一条内部指令对应的数据置为‘1’,其余均为‘0’,具体格式可以参考图8B。这样,在对外部指令地址进行转换时,可以根据所述外部指令的块地址对映射表的行寻址,读出整行内容(包括两个部分)。之后,根据所述外部指令的块内偏移地址对第一部分直至该块内偏移地址字节对应的数据为止的‘1’进行加‘1’计数,再对计数结果根据第二部分中的‘1’进行减‘1’计数,直到计数结果为‘0’,此时第二部分中的计数位置对应的就是内部指令的块内偏移地址,完成地址转换。如图8C的装置可以高效完成上述映射。
[0312] 进一步,可使外部指令块与内部指令块有固定的对应关系(如一个存储外部指令的二级缓存块可以等分成两个二级缓存子块,其中每个子块对应一个存储内部指令的一级缓存块)。如此可以将外部指令与内部指令的映射操作分解为块地址的映射操作(因为有对应关系,所以易于实现),以及块内偏移地址的映射两个部分来实现以简化映射的难度。如此一级缓存块不一定每个表项含有有效的内部指令。以下以一级指令在一级指令块中从最小块内偏移地址(一般为‘0’)开始增序排列。如此对应每个指令块还需要存储其偏移地址最大的指令的偏移地址以提醒系统下个周期要提供按程序顺序下一条指令的一级缓存块地址。此外也需要一个块内偏移映射器根据该二级指令子缓存块与其对应的一级指令缓存块之间的映射关系(如上述三种方式等)提供分支目标的块内偏移映射。
[0313] 请参考图15,其为本发明所述包含可配置转换器和地址映射模块的处理器系统的另一个实施例。本实施例中转换器1202、指令存储器1203和处理器核 1201均与图12、14中的相同,另外还给出了地址映射模块的一种具体实施方式。在本例中,如果指令存储器1203缺失,可将相应的外部指令地址送往更外层次存储器获取相应的外部指令块经指令转换器1202如前述转换并填充到指令存储器1203中。以下各实施例的说明均假设指令存储器1203总是命中。
[0314] 地址映射模块由标签存储器1505(相当于前述实施例中的主动表604)、块内偏移映射器1504(为了简单明了,1504中包含图6中618偏移地址映射模块和622偏移地址映射器的功能)和结束标志存储器1506构成,三者的行均与指令存储器1203中的内部指令块对应。其中,结束标志存储器1506的每行存储了指令存储器1203中对应内部指令块的最后一条内部指令的块内偏移地址。可以在处理器核1201读取内部指令的同时在结束标志存储器1506中检查该内部指令是否为当前内部指令块中的最后一条。若该内部指令不是当前内部指令块中的最后一条,则下一内部指令的块内偏移地址就是该内部指令的偏移地址加一;否则,下一内部指令就是下一内部指令块的第一条内部指令。
[0315] 标签存储器1505中的每行存储了外部指令块地址(即标签),因此可以通过标签匹配找到该外部指令所在指令块对应的内部指令块在指令存储器1203中的位置,以及与该内部指令块同一行中块内偏移映射器1504中相应的映射关系、结束标志存储器1506中该指令块中最后一条内部指令的位置信息。与缓存结构类似,对于不同的存储器组织形式,标签存储器1505和指令存储器1203可以有不同的结构。具体地,以直接映射存储结构为例,所述外部指令的块地址可以被进一步分为标签和索引号,根据索引号对标签存储器1505中的行寻址读出相应行的内容后与块地址中的标签进行比较,若相等则匹配成功,否则匹配不成功。当匹配不成功时可以用该外部指令地址从更低的指令存储器中取得相应的外部指令块经指令转换器1202如前转换为内部指令块后按缓存替换规则写入指令存储器1203中,并由将外部指令中的标签写入标签存储器1505的同一行,将指令转换器1202产生的块内偏移映射关系存入块内偏移映射器1504、将1202 产生的该指令块最后一条指令的块内偏移量存入结束标志存储器1506的同一行。当然,标签存储器1505和指令存储器1203也可以被组织为其他任何合适的组织结构(例如:组相联或全相联结构),其具体匹配方法均与缓存中相应组织结构情况下的匹配方法相同,在此不再赘述。为了便于描述,在后面的实施例中均以直接映射结构为例进行说明,且假设标签匹配均成功。
[0316] 处理器核1201根据是否需要分支或跳转通过总线1508提供不同的指令地址。当一条指令地址经总线1508输出以控制指令存储器1203读取指令供处理器核1201执行时,1508上的块地址也被送到结束标志存储器1506中寻址读出该行的结束地址,与1508上的内部指令块内偏移地址进行匹配以检查该内部指令是否为内部指令块中的最后一条。如该指令不是内部指令块中最后一条指令时,则结束标志存储器输出的1507信号控制处理器核1201在下一时钟周期的指令块地址不变,块内偏移量增‘1’在下个周期放上总线1508。若是最后一条,则结束标志存储器输出的1507信号控制处理器核1201在下个周期输出下一指令块的外部指令块地址(由当前指令块地址增‘1’所得)并以‘0’作为内部指令的块内偏移地址,组合成指令地址放上总线1508。此时1507也控制将1508 上的指令块地址送往标签存储器1505匹配,如匹配,则总线1508上就是下一条指令的正确地址。在被执行的指令为非分支指令时,分支判断信号1509控制选择器1510选择总线1508上的块内偏移地址对指令存储器1203寻址读取下一周期的内部指令供处理器核1201执行。用于对指令存储器1203的块地址则在任何时候都来自总线1508。
[0317] 但当处理器核1201译码上述来自指令存储器1203的指令发现其为一条分支指令时,则按照指令进行分支判断。如果分支判断为‘不分支’,则下一周期产生的地址如同上述一般。分支判断信号1509控制选择器1510选择总线1508 上地址。如果分支判断为‘执行分支’,则以分支指令的外部指令地址加上分支指令中所含有的分支偏移量获得分支目标的外部指令地址经总线1508在下一周期送出。为了减少对地址值的存储,实际上处理器核只记录了分支指令(或其他指令)的内部指令地址。可以用例如图8B的映射关系,以图8C中的映射装置进行逆运算,即以内部指令地址送到译码器805,及内部指令映射关系送到 807作为输入,外部指令的映射用以控制矩阵803,则该装置的输出即为外部指令地址。也可以在进行指令转换时,将外部分支指令的外部块内偏移量加到该分支指令的分支偏移量,将其和作为分支偏移量记录到内部分支指令中。如此在处理器核1201执行到分支指令时,只需要将指令块地址(块内偏移量为‘0 ‘)加上分支指令中所记录的修正后分支偏移量,其和就是正确的外部分支目标地址,省却分支指令内部指令块内偏移量映射到外部指令块内偏移量的操作。
[0318] 该外部指令分支目标地址中的块地址经总线1508被送到标签存储器1505 匹配,也被送到块内偏移映射器1504读出该行的映射关系将1508上的外部块内偏移量映射为内部指令块内偏移量1512。分支判断信号1509控制选择器1510 选择1512作为块内偏移量送往指令存储器1203。1508总线上的块地址也被送往指令存储器1203。若标签存储器1505匹配成功,则以该地址取分支目标指令供处理器核执行。
[0319] 实际上在本实施例中,总线1508上的下一条指令的块地址(包含指令地址中标签及索引部分)一直是外部指令地址。其中索引部分被用于对所有存储器如1505,1504,1516及1203做行寻址。而1508上的下一条指令的块内偏移地址则根据指令的类型等可以是外部指令地址或内部指令地址。如果当前指令的类型为非分支指令或分支指令但不执行分支时,且该指令非内部指令块中最后一条指令,则下一条指令的块内偏移地址是内部指令格式(当前指令地址增‘1’,指向当前内部指令的下一条内部指令)。如果当前指令的类型为非分支指令或分支指令但不执行分支时,且该指令是内部指令块中最后一条指令,则下一条指令的块内偏移地址‘0’可以被视为外部指令格式,也可被视为内部指令格式。如果当前指令的类型为分支指令且执行分支时,则下一条指令的块内偏移地址是外部指令格式,要经过块内偏移映射器1504映射为内部块内偏移指令地址才可用于从指令存储器1203中读取指令。如果将外部地址中的索引部分视为内部指令地址的块地址,则指令存储器1203在任何时刻都是由内部指令地址寻址。如果指令存储器1203及指令地址映射模块的组织方式是多路组,则相似地内部指令的块地址由路号(Way number)与外部指令中的索引部分组成。即本实施例中公开的虚拟机中的地址映射模块,可以将由外部指令编译器产生的外部指令地址直接映射为内部指令地址访问存储内部指令的指令存储器,供处理器核执行。或者也可以将内部指令地址的块地址视为等同于外部指令地址的块地址(包含标签部分及索引部分)。本虚拟机既避免了现有软件虚拟机通过软件将外部指令地址映射为内部指令时的低效及储存庞大的地址映射表的开销;也避免了现有硬件虚拟机由外部指令地址对存有外部指令的指令存储器寻址,读出外部指令,将其由指令转换器转换为内部指令再由处理器核执行,因为多次重复转换同一条指令导致的高功耗。本虚拟机的一个技术特征是外部指令先经过指令转换器转换才存入指令缓存,因此指令缓存中储存的是内部指令,可不需指令转换直接执行。
[0320] 根据本发明技术方案,还可以增加分支目标表用于记录分支目标指令的内部指令地址,使得重复执行同一条分支指令发生分支转移时不必每次都需要将分支目标指令的外部指令地址转换为内部指令地址。请参考图16,其为本发明所述包含分支目标表的处理器系统的一个实施例。在本实施例中,可配置转换器1202、指令存储器1203、处理器核1201、标签存储器1505、块内偏移映射器1504和结束标志存储器1506均与图15中的相同。不同之处在于增加了分支目标存储器(BTB)1607以及选择器1608的连接方式与图15种选择器1510不同。在此,分支目标存储器1607中存储了以内部指令地址形式记录的分支目标历史信息,即存储了该分支指令本身的内部指令地址,及其分支目标的内部指令地址,及之前执行该分支指令时是否转移的预测信息。分支目标存储器1607 并不必要与其他存储器行行对应。分支目标存储器1607输出其分支预测信号 1511以控制选择器1608选择来自总线1508或分支目标存储器1607的指令地址。
[0321] 这样,在处理器核1201经总线1508输出内部指令地址到指令存储器1203 寻址的同时,还将该内部指令地址送到分支目标存储器1607与存储在其中的所有分支指令本身的内部指令地址进行匹配,并输出匹配成功项包含的分支目标内部指令地址和预测信息。当前指令为非分支指令时或虽为分支指令但分支预测为不分支时,下一时钟周期分支预测选择信号1511控制选择器1608选择总线1508上的指令地址访问指令存储器1203,其操作与图15实施例在执行同样指令时的操作相同,在此不再赘述。当前指令为分支指令且分支预测为执行分支时,分支预测选择信号1511控制选择器1608选择分支目标存储器1607输出的内部指令分支目标地址访问指令存储器1203。当前指令为分支指令但在分支目标存储器1607中未匹配命中时,则在分支目标存储器1607中按置换规则分配一个表项以存储分支指令的内部指令地址。如果分支判断为‘执行分支’,则如图15例处理器核1201产生外部指令地址经总线1508送出。以该外部指令地址如图15例经标签存储器1505匹配确认的指令块地址,及经块内偏移映射器 1504映射得到的内部指令块内偏移量1512一同作为内部指令分支目标地址,以及分支预测值存储进分支目标存储器1607中新分配表项中的相应域。该内部指令分支目标地址也被分支目标存储器1607旁路经选择器1608访问指令存储器 1203。如果分支判断为‘不分支’,则将分支目标存储器1607中新增表项置为无效,分支预测选择信号
1511控制选择器1608选择总线1508上的指令地址(此时为分支指令的下一条顺序内部指令的地址)访问指令存储器1203;此时1508 上的指令地址于图15例中在同等条件下产生的地址相同,不再赘述。当执行分支指令判断分支预测为错误时,处理器核1201清除按错误预测执行的指令的中间结果,执行正确的分支,并更新分支目标存储器1607中存储的分支预测。
[0322] 请参考图17,其为本发明所述包含分支目标表和循迹器的处理器系统的另一个实施例。本实施例中的转换器1202、指令存储器1203、处理器核1721、标签存储器1505、块内偏移映射器1504、结束标志存储器1506和分支目标存储器1607均与图16中的相同。不同之处在于,本例中还包括下块地址存储器1709、选择器1711、或逻辑1707和循迹器,并通过循迹器产生内部指令地址,使得处理器核1701只需要输出外部指令地址即可。
[0323] 本实施例中新增的下块地址存储器1709与标签存储器1505、块内偏移映射器1504、结束标志存储器1506均行行对应,其格式请参考图18A的一个实施例。在本例中下块地址存储器每行包含两个部分:第一部分1801存储了该行对应的内部指令块的上一内部指令块的X地址;第二部分1802存储了该行对应的内部指令块的下一内部指令块的X地址。这样,使用当前内部指令块的块地址 (即循迹器输出的X地址)对下块地址存储器1709寻址,即可读出顺序地址的上一、下一内部指令块的相应X地址。而选择器1711则根据处理器核
1201输出的分支转移是否发生的TAKEN信号1713对下块地址存储器1709输出的下一内部指令块的X地址与Y地址‘0’构成的下一内部指令块第一条内部指令地址,及分支目标存储器
1607输出的分支目标内部指令地址选择后送往选择器 1705。或逻辑1707则在当前内部指令为内部指令块最后一条指令、或发生分支转移时,控制选择器1705选择来源于选择器
1711的输入。
[0324] 所述循迹器由寄存器1701、增量器1703和选择器1705构成。其中,寄存器1701中存储,并输出由块地址(以下简称为X地址)和内部指令块内偏移地址(以下简称为Y地址)构成的当前内部指令地址1723。当前内部指令地址 1723用于对指令存储器1203寻址读取其中一行中的内部指令送到处理器核 1721译码,并同时访问下块地址存储器1709,结束标志存储器1506的相应一行,也被送到分支目标存储器(BTB)1607中匹配。1723中的X地址寻址结束标志存储器1506中读取相应的一行中的内容与1723上的Y地址进行匹配以检查该指令是否为内部指令块中的最后一条。若该指令不是最后一条且处理器核1721对该指令译码结果判断为不是分支指令,则或逻辑1707控制选择器1705 选择寄存器1701输出的X地址及增量器1703输出的增‘1’后的Y地址存储到寄存器1701中作为下个时钟周期的当前内部指令地址。
[0325] 若该指令是最后一条内部指令或是分支指令,则选择器1705在或逻辑1707 的控制下选择选择器1711的输出存储到寄存器1701中作为下个周期的当前内部指令地址。具体地,若当时分支判断信号(TAKEN)1713为‘不分支’,则控制选择器1711选择下块地址存储器1709中,由前述当前内部指令地址1723 寻址提供的下一内部指令块第一条内部指令的地址,经选择器1705选择后存储到寄存器1701中。若当时分支判断信号(TAKEN)1713为‘执行分支’,则控制选择器1711选择分支目标存储器1607中,由当前内部指令地址1723匹配获得的分支目标内部指令地址,经选择器1705选择后存储到寄存器1701中。也可以用分支目标存储器1607中存储的分支预测值代替处理器和1721产生的分支判断信号1713控制选择器
1711及1705。这种方式需要核实分支预测是否正确及一旦预测错误可以修正的机制。
[0326] 本实施例中,控制指令存储器1203等的内部指令地址由循迹器提供。处理器核1721仅在当前内部指令地址1723与分支目标存储器1607内容匹配不命中,或在下块地址存储器1709寻址遇到无效表项,且在分支判断及结束指令判断选择了上述不命中或无效指令地址时才需要提供外部指令地址1708作为下一周期的地址。具体地,在上述分支目标存储器1607内容匹配不命中时,处理器核1721 如图16例同样方式计算外部指令分支目标地址
1708送往标签存储器1505匹配,也送到块内偏移映射器1504映射。匹配映射所得的内部指令分支目标地址如图 16例同样方式被存入分支目标存储器1607的表项,并被存入寄存器
1701作为当前内部指令地址1723。在上述下块地址存储器1709寻址遇到无效表项时,处理器核1721如图16例同样方式计算外部指令下块地址1708送往标签存储器 1505匹配。匹配所得的内部指令下块地址被存入上述无效表项中的1802域,也要将本地址块的块地址存入下块地址存储器1709中对应上述匹配所得的下块地址所指向的一行中的1801域。
[0327] 需要说明的是,由于各个顺序地址的内部指令块通过下块地址存储器1709 中存储的信息联系在一起,即可以根据当前内部指令块的X地址对下块地址存储器1709寻址读出下一内部指令块的X地址1802。如果某个内部指令块被替换出指令存储器1203,可以根据该内部指令块的X地址对下块地址存储器1709 寻址读出其中存储的上一内部指令块的X地址1801,再根据该1801中的X地址对下块地址存储器1709寻址找到相应行,将该行中存储下一内部指令块(即被替换的内部指令块)X地址的部分1802置为无效,从而反映替换后的地址关系。如果指令存储器以组相联方式组织,则一个指令块的下个指令块的行地址是本指令块的行地址增‘1’,可以缺省;1801及1802域记录路号(Way number) 即可实现其功能。
[0328] 进一步地,可以将上述技术扩展到包含更多层指令存储器的系统。请参考图19,其为本发明所述包含两层指令存储器的处理器系统的一个实施例。在本例中,转换器1202、指令存储器1203、处理器核1201、块内偏移映射器1504、结束标志存储器1506、分支目标存储器1607、下块地址存储器1709、选择器 1711、或逻辑1707和循迹器均与图16中的相同。不同之处在于,指令存储器 1203、块内偏移映射器1504、下块地址存储器1709、结束标志存储器1506和分支目标存储器1607共同构成第一级指令存储层次,而指令存储器1903、标签存储器1905和块地址映射模块1904(与图6中620类似功能)共同构成第二级指令存储层次。在此,指令存储器(以下改称一级指令缓存器以资与1903明确区分)1203中存储的是内部指令,而指令存储器1903中存储的是外部指令。指令存储器1903中的外部指令在被处理器核
1201执行前先被转换器1202转换为相应的内部指令后存储在一级指令缓存器1203中供处理器核1201取用。
[0329] 在本实施例中一个外部指令块可以对应多个内部指令块。在本例中,指令存储器1903中包含了一级指令缓存器1203中的所有内部指令对应的外部指令,因此可以使用一个标签存储器1905同时为两个存储层次服务。
[0330] 在本实施例中,标签存储器1905的行与指令存储器1903中的外部指令块一一对应,其中存储有相应外部指令块的标签地址。此外,本例中还增加了块地址映射模块1904,也与标签存储器1905行行对应,每行存储了该外部指令块在一级指令缓存器1203中对应的单数个或复数个内部指令块的1X地址及有效信号(当该外部指令块对应的一个内部指令块尚未被存储到1203中时,其相应 1X地址的有效信号为无效)。请参考图18C,其为所述两个存储层次虚拟机系统中外部指令地址格式的示意图。在此,外部指令地址由块地址、子块号1813和块内偏移地址1814构成。其中,块地址对应指令存储器1903中的外部指令块,可以被进一步分为标签1811和索引号1812,并可根据索引号1812对标签存储器1905的行寻址读出存储在其中的标签信息,与地址中的标签1811比较以确定外部指令块地址是否匹配成功。
索引号1812也可对块地址映射模块1904中的存储器寻址选出其中一行,子块号1813选择该存储器中的一列。
[0331] 请参考图20,其为本发明所述块地址映射模块1904结构的一个示意图。所述块地址映射模块由写入模块2001、输出选择器2007,以及存储器构成。此例中每个外部指令块被分为两个子块,每个子块中的外部指令被指令转换器1202 转换为内部指令存入一级指令缓存中的一个一级指令块。因此1904中的存储器每一行对应于二级指令缓存1903中的一个(二级)外部指令块,存储器也被分为两列2003及2005对应每个外部指令块中的两个子块由子块号1813选择。存储器的每个表项对应一个子块,其中存有与该外部指令子块对应的(一级)内部指令块的一级指令块地址(1X地址)。如此块地址映射模块1904可以将外部指令块地址映射为与其相应的内部指令块地址,将外部指令子块与其相应的内部指令块联系起来。并且一个外部指令子块的相应内部指令块可以被放置在一级指令缓存中任意一个一级缓存块中,因此一级指令缓存可以是全相联组织形式。
[0332] 具体地,对块地址映射模块1904中存储器写入时由外部指令地址中的子块号1813控制写驱动器2001选择驱动存储器列2003或2005,由索引地址1812 选择存储器中一行供写入相应的内部指令1X地址(即图20中的1X)。对块地址映射模块1904中存储器读出时由索引地址1812选择存储器中一行读出,由外部指令地址中子块号1813控制选择器2007选择存储器列2003或2005的数据输出。
[0333] 回到图19,对于第一级指令存储层次,其工作原理和运行过程与图17实施例类似,不同之处仅在于当前内部指令地址1723与分支目标存储器1607内容匹配不命中,或在下块地址存储器1709寻址遇到无效表项,且在分支判断及结束指令判断选择了上述不命中或无效指令地址时的处理有所不同。如图17实施例一样,此时处理器核1721提供外部指令地址1708作为下一周期的地址。不同的是该外部指令地址不再直接由图17中在本层次中的标签存储器1505转换,而是以该外部指令地址中的索引1812读出标签存储器1905中的一个表项与外部指令地址中的标签1811匹配,以外部指令地址中的索引1812及子块号1813 对块地址映射模块1904寻址。如标签匹配命中,且1904中读出的1X地址有效,说明所需的内部指令已存储在一级指令缓存器1203中。此时将读出的1X地址经总线1906送回第一级指令存储层次填充无效的下块地址存储器1709中表项;或以该1X地址寻址块内偏移映射器1504将总线
1708上的外部指令块内偏移地址映射为内部指令块内偏移地址,1X地址连同上述内部指令块内偏移地址构成内部指令分支目标地址(1Y地址)存入匹配未命中的分支目标存储器
1607表项。此后操作与图17例中相同。
[0334] 如标签匹配命中,且从1904中读出的1X地址无效,说明所需的内部指令尚未存储在一级指令缓存器1203中。此时以总线1708上的外部指令地址对二级缓存1903寻址,将相应外部指令子块送到指令转换期1202转换为内部指令块存储进一级指令缓存器1203中由缓存置换逻辑指定的一级缓存块,并将该一级缓存块的1X地址存入1904中外部指令指向的表项(即原读出无效的表项),并将该地址设为有效。指令转换过程中产生的块内偏移映射关系,以及结束标志也被写入块内偏移映射器1504及1506中由该1X地址指向的行。将读出的 1X地址如前例经总线1906送回第一级指令存储层次存入无效的下块地址存储器1709中表项,或连同映射产生的内部指令块内偏移地址存入匹配未命中的分支目标存储器1607表项。此后操作与图17例中相同。
[0335] 如标签匹配未命中,说明所需的指令尚未存储在二级指令缓存1903中。此时将总线1708上的外部指令地址送到更低层的存储器取外部指令块填入二级指令缓存1903中由缓存置换逻辑指定的一个二级缓存块。同时将总线1708上外部指令中的标签1811存入标签存储器1905中与上述二级缓存块相应的表项,将块地址映射模块1904中与上述二级缓存块相应的两个表项均置为无效。之后按上述标签匹配命中但寻址获得的块地址映射模块中1X地址无效的情况执行。
[0336] 当外部指令为定长指令时,外部指令块或子块的边界与一条外部指令的起点重合。因此无论是因为顺序执行进入、还是因为分支转移进入该外部指令块 (或子块)时,都可以从该外部指令块或子块的边界开始将完整的块或子块转换成相应的内部指令块存储到内部指令存储器中。当外部指令集是一种变长指令集时,一个外部指令块(或子块)中第一条外部指令的起始地址可能不一定与块(或子块)的边界重合。这种情况下,当分支转移进入一个外部指令块时,只能对从分支目标指令开始至该外部指令块结束的部分外部指令块进行转换并存储在一个内部指令缓存块以供处理器核执行;而对于该分支目标指令之前的指令则要等待下一次分支目标或顺序进入该外部指令块时其起始点落在这些指令上才能进行转换并将转换得到的内部指令添加进上述内部指令块。可以修改转换得到的内部指令在一级指令缓存器1203中的存储形式以适应这种情况,并定义每条外部指令属于其开始地址所在的外部指令块。
[0337] 请参考图21,其为本发明所述外部指令与块边界不对齐情况下指令存储器存储内部指令的一个实施例。外部指令块2101为指令存储器1903中的一行外部指令块(或子块),内部指令块2102为一级指令缓存1203中与外部指令块2101 对应的一行内部指令块。假设第一次分支转移的目标指令为外部指令2105,可以从目标指令2105开始一直到该指令块转换完毕,存入内部指令缓存块。因此可以依然按照地址递增的顺序存储内部指令,但将转换得到所有内部指令的最高地址与内部指令块2102的地址最高位(MSB)处(即图21中内部指令块2102 的最右侧)对齐。这样,外部指令2105对应的内部指令2106就被存储到如图 21所示位置,且从外部指令块2101中从指令2105开始的所有外部指令对应的内部指令均被按地址顺序存储到内部指令块2102中如图21所示的阴影部分中。
[0338] 此外,在本实施例中,指令存储器1903和1203的每行都增加了一个指针,分别用于指向外部指令块中已经被转换的第一条外部指令(如图21中指向内部指令2105的指针2103),以及内部指令块中已经被存储的第一条内部指令(如图21中指向内部指令2106的指针2104)。这样,当再次因顺序执行或分支转移进入该外部指令块时,就可以比较进入时外部指令块内偏移地址和所述指针 2103,确定目标指令是否已被转换。进一步地,如果确定新的目标指令尚未被转换,则对外部指令块2101中从该新的目标指令开始直至指针2103指向的外部指令之前的所有外部指令转换后,将转换得到的所有内部指令的最高地址与内部指令块2102中指针2104指向的地址的前一地址对齐,并依然按照地址递增的顺序存储内部指令。同时分别将指针2103、2104的值更新为指向所述新的目标指令在外部指令块2101中的位置,及该新的目标指令对应的内部指令在内部指令块2102中的位置。块内偏移映射器
1504中的内部指令映射关系也按高位对齐的方式存放,与内部指令缓存块一致。可以将上述两个指针在块内偏移映射器1504中的每行中实现。
[0339] 根据本发明技术方案,当采用图21实施例所述内部指令存储方式时,每个内部指令块的第一条指令不一定位于该内部指令块的起始地址(即Y地址‘0’)。因此需要对所述处理器系统中的下块地址存储器进行相应修改。请参考图18B,其为本发明所述下块地址存储器格式的另一个实施例。在本例中下块地址存储器每行除了包含图18A实施例中的第一部分1801和第二部分1802外,还增加了一个第三部分1803,用于存储了该行对应的内部指令块的下一内部指令块中第一条内部指令的1Y地址。这样,第二部分1802和第三部分1803共同构成了所述下一内部指令块第一条内部指令的地址,使得在因为外部指令边界不对齐而导致内部指令没有从内部指令块LSB开始存储的情况下,依然能根据当前内部指令块的块地址(即1X地址)对下块地址存储器寻址读出相应地址以找到下一内部指令块的第一条指令。图21及图18B的格式也可以应用于图15,图16,图17实施例中以处理外部指令起始地址与外部指令块边界不对齐的情况。
[0340] 图21及图18B阐述了外部指令子块与内部指令块具有严格一一对应映射关系情况下解决指令与块边界不对齐问题的一个实施例。图22为本发明所述块地址映射模块的另一个实施例,描述一种外部指令块与内部指令块间弹性映射以解决指令与块边界不对齐问题的实现方式,可以应用在图19的实施例中。在此例中,以一个外部指令块中的指令可被转换为内部指令放入最多三个(可以是任何数目)内部指令块为例,则块地址映射模块的主体部分被分为3个存储器2201、2202和2203,这三个存储器的每行均与一个外部指令块对应,且每行由两个存储域组成,分别用于存储该外部指令段的起始外部指令在其所在外部指令块中的块内偏移地址(如图中的2Y),以及该子块对应的内部指令块在一级指令缓存器1203中的块地址(如图中的1X)。此外,这三个存储器的相应行之间还具有通路2205和2206,可以分别将存储器2201任意行的内容右移到存储器2202的相应行中,以及将存储器2202任意行的内容右移到存储器2203的相应行中。
[0341] 当一个外部指令块第一次作为分支目标被访问时,从分支目标的外部指令块内偏移地址(2Y)起该外部指令块的所有完整指令都被转换为内部指令依次放入一个内部指令块。该2Y值以及上述内部指令块的块地址(1X)被存入图 20中存储器2201中外部指令块地址(2X)所指向的一行,以记录块地址为该 1X的内部指令块中第一条内部指令对应该2X外部指令块中块内偏移为该2Y 的外部指令。如果上述内部指令块中放满了还有更多的内部指令,则分配另一个内部指令块存放这些溢出的内部指令,并将溢出内部指令中第一条对应的外部指令的块内偏移地址(2Y)连同新分配内部指令块的块地址(1X)存入存储器2202中2X指向的一行。外部指令与内部指令的块内偏移映射关系也被存入图19中块内偏移映射器1504中由1X寻址的行。
[0342] 进一步,分支目标的外部偏移地址2Y与块内偏移映射器1504中由相应的内部指令块地址1X指向的映射关系映射为内部指令块内偏移1Y。至此,由分支目标开始的外部指令块已经被指令转换器1202转换为内部指令;外部指令块地址2X也已由块地址映射模块1904映射为内部指令块地址1X,外部指令块内偏移地址2Y也被块内偏移映射器1504映射为内部指令偏移地址1Y。更进一步,该分支目标内部指令地址1X,1Y可被存入分支预测模块1607中,供循迹器选用。
[0343] 回到图20,下一次该外部指令块被访问时,以访问地址中的外部指令块地址 2X对存储器2201,2202与2203寻址读出同一行送入比较器2204。访问地址中的外部指令块内指令偏移地址2Y在比较器2204中与从各存储器读出的各2Y 进行比较,选择第一个其2Y值小于访问地址中2Y值的存储器所存储的的1X 值作为块地址映射模块1904的输出1906。后续操作与前述相同。如果存储器 2201中的2Y(其值是块地址映射器1904中所有存储器中最小的)仍大于访问地址的BN2Y,则访问目标指令仍未转换为内部指令,此时系统控制指令转换器 1202将从访问目标开始一直到存储器2201存储的2Y值之前的外部指令都转换为内部指令存入一级缓存块置换逻辑指定的一级缓存块。同时图20中存储器 2202中由访问地址中的外部指令块地址2X指向的行被右移到2203中同一行,存储器2201中由该2X指向的行被右移到2202中同一行,而访问目标的2Y 值与新指定的1X值被存入存储器2201。如此一个外部指令块以多次访问的起始点开始被转换为若干个内部指令块,其映射关系也被纪录在如图22结构的块 地址映射模块1904中。图8A-8C实施例中对图22结构的块地址映射模块的操 作有详细说明。当得到外部指令对应的内部指令1X地址与1Y地址后,后续操 作与前述相同,在此不再赘述。
[0344] 根据本发明技术方案,还可以将轨道表结合到所述处理器系统中。请参考 图23,其为本发明所述包含轨道表的处理器系统的一个实施例。在本实施例中, 由于本发明所述的轨道表本身已经包含了分支目标地址信息、下一指令块地址 信息,以及结束轨迹点信息,因此可以用轨道表2301代替了下块地址存储器 1709、结束标志存储器1506和分支目标存储器1607。此外,标签存储器1905、 块地址映射模块1904、转换器1202、一级指令缓存器1203、处理器核1201、 块内偏移映射器1504、选择器1711、或逻辑1707和循迹器均与图19中的相同。 在本例中还增加了扫描器2302,如前所述用于对被转换的外部指令进行审查, 并对其中的分支指令计算分支目标的外部指令地址BN2后,转换为相应的内部 指令地址BN1。
在本例中,由于所述内部指令地址BN1就是一级指令缓存器1203 的地址,一级指令缓存器
1203中的内部指令与轨道表2301中的轨迹点一一对 应,且分支指令对应的轨迹点中包含了分支目标的内部指令地址,因此可以如 前所述由循迹器对轨道表2301寻址读出轨迹点内容,并根据分支指令执行情况, 选择当前循迹地址增‘1’或轨迹点中的分支目标循迹地址作为下一内部指令的 循迹地址。
[0345] 此外,还可以根据轨道表2301中轨迹点的内容确定是否到达内部指令块的 最后一条指令。例如,可以在轨迹点中用一个标志位表示该轨迹点是否对应所 述最后一条指令,当循迹器读指针指向该轨迹点时,根据总线2313上读取到的 该标志位值即可判定已经到达所述最后一条指令。
[0346] 在本例中,轨道表2301可以同时通过总线2311输出循迹器读指针1723指 向的轨迹点的内容,以及通过总线2309输出该轨迹点所在轨道的结束轨迹点(存 有顺序下一个内部指令块起始点的地址)的内容,从而如图19实施例那样同时 向选择器1711提供分支目标循迹BN1地址和下一内部指令块BN1地址。
[0347] 本实施例与图19实施例还有一个不同之处在于增加了一个选择器2315,用 于对块地址映射模块1904经总线1906送来的BN1X及块内偏移映射器1504送来的BN1Y地址合并而成的BN1内部指令地址(也是一级指令缓存地址)和扫描器2302输出的BN2二级缓存地址选择后存入轨道表2301。
[0348] 具体地,当扫描器2302对二级指令缓存1903送往一级指令缓存器1203的外部指令进行审查时,对其中的分支指令,按外部分支指令地址加指令中携带的外部分支偏移量的方式计算其分支目标的外部指令地址。计算出的外部分支指令地址索引部分对标签存储器寻址,读出内容与外部分支指令中的标签部分匹配。如不命中则以该外部指令从更低层次存储器读取该外部指令块存入二级缓存1903中由缓存块置换逻辑指定的二级缓存块;并在标签存储器1905的相应一行中存入该外部指令的标签部分,在块地址映射模块1904的相应一行将所有有效位置为‘无效’。如命中,即以外部指令的索引号1812(如果二级缓存 1903以组相连形式组织还要连同路号)为二级缓存块地址BN2X,子块号1813 与块内偏移地址1814为BN2Y一同组成二级缓存地址BN2。该BN2被存放到轨道表2301中与该外部分支指令对应的内部分支指令的表项中。如此,当一条外部分支指令经转换为内部指令存入一级指令缓存器1203时,其分支目标已经至少以外部指令形式存入二级指令缓存1903,且该内部分支指令的相应轨道表表项中已存有该分支目标的二级缓存地址BN2。
[0349] 以后当循迹器读指针1723(一级缓存地址BN1)寻址一级指令缓存器1203 读出内部分支指令供处理器和1721执行的同时,也寻址轨道表2301读出与该指令相应的轨道表项。当轨道表2301的输出2311是BN2格式时且分支判断1713 为‘执行分支’时,选择器1711将该BN2放上总线2304,以该BN2对块地址映射模块1904寻址,如映射输出为‘无效’,说明该分支目标指令所在的指令块还未转换为内部指令块存入一级指令缓存器1203。此时处理器系统控制以该 BN2寻址二级缓存1903读取该外部指令块送往扫描器2302如前述计算块中分支指令的分支目标,也如前述送到指令转换器1202转换为内部指令块如前述存入一级指令缓存器中由缓存块置换逻辑给出的BN1X地址指向的一级指令缓存块。系统也将该BN1X地址存入块地址映射模块1904中原来‘无效’的表项,也将指令转换器1202产生的偏移地址映射关系存入块内偏移映射器1504中该 BN1X指向的行。进一步,虚拟机系统控制将外部指令偏移地址1814根据上述 BN1X指向的1504中的映射关系行映射为内部指令BN1Y。由上述BN1X与BN1Y构成的分支目标内部指令的一级缓存地址BN1被写入对应分支指令的轨道表表项以代替原来的BN2。至此分支目标外部指令及其后的外部指令块已被转换为内部指令块存入一级缓存1721,同时该内部分支目标指令的一级缓存地址已被存入与其分支源指令相应的轨道表表项。
[0350] 以后当循迹器输出的一级缓存地址1723(BN1)寻址一级指令缓存器1203 读出内部分支指令供处理器和1721执行的同时,也寻址轨道表2301读出与该指令相应的轨道表项。当轨道表的输出2311是BN1格式时,该BN1经分支判断信号1713等控制选择器1711及1705选择,如1713为‘不分支’,则循迹器读指针,一级缓存地址1723经增量器1703增‘1’后作为下一周期的一级缓存地址1723;如1713为‘执行分支’则轨道表输出的上述BN1作为下一周期的循迹器读指针,一级缓存地址1723。一级缓存地址1723直接对一级指令缓存器 
1203寻址,读出内部指令供处理器核1721执行。图6实施例是图23中结构的一个具体实现。
[0351] 轨道表中的结束轨迹点也按同样方式处理,即当外部指令被转换为内部指令存入一个一级缓存块时,扫描器2302也计算出其顺序下一指令块的外部地址 (当前外部指令块地址增一)并将其送往标签存储器1905匹配。如果不匹配,则按前述方式从更低层存储器取外部指令块存入二级缓存器1903中缓存块置换逻辑以BN2X地址指定的缓存块并更新标签存储器1905及块地址映射模块1904 中的相应行。如此得到的BN2X或匹配时所得的BN2X被存入轨道表2301中与上述一级缓存块对应行的结束轨迹点。以后当缓存读指针1723指向这一行时,该BN2从轨道表结束轨迹点经2309读出,其BN2X如同前例分支目标指令地址BN2经2311读出时一般经总线2304被送到块地址映射模块1904映射为 BN1X(如该BN1X地址无效,则如前例由BN2寻址二级缓存器2302将外部指令转换为内部指令并存入一级指令缓存器
1203中由缓存块置换逻辑以BN1X指定的一级缓存块,并更新标签地址存储器1905及块地址映射模块1904),该 BN1X与总线2304上的BN2Y经块内偏移映射器1504映射为BN1Y。该BN1X 与BN1Y构成BN1地址经选择器2315被存储进轨道表2301中替换原BN2。上述分支目标地址或下块地址都可以在第一次进行标签匹配时就检查相应块地址映射模块1904表项内容是否有效,如有效则说明分支目标指令或下块指令已经以内部指令形式存储在一级指令缓存器
1203中,此时即以1904表项中的BN1X 如上述过程将BN2Y映射为BN1Y而将BN1直接存入轨道表。
[0352] 请参考图24,其为本发明所述利用寄存器堆实现栈操作功能的处理系统的一个实施例。为便于说明,在图24中只显示了部分模块和器件。在本例中,处理器核中的寄存器堆2402可以被配置为栈使用。此时,栈控制器2404则根据指令的译码结果及当前寄存器堆
2402中的存储状况,调整输出地址2405和2406 分别作为栈顶指针值和栈底指针值送往寄存器堆2402。
[0353] 栈控制器2404的具体结构可以采用如图10A中控制器1019、寄存器1011、减量器1031、增量器1041和选择器实现。其中寄存器1011存储了当前栈顶指针值。最基本的栈操作包括出栈(POP)和压栈(PUSH)两种。减量器1031 和增量器1041分别对当前栈顶指针值减‘1’和增‘1’,分别对应出栈(栈顶指针值减‘1’)和压栈(栈顶指针值增‘1’)的情况。这样,根据指令译码结果,可以将从存储器2403读取来的操作数依次压栈到寄存器堆2402中(栈顶指针值依次相应增‘1’)以实现基于栈的数据读取;也可以从寄存器堆2402中依次出栈若干个操作数(栈顶指针值依次相应减‘1’)送到执行单元2401做相应算术逻辑运算后,再压栈回寄存器堆2402中(栈顶指针值相应增‘1’)以实现基于栈的运算;还可以从寄存器堆2402中出栈操作数存储到存储器2403中 (栈顶指针值相应减‘1’)以实现基于栈的数据存储。具体地,可以由寄存器堆处理器指令集中控制每个读或写口的寄存器堆地址域中的三个位控制对该读口或写口进行栈顶指针值操作(增‘1’,不变,或减‘1’)。
[0354] 在运行过程中,可以通过对栈顶指针值和栈底指针值进行比较判断该栈是否已满(或接近满),以及是否已空(或接近空)。一旦由寄存器堆2402构成的栈已满(或接近满),则可以在栈控制器2404的控制下将靠近栈底的若干数据暂存到存储器2403中,同时调整栈底指针指向新的栈底,从而使寄存器堆2402 构成的栈空出一部分存储空间供后续栈操作使用。可以通过在存储器2403中按栈的形式组织存储空间,并以栈操作(压栈、出栈)存储所述需要暂存的数据的方法,保持这些数据的原始顺序信息。这样,一旦由寄存器堆2402构成的栈已空(或接近空),则可以在栈控制器2404的控制下从存储器2403的所述栈中按出栈的顺序读出若干之前暂存的数据存储回寄存器堆2402的相应寄存器中,并调整栈底指针指向新的栈底,即恢复这部分数据在被暂存到存储器2403前的状态,从而使得寄存器堆2402构成的栈中依然存有一部分数据供后续栈操作使用。这样,就可以利用寄存器堆实现栈操作功能。
[0355] 为了能在不同的硬件平台下通用,某些计算机程序语言产生以栈操作指令为主的中间代码,并在执行时由软件解释器对将中间代码实时翻译成若干条机器指令再由硬件平台执行,因此中间代码的执行效率不高。使用本发明所述处理器系统,可以直接执行这种栈操作指令(即,将每条栈操作指令转换为对应的一条内部指令),从而大幅提高处理器系统的执行效率。此外,与现有技术通常使用软件实现虚拟机相比,本发明所述的多指令集处理器系统完全以硬件实现了虚拟机。
[0356] 下面以图23所述结构为例,对本发明技术的几种实际应用情况进行举例说明。相应的方法和操作过程也可以应用到本发明提出的其他任何合适的结构中 (例如图15、16、17、19结构等)。此外,为了便于说明,在下面的描述中仅以变长指令集、定长指令集,及栈操作指令集作为外部指令集的例子进行说明,但是其他任何合适的计算机指令集都可以作为外部指令集应用于本发明。
[0357] 首先,该虚拟机系统被用于执行由变长指令构成的程序,即外部指令为变长指令。先将该变长指令集与内部指令集的相应指令映射转换规则导入到转换器1202的存储器
1301中及将控制1202中寄存器212等的值写入。其中控制指令转换起点的寄存器其值为从(分支目标或顺序的)进入地址开始转换。据此在执行变长指令时,若处理器核1201所需变长指令已经存储在指令存储器1903 中,则对指令存储器1903寻址读出该变长指令所在指令块送往扫描器2302和转换器1202,并对从该变长指令开始直至指令块中最后一条尚未被转换的变长指令进行扫描/转换,计算分支指令的分支目标地址并转换为相应的内部指令地址,同时对这些变长指令转换得到的内部指令块被依次根据替换算法存储到一级指令缓存器1203的相应行中,并在轨道表2301的相应行中建立对应的轨道。具体地,在扫描/转换时,若一级指令缓存器1203中已经存储了分支目标对应的内部指令,则该分支目标的变长指令地址可以通过地址转换(如前所述由标签存储器1905、块地址映射模块1904和块内偏移映射器1504完成)得到对应的内部指令地址BN1作为轨迹点内容存储到轨道表中。若一级指令缓存器1203 中尚未存储分支目标对应的内部指令,但指令存储器1903中已经存储了该分支目标,则可以将该分支目标的变长指令地址BN2作为轨迹点内容存储到轨道表中。若指令存储器1903中尚未存储该分支目标,则可以将该分支目标从更外层存储器填充到指令存储器1903中由替换算法确定的行中,并将该分支目标的变长指令地址BN2作为轨迹点内容存储到轨道表中。这样,轨道表2301中就包含了变长分支指令的分支目标的地址信息。
[0358] 循迹器则根据从轨道表2301读取到的内容和处理器核1201对分支内部指令的执行结果,控制一级指令缓存器1203输出相应内部指令供处理器核1201 执行。当按内部指令地址顺序执行时,可以通过增量器1703对循迹地址(即内部指令地址)增‘1’,或选择轨道表2301通过总线2309输出的下一内部指令块地址2309,直接从一级指令缓存器1203中找到相应的内部指令。
[0359] 当执行分支转移时,可以根据轨道表2301的2311输出分支目标的内部指令地址BN1直接从一级指令缓存1203中找到相应的内部指令供处理器核1201 执行。当轨道表2301输出的是分支目标的变长指令地址BN2时,若该变长指令对应的内部指令已经在之前的运行过程中被存储到了指令存储器1203中,则该变长指令地址如前所述可以通过地址转换得到对应的内部指令地址BN1,并根据该地址从一级指令缓存器1203中找到相应的内部指令供处理器核1201执行。否则,根据该变长指令地址从指令存储器1903中找到相应的变长指令,并如前所述将从该变长指令开始直至指令块中最后一条尚未被转换的变长指令进行扫描/转换,将相应的内部指令块存储到一级指令缓存器1203中并在轨道表2301 中建立相应的轨道,同时将该变长指令转换得到的内部指令提供给处理器核 1201执行。处理器核1201执行所述内部指令产生相应的执行结果,例如执行分支内部指令时产生分支转移是否发生的TAKEN信号送往循迹器。循迹器则如前所述根据TAKEN信号及轨道表2301经总线2313送来的表示是否到达指令块最后一条指令的信号对多个地址来源进行选择,从而控制程序流继续执行。
[0360] 在本例中,当处理器系统执行完由变长指令构成的程序后,转而执行由定长指令构成的程序。在这种情况下,可以当最后一条变长指令执行完毕后,停止处理器核的运行,并将处理器核中及各存储器中状态置为无效,将定长指令集与内部指令集的指令对应转换规则及寄存器设置导入到转换器1202的存储器中及寄存器中以替代原存储的变长对应转换规则。其中控制指令转换起点的寄存器其值为从外部指令块或子块的最低地址开始转换。在执行定长指令时,若处理器核1201所需定长指令已经存储在指令存储器1903中,则对指令存储器1903 寻址读出该定长指令所在指令块送往扫描器2302和转换器1202,对该定长指令块整块进行扫描/转换,计算分支指令的分支目标地址并转换为相应的内部指令地址,同时对转换得到的内部指令块根据替换算法存储到一级指令缓存器1203 的相应行中,并在轨道表2301的相应行中建立对应的轨道。其具体操作与前述对变长指令的扫描/转换、存储到一级指令缓存器1203及在轨道表2301中建立轨道基本相同,不同之处仅在于在此是对整个定长外部指令块进行扫描转换。循迹器根据从轨道表2301读取到的内容和处理器核1201对分支内部指令的执行结果,控制一级指令缓存器1203输出相应指令供处理器核1201执行的过程与前述执行变长指令时相同。
[0361] 之后,假设该处理器系统接下来执行由变长指令集和定长指令集混合编码的程序,则可以通过在指令集切换时重新配置转换器1202的方式实现不同外部指令集的实时切换。具体方式与上述由执行一种指令集更换到另一种指令集类似,只是过程中不需要将轨道表2301,指令缓存器1203,1903等所有存储器清零。由于轨道表2301中不同线程轨道之间互不干扰,而其他各存储器都与轨道表相关,因此各线程之间是相互独立的,有各自独立的轨道空间。在指令集或线程切换时,只要将一个线程的循迹器读指针1723和处理器核中的寄存器状态保存起来,留待恢复执行该线程时将这些数据重新填回,就可以当时该线程被切换出的点开始继续(resume)执行。可以在循迹器中使用一个存储器保存循迹器对应每个线程的读指针,使得线程(或虚拟机)切换时可以方便地恢复相应的读指针。同样,可以为处理器核1701的各状态寄存器建立一个对应各线程的存储器,如此在不同线程之间切换时,其时间间隔只是读指针,处理器核状态寄存器与读指针存储器,状态存储器间交换数据所需时间。
[0362] 最后,本发明所述处理器系统还可以结合图13B所述方法,由转换器1202 根据线程号的不同采用相应的指令集对应关系对外部指令进行转换,使得在不同线程对应的指令集不相同的情况下,所述处理器系统不需要通过暂停处理器核来重新配置转换器,可以不间断地执行指令。具体地,可以在执行程序前,将所有可能用到的外部指令集的对应关系按图13B实施例所述方法导入到转换器1202的存储器中由线程号寻址的存储空间中。在对外部指令进行转换时,首先用线程号对转换器1202的所述存储器寻址找到对应的存储空间,然后再按前述方法根据该存储空间内的对应关系将外部指令转换为内部指令。在这种情况下,其他操作过程与前述实施例相同,在此不再赘述。由于每个虚拟机包含不同的线程,因此这样采用本例所述方法就可以实现在同一处理器系统上同时运行多个不同虚拟机的功能。如前所述,由于轨道表2301中不同线程轨道之间互不干扰,因此这些复数个虚拟机之间也不会因为不同线程的相同或不同计算机指令集的外部指令共存在二级缓存1903而发生相互干扰。保存循迹器读指针及处理器核内寄存器状态的方式如前所述。在这种方式中,还可以在同一个处理器系统上运行多个执行同一指令集的虚拟机其方式是在指令转换器1202中只存储一种外部指令集的转换规则,而各线程的基地址都指向这一种规则。不同线程(不同虚拟机)之间相互独立,线程(虚拟机)切换时如前交换循迹器指针及处理器核寄存器状态即可。
[0363] 如同以上实施例所述在两种不同的指令集之间无缝切换,具有本发明所述可直接执行栈操作指令的处理器,还可以在执行寄存器操作的指令集与执行栈操作的指令集之间无缝切换,可以不间断地执行多个不同指令集中的指令。具体地,可以在执行程序前,将所有可能用到的寄存器操作或栈操作指令集的转换规则按图13B实施例所述方法导入到转换器1202的存储器中由线程号寻址的存储空间中。在对寄存器操作指令或栈操作进行转换时,首先用线程号对转换器1202的所述存储器寻址找到对应的存储空间,然后再按前述方法根据该存储空间内的对应关系将寄存器操作指令或栈操作转换为内部指令。在定义内部指令时在普通用于控制寄存器操作指令的指令域以外另增一个位,即图10A中的 1021控制信号。在转换寄存器操作指令集为内部指令时,该位被设为‘0’,使信号1021控制选择器1033,1035,1037直接选择内部指令上的寄存器堆地址域直接对寄存器堆1001寻址控制其读写。在转换栈操作指令集为内部指令时,该位被设为‘1’,使信号1021控制选择器1033,
1035,1037选择由内部指令上控制栈顶指针增减的指令域(可以是用执行寄存器操作指令时的寄存器地址域)控制选择器1053,1055,1057选择的栈顶指针1045及其增减量对寄存器堆1001寻址控制其读写。如此可以在处理器运行过程中,在寄存器操作的指令集与栈操作的指令集之间无缝切换。这使得只要有适当的条件,如前述的线程号,控制指令转换器1202使用正确的转换规则将外部指令转换为内部指令,则栈操作的指令可以内嵌在寄存器操作的指令集的程序中无缝执行。反之亦然。其他操作过程与前述实施例相同,在此不再赘述。
[0364] 根据本发明技术方案和构思,还可以有其他任何合适的改动。对于本领域普通技术人员来说,所有这些替换、调整和改进都应属于本发明所附权利要求的保护范围。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈