明 細 書
命令オペコード生成システム 技術分野
[0001] 本発明は、プロセッサを設計するツールで用いられる命令オペコード生成システム に関し、特にプロセッサの命令セットの設計において命令オペコードを自動的に決定 する技術に関する。
背景技術
[0002] 従来、プロセッサの設計を効率良く行なうためにさまざまなツールが開発されている
。そのようなツールの一つにプロセッサの設計仕様からプロセッサのハードウェア構 成やソフトウェア開発ツールを生成するツールがある。そうしたツールをここでは「プロ セッサ設計ツール」と呼ぶことにする。従来のプロセッサ設計ツールでは、命令語長 やオペコードやオペランドなどの情報を全て設計者が定義する。一つの命令を定義 する際に、その命令の語長を定義したり、その命令がもつオペランドの種類や数を定 義したりする。
[0003] 従来のプロセッサ設計ツールが非特許文献 1、 2、特許文献 1〜3で紹介されている 。例えば、非特許文献 1のツールは、プロセッサの命令セットを定義し、そのプロセッ サのシミュレータを生成することができる。非特許文献 1のツールでは、以下のように 命令のビットパターンを定義する。
[0004] CODING {Dest Srcl Src2 ObOlOOOO OblOOOO}
ここでは、 '{'と '} 'で囲まれた部分がビットパターンを表す。 Destと Srclと Src2は、それ ぞれレジスタの番号を表す。その後の ObOlOOOOと OblOOOOは、命令のオペコードを表 す 2進数である。このように命令のビットパターンを構成する情報を全て設計者が定 義する必要がある。他の文献で紹介されているツールでも同様である。
[0005] 命令のオペコードは、その命令を他の命令と区別するための命令フィールドである 。命令セットがあらかじめ決まっている場合、命令のオペコードを初めに一度だけ定 義すればよい。しかし、どんな命令を命令セットへ追加するべきかを検討する場合に は、命令のオペコードを何度力、修正する必要がある。
[0006] もし命令のオペコードを定義したり修正したりする必要がなければ、設計者が定義 する項目が減る。オペコードがどんな値をもっかは重要ではなぐ各命令を識別可能 なようにオペコードが定義されればよい。命令のオペコードを自動的に定義できるよう にすれば、設計者が定義する項目が減り、設計効率の向上につながる。
非特許文 1: Pees, et al., "LI¾A - Machine Description Language for Cycle- Acc urate Models of Programmable DSP Architectures, 06th Design Automationし onfer ence (DAC 99), June 1999, pp. 933-938.
非特許文献 2 : Andreas Hoffmann, et al., t Survey on Modeling Issues Using the M acnine Description Language Lisa," Proceedings of ICASSP 2001, Vol. 2, pp. 1137- 1140, May 7-11 2001.
特許文献 1:米国特許第 6477683号明細書
特許文献 2 :米国特許第 6862563号明細書
特許文献 3:特表 2003— 518280号公報
特許文献 4:特開 2003— 323463号公報
発明の開示
発明が解決しょうとする課題
[0007] 従来の命令セット生成ツールでは、命令のオペコードを定義するという作業が必要 で効率が悪レ、と!/、う問題があった。命令セットの内容を検討して何度も試行錯誤を繰 り返す際には、設計者が入力しなければならない項目が少ない方が効率的である。
[0008] 本発明は、オペコードを自動的に生成できるような命令オペコード自動生成方式を 提供することによって、プロセッサの命令セット設計の作業効率を向上させ、命令セッ トの検討における設計者の負担を軽減することを目的とする。
課題を解決するための手段
[0009] 上記目的を達成するため、本発明に係る命令オペコード生成システムは、プロセッ サの命令セットに関する仕様データにもとづいて、前記命令セットの各命令のォペコ 一ドに割り当てるビット幅を決めるォペコードビット幅決定手段と、前記オペコードの ビット幅にしたがって前記各命令を分類する命令分類手段と、前記各命令の分類に もとづいて、その各命令のオペコードの値を決定するオペコード値決定手段と、を備
える。
[0010] また、本発明に係るシステムは、プロセッサの命令に関する仕様データにもとづい て、そのプロセッサのハードウェア構成定義又はソフトウェア開発ツールを生成するシ ステムであって、上記に記載の命令オペコード生成システムを用いて、前記命令セッ トを構成する各命令のオペコードの値を決定することを特徴とする。
[0011] 本発明に係る命令オペコード生成方法は、プロセッサの命令セットに関する仕様デ ータにもとづいて、前記仕様データを解釈するための仕様データ解析ステップと、前 記命令セットの各命令のオペコードに割り当てるビット幅を決めるステップと、前記ォ ぺコードのビット幅にしたがって前記各命令を分類するステップと、前記各命令の分 類にもとづいて、その各命令のオペコードの値を決定するステップと、を備えることを 特徴とする。
発明の効果
[0012] 本発明によれば、プロセッサの命令セットに関する仕様データにもとづいてォペコ ードの値が自動的に生成されるため、設計者がオペコードを定義する必要が無くなり 、その分、命令セット設計の作業効率を向上させ、命令セットの検討における設計者 の負担を軽減することができる。
図面の簡単な説明
[0013] [図 1]本発明の第一の実施の形態に係る命令オペコード生成システムを表す図であ
[図 2]本発明の第二の実施の形態に係る命令オペコード生成システムを表す図であ
[図 3]本発明の実施例におけるオペコード割り当て方法のフローチャートである。
[図 4] (a)はオペコードを命令のビットパターンの MSB側に配置する方法を示す図で、 (b)はオペコードを命令のビットパターンの LSB側に配置する方法を示す図である。
[図 5]第一のオペコード決定方法のフローチャートである。
[図 6]仕様データとなる命令の例である。
[図 7]第一のオペコード決定方法によるオペコード割り当ての例である。
[図 8]第二のオペコード決定方法のフローチャートである。
[図 9]第二のオペコード決定方法によるオペコード割り当ての例である。
[図 10]第三のオペコード決定方法のフローチャートである。
[図 11]第三のオペコード決定方法によるオペコード割り当ての例である。
[図 12]第四のオペコード決定方法のフローチャートである。
[図 13]第四のオペコード決定方法のインデックス.サブフィールド決定方法のフロー チャートである。
[図 14]第四のオペコード決定方法のグループ 'サブフィールド決定方法のフローチヤ ートである。
[図 15]仕様データとなる命令の例である。
[図 16]第四のオペコード決定方法によるインデックス ·サブフィールドの割り当ての例 でめる。
[図 17]第四のオペコード決定方法におけるグループ.サブフィールドのビット幅にもと づく命令並び替え実施後の命令の例である。
[図 18]第四のオペコード決定方法によるグループ ·サブフィールドの割り当ての例で ある。
符号の説明
[0014] 100 オペコードビット幅決定手段
200 命令並べ替え手段
300 オペコード値決定手段
400 第 1のオペコードサブフィールド値決定手段
500 第 2のオペコードサブフィールド値決定手段
600 仕様データ解析手段
700 オペコード出力手段
800 中間データ記憶手段
発明を実施するための最良の形態
[0015] 次に、本発明に係る命令オペコード生成システムを実施するための最良の形態に ついて、図面を参照して詳細に説明する。
[0016] (第一の実施の形態)
図 1は、本発明の第一の実施の形態に係る命令オペコード生成システムの構成を 示す。図 1に示す命令オペコード生成システムは、プロセッサの命令セットに関する 仕様データにもとづいて、仕様データを解釈する仕様データ解析手段 600と、各命 令のオペコードに割り当て可能なビット幅を決めるオペコードビット幅決定手段 100と 、オペコードのビット幅にしたがって命令を並び替える命令並び替え手段 200と、各 命令のオペコードの値を決定するオペコード値決定手段 300と、命令オペコードを出 力するオペコード出力手段 700と、仕様データ解析手段 600とオペコードビット幅決 定手段 100と命令並び替え手段 200とオペコード値決定手段 300とオペコード出力 手段 700が使用するデータを記憶するための中間データ記憶手段 800と、を備える
[0017] この構成により、プロセッサの命令セットに関する仕様データにもとづいて各命令の オペコードの値が自動的に生成されるため、設計者がオペコードを定義する必要が 無くなり、その分、プロセッサの命令セット設計の作業効率を向上させ、命令セットの 検討における設計者の負担を軽減することができる。
[0018] (第二の実施の形態)
図 2は、本発明の第二の実施の形態に係る命令オペコード生成システムの構成を 示す。図 2に示す命令オペコード生成システムは、プロセッサの命令セットに関する 仕様データにもとづいて、仕様データを解釈する仕様データ解析手段 600と、各命 令のオペコードに割り当て可能なビット幅を決めるオペコードビット幅決定手段 100と 、オペコードのビット幅にしたがって命令を並び替える命令並び替え手段 200と、ォ ぺコードを二つのサブフィールドで構成してそれぞれのサブフィールドの値をォペコ ードのビット幅にもとづ!/、て決定する二つの手段、すなわち第一のオペコードサブフ ィールド値決定手段 400と、第二のオペコードサブフィールド値決定手段 500と、命 令オペコードを出力するオペコード出力手段 700と、仕様データ解析手段 600とォ ぺコードビット幅決定手段 100と命令並び替え手段 200とオペコード値決定手段 30 0と第一のオペコードサブフィールド値決定手段 400と第二のオペコードサブフィー ルド値決定手段 500とオペコード出力手段 700が使用するデータを記憶するための 中間データ記憶手段 800と、を備える。
[0019] この構成により、第一の実施の形態と同様に、プロセッサの命令セットに関する仕様 データにもとづいて各命令のオペコードの値が自動的に生成されるため、設計者が オペコードを定義する必要が無くなり、その分、プロセッサの命令セット設計の作業効 率を向上させ、命令セットの検討における設計者の負担を軽減することができる。さら に、第一の実施の形態の命令オペコード生成システムと比較して、第二の実施の形 態の命令オペコード生成システムには生成されたオペコードがデコードし易いという 特徴がある。
[0020] なお、第一および第二の実施の形態に係る命令オペコード生成システムは、いず れもコンピュータ上で動作するプログラムで実現してもよい。この場合、命令ォペコー ド生成システムを構成するプログラムは、コンピュータを上記の各手段 100〜800とし て機能させるものである。これにより、命令オペコード生成システムは、コンピュータを 制御して、コンピュータの記憶装置からプロセッサの命令セットに関する仕様データ を読みだし、その仕様データにもとづいて各命令のオペコードを決定する。
[0021] 以下、図 3〜図 18を参照して、第一および第二の実施の形態に係る命令ォペコー ド生成システムの実施例について、具体的に説明する。なお、以下の実施例では、 前述の図 1及び図 2に示す各手段 100〜800は、コンピュータ機のプロセッサ(CPU : central processing unit)がその記録媒体に配置された命令オペコード生成システム 用のプログラムコードを実行することにより実現される。 実施例
[0022] 最初に、プロセッサの命令はどのように定義されるかについて説明する。
[0023] プロセッサの命令は、 0と 1のビットパターンとして表される。命令のビットパターンの どのビットがどのような意味をもっかを予め定義してお!/、て、プロセッサが命令のビッ トパターンを読み込んでその命令を解釈する。
[0024] 命令のビットパターンには、オペコードとオペランドの二種類のフィールドがある。ォ ぺコードは、命令の名前や種類を表すフィールドである。命令の名前や種類を表す ために、命令には、必ずオペコードがーつ必要である。オペコードは命令の名前や 種類を表すので、異なる名前や種類の命令は異なるオペコードをもつ。オペランドは 、命令へ与えられるパラメータを表すフィールドである。命令が複数のオペランドをも
つこともあるし、一つもオペランドをもたない命令もある。
[0025] プロセッサが命令を解釈するには、まず命令のオペコードからその命令の名前や種 類を知る。次に命令の名前や種類からオペランドの数や意味を知る。命令の名前や 種類とオペランドの数や意味とは一対一の関係にあるので、オペコードを解釈し易い か否かが命令の解釈し易さに直接関係する。
[0026] 例えば、命令語長が一定で、オペコードの開始ビット位置が一定で、オペコードの ビット幅が一定であるなら、非常に簡単にオペコードを解釈できる。しかし、一般的に はオペコードのビット幅は一定ではなレ、し、命令語長やオペコードの開始ビット位置 が一定ではないかも知れない。オペコードの解釈を容易にするには、オペコードの開 始ビット位置を一定にして、オペコードのビット幅の種類をできるだけ少なくすればよ い。
[0027] [オペコード生成方法]
次に、命令のオペコードをどのように決定するかについて説明する。なお、本明細 書で用いる各種の演算子(=、 +=、 ==、くく、 &、〜、 +、 -、等)の意味は、 C言語で一般に 使用されている意味と同じとする。例えば、「x=y」は、χに yを代入する代入演算を意 味する。また「x+=y」は、 Xに x+yを代入する代入演算を意味する (x=x+yと同じ意味で ある)。「x==y」は、 Xと yとの等値性を判断する関係演算を意味し、等しければ真、等し くなければ偽を返す。 「χくく y」は、 Xを y分だけ左にシフトさせるシフト演算を意味する。 「x&y」は、 Xと yとの論理積を計算する論理演算を意味する。「x」は Xの全てのビットを 反転する演算を意味する。
[0028] まず、以降の説明で使用する言葉について定義しておく。以下のうち、(仕様)と書 かれているものは、オペコードを生成するために設計者が定義するべき情報 (仕様デ ータ)を意味する。
[0029] [定義 1]命令の番号を kあるいは iで表す。
[0030] [定義 2]命令の総数を Sとする (仕様)。
[0031] [定義 3]命令の語長を Nとする (仕様)。
[0032] [定義 4]命令 kの全てのオペランドを表すために使用するビットパターンの幅を、 tot al— operands— iength[k]とする (仕様)。
[0033] [定義 5]命令 kのオペコードフィールドの長さを、 0pcode_length[k]ビットとする。
[0034] [定義 6]命令 kのオペコードフィールドの値を、 opcode_value[k]とする。 opcode_value
[k]は、符号無し整数とする。
[0035] [定義 7]オペコードフィールドの長さ力 ビットである命令の数を、 num_of_inst_having
—opcode— length(xノとする。
[0036] [定義 8]値 X以上の 2のべき乗の最小値を、 min_power_of_2(x)とする。
[0037] [定義 9]ビット幅が lengthである値 Xのビットリバースした値を、 bitrev(x length)とする
[0038] 次に、上記の定義 1 9を前提にして命令のオペコードを割り当てる方法を以下に 示す。以下の方法に対応するフローチャートを図 3に示す。
[0039] (0)まず、仕様データを読込む(ステップ StO)
[0040] ここでは、仕様データから命令 kの全てのオペランドを表すために使用するビットパ ターンの幅 total_operands_length[k]を読み取る。この処理は図 1及び図 2に示す仕様 データ解析手段 600により実行される。
[0041] (1)次に、命令のオペコードフィールドのビット幅を決定する(ステップ Stl)。
[0042] ここでは、命令 kのオペコードフィールドのビット幅 opcode_length[k]を以下のように 疋義する。
[0043] opcode_length[k]=N-total_operands_length[k] (k=0 1 · · · S_ 1 )
この処理は、図 1及び図 2に示すオペコードビット幅決定手段 100により実行される
[0044] (2)次に、命令をソートする(ステップ St2)
[0045] ここでは、 total_operands_length[k]にもとづいて、全ての命令をソートする。ソート後 の命令の番号を iで表す。最も多くのビットをオペランドに使用する命令の番号 iを 0と する。最も少ないビットをオペランドに使用する命令の番号 iを S-1とする。
[0046] この処理は、図 1及び図 2に示す命令並び替え手段 200により実行される。
[0047] (3)次に、命令のオペコードフィールドの値を決定する(ステップ St3)
[0048] ここでは、 0番目の命令から順番にオペコードフィールドの値 opcode_value[i]を決定 する。この処理は、図 1に示すオペコード値決定手段 300、又は図 2に示す第 1のォ
ぺコードサブフィールド値決定手段 400と第 2のオペコードサブフィールド値決定手 段 500によりそれぞれ実行される。
[0049] 上記の手順において、オペコードフィールドを命令のビットパターンの Most Signific ant Bit(MSB)側に配置する場合、図 4 (a)のようにオペコードフィールドを配置する。 一方、オペコードフィールドを命令のビットパターンの Least Significant Bit(LSB)側に 配置する場合、図 4 (b)のようにオペコードフィールドの値をビットリバースした値を配 。
[0050] 図 4 (a)及び(b)において、 opcode_length[i]は命令 iのオペコードのビット幅を、 opco de_value[i]は命令 iのオペコードの値を、 operand_0[i]は命令 iの 0番目のオペランドの 内容を、 operand_l[i]は命令 iの 1番目のオペランドの内容を、 operand_q[i]は命令 iの q 番目のオペランドの内容を、 bitrev(X,Y)は Xの下位 Yビットをビットリバースした値を、 それぞれ表す。
[0051] 上記の手順のうち、(3)オペコードフィールドの値を決定する方法(ステップ St3)は いくつかある。以降でその方法について説明する。
[0052] [第一のオペコード決定方法]
最初に、第一のオペコード決定方法について説明する。
[0053] このオペコード決定方法では、まず、前述の方法にしたがって、(1)オペコードフィ 一ルドのビット幅の決定、(2)命令のソート、を行なう。その後で、以下のようにして、(
3)各命令のオペコードのィ直 opcode_value[i]を決定する。
[0054] このオペコード決定方法のフローチャートを図 5に示す。図 5において、 iは命令の 番号を、 Sは命令の総数を、 opcode_value[i]は命令 iのオペコードの値を、 opcode_leng th[i]は命令 iのオペコードのビット幅を、それぞれ表す。
[005¾」 まず、 opcode— value[0]へ 0を代入する (スアップ Stl 1)。
[0056] 続いて、命令の番号 iを 1から S-1まで順番に変えながら、 opcode_value[i]を以下のよ うに決定する(ステップ Stl 2〜Stl 5)。
[0057] opcode— value[i]=(、opcode— value[i_l]+l)くく (opcode— length|_i」_opcode—length[i_l]))
すなわち、 opcode_value[i_l]に 1を加算する演算を行う一方、 opcode_length[i]から o pCOde_length[i-l]を減算する演算を行う。そして、前者の演算値を後者の演算値分だ
け左にシフトさせる演算を行い、その演算値を opcode_value[i]に代入する。このように して、各命令のオペコードの値を決定する。
[0058] 上記の第一のオペコード決定方法によるオペコード割り当ての例を図 6と図 7に示 す。図 6は 14個の命令のビットパターンを表す(S=14)。図 6において、 Ra、 Rb、 Rcはレ ジスタの番号を表すオペランド 'フィールドである。 IMM6, IMM4, IMM2は数値を表す オペランド.フィールドである。図 6において、各命令の語長は 16ビットである(N=16)。 図 6において、ビットパターンの MSB側に書かれた 0や 1のビットパターンがオペコード を表す。
[0059] 図 6のような命令の語長とオペランド 'フィールドのビット幅をもつ命令セットの仕様 データが与えられたとして、第一のオペコード決定方法により命令 U、 V、 W、 A、 B、 C、 D、 E、 F、 G、 H、 P、 Q、 Tのオペコードのィ直を決定する。
[0060] 図 6の命令を opcode_length[i]にもとづいて並び替え、図 5のステップ Stl 1から Stl 5までの処理を実行すると図 7が得られる。図 7に示すように、各命令のオペコードの 値 opcode_value[i] (i=0、 · · ·、 13)は、他のどの命令のオペコードの値とも重複していな い。したがって、第一のオペコード決定方法で生成されたオペコードによって、各命 令を正しく識另リすること力 Sできる。
[0061] 図 6は命令の仕様データの一つの表現形態である。必ずしも仕様データを図 6のよ うに記述する必要はない。テキストファイルとして仕様データを記述してもよい。
[0062] 上記のように第一のオペコード決定方法は、非常に単純であることが特徴である。
さらに、このオペコード決定方法には、下記の他のオペコード決定方法よりも多くの 種類のオペコードを表現できるという利点がある。
[0063] なお、第一のオペコード決定方法で生成されたオペコードは、そのデコードが多少 複雑になる。すなわち、上記のオペコードをデコードするには引き算と比較演算が必 要になる。命令を 1サイクルでデコードするには、複数の引き算と比較演算を同時に 実行する必要があるので、下記の他のオペコード決定方法に比べてオペコードのデ コード回路の規模が大きくなる。
[0064] [第二のオペコード決定方法]
次に、第二のオペコード決定方法につ!/、て説明する。
[0065] このオペコード決定方法では、まず、前述の方法にしたがって、(1)オペコードフィ 一ルドのビット幅の決定 (ステップ Stl)、 (2)命令のソート(ステップ St2)、を行なう。 その後で、以下のようにして、(3)各命令のオペコードの値 opcode_value[i]を決定す
[0066] このオペコード決定方法のフローチャートを図 8に示す。図 8において、 iは命令の 番号を、 Sは命令の総数を、 opcode_value[i]は命令 iのオペコードの値を、 opcode_leng th[i]は命令 iのオペコードのビット幅を、それぞれ表す。
[0067] まず、 opcode_value[0]へ 0を代入する(ステップ St21)。
[0068] 続いて、命令の番号 iを 1から S-1まで順番に変えながら、命令 iのオペコードの値 opc ode_value[i]を以下のように決定する(ステップ St22〜St30)。
[0069] ステップ St23において、 opcode_length[i]が opcode_length[ l]と同じかどうかを
判断する。
[0070] opcode_length[i]が opcode_length [ト 1]と同じなら(ステップ St23: YES)、 opcode.val ue[i_ l]に 1を加算する演算を行い、その演算値を opcode_value[i]へ代入する(ステツ プ St24)。すなわち、 opcode_value[i_ l]に 1を加算した値を opcode_length[i]とする。
[0071] 一方、 opcode_length[i]が opcode_length[i- l]と異なるなら(ステップ St23 : NO)、 opc ode— vaiue[i」=(opcode— value|_i_ l]くく (opcode— iength[i」_opcode— lengtn[i_ l]))と Tる (ス ~ ップ St25)。すなわち、 opcode_length[i]から opcode_length[i- l]を減算する演算を行う 。そして、その演算値分だけ、 opcode_value[i_ l]を左にシフトさせる演算を行い、その 演算値を opcode_value[i]へ代入する。つづいて、ステップ St26を実行する。
[0072] ステップ St26において、(1くく (opcode_length[i]_ opcode_length[i- 1]》という値よりも、 命令 iと同じオペコード長をもつ命令の数以上の最小の 2のべき乗の値(min— power— of —2(num— of— inst— having— opcode— length(opcode—length[i]》)力、大き!/、力、どつ力、半 IJ断し、大 きい方の値を Zとする。
[0073] ステップ St26の判定が YESの場合、 Z=min_power_of_2(num_of_inst_having_opcode_l ength(opcode— length[i]))として、 opcode— value[i]=、opcode—valueLi」+Z)&( (Z_ l))といつ計 算式によって opcode— value[i]を求める。
[0074] 一方、ステップ St26の判定が NOの場合、 Z=( lくく (opvode_length[i]-opcode_length[
i-l]》として、 opcode_value[i]=(opcode_value[i]+Z)&(〜(Z-l))という計算式によって opco de_value[i]を求める(ステップ St28)。
[0075] 以上のようにして、各命令のオペコードの値を決定する。
[0076] 上記の第二のオペコード決定方法によるオペコード割り当ての例を図 6と図 9に示 す。図 6の命令を仕様データとして、それらの命令を opcode_length[i]にもとづいて並 び替え、図 8のステップ St21から St30までの処理を実行すると図 9が得られる。
[0077] 図 9に示すように、各命令のオペコードの値 opcode_value[i] (i=0、 · · ·、 13)は、他のど の命令のオペコードの値とも重複していない。したがって、このオペコード決定方法 で生成されたオペコードを使って、各命令を正しく識別することができる。
[0078] 上記のように第二のオペコード決定方法は、第一のオペコード決定方法よりも多少 複雑である。しかし、第二のオペコード決定方法は第一のオペコード決定方法よりも 、生成されたオペコードをデコードするのが簡単である。なぜなら、第二のオペコード 決定方法によって生成されたオペコードは、同じオペコードのビット幅をもつォペコー ドのグループを表すビット列と、そのグループの中における命令のインデックスを表す ビット列とから構成されているためである。これにより、オペコードを二つのビット列に 分けて考えることができるため、オペコードを階層的にデコードできる。
[0079] すなわち、第二のオペコード決定方法で生成されたオペコードをデコードする際に は、まず同じオペコードのビット幅をもつオペコードのグループを表すビット列をデコ ードする。そして、最も長いビット列をもつグループを選択し、次にそのグループの中 における命令のインデックスを表すビット列をデコードする。第二のオペコード決定方 法で生成されたオペコードをデコードする際には、引き算が必要ない。よって、論理 演算とシフト演算だけでデコード回路を作ることができるので、第一のオペコード決定 方法に比べて第二のオペコード決定方法のデコード回路は簡単になる。
[0080] [第三のオペコード決定方法]
次に、第三のオペコード決定方法につ!/、て説明する。
[0081] このオペコード決定方法では、まず、前述の方法にしたがって、(1)オペコードフィ 一ルドのビット幅の決定 (ステップ Stl)、(2)命令のソート(ステップ St2)、を行なう。 その後で、以下のようにして、(3)各命令のオペコードの値 opcode_value[i]を決定す
[0082] このオペコード決定方法のフローチャートを図 10に示す。図 10において、 iは命令 の番号を、 Sは命令の総数を、 opcode_value[i]は命令 iのオペコードの値を、 opcode_le ngth[i]は命令 iのオペコードのビット幅を、それぞれ表す。
[0083] まず、 opcode_value[0]へ 0を代入する(ステップ St31)。
[0084] 続いて、命令の番号 iを 1から S-1まで順番に変えながら、 opcode_value[i]を以下のよ うにして決定する(ステップ St32〜St38)。
[0085] ステップ St23において、 opcode_length[i]が opcode_length[i-l]と同じかどうか判断 する。
[0086] opcode_length[i]が opcode_length [ト 1]と同じなら(ステップ St23: YES)、 opcode.val ue[i_l]に 1を加算する演算を行い、その演算値を opcode_value[i]へ代入する(ステツ プ St24)。
[0087] 一方、 opcode_length[i]が opcode_length[i-l]と異なるなら(ステップ St23: NO)、命 令 iと同じオペコード長をもつ命令の数以上の最小の 2のべき乗の値(min_power_of_2( num— of— inst— having— opcode— length(opcode—length|_i—l]))を Zとする (スアップ Std5)。つ づレ、てステップ 36を実行する。
[0088] スァップ 36にね .レヽて、 opcode— value[i]=(、opcode—value[i_l」+Z)くく (opcode— iength[i]_o pcode_length[i-l]》と!/、う計算式にもとづ!/、て opcode_value[i]を求める。
[0089] 以上のようにして、各命令のオペコードの値を決定する。
[0090] 上記の第三のオペコード決定方法によるオペコード割り当ての例を図 6と図 11に示 す。図 6の命令を仕様データとして、それらの命令を opcode_length[i]にもとづいて並 び替え、図 8のステップ St31から St38までの処理を実行すると図 11が得られる。
[0091] 図 11に示すように、各命令のオペコードの値 opcode_value[i] (i=0、 · · ·、 13)は、他の どの命令のオペコードの値とも重複していない。したがって、このオペコード決定方法 で生成されたオペコードを使って、各命令を正しく識別することができる。
[0092] 第三のオペコード決定方法によって生成されたオペコードをデコードするには、引 き算と比較演算が必要になる。この点は第一のオペコード決定方法と同様である。
[0093] なお、第三のオペコード決定方法は、第一や第二のオペコード決定方法に比べる
と、第一のオペコード決定方法よりもオペコード決定方法が単純でなぐ第二のオペ コード決定方法よりもオペコードのデコードが簡単ではない。
[0094] [第四のオペコード決定方法]
次に、第四のオペコード決定方法について説明する。
[0095] このオペコード決定方法では、オペコードフィールドを二つのサブフィールドに分け る。一つはグループ.サブフィールドで、もう一つはインデックス.サブフィールドとする 。グループ.サブフィールドを MSB側に配置し、インデックス .サブフィールドを LSB側 に配置する。この方法では、インデックス 'サブフィールドとグループ 'サブフィールド を別々に決定する。
[0096] このオペコード決定方法のフローチャートを図 12に示す。同図に示すように、この 方法は、インデックス ·サブフィールドのビット幅を決定する手順と(ステップ St41)、ィ ンデッタス ·サブフィールドの値を決定する手順と(ステップ St42)、グループ 'サブフ ィールドのビット幅を決定する手順と(ステップ St43)、グループ.サブフィールドのビ ット幅にもとづいて命令を並び替える手順と(ステップ St44)、グループ 'サブフィール ドの値を決定する手順と (ステップ St45)、力、ら構成される。
[0097] ここで、二つのサブフィールドに関する記号を以下のように定義する。
[0098] [定義 10]命令 iのグループ.サブフィールドの長さを、 opcode_sub_grp_length[i]とす
[0099] [定義 11]命令 iのグループ.サブフィールドの値を、 opcode_sub_grp_value[i]とする。
[0100] [定義 12]命令 iのインデックス 'サブフィールドの長さを、 opcode_sub_idx_length[i]と する。
[0101] [定義 13]命令 iのインデックス 'サブフィールドの値を、 opcode_sub_idx_value[i]とす
[0102] [定義 14]全ての命令について、インデックス.サブフィールドの長さを以下のように 決める(ステップ St41)。
[0103] opcode_sub_idx_lengtnLi]=min_power_oT_2(num_of_inst_having_opcode_iength(opcoae_l ength[i]))
[定義 15]全ての命令につ!/、て、グループ 'サブフィールドの長さを以下のように決
[0104] opcode_sub_grp_length[i]=opcode_length[i]-opcode_sub_idx_length[i] 次に、インデックス ·サブフィールドの値を決定する手順を以下に示す。この手順に 対応するフローチャートを図 13に示す。図 13において、 iは命令の番号を、 Sは命令 の総数を、 opcode_value[i]は命令 iのオペコードの値を、 opcode_length[i]は命令 iのォ ぺコードのビット幅を、 opcode_sub_idx_value[i]は命令 iのインデックス ·サブフィールド の値を、それぞれ表す。
[[00110066]] 続続いいてて、、命命令令のの番番号号 iiをを 11かからら SS--11ままでで順順番番にに変変ええななががらら、、 ooppccooddee__ssuubb__iiddxx__vvaalluuee[[ii]]をを 以以下下ののよよううににししてて決決定定すするる((スステテッッププ SStt5522〜〜SStt5577))。。
[[00110077]] スステテッッププ SStt5533ににおおいいてて、、 ooppccooddee__lleennggtthh[[ii]]がが ooppccooddee__lleennggtthh[[ ll]]とと同同じじかかどどううかか判判断断 すするる。。
[[00110088]] ooppccooddee__lleennggtthh[[ii]]がが ooppccooddee__lleennggtthh [[トト 11]]とと同同じじなならら((スステテッッププ SStt5533 :: YYEESS))、、 ooppccooddee..ssuubb —— iiddxx__vvaalluuee[[ii__ll]]にに 11をを加加算算すするる演演算算をを行行いい、、そそのの演演算算値値をを ooppccooddee__ssuubb__iiddxx__vvaalluuee[[ii]]へへ代代 入入すするる((スステテッッププ SStt5544))。。
[[00110099]] 一一方方、、 ooppccooddee__lleennggtthh[[ii]]がが ooppccooddee__lleennggtthh[[ii--ll]]とと異異ななるるなならら((スステテッッププ SStt5533:: NNOO))、、 ooppcc
[0110] 次に、グループ.サブフィールドのビット幅にもとづいて命令を並び替える手順につ いて説明する。命令 iのグループ 'サブフィールドの長さ opcode_sub_grp_length[i]にも とづいて全ての命令を並び替える。並び替えられた後の命令の番号を nとする。最も 多くのビットをグループ.サブフィールドに使用する命令の番号 nを 0、最も少ないビッ トをグループ 'サブフィールドに使用する命令の番号 nを S-1とする。
[0111] 次に、グループ ·サブフィールドの値を決定する手順を以下に示す。この手順に対 応するフローチャートを図 14に示す。図 14において、 nは命令の番号を、 Sは命令の 総数を、 opcode_value[n]は命令 nのオペコードの値を、 opcode_length[n]は命令 nのォ ぺコードのビット幅を、 opcode_sub_grp_value[n]は命令 nのグループ 'サブフィールドの 値を、 opcode_sub_grp_length[n]は命令 nのグループ 'サブフィールドのビット幅を、そ れぞれ表す。
[0112] ままず" 、、 ooppccooddee—— ssuubb—— ggrrpp——vvaalluuee[[00]]へへ *
[0113] 続続いいてて、、命命令令のの番番号号 nnをを 11かからら SS--llままでで順順番番にに変変ええななががらら、、 ooppccooddee__ssuubb__ggrrpp__vvaalluuee[[nn]]をを 以以下下ののよよううににししてて決決定定すするる((スステテッッププ SStt6622〜〜SStt6666))。。
[0114] スステテッッププ SStt6633ににおおいいてて、、 ooppccooddee__lleennggtthh[[nn]]がが ooppccooddee__lleennggtthh[[nn--ll]]とと同同じじかかどどううかか判判断断 すするる。。
[0115] ooppccooddee—— lleennggtthh[[nn]]力力、、 ooppccooddee—— lleennggtthh[[nn—— 11]]とと同同ししななりり、、ススアアッッププ:: りり 33:: YYEE≥≥>>ノノ、、 ooppccooddee—— ssuu bb—— ggrrpp—— vvaalluuee[[nn-- 11」」をを ooppccooddee—— ssuubb—— ggrrpp—— vvaaiiuuee[[nn]]ヘヘイイ 入入すするる ((ススアアッッププ SStt6644))。。
[0116] 一一方方、、 ooppccooddee__lleennggtthh[[nn]]力力 ¾¾ppccooddee__lleennggtthh[[nn--ll]]とと異異ななるるなならら((スステテッッププ SStt6633:: NNOO))、、 oopp ccooddee_—ssuubb_—ggrrpp_—vvaalluuee[[nn]]==((((ooppccooddee_—ssuubb_—ggrrpp_—vvaalluuee[[nn-_ll]]++ll))\《<^、ooppccooddee_—ssuubb_—ggrrpp_—iieennggtthh[[nn]]-_oo ppccooddee—— ssuubb—— ggrrpp—— lleennggtthh[[nn—— 11]]))))とと!!//、、つつ計計算算式式ににももととつつ!!//ヽヽ飞飞 ooppccooddee—— ssuubb—— ggrrpp—— vvaalluuee[[nn]]をを求求めめ るる((スステテッッププ SStt6655))。。
[0117] 以以上上ののよよううににししてて、、各各命命令令ののオオペペココーードドのの値値をを決決定定すするる。。
[0118] 上上記記のの第第四四ののオオペペココーードド決決定定方方法法にによよるるオオペペココーードド割割りり当当ててのの例例をを図図 1155かからら図図 1188 にに示示すす。。
[0119] 図図 1155はは 1144個個のの命命令令ののビビッットトパパタターーンンをを表表すす((SS==1144))。。図図 1155ににおおいいてて、、 RRaa、、 RRbb、、 RRccはは レレジジススタタのの番番号号をを表表すすオオペペラランンドド ''フフィィーールルドドででああるる。。 IIMMMM66、、 IIMMMM44,, IIMMMM22はは数数値値をを表表 すすオオペペラランンドド ''フフィィーールルドドででああるる。。各各命命令令のの語語長長はは 1166ビビッットトででああるる((NN==1166))。。命命令令ビビッットト パパタターーンンのの LLSSBB側側ににオオペペラランンドドをを配配置置しし、、命命令令ビビッットトパパタターーンンのの MMSSBB側側ににオオペペココーードドフフ ィィーールルドドをを配配置置すするる。。
[0120] 図図 1155のの命命令令をを仕仕様様デデーータタととししてて、、そそれれららのの命命令令をを ooppccooddee__lleennggtthh[[ii]]ににももととづづいいてて並並 びび替替ええ、、図図 1133ののスステテッッププ SStt5511かからら SStt5577ままででのの処処理理をを実実行行すするるとと図図 1166がが得得らられれるる。。 図図 1166はは図図 1155のの命命令令にに対対すするるイインンデデッッククスス ..ササブブフフィィーールルドドのの値値をを表表すす。。
[0121] つつづづいいてて、、イインンデデッッククスス ··ササブブフフィィーールルドドのの値値がが求求ままっったた図図 1166のの命命令令をを使使っってて、、そそれれ ららのの命命令令ののググルルーーププ..ササブブフフィィーールルドドののビビッットト幅幅をを求求めめるる。。そそししてて、、ググルルーーププ..ササブブフフィィ 一一ルルドドののビビッットト幅幅ににももととづづいいてて命命令令をを並並びび替替ええるるとと図図 1177がが得得らられれるる。。
[0122] つつづづいいてて、、図図 1177のの命命令令にに対対ししてて図図 1144ののスステテッッププ SStt6611かかららスステテッッププ SStt6677ままででのの処処 理理をを実実行行すするるとと図図 1188がが得得らられれるる。。図図 1188はは図図 1177のの命命令令にに対対すするるググルルーーププ ··ササブブフフィィーー ルルドドのの値値をを表表すす。。以以上上のの処処理理にによよっってて、、各各命命令令ののイインンデデッッククスス ''ササブブフフィィーールルドドととダダルル
ープ.サブフィールドの値が求まる。そして、インデックス.サブフィールドとグループ. サブフィールドとを連結したビット列がオペコードの値となる。
[0123] 図 18に示すように、グループ ·サブフィールドの値 opcode_sub_grp_value[i] (i=0、 · · ·、
13)と、インデックス ·サブフィールドの値 opcode_sub_idx_value[i] (i=0、 · · ·、 13)とで構 成される各命令のオペコードの値は、他のどの命令のオペコードの値とも重複してい ない。したがって、このオペコード決定方法を使って、各命令をオペコードによって正 しく識另すること力でさる。
[0124] 第四のオペコード決定方法は、同じオペコードのビット幅をもつオペコードのグルー プを表すビット列と、そのグループの中における命令のインデックスを表すビット列と 力、ら構成される。これは、第二のオペコードと同じ特徴である。したがって、第二のォ ぺコードと同様に、オペコードをデコードするのが簡単である。オペコードのデコード 処理には引き算が必要無ぐ論理演算とシフト演算だけでオペコードをデコードでき
[0125] さらに、第四のオペコード決定方法によって生成されたオペコードには、短いオペ コードのグループ.サブフィールドが別の長いオペコードのグループ.サブフィールド に部分的に一致することがない、という特徴がある。これは第二のオペコード決定方 法にはない特徴である。この特徴によって、第二のオペコード決定方法よりもデコー ド処理が簡単になる。
[0126] すなわち、第二のオペコード決定方法で生成されたオペコードをデコードする際に は、まず同じオペコードのビット幅をもつオペコードのグループを表すビット列をデコ ードし、最も長いビット列をもつグループを選択する必要がある。なぜなら、同じオペ コードのビット幅をもつオペコードのグループを表すビット列が部分的に一致している ため、それらの中から最もふさわしいグループを選択しなければならないからである。 第二のオペコード決定方法に比べて、第四のオペコード決定方法は、表現できるォ ぺコードの種類が少ない。命令語長が 24ビットや 32ビットなどの場合には、この点は あまり問題にならないだろう。
[0127] 次に、上記第一〜第四のオペコード決定方法のうち、何れのオペコード決定方法 を選択するかにつ!/、て説明する。
[0128] 一般的には、デコード処理が簡単になるようなオペコード決定方法を選択するべき である。これまでに述べたオペコード決定方法の中では、第四のオペコード決定方 法のデコード処理が最も容易である。もし、表現可能なオペコードの数を多くしたい 場合には、第二のオペコード決定方法を選択してもよい。
[0129] 以上、本発明の実施例を詳細に説明したが、本発明は、代表的に例示した上述の 実施例に限定されるものではなぐ当業者であれば、特許請求の範囲の記載内容に 基づき、本発明の要旨を逸脱しない範囲内で種々の態様に変形、変更、応用するこ とができ、これらの変形例、変更例、応用例も本発明の権利範囲に属するものである
[0130] [変形例]
これまでに述べた実施例では、命令のビットパターンの MSB側にオペコードが配置 される。しかし、オペコードの位置は MSB側である必要はない。命令のビットパターン の LSB側にオペコードを配置してもよい。あるいは、命令のビットパターンの中間的な 位置にオペコードを配置してもよい。あるいは、オペコードをいくつかの断片に分けて 命令のビットパターンの中に配置してもよい。
[0131] [応用例]
本発明の実施例を特許文献 3にあるようなプロセッサのハードウェア構成生成ツー ルゃソフトウェア開発ツール生成ツールに応用することも可能である。こうしたツーノレ はプロセッサの仕様からハードウェア構成あるいはソフトウェア開発ツールを生成する 。プロセッサの仕様には命令セットの仕様も含まれる。特許文献 3では命令セットの仕 様にオペコードのビット幅や値が含まれていた力 本発明の実施例を使えばォペコ ードのビット幅と値を自動的に決定することができる。そして決定されたオペコードを 正しくデコードしたりエンコードしたりするためのハードウェア構成やソフトウェア開発 ツールを生成するといつた応用も可能になる。
[0132] 本発明の実施例に係る命令オペコード生成システムを構成する各手段の少なくとも 一部の機能を、コンピュータのプログラムコードを用いて実現する場合、かかるプログ ラムコード及びこれを記録するコンピュータ読み取り可能な記録媒体は、本発明の範 疇に含まれる。この場合のプログラムコードは、上記の機能をコンピュータに実現させ
るものであればよい。例えば、オペレーティングシステム(OS)等の他のプログラムコ ードと連携して上記の機能が実現されてもよい。また、このようなプログラムコードを記 録するコンピュータ読み取り可能な記録媒体としては、例えば ROM (read only memo ry)等の半導体メモリ、ディスク型の記録媒体 (ハードディスク等の磁気ディスク、光デ イスク、光磁気ディスク等)、テープ型の記録媒体等、いずれの形態の記録媒体でも 適用可能である。
[0133] また、本発明の実施例に係る命令オペコード生成システムを構成するプログラムコ ードの命令を実行するコンピュータ機についても、本発明の範疇に含まれる。このコ ンピュータ機は、プログラム制御で動作するプロセッサ(CPU)と、制御プログラムや 制御データ等を格納する記憶領域を有するメモリと、各種入出力装置 (例えば、ハー ドディスク等の外部記録装置、通信モデムや LAN (local area network)インタフエ一 ス等の通信装置、 CRT (cathode ray tube)や液晶ディスプレイ等の表示装置、キー ボードやマウス等の入力装置等の各種周辺装置の少なくとも一部とを用いて実現す ることが可能である。この場合、上記各手段の機能を実現するために用いられるプロ セッサ、メモリ、及び各種入出力装置は、本発明の範疇に含まれる。このコンピュータ 機は、スタンドアロン型のものでも、ネットワークに通信可能に接続された複数のコン ピュータ機から構成されるものでも、いずれの形態でも適用可能である。
[0134] この出願は、 2006年 11月 21日に出願された日本出願特願 2006— 314260号を 基礎とする優先権を主張し、その開示の全てをここに取り込む。
産業上の利用可能性
[0135] 本発明を使用すれば、命令セットの仕様記述から各命令のオペコードを自動的に 生成すること力 Sできる。プロセッサの仕様記述からプロセッサのハードウェア記述を生 成するようなシステムにおいて本発明を使用することが可能である。あるいは、命令セ ットの使用記述からアセンブラやコンパイラなどのソフトウェア開発ツールを生成する ようなシステムにおいても本発明を使用することが可能である。