著录项信息
专利名称 | 堆栈式寄存器堆及其控制方法 |
申请号 | CN00120103.4 | 申请日期 | 2000-07-18 |
法律状态 | 权利终止 | 申报国家 | 中国 |
公开/公告日 | 2002-02-06 | 公开/公告号 | CN1334512 |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | 暂无 | IPC分类号 | 暂无查看分类表>
|
申请人 | 多思资讯(集团)有限公司 | 申请人地址 | 北京市海淀区万寿路西街2号4层420室
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 北京南思达科技发展有限公司 | 当前权利人 | 北京南思达科技发展有限公司 |
发明人 | 王俊宇;王昭顺;刘大力 |
代理机构 | 中国国际贸易促进委员会专利商标事务所 | 代理人 | 王以平 |
摘要
一种堆栈式寄存器堆,包括:一个由通用寄存器组成的栈顶寄存器组(101);一个寄存器堆(105);一个数据缓冲寄存器(103),连接于栈顶寄存器组(101)与寄存器堆(105)之间,用于对位数小于预定字长的数据进行缓存;一个计数器(102),用于对栈顶寄存器组(101)和数据缓冲寄存器中最小操作单元数据的个数进行计数;以及一个寄存器堆地址指针生成部件(104),响应于出/入栈指令和来自计数器(102)的计数值,生成用于读/写寄存器堆(105)的地址指针。
1.一种堆栈式寄存器堆,其特征在于包括:
一个栈顶寄存器组,包括k个连接在一起的通用寄存器,每个通用 寄存器的预定字长为2n位,最小操作单元长度为2n-m位,其中k、m和 n为自然数,且满足k≥2,0≤m<n,m表示所述堆栈式寄存器堆能够自动 识别和存储的预定字长小于2n的数据的种类数,此时宽度为2n的堆栈可 以自动识别的数据宽度为2n-m+i(0≤i≤m,i为自然数),在入栈操作时,栈 顶寄存器组中的第一个2n-m+i(0≤i≤m)位的存储单元为堆栈的入口,在出栈 操作时,该栈顶寄存器中每一个寄存器的值都可以通过指令直接读出;
一个寄存器堆,包括2l(l≥0)个寄存器,每个寄存器的预定字长和最 小操作单元长度都为2n位;
一个数据缓冲寄存器,连接在栈顶寄存器组与寄存器堆之间,用于 对在其间传送的位数小于2n的数据进行缓存,该数据缓冲寄存器的字长 为(2m-1)2n-m位,最小操作单元宽度为2n-m位;
一个计数器,用于记录栈顶寄存器组以及数据缓冲寄存器中寄存的 2n-m位数据的个数,计数器的最大计数值为(k·2m+2m-1);以及
一个寄存器堆地址指针生成部件,响应于出/入栈指令和计数器的计 数值,生成用于读/写寄存器堆中相应寄存器的地址指针。
2.根据权利要求1所述的堆栈式寄存器堆,其特征在于在栈操作 方式中,当计数器中的计数值大于等于k·2m时,寄存器堆的栈顶数据与 栈顶寄存器组的栈底数据保持一致。
3.一种对如权利要求1所述的堆栈式寄存器堆进行控制的方法, 包括以下步骤:
(1)将栈顶寄存器组中的k个寄存器、计数器、以及寄存器堆中 2l个寄存器复位为0;
(2)用一定宽度的指令编码来表示操作数的宽度和数据的操作方 式是出栈还是入栈,指令的编码满足条件2p≥2(m+1),其中p为栈操作指 令编码的宽度,p为自然数,编码方式可以自行定义;
(3)计数器根据栈操作指令和计数器的初值进行计数,操作数据 宽度2n-m+i(0≤i≤m),包括:
(31)进栈操作时,
(311)当寄存器堆中没有数据时,
(3111)计数器的初值count<((k·2m+2m-1)-2i)时,新的计数 值count=count+2i;
(3112)计数器的初值count≥((k·2m+2m-1)-2i)时,新的计数 值count=count+2i-2m;
(312)当寄存器堆中有数据时,新的计数值 count=count+2i-2m;
(32)出栈操作时,
(321)当寄存器堆中没有数据时,新的计数值count=count-2i;
(322)当寄存器堆中有数据时,
(3221)计数器的初值count≥(k·2m+2i)时,新的计数值 count=count-2i,
(3222)计数器的初值count<(k·2m+2i)时,新的计数值 count=count-2i+2m;
(4)响应于步骤(3)中的计数值,完成数据在堆栈式寄存器堆中 的入/出栈操作,在栈顶寄存器组中的数据以2i个2n-m位寄存器为单位顺 序出/入栈,栈顶寄存器组与寄存器堆以2n位为单位交换数据,具体操作 步骤为:
(41)入栈操作,
(411)当计数器初始值count满足条件:count<(k·2m-2i)时, 在栈顶寄存器组中的数据以2i个n-m位寄存器为单位顺序压入,栈顶寄 存器组和寄存器堆之间无数据交换,栈指针不动;
(412)当计数器初始值count满足条件:(k·2m-2i)≤count<(k·2m) 时,栈顶寄存器组中最后2m个2n-m位数据组合在一起形成一个2n位数据, 作为寄存器堆的输入数据,该数据在进入寄存器堆的同时写入其后的栈 顶寄存器组和数据缓冲寄存器,数据写入寄存器堆中原地址指针的减一 值所指向的存储单元,数据第一次进入寄存器堆时数据写入地址指针初 值所指向的单元;
(413)当计数器初始值count满足条件:count≥k·2m时,栈顶 寄存器组中倒数第二个2n位数据作为寄存器堆的输入数据,该数据在进 入寄存器堆的同时覆盖其后的栈顶寄存器组和数据缓冲寄存器,数据写 入寄存器堆中原地址指针的减一值所指向的存储单元;
(42)出栈操作时,
(421)当寄存器堆中无数时,栈顶寄存器组和数据缓冲寄存器 中的数据以2i个2n-m位寄存器为单位顺序弹出,栈顶寄存器组和寄存器 堆之间无数据交换,栈指针不动;
(422)当寄存器堆中有数时,
(4221)当计数器初始值count满足条件:count≥k·2m+2i时, 栈顶寄存器组和数据缓冲寄存器中的数据以2i个2n-m位寄存器为单位顺 序弹出,栈顶寄存器组和寄存器堆之间无数据交换,栈指针不动;
(4222)当计数器初始值count满足条件: k·2m≤count<(k·2m+2i)时,栈顶寄存器组和数据缓冲寄存器中的数据以2i 个2n-m位寄存器为单位顺序弹出的同时,寄存器堆中原地址指针的加一 值所指向的存储单元中的那个2n位数据弹出,出栈数据按照先进后出的 原则排列在栈顶寄存器组和数据缓冲寄存器中。
技术领域\n本发明涉及计算机微处理器,并且更具体地涉及在计算机微处理器中 采用的堆栈式寄存器堆及其控制方法。\n背景技术\n在计算机微处理器的各种操作中,经常需要处理不同字长的数据。一 方面是因为不同类型的数据本身具有不同的字长,如字符型、整型、单精 度浮点数、双精度浮点数等。另一方面,由于计算机微处理器技术的发展, 微处理器字长不断升位,现代微处理器为了保持兼容性,需要处理以前各 代产品中较短字长的数据。\n在现有的微处理器中,对于较短字长的数据的存储方式有两种。一种 是硬件的方式,如微处理器字长升位以后,为了兼容较低字长的数据处理, 通常在原数据的基础上进行符号扩展得到升位字长的数据,直接替代原有 字长的数据。另一种是软件的方式,在编译过程中,通过一定的算法给不 同字长的数据分配相应的存储单元。\n采用传统的硬件处理方式处理较低字长的数据,结果往往造成升位字 长的微处理器的字长利用率低,并且会增加处理过程资源的开销,如浪费 寄存器和外部寄存器堆资源、占用数据通路、增加总线传输和不必要的升 位补齐操作等,硬件控制的复杂度也随之增大。采用软件的方式虽然可以 解决微处理器的字长利用率低的问题,但分析过程复杂,编译的难度大。\n因而,现有技术中存在着对不同字长数据进行自动识别和操作的需 要。\n发明内容\n本发明的第一目的是提供一种堆栈式寄存器堆,借助这种堆栈式寄存 器堆,可以对不同字长的数据进行自动识别和操作。\n本发明的第二目的是提供上述堆栈式寄存器堆的控制方法,使不同字 长的数据在堆栈式寄存器堆中按照先进后出(FILO)的方式进/出栈。\n为实现上述第一目的,本发明提供一种堆栈式寄存器堆,其特征在于 包括:\n一个栈顶寄存器组,包括k个连接在一起的通用寄存器,每个通用寄 存器的预定字长为2n位,最小操作单元长度为2n-m位,其中k、m和n为 自然数,且满足k≥2,0≤m<n,m表示所述堆栈式寄存器堆能够自动识别 和存储的预定字长小于2n的数据的种类数,此时宽度为2n的堆栈可以自动 识别的数据宽度为2n-m+i(0≤i≤m,i为自然数),在入栈操作时,栈顶寄存器 组中的第一个2n-m+i(0≤i≤m)位的存储单元为堆栈的入口,在出栈操作时, 该栈顶寄存器中每一个寄存器的值都可以通过指令直接读出;\n一个寄存器堆,包括2l(l≥0)个寄存器,每个寄存器的预定字长和最小 操作单元长度都为2n位;\n一个数据缓冲寄存器,连接在栈顶寄存器组与寄存器堆之间,用于对 在其间传送的位数小于2n的数据进行缓存,该数据缓冲寄存器的字长为 (2m-1)2n-m位,最小操作单元宽度为2n-m位;\n一个计数器,用于记录栈顶寄存器组以及数据缓冲寄存器中寄存的 2n-m位数据的个数,计数器的最大计数值为(k·2m+2m-1);以及\n一个寄存器堆地址指针生成部件,响应于出/入栈指令和计数器的计 数值,生成用于读/写寄存器堆中相应寄存器的地址指针。\n为实现上述第二目的,本发明提供一种对堆栈式寄存堆进行控制的方 法,使得不同字长(字长为2n-m+i(0≤i≤m))的数据可以按照先进后出(FILO) 的方式进行压栈和弹栈。该堆栈式寄存器堆包括:一个栈顶寄存器组,包 括k(k≥2,k为自然数)个连接在一起的通用寄存器,作为堆栈式寄存器 堆的栈顶,每个通用寄存器具有预定字长2n,最小操作单元的宽度2n-m位 (0≤m<n,m、n均为自然数);一个寄存器堆,包括2l(l≥0)个寄存器,每个 寄存器具有预定字长2n位,用于存储来自栈顶寄存器组和数据缓冲寄存器 中的数据;一个数据缓冲寄存器,连接在栈顶寄存器组与寄存器堆之间, 用于对在其间传送的位数小于预定字长的数据进行缓存,字长为(2m-1)2n-m位; 一个计数器,以2n-m位为单位记录栈顶寄存器组和数据缓冲寄存器中寄存的 有效数据的个数,可以完成加减2i操作,计数器的最大计数值为 (k·2m+2m-1),计数器的计数值为2进制时,满足关系2q≥(k·2m+2m-1), 其中q为2进制计数值的位数,q为自然数;一个寄存器堆地址指针生成 部件,可以完成复位、置初值、加一和减一操作。\n所述控制方法的特征在于包括以下步骤:\n(1)将栈顶寄存器组101中的k个寄存器、计数器102、以及寄存 器堆105中2l个寄存器复位为0;\n(2)用一定宽度的指令编码来表示操作数的宽度和数据的操作方\n 式(出栈还是入栈),指令的编码满足条件2p≥2(m+1),其中\n p为栈操作指令编码的宽度,p为自然数,例如n=6且m=2时,\n 64位堆栈可以自动识别和存储32位和16位数据,具体操作\n 分6种情况(16位进栈、16位出栈、32位进栈、32位出栈、\n 64位进栈、64位出栈),编码宽度p为3位,编码方式可以\n 自行定义;\n(3)计数器根据栈操作指令和计数器的初值进行计数,操作数据\n 宽度2n-m+i(0≤i≤m),工作原理如下:\n (31)进栈操作时,\n (311)当寄存器堆105中没有数据时,\n (3111)计数器的初值count<((k·2m+2m-1)-2i)时(其中\n(k·2m+2m-1)为最大计数值),新的计数值count=count+2i;\n (3112)计数器的初值count≥((k·2m+2m-1)-2i)时(其中\n(k·2m+2m-1)为最大计数值),新的计数值count=count+2i-2m。\n (312)当寄存器堆105中有数据时,新的计数值\ncount=count+2i-2m。\n (32)出栈操作时,\n (321)当寄存器堆105中没有数据时,新的计数值\ncount=count-2i。\n (322)当寄存器堆105中有数据时,\n (3221)计数器的初值count≥(k·2m+2i)时(其中k为栈顶\n 寄存器的个数),新的计数值count=count-2i,\n (3222)计数器的初值count<(k·2m+2i)时(其中k为栈顶\n 寄存器的个数),新的计数值count=count-2i+2m\n(4)响应于步骤(3)中的计数值,完成数据在堆栈式寄存器堆中\n 的入/出栈操作,在栈顶寄存器组中的数据以2i个2n-m位寄存 器为单位顺序出/入栈,栈顶寄存器组与寄存器堆以2n位为单位 交换数据,具体操作步骤为:\n(41)入栈操作,\n(411)当计数器初始值count满足条件:count<(k·2m-2i)时, 在栈顶寄存器组中的数据以2i个2n-m位寄存器为单位顺序压入, 栈顶寄存器组和寄存器堆之间无数据交换,栈指针不动;\n(412)当计数器初始值count满足条件: (k·2m-2i)≤count<(k·2m)时,栈顶寄存器组中最后2m个2n-m位数据 组合在一起(形成一个2n位数据)作为寄存器堆的输入数据,该 数据在进入寄存器堆的同时写入其后的栈顶寄存器组和数据缓冲 寄存器,数据写入寄存器堆中原地址指针的减一值所指向的存储 单元(数据第一次进入寄存器堆时数据写入地址指针初值所指向 的单元);\n(413)当计数器初始值count满足条件:count≥k·2m时,栈 顶寄存器组中倒数第二个2n位数据作为寄存器堆的输入数据,该 数据在进入寄存器堆的同时覆盖其后的栈顶寄存器组和数据缓冲 寄存器,数据写入寄存器堆中原地址指针的减一值所指向的存储 单元;\n(42)出栈操作时,\n(421)当寄存器堆105中无数时,栈顶寄存器组和数据缓冲 寄存器中的数据以2i个2n-m位寄存器为单位顺序弹出,栈顶寄存 器组和寄存器堆之间无数据交换,栈指针不动;\n(422)当寄存器堆105中有数时,\n(4221)当计数器初始值count满足条件:count≥k·2m+2i 时,栈顶寄存器组和数据缓冲寄存器中的数据以2i个2n-m 位寄存器为单位顺序弹出,栈顶寄存器组和寄存器堆之间 无数据交换,栈指针不动;\n(4222)当计数器初始值count满足条件: k·2m≤count<(k·2m+2i)时,栈顶寄存器组和数据缓冲寄存器中的 数据以2i个2n-m位寄存器为单位顺序弹出的同时,寄存器堆中原 地址指针的加一值所指向的存储单元中的那个2n位数据弹出,出 栈数据按照先进后出(FILO)的原则排列在栈顶寄存器组和数据 缓冲寄存器中。\n上述寄存器堆中数据的有无可以通过当前栈指针与定义的栈 的上下界值的比较获得。\n本发明的堆栈式寄存器堆,采用简单的硬件电路即可实现数据宽度的 自兼容,即可以根据操作字长的指令,自动地识别、存贮和装载不同数据 宽度的数据,同时还能够与微处理器升位字长的各种内部寄存器进行数据 交换。与常规的堆栈式寄存器堆相比,本发明的堆栈式寄存器堆的显著优 点主要表现在以下两个方面。\n第一,本发明的堆栈式寄存器堆的栈顶单独组成一个寄存器组,在栈 操作时,它们分别对应于堆栈的各个栈顶,而在寄存器操作时,和其它通 用寄存器一样,寄存器组中的每一个寄存器均可以通过指令直接访问,这 样可以大大提高栈顶数据的访问效率。\n第二,本发明的堆栈式寄存器堆可以通过计数器和数据缓冲装置实现 不同字长数据的自动识别和出/入栈操作。\n根据本发明的对堆栈式寄存器堆的控制方法,使得先进后出的堆栈数 据结构能够自行处理微处理器芯片内部寄存器、数据总线以及外部寄存器 堆数据宽度的不一致性,从而能够在硬件电路中解决数据宽度的自行组合 与分解。\n附图说明\n结合附图,通过以下对本发明较佳实施方式的详细描述,本发明的上 述及其他特征和优点将会更加明显。\n图1是本发明的自适应字长堆栈式寄存器堆的一般结构示意图;\n图2举例说明图1所示堆栈式寄存器堆的一种具体结构及数据交换原 理;\n图3A至图3K进一步说明图2所示的堆栈式寄存器堆的操作原理;\n图4是图2所示寄存器堆模型的数据出/入栈方法的流程图;\n图5是图2所示寄存器堆模型的数据入栈时序图;\n图6是图2所示寄存器堆模型的数据出栈时序图;\n图7举例说明图1所示堆栈式寄存器堆的另一具体结构及数据交换原 理;\n图8A至图8Y进一步说明图7所示的堆栈式寄存器堆的操作原理。\n具体实施方式\n以下参照附图详细描述本发明的较佳实施方式。\n图1是本发明的堆栈式寄存器堆的结构示意图。如图1所示,堆栈式 寄存器堆包括:栈顶寄存器组101、计数器102、数据缓冲寄存器103、寄 存器堆地址指针生成部件104和寄存器堆105。\n栈顶寄存器组101包括k个连接在一起的通用寄存器R0、 R1、...R(k-1)。每个通用寄存器的预定字长为2n位,最小操作单元长度为2n-m位, 其中k、m和n都是自然数,且满足0≤m<n,k≥2。自然数m表示堆栈式寄 存器堆能够自动识别和存储的预定字长小于2n位的数据的种类数。在堆栈式 寄存器堆以寄存器操作方式工作时,可以通过指令直接访问上述栈顶寄存 器组中的任意一个寄存器。在以栈操作方式工作时,上述通用寄存器用作 为堆栈的栈顶,当字长为2n-m+i(0≤i≤m)位时,栈顶寄存器组中第一个字长为 2n-m+i(0≤i≤m)位的寄存器为堆栈数据的入口。\n寄存器堆105,包括2l(l≥0)个寄存器,用于存储入栈数据,其中每个 寄存器的预定字长和最小操作单元长度都为2n位。\n数据缓冲寄存器103用于对在栈顶寄存器组101与寄存器堆105之间 传送的位数小于2n位的数据进行缓存,字长为(2m-1)2n-m位,其最小操作 单元宽度为2n-m位。因为数据缓冲寄存器对用户不可见,所以本发明中也 将其称为伪寄存器。\n计数器102,用于记录栈顶寄存器组101以及数据缓冲寄存器103中 寄存的2n-m位数据的个数。计数器103可以进行复位、加减进位值的操作。\n寄存器堆地址指针生成部件104,响应于出/入栈指令和来自计数器 102的计数值,生成用于读/写寄存器堆105中相应寄存器的地址指针。\n图2举例说明图1所示堆栈式寄存器堆的一种具体结构及数据交换原 理。在图2所示的例子中,n等于6,m等于1,k等于4,l等于16。也就 是说,图2所示的堆栈式寄存器堆可以解决64位字长数据自适应32位字 长数据的问题。在这种自适应过程中,单周期完成数据的入栈或出栈操作。\n如图2所示,寄存器堆(RF)205包括256个64位寄存器,构成一 个向低地址增长的堆栈。数据入栈时,先存入高地址,由寄存器堆地址指 针生成部件(RFA)204产生8位地址指针,可以指向256个寄存器中的任 意一个。栈顶寄存器组201包括4个64位通用寄存器a、b、c、d。每个64 位通用寄存器的最小操作宽度为32位。栈顶寄存器组201与寄存器堆205 一起构成一个堆栈。该堆栈的一至四栈顶的数据可以进行寄存器访问。数 据缓冲寄存器203的字长为32位。计数器202的计数值位数为4,计数器 由计数控制器完成复位、加减1、加减2的操作,最大计数值为9。\n图3A至图3K进一步说明图2所示的堆栈式寄存器堆的操作原理。图 中栈顶寄存器组包括4个64位寄存器a、b、c、d。每个通用寄存器分为 高低两个部分,如a0表示通用寄存器a的低32位,a1表示通用寄存器a 的高32位。栈顶寄存器组和寄存器堆RF之间按照栈操作方式传送数据, 并保持寄存器堆中栈顶数据与栈顶寄存器组中的栈底(包括伪寄存器h, 如果此时伪寄存器h中有数的话)数据一致。\n入栈操作开始时,寄存器堆RF中尚无数据,数据在栈顶寄存器组中 以2i(0≤i≤1)个2n-m位数据为单位顺序进栈,数据首次从栈顶寄存器组传递 到寄存器堆RF的情况有3种方式:\n方式1(如图3A所示):32位数据入栈,计数器初值为7,操作完 成后,栈顶寄存器组中数据以32位为单位顺序入栈,寄存器c1和d0中的 数据组合成一个64位数据进入寄存器堆205,计数器加1;\n方式2(如图3B所示):64位数据入栈,计数器初值为6,操作完 成后,栈顶寄存器组中数据以64位为单位顺序入栈,寄存器c中的64位 数据进入寄存器堆205,计数器加2;\n方式3(如图3C所示):64位数据入栈,计数器初值为7,操作完 成后,栈顶寄存器组中数据以64位为单位顺序入栈,寄存器c1和d0中的 数据组合成一个64位数据进入寄存器堆205,计数器加2;\n当寄存器堆205中有数时,栈顶寄存器组201和寄存器堆205之间数 据交换的方式共8种:\n方式1(如图3D所示):32位数据入栈,伪寄存器h无数,计数器 初值为8,操作完成后,通用寄存器d1中的数据进入伪寄存器h暂存,计 数器加1;\n方式2(如图3E所示):32位数据入栈,伪寄存器h有数,计数器 初值为9,操作完成后,通用寄存器的c1和d0中的数据组合成一个64位 数据,压入寄存器堆RF,计数器减1,即此时在栈顶寄存器组和伪寄存器 中的有效数据个数(以32位为单位计算)为8,伪寄存器中的数据无效;\n方式3(如图3F所示):32位数据出栈,伪寄存器h无数,计数器 初值为8,操作完成后,由RF中弹出的数据分解为两部分,分别传入d1 和伪寄存器h中暂存,计数器加1;\n方式4(如图3G所示):32位数据出栈,伪寄存器h有数,计数器 初值为9,操作完成后,寄存器堆RF不动,伪寄存器h中的数据按照顺序 出栈,计数器减1;\n方式5(如图3H所示):64位数据入栈,伪寄存器h无数,计数器 初值为8,操作结束时,通用寄存器c中的数据在更新通用寄存器d的数 据的同时,压入寄存器堆RF,计数器值不变;\n方式6(如图3I所示):64位数据入栈,伪寄存器h有数,计数器 初值为9,操作结束时,通用寄存器c1和d0中的数据经组合后压入寄存 器堆RF,同时更新寄存器d1和伪寄存器h中的数据,计数器值不变;\n方式7(如图3J所示):64位数据出栈,伪寄存器h无数,计数器 的初值为8,栈顶寄存器中的数据以64位为单位顺序弹出,出栈数据直 接传到通用寄存器d,更新寄存器d中的数据,计数器值不变;\n方式8(如图3K所示):64位数据出栈,伪寄存器h有数,栈顶寄 存器中的数据以64位为单位顺序弹出,出栈数据分解为两部分,分别存 入通用寄存器d1和伪寄存器h,计数器值不变。\n图4是图2所示的堆栈式寄存器堆的控制方法中主要步骤的流程图。\n在步骤401,过程开始。\n在步骤402,判断操作类型是入栈操作还是出栈操作。若为入栈操作, 则过程转至步骤403,否则过程转至步骤405。\n在步骤403,判断寄存器堆RF是否上溢。若步骤403的判断结果为 是,则过程转至步骤408,否则转至步骤404。\n在步骤404,判断操作数宽度是32位还是64位。\n这里的32位和64位只是用于举例说明,不构成对本发明的限制。\n如果步骤404判断出操作数宽度为32位,则进行如下判断:\n若计数值count小于9,则计数值加1,过程转至步骤408;\n若计数值count等于9,则计数值减1,且寄存器堆地址指针RFP减 1,过程转至步骤408。\n如果步骤404判断出操作数宽度为64位,则进行如下判断:\n若计数值count小于8,则计数值加2,过程转至步骤408;\n若计数值count大于等于8,则计数值加2,且寄存器堆地址指针RFP 减1,过程转至步骤408。\n在步骤405,判断寄存器堆RF是否下溢。若步骤405的判断结果为 是,则过程转至步骤406,否则转至步骤407。\n在步骤406,判断操作数宽度是32位还是64位。\n这里的32位和64位只是用于举例说明,不构成对本发明的限制。\n如果步骤406判断出操作数宽度为32位,则进行如下判断:\n若计数值count小于1,过程转至步骤408;\n若计数值count大于等于1,则计数值减1,过程转至步骤408。\n如果步骤406判断出操作数宽度为64位,则进行如下判断:\n若计数值count小于2,过程转至步骤408;\n若计数值count大于等于2,则计数值减2,过程转至步骤408。\n在步骤407,判断操作数宽度是32位还是64位。\n这里的32位和64位只是用于举例说明,不构成对本发明的限制。\n如果步骤407判断出操作数宽度为32位,则进行如下判断:\n若计数值count等于8,计数值加1,寄存器堆指针RFP加1,过程 转至步骤408;\n若计数值count等于9,则计数值减1,过程转至步骤408。\n如果步骤407判断出操作数宽度为64位,则计数值不变,寄存器堆 指针RFP加1,过程转至步骤408。\n在步骤408,过程结束。\n综上所述,在图2至图4所示的例子中,计数器工作原理为:\n1.计数器加一:\n 32位入栈,伪寄存器无数;\n 32位出栈,RF中有数,而伪寄存器中无数;\n2.计数器加二:\n 64位入栈,COUNT的计数值小于8;\n3.计数器减一:\n 32位出栈,伪寄存器中有数,而且RF中有数;\n 32位入栈,伪寄存器中有数;\n 32位出栈,RF中无数,而栈顶寄存器组中有数(COUNT值不\n全为0);\n4.计数器减二:\n 64位出栈,RF中无数,而栈顶寄存器组中32位数据的个数\n大于1;\n5.计数器发栈空信号:\n 32位出栈,而栈顶寄存器组中无数;\n 64位出栈,而栈顶寄存器组中已不足两个32位数据。\n图2所示寄存器堆地址指针生成部件RFA的工作原理为:\n在栈操作之前,用指令预置栈指针,使它指向栈操作的起始单元(SP), 堆栈操作方式时,入/出栈指针生成原理如下:\n1.当第一个64位数据从栈顶寄存器组中传递到寄存器堆RF中时, 栈指针指向设置的初值不动,数据写入栈指针初值指向的寄存器;\n2.入栈指针\n入栈数据即内部寄存器中的数据存入(SP)-1指针所指的存储单 元,入栈后SP指针更新为(SP)-1,即指向数据入栈后主寄存器堆当 前栈顶位置。修改入栈指针的条件为:\n栈操作有效而且寄存器堆未上溢时,COUNT大于等于6而且64位 入栈,或者COUNT等于7或9,而且32位入栈。\n3.出栈指针\n由于寄存器中的数据是与SP指针所指示的主寄存器堆栈顶数据 一致的(即所谓数据重叠),因此,出栈操作时,RFP生成的读数据 的地址指针为(SP)+1,读出的数据为主寄存器堆次栈顶数据。出栈 后SP指针更新,指向原(SP)+1所指示的位置,即指向数据出栈后 的主寄存器堆当前栈顶位置。修改出栈指针的条件为:\n栈操作有效而且寄存器堆未下溢时,COUNT等于8而且32位出栈, 或者COUNT大于等于8,64位出栈。\n图5是图2所述模型64位数据连续入栈的时序图。图中COUNT<3:0> 为计数器的计数值,RFP为寄存器堆RF的地址指针,RFO为入栈操作时栈 顶寄存器组向寄存器堆RF的输出数据,Bff和Bfe分别为寄存器堆RF的第 一、第二栈底,本例中设栈指针的初始值为ff,入栈地址指针减1(第一 个入栈数据写入ff寄存器),出栈地址指针加1。\n图6是图2所述模型64位数据连续出栈的时序图。RFI为出栈操作 时寄存器堆RF向栈顶寄存器组的输出数据,其它信号的意义同图5。\n图7举例说明图1所示堆栈式寄存器堆的另一具体结构及数据交换原 理。在图7所示的例子中,n等于6,m等于2,k等于2,l等于16。也就 是说,图7所示的堆栈式寄存器堆可以解决64位字长数据自适应32位和 16位字长数据的问题。在这种自适应过程中,单周期完成数据的入栈或出 栈操作。\n如图7所示,寄存器堆(RF)705包括256个64位寄存器,构成一 个向低地址增长的堆栈。数据入栈时,先存入高地址,由寄存器堆地址指 针生成部件(RFA)704产生8位地址指针,可以指向256个寄存器中的任 意一个。栈顶寄存器组701包括2个64位通用寄存器a、b。每个64位通 用寄存器的最小操作宽度为16位。栈顶寄存器组701与寄存器堆705一起 构成一个堆栈。该堆栈的一、二栈顶的数据可以进行寄存器访问。数据缓 冲寄存器703(又称为伪寄存器)的字长为48位,伪寄存器h的最小操作 单位为16位,可以看成3个16位寄存器,分别为h0、h1、h2,其中h0 为h<15:0>,h1为h<31:16>h2为h<47:32>。计数器702的计数值位数为 4,以16位为单位进行计数,计数器由计数控制器完成复位、加减1、加 减2、加减3、加减4的操作,最大计数值为11(栈顶寄存器组中最多8 个16位数据,伪寄存器可分为3个16位寄存器)。\n图8A至图8Y进一步说明图7所示的堆栈式寄存器堆的操作原理。图 中栈顶栈顶寄存器组包括2个64位寄存器a、b。每个通用寄存器以16位 为单位按照高低顺序分为4个部分,a0表示a<15:0>,a1表示a<31:16>, a2表示a<47:32>,a3表示a<63:48>,b0表示b<15:0>,b1表示b<31:16>, b2表示b<47:32>,b3表示b<63:48>。栈顶寄存器组和寄存器堆RF之间按 照栈操作方式传送数据,并保持寄存器堆中栈顶数据与栈顶寄存器组中的 栈底(包括伪寄存器h,如果此时伪寄存器h中有数的话)数据一致。\n入栈操作开始时,寄存器堆RF中尚无数据,数据在栈顶寄存器组中 以2i(0≤i≤1)个2n-m位数据为单位顺序进栈,数据首次从栈顶寄存器组传递 到寄存器堆RF的情况有7种方式(如图8A至8G所示):\n方式1(如图8A所示):16位数据入栈,计数器初值为7,操作完 成后,栈顶寄存器组中数据以16位为单位顺序入栈,寄存器a3、b0、b1 和b2中的数据组合成一个64位数据进入寄存器堆705,计数器加1;\n方式2(如图8B所示):32位数据入栈,计数器初值为6,操作完 成后,栈顶寄存器组中数据以32位为单位顺序入栈,a2、a3、b0和b1中 的数据组合成一个64位数据进入寄存器堆705,计数器加2;\n方式3(如图8C所示):32位数据入栈,计数器初值为7,操作完 成后,栈顶寄存器组中数据以32位为单位顺序入栈,寄存器a3、b0、b1 和b2中的数据组合成一个64位数据进入寄存器堆705,计数器加2;\n方式4(如图8D所示):64位数据入栈,计数器初值为4,操作完 成后,栈顶寄存器组中数据以64位为单位顺序入栈,寄存器a中的64位 数据进入寄存器堆705,计数器加4;\n方式5(如图8E所示):64位数据入栈,计数器初值为5,操作完 成后,栈顶寄存器组中数据以64位为单位顺序入栈,寄存器a1、a2、a3 和b0中的数据组合成一个64位数据进入寄存器堆705,计数器加4;\n方式6(如图8F所示):64位数据入栈,计数器初值为6,操作完 成后,栈顶寄存器组中数据以64位为单位顺序入栈,寄存器a2、a3、b0 和b1中的数据组合成一个64位数据进入寄存器堆705,计数器加4;\n方式7(如图8G所示):64位数据入栈,计数器初值为7,操作完 成后,栈顶寄存器组中数据以64位为单位顺序入栈,寄存器a3、b0、b1 和b2中的数据组合成一个64位数据进入寄存器堆705,计数器加4;\n当寄存器堆705中有数时,栈顶寄存器组701和寄存器堆705之间数 据交换的方式共18种(如图8H至8Y所示):\n方式1(如图8H所示):16位数据入栈,伪寄存器h无数,计数器 初值为8,操作完成后,栈顶寄存器组中数据以16位为单位顺序压栈、通 用寄存器b3中的数据进入伪寄存器h暂存,计数器加1,当伪寄存器中16 位数据的个数少于3时,情况类似;\n方式2(如图8I所示):16位数据入栈,伪寄存器h中数据全满, 计数器初值为11,操作完成后,通用寄存器a3、b0、b1和b2中的数据组 合成一个64位数据,压入寄存器堆705,计数器减3,即此时在栈顶寄存 器组和伪寄存器中的有效数据个数(以16位为单位计算)为8,伪寄存器 中的数据无效;\n方式3(如图8J所示):32位数据入栈,伪寄存器h无数,计数器 初值为8,操作完成后,栈顶寄存器组中数据以32位为单位顺序压栈、通 用寄存器b2、b3中的数据分别进入伪寄存器h0和h1中暂存,计数器加2, 当伪寄存器中16位数据的个数为1时,情况类似;\n方式4(如图8K所示):32位数据入栈,伪寄存器h有2个16位数 据,计数器初值为10,操作完成后,栈顶寄存器组中数据以32位为单位 顺序压栈、通用寄存器a2、a3、b0、b1中的数据组合成一个64位数据, 压入寄存器堆705,计数器值不变;\n方式5(如图8L所示):64位数据入栈,伪寄存器h全满,计数器 初值为11,操作结束时,栈顶寄存器组中数据以32位为单位顺序压栈、 通用寄存器a3、b0、b1、b2中的数据组合成一个64位数据,压入寄存器 堆705,计数器值不变;\n方式6(如图8M所示):64位数据入栈,伪寄存器h无数,计数器 初值为8,操作结束时,通用寄存器a中的64位数据压入寄存器堆RF,同 时更新寄存器b中的数据,计数器值不变;\n方式7(如图8N所示):64位数据入栈,伪寄存器h中只有一个16 位数据,计数器的初值为9,栈顶寄存器中的数据以64位为单位顺序压 栈,通用寄存器a1、a2、a3、b0中的数据组合成一个64位数据,压入寄 存器堆705,计数器值不变;\n方式8(如图80所示):64位数据入栈,伪寄存器h中有2个16位 数据,计数器的初值为10,栈顶寄存器中的数据以64位为单位顺序压 栈,通用寄存器a2、a3、b0、b1中的数据组合成一个64位数据,压入寄 存器堆705,计数器值不变;\n方式9(如图8P所示):64位数据入栈,伪寄存器h中有3个16位 数据,计数器的初值为11,栈顶寄存器中的数据以64位为单位顺序压 栈,通用寄存器a3、b0、b1、b2中的数据组合成一个64位数据,压入寄 存器堆705,计数器值不变;\n方式10(如图8Q所示):16位出栈,伪寄存器h中有数,栈顶寄存 器组中的数据以16位为单位顺序出栈,计数器值减1;\n方式11(如图8R所示):16位出栈,伪寄存器h中无数,栈顶寄存 器组中的数据以16位为单位顺序出栈,从寄存器堆705中弹出一个64位 数据,进入寄存器b3和h,栈指针加1,计数值加3;\n方式12(如图8S所示):32位出栈,伪寄存器h中16位数据个数 大于等于2,栈顶寄存器组中的数据以32位为单位顺序出栈,计数值减2;\n方式13(如图8T所示):32位出栈,伪寄存器h中16位数据个数 等于1,栈顶寄存器组中的数据以32位为单位顺序出栈,从寄存器堆705 中弹出一个64位数据,进入寄存器b3和h,栈指针加1,计数值加2;\n方式14(如图8U所示):32位出栈,伪寄存器h中无数,栈顶寄存 器组中的数据以32位为单位顺序出栈,从寄存器堆705中弹出一个64位 数据,进入寄存器b2、b3、h0和h1,栈指针加1,计数值加2;\n方式15(如图8V所示):64位出栈,伪寄存器h中无数,栈顶寄存 器组中的数据以64位为单位顺序出栈,从寄存器堆705中弹出一个64位 数据,进入寄存器b,栈指针加1,计数值不变;\n方式16(如图8W所示):64位出栈,伪寄存器h0中有数,栈顶寄 存器组中的数据以64位为单位顺序出栈,从寄存器堆705中弹出一个64 位数据,进入寄存器b1、b2、b3、h0,栈指针加1,计数值不变;\n方式17(如图8X所示):64位出栈,伪寄存器h0、h1中有数,栈 顶寄存器组中的数据以64位为单位顺序出栈,从寄存器堆705中弹出一个 64位数据,进入寄存器b2、b3、h0、h1,栈指针加1,计数值不变;\n方式18(如图8Y所示):64位出栈,伪寄存器h0、h1、h2中都有 数,栈顶寄存器组中的数据以64位为单位顺序出栈,从寄存器堆705中弹 出一个64位数据,进入寄存器b3、h0、h1、h2,栈指针加1,计数值不变。\n虽然已经示出和详细描述了本发明的较佳实施方式,但是应当认识到 可以对本发明做出各种变化和修改而不脱离本发明的保护范围。
法律信息
- 2020-07-10
未缴年费专利权终止
IPC(主分类): G06F 12/04
专利号: ZL 00120103.4
申请日: 2000.07.18
授权公告日: 2004.04.21
- 2018-11-06
专利权的转移
登记生效日: 2018.10.18
专利权人由北京多思科技工业园股份有限公司变更为北京南思达科技发展有限公司
地址由100195 北京市海淀区北坞村路甲25号静芯园G座楼107室变更为100036 北京市海淀区万寿路西街2号4层420室
- 2018-09-04
专利权的转移
登记生效日: 2018.08.15
专利权人由北京多思技术服务有限公司变更为北京多思科技工业园股份有限公司
地址由100195 北京市海淀区北坞村路甲25号北京静芯园G座109室变更为100195 北京市海淀区北坞村路甲25号静芯园G座楼107室
- 2016-08-10
专利权的转移
登记生效日: 2016.07.21
专利权人由北京天宏绎网络技术有限公司变更为北京多思技术服务有限公司
地址由100195 北京市海淀区北坞村路甲25号静芯园G座楼106室变更为100195 北京市海淀区北坞村路甲25号北京静芯园G座109室
- 2016-08-03
专利权的转移
登记生效日: 2016.07.13
专利权人由北京多思安全芯片科技有限公司变更为北京天宏绎网络技术有限公司
地址由100195 北京市海淀区北坞村路甲25号静芯园G座楼108室变更为100195 北京市海淀区北坞村路甲25号静芯园G座楼106室
- 2016-03-30
文件的公告送达
文件的公告送达失败
收件人: 周燕
文件名称: 手续合格通知书
- 2016-03-16
专利权的转移
登记生效日: 2016.02.25
专利权人由北京南思达科技发展有限公司变更为北京多思安全芯片科技有限公司
地址由100091 北京市海淀区红山口甲3号工程维修大队新建综合楼189号一层变更为100095 北京市海淀区北坞村路甲25号静芯园G座楼108室
专利权人由北京多思科技工业园股份有限公司 北京天宏绎网络技术有限公司变更为空
- 2014-10-29
专利权的转移
登记生效日: 2014.10.10
专利权人由北京多思科技工业园股份有限公司变更为北京南思达科技发展有限公司
地址由100091 北京市海淀区红山口甲3号工程维修大队新综合楼189号三层变更为100091 北京市海淀区红山口甲3号工程维修大队新建综合楼189号一层
专利权人由北京多思科技发展有限公司 北京天宏绎网络技术有限公司变更为北京多思科技工业园股份有限公司 北京天宏绎网络技术有限公司
- 2014-02-05
- 2013-07-03
- 2013-06-19
- 2012-11-28
- 2010-03-10
专利申请权、专利权的转移(专利权的转移)
专利申请权、专利权的转移(专利权的转移)变更项目:专利权人变更前权利人:北京多思科技工业园股份有限公司 地址: 北京市海淀区红山口甲三号工程维修大队新综合楼189号三层 邮编: 100091变更后权利人:北京多思科技工业园股份有限公司 地址: 北京市海淀区红山口甲3号工程维修大队新综合楼189号三层 邮编: 100091; 北京多思科技发展有限公司 地址: 北京市海淀区中关村南大街甲56号方圆大厦B801 邮编: 100080; 北京天宏绎网络技术有限公司登记生效日:2010.2.5
- 2007-10-24
专利申请权、专利权的转移专利权的转移
<登记生效日>2007.09.14<变更事项>地址<变更前权利人>香港铜锣湾耀华街3号百乐中心8楼801室<变更后权利人>100083北京市海淀区学院路30号集成电路中心
- 2007-10-24
专利申请权、专利权的转移专利权的转移
<变更事项>专利权人<变更前权利人>多思资讯(集团)有限公司<变更后权利人>北京多思科技工业园股份有限公司<登记生效日>2007.09.14
- 2004-04-21
- 2002-02-06
- 2000-12-20
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有引用任何外部专利数据! |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |