(57)【特許請求の範囲】
【請求項１】
実行しようとする命令を格納する命令キャッシュと、
機能ユニット毎に、実行する命令を格納する複数の命令レジスタと、
上記命令キャッシュから取り出した命令を解読し、機能ユニット毎の命令を生成して上記該当する命令レジスタに順次格納すると共に、このときの命令が分岐命令である場合に、上記命令レジスタに順次格納した命令のうちのループとなる部分について全ての機能ユニットの命令レジスタから取り出した命令をそれぞれの機能ユニットの命令レジスタに格納するデコーダとを備え、
上記命令レジスタに格納するあるいは格納された命令を各機能ユニットが並列にそれぞれ実行することを特徴とする動的ハイパースカラ・プロセッサ。
【請求項２】
上記デコーダが上記命令キャッシュから取り出した命令を解読し、機能ユニット毎の命令を生成して上記該当する命令レジスタに順次格納する際に、データハーザードにならない実行順序まで詰めて格納することを特徴とする請求項１記載の動的ハイパースカラ・プロセッサ。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、命令を解読して機能ユニット毎の複数の命令レジスタに格納して高速実行する動的ハイパースカラ・プロセッサに関するものである。
【０００２】
【従来の技術】
従来のハイパースカラ・プロセッサは、次のような特徴を持つプロセッサである。
【０００３】
（１）  命令長および命令フェッチ幅はスーパースカラと同程度である。
（２）  機能ユニット毎にユーザ可視の命令レジスタを設ける。
（３）  命令レジスタにソフトウェア制御で解読済みの命令をロードすることにより、プロセッサ内部でＶＬＩＷ(VeryLong Instruction Word)命令を形成する。
【０００４】
（４）  プロセッサ内部で形成したＶＬＩＷ命令をソフトウェア制御でディスパッチし、ＶＬＩＷプロセッサのように動作させる。
（５）  自己形成したＶＬＩＷ命令のループにより、疑似ベクトル処理あるいはソフトウェアパイプライン処理を施す。
【０００５】
（６）  ベクトルレジスタを設ける。
以上のような構成を持つハイパースカラ・プロセッサは、比較的に小さいハーソウェアコストで、高性能が得られるが、特別な制御命令が必要となり、命令セットの互換性を維持することができず、また、プログラムもハイパースカラ用のものを用意して実行させていた。
【０００６】
【発明が解決しようとする課題】
上述したように従来のハイパースカラ・プロセッサは、比較的に小さいハードウェアコストで高性能が得られるが、特別な制御命令が必要なために命令セットの互換性を維持できず、また、プログラムのハイパースカラ用のものが必要となってしまう問題があった。
【０００７】
本発明は、これらの問題を解決するため、プロセッサ内部で命令を解読して各機能ユニット毎の命令を動的に生成して実行すると共に命令レジスタに保存して分岐命令のときに命令レジスタから命令を取り出して実行し、特別な制御命令およびソフト制御を不要とし、かつ分岐命令実行時の解読を不要として高速化を図ることを目的としている。
【０００８】
【課題を解決するための手段】
図１は、本発明の概念構成図を示す。
図１において、命令キャッシュ２は、実行しようとする命令を格納するものである。
【０００９】
デコーダ３は、命令を解読するものである。
命令レジスタ４は、機能ユニット５毎に設け、複数の命令を格納するレジスタである。
【００１０】
機能ユニット５は、命令を実行するユニットである。
【００１１】
【作用】
本発明は、図１に示すように、命令キャッシュ２から命令を取り出してデコーダ３が解読し動的に命令を生成して該当する命令レジスタ４に順次格納し機能ユニット５がそれぞれ並列に実行すると共に、命令が分岐命令であった場合に命令レジスタ４に順次格納した命令のうちのループとなる部分の全ての機能ユニット５の命令レジスタ４から取り出した命令をそれぞれの機能ユニット５の命令レジスタ４に格納し並列に実行するようにしている。
【００１２】
この際、デコーダ３が命令キャッシュ２から取り出した命令を解読し、機能ユニット５毎の命令を動的に生成して該当する命令レジスタ４に順次格納するときに、データハーザードにならない実行順序まで詰めて格納し、高速実行するようにしている。
【００１３】
従って、プロセッサ内部で命令を解読して各機能ユニット５毎の命令を動的に生成して実行すると共に命令レジスタ４に保存して分岐命令のときに命令レジスタ４から命令を取り出して実行することにより、従来の特別な制御命令およびソフト制御を不要とし、かつ分岐命令実行時の解読を不要として命令レジスタ４から一度にループ部分の命令を順次取り出して各機能ユニット５の命令レジスタ４に格納して並列実行し高速化を図ることが可能となる。
【００１４】
【実施例】
次に、図１から図５を用いて本発明の実施例の構成および動作を順次詳細に説明する。
【００１５】
図１は、本発明の概念説明図を示す。
図１において、メモリ１は、命令を格納するものである。
命令キャッシュ２は、メモリ１から実行しようとする命令を取り出して格納した高速アクセス可能なメモリである。
【００１６】
デコーダ３は、命令キャッシュ２から取り出した命令を解読し、機能ユニット５毎の命令を動的に生成などするものである。
命令レジスタ４は、機能ユニット５毎に設けた複数のレジスタであって、デコーダ３が動的に生成した命令を順次格納して保存するためのものである。
【００１７】
機能ユニット５は、命令レジスタ４に格納された命令を実行するユニットであって、例えばロード／ストアユニット、論理演算ユニット、浮動小数点演算ユニットなどである。ＩＲｂｔａは、分岐先アドレスを格納するレジスタである。
【００１８】
レジスタファイル６は、機能ユニット５が実行した結果などを記憶するものである。
データキャッシュ７は、データを格納するものである。
【００１９】
メモリ８は、各種データを記憶するものである。
図２は、本発明の１実施例要部構成図を示す。これは、図１の構成の命令レジスタ４の部分の構成図である。ここでは、命令レジスタ４は、各機能ユニット５毎に０、１・・・ｒ−１個設けたものである。
【００２０】
入力ＩＲＸＲは、命令レジスタ４に格納した命令の先頭のアドレスを保持するレジスタである。
出力ＩＲＸＲは、命令レジスタ４に格納した命令の最終のアドレスを保持するレジスタである。
【００２１】
ＩＲＸＲは、現在の命令レジスタ４をアクセスするアドレスを保持するものである。
右端のオブジェクトコードの分岐命令の分岐先アドレスは、入力ＩＲＸＲと出力ＩＲＸＲの間の分岐先アドレスの命令レジスタ４の内容を比較し、一致したものがあった場合には、既に命令を解読して命令レジスタ４に格納されていると判明したので、再解読することなくその一致した行の命令レジスタ４から取り出して実行する。一致したものがない場合には、命令キャッシュ２から取り出した命令をデコーダ３が解読し、入力ＩＲＸＲで示される行の命令レジスタ４から順次循環する態様で格納して実行する。これにより、いわゆるディスパッチが行われたこととなる。
【００２２】
尚、出力ＩＲＸＲを無くした場合には、命令レジスタ４の各行に当該行の命令が有効か否かを表すフラグを設けて有効／無効の区別をセットする。
次に、図３のフローチャートに示す順序に従い、図１の構成の動作について、図４の（ａ）のプログラムを例に図４の（ｂ）および図５の（ｂ）を用いて具体的に説明する。ここで、図４の（ｂ）および図５の（ｂ）中のＬＤ（ロード命令レジスタ）、ＳＴ（ストア命令レジスタ）、ＡＬＵ（論理演算命令レジスタ）、ＢＵ（分岐命令レジスタ）、ＢＴＡ（分岐先アドレス命令レジスタ）は、図２の命令レジスタ４の０、１、２、３、ｂｔａにそれぞれ対応している。
【００２３】
図３の（ａ）において、Ｓ１は、分岐命令か判別する。これは、例えば図４の（ａ）のプログラム中の（９）行目の分岐命令か判別する。ＹＥＳの場合には、Ｓ２に進む。ＮＯの場合には、Ｓ５でそれまでの通常モード動作（図３の（ｃ）のＳ５１からからＳ５４）を続け、Ｓ１に戻ることを繰り返す。
【００２４】
Ｓ５１は、通常モードとしてＳ５２からＳ５４を実行する。
Ｓ５２は、命令キャッシュから命令を取り出す。
Ｓ５３は、各ＦＵ（機能ユニット５）で命令を実行する。
【００２５】
Ｓ５４は、命令を命令レジスタ４に登録する。
Ｓ５５は、ＩＲＸＲ、入力ＩＲＸＲをインクリメントする。そして、Ｓ１に戻り繰り返す。
【００２６】
以上によって、分岐命令以外の命令について、命令キャッシュ２から取り出して各機能ユニット５毎に動的に命令を生成し、各機能ユニット５が並列に命令を実行し、命令レジスタ４に順次循環する態様で登録する。例えば後述する図４の（ｂ）の（１）、（２）・・・（８）までの行について順次実行する。
【００２７】
Ｓ２は、Ｓ１のＹＥＳで分岐命令と判明したので、ｂｔａに登録されているか判別する。これは、図１のｂｔａ命令レジスタ（分岐先アドレスレジスタ）にその分岐先アドレスが登録されているか判別する。ＹＥＳの場合には、分岐先アドレスが登録されており、命令レジスタ４にその分岐先アドレス以降の命令が格納されていると判明したので、Ｓ３でＴｕｒｂｏモード（図３の（ｂ）のＳ３１からＳ３５の命令レジスタから命令を読み出して実行するモード）を行なう。一方、ＮＯの場合には、Ｓ３５で分岐先アドレスをｂｔａ（分岐先アドレスレジスタ）に登録し、通常モード（図３の（ｃ）のＳ５１からＳ５４の通常ノード）で動作し、Ｓ１に戻り、繰り返す。
【００２８】
Ｓ３１は、ＴｕｂｏモードとしてＳ３２からＳ３５を実行する。
Ｓ３２は、ＩＲＸＲレジスタが指す命令レジスタ４から命令を取り出す。これは、図２のＩＲＸＲレジスタが指す行の全ての命令レジスタ４から命令を取り出す。
【００２９】
Ｓ３３は、各ＦＵ（機能ユニット５）で命令をそれぞれ実行する。
Ｓ３４は、ＩＲＸＲをインクリメントし、次のアドレスとする。
Ｓ３５は、分岐条件が成立か判別する。ＹＥＳの場合には、復帰してＳ１に戻る。一方、ＮＯの場合には、Ｓ３１に戻り繰り返す。
【００３０】
以上によって、分岐命令、かつ分岐先アドレスがｂｔａレジスタに登録されていた場合に、Ｔｕｒｂｏモードとし、登録されているアドレスの行の命令レジスタ４から命令を取り出して各機能ユニット５がそれぞれ実行することを分岐によるループの部分について分岐条件が成立するまで繰り返し、命令キャッシュ２から命令を取り出して解読することを不要とし、命令レジスタ４から並列に高速に命令を読み出して実行することが可能となる。分岐条件が成立した場合には、Ｔｕｒｂｏモードから通常モードに戻り、命令キャッシュ２から命令を取り出して解読して各機能ユニットで実行および命令レジスタ４に格納する通常モードで動作する。
【００３１】
以上によって、命令キャッシュ２から命令を取り出して解読し、命令レジスタ４に格納および各機能ユニットが並列に実行する際に、分岐命令が現れた場合に当該分岐命令のループ部分について命令レジスタ４に格納されている命令を取り出して各機能ユニットが実行することを分岐条件が成立するまで繰り返し、命令キャッシュ２から命令を取り出して解読する処理を不要とし、高速化を図ることが可能となる。
【００３２】
図４および図５は、本発明の動作説明図を示す。
図４の（ａ）は、プログラム例を示す。このプログラムは、右端に記載した（１）から（１２）行からなる。
【００３３】
図４の（ｂ）および図５の（ｂ）は、実行順序を表す。ここでは、左側の（１）から（９）は、図４の（ａ）のプログラムの命令の行数を示す。ここで、ＬＤ（ロード命令レジスタ）、ＳＴ（ストア命令レジスタ）、ＡＬＵ（論理演算命令レジスタ）、ＢＵ（分岐命令レジスタ）、ＢＴＡ（分岐先アドレスレジスタ）をそれぞれ表し、図１のＩＲ０、ＩＲ１、ＩＲ３、ＩＲＡｂｔａにそれぞれ対応するものである。
【００３４】
（ｂ−１）  図４の（ａ）のプログラムの（１）行目の命令を解読して命令レジスタに格納した様子を示す。（１）行目の命令
Ｌ０：０→ｓｒ１                              （１）
は、０をレジスタｓｒ１に格納する命令であるので、ＡＬＵに図示のように格納する。併せてラベルがＬ０であって、分岐先アドレスとなるので、ＢＴＡに格納する。
【００３５】
（ｂ−２）  図４の（ａ）のプログラムの（２）行目の命令を解読して命令レジスタに格納した様子を示す。（２）行目の命令
０→ｓｒ２                              （２）
は、０をレジスタｓｒ２に格納する命令であるので、ＡＬＵに図示のように格納する。
【００３６】
（ｂ−３）  図４の（ａ）のプログラムの（３）行目の命令を解読して命令レジスタに格納した様子を示す。（３）行目の命令
ｌｏａｄ  Ａ（ｓｒ１）→ｓｒ１１        （３）
は、レジスタｓｒ１の内容をアドレスとするメモリからその内容を取り出してレジスタｓｒ１１に格納する命令であるので、ＬＤに図示のように格納する。ここで、ｌｏａｄ  ａ（ｓｒ１）→ｓｒ１１という命令がデータハーザードしない限り前の実行順序に詰めるので、図示の位置（先頭から２つ目の位置）まで詰めて格納する。
【００３７】
（ｂ−４）  図４の（ａ）のプログラムの（４）行目から（８）行目までの命令を解読して命令レジスタに順次格納した様子を示す。例えば（８）行目の命令
ｓｔｏｒｅ  ｓｒ１１→Ａ（ｓｒ１）      （８）
は、レジスタｓｒ１１の内容を、レジスタｓｒ１の内容をアドレスとするメモリに格納する命令であるので、ＳＴに図示のように格納する。
【００３８】
（ｂ−５）  図４の（ａ）のプログラムの（９）行目の命令を解読して命令レジスタに格納した様子を示す。（９）行目の命令
ｉｆ  ｓｒ１＜３１  ｔｈｅｎ  ｇｏｔｏ  Ｌ１  （９）
は、レジスタｓｒ１の内容が３１よりも小さいときにラベルＬ１に分岐するという命令であり、データハーザードしない限り前の実行順序に詰めるので、図示の１つ前の命令（（８）行目の命令）と同じ実行順序の位置のＢＵに図示のように格納すると共に、分岐先のラベルＬ１を次の実行順序の位置のＢＴＡに図示のように格納する。
【００３９】
図５の（ｂ）の（ｂ−６）、（ｂ−７）  図４の（ａ）のプログラムの（４）行目から（９）行目の分岐命令によるループ部分について、解読して命令レジスタ４に格納されている命令を取り出して実行順序７から１０に▲１▼、▲２▼、▲３▼、▲４▼のようにコピーした様子を示す。これにより、分岐命令のループ部分について一度命令キャッシュから命令を取り出し解読して命令レジスタに格納した後は、重複した解読を行なうことなく命令レジスタから取り出して格納（コピー）することにより、高速に実行することが可能となる。尚、分岐条件が成立するまで▲１▼、▲２▼、▲３▼、▲４▼でコピーした部分の命令レジスタから命令を繰り返し取り出して実行する。分岐条件が成立した場合には、次の実行順序１１に進む。
【００４０】
図５の（ｂ−８）は、実行順序１０の分岐条件が成立したときの様子を示す。この分岐条件が成立した場合には、ラベルＬ２に分岐し、この実行順序の位置から図４の（ａ）のプログラムの（１０）ないし（１２）行を同様に命令キャッシュ２から順次取り出し、解読して命令レジスタにそれぞれ下記のように格納する。
【００４１】
0003647930.tif 000002
【００４２】
【発明の効果】
以上説明したように、本発明によれば、プロセッサ内部で命令を解読して各機能ユニット５毎の命令を動的に生成して実行すると共に命令レジスタ４に保存し分岐命令実行時に解読することなく命令レジスタ４から命令を取り出して各機能ユニット４が実行する構成を採用しているため、従来の特別な制御命令およびソフト制御を不要とし、かつ分岐命令実行時の解読を不要として全ての命令レジスタ４から一度にループ部分の命令を取り出して各機能ユニット５の命令レジスタ４に格納して並列実行し高速化を図ることができる。
【図面の簡単な説明】
【図１】本発明の概念構成図である。
【図２】本発明の１実施例要部構成図である。
【図３】本発明の動作説明フローチャートである。
【図４】本発明の動作説明図（その１）である。
【図５】本発明の動作説明図（その１）である。
【符号の説明】
１：メモリ
２：命令キャッシュ
３：デコーダ
４：命令レジスタ
５：機能ユニット
６：レジスタファイル
７：データキャッシュ
８：メモリ
ＩＲ：命令レジスタ
ＦＵ：機能ユニット
【図１】
0003647930.tif 000003
【図２】
0003647930.tif 000004
【図３】
0003647930.tif 000005
【図４】
0003647930.tif 000006
【図５】
0003647930.tif 000007