指令操作码生成系统的制作方法

文档序号:6456524阅读:378来源:国知局
专利名称:指令操作码生成系统的制作方法
技术领域
本发明涉及在处理器设计工具中使用的指令操作码(instruction operation code)生成系统,更具体地涉及在设计处理器的指令集时用于自 动决定指令操作码的技术。
背景技术
为了实现处理器的高效设计,已经开发出各种工具。作为这样的工具 之一,已知一种根据处理器的设计技术规范(design specification)生成处 理器硬件配置或处理器软件开发工具的工具。这样的工具在下文中称为 "处理器设计工具"。在传统的处理器设计工具中,包括指令字长、操作 码和操作数(operand)在内的所有信息都由设计者定义。当定义一个指令 时,设计者定义该指令的字长以及在该指令中使用的操作数的类型和数目 两者。
在非专利参考文件1和2和专利参考文件1到3中公开了传统的处理 器设计工具。例如,非专利参考文件1的工具定义处理器的指令集从而生 成处理器的仿真器。在非专利参考文件1的工具中,指令位模式(bit pattern)定义如下。
CODING {Dest Srcl Src2 ObO 10000 0b 10000}
在"{"和"}"之间的部分表示位模式。Dest、 Srcl和Src2分别表示 登记号(register number)。在Dest、 Srcl禾n Src2之后的0b010000和 OblOOOO分别为表示指令的操作码的二进制数位。以这种方式,构成指令 的位模式的所有信息都需要由设计者定义。相似的原理适用于非专利参考 文件2以及专利参考文件1和2中公开的工具。
指令操作码是用于区分各个指令的指令字段。在已经预先设定 (settle)指令集的情况下,仅需要设计者在开始时定义指令操作码一次。但是,在调查要向指令集添加何种指令时,设计者需要校正指令操作码几 次。
如果不需定义或校正指令操作码,则要由设计者定义的项的数目减 少。操作码具有什么值并不重要,而仅仅需要将操作码定义为使得各个指 令可相互区分。当可自动定义指令操作码的机制被实现时,要由设计者定 义的项的数目可以减少,从而提高设计效率。
非专利参考文件1: S. Pees et al., "LISA-Machine Description Language for Cycle-Accurate Models of Programmable DSP Architectures", 36th Design Automation Conference (DAC 99), June 1999, pp. 933-938
非专禾lj参考文件2: Andreas Hoffmann, et al., "A Survey on Modeling Issues Using the Machine Description Language Lisa," Proceedings of ICASSP 2001, VOL. 2, pp. 1137-1140, May 7-11 2001
专利参考文件1:美国专利No. 6,477,683
专利参考文件2:美国专利No. 6,862,563
专利参考文件3:日本的PCT国家公布No. 2003-518280
专利参考文件4: JP-A-2003-32346
发明内容
[技术问题]
上面提及的传统指令集生成工具具有以下问题由于设计者必需对指 令操作码进行定义,所以效率被恶化。在设计者在调查指令集的内容时必 须作出大量尝试和错误的情况下,要设计者输入的项的数目越少,则可实 现更高时效的设计。
本发明的一个目的是提供这样一种指令操作码自动生成方法,其能够 实现操作码的自动生成以便增大处理器指令集设计工作效率并减少设计者 在调査指令集时的工作量。 [技术方案]
为了解决以上目的,根据本发明第一方面,提供了一种指令操作码生 成系统,其包括操作码位宽决定装置,用于根据与处理器指令集相关联的技术规范数据来决定要被指派给所述指令集的每一个指令的操作码的位
宽;指令分类装置,用于根据操作码位宽对所述指令进行分类;以及操作 码值决定装置,用于根据对所述指令的分类来决定每一个指令的操作码的 值。
此外,根据本发明第二方面,提供了一种用于基于与处理器的指令相 关联的技术规范数据生成处理器的硬件配置定义或者处理器的软件开发工 具的系统,其中所述系统使用如上所述的指令操作码生成系统来决定构成 所述指令集的每一个指令的操作码的值。
此外,根据本发明第三方面,提供了一种指令操作码生成方法,包 括对与处理器的指令集相关联的技术规范数据进行解释的技术规范数据 分析步骤;决定要向所述指令集的每一个指令的操作码指派的位宽的步 骤;根据操作码位宽对所述指令进行分类的步骤;以及根据对所述指令的 分类来决定每一个指令的操作码的值的步骤,以上各个步骤根据与所述处 理器指令集相关联的技术规范数据来操作。 [有利效果]
根据本发明,根据与处理器指令集相关联的技术规范数据来自动生成 每一个指令的操作码的值,从而消除设计者对操作码进行定义的需要,这 相应地增大了处理器指令集设计工作效率并减少了设计者在调查指令集时 的工作量。


图1是示出根据本发明第一示例性实施例的指令操作码生成系统的示
图2是示出根据本发明第二示例性实施例的指令操作码生成系统的示
图3是示出作为本发明一个示例的操作码赋值方法的流程图4 (a)是示出将操作码布置在指令的位模式的MSB侧的方法的示
图,图4 (b)是示出将操作码布置在指令的位模式的LSB侧的方法的示
图;图5是示出第一操作码决定方法的流程图6是示出用作技术规范数据的指令的示例的示图7是示出根据第一操作码决定方法对操作码进行赋值的示例的示
图8是示出第二操作码决定方法的流程图9是示出根据第二操作码决定方法对操作码进行赋值的示例的示
图IO是示出第三操作码决定方法的流程图11是示出根据第三操作码决定方法对操作码进行赋值的示例的示
图12是示出第四操作码决定方法的流程图13是根据第四操作码决定方法的索引子字段(index sub-field)决 定方法的流程图14是根据第四操作码决定方法的组子字段(group sub-field)决定
方法的流程图15是示出用作技术规范数据的指令的示例的示图16是示出根据第四操作码决定方法对索引子字段进行赋值的示例
的示图17是示出根据第四操作码决定方法在基于组子字段的位宽进行排 序之后的指令的示例的示图;以及
图18是根据第四操作码决定方法对组子字段进行赋值的示例。 标号说明
100:操作码位宽决定装置 200:指令排序装置 300:操作码值决定装置
400:第一操作码子字段值决定装置 500:第二操作码子字段值决定装置 600:技术规范数据分析装置 700:操作码输出装置800:中间数据存储装置
具体实施例方式
以下将参考附图详细描述根据本发明、用于实施指令操作码生成系统 的优选示例性实施例。
(第一示例性实施例)
图1示出了根据本发明第一示例性实施例的指令操作码生成系统的配 置。图1所示的指令操作码生成系统包括基于与处理器的指令集相关联的 技术规范数据操作的以下装置技术规范数据分析装置600,其对与处理
器指令集相关联的技术规范数据进行解释;操作码位宽决定装置100,其 决定可被分配给各个指令的操作码的位宽;指令排序(sort)装置200,其 根据操作码位宽对指令进行排序;操作码值决定装置300,其决定各个指 令的操作码的值;操作码输出装置700,其输出指令操作码;以及中间数 据存储装置800,其存储技术规范数据分析装置600、操作码位宽决定装 置100、指令排序装置200、操作码值决定装置300和操作码输出装置700 所使用的数据。
利用以上配置,根据与处理器指令集相关联的技术规范数据来自动生 成各个指令的操作码值,从而消除由设计者定义操作码的需要,这相应地 增大了处理器指令集设计工作效率并减少了设计者在调查指令集时的工作
(第二示例性实施例)
图2示出了根据本发明第二示例性实施例的指令操作码生成系统的配 置。图2所示的指令操作码生成系统包括技术规范数据分析装置600, 其对与处理器指令集相关联的技术规范数据进行解释;操作码位宽决定装 置100,其决定可被分配给各个指令的操作码的位宽;指令排序装置 200,其根据操作码位宽对指令进行排序;第一和第二操作码子字段值决 定装置400和500,其根据操作码位宽分别决定构成操作码的两个子字段 的值;操作码输出装置700,其输出指令操作码;以及中间数据存储装置 800,其存储技术规范数据分析装置600、操作码位宽决定装置100、指令排序装置200、操作码值决定装置300、第一和第二操作码子字段值决定 装置400和500、以及操作码输出装置700所使用的数据。
利用以上配置,与第一示例性实施例的情况一样,根据与处理器指令 集相关联的技术规范数据来自动生成各个指令的操作码值,从而消除由设 计者定义操作码的需要,这相应地增大了处理器指令集设计工作效率并减 少了设计者在调査指令集时的工作量。此外,与根据第一示例性实施例的 指令操作码生成系统相比较,根据第二示例性实施例的指令操作码生成系 统更容易对生成的操作码进行解码。
根据第一和第二示例性实施例的指令操作码生成系统可通过在计算机 上操作的程序来实现。在这种情况下,构成指令操作码生成系统的程序允 许计算机用作以上各个装置100到800。在这种配置中,指令操作码生成 系统控制计算机读出与处理器指令集相关联的技术规范数据,并基于该技 术规范数据来决定各个指令的操作码。
参考图3到18,将具体描述根据第一和第二示例性实施例的指令操作 码生成系统的示例。在以下示例中,图l和2所示的以上各个装置100到 800由计算机的处理器(CPU:中央处理单元)来实现,该处理器执行存 储在计算机的存储介质中的指令操作码生成系统的程序代码。 [示例]
首先,将描述处理器指令是如何定义的。
处理器指令由0和1组成的位模式来表示。模式中的哪个位具有什么 含义是预先定义的,并且处理器读出指令的位模式以对指令进行解释。
指令的位模式包括两个字段操作码字段和操作数字段。操作码字段 是表示指令的名称或类型的字段。指令必然包括一个操作码以表示指令的 名称或类型。由于操作码通过其自身表示指令的名称或类型,所以操作码 依据指令的名称或类型而不同。操作数是表示赋予指令的参数的字段。某 些指令可能具有多个操作数,而某些指令可能不具有任何操作数。
当解释指令时,处理器首先从指令操作码获取指令的名称或类型,然 后从指令的名称或类型获取操作数的数目或其含义。由于在指令的名称或 类型与操作数的数目或其含义之间具有一一对应关系,所以操作码是否容
12易解释直接影响指令解释的容易度。
例如,如果指令字长、操作码的起始位位置和操作码位宽都恒定不 变,则可以很容易解释操作码。但是,操作码位宽通常并不恒定,并且可 能存在指令字长或操作码起始位位置并不恒定的情况。因此,为了更容易 解释操作码,有必要使操作码的起始位位置恒定,并尽可能减少位宽数目 的变化。
接下来,将描述指令操作码是如何决定的。在本说明书中使用的各种
运算符(=、+=、 ==、 <<、 &、 ~、 +、-等)的含义被假定为与c语言中定
义的一样。例如,"x=y"意味着将y赋值给x的赋值运算,"x+=y"意 味着将x+y赋值给x的赋值运算(即,"x+=y"具有与"x=x+y"相同的 含义)。"x==y"意味着用于确定x和y之间的相等性的关系运算。在这 种运算中,当x与y彼此相等时,返回为真,而当x与y不相等时,返回 为假。"x y"意味着x被向左移位y值的移位运算。"x&y"意味着用 于计算x与y之间的逻辑AND的逻辑运算。" x"意味着对x的所有位 求反的运算。
首先,对以下描述中所使用的术语进行定义。在下文中,术语<技术 规范>意味着为了生成操作码设计者应当定义的信息,即,技术规范数 据。
指令总数由S〈技术规范〉表示。 [定义3]
指令字长由>^<技术规范>表示。 [定义4]
用于表示指令k的所有操作数的位模式宽度由 total—operands—length[k]〈,支术步见范〉表示。 [定义5]指令k的操作码字段的长度由opcode—length[k]位表示。 [定义6]
指令k的操作码字段的值由opcode—value[k]表示。opcode一value[k]是 无符号整数。 [定义7]
操作码字段的长度为x位的指令的数目由mim of
从具有位宽"length"的值x的位反转获得的值由bitrev(x,length)表
接下来,将在以下描述基于以上定义1到9指派指令操作码的方法。 图3是与该方法相对应的流程图。
(0) 读取技术规范数据(步骤St0)。
在这个步骤中,用于表示指令k的所有操作数的位模式宽度 total—operands—length[k]被从技术规范数据中读出。这个处理由图1禾Q 2所 示的技术规范数据分析装置600来执行。
(1) 决定指令的操作码字段的位宽(步骤Stl)。 在这个步骤中,指令k的操作码字段的位宽opcode—length[k]被定义如下。
opcode—length[k]=N-total—operands—length[k] (lc=0, 1,…,S-1) 这个处理由图l和2所示的操作码位宽决定装置100来执行。
(2) 随后,对指令进行排序(步骤St2)。
在这个步骤中,基于total—operands—length[k]对所有指令进行排序。排 序之后的指令编号由i表示。对操作数使用最大位数的指令的编号i被设 为0。此外,对操作数使用最小位数的指令的编号i被设为S-l。
这个处理由图l和2所示的指令排序装置200执行。
然后,决定指令的操作码字段的值(步骤St3)。在这个步骤中,以从第0个指令开始的顺序来决定操作码字段的值
"opcode一value[i]"。这个处理由图1所示的操作码值决定装置300或者 图2所示的第一和第二操作码子字段值决定装置400和500来执行。
在以上过程中在操作码字段被布置在指令的位模式的最高有效位 (MSB)侧的情况下,如图4 (a)所示地布置操作码字段。另一方面,在 操作码字段被布置在指令的位模式的最低有效位(LSB)侧的情况下,如 图4 (b)所示地布置从操作码字段的值的位反转获得的值。
在图4 (a)和4 (b)中,opcodejength[i]表示指令[i]的操作码的位 宽,opcode—value[i]表示指令[i]的操作码的值,operand—O[i]表示指令[i]的 第0个操作数的内容,operand—l[i]表示指令[i]的第1个操作数的内容, 叩erand—q[i]表示指令[i]的的第q个操作数的内容,并且bitrev(X,Y)表示从 X的低Y位的位反转值获得的值。
一些方法可用作用于决定操作码字段的值的方法(步骤St3)。在下 文中,将描述操作码决定方法。
将描述第一操作码决定方法。
在该操作码决定方法中,根据上面提及的过程执行(1)操作码字段 位宽的决定和(2)指令的排序。在此之后,(3)决定各个指令的操作码 的值opcode—value[i],如下所示。
图5示出了第一操作码决定方法的流程图。在图5中,i表示指令编 号,S表示指令总数,opcodejalue[i]表示指令i的操作码的值,并且 opcode一length[i]表示指令i的操作码的位宽。
将0赋值给opcode—value[O](步骤Stl 1)。
然后,如下所示地顺序决定opcode—value[i],其中指令编号i在从0 到S-1的范围内(步骤Stl2到St15)。
opcode—value[i]=((opcode—value[i-1 ]+1 )《(opcode—lengthW-opcode—length"- 1 ])
艮卩,opcode—value[i-l]与1的和被向左移位opcode—length[i]与 opcode一length[i-l]之差的值,并且从移位操作获得的值被赋值给
15opcode—value[i]。以这种方式来决定各个指令的操作码的值。
在图6和7中示出了根据第一操作码决定方法来对操作码赋值的示 例。图6表示14个指令(S=14)的位模式。在图6中,Ra、 Rb和Rc是 各自表示登记号的操作数字段。IMM6、 IMM4和IMM2是各自表示数值 的操作数字段。在图6中,每一个指令的字长为16位(N=16)。此外, 在图6中,写在各个位模式的MSB侧的由0和1组成的位模式表示操作 码。
指令U、 V、 W、 A、 B、 C、 D、 E、 F、 G、 H、 P、 Q和T的操作码 的值是在以下假设下决定的假定给出了指令集的技术规范数据,其中每 一个指令的字长和每一个操作数字段的位宽被设置为如图6所示。
基于叩code—length[i]对图6所示的指令进行排序,并执行图5的从 Stll到Stl5的处理,由此获得图7。如图7所示,每一个指令的值 "opcode—value[i](i=0,...,13)"都不与任何其它指令的操作码的值重叠。因 此,可以利用根据第一操作码决定方法生成的操作码正确地识别各个指 令。
注意,图6仅仅是一个代表性模型,并且不一定总是如图6所示地描 述技术规范数据。技术规范数据可以被描述为文本文件。
从上面可见,第一操作码决定方法非常简单。此外,第一操作码决定 方法具有以下优点与下面的操作码决定方法相比,第一操作码决定方法 可以表示大量的操作码。
对以第一操作码决定方法生成的操作码的解码稍微复杂一些。即,需 要减法和比较运算来解码以第一操作码决定方法生成的操作码。需要同时 执行多个减法和比较运算,以对一个周期中的指令进行解码,因此,与使 用以下操作码决定方法的情况相比,不可避免地增加了用于对操作码进行 解码的解码电路的占位(footprint)。
接下来,将描述第二操作码决定方法。
在该操作码决定方法中,根据上面提及的过程执行(1)操作码字段 位宽的决定(步骤Stl)和(2)指令的排序(步骤St2)。在此之后,(3)决定每一个指令的操作码的值"opcode—value[i]",如下所示。
图8示出了第二操作码决定方法的流程图。在图8中,i表示指令编 号,S表示指令总数,opcode一value[i]表示指令i的操作码的值,并且 opcode一length[i]表示指令i的操作码的位宽。 将0赋值给opcode—value[O](步骤St21)。
然后,如下所示地顺序决定opcode_value[i],其中,指令编号i在从l 到S-1的范围内(步骤St22到St30)。
在步骤St23中,判断opcode—length[i]是否等于opcode—length[i-l]。
当opcode—length[i]等于opcode—length[i-l](步骤St23中为是)时,将 opcode—value[i-l]加1,并且将从相加得到的值赋值给opcode_value[i](步 骤St24)。即,通过向opcode—value[i隱l]加1来获得opcode—value[i]。
另一方面,当opcod^length[i]不等于opcodejength[i-l](步骤St23中 为否)时,将opcode_value [1]设置为(0口(;0(16—丫31116["1]<<((^(:0(16—lengths-opcode—leng邮-l])) (步骤 St25 )。艮卩,从 opcode—leng邮]减去 opcode—length[i-l]。然后,将opcode—value[i-l]左移从减法得到的值,并且 将从移位操作得到的值赋值给opcode—vahie[i]。随后,执行步骤St26。
在步骤St26中,判断作为不小于与指令i具有相同操作码长度的指令 数 目 的 、 2 的 幂 的 最 小 值 的 值 (min_power—of—2(num—of一inst一having一opcode—length(opcode一length[i])))是否 大于从(1 opcode—length[i]-opcode—length[i-1 ]))获得的值,并将较大者设 置为Z。
当步骤 St26 中的判断为是时,Z被设置为 min_power—of—2(num_of_inst—having—opcode一length(opcode—length[i])), 并 且根据以下计算公式来计算opcode—value[i]:
opcode—value[i]=(opcode—value[i]+Z)&(~(Z-1))
另 一 方面,当步骤St26中的判断为否时,Z被设置为 (l (opcode—length[i]-opcode—length[i-l])),并且根据以下计算公式来计算 opcode—value[i]:
opcode—value[i]=(opcode_value[i]+Z)&( (Z-l))(步骤St28)。
17以这种方式,决定每一个指令的操作码的值。
在图6和9中示出了根据第二操作码决定方法对操作码进行赋值的示 例。基于opcode—length[i]对在图6中被示作技术规范代码的指令进行排 序,并执行图8的从St21到St30的处理,由此获得图9。
如图9所示,每一个指令的值"opcode—value[i](i=0,..,13)"都不与任 何其它指令的操作码的值重叠。因此,可以利用根据第二操作码决定方法 生成的操作码来正确地识别每一个指令。
从上面可见,第二操作码决定方法比第一操作码决定方法略微更复 杂。但是,对以第二操作码决定方法生成的操作码的解码比第一操作码决 定方法的情况容易。这是因为通过第二操作码决定方法生成的操作码是由 表示具有相同位宽的一组操作码的位串和表示该组中的指令的索引的位串 构成的。因此,可将操作码分为两个位串,从而允许分层地对操作码进行 解码。
艮P,当对以第二操作码决定方法生成的操作码进行解码时,首先对表 示具有相同位宽的一组操作码的位串进行解码。然后,选择具有最长位串 的一组,并对表示该组中的指令的索引的位串进行解码。为了对以第二操 作码决定方法生成的操作码进行解码不必执行减法。因此,可以仅利用逻 辑运算和移位运算来构建解码电路。其结果是,在第二操作码决定方法中 的解码电路比第一操作码决定方法中的解码电路简单。
将描述第三操作码决定方法。
在该操作码决定方法中,根据上面提及的过程执行(1)操作码字段 位宽的决定(步骤Stl)和(2)指令的排序(步骤St2)。在那之后, (3)决定每一个指令的操作码的值"opcode—value[i]",如下所示。
图IO示出了第三操作码决定方法的流程图。在图10中,i表示指令编 号,S表示指令总数,opcode—value[i]表示指令i的操作码的值,并且 opcode—length[i]表示指令i的操作码的位宽。
将0赋值给opcode—value[O](步骤St31)。
然后,如下所示地顺序决定opcode一value[i],其中,指令编号i在从1到S-1的范围内(步骤St32到St38)。
在步骤St33中,判断opcode—length[i]是否等于opcode—length[i-l]。 当opcode—length[i]等于opcode—length[i-l](步骤St33中为是)时,将
opcode—value[i-l]加1,并且将从相加得到的值赋值给opcode—value[i](步
骤St34)。
另一方面,当opcode—length[i]不等于opcode—length[i-l](在步骤St33 中为否)时,作为不小于具有与指令i相同的操作码长度的指令的数目 的、 2 的幂的最小值的值 (min_power—of—2(num_of—inst_having—opcode一length(opcode—length[i-1 ])))被 设置为Z (步骤St35)。随后,执行步骤St36。
在步骤St36中,根据以下计算公式计算opcode—value[i]:
opcode—value[i]=((opcode—value[i-1 ]+Z) (opcode—lengthW-opcode—lengthfi- 1 ])
以这种方式,决定每一个指令的操作码的值。
在图6和11中示出了根据第三操作码决定方法对操作码的赋值的示 例。基于opcode一length[i]对在图6中被示作技术规范代码的指令进行排 序,并执行图10的从St31到St38的处理,由此获得图ll。
如图11所示,每一个指令的值"opcode—value[i](i=0,...,13)"都不与任 何其它指令的操作码的值重叠。因此,可以利用根据本操作码决定方法生 成的操作码来正确地识别每一个指令。
在第三操作码决定方法中,需要减法和比较运算以对所生成的操作码 进行解码。这与第一操作码决定方法的情况相同。
与第一和第二操作码决定方法相比,第三操作码决定方法在过程上不 像第一操作码决定方法那么简单,并且在对操作码的解码上不像第二操作 码决定方法那么容易。
将描述第四操作码决定方法。
在该操作码决定方法中,操作码字段被分为两个子字段。 一个是组子 字段,另一个是索引子字段。组子字段被置于MSB侧,并且索引子字段
19被置于LSB侧。在这种方法中,分别决定索引子字段的操作码和组子字段 的操作码。
图12示出了第四操作码决定方法的流程图。如图12所示,第四操作
码决定方法包括以下步骤决定每一个索引子字段的位宽的步骤(步骤
St41),决定每一个索引子字段的值的步骤(St42),决定每一个组子字 段的位宽的步骤(步骤St43),基于每一个组子字段的位宽对指令进行排 序的步骤(步骤St44),以及决定每一个组子字段的值的步骤(步骤 St45)。
有关这两个子字段的符号被定义如下。 [定义10]
指令i的组子字段的长度由opcode—sub一grp—length[i]表示。 [定义11]
指令i的组子字段的值由opcode—sub—grp一value[i]表示。 [定义12]
指令i的索引子字段的长度由opcode—sub—idx—length[i]表示。 [定义13]
指令i的索引子字段的值由opcode—sub—idx—value[i]表示。 [定义14]
为所有指令定义索引子字段的长度,如下所示(步骤St41)。 opcode—sub—idx—length[i]=min_power—of—2(num一of一inst—having—opcode —length(opcode—length[i])) [定义15]
为所有指令定义组子字段的长度,如下所示(步骤St43)。 opcode—sub—grp—length[i]=opcode—length[i]-opcode—sub—idx—length[i] 接下来,将描述决定索引子字段的值的过程。图13是与该过程相对 应的流程图。在图13中,i表示指令编号,S表示指令总数, opcodejalue[i]表示指令i的操作码的值,opcodejength[i]表示指令i的操 作码的位宽,并且opcode一sub一idx一value[i]表示指令i的索引子字段的值。 将0赋值给opcode—sub—idx—value
(步骤St51)。然后,如下所示地顺序决定opcode—sub—idx_value[i],其中,指令编 号i在从l到S-l的范围内(步骤St52到St57)。
在步骤St53中,判断opcode—length[i]是否等于opcode—length[i-l]。
当opcode—length[i]等于叩code—length[i-l](步骤St53中为是)时,将 opcode—sub—idx—value [i-l〗力卩1 ,并且将从相加得到的值赋值给 opcode—sub—idx一value [i](步骤St54)。
另一方面,当opcodejength[i]不等于opcodejength[i-l](在步骤St53 中为否)时,将0赋值给opcode—sub—idx—value[i](步骤St55)。
接下来,将描述基于各个组子字段的位宽对指令进行排序的过程。基 于指令i的组子字段长度opcode—sub—grp—length[i]对所有指令进行排序。 排序之后的指令编号由n表示。令对组子字段使用最大位数目的指令的编 号n被设为0,并令对操作数使用最小位数目的指令的编号n被设为S-l 。
接下来,将描述决定组子字段的值的过程。图14是与该过程相对应 的流程图。在图14中,n表示指令编号,S表示指令的总数, opcode—value[n]表示指令n的操作码的值,opcode—length[n]表示指令n的 操作码的位宽,opcodLSuLgrpjalue[n]表示指令n的组子字段的值。并且 opcode—sub—grp—length[n]表示指令n的组子字段的位宽。
将0赋值给opcode—sub_grp_value
(步骤St61)。
然后,如下所示地顺序决定opcode—sub—grp—value[n],其中,指令编 号n在从l到S-l的范围内(步骤St62到St66)。
在步骤St63中,判断opcode—length[n]是否等于opcode—length[n-l]。
当opcode—length[n]等于opcode—length[n-l](在步骤St63中为是) 时,将opcode—sub—grp—value[n-l]赋值给opcode—sub—grp一value[n](步骤 St64)。
另一方面,当opcode—length[n]不等于opcode—length[n-l](在步骤 St63中为否)时,根据以下计算公式计算opcode—sub—grp—value[n]:
opcode—sub—grp—value[n]=((opcode—sub—grp_value[n-1 ]+1 ) (opcode—sub—grp一length[n]陽opcode一sub一grp一length[n-1 ])
以这种方式,决定了每一个指令的操作码的值。在图15到18中示出了根据第四操作码决定方法对操作码赋值的示例。
图15表示14个指令(S=14)的位模式。在图15中,Ra、 Rb和Rc 是各自表示登记号的操作数字段。IMM6、 IMM4和IMM2是各自表示数 值的操作数字段。每一个指令的字长为16位(N=16)。操作数被布置在 指令位模式的LSB侧,并且操作码字段被布置在指令位模式的MSB侧。
基于叩code—length[i]对在图15中被示作技术规范代码的指令进行排 序,并执行图13的从St51到St57的处理,由此获得图16。图16示出了 与图15的指令相对应的各个索引子字段的值。
随后,使用图16中已经算出每一个索引子字段的值的指令来计算每 一个指令的组子字段的位宽。然后,基于每一个组子字段的位宽对指令进 行排序,从而获得图17。
随后,针对图17的指令执行图14中从步骤St61到步骤St67的处 理,从而获得图18。图18示出了与图17的指令相对应的各个组子字段的 值。利用以上处理,计算得到每一个指令的索引子字段和组子字段的值。 然后,将索引子字段和组子字段相连接,由此获得与操作码的值相对应的 位串。
如图 18 所示, 由组子字段的值 "opcode—sub—grp—value[i](i=0,...,13)" 和索引子字段的值 "opcode_sub_idx_value[i](i=0,..., 13)"构成的每 一个指令的操作码的值不 与任何其它指令的操作码的值重叠。因此,可以利用根据本操作码决定方 法的操作码来正确地识别每一个指令。
通过第四操作码决定方法生成的操作码由表示具有相同位宽的一组操 作码的位串和表示该组中的指令的索引的位串构成。这是与第二操作码决 定方法相同的特征。因此,与第二操作码决定方法的情况相同,可以很容 易地对操作码进行解码。为了对以第二操作码决定方法生成的操作码进行 解码不必执行减法,因而可以仅利用逻辑运算和移位运算来解码操作码。
此外,通过第四操作码决定方法生成的操作码具有以下特征较短操 作码的组子字段与另一较长操作码的组子字段的一部分不一致。这是第二操作码决定方法不具有的特征。这使得解码处理比第二操作码决定方法的 情况更容易。
艮P,当对以第二操作码决定方法生成的操作码进行解码时,首先对表 示具有相同位宽的一组操作码的位串进行解码,然后需要选择具有最长位 串的组。这是因为表示具有相同位宽的一组操作码的位串部分相互一致, 因而有必要从这些位串中选择最适合的组。与使用第二操作码决定方法的 情况相比,第四操作码决定方法可以表达的操作码的类型数目较少。但
是,在指令字长为24或32位的情况下,这不是主要问题。
将描述如何选择以上第一到第四操作码决定方法中的哪些。 一般而言,优选地选择可以容易地执行解码的操作码决定方法。在第 一到第四操作码决定方法中,在解码处理方面第四操作码最容易。在需要 增加操作码数目的情况下,优选地选择第二操作码决定方法。
虽然已经参考以上示例详细描述了本发明,但是应当了解,本发明不 限于以上代表性示例。因此,在不脱离由权利要求限定的本发明的真实范 围的情况下,本领域技术人员可以进行各种修改、改变和应用。因此,所 有修改例及其等同物均包括在本发明的范围内。 [修改例]
虽然在以上示例中,操作码被布置在各个指令的位模式的MSB侧, 但是操作码可以被布置在各个指令的位模式的MSB侧、LSB侧或者中间 位置。此外,操作码可以以分开的方式被布置在各个指令的位模式中。
本发明的示例可被应用于处理器硬件配置生成工具或者处理器软件开 发工具,如在专利参考文件3中所公开的。这样的工具基于处理器的技术 规范来生成硬件配置或软件开发工具。处理器技术规范包括指令集的技术 规范。虽然在专利参考文件3中指令集的技术规范包括操作码的位宽或 值,但是使用本发明的示例允许自动决定位宽和值。这使得得到以下应 用生成用于正确地对所决定的操作码进行解码或编码的硬件配置或软件 开发工具。
当构成根据本发明的示例的指令操作码生成系统的以上装置的至少一部分功能是使用计算机程序代码来实现的时,该程序代码和用于记录程序 的计算机可读记录介质被包括在本发明的范畴内。程序代码可以具有任何 类型,只要其可以允许计算机实现以上装置的功能即可。例如,程序代码 可以与诸如OS (操作系统)之类的另一程序代码协同来实现这些功能。 用于记录程序代码的记录介质的示例包括任何类型的记录介质,例如,诸
如ROM (只读存储器)之类的半导体存储器以及盘状记录介质(磁盘、
光盘、磁光盘等,例如硬盘驱动器)和带状记录介质。
此外,执行构成根据本发明示例的指令操作码生成系统的程序代码的 指令的计算机被包括在本发明的范畴内。计算机可以通过使用以下各项的
至少一部分来构成根据控制程序操作的处理器(CPU)、具有用于存储 控制程序或控制数据的存储区域的存储器、以及各种外围设备,外围设备 包括各种I/O设备(例如,诸如硬盘之类的外部记录设备)、诸如通信调
制解调器或LAN (局域网)接口之类的通信设备、诸如CRT (阴极射线 管)和液晶显示设备之类的显示设备、以及诸如键盘和鼠标之类的输入设 备。在这种情况下,用于实现以上装置的功能的处理器、存储器和各种 I/O设备包括在本发明的范畴内。计算机可以具有任何类型,例如,独立 式计算机、或者由可通信地连接到网络的多个计算机构成的计算机系统。
本申请基于并要求(2006年11月21日提交的)在先日本专利申请 No. 2006-314260的优先权,该申请的全部内容通过引用而全部结合于此。
通过使用本发明,可以从指令集的技术规范描述中自动生成各个指令 的操作码。本发明可被应用于从处理器的技术规范描述生成处理器硬件描 述的系统。另外,本发明可被应用于从指令集的技术规范描述生成诸如汇 编程序或编译器之类的软件开发工具的系统。
权利要求
1.一种指令操作码生成系统,包括操作码位宽决定装置,用于根据与处理器指令集相关联的技术规范数据来决定要被指派给所述指令集的每一个指令的操作码的位宽;指令分类装置,用于根据所述操作码位宽对所述指令进行分类;以及操作码值决定装置,用于根据对所述指令的分类来决定每一个指令的操作码的值。
2. 根据权利要求1所述的指令操作码生成系统,还包括 技术规范数据分析装置,用于解释所述技术规范数据;以及 中间数据存储装置,用于存储由所述技术规范数据分析装置、操作码位宽决定装置、指令分类装置和操作码值决定装置输出的数据。
3. 根据权利要求2所述的指令操作码生成系统,其中 所述操作码值决定装置包括用于将操作码划分成两个子字段的装置,并根据对所述指令的分类来决定每一个子字段的值。
4. 根据权利要求2或3所述的指令操作码生成系统,其中 与所述处理器指令集相关联的技术规范数据包括指令的字长、指令中包括的操作数的数目、以及每一个操作数的位宽,并且所述操作码值决定装置根据包括指令的字长、指令中包括的操作数的 数目和每一个操作数的位宽在内的与所述处理器指令集相关联的技术规范 数据来确定每一个指令的操作码。
5. 根据权利要求4所述的指令操作码生成系统,其中 假定各个指令的编号为k,指令总数为S,各个指令的字长为N,用于表示指令k的所有操作数的位模式的宽度为total—operands—length[k],指 令k的操作码字段的长度为opcodejength[k]位,指令k的操作码字段的值 为opcode—value[k],操作码字段的长度为x位的指令数目为num_of inst_having_opcode_length(x),并且不小于值x的2的幂的最小值为 minjower—of—2(x),则操作码位宽决定装置根据以下计算公式计算指令k 的操作码字段的位宽"opcodejength[k] " : opcode—length[k]= N-totaloperands_length[k](k=0, 1,…,S-l),指令分类装置基于表示指令k的所有操作数的位模式的宽度 "total—operandsjength[k]"对所有指令进行排序,并且假定排序之后的指令编号为i,则对操作数使用最大位数的指令的编 号i为0,并且对操作数使用最小位数的指令的编号i为S-l ,操作码值决定装置以从第O个指令到第(S-l)个指令的顺序来决定指 令i的操作码字段的值"opcode—value[i]"。
6. 根据权利要求5所述的指令操作码生成系统,其中 用于决定指令i的操作码的值"opcode—value[i]"的装置将0赋值给opcode—value[O],随后根据以下公式在从1到S-l地改变指令编号i的同时 顺序决定值"opcode—value[i]":opcode—value[i]=((opcode—value[i-l ]+l )《(opcode一leng邮]-opcode一length[i-1 ])。
7. 根据权利要求5所述的指令操作码生成系统,其中 用于决定指令i的操作码字段的值"叩cod^value[i]"的装置将0赋值给opcode_value
,随后如下所示地在从1到S-l地改变指令编号i的同 时顺序决定值"opcode—value[i]":(1) 当opcode—length[i]等于opcode—length[i-l]时,该装置根据 opcode一value[i] = opcode一value[i-l]+l来决定值"opcode一value[i]"; 以及(2) 当opcode—length[i]不等于opcode」ength[i-l]时,该装置对值 "min_power—of—2(num—of—inst—having—opcode—length(opcode—length[i]))"与从(l《opcode—length[i]-opcode—length[i-l])获得的值进行比较,从而将较 大者设为Z,并根据 "opcode—value[i〗=((opcode—value[i-l] (opcode—length[i]-opcode—length[i-l]))+Z)&( (Z-l))"来决定值 " opcode—value[i] " , 其 中 , 值"min_power—of一2(num—of—inst_having—opcode一length(opcode—length[i]))" 是不小于与指令i具有相同操作码长度的指令的数目的、2的幂的最小 值。
8. 根据权利要求5所述的指令操作码生成系统,其中用于决定指令i的操作码字段的值"opcode一value[i]"的装置将0赋值 给opcode一value[O],随后如下所示地在从1到S-l地改变指令编号i的同 时顺序决定值"opcode—value[i]":(1) 当opcode—length[i]等于opcode—length[i-l]时,该装置根据 opcode—value[i] = opcode一value[i-l]+l来决定值"opcode—value[i]"; 以及(2) 当opcode—length[i]不等于opcode—length[i-l]时,该装置将值 " (min_power_of—2(num_of_inst_having—opcode—length(opcode一length[i-l]))" 设为 Z ,并根据 "opcode—value[i]=((opcode_value[i-l]+Z (opcode_length[i]-opcode—length[i-l])) " 来 决 定 值 " opcode—value[i〗" , 其中, 值" (min_power_of—2(num—of—inst—having—opcode—length(opcodejength[i-l]))"是不小于与指令i具有相同操作码长度的指令的数目的、2的幂的最小值。
9.根据权利要求5所述的指令操作码生成系统,其中所述操作码字段被划分成组子字段和索引子字段,用于决定指令i的的操作码字段的值"opcode—value[i]"的装置包括用 于决定所述索引子字段的值的装置和用于决定所述组子字段的值的装置,假定指令i的索引子字段的长度为0pCode_SUb_idX—length[i],指令i的 索弓l子字段的值为 opcode—sub—idx—value[i], 通过 opcode—sub—idx—length[i]=min_power—of_2(num—of—inst—having—opcode—leng th(叩codeJength[i]))为所有指令定义所述索引子字段的长度,指令i的组子 字段的长度为opcode—sub—grp—length[i],指令i的组子字段的值为 opcode—sub一grp一value[i], 通过opcode—sub—grp—length[i]=opcode—lengths-opcode—sub—idx—length[i]为所有指令定义所述组子字段的长度 , 则用于决 定索引子字段的值的装置将0赋值给opcode—sub—idx—value[O],随后如下 所示地在从1到S-l地改变指令编号i的同时顺序决定值 "opcode—sub—idx一value[i]":(1)当opcode—length[i]等于opcode—length[i-l]时,该装置根据 opcode—sub—idx_value[i] = opcode—sub一idx—value[i-l]+l 来决定值"opcode_sub—idx—value[i]"; 以及(2)当opcode—length[i]不等于opcode—length[i-l]时,该装置根据 opcode—sub—idx_value[i]=0来决定值"opcode—sub—idx—value[i]",基于指令i的组子字段的长度"opcodejub—grp一length[i]"对所有指令 进行排序,并且假定排序之后的指令编号为n,对操作数使用最大位数的指令的编号 n为0,并且对操作数使用最小位数的指令的编号n为S-l,则用于决定组子字段的值的装置将0赋值给opcode—sub—grp—value[O], 随后如下所示地在从1到S-l地改变指令编号n的同时顺序决定值 "opcode_sub—grp—value[n]":(1) 当opcode—length[n]等于opcode—length[n-l]时,该装置根据 opcode—sub—grp—value[n]= opcode—sub_grp—value[n-l] 来 决 定 值"opcode_sub—grp—value[n]"; 以及(2) 当opcodejength[n]不等于opcode—length[n-l]时,该装置根据 opcode—sub—grp—value[n〗=((opcode—sub一grp—value[n-1 ]+1 )《(opcode一sub一grp—lengths-opcode—sub—grp—length[n-l]))来决定值 "opcode—sub—grp—value[n]"。
10. —种用于基于与处理器的指令相关联的技术规范数据生成处理器 的硬件配置定义或者处理器的软件开发工具的系统,其中所述系统使用如权利要求1到9的任意一项所述的指令操作码生成系 统,基于所述处理器的指令集的技术规范数据来决定构成所述指令集的每 一个指令的操作码的值。
11. 一种指令操作码生成方法,包括对与处理器的指令集相关联的技术规范数据进行解释的技术规范数据分析步骤;决定要向所述指令集的每一个指令的操作码指派的位宽的步骤; 根据操作码位宽对所述指令进行分类的步骤;以及 根据对所述指令的分类来决定每一个指令的操作码的值的步骤,以上 各个步骤根据与所述处理器指令集相关联的技术规范数据来操作。
12. 根据权利要求ll所述的指令操作码生成方法,其中 所述操作码值决定步骤包括将操作码划分成两个子字段并根据对所述指令的分类来决定每一个子字段的值的步骤。
13. 根据权利要求11或12所述的指令操作码生成系统,其中 与所述处理器指令集相关联的技术规范数据包括指令的字长、指令中包括的操作数的数目、以及每一个操作数的位宽,并且所述操作码值决定步骤根据包括指令的字长、指令中包括的操作数的 数目和每一个操作数的位宽在内的与处理器指令集相关联的所述技术规范 数据来确定每一个指令的操作码。
14. 一种指令操作码生成程序,其允许计算机执行根据权利要求11 到13中的任意一项所述的指令操作码生成方法。
15. —种用于允许计算机基于与处理器的指令集相关联的技术规范数 据来生成处理器的硬件配置定义或处理器的软件开发工具的程序,其中所述程序使用根据权利要求14所述的指令操作码生成程序,基于所 述处理器的指令集的技术规范数据来决定构成所述指令集的每一个指令的 操作码的值。
全文摘要
可以增大处理器指令集设计工作效率并减少设计者在调查指令集时的工作量。一种指令操作码生成系统包括操作码位宽决定装置、指令排序装置和操作码值决定装置。操作码位宽决定装置根据与处理器指令集相关联的技术规范数据来决定要被指派给每一个指令的操作码位宽。指令排序装置根据操作码位宽对指令进行排序。操作码值决定装置决定每一个指令的操作码的值。
文档编号G06F9/30GK101542434SQ20078004324
公开日2009年9月23日 申请日期2007年11月19日 优先权日2006年11月21日
发明者久村孝宽 申请人:日本电气株式会社
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1