一种可重构寄存器堆及其设计方法

文档序号:6583599阅读:408来源:国知局
专利名称:一种可重构寄存器堆及其设计方法
技术领域
本发明涉及计算机微处理器结构,并且更具体地涉及一种具有很好的兼容性的计算机微处理器结构和一种具有很好的兼容性的微处理器可重构寄存器堆。
背景技术
微处理器在其50多年地历史中取得了迅猛的发展,市场上涌现出各种各样不同体系结构的微处理器,应用领域遍及日常生活、办公自动化、金融财会、国防建设、航空航天等各个方面,微处理器的发展水平已经不仅仅关系到科技领域本身,而且关系到国计民生。由于历史的原因和科技发展速度不同,目前在通用微处理器领域,以Intel、IBM、HP、SUN等公司为首的芯片产品在市场上占据了垄断性的地位,绝大部分的用于通用计算机的软件产品都是基于上述体系结构而开发的。这为后来的体系结构设计者带来巨大的压力。虽然从长远来看,兼容性不是必须的,但如果新的体系结构不具备兼容性特点,它将无法继承已有的软件财富,尤其是当前市场上已经为人们所习惯的最常用的软件产品,所有的软件都要重新设计,这样必然削弱其市场竞争力。因此,解决兼容性问题成为设计新的体系结构面临的首要问题之一。
由于微处理器在所有集成电路中最为复杂,设计成本最高,往往需要多年的研究与设计,因此绝大部分的微处理器制造商拒绝透露他们产品的任何内部工作以防止其它公司抄袭其芯片设计。这样,对于后来的芯片设计者而言,兼容性问题的解决将更加困难。
目前芯片设计中解决兼容性问题的方案主要有如下几类
以Itanium为代表的通用处理器由于是Intel公司本身开发的新产品,因此在其初期采用的策略是利用不同的硬件分别执行IA-32(X86系列处理器采用的体系结构)和IA-64(Itanium处理器采用的体系结构)的指令,以实现指令级兼容;
以AMD为代表的通用微处理器是纯粹的兼容机,即本身不设计新的体系结构,而是直接根据X86芯片的说明书和指令集,从最底层开始设计,最终的芯片可以模仿前者的功能,从而保证指令级的兼容。这样,大部分的设计和开发工作可以通过逆向工程得以避免,即由产品来推导出设计。
以Transmeta,E2K等为代表的通用微处理器,解决兼容性问题的方式是通过软件完成对目标指令流(如X86)的分析、译码,并产生VLIW的分子流,动态地将目标指令翻译到机器自身的指令集合上,利用自身硬件的并行特性来实现程序的高效执行。在保证指令级兼容的同时保持自身的特点。
对于新的体系结构设计者而言,由于知识产权的问题和产品设计的保密特征,Itanium的解决兼容性问题的方案显然不可取;AMD的解决兼容性问题的方案是直接模仿,不涉及自身体系结构问题。而且对于上述体系结构的微处理器,体系界面每增加一条指令都意味着芯片规模的增加,而且体系结构一旦确定则实现的指令集合也随之确定,芯片设计完毕后,就不能再增加指令,芯片产品的生命期短,对兼容设计也十分不利,因为要兼容多种其它体系结构的处理器时将付出太大的代价。
Transmeta的解决兼容性问题的方案虽然可以保持新的体系结构特征,但完全以软件来进行指令转换导致的效率损失比较大。
因而,现有技术中存在着发明一种新的具有兼容性的体系结构的需要,该体系结构在能以更高的效率实现对目前市场上主流处理器的指令级兼容的同时保持自身特点,即在新体系结构的基础上设计的软件产品能得到最高效率的执行。
具有“显式硬件并行”特性的MISC(宏指令集计算机)体系结构为解决该问题提供了一种可能的方式,该体系结构的重要特点在于算子是指令的最小单位,硬件单元通过算子界面直接显现给软件。由于算子的控制粒度通常小于一般的RISC指令,使得MISC的指令设计的灵活性大大高于其它体系结构的设计,而且由于算子可以通过拼装、延时、排序、替换等宏加工方式组成可变长宏指令,因而可以大大提高指令执行的并行度和执行效率。与现有的微处理器体系结构相比,MISC体系结构更加有利于优化编译器的开发,以及用户自定义指令的实现,使得指令在高效执行的同时可以满足更广泛的应用需求。但MISC体系结构在过去的研究中不具备兼容性的设计,使得其应用范围受到一定的限制。为了解决MISC体系结构的兼容性问题,有两种思路,一种是直接的指令转换,一种是由硬件可重构设计支持的指令转换。两者的差别在于后者将目标兼容指令映射到根据该指令集合设计的可重构硬件上进行执行,这样可以利用硬件执行的高效率来减少代码转换过程中的效率损失,同时利用MISC可变长宏指令的宏加工特性进一步提高执行的执行效率,从而保证高效实现指令级的兼容。因而采用由可重构硬件支持的指令转换来解决指令级兼容问题具有更大的优势。可重构硬件在指令上的反映是为不同兼容目标设计的算子,即可以由不同作用的算子来控制同一个硬件单元。该方法的核心在于可重构部件的设计。
可重构寄存器堆是上述可重构硬件中最关键的部分之一。寄存器堆位于计算机存储层次的最高层,是处理器内部的重要部件,是数据交换的重要场所,由于现代先进计算机多采用寄存器-寄存器型的指令结构,寄存器堆的结构和性能是决定其整体性能的关键因素。微电子工艺发展的不平衡使得处理器和存储器之间的性能差距不断扩大,是寄存器堆研究受到日益广泛关注的另一个原因,合理的寄存器堆设计可以有效地减少对存储器的访问量。MISC可重构寄存器堆的设计是MISC微处理器设计的重要组成部分,它对全面实现具有兼容性的MISC体系有着重要的意义。

发明内容
因此本发明的目的是解决上述关于实现兼容性的问题。
为了实现上述目的,本发明提供了一种用于兼容目的的算子提取方法,所述方法的特征在于包括以下步骤
(1)对目标兼容指令集合功能进行分析;
(2)根据兼容目标指令集合功能分析的结果,将由同一类部件完成的功能排列在一起,重新编码,成为功能算子的操作码;将源操作数独立成为路由算子,对应于寄存器堆的读端口;将目的操作数独立成为数据算子的目的寄存器域;将必须同时控制多个部件执行的操作设计为复合算子;
(3)至少部分根据兼容目标指令集合功能分析的结果确定内部通路;
(4)根据内部通路确定路由算子和数据算子的数量;
(5)确定功能算子的数据来源域和数据算子的数据来源域。
为了实现上述目的,本发明还提供了一种具有兼容性的可重构部件设计方法,其特征在于包括以下步骤
(1)根据不同兼容目标的算子集合分别进行硬件设计,分别确定满足各算子集合功能的硬件资源、连接关系、控制关系和时序关系;
(2)将根据不同兼容目标体系得出的部件设计进行形式化描述;
(3)将部件的形式化描述进行叠加优化;
将实现功能集合不全相同的同类部件进行操作(OP)叠加,且不同功能集合不同时有效时(串行叠加),根据如下规则叠加
<资源规则>满足OP集合串行叠加的资源需求是完成所有OP在不同时标下所需要的对应资源的并集;
<连接规则>串行叠加(完成多种功能的电路描述进行叠加,但在同一时刻只有一种功能有效)时,相同的数据来源可以合并,不同的数据来源并行排列,同时改变相应的选通控制条件;
<控制规则>满足OP串行叠加的控制描述为叠加前各OP的控制描述的并集,对相同操作的新的控制条件为原条件的或关系;
<时序规则>OP串行叠加后的关键路径为叠加前各OP的关键路径与各自增加的开关电路的延时值之和的最大值。
(4)将以上形式化描述转变为电路设计。
为了实现上述目的,本发明还提供了一种可重构寄存器堆,至少具有两种工作模式,其特征在于包括一个寄存器堆地址转换及选择部件,一个寄存器堆和一个数据输入选择部件,其中指令中的寄存器读写地址经过寄存器堆地址转换及选择部件转换成对应模式的寄存堆的物理地址来控制寄存器堆的读写,对应模式的输入数据经过数据输入选择部件被写入寄存器堆。
为了实现上述目的,本发明还提供了在一个兼容体系的微处理器中,一种可重构寄存器堆的工作方法,其特征在于包括步骤
根据所要兼容的寄存器堆的工作方式将指令算子中的寄存器地址的若干低位输入全局寄存器堆;
根据所要兼容的寄存器堆的工作方式将指令算子中的寄存器地址输入地址转换部件中相应的地址转换子部件从而产生访问窗口寄存器堆的地址;
当要写寄存器时,还根据所要兼容的寄存器堆的工作方式选择合适的数据输入并根据相应的写使能信号将数据写入全局寄存器堆或窗口寄存器堆;
当要读寄存器时,若高位地址全为零,则输出从全局寄存器堆读出的数据;若高位地址不全为零,则输出从窗口寄存器堆读出的数据。
本发明的具有兼容性的微处理器体系结构的总体设计思想是将优化编译技术和处理器的可重构设计技术结合起来,利用可重构硬件设计支持可重构指令设计,以实现对目标指令集合的兼容及其高效执行。
为此,本发明提供了一种可重构的计算系统设计方法。所谓体系可重构设计是指体系能够根据不同的兼容目标处理器体系结构而重新组织,从而实现不同兼容目标处理器的功能。该设计方法包括
1)指令集可重构;
2)存储模型可重构;
3)中断与标识模型可重构;
4)寄存器堆可重构;
5)流水线可重构
指令集的可重构是实现指令级兼容的基础。存储模型、中断标识模型、寄存器堆、流水线的可重构是对指令级可重构的硬件支持。指令集重构是为实现不同应用需求而进行的必要步骤,硬件重构的实现过程是基于理论模型的硬件叠加和优化过程。指令集重构在体系界面上表现为不同算子的组合方式。硬件重构在体系结构界面上表现为不同类型的算子,由优化编译器来保证在兼容某一特定类型的体系结构时只有相同类型的算子可以参与指令转换过程。
将本发明的体系结构用于微处理器体系设计中时,其它体系结构的指令经过优化编译器进行二进制代码转换和代码压缩处理后,可以在可重构硬件上得到高效的执行,同时使得基于该体系结构的面向应用的指令设计成为可能。
本发明特别涉及一种具有兼容特性的基于显式硬件单元控制(EHCC)思想的指令结构,其特征在于
1.指令集合由指令格式和算子集合构成;
2.指令格式至少包括三个部分格式控制域CBFF、算子段控制域CONTROL和算子域,其中格式控制域用来标志不同的指令格式,算子段控制域与算子槽一一对应,由算子段控制域确定算子槽中的算子编码为该算子槽对应的算子集合中具体算子的编号。
3.算子是指令控制的最小单位,在实现上是对应于硬件可控节点的控制编码表示,是能完成一定功能的硬件单元在体系结构界面上的反映。每一个算子执行的结果将完成一个具有一定功能的操作。按照作用方式的不同,算子分为功能算子、数据算子、路由算子和复合算子四类。其结构和功能说明如下功能算子包括功能控制域、源操作数控制域、操作数宽度控制域,用于功能单元(由数据通路可控节点和执行部件可控节点构成的能完成一个功能操作的硬件单元)的控制;数据算子包括源操作数控制域、目的操作数控制域和操作段控制域,用于数据单元(由数据通路可控节点和寄存可控节点的组合构成的能完成一个数据存贮的硬件单元)的控制;路由算子包括源操作数控制域,用于路由单元(单纯由输入数据通路和开关电路构成的能完成一个开关控制的硬件单元)的控制;复合算子包括功能控制域,用于复合单元(由不可分割的若干功能单元或数据单元构成的能完成一种特定功能的硬件单元)的控制,所谓复合单元是指,所谓“不可分割”是指单元中的部分可控节点受控时不能产生具有意义的动作,只有当单元中所有可控节点受控时,才产生具有确定意义的动作。
4.按照设计目的不同,算子集合分为两类一类是面向应用需求,为了高效解决应用问题而自行设计的;一类是为了实现兼容目的,根据兼容目标指令集的功能而进行的,该类算子编码与兼容目标指令集合之间存在确定的对应关系,即兼容目标指令集合中的任何一条指令可以表示为算子集合中的一个算子或者多个算子的拼装。
5.算子可以包含延时、排序、替换域;其中延时域表明该算子可以延时几个周期执行,排序域表明算子执行的顺序,替换域表明该算子需要重复执行的次数。
以上具有兼容性的显式硬件单元控制的指令结构提供了一种实现指令级兼容的新途径。兼容目标指令集经过优化编译器的处理直接转换为与硬件单元相对应的算子组合,然后由优化编译器中与机器相关的部分进行优化和代码压缩(拼装,延时、排序、替换),形成可变长宏指令字(VLMIW)的算子流,在具有兼容性的可重构部件上高效执行。基于算子的指令设计方法还为用户根据应用设计新的指令提供了方便。
本发明的显著优势在于体系界面不仅反映硬件当前能够完成的功能集合,而且完全反映硬件资源的情况,包括各种硬件的数量、应用特性、连接关系等,并提供方法,使用户能够基于硬件特性设计实现完成指令功能的流程。在这样的结构中,硬件基本成分,包括功能单元、寄存器、数据通路、控制单元等直接暴露给用户,并为用户在指令界面上提供直接控制手段,使用户能够通过对硬件单元的直接控制,最有效地完成期望的功能。其结果是,在硬件设计确定时指令集合最基本指令和语义繁衍规则、语用规则、语法规则被确定;指令集合中的每个成分可以由硬件直接实现,执行效率高。
本发明的另一显著优势在于便于实现对多种目标指令集合的兼容,根据不同兼容目标指令集合而提取的算子可以分配在不同的算子槽中,通过宏加工规则(延时、拼装、排序、替换)组合成为面向不同兼容目标体系结构的指令。
本发明的另一显著优势在于指令格式可以水平扩展,有利于大量并行处理部件的并行执行;
本发明的另一显著优势在于算子的粒度比通常指令的粒度小,便于面向应用需求构造新的指令,结构灵活,适应性强。
本发明的另一显著优势在于算子的组合方式可以发生变化,即可以通过延时、拼装、排序、替换等手段改变算子执行的时间,可以大大减少指令代码所占用的空间。
本发明的另一主要目的是揭示一种用于兼容目的的算子提取方法,所述方法的特征在于包括以下步骤
(1)目标兼容指令集合功能分析。
(2)将由同一类部件完成的功能排列在一起,重新编码,成为功能算子的操作码;将源操作数独立成为路由算子,对应于寄存器堆的读端口;将目的操作数独立成为数据算子的目的寄存器域;将必须同时控制多个部件执行的操作设计为复合算子。
(3)设计内部通路。
(4)确定路由算子和数据算子的数量。
(5)确定功能算子的数据来源域和数据算子的数据来源域。
本发明的算子设计方法采用正向设计,即根据应用需求(兼容目标指令)推导算子设计,为可重构硬件的设计提供了依据。
本发明的显著优势在于算子设计依据兼容目标指令进行,保证算子或者算子的组合的执行效果与兼容目标指令一致。
本发明的另一显著优势在于根据兼容目标指令设计的算子可以进行重新组合,从而可以构造新的指令。
本发明的另一显著优势在于算子的个数可变,即硬件单元的数量可变,便于利用硬件单元的复制来增加指令执行的并行度,提高指令执行的效率,并且使该体系结构具有更好的可扩展性。
本发明的另一个主要目的是提供一种全局寄存器和窗口寄存器相分离的寄存器窗口结构以及提供一种对上述寄存器堆进行控制的方法。设寄存器窗口中的体系可见寄存器个数为2a,所述寄存器窗口结构的特征在于包括
一个全局寄存器堆,包括2b个寄存器,b为自然数,b<a,全局寄存器堆的读写地址宽度为b位;
一个窗口寄存器堆,包括2m个物理寄存器,m为自然数,对于固定窗口而言,必须满足m=b+1+k,k为自然数,2k为固定窗口的个数,对于移动窗口,必须满足2m≥2a-2b,窗口寄存器堆的读写地址宽度为m位;
一个窗口寄存器堆地址转换部件,根据指令功能,将指令中宽度为a的地址转换为访问窗口寄存器堆的宽度为m位的物理地址;
一个输出数据选择部件,在全局寄存器堆的输出数据和窗口寄存器堆的输出数据之间进行选择,输出正确数据。
所述寄存器堆的控制方法的特征在于包括以下步骤
(1)寄存器堆中所有寄存器、控制固定窗口的当前窗口指针CWP、控制移动窗口的栈底指针BOF的复位值均为0;
(2)根据指令译码结果确定数据的操作方式,进行地址分离和变换。寄存器窗口可以分为固定窗口(窗口内的输入寄存器、输出寄存器、局部寄存器个数固定)和移动窗口两类(窗口内的输入寄存器、输出寄存器、局部寄存器个数可由软件设定),原理分别如下
(21)固定窗口地址计算
(211)全局寄存器堆读写地址
寄存器堆物理地址=指令中的寄存器地址的低位[b-1:0]
(212)窗口寄存器堆物理地址
(2121)当CWP的修改方式是步骤411所述的方式一时,
物理地址=(指令中的寄存器地址-2b)+{CWP,0}m
其中(CWP,0}m表示将CWP的有效值算术左移得到的m位地址。
(2122)当CWP的修改方式是步骤411所述的方式二时,
物理地址=(指令中的寄存器地址-2b)+{CWP补,0}m
其中{CWP补,0}m表示将CWP的有效值求补,再进行算术左移得
到的m位地址。
(22)移动窗口
全局寄存器堆物理地址=指令中的寄存器地址的低位[b-1:0]
窗口寄存器堆物理地址=(指令中的寄存器地址-2b)+BOF
其中BOF为当前移动窗口的第一个寄存器的物理地址。
(3)完成寄存器堆读写操作
(31)当寄存器堆写操作有效时,在写地址使能信号控制下,对全局寄存器堆的写操作和对窗口寄存器堆的写操作两者之间只有一个有效,判断条件如下
(311)寄存器写操作有效,且指令中的寄存器地址[a-1:b]为全0,则对访问全局寄存器堆的写地址使能信号有效,对窗口寄存器堆的的写地址使能信号无效;
(312)寄存器写操作有效,且指令中的寄存器地址[a-1:b]不全为0,则对窗口寄存器堆的写地址使能信号有效,对全局寄存器堆的写地址使能信号无效;
(32)当寄存器堆读操作有效时,对全局寄存器堆和窗口寄存器堆的读操作同时进行,最后根据读地址高位是否为0的判定条件选择有效读出数据输出
(321)指令中的寄存器地址[a-1:b]为全0,选择全局寄存器堆的读出数据输出;
(322)指令中的寄存器地址[a-1:b]不全为0,选择窗口寄存器堆的读出数据输出;
(4)根据指令和计数器的初值,修改当前窗口指针CWP或者当前栈底指针BOF
(41)固定窗口的CWP修改方式
(411)方式一
(4111)SAVE操作有效时,CWPn+1=CWPn-1
(4112)RESTORE操作有效时,恢复最近一次SAVE操作之
前的CWP,CWPn+1=CWPn+1
(411)方式二
(4111)SAVE操作有效时,CWPn+1=CWPn+1
(4112)RESTORE操作有效时,恢复最近一次SAVE操作之
前的CWP,CWPn+1=CWPn-1
(42)移动窗口的BOF修改方式
(421)CALL操作有效时,BOFn+1=BOFn+SOLn
(422)RETURN操作有效时,恢复最近一次CALL操作之前的
BOF,BOFn+1=BOFn-SOLn-1
本发明的独到优势在于全局寄存器和窗口寄存器独立编址,可以简化实现窗口寄存器堆中寄存器数目为2m时的寄存器窗口设计,窗口寄存器地址指针的计算可以直接用无符号的加法完成,无需求模操作,简化了电路设计。
本发明的另一独到优势在于本方法同时适用于固定窗口和移动窗口的设计,应用范围广。
本发明另一个主要目的是提供一种基于查表法的旋转寄存器地址生成部件及其控制方法。设寄存器堆包含2n(n为自然数)个物理寄存器,旋转域的大小为2m的SOR倍,m为非负整数,且m≤n,SOR=1~s,s为自然数且s≤2n-m,所述地址生成部件的特征在于包括
一个旋转基寄存器(RRB)控制部件,旋转基寄存器位宽为n位,复位值为0,每完成一次叠代,RRB寄存器值减一,旋转基寄存器RRB还可以在指令控制下清零;
一级加法部件,完成指令中的寄存器地址(位宽n位)与RRB寄存器的加法操作;
一个由寄存器或ROM构成的硬件查表电路,该表的行标是位宽为n-m的全排列,列标是SOR域,表项为行标对列标的取模。
所述控制方法的特征在于包括如下步骤
(1)复位
RRB寄存器的复位值为0,当使用寄存器设计查表电路时,查表电路中表项的复位值为取模值;
(2)由旋转域设置指令中的旋转域倍数SOR(取值1~s,该值算术左移m位得到旋转域)控制相应相应列的表项的选择;
(3)指令地址与RRB的输出值相加,加法的结果中低m位[m-1:0]直接作为旋转地址的低m位[m-1:0],高n-m位地址[n-1:m]输入查表电路;
(4)以步骤3的输出地址的高n-m位[n-1:m]和SOR为索引进行查表操作,将得到的表项作为旋转地址的高n-m位地址[n-1:m],与步骤3中加法结果的低m位[m-1:0]组合,成为最终的旋转寄存器物理地址;
(5)在指令控制下RRB递减或清0。
(51)当软件流水循环分支标识有效时,RRB自动减1;
(52)当清RRB指令有效时,RRB清0。
寄存器旋转是由RAU,B.R.等人于1989年在Cydra5巨型机的研究中率先提出的,其目的是为了支持软件流水的模调度,寄存器旋转的通用公式为(寄存器地址+RRB)mod旋转域
与通常的用模运算求旋转寄存器物理地址的方法相比,本发明的电路设计结构简单,效率高。对上述公式稍加改变
(寄存器地址+RRB-2n)mod旋转域+2n
即可实现在同一个寄存器堆中保证2n个寄存器为静态寄存器,不发生旋转。地址生成部件与上述类似,只增加对定值2n的各一次加减操作,控制方法则完全一致。
本发明的独到优势在于基于查表法的寄存器旋转,可以避免寄存器旋转地址计算过程中的求模操作,大大简化电路实现,并可快速获得旋转地址。
本发明的另一独到优势在于旋转域可以为2m的倍数,是一种通用的方法。
本发明的另一目的是揭示一种具有兼容性的可重构部件设计方法,其特征在于包括以下步骤
(1)根据不同兼容目标的算子集合分别进行硬件设计,分别确定满足各算子集合功能的硬件资源、连接关系、控制关系和时序关系;
(2)将根据不同兼容目标体系得出的部件设计进行形式化描述;
(3)将部件的形式化描述进行叠加;
(4)将以上形式化描述转变为电路设计。
通过叠加设计规则和聚类分析技术得到的可重构部件的结构可以根据不同类型的算子流重新组合,实现这种硬件重新组合的算子组合可以支持不同体系的指令集合的功能。在完成指令级兼容的同时,可以节省硬件资源。
本发明的显著优势在于能够对具有兼容性的可重构部件的设计进行一致性的规范描述;
本发明的另一显著优势在于能够建立统一的设计规则,广泛地用于同类部件的设计;
本发明的另一显著优势在于具备可重构部件设计需要的可繁衍的资源,并对该资源进行分配、组织和控制;
本发明的另一主要目的是提供一种具有兼容性的可重构部件,尤其是一种可重构寄存器堆。其特征在于包括
一个寄存器堆,至少包括两个读端口和一个写端口;
一个地址选择部件,其输入为实现不同功能寄存器堆操作的地址指针,其输出为当前操作下有效的地址指针,输出地址的个数为输入中为完成同一功能所需要的地址个数的最大值;以及
一个输入数据选择部件,其输入为实现不同功能寄存器堆操作的写入数据,其输出为当前操作下有效的写入数据,输出数据的个数为输入中为完成同一功能所需要的数据个数的最大值。
本发明的可重构寄存器堆在普通寄存器堆的基础上增加了地址选择部件和输入数据选择部件,来实现不同功能需求的寄存器堆地址和输入数据的控制,就使得同一个寄存器堆可以满足不同算子的功能需求。
本发明的独到优势在于实现寄存器堆的功能重构需要的硬件仅为为实现各功能所需要的硬件集合的并集和两个选择部件,硬件开销小;
本发明的另一独到优势在于地址选择和数据选择部件的输入根据兼容目标的不同进行增减,具有很好的可扩展性。


图1a为AMD类型的微处理器实现兼容的方法简图1b为Itanium类型的微处理器实现兼容的方法简图1c为Transmeta类型的微处理器实现兼容的方法简图1d为本发明的体系结构实现兼容的方法简图2为利用本发明设计的兼容机的指令执行方式;
图3为MISC指令结构示意图4a为与功能算子相对应的功能单元示意图4b为与数据算子相对应的数据单元示意图4c为与路由算子相对应的路由单元示意图4d为与复合算子相对应的复合单元示意图5为SPARC指令与MISC指令转换示意图6为具有兼容性的可重构部件的设计流程;
图7为兼容目标指令分析和算子提取流程;
图8a为可重构兼容部件设计的资源规则;
图8b为可重构兼容部件设计的连接规则;
图8c为可重构兼容部件设计的控制规则;
图8d为可重构兼容部件设计的时序规则;
图9为根据本发明设计的具有兼容性的可重构寄存器部件外框图9a为上述寄存器堆用作随机读写寄存器堆时的体系结构特征;
图9b为上述寄存器堆用作寄存器窗口时的体系结构特征;
图9c为上述寄存器堆用作移动寄存器窗口及旋转寄存器时的体系结构特征;
图9d为分支指令中控制定循环的CTOP,CEXIT操作执行过程;
图9e为分支指令中控制不定循环的WTOP,WEXIT操作执行过程;
图10为全局寄存器与窗口寄存器分离的寄存器窗口结构示意图10a为将图10的结构用于固定窗口设计时的窗口寄存器堆地址生成部件示意图10b为根据图10a所述结构实现的由8个窗口组成的SPARC V9通用寄存器窗口的地址转换实施范例;
图10c为将图10的结构用于移动窗口设计时的窗口寄存器堆地址生成结构示意图10d为根据图10c所述结构实现的由128个物理寄存器组成的Itanium通用寄存器堆的堆栈区的地址转换实施范例;
图11为基于查表法的旋转寄存器地址生成部件示意图11a为包含128个64位寄存器的具有3个读写端口(两读一写)的寄存器堆的基于查表法的旋转寄存器地址生成部件示意图11b为旋转域为8的1-12倍时,查表电路的表头与表项;
图11c为在移动寄存器窗口的基础上设计的旋转寄存器地址转换部件示意图12为可重构寄存器堆的结构示意图12a为具有寄存器窗口、移动寄存器窗口及旋转寄存器两种工作模式的可重构寄存器堆模块结构框图12b为图12a中全局寄存器堆的结构图12c为图12a中地址选择部件和数据输出选择部件结构图12d为具有随机读写寄存器堆、寄存器窗口、移动寄存器窗口及旋转寄存器三种工作模式的可重构寄存器堆模块结构框图。
图12e为图12d中的地址选择部件结构图12f为图12d中的输入数据选择部件和输出数据选择部件结构图。
以下参照附图详细描述本发明的具体实施方式

图1a至图1d比较四种实现兼容性的途径,说明如下
同样的问题使用不同体系结构的处理器进行处理,将得到同样的结果。其基本方法是用高级语言对问题进行描述,经过操作系统的调度和优化编译器的编译过程,将转化成特定体系结构的指令(以下简称体系),然后在基于此指令集合的硬件即处理器芯片(以下简称硬件)上执行。
在不考虑兼容的情况下,从同一个问题出发到同一个结果有N条路径,即
问题→体系A→硬件A→结果;
问题→体系B→体系B→结果;
······
问题→体系N→体系N→结果。
以下各图中硬件B为根据不同兼容路线设计的处理器。
以AMD为代表的兼容设计路线如图1a所示,其指令执行的路径为
问题→体系A→硬件B→结果。
这是一种纯粹的兼容机,本身不设计新的体系结构,而是直接根据其它处理器的体系结构,设计新的硬件,满足其它处理器体系结构的需求。这样做可以使大部分的设计和开发工作通过逆向工程得以避免,但这种亦步亦趋的模式的创新性不足。
以Itanium为代表的微处理器的指令执行路径如图1b所示,包含两条路径
问题→体系B→硬件B(包含硬件A)→结果;
问题→体系A→硬件B(包含硬件A)→结果;
即在同一芯片中集成不同的硬件分别执行体系A和体系B的指令,利用跳转指令实现两者之间的转换。第一条指令执行路径基于新的体系结构B,而第二条指令执行路径用于兼容目的,因为硬件B本身集成硬件A,所以体系A的指令可以在硬件B上直接执行。这种方法只适用于同一公司的产品设计。
以Transmeta为代表的微处理器的指令执行路径如图1c所示,包含两条路径
问题→体系B→硬件B→结果;
问题→体系A→体系B→硬件B→结果;
第一条指令执行路径基于新的体系结构B,而第二条指令执行路径用于兼容目的,先将问题转化为体系A的指令,而后通过软件来完成体系A和体系B的之间的指令转换,最终的结果由硬件B译码执行。这种方式的体系结构设计可以在实现兼容体系A的同时保持自己的特点,即可以自主设计体系B。
本方法的缺陷在于完全由软件实现代码转换的代价较大。
MISC兼容体系结构的指令执行路径如图1d所示,可以包含N条路径
问题→体系B→可重构硬件B→结果;
问题→体系A→体系B→可重构硬件B→结果;
问题→体系C→体系B→可重构硬件B→结果;
······
问题→体系N→体系B→可重构硬件B→结果;
第一条指令执行路径基于新的体系结构B,后面的N-1条指令执行路径用于兼容目的,其特点在于
1.硬件B的设计是参考体系A、体系B、···体系N的指令集合和设计说明来设计的,硬件本身具有可重构特性。兼容是在具有可重构特性的兼容部件支持下实现的。
2.便于实现对多种不同体系结构的兼容。
采用图1d所示的方式设计的MISC兼容体系结构的指令执行方式如图2所示。目标兼容指令(源指令)通过指令转换程序变成MISC体系结构处理器能够识别的在一定指令格式限制下的算子拼装序列,该类指令在经过代码压缩过程后,由具有可重构特性的硬件进行译码执行。
下面结合图3a和图3b介绍MISC兼容体系结构的指令界面。
与通常处理器的指令系统不同,MISC体系结构的最小执行成分是算子(包括功能算子,数据算子,路由算子和复合算子),每个算子对应于一个确定的操作。指令的定义为某一特定时刻执行的操作的集合。算子集合和算子排列规则(指令格式)是构成该指令系统的两大要素。
指令格式的总体形态如图3a所示,包括SYS、CBFF、CONTROL和OPERATOR四个部分,其中SYS为保留位,CBFF为指令格式形态控制域,CONTROL为算子控制域,OPERATOR为算子编码域。OPERATOR分为若干个算子段,记为Opi,每个算子段可以拼装一个确定算子集合中的某个算子;对应于每个算子段,CONTROL中有相应的子格式控制域(记为CBCFi),CBCFi的编码唯一确定了算子段Opi上拼装的算子。译码器一次接受一个指令字,按照编码制定的规则译码执行。
算子按照一定的规则拼装成指令字,但在执行过程中,由于延时和替换等指令构成策略,每周期实际执行的实际指令长度可变。
有关算子的概念及结构介绍如下。
将在功能上具有一定联系的若干可控节点划分在一起,组成一个单元,成为指令直接控制的最小单位,其编码表示称之为算子。
所谓可控节点是指硬件中能够通过指令直接控制的器件,在寄存器堆中,可控节点可以是一个单独的可读写的寄存器,或者一个寄存器读/写端口。指令的功能是控制以上被控成分中的可控节点集合以实现某种语义功能。
按照所控制的硬件单元的不同,算子可以分为功能算子、数据算子、路由算子和复合算子。指令通过四类算子来实现对各硬件单元的控制。
算子集合定义如下OP=FOP+DOP+ROP+COP
功能算子集合FOP定义为
FOP={(fopi,tfopi)},fopi为功能算子,tfopi为该功能算子的执行周期。
<性质>若(fopi,tfopi)属于FOP,则
accri∈ACCR,若accri在t时刻值为VALUEO,t+tfopi时刻成为VALUE1;VALUE1为fopi标识的数据来源寄存器的内容经fopi标识的功能部件操作的结果。称fopi相关于accri。
功能算子为对应于功能单元(如图4a所示)控制的编码表示。功能单元(FUNCTIONAL CELL)指由数据通路可控节点和执行部件可控节点构成的能完成一个功能操作的硬件单元。
以能实现32位/64位整数加减法运算操作的DAU算子为例,相关的可控结点包括两个数据来源选通、数据宽度、操作类型。算子域构成如下
算子中的各个域分别表示运算的操作编码(加、减、求绝对值、求补等)操作数宽度(32/64位)和两个操作数来源的控制编码。
数据算子集合定义为DOP={(dopi,tdopi)},dopi为数据算子,tdopi为该数据算子的执行周期。
<性质>若(dopi,tdopi)属于DOP,则
comri∈COMR,若comri在t时刻值为VALUE0,t+tdopi时刻成为VALUE1;VALUE1为dopi标识的数据来源寄存器中的值,称dopi相关于comri;或
accri∈ACCR,若accri在t时刻值为VALUE0,t+tdopi时刻成为VALUE1,VALUE1为dopi标识的功能部件的值,称dopi相关于accri。
数据算子为对应于数据单元(如图4b所示)控制的编码表示,数据单元(DATA CELL)指由数据通路可控节点和寄存可控节点的组合构成的能完成一个数据存贮的硬件单元。数据单元可以是固定宽度,也可以是可变宽度的寄存器;可以是单个的寄存器,也可以是寄存器堆。从物理意义上讲,数据算子对应于硬件模型中的寄存器存储部件(包括单个寄存器或者寄存器堆的写端口)和数据来源控制。
例如控制寄存器组写端口的数据算子MTN1RA,该算子具有3个域,形态如下
其中,MTN1NO表示寄存器编码(MR0-MR7);RSMTN1RA表示第一输入端口数据来源编码;MFLD表示寄存器段编码(高端,低端,全字,或者无效)。
路由算子集合定义为ROP={(ropi,tropi)},ropi为路由算子,tropi为该路由算子的执行时间(路由算子的执行时间一般小于一个周期)。
<性质>若(ropi,tropi)属于ROP,则
comri∈COMR,若comri在t时刻值为VALUE0,t+tropi时刻成为VALUE1;VALUE1为ropi标识的数据来源寄存器中的值,称ropi相关于comri;或
accri∈ACCR,若accri在t时刻值为VALUE0,t+tropi时刻成为VALUE1,VALUE1为ropi标识的功能部件的值,称ropi相关于accri。路由算子对应于硬件模型中的路由控制。
路由算子为对应于通路单元(如图4c所示)控制的编码表示。通路单元(ROUTE CELL)指单纯由输入数据通路构成的一个路由操作单元。
以能实现四路总线BUS0、BUS1、BUS2和BUS3的数据来源选择操作的路由算子PATH1为例,指令域构成如下
其中各RS域表示控制总线BUS0、BUS1、BUS2和BUS3数据来源选通器的控制编码。
复合算子集合的定义为COP={(copi,tcopi)},copi为复合算子,tcopi为该复合算子的执行周期。
<性质>若(copi,tcopi)属于COP,则
comrj...,comri,comrj... ∈COMR,若comri,comrj..在t时刻值为VALUE0i.VALUE0j....,t+tfopi时刻成为VALUE1i.VALUE1j....;VALUE1i、VALUE1j...为copi标识的操作的结果。称copi相关于comri,comrj...。
复合算子为对应于复合单元(如图4d所示)控制的编码表示。复合单元(COMBINED CELL)指由不可分割的若干功能单元或数据单元构成的能完成一种特定功能的硬件单元,所谓“不可分割”是指单元中的部分可控节点受控时不能产生具有意义的动作,只有当单元中所有可控节点受控时,才产生具有确定意义的动作。例如堆栈操作算子MSTACK控制的就是一个复合单元,相关可控结点包括堆栈上所有的寄存器、堆栈指针来源选通器,和栈指针寄存器等。
下面结合图5以SPARC为例,对比指令转换前后的指令形态。图中SPARC-V9的指令格式为32位,包括源操作数、目的操作数、指令功能控制域和指令格式控制域。转化成MISC兼容体系结构后,指令形态为指令格式控制域、算子段控制域和算子编码,并可增加保留位。其中的算子为功能算子、数据算子、路由算子和复合算子等四类,分别对应于不同硬件单元的控制。
以加法指令为例,转换前后的指令形态如下
SPARC汇编指令ADDo2%12%o1%
编码格式
实现功能将寄存器o2、12中的操作数相加,结果存入寄存器o1.
转换后的指令形态如下
MISC汇编指令
ADD RPORT1,RPORT2||RPORT1 L1||RPORT L2||WPORT AUDD
编码形态
其中SYS为保留位。
实现功能完成一个加法操作、两个寄存器堆读操作和一个寄存器堆写操作,分别由加法算子DAU、路由算子PATH1和PATH1、以及寄存器堆写算子RFW1来进行控制。这样,从指令界面上看,该指令反映的是加法器,寄存器堆读端口1、寄存器读端口2和寄存器堆写端口1的并行控制。这种设计思想被称为“显式硬件单元控制(EHCC)”
图6为具有兼容性的可重构部件的设计流程;
设兼容目标体系为体系A、体系B、···体系N,则可重构部件的设计过程为
1.由不同体系推出该部件的形式化描述,过程如下
体系A→部件相关指令分析A→算子提取A→确定硬件资源A→形式化描述A;
体系B→部件相关指令分析B→算子提取B→确定硬件资源B→形式化描述B;
······
体系N→部件相关指令分析N→算子提取N→确定硬件资源N→形式化描述N;
以上过程可以并行执行
2.将根据不同体系得出的部件形式化描述进行串行叠加;
3.根据理论模型的叠加设计规则进行设计优化;
4.最终确定可重构部件的硬件结构。
图7为兼容目标指令分析和算子提取流程;
过程如下
1.分析源指令功能,将由同一类部件完成的功能排列在一起,重新编码,成为功能算子的操作码;
2.将源操作数独立成为路由算子,对应于寄存器堆的读端口;
3.将目的操作数独立成为数据算子的目的寄存器域;
4.根据功能,重新组织内部通路,形成功能算子的数据来源域和数据算子的数据来源域,并最终确定路由算子和数据算子的数量;
5.将必须同时控制多个部件执行的操作设计为复合算子;
6.进行算子拼装,考察是否能实现所有源指令的功能,如果不能实现则转第1步,如果能实现则算子提取结束。
下面介绍部件设计过程中的模型描述和设计规则。
在MISC体系结构中,部件的结构、功能和使用界面可以通过一个理论模型(在此称部件设计模型)来描述,一个部件设计模型模型定义为一个五元组,即
M=(OP,E,C,Ctrl,T)
该设计模型的五要素为
OP指操作关系集合,反映部件所实现的功能。以OP操作集合为基础进行设计,可以得到下述E、C、Ctrl和T;
E指资源的集合,如数据通路、存储体、逻辑、比较、条件、标识、运算等硬件部件以及支持重复、判定等控制行为的硬件部件。E的集合支持OP需求的实现;
Ctrl指控制关系集合,在实现OP需求过程时,通过控制关系Ctrl对体系结构动态组织,Ctrl包括控制点和控制逻辑。Ctrl的集合支持在确定的资源E和时间T的条件下实现OP需求的动态控制。具体而言MISC功能部件的控制要素包括算子OPERATOR,标识IDS以及由算子和标识信号产生可控节点控制信号的控制逻辑;
T指以最小时间关系表现的资源、操作、控制和优化的连接的集合;T是时间单位,T的集合支持OP需求。
而连接关系集合C针对前4个集合划分,为
C=Cop+Ce+Ct+Cctrl
其中,Cop为行为连接关系集合,Ce为硬件单元的连接关系集合,Ct为时间成分连接关系,Cctrl为控制成分连接关系。
基于上述设计模型的五元组,任何一个行为或一个行为集合(记作Bi)可以从4个方面表示为
OP(Bi)Bi的功能函数,定义行为Bi实施的过程;
E(Bi)Bi的资源函数。定义行为Bi在实施过程中使用的硬件资源及其数量;
CTRL(Bi)Bi的控制函数,定义行为Bi在实施过程中对硬件单元的控制。
T(Bi)Bi的时间函数,定义行为Bi实施过程所用的时间;
根据行为的可繁衍性和可规约性,有
OP(Bi)=op1&op2&..&opn,opi∈OP,&∈Cop
E(Bi)=e1&e2&...&en,ei∈E,&∈Ce
CTRL(Bi)=ctr11&ctr12&...&ctrln,ctrli∈CTRL,&∈Cctrl
T(Bi)=t1&t 2&....&tn,ti∈E,&∈Ct
以上各个成分的形式化描述说明如下。为叙述方便起见,将Cop、Ce、Ct、Cctrl分别与OP、E、T、CTRL结合起来说明。
1、最小操作行为集合OP及其连接关系Cop
1)OP={Opb,+}
OPb元操作集合。定义元操作为最小微操作,是功能划分的最小成分,不可分割,如一个寄存器的赋值,一次加法操作等,其描述符为μOP。任何一个操作OP可以分解为各个不同时刻的μOP的组合,μOP之间可以重复,但不同的μOP之间彼此正交。在寄存器堆的设计模型中,元操作为赋值操作(以“*”表示),是由硬件单元的一个连接实现的行为,任何一种寄存器操作可以用赋值元操作及其叠加(以“+”表示)来描述。
2)Cop={|,||,=>..,{*}},分别表示操作的串行、并行、选择、重复等;
“b1|b2”即在某一具体的时刻,行为b1与行为b2中只有一个有效,b1,b2∈OPR,是一种排斥性的“或”关系,值得注意的是,“|”符号只用在描述操作之间的关系时使用,在描述操作序列时,串行操作是用不同的时标来区分的。b1,b2∈OP。
“b1||b2”表示并行执行。即在某一具体时刻,行为b1与行为b2可以在同一时间段完成操作,b1,b2∈OP。
“b1=>b2 b3”表示条件执行。行为b1先执行,当行为b1执行结果为真时,行为b2执行,否则执行行为b3。b1,b2,b3∈OP。
“{b1*b2}”表示重复执行。行为b1先执行,若行为b1执行结果为真,则执行行为b2,否则结束。重复该过程,直到行为b1的执行结果为假为止,b1,b2∈OP。
2、最小硬件单元集合E及其连接关系集合Ce
1)E={e1,e2,...en},ei为一个硬件单元。
硬件单元的类型包括
(1)通路单元集合P
指构成寄存器的抽象的数据来源控制元件,以多路选择器为例,当它与记忆体相连时,表示为P加记忆体(或总线)的名字(大写)以及由括号[]包括的一组线名,括号内由符号“|”分隔的部分为选择控制信号。例如PE[a,b,c,d|Mr]表示四选一的选择控制,数据的去向为记忆体E,四路数据来源分别为记忆体A、B、C、D,Mr为选通控制信号,对于与记忆体相连的多路选择的输出线名可以表示为对应的小写形式pe,对于与总线相连的多路选择的输出线名可以直接由总线名的小写形式表示。
(2)记忆单元集合M
指构成存储/寄存器的抽象的数据存储元件,记忆体(寄存器)名以大写字母表示。如A(La)、B(Lb)、C(Lc)、R1(Lr1)、R2(Lr2)、R3(Lr3)、...,记忆体括号内以L开头的信号为锁存控制信号;
(3)算术运算单元集合AU,指能完成一定运算功能的部件;
(4)逻辑运算单元集合L,指能完成一定逻辑功能的部件;
(5)判断单元集合J,指能完成比较判断功能的部件;
(6)分支单元集合BR,指能完成分支操作的部件;
2)Ce={·,+},分别表示资源的顺序使用和同时使用
ei·ej当且仅当ei,ej∈E,存在一个k,ei[out]与ej[in_k]间存在一条联线;
ei+ej当且仅当ei,ej∈E,不存在一个k,ei[out]与ej[in_k]间存在一条联线;
记忆体之间的连接是通过连线建立的,定义可重构部件的输出线名(NET名)为与表示记忆体的大写字母相同的小写形式。例如adder、fau、a、b、c、r1<15:0>分别用来表示加法器ADDER,浮点加法器FAU,寄存器A、B、C和R1<15:0>的输出线名,其中<15:0>表示位宽,当一个连线是由多个不同的信号组合而成时,用{,}表示,例如{r1<15:8>,r0<7:0>}表示由R1和R0两个寄存器的输出线组合而成的新的连线,其中r1<15:8>为它的高8位,r0<7:0>为它的低8位。
3、最小时间成分集合T及其连接关系Ct
1)T=正数
2)Ct={max,+},分别表示取时间最大值和时间相加。如果OP操作关系为串行执行,则时间关系为时间相加;如果OP操作关系为并行执行,则时间关系为取时间的最大值。
4.最小控制成分集合CTRL及其连接关系Cctrl
1)CTRL={Operator,IDS,CtrlL}
(1)Operator表示可重构部件的操作算子集合,由于可重构部件能实现不同体系结构的部件所具有的功能,因此同一个部件在使用界面上也是是实现上述功能的操作集合;
(2)IDS表示与可重构部件相关的标识集合,它是可重构部件的兼容目标所产生的标识的集合;
(3)CtrlL表示对各可控节点的控制逻辑,控制逻辑既包含时序电路如计数器、锁存器,又包含组合逻辑如译码器等,它的输入是算子和标识以及时钟和中断信号等系统信号,输出为各可控节点上的编码。
算子和标识信号都用相应的大写形式来表示,控制逻辑中的寄存器可控节点由一组通路信号和锁存信号对(MRi,LRi)来表示,MRi,LRi的产生逻辑由布尔代数来描述,对于通路可控节点由MP来表示,MP的产生逻辑由布尔代数描述。
2)Cctrl={·,+},分别表示顺序控制和同时控制。
在进行可重构部件设计时,存在以下设计规则
1.可重构设计资源规则(图8a)满足OP集合串行叠加的资源需求是完成所有OP在不同时标下所需要的对应资源的并集。
2.可重构设计连接规则(图8b)串行叠加(完成多种功能的电路描述进行叠加,但在同一时刻只有一种功能有效)时,相同的数据来源可以合并,不同的数据来源并行排列,同时改变相应的选通控制条件。
3.可重构设计控制规则(图8c)满足OP串行叠加的控制描述为叠加前各OP的控制描述的并集,对相同操作的新的控制条件为原条件的或关系。
4.可重构设计时序规则(图8d)OP串行叠加后的关键路径为叠加前各OP的关键路径与各自增加的开关电路的延时值之和的最大值。
下面以可重构寄存器堆部件为例介绍可重构部件的设计方法。
定义可重构寄存器堆为这样的一种寄存器堆,当使用指定范围内的不同类型的指令访问该寄存器堆时,它能够适应指令的变化而改变自身结构,使之表现出与所访问的指令相同类型的硬件特性。
寄存器堆的可重构设计是在寄存器可重构设计理论模型的基础上通过寄存器堆的设计优化方法来实现的。定义寄存器堆的设计优化为寄存器操作集合(OPSETR)在一个最优电路(ER、CR、CTRLR)上的实现。寄存器堆设计优化研究的主要内容是OPR叠加、逐步求精过程中的优化规则,其结果是设计优化规则集合——RULE_DESIGN。寄存器堆可重构设计方法是一种正向设计,其核心是根据需求分析确定算子集合,这需要对该硬件结构有足够的了解。
图9为可重构寄存器堆的外框图,该寄存器堆是在普通的具有4个随机读端口和4个随机写端口的随机读写寄存器堆的基础上通过硬件叠加而成的,它可以完成普通随机读写寄存器堆的读写操作、SPARC-V9通用寄存器堆的寄存器窗口操作、Itanium通用寄存器堆的移动寄存器窗口和寄存器旋转操作,其输入为4个写端口的数据来源,和完成寄存器堆随机读写操作、寄存器窗口操作和移动寄存器窗口及寄存器旋转操作的控制型号,输出为4个读端口的数据以及写冲突标识和窗口溢出标识。上述标识中写冲突标识的产生原因为两个写操作的目标地址相同;窗口溢出标识包括上溢和下溢,当窗口已满时,再进行SAVE操作将产生上溢标识,当窗口已空,再进行RESTORE操作将产生下溢标识,窗口溢出后,由自陷处理程序控制寄存器堆与存储器交换数据,直到能完成所要求的操作。
图9a为可重构寄存器堆用作随机读写寄存器堆时在体系界面上的特征。当用作随机读写寄存器堆时,可重构寄存器堆在体系界面上看,具有4个读端口和4个写端口,每个读/写端口可以访问128个寄存器。对读写端口的控制是由RANDOMPATH1、RANDOMPATH2、RANDOMPATH3、RANDOMPATH4、RANDOMRFW1、RANDOMRFW2、RANDOMRFW3、RANDOMRFW4等8个算子来控制的。
RANDOMPATHi(I=1-4)算子是四个路由算子,控制4个读端口的随机读操作,以RANDOMPATH1为例介绍如下
1)算子形态包含一个数据来源域RSRANDOM1<6:0>,通过第一随机读端口控制从包含128个寄存器的寄存器堆中选择数据读出;
2)汇编语法RANDRD1<数据来源>;
其中,数据来源为R0-R127。
3)操作描述
完成数据来源的选通,并将选通的结果写入寄存器堆的输出总线上,一个具体的操作数选通过程为由路由算子从确定的寄存器中选通数据,再由功能算子或数据算子等的操作数来源控制编码从该数据通路上取已选定的数据进行操作。路由算子控制下选通的数据应当是在前一个周期稳定的数据。路由算子所属的总线保持最近一次PATH被调用时的状态,且总线的状态可以在中断时被保护和恢复。
4)使用约束配合功能算子、数据算子和复合算子。
RANDOMRFWi(i=1-4)为四个数据算子,分别控制寄存器堆的四个随机写端口,以RANDOMRFW1为例介绍如下
1)算子形态
其中RDRANDO1<6:0>为目的操作数地址,RSRFRANDW1<1:0>为数据来源控制信号,用于控制4路数据来源读端口数据PRD1,功能部件结果总线AUDD,立即数IMMD和存储端口MD0的选通。
2)汇编语法RANDWR1<目的寄存器><数据来源>
其中,目的寄存器为R0-R127,数据来源为PRD1,AUDD,IMMD和MD0。
3)操作描述
单周期算子,完成数据来源的选通,并将选通的结果写入当前寄存器窗口中的某一寄存器,该寄存器由算子中的目的寄存器域确定。
4)使用约束
由于所述<数据来源>定义的是“通路”,而不是用户可见的具体寄存器,因此配合RANDOMRFW1算子,应当同时使用路由算子实现具体寄存器的选择。
5)异常
当两个随机写算子同时作用,而且目的寄存器域相同时,产生写冲突异常。
图9b为可重构寄存器堆用作寄存器窗口时在体系界面上的特征,当用作寄存器窗口时,可重构寄存器堆在体系结构界面上看,是一个由8个窗口构成的循环堆栈,其操作符合SPARC V9的规范。
SPARC-V9规范是SPARC系列中的64位处理器,由SPARCInternational的SPARC体系结构委员会于1993年发布。对SPARC处理器来说,任何时候用户可见的通用寄存器都为32个,其中R0-R7为全局寄存器(Globals),R
为全0,只读;R8-R15为输出寄存器(outs),R16-R23为局部寄存器(locals);R24-R31为输入寄存器(ins)。SPARC的通用寄存器的个数与实现有关,可以从64个到528个不等,对应两组全局寄存器,和3至32个与机器相关的包含16个寄存器的寄存器组,寄存器组重叠构成寄存器窗口,寄存器长度64位。每个寄存器窗口的输入寄存器和输出寄存器分别与相邻的两个寄存器窗口重叠,窗口号为CWP-1(CWP为当前窗口指针)的寄存器窗口的输出寄存器(对寄存器窗口中的物理寄存器个数NWINDOWS取模)与当前窗口的输入寄存器重叠,当前窗口的输出寄存器与窗口号为CWP+1的寄存器窗口的输入寄存器重叠(对寄存器窗口中的物理寄存器个数NWINDOWS取模),局部寄存器对每个寄存器窗口来说是唯一的。实际软件可用的窗口数比硬件实现的窗口数少1,因为最后一个寄存器窗口的输出与最老的一个寄存器窗口的输入重叠将冲掉有效数据。过程调用指令(CALL和JMPL)并不改变CWP,一个过程可以被调用而不改变窗口。
寄存器窗口的控制界面是通过SPARC-V9的指令分析得到的。指令的分析过程如下。
SPARC-V9指令集合共包含135条RISC指令,指令长度32位,指令格式分4类,每种格式的指令根据各个控制域的取值不同分成不同的指令形态,共有31种不同的指令形态。按照指令的功能不同可以将SPARC指令分为如下几类存储访问指令、存储同步指令、整数运算指令、转移控制指令、条件赋值指令、寄存器窗口管理指令、状态寄存器访问指令、特权寄存器访问指令、浮点操作指令,与实现相关的指令和保留指令。
SPARC-V9通用寄存器堆相关指令分两大类
第一类指令如存储访问、整数运算、转移控制、条件赋值、状态寄存器访问等,只使用寄存器窗口的普通读写功能,即对应当前活动窗口(32个用户可见寄存器)的读写,对寄存器堆的操作功能比较单一;
第二类指令为寄存器窗口管理指令,完成对窗口及其状态的控制。分别介绍如下
1.SAVE和RESTORE指令
1)汇编语法
save reg(rs1),reg_or_imm,reg(rd)
restore reg(rs1),reg_or_imm,reg(rd)
2)指令形态
或者,
3)执行过程
SAVE指令提供一个使用新的寄存器窗口来执行的例行程序。旧窗口的输出寄存器OUT变为新窗口的输入寄存器IN,新窗口的OUT和局部寄存器LOCAL中包含的值为0或者正在执行的过程的值,即本过程看到的是一个干净的窗口;RESTORE指令恢复由当前过程执行的最后一个SAVE指令所保存的寄存器窗口。老窗口中的输入寄存器变为新窗口中的输出寄存器,新窗口中的输入和局部寄存器包含前一窗口的值。
当不产生SPILL/FILL自陷时,SAVE和RESTORE指令的作用相当于加法指令,只是它们的源操作数r(rs1)和/或r(rs2)读自老窗口(即通过原来的当前窗口指针CWP寻址的窗口),而加法结果写入新窗口的r(rd)(即 由新的CWP寻址的窗口)。执行SAVE指令将使得可保存寄存器窗口个数寄存器CANSAVE减一,可恢复寄存器窗口个数CANRESTORE增一;执行RESTORE指令将使得寄存器CANRESTORE减一,寄存器CANSAVE增一。
4)异常
A.如果CANSAVE=0,SAVE指令的执行将导致WINDOW_SPILL异常;
B.如果CANSAVE≠0,但干净的窗口数为0,即
(CLEANWIN-CANRESTORE)=0时,SAVE指令的执行将引起
WINDOW_CLEAN异常;
C.如果CANRESTORE=0,RESTORE指令的执行将引起WINDOW_FILL异常。
2.SAVED和RESTORED指令
1)汇编语法SAVED,RESTORED
2)指令形态
3)执行过程
SAVED指令的执行使得CANSAVE增一,如果OTHERWIN为0,CANRESTORE减一,如果OTHERWIN不为0,OTHERWIN减一,SAVED指令可以被SPILL自陷控制器用来表示一个窗口的SPILL已经成功地完成;
RESTORED指令使得CANRESTORE增一,如果OTERWIN为0,CANSAVE减一,如果OTHERWIN不为0,OTHERWIN减一。此外,如果CLEANWIN不等于NWINDOWS,RESTORED指令将使CLEANWIN增一。RESTORED指令可以被FILL自陷控制器来表示一个窗口已经被成功地FILL。
3.FLUSHW指令
1)汇编语法FLUSHW
2)指令形态
3)执行过程当任何一个当前窗口之外的寄存器窗口包含有效数据时,FLUSHW指令的执行将通过重复SPILL自陷,使得当前窗口以外的所有有效窗口都被溢出到存储器。包含有效数据的寄存器窗口数用下式计算NWINDOWS-2-CANSAVE,如果计算结果为0,FLUSHW无效,相当于一个空操作。
根据上述指令分析,设计可重构寄存器堆在用作寄存器窗口时对应的算子如下。为了简便起见,只考虑寄存器堆的读写端口为3(两读一写)的基本需求。
1.读算子WINPATH1<4:0>;WINPATH2<4:0>
1)算子形态分别包含RSWIN1NO<4:0>和RSWIN2NO<4:0>两个域,用于控制两个读出端口的操作,对应于指令中的RS1和RS2域;
2)汇编语法
WINRD1<源寄存器>
WINRD2<源寄存器>
作为<源寄存器>的寄存器操作数编码如下
其中,G0-G7表示全局寄存器(Globle),00-07表示输出寄存器(Out),L0-L7表示局部寄存器(Local),I0-I7表示输入寄存器(In)。
3)操作描述
完成数据来源的选通,并将选通的结果写入寄存器堆的输出总线上,一个具体的操作数选通过程为由路由算子从确定的寄存器中选通数据,再由功能算子或数据算子等的操作数来源控制编码从该数据通路上取已选定的数据进行操作。路由算子控制下选通的数据应当是在前一个周期稳定的数据。路由算子所属的总线保持最近一次PATH被调用时的状态,且总线的状态可以在中断时被保护和恢复。
4)使用约束
配合路由算子,应当使用其它的功能算子、数据算子或复合算子。
2.写算子WINRFW<6:0>,控制窗口状态下的写操作。
1)算子形态
其中RDWNO<4:0>为目的寄存器地址,对应于指令中的RD域,RSRFW<1:0>为数据来源控制信号,用于控制4路数据来源读端口数据PRD2,功能部件结果总线AUDD,立即数IMMD和存储端口MD0的选通。
2)汇编语法WINWR<目的寄存器><数据来源>
其中,目的寄存器的操作符和地址编码与读算子的源寄存器相同,数据来源则为PRD2,AUDD,IMMD和MD0。
3)操作描述
单周期算子,完成数据来源的选通,并将选通的结果写入当前寄存器窗口中的某一寄存器,该寄存器由算子中的目的寄存器域确定。
4)使用约束
由于所述<数据来源>定义的是“通路”,而不是用户可见的具体寄存器,因此,配合WINRFW算子,应当同时使用路由算子实现具体寄存器的选择。
5)异常
G0恒为0,当目的操作数为G0时,操作无效。
3.DAU<5:0>算子
1)算子功能
完成64位整数的加减法、带进位加减法、SAVE和RESTORE。本文只讨论该算子用于SAVE和RESTORE操作时的情况。
2)汇编语法
SAVEregrs1,reg_or_imm,regrd
RESTORE regrs1,reg_or_imm,regrd
3)DAU<5:0>算子格式
当OPDAU<3:0>=1111时,执行SAVE操作;当OPDAU<3:0>=1101时,执行RESTORE操作。
4)执行过程描述
DAU是单周期算子。首先,进行操作数选通,然后根据操作码进行64位加法运算,用于SAVE和RESTORE时,源操作数r(rs1)和/或r(rs2)读自老窗口(即通过原来的当前窗口指针CWP寻址的窗口),而加法结果写入新窗口的r(rd)(即由新的CWP寻址的窗口),同时产生错误标识或其他标识信号,并根据编码决定是否修改CCR标识寄存器。
SAVE操作提供一个使用新的寄存器窗口来执行的例行程序(按照SPARC V9体系结构的定义,SAVE有效时CWP加1),RESTORE操作恢复由当前过程执行的最后一个SAVE指令所保存的寄存器窗口(按照SPARC V9体系结构的定义,RESTORE有效时CWP减1)。同时SAVE操作和RESTORE操作将修改状态寄存器CANSAVE和CANRESTORE。CANSAVE用于记录位于CWP后未被使用的寄存器窗口数,CANRESTORE用来记录在CWP之前的已经被当前程序使用的寄存器窗口数。SAVE操作使得寄存器CANSAVE减一,寄存器CANRESTORE增一,CANSAVE的复位值为物理窗口数减2(为当前窗口和重叠窗口),当CANSAVE寄存器为0时,执行SAVE操作将造成窗口上溢;RESTORE操作使得寄存器CANSAVE增一,寄存器CANRESTORE减一,CANRESTORE的复位值为0,当CANRESTORE寄存器的值为0时,执行RESTORE操作将产生窗口下溢。
4.OPWIN<1:0>算子
1)算子功能管理窗口状态,执行SAVED、RESTORED和FLUSHW操作。
2)汇编语法
SAVED
RESTORED
FLUSHWIN
3)OPWIN<1:0>算子格式
OPWIN<1:0>,编码如下,
4)执行过程描述
执行SAVED操作使得CANSAVE增一;如果状态寄存器OTHERWIN为0,CANRESTORE减一,如果OTHERWIN不为0,OTHERWIN减一,其中OTHERWIN为含当前地址空间之外的地址空间的有效值。
执行RESTORED操作使得CANRESTORE增一;如果OTERWIN为0,CANSAVE减一,如果OTHERWIN不为0,OTHERWIN减一。此外,如果状态寄存器CLEANWIN不等于NWINDOWS(为物理实现的寄存器窗口总数),RESTORED指令将使CLEANWIN增一,其中CLEANWIN指示可以被SAVE指令使用而不会产生CLEAN_WIN异常的寄存器窗口数。
执行FLUSHW操作的情况分两种当NWINDOWS-2-CANSAVE不为0时,产生一个SPILL自陷,由自陷处理程序控制,在完成一个窗口的溢出后将重新执行FLUSHW操作,直到除当前活动窗口之外的所有寄存器窗口被溢出到存储器;当NWINDOWS-2-CANSAVE为0时,FLUSHW等效于一个空操作(NOP)。
图9c为可重构寄存器堆用做移动寄存器窗口及旋转寄存器时在体系界面上的特征。当用作移动寄存器窗口及旋转寄存器时,其操作符合Itanium体系结构的操作规范。
Itanium通用寄存器包括128个寄存器GR0-GR127,对所有权限的程序均可见,每一个寄存器为65位,最高位为NAT(Not a thing)位,用于预测异常标识,当NAT为1时表示寄存器包含一个延迟异常标志,此时寄存器内的数据是否有效与具体执行有关,本发明的可重构寄存器堆不支持此项功能,因此寄存器宽度仅为64位。
Itanium通用寄存器堆中的寄存器被分为两个子集GRO-GR31为静态通用寄存器域,GR0为全0,只读;GR32-GR127为堆栈通用寄存器域。静态寄存器GR0-GR31对所有过程可见,而堆栈寄存器域中对应于每一个过程有一个相应的移动寄存器窗口(shifting window),窗口的大小可以由软件定义,在0-96之间变化,窗口之间通过寄存器重叠在CALL和RETuRN操作时自动交换参数,从而避免对存储器的访问。过程切换时,静态寄存器必须按照软件惯例进行SAVE和RESTORE操作,而堆栈寄存器中移动窗口的切换由硬件自动完成,不需要显式的软件干预,寄存器的重命名对应用程序来说是不可见的。移动窗口大小由SOF和SOL两个参数来决定,SOF和SOL由指令设定,SOF为移动窗口的大小,初值为96,SOL为窗口中局部寄存器的个数(包括输入寄存器和局部寄存器),初值为0,输出寄存器的个数两者之差。执行CALL指令时,当前活动窗口的GR32的物理地址变为上一窗口中GR32的地址与上一窗口的SOL之和,新窗口的大小SOF为上一窗口的输出寄存器域,新窗口的SOL和SOR为0。执行RETURN指令时恢复原来的SOF和SOL。实际的物理堆栈寄存器个数是与实现有关的,但必须为16的偶数倍,最少为96个。
堆栈寄存器的一部分可以由软件定义为旋转寄存器,用来加速循环处理。当寄存器发生旋转时,实际访问的物理寄存器地址计算如下
物理寄存器号=(指令给出的寄存器号<6:0>+RRB)mod旋转寄存器域。
其中,RRB为旋转寄存器基寄存器,7位,初值为0,每完成一次叠代后减一。旋转寄存器的旋转域定义为从GR32开始,大小为8*SOR<3:0>,SOR可由软件设定,初值为0,最大为12,即旋转域的最大值为96。只有当RRB为0时,指令才能改变寄存器堆栈中旋转域的大小。通常,由软件保证旋转域不与活动窗口的输出域重叠,或者在设置输出参数寄存器之前首先将RRB置0。
对Itanium通用寄存器堆的相关指令分析如下。
Itanium处理器采用IA-64体系结构,指令执行以指令组为单位,指令组可以由一条或任意多条指令束(bundle)组成。每个128位的指令束包含三个41位指令槽和一个5位的模板信息域,指令41位长,分6种类型整数ALU类、非ALU整数类,存储器类,浮点类,分支类和扩展类指令,共有110多种指令形态。指令执行从某个给定的指令束地址和某个指令槽开始,包括直到第一个stop或转移分支为止的所有按序增长的指令槽和指令束,IA-64体系结构允许发射不同指令束中的多条单独的指令,也可以在一个时钟周期发射多条指令束。IA-64指令集中与通用寄存器堆相关的指令也可以分为两大类
第一类是对静态寄存器和当前移动寄存器窗口FRAME的读写操作,以ADD指令为例,形态如下
第二类指令实现对寄存器堆栈和旋转寄存器的控制,分别介绍如下
1.Alloc Stack Frame
1)汇编语法
(qp)allocr1=ar.pfs,i,1,o,r
2)指令形态
3)执行过程一个新的移动寄存器窗口被分配到通用寄存器堆栈上,Previous Function State(PFS)寄存器被复制到通用寄存器GR1上。移动寄存器窗口大小的改变是立即完成的,写GR1以及随后的其它操作都在新的移动寄存器窗口上进行。i,1,o,r分别表示输入寄存器、局部寄存器、输出寄存器和旋转寄存器的大小范围。对于新的移动寄存器窗口,SOF(size of local frame)为i、l和o三者之和,SOL(size of local regeon)为i和1之和,输入寄存器和局部寄存器在物理上没有区分,旋转域小于SOF,大小为8的倍数。
4)异常当alloc指令试图修改SOR(size of local rotating)域,而RRB寄存器不为0时,产生Reserved register/Field异常;如果SOF大于96,或者SOR大于SOF,产生非法操作异常;如果没有足够的寄存器来完成移动寄存器窗口的分配,处理机将产生等待STORE操作的完成,并产生相关异常。
2.Branch
1)汇编语法
(qp)br.btype.bwh.ph.dh target25
(qp)br.btype.bwh.ph.dh b1=target25
br.btype.bwh.ph.dh target25
br.ph.dhtarget25
(qp)br.btype.bwh.ph.dhb2
(qp)br.btype.bwh.ph.dhb1=b2
(qp)br.ph.dh b2
2)指令形态
A.IP-relative分支
B.Indirect分支
3)执行过程完成分支条件判断,产生分支操作或者继续后续操作。对于IP相关型分支,汇编中的target25为分支目标地址标志,实际的目标地址为imm21=target25-IP>>4;对于indirect型分支,目标地址为BRb2。分支的类型与功能如下表所示
各分支类说明如下
(1)cond,如果Qualifying谓词(qp)为1,产生分支,否则不发生。
(2)Call,如果qp为1,产生分支,同时有如下操作CFM(current frame marker)、EC(尾声计数器)和当前权限被SAVE到PFS(previous functional state)寄存器;调用者的移动寄存器窗口被SAVE,被调用者被自动分配一个新的移动寄存器窗口,大小为调用者是输出寄存器域;CFM中的RRB寄存器被清0;返回LINK值被写入BR b1。
(3)return,如果qp为1,产生分支,同时有如下操作由PFS寄存器恢复CFM、EC和当前权限;调用者的移动寄存器窗口被RESTORE。
(4)ctop和cexit,执行过程如图9d所示。操作描述如下。
ctop或cexit操作有效,
循环计数器LC不等于0,
LC减一,尾声计数器EC不变,RRB减一,寄存器旋转;
循环计数器LC等于0
尾声计数器EC大于1
LC不变,EC减1,RRB减1,寄存器旋转;
尾声计数器EC等于1
LC不变,EC减1,RRB减1,寄存器旋转;
尾声计数器EC等于0
LC不变,EC不变,RRB不变,循环退出。
(5)wtop和wexit,执行过程如图9e所示。操作描述如下。
谓词寄存器PR[qp]不等于0,
尾声计数器EC不变,RRB减一,寄存器旋转;
谓词寄存器PR[qp]等于0
尾声计数器EC大于1
EC减1,RRB减1,寄存器旋转;
尾声计数器EC等于1
EC减1,RRB减1,寄存器旋转;
尾声计数器EC等于0
EC不变,RRB不变,循环退出。
(6)cloop,LC不为0时,LC减一,分支产生。
(7)IA,无条件转移
3.Clear RRB
1)汇编语法
clrrrb
clrrrb.pr
2)指令形态
3)执行过程ALL型将所有RRB(通用寄存器堆、浮点寄存器堆和谓词寄存器堆)清0,PRED型只将谓词寄存器堆的RRB寄存器清0。
4)异常该指令必须为指令组中的最后一条指令,否则产生非法操作错。
4.Cover Stack Frame
1)汇编语法cover
2)指令形态
3)执行过程分配一个新的大小为0的堆栈移动寄存器窗口,该移动寄存器窗口中不包含任何前一移动寄存器窗口中的寄存器,RRB被复位。
4)异常该指令必须为指令组中的最后一条指令,否则产生非法操作错。
5.Flush register stack
1)汇编语法flushrs
2)指令形态
3)执行过程所有堆栈寄存器中DIRTY域(包括所有先前过程移动寄存器窗口中尚未存入后援寄存器中的寄存器)中的寄存器被写入后援存储器。
4)异常该指令必须为指令组中的第一条指令,且必须位于指令束中的SLOT0和SLOT1,否则结果无定义。
6.Load register stack
1)汇编语法loadrs
2)指令形态
3)执行过程该指令保证存储器中位于当前BSP指针以前的一定数量的值被写入堆栈寄存器的DIRTY域中,所有其它寄存器被标志为invalid,但不存入后援存储器。LOAD的数据多少由RSC.loadrs寄存器决定,当该寄存器为0时,其效果为将当前移动寄存器窗口以外的所有寄存器置为无效。
4)异常该指令必须为指令组中的第一条指令,且必须位于指令束中的SLOT0和SLOT1,否则结果无定义。
根据上述指令分析,设计算子如下。为了方便讨论,只考虑3个寄存器端口(两读一写)的基本需求,更多端口的寄存器堆算子设计方法完全相同。
1.读算子ROTPATH1<6:0>;ROTPATH2<6:0>。
1)算子形态
分别包含RSROT1NO<6:0>和RSROT2NO<6:0>两个域,用于控制两个读端口操作。
2)汇编语法
ROTRD1<源寄存器>
ROTRD2<源寄存器>
其中源寄存器为R0-R127中的任一寄存器。
3)操作描述
完成数据来源的选通,并将选通的结果写入寄存器堆的输出总线上,一个具体的操作数选通过程为由路由算子从确定的寄存器中选通数据,再由功能算子或数据算子等的操作数来源控制编码从该数据通路上取已选定的数据进行操作。路由算子控制下选通的数据应当是在前一个周期稳定的数据。路由算子所属的总线保持最近一次PATH被调用时的状态,且总线的状态可以在中断时被保护和恢复。
4)使用约束
配合路由算子,应当使用其它的功能算子、数据算子或复合算子。
2.写算子ROTRFW<8:0>,控制窗口状态下的写操作。
1)算子形态
其中RDRTO<6:0>为目的操作数地址,RSRFW<1:0>为数据来源控制信号,用于控制4路数据来源读端口数据PRD3,功能部件结果总线AUDD,立即数IMMD和存储端口MD0的选通。
2)汇编语法
ROTWR<目的寄存器><数据来源>
其中,目的寄存器为R0-R127中的任一寄存器,数据来源为PRD3,AUDD,IMMD和MD0。
3)操作描述
单周期算子,完成数据来源的选通,并将选通的结果写入当前寄存器窗口中的某一寄存器,该寄存器由算子中的目的寄存器域确定。
4)使用约束
由于所述<数据来源>定义的是“通路”,而不是用户可见的具体寄存器,因此,配合ROTRFW算子,应当同时使用路由算子实现具体寄存器的选择。
5)异常
R0恒为0,当目的操作数为R0时,操作无效。
注以上作为源操作数/目的操作数的寄存器R0-R127由7位地址顺序编码。
3.移动寄存器窗口分配算子Allocframe<17:0>
1)功能设置移动寄存器窗口长度、局部寄存器域和旋转域的大小,旋转域寄存器为一个4位寄存器,实际旋转域的值为旋转域寄存器的值左移3位。
2)算子形态
3)汇编语法
ALLOC#i,#l,#o,#r
//注sol=I+1,sof=I+1+o,sor=sor<<3。
4)操作描述
单周期算子,完成移动窗口大小及寄存器旋转域设置,该算子执行的结果将修改SOR,SOL和SOF寄存器。
4.分支控制算子BRANCH<3:0>
1)功能控制定循环和不定循环的分支操作。
2)算子形态
BTYPE<2:0>为类型控制域,编码如下
RSTYPE<0>为地址来源控制域,控制地址来源为IMMD(RSTYPE<0>为0),SMDI(RSTYPE<0>为1)。
3)操作描述
对于CALL操作,将修改BOF寄存器(BOF为当前窗口的第一个寄存器的物理地址),自动将原来的SOF-SOL区域设置成新的SOF域,窗口发生移动。
对于RETURN操作,恢复前一次的BOF、SOL和SOF,窗口反方向移动。
3)汇编语法
CTOP IMMD
CEXIT IMMD;
WTOP IMMD;
WEXIT IMMD;
CLOOP IMMD;
CALL IMMD;
CALL REG;
RETURN REG;
5.算子OPSTK<1:0>
1)功能管理堆栈状态,执行clrrrb,cover,flushrs和Loadrs操作。
2)算子编码
3)汇编语法
CLRRRB;
COVER;
FLUSHRS;
LOADRS;
4)执行过程描述
CLRRRB操作有效时,将RRB寄存器置0;
COVER操作有效时,SOF,SOL,SOR和RRB寄存器全部清0;
FLUSHRS操作有效时,如果BSP不等于BSPSTORE,执行STORE操作;
LOADRS操作有效时,所有在BSP和BSP-Number_of_Bytes之间的寄存器的值被LOAD进寄存器堆栈,并被置为DIRTY状态。
图10为全局寄存器与窗口寄存器分离的寄存器窗口结构示意图。该寄存器窗口部件包括窗口寄存器堆地址转换部件101,窗口寄存器堆102,全局寄存器堆103和数据输出选择部件104。
设寄存器窗口中的体系可见寄存器个数为2a,全局寄存器的个数为2b(b<a),则全局寄存器堆中包含的寄存器个数为2b,窗口寄存器堆中包含的物理寄存器个数为2m,对于固定窗口,m=b+1+k,k为非负整数,对于移动窗口,2m≥2a-2b。
当进行写操作时,指令中的寄存器地址(路由算子中的寄存器源操作数和数据算子中的寄存器目的操作数,位宽为a)中的经过窗口寄存器堆地址转换部件101转换成符合窗口重叠特性的物理寄存器地址(位宽为m)访问窗口寄存器堆102,同时指令地址的对应于全局寄存器个数的低位地址[b-1:0]直接访问全局寄存器堆103,在任一具体时刻,一个写操作只能作用于全局寄存器堆和窗口寄存器堆两者中的一个,对寄存器堆的写操作是否有效是通过写地址使能信号来确定的。写地址使能信号由写算子使能信号和指令中寄存器地址的高位[a-1:b]进行逻辑组合而成当写算子使能同时指令中寄存器地址高位为0时,对全局寄存器堆的写操作有效;写算子使能同时指令中寄存器地址高位不全为0时,对窗口寄存器的写操作有效。全局寄存器堆和窗口寄存器堆的写操作数据来源相同。
当进行读操作时,指令中的寄存器地址的[b-1:0]段直接访问全局寄存器堆103,同时经过窗口寄存器堆地址转换部件101进行地址转换以后访问窗口寄存器堆,地址转换的原理与写操作相同,由输出数据选择部件104从两个分离寄存器堆的输出数据之间选择正确的数据输出,输出的条件为指令中寄存器地址的高位[a-1:b]是否为全0如果读操作的地址高位[a-1:b]为全0,则对全局寄存器堆的读操作有效,选择全局寄存器堆的数据输出;如果不为全0,则对窗口寄存器堆的读操作有效,选择窗口寄存器堆的数据输出。
以上结构不但适用于固定寄存器窗口的设计,也适用于移动寄存器窗口的设计。这两者之间的区别在于对于固定寄存器窗口的设计,每个寄存器窗口中的寄存器个数以及寄存器输入、局部和输出域的大小固定;对于移动寄存器窗口的设计,每个寄存器窗口中的寄存器个数以及寄存器局部域和输出域大小可编程。两者之间的联系在于它们都包含一个全局寄存器(或称静态寄存器)域和一个窗口寄存器域(或称堆栈区),全局寄存器对任意过程可见,而窗口寄存器域中的每一个窗口只对某一具体过程可见,窗口之间彼此重叠构成一个循环堆栈,新窗口的输入寄存器域包含旧窗口中的输出寄存器域中的有效数据,通过窗口的切换来减少对于存储器的访问,以提高程序的执行效率。
以上两种寄存器窗口的实现均可以采用图10所示的部件来完成,两者之间的差别主要在于窗口寄存器堆读写地址转换部件的产生原理不同。图10a和图10b描述的是固定窗口设计中窗口寄存器堆的地址转换部件,图10c和图10d描述的是移动窗口设计中窗口寄存器堆的地址转换部件。
图10a所示部件对应于图10中的窗口寄存器堆地址转换部件101,用于固定寄存器窗口的窗口寄存器堆地址转换。由于固定窗口的大小和寄存器输入域、局部域和输出域均是确定的,所以可以通过当前窗口指针CWP唯一地确定寄存器的物理地址。固定窗口设计中的窗口寄存器堆地址转换部件包括
CWP(当前窗口指针)生成部件1011,其用于复位的复位值0,和用于控制CWP变化的复位信号RST、SAVE操作使能信号和RESTORE操作使能信号,其中SAVE和RESTORE信号是根据算子DAU的使能信号EDAU(低电平有效)和算子DAU的功能域进行逻辑组合而产生的;其输出为两个不同时序的CWP的值CWP1和CWP2,分别用于读地址和写地址的生成,这是因为SAVE操作和RESTORE操作的读指针和写指针的时序不同,即源操作数来自旧窗口(SAVE和RESTORE操作完成之前的窗口),而目的操作数来自新窗口(SAVE和RESTORE操作完成之前的窗口)。根据最新的SPARC体系结构的定义,CWP的修改方式有两类SPARC V8采用的方式是SAVE有效时CWP减1,RESTORE有效时CWP加1;SPARC V9采用的方式是SAVE有效时CWP加1,RESTORE有效时CWP减1。1011的具体实现将在图10b中进一步说明。
地址预处理部件1012,将指令中的各个寄存器地址减去定值2b。
CWP地址扩展部件1013,将CWP逻辑左移,扩充至m位,当实现SPARCV9窗口地址转换时,还需要增加一次求补操作,以保证SAVE操作有效时CWP增一,同时第N+1窗口的输入寄存器与第N窗口的输出寄存器重叠。
加法部件1014。1011输出的CWP1经过1013的地址扩展后的值与经过1012预处理的读地址在通过加法部件1014完成加法操作,得到最终的窗口寄存器堆读操作的物理地址;1011输出的CWP2经过1013的地址扩展后的值与经过1012预处理的写地址在通过加法部件1014完成加法操作,得到最终的窗口寄存器堆写操作的物理地址。
图10b以由8个窗口构成的固定寄存器窗口的窗口寄存器堆地址转换部件为例对图10a作进一步说明,其中a=5,b=3,k=3,m=b+1+k=7。每一个寄存器固定窗口包括32(2a)个寄存器,它们分别由8(2b)个全局寄存器,8个输入寄存器、8个局部寄存器和8个输出寄存器构成,窗口个数为8(2k),总的物理寄存器的个数为136(2b+2m)。寄存器窗口的功能操作符合SPARC V9的规范,窗口寄存器堆地址转换部件的实施介绍如下。
为了简便起见,只讨论两个读操作和一个写操作并行执行的情况,此时需要同时产生三个地址WINRP1,WINRP2和WINWP(两读一写)。指令中的读写地址分别来自通路算子的寄存器源操作数域和数据算子的寄存器目的操作数域,地址宽度为5位,对应于窗口中的32个寄存器。当进行读写操作时,地址的低三位直接访问全局寄存器组(包含8个寄存器),同时指令中的5位寄存器地址经过图10中的窗口寄存器堆地址转换部件101转换成符合窗口重叠规范的7位物理寄存器地址访问图10中的窗口寄存器堆102(包含128个寄存器)。
CWP生成部件1011’包括3个寄存器(3位,对应于8个窗口),分别保存CWP,CWP-1和CWP+1的值,按照SPARC V9体系结构的定义,当SAVE操作有效时选择CWP的增1值,当RESTORE操作有效时选择CWP的减1值,不进行SAVE和RESTORE操作时选择CWP原值,IMMD(在优选实施方式中为0)的输入通路用于复位,当复位信号RST有效时,选择IMMD,CWP复位值为0。因为SAVE和RESTORE操作的源操作数来自老窗口,而目的操作数来自新窗口,因此CWP生成部件同时输出CWP寄存器锁存前后的两个值,锁存后的值CWP1用于读操作,锁存前的值CWP2用于写操作。CWP的两个输出值CWP1和CWP2经过CWP地址扩展部件1013’变为7位物理地址(在CWP后补4个0),因为SPARC V9定义第n个窗口的输入寄存器和第n-1个窗口的输出寄存器重叠,因此在地址扩展前增加一次求补操作(取反加一)。指令中寄存器的5位地址RS1,RS2和RD在经过预处理部件1012’减去定值8后,分别与部件1013’的输出值相加(部件1014’),得到最终的窗口寄存器堆物理地址,包括两个读地址WINRP1,WINRP2和一个写物理地址WINWP。
这样,对应于指令给出的5位寄存器地址可以映射到全局寄存器堆GR0-GR7,和窗口寄存器堆RF00-RF7f上面,并实现窗口的重叠。各个窗口实际访问的寄存器如下所示
对于0号窗口,访问的实际寄存器为GR0-GR7,RF00-RF17;
对于1号窗口,访问的实际寄存器为GR0-GR7,RF70-RF07;
对于2号窗口,访问的实际寄存器为GR0-GR7,RF60-RF77;
对于3号窗口,访问的实际寄存器为GR0-GR7,RF50-RF67;
对于4号窗口,访问的实际寄存器为GR0-GR7,RF40-RF57;
对于5号窗口,访问的实际寄存器为GR0-GR7,RF30-RF47;
对于6号窗口,访问的实际寄存器为GR0-GR7,RF20-RF37;
对于7号窗口,访问的实际寄存器为GR0-GR7,RF10-RF27。
图10c为基于图10所示的全局寄存器与窗口寄存器分离设计方法的另一种窗口寄存器堆读写地址转换部件,由于这种窗口寄存器堆中每一个寄存器窗口中的寄存器个数可以由软件设定,因此又称移动寄存器窗口。移动寄存器窗口中的寄存器也包括两个部分一部分为全局寄存器(又称静态寄存器),该部分寄存器对任意过程可见;另一部分为窗口寄存器,对应于每一个具体过程的寄存器窗口各不相同,每个窗口的物理寄存器起始地址和窗口大小由BOF、SOF、SOL三个参数确定,BOF为当前窗口的第一个寄存器的物理地址,SOF为移动窗口的大小,SOL为移动窗口中局部寄存器域的大小。SOF和SOL这两个值都可以由软件设定,SOL≤SOF,BOF的修改则是由硬件实现的,其通用修改方式为BOFn=BOFn-1+SOLn-1,其中BOFn、SOLn-1分别表示第n个移动窗口的BOF和第n-1个移动窗口的SOL值。每一个移动寄存器窗口的大小可以不同,但窗口之间通过相互重叠构成循环堆栈,移动寄存器窗口的重叠区域当前窗口的输出寄存器域OUTS,由于移动寄存器窗口不在硬件上区分输入寄存器域和输出寄存器域,实际的输出寄存器域由下式决定SOF-SOL。移动寄存器窗口的重叠方式为执行CALL操作时,当前窗口的输出寄存器域自动变成新窗口的SOF,同时原窗口的SOL和BOF之和变成新窗口的BOF,当执行ALLOC(窗口大小分配操作)操作时,SOF和SOL的值可以按照指令的要求扩大或缩小;当执行RETURN操作时,恢复CALL操作之前的BOF、SOF和SOL。
图10c所示部件也对应于图10中的窗口寄存器堆地址转换部件101,用于移动寄存器窗口的窗口寄存器堆地址转换。该结构包括
预处理部件1015,将指令中的寄存器地址(包括读/写)减去全局寄存器的个数;
BOF(当前移动窗口的第一个寄存器的物理地址)生成部件1016,其输入为当前窗口的局部寄存器域SOL和控制信号CALL、RETURN操作使能信号(CALL和RETURN信号由BRANCH算子的功能域和使能信号EBRANCH逻辑组合而成);输出为新窗口的BOF值(当前窗口的第一个寄存器的物理地址);功能为根据指令定义修改BOF的值,BOF的复位值为0,当CALL操作有效,BOF自动与当前窗口的局部寄存器域SOL相加,形成新窗口的BOF值,当RETURN操作有效时,BOF恢复为前一窗口的BOF值。
加法部件1017,将部件1015的输出值分别与1016的输出值相加,得到窗口寄存器堆的最终物理地址(包括读/写),用于访问移动寄存器窗口的窗口寄存器堆。
图10d介绍根据本方法实现的Itanium移动寄存器窗口的窗口寄存器堆地址转换部件,是对图10c的进一步说明。
按照Itanium体系结构的定义,Itanium通用寄存器堆包括128个体系可见寄存器,这些通用寄存器被分为两个子集GR0-GR31为静态通用寄存器域;GR32-GR127为堆栈通用寄存器域。Itanium通用寄存器堆的地址转换主要有两类一类是移动寄存器窗口地址转换,另一类是寄存器旋转地址转换。寄存器旋转是在移动寄存器窗口的基础上进行的,旋转仅限于对应当前过程的移动寄存器窗口的局部寄存器域SOL内部(移动寄存器窗口下的寄存器旋转将在图11c中进一步说明)。当用作移动寄存器窗口时,Itanium通用寄存器堆中的静态寄存器GR0-GR31对所有过程可见,而堆栈寄存器域中对应于每一个过程有一个相应的移动寄存器窗口,窗口的大小可以由软件定义,在0-96之间变化,窗口之间通过寄存器重叠在CALL和RETURN操作时自动交换参数,从而避免对存储器的访问。移动窗口大小由SOF和SOL两个参数来决定,SOF为移动窗口的大小,初值为96,SOL为窗口中局部寄存器的个数(包含输入寄存器),输出寄存器的个数两者之差。执行CALL操作时,当前活动窗口的GR32的物理地址BOFn变为上一窗口中GR32的地址BOFn-1与上一窗口的局部寄存器域SOLn-1之和,上一窗口的输出寄存器域(SOFn-1-SOLn-1)自动变成新窗口的SOFn;执行ALLOC操作时,在指令控制下同时设置SOF、SOL和SOR三个值;执行RETURN指令时恢复最近一次CALL操作之前的SOF和SOL。
上述Itanium通用寄存器堆可以用图10所示部件来实现,其中移动寄存器窗口地址转换模块101可以由图10c所示的结构来实现,此时a=7,b=5,m=7。由于静态寄存器对任意过程可见,因此移动窗口包含的寄存器个数的最小值为32(2b),而最大值为128(2a),总的物理寄存器的个数为160(2b+2m),具体电路如图10d所示。为了简便起见,只讨论两个读操作和一个写操作并行执行的情况(此时需要同时产生三个物理地址,两读一写)。
指令中的读写地址(RS1<6:0>、RS2<6:0>、RD<6:0>)分别来自通路算子的寄存器源操作数域和数据算子的寄存器目的操作数域,当进行寄存器读写操作时,指令中寄存器读写地址RS1,RS2和RD的低5位直接访问静态寄存器堆,同时各读写地址(7位)经过图10d所示的窗口寄存器堆地址转换部件转换成符合窗口重叠的7位物理寄存器地址访问窗口寄存器堆(包含128个寄存器)。由写地址使能信号决定对全局寄存器堆的写操作和对窗口寄存器堆的写操作两者之一有效,其中写地址使能信号是由写地址的高位RD<6:5>和写算子使能信号组合而成的,组合条件为写算子使能且RD<6:5>=00时,对全局寄存器堆的写操作有效,写算子使能且RD<6:5>00时,对窗口寄存器堆的写操作有效。由读有效信号控制数据输出选择装置选择全局寄存器堆的读出数据和窗口寄存器堆的读出数据两者之一输出,其中读有效信号是由读地址高位RS1<6:5>和RS2<6:5>组合成的,组合条件为RSi(i=1,2)的高两位为0时,全局寄存器堆的读出数据有效,RSi(i=1,2)的高两位不为0时,窗口寄存器堆的读出数据有效。
在图10d所示的窗口寄存器堆地址转换部件中,包括减32的预处理部件1015’,由3个7位加法器构成的加法部件1017’,以及由一个7位加法器和一个包含N个寄存器的循环堆栈构成的BOF生成部件1016’。BOF生成部件1016’的功能是对BOF进行复位操作并根据指令修改BOF的值,当CALL操作有效时,BOFn=BOFn-1+SOLn-1,当RETURN操作有效时,BOF恢复为前一窗口的BOF值。部件1016’是实现上述功能的一种优选结构,该结构由一个寄存器个数可以根据需要来确定的寄存器循环堆栈构成,图中MUX为选通器,LAT为锁存器,ADDER为加法器,当执行SAVE操作时,由信号10161控制选通器选择BOF与局部寄存器域SOL(SOL的值由根据Itanium指令提取的ALLOCFRAME算子确定,ALLOC的操作结果由相应的寄存器保存)的相加值,刷新栈顶寄存器BOF,同时由10161和10162信号配合进行压栈操作;RETURN操作有效时,由信号10161和10162配合进行弹栈操作,恢复BOF的原值。其中信号10161和信号10162由CALL信号和RETURN信号逻辑组合而成,其原理是执行CALL操作时控制选通器MUX选通左路数据来源,同时所有锁存器打开,即执行一个入栈操作;执行RETURN操作时,控制选通器MUX选通右路数据来源,同时所有锁存器打开,即执行一个出栈操作。
由于Itanium定义通用寄存器堆的堆栈区是从GR32开始的,所以对应于指令给出的7位寄存器地址可以映射到全局寄存器堆静态寄存器堆SR0S-SR31和窗口寄存器堆WINRF(RF00-RF7f)上面,并实现窗口的重叠。
图11为基于查表法的旋转寄存器地址生成部件示意图。旋转寄存器是为了适应优化编译技术的发展而产生的一种寄存器堆控制技术,用于支持软件流水的模调度,在循环调度时消除数据的名相关。旋转寄存器堆提供一种寄存器重命名机制,使得软件流水构成的新的循环中连续对指令中某一个寄存器的写操作实际上写入截然不同的寄存器,从而保证正确的语义。一个旋转寄存器堆有一个与之相对应的旋转寄存器基寄存器(RRB)。一条指令中指定的寄存器号加上RRB值的总和,模上寄存器旋转域,被用于实际的寄存器地址。模调度中特殊的分支操作在每一次新的迭代开始时使RRB削减,以此来为不同的迭代中的相同的操作分配不同的寄存器来存储结果。
设寄存器堆的物理寄存器个数为2n,旋转域倍数为SOR(Size OfRotating),实际旋转域的大小为SOR*2m,SOR为大小可由软件设定,取值1-s,s为自然数且s*2m<2n,m可以由体系结构定义,m为0时SOR即为旋转域。
图11所示部件用于寄存器旋转时的地址生成,该部件包括3个部件
旋转基寄存器(RRB)生成部件111,其功能是将RRB复位以及根据指令要求完成对RRB进行清0操作和减1操作。其输入为控制信号CLR(控制清0操作)和旋转有效信号ROTATING(控制RRB递减操作);输出为本次叠代的旋转基RRB。当CLR信号有效时,将RRB置0。CLR信号的产生可能是复位RESET,也可能是指令中的清0操作(例如由根据ITANIUM指令提取的OPSTK算子控制的CLRRRB操作),ROTATING信号则是由控制特殊分支操作的算子(例如由根据ITANIUM指令提取的用于控制CTOP、CEXIT、WTOP、WEXIT操作的BRANCH算子)功能域及其使能信号进行逻辑组合而成。
加法部件112,将指令中的寄存器地址分别与RRB相加,进行寄存器地址旋转;
查表部件113,将112的输出地址的高位[n-1:m]的全排列,和SOR的所有可能的取值分别作为行标和列标,将行标对列标的求模作为表项,用于不同大小的旋转域的寄存器旋转操作。查表的结果与加法部件112的输出地址的低位[m-1,0]组合,形成旋转寄存器的实际物理地址。以上行标和列标的选择可以根据物理实现方式的不同而变化。
图11a为上述旋转寄存器的一个实例,在该结构中n=7,m=3,s=12。这是一个由128(2n)个寄存器组成的寄存器堆,旋转域可以为8(2m)的1-12倍的寄存器旋转指针生成部件的结构图。为了方便起见,设寄存器堆端口数为3个(两读一写)。该结构包含一个由7位计数器组成的RRB生成部件111’,当执行RRB清空操作时由CLR信号控制RRB清0,当执行旋转分支操作时RRB减1。在图111’的优选结构中,MUX21_7为7位的选通器,DEC_7为7位的减1器,DFF_7为7位的触发器。RRB的锁存信号1111为CLR和ROTATING的逻辑或关系。当复位或执行RRB清0操作时,由CLR信号选择定值1,触发器DFF保存减1器的输出值0,将RRB置0;当发生寄存器旋转时,选通器默认选择RRB的反馈值,触发器DFF保存RRB的减1值,RRB递减。
该结构还包含一个加法部件112’和一个查表部件113’。加法部件112’用于将指令中的三个寄存器地址RS1,RS2和RD(两读一写)分别与RRB相加,然后将各加法结果的高4位[6:3]和SOR(4位)的值一道作为查表电路113’的输入,并将输出的表项作为旋转寄存器物理地址(包括两读一写)的高4位[6:3],与112’的输出地址的低三位[2:0]分别拼合成新的7位地址(包括两读一写),即形成对应于指令中寄存器地址的寄存器旋转物理地址。
图11b为图11c中查表电路113’的表头和表项,其中列标1131为SOR(1-12)的二进制表示,行标1132为112’部件输出地址高四位的全排列,表项1133为行标对列标的取模值。行标和列标是可以相对而言的,表格的实现方式也可以为ROM或者寄存器,一种优选的硬件实现方式是用12个64位寄存器来储存求模值,当复位时,将寄存器中的数据复位为图11b中各列的数据,当ALLOC操作确定SOR值时,在SOR[3:0]控制下选通与当前SOR对应的一列数据(保存在一个64bit的寄存器中),当分支指令导致的寄存器旋转操作有效时,仅以查表地址的高4位为索引,在该列的16个4bit的求模值中进行选择,得到对应表项。该表项与查表地址的第3位合并,即成为寄存器旋转后的物理地址。采用该方法进行寄存器旋转地址转换时,仅用一个十六选一的选通器的延时代价即可完成旋转地址的求模运算。
图11c为将图11b与图10d相结合实现的移动窗口中的旋转寄存器地址转换部件的电路图,设计该结构的目的是为了实现Itanium处理器通用寄存器堆的对应操作。如上所述,Itanium通用寄存器堆在体系结构界面包含一个大小为32的静态寄存器域(GR0-GR31)和一个大小为96的堆栈域(GR32-GR127)。堆栈域的寄存器由大小可编程的移动寄存器窗口组成,相邻寄存器窗口彼此重叠构成循环堆栈。
Itanium通用寄存器堆同时支持移动寄存器窗口和寄存器旋转两类操作,两类操作的作用不同,前者的作用是通过寄存器窗口的重叠在过程切换时交换数据以减少对存储器的访问,后者的作用则是为了在硬件上支持软件流水的模调度。
上述操作的效果描述如下执行CALL操作时,当前活动窗口的GR32的物理地址BOFn变为上一窗口中GR32的地址BOFn-1与上一窗口的局部寄存器域SOLn-1之和,上一窗口的输出寄存器域(SOFn-1-SOLn-1)自动变成新窗口的SOFn;执行ALLOC操作时,在指令控制下同时设置SOF、SOL和SOR三个值;执行RETURN指令时恢复最近一次CALL操作之前的SOF和SOL;执行软件流水循环分支操作(CTOP,CEXIT,WTOP,WEXIT)时,寄存器发生旋转,但寄存器旋转是在移动寄存器窗口的范围内进行的,旋转域的大小为SOR*8。寄存器旋转只能在堆栈区(窗口寄存器)进行,旋转域为8的1-12倍,旋转域定义为从GR32开始。
Itanium通用寄存器堆可以用图10所示部件来实现,其中移动寄存器窗口部分的电路结构已经结合图10d进行过描述,由于寄存器旋转只在窗口寄存器堆(寄存器堆栈域)内进行,因此当在图10d的基础上增加寄存器旋转功能时,只需要修改窗口寄存器堆的地址转换部件,对全局寄存器堆的访问和对数据输出选择部件的控制不变。在图10d的基础上增加寄存器旋转功能得到的窗口寄存器堆地址转换部件的电路图如图11c所示,为了讨论方便,只介绍两读一写的三地址结构,更多的读写地址转换原理相同。
在图11c中,窗口寄存器堆的物理地址产生路径有两条。在第一条路径中,指令中的读写地址(RS1<6:0>、RS2<6:0>、RD<6:0>)经过预处理部件1015’各自减去定值32后,直接转至旋转地址选择控制部件114,由控制信号1141控制选择该值与BOF生成部件1016’输出的BOF值相加,得到最终的物理地址,此时的物理地址仅是进行移动寄存器窗口操作的地址,当寄存器不发生旋转时,可选用该路径。在第二条路径中,指令中的读写地址(RS1<6:0>、RS2<6:0>、RD<6:0>)经过预处理部件1015,各自减去定值32后,分别与RRB生成部件111’输出的RRB值相加,以加法部件112’的输出值的高4位和SOR为索引访问查表电路113’,查表得到的表项与部件112’的输出值的低3位拼合形成旋转地址输入旋转地址选择部件114,由控制信号1141控制选择该路数据与BOF生成部件1016’输出的BOF值相加,得到最终的物理地址,该地址为移动寄存器窗口内进行寄存器旋转时的寄存器物理地址。
114部件为旋转地址选择控制部件,其控制条件为寄存器旋转有效信号ROTATING,该信号由根据Itanium指令提取的分支算子BRANCH的功能域及BRANCH算子使能信号组合而成。当寄存器旋转无效时,选择上述第一条路径产生物理地址,当寄存器旋转有效时,选择上述第二条路径产生物理地址。由于是采用图10所示的静态寄存器与窗口寄存器分离的结构来实现Itanium通用寄存器堆的移动寄存器窗口及寄存器旋转操作的,因此寄存器GR0-GR31被映射到全局寄存器堆GPR(GPR00-GPR31)上,GR32-GR127被映射到窗口寄存器堆WINRF(RF00-RF7f)上,BOF的复位值为0,对应于窗口寄存器堆WINRF中的第一个寄存器。
图12为可重构寄存器堆的结构示意图。一个可重构寄存器堆至少包括三个部件
一个地址转换及地址选择部件121,将指令中的寄存器地址转换为满足体系设计要求的寄存器堆物理地址,同时控制从不同功能得到的寄存器物理地址中选择当前有效的操作地址,对寄存器堆进行访问,根据可重构设计资源规则,部件121输出的读地址和写地址的个数分别是完成每一种重构元素所需要的读地址和写地址个数的并集,这意味着寄存器堆需要设置的读写端口数为实现各功能需要的读写端口数的并集。
一个数据输入选择部件122,控制从不同功能得到的寄存器写入数据中选择当前有效的写入数据,与寄存器写地址配合实现寄存器堆的写操作。
一个寄存器堆部件123,根据可重构设计资源规则,所需寄存器的个数为实现各功能所需要的寄存器个数的并集,寄存器堆读写端口的个数也为实现各功能所需要的寄存器堆读写端口个数的并集。
控制信号124为工作模式选择信号,控制在某一确定的工作模式下,选择符合该模式的输入数据和读写地址,该信号可以由不同类功能的寄存器操作算子的使能信号组合而成,也可以通过在指令中增加工作模式控制域来实现,当排列顺序一致时,控制地址选择和控制数据选择的信号是相同的。
图12a为具有寄存器窗口、移动寄存器窗口及旋转寄存器两种工作模式的可重构寄存器堆结构框图。为了简便起见,每种工作模式都只考虑两读一写的基本需求。其中,固定窗口在体系结构界面上包含32个寄存器,全局寄存器、输入寄存器、局部寄存器和输出寄存器的个数都为8;移动窗口在体系结构界面上包含128个寄存器,其中静态(全局)寄存器的个数为32个,并能实现移动寄存器窗口的基础上的寄存器旋转操作,寄存器旋转操作只能在非静态寄存器的区域内进行。该寄存器堆采用图10所示的全局寄存器与窗口寄存器分离的设计方法,包含如下部件
寄存器地址转换及选择部件121’,包括固定窗口地址转换部件1211,用于在固定窗口工作模式下将指令中的寄存器地址125转换为窗口寄存器堆的物理地址,具体转换电路已经在图10b中有详细说明;移动窗口及寄存器旋转地址转换部件1212,用于在移动窗口及寄存器旋转工作模式下将指令中的寄存器地址126转换为窗口寄存器堆的物理地址,具体转换电路见图11c,值得注意的是由于窗口寄存器堆中的物理寄存器对应于指令中寄存器地址的R32-R127,因此R32的初始物理地址BOF复位值为0,对应于窗口寄存器堆的第一个物理寄存器;地址选择部件1213,用于在寄存器窗口和移动寄存器窗口及旋转寄存器两种工作模式之间选择有效地址访问窗口寄存器堆WINRF(RF00-RF127),地址选择部件1213的内部结构将在图12c中进一步说明;
数据输入选择部件122’,用于在寄存器窗口和移动寄存器窗口及旋转寄存器两种工作模式之间选择有效数据写入全局寄存器堆GPR(GR00-GR31)或者窗口寄存器堆WINRF(RF00-RF127),由于每种模式只有一个写端口,因此本例中该部件可以简化为对两个输入数据的选择,选择信号124’的一种优选设计为算子的使能信号的组合(同类操作中所有的读写算子使能信号的或关系,算子使能信号低电平有效),用来表明当前操作是寄存器窗口操作还是移动寄存器窗口操作;
寄存器堆123’,由于采用图10所示的全局寄存器堆和窗口寄存器堆分离的结构,因此寄存器堆123’包含全局寄存器堆1231、窗口寄存器堆1232和数据输出选择部件1233。
其中,全局寄存器堆1231,包含32个64位寄存器,2个写端口和4个读端口。这是因为当用作固定窗口时,需要8个寄存器,而用作移动窗口及旋转寄存器时需要32个寄存器,根据可重构设计资源规则,总的寄存器数为32个,读写端口个数为6个(4读2写)是因为不同模式之间的全局寄存器堆的读写地址宽度不同。当用于兼容SPARC V9固定寄存器窗口操作时,全局寄存器堆的读写地址为地址信号125中各读写地址的低位WRS1[2:0]、WRS2[2:0]和WRD[2:0];当用于兼容Itanium移动寄存器窗口操作时,全局寄存器堆的读写地址为地址信号126中各读写地址的低位SWRS1[4:0]、SWRS2[4:0]和SWRD[4:0]。全局寄存器的内部结构将在图12b中进一步说明。
窗口寄存器堆1232,包含128个64位寄存器,对应于SPARC的窗口寄存器和Itanium的通用寄存器堆栈区的物理实现,因为两种模式需要的读写端口数都为3(两读一写),根据可重构设计资源规则,寄存器堆的读写端口数为两者的并集,即也为3个读写端口(两读一写);
数据输出选择部件1233,其功能是在全局寄存器和窗口寄存器分离时在全局寄存器堆和窗口寄存器堆之间选择正确的读出数据,数据输出选择部件的内部结构将在图12c中进一步描述。
图12b为图12a中全局寄存器堆1231的结构图。用作固定窗口寄存器堆时,两读一写的3个全局寄存器地址(3位)作用于寄存器GR0-GR7;用作移动寄存器窗口及旋转寄存器时,两读一写的3个静态寄存器地址(5位)作用于寄存器GR0-GR31。其中GR0-GR7为重叠资源,其优选结构见12311’,寄存器的输入数据为两种模式中的一个,根据可重构设计控制规则,锁存控制条件为两种模式锁存控制条件的或关系,而控制寄存器GR8-GR31的锁存信号仅与移动寄存器窗口一种工作模式有关,其基本结构如图12312’所示。
图12c为图12a中地址选择部件1213和数据输出选择部件1233的结构图。地址选择部件分别实现对两个读地址和一个写地址的选择,图中WRPi(i=1,2)和SWRPi(i=1,2)分别表示固定窗口和移动窗口及寄存器旋转的窗口寄存器堆的读地址,WWP和SWWP分别表示固定窗口和移动窗口及寄存器旋转的窗口寄存器堆的写地址,选择条件是各自对应的写算子使能信号。数据输出选择部件分别实现对应于寄存器堆某一工作模式的全局寄存器堆的两个读出数据和窗口寄存器堆的两个读出数据的选择,选择条件为算子的使能信号和地址高位是否为0,(信号12331和信号12332分别对应于固定窗口和移动窗口模式下的选择信号),图中GPRRPORTi(i=1-4)为全局寄存器堆的输出端口的数据,其中GPRRPORT1、GPRRPORT2表示全局寄存器为GR0-GR7时的输出数据,GPRRPORT3、GPRRPORT4表示全局寄存器为GR0-GR31时的输出数据;RFRPORTi(i=1-2)为窗口寄存器堆的输出端口的数据;WRPORTi(i=1,2)表示固定窗口的最终输出数据,SWPORTi(i=1,2)表示移动窗口及寄存器旋转的最终输出数据。
图12d为具有寄存器窗口、移动寄存器窗口及旋转寄存器、随机读写寄存器堆三种工作模式的可重构寄存器堆结构框图。其中的随机读写模式包括4个读操作和4个写操作的并行执行。
该寄存器堆的基本结构与图12a类似,主要不同之处在于增加了随机读写地址127(包括4个读地址和4个写地址,各7位)。根据可重构设计资源规则,此时窗口寄存器堆1232’实际需要的读写端口数为8个(四读四写),同时需要修改地址选择部件1213’、数据输入部件122”、数据输出部件的结构1233’和地址/数据选择控制信号124”。地址选择部件1213’的结构如图12e所示,输入的14个地址(包括对于固定寄存器窗口的2读1写,对于移动寄存器窗口的2读1写,以及对于随机读写寄存器堆的4读4写)经过地址选择合并为8个读写地址(4读4写,为以上不同模式所需要的读写地址个数的并集),分别控制窗口寄存器堆的四个读端口和四个写端口,选择条件124”的一种优选设计为随机读写算子的使能信号的逻辑或(算子使能信号低电平有效,用来表明当前随机读写操作有效),当随机读写操作无效时,默认选择图中的左路数据;图中RANDRPi(i=1~4)表示随机读地址,RANDWPi(i=1~4)表示随机写地址;RPi和WPi(i=1~4)分别表示最终控制窗口寄存器堆的读写地址。数据输入选择部件122”和数据输出部件1233’的结构如图12f所示,图中RANDDi(i=1~4)表示随机写操作的输入数据来源,WIND表示固定窗口的输入数据来源,SWIND表示移动寄存器窗口及寄存器旋转的输入数据来源,WPiD (i=1~4)表示与窗口寄存器堆写端口对应的数据来源,RFRPORTi(i=1~4)为对应于窗口寄存器堆的读端口的输出数据。
由图12d~图12f可见,当增加一种新的功能——随机读写操作的同时,通过寄存器堆的可重构设计,增加的硬件资源很小,而根据可重构设计时序规则,关键路径上延时的增长仅为地址和数据选择的时间。其效果是能够实现SPARC的固定寄存器窗口以及Itanium的移动寄存器窗口及旋转寄存器的读写操作,并可以增加用户定义的寄存器操作(此处以随机读写的简单操作为例)。
虽然已经示出和详细描述了本发明的较佳实施方式,但是应当认识到可以对本发明做出各种变化和修改而不脱离权利要求书的范围。
权利要求
1、一种可重构寄存器堆,至少具有两种工作模式,其特征在于包括一个寄存器堆地址转换及选择部件,一个寄存器堆和一个数据输入选择部件,其中指令中的寄存器读写地址经过寄存器堆地址转换及选择部件转换成对应模式的寄存堆的物理地址来控制寄存器堆的读写,对应模式的输入数据经过数据输入选择部件被写入寄存器堆。
2、如权利要求1所述的可重构寄存器堆,其特征在于所述的寄存器堆地址转换及选择部件包括一个窗口寄存器堆地址转换及选择部件,所述的寄存器堆被分为一个全局寄存器堆和一个窗口寄存器堆,并且所述的可重构寄存器堆还包括一个输出数据选择部件,其中指令中的寄存器读写地址的低位地址直接用来控制全局寄存器堆的读写,同时指令中的寄存器读写地址经过窗口寄存器堆地址转换机构转换成窗口寄存堆的物理地址来控制窗口寄存器堆的读写,从数据输入选择部件输出的数据在一个全局寄存器堆写地址使能信号和窗口寄存器堆写地址使能信号的控制下或者被写入全局寄存器堆,或者被写入窗口寄存器堆,所述的输出数据选择部件用于在全局寄存器堆的输出数据和窗口寄存器堆的输出数据之间进行选择,输出正确数据。
3、如权利要求2所述的可重构寄存器堆,其特征在于所述的窗口寄存器堆地址转换及选择部件至少包括一个固定窗口地址转换部件和一个移动窗口及寄存器旋转地址转换部件,和一个地址选择部件,用于选择所述固定窗口地址转换部件的输出和所述移动窗口及寄存器旋转地址转换部件的输出中的一个,并且所述的数据输入选择部件用于在寄存器窗口和移动寄存器窗口及旋转寄存器两种工作模式之间选择有效数据写入全局寄存器堆或者窗口寄存器堆。
4、如权利要求3所述的可重构寄存器堆,其特征在于还包括随机读写地址,因此,寄存器地址转换及选择部件和数据输入选择部件分别还在随机地址及随机输入数据之间进行选择。
5、如权利要求3或4所述的可重构寄存器堆,其特征在于所述的固定窗口寄存器堆地址转换部件包括一个当前窗口指针(CWP)生成部件,一个地址预处理部件,用于将指令中的各个寄存器地址减去全局寄存器的个数;一个CWP地址扩展部件,用于将CWP地址的位数扩充成读写窗口寄存器堆所需的位数;以及一个加法部件,用于将预处理部件的输出和CWP地址扩展部件的输出相加,得到最终窗口寄存器堆读写操作的物理地址。
6、如权利要求3或4所述的可重构寄存器堆,其特征在于所述的移动窗口地址转换部件,包括预处理部件,用于将指令中的寄存器地址减去全局寄存器的个数;当前移动窗口的第一个寄存器的物理地址(BOF)生成部件;以及加法部件,用于将预处理部件的输出值与BOF生成部件的输出值相加,得到窗口寄存器堆的最终物理地址。
7、如权利要求3或4所述的可重构寄存器堆,其特征在于所述的旋转寄存器地址生成部件包括一个旋转基寄存器(RRB)生成部件,用于将RRB复位以及根据指令要求完成对RRB进行清0操作和减1操作;一个加法部件,用于将指令中的寄存器地址分别与RRB相加,进行寄存器地址旋转;一个查表部件,用于不同大小的旋转域的寄存器旋转操作;其中查表的结果与加法部件的输出地址的低位组合,形成旋转寄存器的实际物理地址。
8、如权利要求3或4所述的可重构寄存器堆,其特征在于假设固定寄存器窗口中的体系可见寄存器个数为2a1,全局寄存器的个数为2b1(b1<a1),移动寄存器窗口中的体系可见寄存器个数为为2a2,全局寄存器的个数为2b2(b2<a2),则可重构寄存器堆的全局寄存器堆中包含的寄存器个数为2b,且b为b1和b2中的最大值,窗口寄存器堆中包含的物理寄存器个数为2m,且m同时满足m=b1+1+k,k为非负整数以及2m≥2a2-2b2,以可以根据需要进行固定窗口的操作或移动窗口的操作。
9、如权利要求1-4的任一个所述的可重构寄存器堆,其特征在于所述寄存器堆的写入端口和读出端口分别是所述至少两种工作模式所需的写入端口和读出端口的并集。
10、在一个兼容体系的微处理器中,一种可重构寄存器堆的工作方法,其特征在于包括步骤
根据所要兼容的寄存器堆的工作方式将指令算子中的寄存器地址的若干低位输入全局寄存器堆;
根据所要兼容的寄存器堆的工作方式将指令算子中的寄存器地址输入地址转换部件中相应的地址转换子部件从而产生访问窗口寄存器堆的地址;
当要写寄存器时,还根据所要兼容的寄存器堆的工作方式选择合适的数据输入并根据相应的写使能信号将数据写入全局寄存器堆或窗口寄存器堆;
当要读寄存器时,若高位地址全为零,则输出从全局寄存器堆读出的数据;若高位地址不全为零,则输出从窗口寄存器堆读出的数据。
11、一种用于兼容目的的算子提取方法,所述方法的特征在于包括以下步骤
(1)对目标兼容指令集合功能进行分析;
(2)根据兼容目标指令集合功能分析的结果,将由同一类部件完成的功能排列在一起,重新编码,成为功能算子的操作码;将源操作数独立成为路由算子,对应于寄存器堆的读端口;将目的操作数独立成为数据算子的目的寄存器域;将必须同时控制多个部件执行的操作设计为复合算子;
(3)至少部分根据兼容目标指令集合功能分析的结果确定内部通路;
(4)根据内部通路确定路由算子和数据算子的数量;
(5)确定功能算子的数据来源域和数据算子的数据来源域。
12、一种具有兼容性的可重构部件设计方法,其特征在于包括以下步骤
(1)根据不同兼容目标的算子集合分别进行硬件设计,分别确定满足各算子集合功能的硬件资源、连接关系、控制关系和时序关系;
(2)将根据不同兼容目标体系得出的部件设计进行形式化描述;
(3)将部件的形式化描述进行叠加优化;
将实现功能集合不全相同的同类部件进行操作(OP)叠加,且不同功能集合不同时有效时(串行叠加),根据如下规则叠加
<资源规则>满足OP集合串行叠加的资源需求是完成所有OP在不同时标下所需要的对应资源的并集;
<连接规则>串行叠加(完成多种功能的电路描述进行叠加,但在同一时刻只有一种功能有效)时,相同的数据来源可以合并,不同的数据来源并行排列,同时改变相应的选通控制条件;
<控制规则>满足OP串行叠加的控制描述为叠加前各OP的控制描述的并集,对相同操作的新的控制条件为原条件的或关系;
<时序规则>OP串行叠加后的关键路径为叠加前各OP的关键路径与各自增加的开关电路的延时值之和的最大值。
(4)将以上形式化描述转变为电路设计。
全文摘要
一种可重构寄存器堆及其工作方法。该可重构寄存器堆至少具有两种工作模式,包括一个寄存器堆地址转换及选择部件,一个寄存器堆和一个数据输入选择部件,其中指令中的寄存器读写地址经过寄存器堆地址转换及选择部件转换成对应模式的寄存堆的物理地址来控制寄存器堆的读写,对应模式的输入数据经过数据输入选择部件被写入寄存器堆。本发明还提供了一种用于兼容目的的算子提取方法及一种具有兼容性的可重构部件设计方法。根据本发明,可以以很少的硬件代价实现对多种微处理器体系结构的兼容。
文档编号G06F9/06GK1469236SQ0212622
公开日2004年1月21日 申请日期2002年7月15日 优先权日2002年7月15日
发明者王俊宇, 刘大力 申请人:北京南思达科技发展有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1