(57)【特許請求の範囲】
【請求項１】
１つの演算操作のための命令、複数の演算操作のための複数のサブ命令を含む命令、およびデータを格納するメモリ手段と、前記メモリ手段から読み出した前記命令をデコードする命令デコード手段と、前記命令の実行を制御する制御データを格納する複数個のレジスタと、前記命令デコード手段に接続され前記命令デコード手段から出力された前記命令のデコード結果および前記複数個のレジスタ内の制御データに基づいて、前記複数のサブ命令を逐次に実行し、また並列に独立して実行する複数の命令実行手段とを備え、前記命令デコード手段は、前記複数のサブ命令を前記複数の命令実行手段で逐次実行する場合、前記複数の命令実行手段の中で、第１のサブ命令を先行して実行した第１の命令実行手段に、後続して実行する第２番目以降のサブ命令を実行させるように制御する制御手段を備えていることを特徴とするマイクロプロセッサ。
【請求項２】
制御手段は、第２の命令実行手段が後続して実行される第２のサブ命令を実行できないと判断した場合、前記第２のサブ命令を第１の命令実行手段で実行させるように制御することを特徴とする請求項１記載のマイクロプロセッサ。
【請求項３】
制御手段は、第１の命令実行手段が後続して実行される第２のサブ命令を実行できないと判断した場合、前記第２のサブ命令を第２の命令実行手段で実行させるように制御することを特徴とする請求項１記載のマイクロプロセッサ。
【請求項４】
制御手段は、メモリ手段から出力された複数のサブ命令を含む命令を入力して解析し、前記複数のサブ命令のいずれが前記複数の命令実行手段のいずれかで実行可能であるかを判定する判定手段と、前記判定手段の制御のもとで、前記複数のサブ命令のビット列を入れ替える入替回路と、前記判定手段の制御のもとで、前記複数のサブ命令のいずれかを選択し、選択された選択サブ命令を出力する第１のセレクタと、前記第１のセレクタに接続され、かつそれぞれが前記複数の命令実行手段のそれぞれに接続され、前記判定手段の制御のもとで、前記第１のセレクタから出力された前記選択サブ命令かあるいは何も実行しない命令であるＮＯＰ命令のいずれかを選択して出力する複数のセレクタとを有していることを特徴とする請求項１から請求項３記載のうちのいずれか１項記載のマイクロプロセッサ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、１つの命令中に複数のサブ命令を有する命令を含む命令群を実行するマイクロプロセッサに関するものである。
【０００２】
【従来の技術】
演算速度等の性能向上のためパイプライン等の並列処理機能を有するマイクロプロセッサが広く用いられているが、命令の並列実行の一手法としてＶＬＩＷ（Ｖｅｒｙ  Ｌｏｎｇ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｗｏｒｄ）アーキテクチャが提案され実行されている。
【０００３】
このＶＬＩＷアーキテクチャでは、メモリアクセスユニットや整数演算ユニット等の複数の独立した演算ユニットを備えたマイクロプロセッサにおいて、１つの命令中に、演算操作用の複数のサブ命令を記載して、このサブ命令を複数の独立した演算ユニットで並列に実行することで、演算スピードを向上させてマイクロプロセッサの性能を向上させるようにしている。
【０００４】
【発明が解決しようとする課題】
従来のＶＬＩＷアーキテクチャのマイクロプロセッサは以上のように構成されているので、例えば、演算ユニット間でデータの干渉が発生し、サブ命令を同時に実行できない場合、演算を実行できない演算ユニットへは、何も演算しない命令であるＮＯＰ（Ｎｏ  Ｏｐｅｒａｔｉｏｎ）命令をセットしてデータの干渉が無くなるまでサブ命令の実行を待機させなければならず、命令のデコード効率や命令の実行効率が悪くなるという課題があった。
【０００５】
この発明は上記のような課題を解決するためになされたもので、複数のサブ命令からなるＶＬＩＷアーキテクチャの命令の処理において、各演算ユニット毎の逐次処理（シーケンシャル処理）を実行する場合、例えば、後続のサブ命令を実行する演算ユニットが後続サブ命令を実行できない場合、先行するサブ命令を実行する演算ユニットに、後続のサブ命令を実行させるように制御して演算効率を向上させる機能を備えたマイクロプロセッサを得ることを目的とする。
【０００６】
【課題を解決するための手段】
この発明に係るマイクロプロセッサは、１つの演算操作のための命令、複数の演算操作のための複数のサブ命令を含む命令、およびデータを格納するメモリ手段と、前記メモリ手段から読み出した前記命令をデコードする命令デコード手段と、前記命令の実行を制御する制御データを格納する複数個のレジスタと、前記命令デコード手段に接続され前記命令デコード手段から出力された前記命令のデコード結果および前記複数個のレジスタ内の制御データに基づいて、前記複数のサブ命令を逐次に実行し、また並列に独立して実行する複数の命令実行手段とを備え、前記命令デコード手段は、前記複数のサブ命令を前記複数の命令実行手段で逐次実行する場合、前記複数の命令実行手段の中で、第１のサブ命令を先行して実行した第１の命令実行手段に、後続して実行する第２番目以降のサブ命令を実行させるように制御する制御手段を備えていることを特徴とするものである。
【０００７】
この発明に係るマイクロプロセッサは、制御手段が、第２の命令実行手段が後続して実行される第２のサブ命令を実行できないと判断した場合、前記第２のサブ命令を第１の命令実行手段で実行させるように制御することを特徴とするものである。
【０００８】
この発明に係るマイクロプロセッサは、制御手段が、第１の命令実行手段が後続して実行される第２のサブ命令を実行できないと判断した場合、前記第２のサブ命令を第２の命令実行手段で実行させるように制御することを特徴とするものである。
【０００９】
この発明に係るマイクロプロセッサは、制御手段が、メモリ手段から出力された複数のサブ命令を含む命令を入力して解析し、前記複数のサブ命令のいずれが前記複数の命令実行手段のいずれかで実行可能であるかを判定する判定手段と、前記判定手段の制御のもとで、前記複数のサブ命令のビット列を入れ替える入替回路と、前記判定手段の制御のもとで、前記複数のサブ命令のいずれかを選択し、選択された選択サブ命令を出力する第１のセレクタと、前記第１のセレクタに接続され、かつそれぞれが前記複数の命令実行手段のそれぞれに接続され、前記判定手段の制御のもとで、前記第１のセレクタから出力された前記選択サブ命令かあるいは何も実行しない命令であるＮＯＰ命令のいずれかを選択して出力する複数のセレクタとを有していることを特徴とするものである。
【００１０】
【発明の実施の形態】
以下、この発明の実施の一形態を説明する。
実施の形態１．
図１は、この発明の実施の形態に係わるマイクロプロセッサの全体構成を示すブロック図であり、図において、１は３２ビットの内部データバスを備えた３２ビットマイクロプロセッサ（以下、マイクロプロセッサと呼ぶ）であるが、６４ビットの内部データバスを備えた６４ビットマイクロプロセッサ、その他でもよい。２は命令デコードユニット（命令デコード手段）、３は命令を実行するメモリアクセスユニット（命令実行手段）、４は命令を実行する整数演算ユニット（命令実行手段）、５は３２ビット×６４ワードの汎用レジスタ、６は命令を格納する命令ＲＡＭ（メモリ手段）、７はデータを格納するデータＲＡＭ（メモリ手段）である。
【００１１】
そして、８はメモリアクセスユニット３用デコーダ、９は整数演算ユニット４用デコーダ、１０はＰＳＷ（プロセッサ状態語）およびその他の制御レジスタ、２１は制御回路（制御手段）である。このように、命令デコードユニット２は、メモリアクセスユニット３用デコーダ８、整数演算ユニット４用デコーダ９、ＰＳＷ（プロセッサ状態語）およびその他の制御レジスタ１０、および制御回路２１から構成されている。命令デコードユニット２内の制御回路２１の構成および動作に関しては、図７乃至図１１を用いて詳細に後述する。
【００１２】
このように、この発明のマイクロプロセッサ１は、命令デコードユニット２、メモリアクセスユニット３、整数演算ユニット４、汎用レジスタ５、命令ＲＡＭ６、データＲＡＭ７等から構成されている。
【００１３】
命令デコードユニット２は、命令ＲＡＭ６から、例えば６４ビット幅のＩＤバスを介して転送されてくる命令コードを、メモリアクセスユニット３用デコーダ８、整数演算ユニット４用デコーダ９を用いてデコードする。メモリアクセスユニット３用デコーダ８のデコード結果とＰＳＷ（プロセッサ状態語）およびその他の制御レジスタ１０の内容とにより、メモリアクセスユニット３の動作を制御する制御信号１１を生成し、また、整数演算ユニット４用デコーダ９のデコード結果とＰＳＷ（プロセッサ状態語）およびその他の制御レジスタ１０の内容により、整数演算ユニット４の動作を制御する制御信号１２を生成する。
【００１４】
メモリアクセスユニット３は、ＰＣ（Ｐｒｏｇｒａｍ  Ｃｏｕｎｔｅｒ）制御部１３、メモリ制御部１４、ＡＬＵ１５、シフタ１６から構成される。ＰＣ制御部１３は、有効なジャンプ演算や分岐演算を含まない命令では、例えば、実行した命令のＰＣ値に８を加えて次に実行する命令のＰＣ値を計算し、ジャンプ演算や分岐演算では実行した命令のＰＣ値に分岐変位を加算し、また演算で指定されたアドレッシングモードに従う計算をしてジャンプ先命令のＰＣ値を計算する。
【００１５】
メモリ制御部１４は、ＰＣ制御部１３で計算されたＰＣ値をもとに、３２ビット幅のＩＡバスを用いて命令ＲＡＭ６を起動し、また命令ＲＡＭ６から命令コードを出力させる。また、データＲＡＭ７のアドレスを転送するＤＡバスおよびデータを転送するＤＤバスを通じてデータＲＡＭ７をアクセスし、あるいは命令実行に必要なデータＲＡＭ７内のデータをアクセスして、６４ビット幅のＤＤバスを介して汎用レジスタ５へ転送する。
【００１６】
ＡＬＵ１５およびシフタ１６では、汎用レジスタ５から３２ビット幅のＳ１バス、Ｓ２バス、Ｓ３バスを通じて転送された最大３ワードのデータを用いて算術論理演算もしくはシフト演算を行い、演算結果を３２ビット幅のＤ１バスを介して、汎用レジスタ５へ転送する。
【００１７】
また、Ｓ１，Ｓ２，Ｓ３，Ｓ４の各バスを通じて、汎用レジスタ５から読み出された最大４ワードの３２ビット長のデータが、メモリアクセスユニット３へ転送される。従って、例えば第１のレジスタの内容と第２のレジスタの内容とのワードでアドレッシングされるメモリ領域に第３のレジスタの内容をストアし、第３のレジスタの内容をストアしたアドレスに所定値を加算して得られる値でアドレッシングされるメモリの領域に第４のレジスタの内容をストアする２ワードストア命令を実現できる。従って、２ワードストア命令では、２つのオペランドを使用し、メモリアドレスを計算し、データＲＡＭ７へ２ワードデータを転送する。
【００１８】
また、メモリアクセスユニット３は、Ｄ１，Ｄ２の各バスを通じて、メモリアクセスユニット３内での２ワードの演算結果またはデータＲＡＭ７から転送された２ワードのデータを、汎用レジスタ５へ転送する。
【００１９】
整数演算ユニット４は、乗算器１７、アキュムレータ１８、ＡＬＵ１９、シフタ２０等から構成される。乗算器１７、ＡＬＵ１９、シフタ２０では、汎用レジスタ５から３２ビット幅のＳ４，Ｓ５，Ｓ６の各バスを介して転送された最大３ワードのデータを用いて算術論理演算を行い、演算結果をＤ２，Ｄ３の各バスを介して汎用レジスタ５へ転送する。また、アキュムレータ１８は、乗算結果を累積加算または累積減算してその演算結果を保持する。図１に示すマイクロプロセッサ１では、アキュムレータ１８として、６４ビットのアキュムレータが２本組み込まれている。
【００２０】
ＡＬＵ１９は、汎用レジスタ５から３２ビット幅のＳ４，Ｓ５，Ｓ６の各バスを介して転送された最大３ワードのデータを用いて算術論理演算を行い、演算結果をＤ２，Ｄ３の各バスを介して汎用レジスタ５へ転送する。シフタ２０は、汎用レジスタ５から３２ビット幅のＳ４，Ｓ５，Ｓ６の各バスを通じて転送されたデータを用いて演算を行い、演算結果をＤ２，Ｄ３の各バスを介して汎用レジスタ５へ転送する。
【００２１】
図１に示すマイクロプロセッサ１は、汎用レジスタ５から、最大６種類のレジスタ値を読み出すことが可能で、読み出されたデータは、それぞれＳ１，Ｓ２，Ｓ３，Ｓ４，Ｓ５，Ｓ６の各バスに出力される。また、マイクロプロセッサ１は、Ｄ１，Ｄ２，Ｄ３の各バスを介して、最大３種類のレジスタ値を同時に、汎用レジスタ５へ書き込むことが可能である。
【００２２】
命令ＲＡＭ６は、３２ビット幅のＩＡバスと６４ビット幅のＩＤバスに接続されており、ＩＡバスの示すアドレスに対応する６４ビット長の命令データを読み出す。データＲＡＭ７は、３２ビット幅のＯＡバスと６４ビット幅のＯＤバスに接続されており、ＯＡバスの示すアドレスに対応する、６４ビット長のデータを読み書きする。
【００２３】
図２は、図１に示したこの発明のマイクロプロセッサ１で用いられる命令フォーマットを示す説明図である。マイクロプロセッサ１の命令フォーマットには、図２の（ａ）に示すように、１つの命令コードで２つの演算（ｏｐｅｒａｔｉｏｎ）を指示する２演算命令のフォーマット１０１と、図２の（ｂ）に示すように、１つの命令コードで１つの演算を指示する１演算命令のフォーマット１０２とがある。
【００２４】
２演算命令のフォーマット１０１には、フィールド１０３およびフィールド１０４からなるフォーマットフィールド、２つの演算フィールド１０６，１０７および各演算フィールド１０６，１０７の各々に付属する実行条件フィールド１０５がある。１演算命令のフォーマット１０２には、フィールド１０３とフィールド１０４からなるフォーマットフィールドと、フィールド１０８、フィールド１０９およびフィールド１１０からなる演算フィールドと、この演算フィールドに付属する実行条件フィールド１０５がある。
【００２５】
次に、図２に示した各命令フォーマット１０１，１０２における各フォーマットフィールド１０３，１０４の詳細を説明する。尚、以下では、各フォーマットフィールド１０３，１０４をＦＭと標記し、各フォーマットフィールド１０３，１０４のそれぞれの値を２ビットで示す。
0003841967.tif 000002
【００２６】
上記したフォーマットフィールドＦＭにおいて、ＦＭ＝００の場合、この命令は２演算命令であり、図２に示した命令フォーマット内の演算フィールド１０６で指示されたｏｐｅｒａｔｉｏｎ＿０の演算と、演算フィールド１０７で指示されたｏｐｅｒａｔｉｏｎ＿１の演算が、デコード直後のクロックサイクルで並列に実行される。ｏｐｅｒａｔｉｏｎ＿０の演算は、メモリアクセスユニット３で実行され、ｏｐｅｒａｔｉｏｎ＿１の演算は、整数演算ユニット４で実行される。
【００２７】
次に、フォーマットフィールドの値ＦＭ＝０１の場合、この命令は２演算命令であり、演算フィールド１０６で指示されたｏｐｅｒａｔｉｏｎ＿０の演算がデコード直後のクロックサイクルで実行され、演算フィールド１０７で指示されたｏｐｅｒａｔｉｏｎ＿１の演算がｏｐｅｒａｔｉｏｎ＿０の演算に対して１クロックサイクル遅延して実行される。
【００２８】
ＦＭ＝１０の場合、この命令は２演算命令であり、演算フィールド１０７で指示されたｏｐｅｒａｔｉｏｎ＿１の演算が、デコード直後のクロックサイクルで実行され、演算フィールド１０６で指示されたｏｐｅｒａｔｉｏｎ＿０の演算がｏｐｅｒａｔｉｏｎ＿１の演算に対して１クロックサイクル遅延して実行される。
【００２９】
ＦＭ＝１１の場合、この命令は１演算命令であり、１０８と１０９と１１０からなる演算フィールドで指示された１つの演算がデコード直後のクロックサイクルで実行される。
【００３０】
次に、図２に示した命令フォーマットにおける、実行条件フィールド（ＣＣ）１０５の説明を行う。
実行条件フィールド（ＣＣ）１０５は、以下の意味を持つ。
0003841967.tif 000003
【００３１】
実行条件フィールド（ＣＣ）１０５は、マイクロプロセッサ１の状態フラグＦ０およびＦ１の値に依存して、各演算フィールド１０６，１０７でそれぞれ示されたｏｐｅｒａｔｉｏｎ＿０の演算やｏｐｅｒａｔｉｏｎ＿１の演算および演算フィールド１０８と１０９と１１０で示された演算が、有効であるか無効であるかを定める。演算が有効であるときは、演算結果がレジスタ、メモリ、フラグに反映され、その演算により定義された動作結果が残ることを意味し、演算が無効であるときは、演算結果がレジスタ、メモリ、フラグに反映されず、定められた演算の種類には関わらず、その演算により無効演算（ＮＯＰ：Ｎｏ  Ｏｐｅｒａｔｉｏｎ）が実行された場合と同じ結果が、レジスタやフラグに残ることを意味する。
【００３２】
実行条件フィールド１０５の値ＣＣ＝０００のとき、演算は実行コントロールフラグＦ０，Ｆ１の値に関わらず常に有効である。ＣＣ＝００１のとき、演算は実行コントロールフラグＦ１の値には関わらず、Ｆ０＝真のときのみ有効である。ＣＣ＝０１０のとき、演算は実行コントロールフラグＦ１の値には関わらず、Ｆ０＝偽のときのみ有効である。ＣＣ＝０１１のとき、演算は実行コントロールフラグＦ０の値には関わらずＦ１＝真のときのみ有効である。ＣＣ＝１００のとき、演算は実行コントロールフラグＦ０の値には関わらずＦ１＝偽のときのみ有効である。ＣＣ＝１０１のとき、演算は実行コントロールフラグＦ０＝真かつＦ１＝真のときのみ有効である。ＣＣ＝１１０のとき、演算は実行コントロールフラグＦ０＝真かつＦ１＝偽のときのみ有効である。ＣＣ＝１１１のときの動作は未定義であり、ユーザはこの値がＣＣ＝１１１となる命令を用いることはできない。
【００３３】
図３は、２８ビット長で表現される短型の演算フィールド１０６および１０７と、５４ビット長で表現される長型の演算フィールド（図２に示した演算フィールド１０８，１０９，１１０で構成される）の詳細を示す説明図である。短型の演算フィールドには、７つのフォーマット１１１，１１２，１１３，１１４，１１５，１１６，１１７があり、長型の演算フィールドには２つのフォーマット１１８，１１９がある。
【００３４】
フォーマット１１１（Ｓｈｏｒｔ＿Ｍ）は、演算内容を指定するフィールド１２０、レジスタの番号を指定する２つのフィールド１２１，１２２、レジスタ番号または６ビット長の即値を指定するフィールド１２３、フィールド１２３がレジスタ番号を示すか即値を示すかを指定するフィールド１２４から構成される。図３に示すように、フィールド１２４の値Ｘが、００，０１あるいは１１である場合、フィールド１２３がレジスタ番号を示しており、値Ｘが１０である場合、既値であることを示している。このフォーマット１１１はレジスタ間接アドレッシングのメモリアクセス演算に使用される。
【００３５】
フォーマット１１２（Ｓｈｏｒｔ＿Ａ）は、演算内容を指定するフィールド１２０、レジスタの番号を指定する２つのフィールド１２１，１２２、レジスタ番号または６ビット長の即値を指定するフィールド１２３、フィールド１２３がレジスタ番号を示すか即値を示すかを指定するフィールド１２５から構成される。図３に示すように、フィールド１２５の値Ｘ’が０である場合、フィールド１２３がレジスタ番号を示し、値Ｘ’が１である場合は、既知であることを示す。このフォーマット１１２は算術演算、論理演算、シフト演算、ビット演算に使用される。
【００３６】
フォーマット１１３（Ｓｈｏｒｔ＿Ｂ１）は、演算内容を指定するフィールド１２０、レジスタの番号を指定するフィールド１２６から構成される。このフォーマット１１３は、レジスタ指定によるジャンプ、分岐命令に使用される。
【００３７】
フォーマット１１４（Ｓｈｏｒｔ＿Ｂ２）は、演算内容を指定するフィールド１２０、１８ビット長のディスプレイスメントのフィールド１２７から構成される。このフォーマット１１３は、ジャンプ、分岐命令に使用される。
【００３８】
フォーマット１１５（Ｓｈｏｒｔ＿Ｂ３）は、演算内容を指定するフィールド１２０、レジスタ番号を指定するフィールド１２１、レジスタ番号または１２ビット長の即値を指定するフィールド１２８、フィールド１２８がレジスタ番号を示すか即値を示すかを指定するフィールド１２９、フィールド１２１がゼロ判定による条件ジャンプおよび条件分岐を行うか否かを指定するフィールド１３０から構成される。このフォーマット１１５は、条件ジャンプ、条件分岐命令に使用される。
【００３９】
フォーマット１１６（Ｓｈｏｒｔ＿Ｄ１）は、演算内容を指定するフィールド１２０、レジスタ番号を指定するフィールド１２１、レジスタ番号または１２ビット長の即値を指定するフィールド１２８、フィールド１２８がレジスタ番号を示すか即値を示すかを指定するフィールド１２９から構成される。このフォーマット１１６は、条件ジャンプ、条件分岐命令、リピート命令に使用される。
【００４０】
フォーマット１１７（Ｓｈｏｒｔ＿Ｄ２）は、演算内容を指定するフィールド１２０、レジスタ番号または１２ビット長の即値を指定するフィールド１２８、フィールド１２８がレジスタ番号を示すか即値を示すかを指定するフィールド１２９、遅延命令（ディレイド命令）のディレイ値を指定するフィールド１３１から構成される。このフォーマット１１７は、ディレイドジャンプ、ディレイド分岐命令、およびリピート命令に使用される。
【００４１】
フォーマット１１８（Ｌｏｎｇ１）は、演算内容を指定するフィールド１２０、レジスタの番号を指定する２つのフィールド１２１，１２２、３２ビット長の即値を指定するフィールド１３２から構成される。このフォーマット１１８の演算には、複雑な算術演算、大きな即値を用いる算術演算、大きなディスプレースメント付きレジスタ間接アドレッシングのメモリアクセス演算や大きな分岐変位の分岐演算、絶対番地へのジャンプ演算などがある。
【００４２】
フォーマット１１９（Ｌｏｎｇ２）は、演算内容を指定するフィールド１２０、レジスタの番号を指定する２つのフィールド１２１，１２２、３２ビット長の即値を指定するフィールド１３２、フィールド１３２がゼロ判定による条件ジャンプおよび条件分岐を行うか否かを指定するフィールド１３３から構成される。このフォーマット１１９は、大きな分岐変位をもつ条件ジャンプ、条件分岐命令に使用される。
【００４３】
図４は、図１に示したマイクロプロセッサ１のレジスタ構成を示す説明図である。マイクロプロセッサ１には、（ａ）に示す６４本の３２ビット長の汎用レジスタ５、（ｂ）に示す１２本の制御レジスタ１５０、および（ｃ）に示す２本のアキュムレータ１８がある。
【００４４】
汎用レジスタ（Ｒ０）１４０は、読み出した場合常に０で書き込みは無視される。汎用レジスタ（Ｒ６２）は、サブルーチンからの戻り先アドレスが設定されるリンクレジスタである。汎用レジスタ（Ｒ６３）はスタックポインタであり、ＰＳＷ（プロセッサ状態語）およびその他の制御レジスタ１０のＳＭフィールドの値に依存してユーザスタックポインタ（ＳＰＵ）１４１または割り込みスタックポインタ（ＳＰＩ）１４２が動作する。
【００４５】
制御レジスタ１５０には、プログラムカウンタ１５１、ＰＳＷ（プロセッサ状態語）およびその他の制御レジスタ１０や各種の専用レジスタが含まれる。
【００４６】
図３に示したフォーマット１１２の演算では、６４本の汎用レジスタ５のそれぞれを上位１６ビットと下位１６ビットに分けて別々にアクセスできる。また、２本のアキュムレータ１８は、それぞれ上位３２ビットと下位３２ビットを別々にアクセスできる。
【００４７】
図５は、ＰＳＷ（プロセッサ状態語）およびその他の制御レジスタ１０の詳細を示す説明図である。ＰＳＷ（プロセッサ状態語）およびその他の制御レジスタ１０の上位１６ビット１７０には、スタックポインタを切り替えるＳＭフィールド１７１、ＳＤＢＴ（ソフトウェアデバッガトラップ）の検出を示すＥＡフィールド１７２、ＳＤＢＴの許可を指定するＤＢフィールド１７３、割り込み許可を指定するＩＥフィールド１７４、リピート動作の許可を指定するＲＰフィールド１７５、モジュロアドレッシングの許可を指定するＭＤフィールド１７６がある。
【００４８】
下位１６ビットは、フラグフィールド１８０である。フラグフィールド１８０には８個のフラグがあり、その中のＦ０フラグ１８１とＦ１フラグ１８２は演算の有効／無効を制御する。各フラグの値は、比較演算や算術演算の結果に依存して変化するほか、フラグ初期化演算で初期化したり、フラグ値書き込み演算で任意の値をフラグフィールド１８０に書き込むことで変化する。また、フラグ値読み出し演算で、フラグフィールド１８０の値を読み出すことも可能である。
【００４９】
各フラグは、以下の意味を持つ。
ＳＭ＝０      ：スタックモード０――＞ＳＰＵを使用
ＳＭ＝１      ：スタックモード１――＞ＳＰＵを使用
ＥＡ＝０      ：ＳＤＢＴを未検出
ＥＡ＝１      ：ＳＤＢＴを検出
ＤＢ＝０      ：ＳＤＢＴを非許可
ＤＢ＝１      ：ＳＤＢＴを許可
ＩＥ＝０      ：割り込み非許可
ＩＥ＝１      ：割り込み許可
ＲＰ＝０      ：リピートブロック無効
ＲＰ＝１      ：リピートブロック有効
ＭＤ＝０      ：モジュロアドレッシング無効
ＭＤ＝１      ：モジュロアドレッシング有効
Ｆ０          ：汎用フラグ（実行コントロールフラグ）
Ｆ１          ：汎用フラグ（実行コントロールフラグ）
Ｆ２          ：汎用フラグ
Ｆ３          ：汎用フラグ
Ｆ４（Ｓ）    ：飽和演算フラグ
Ｆ５（Ｖ）    ：オーバーフローフラグ
Ｆ６（ＶＡ）  ：累積オーバーフローフラグ
Ｆ７（Ｃ）    ：キャリー／ボローフラグ
【００５０】
以下に、図１に示したこの発明のマイクロプロセッサ１で用いられる命令一覧を示す。
【００５１】
0003841967.tif 000004
【００５２】
0003841967.tif 000005
【００５３】
0003841967.tif 000006
【００５４】
0003841967.tif 000007
【００５５】
0003841967.tif 000008
【００５６】
0003841967.tif 000009
【００５７】
0003841967.tif 000010
【００５８】
0003841967.tif 000011
【００５９】
0003841967.tif 000012
【００６０】
0003841967.tif 000013
【００６１】
0003841967.tif 000014
【００６２】
0003841967.tif 000015
【００６３】
図６は、図１に示したこの発明のマイクロプロセッサ１の並列２命令実行時（ＦＭ＝００）のパイプライン動作を示す説明図である。各パイプライン１９０，１９５は、命令フェッチ（ＩＦ）ステージ１９１、デコード／アドレス演算（Ｄ／Ａ）ステージ１９２、実行／メモリアクセス（Ｅ／Ｍ）ステージ１９３、ライトバック（Ｗ）ステージ１９４から構成される。
【００６４】
２命令を並列に実行する場合、メモリアクセスユニット３でのパイプライン１９０の実行と整数演算ユニット４でのパイプライン１９５の実行（斜線の部分）とが並列に行われる。
【００６５】
図７は、図１に示したマイクロプロセッサ１のシーケンシャル命令実行時のパイプライン動作を制御するために命令デコードユニット２内に設けられた制御回路２１を示す構成図であり、図において、２１７は命令ＲＡＭ６から出力された命令コードを、６４ビットのＩＤバスを介して入力し、後述する各セレクタ２１１，２１４，２１５，および上位と下位の入替回路２１６の動作を制御する制御信号を生成し、出力する判定回路（判定手段）である。
【００６６】
２１１は第１のセレクタ、２１４は第２のセレクタ、２１５は第３のセレクタ、２１３は第１のラッチ、２１２は第２のラッチ、そして２１６は、第１のラッチ２１３の出力の上位ビットと下位ビットを、判定回路２１７からの制御信号に基づいて入れ替えする上位と下位の入替回路（以下、入替回路と略称する。）である。
【００６７】
第１のセレクタ２１１は、ＩＤバスおよび判定回路２１７を介して命令ＲＡＭ６から読み出した命令コードと、ラッチ２１２から出力された出力データを、判定回路２１７からの制御信号に基づいて選択する。第２のセレクタ２１４は、ラッチ２１３からの出力データとＮＯＰ命令コードとのいずれかを、判定回路２１７からの制御信号に基づいて選択するセレクタであり、その出力データはメモリアクセスユニット３へ出力される。
【００６８】
第３のセレクタ２１５は、ラッチ２１３の出力データとＮＯＰ命令コードとのいずれかを、判定回路２１７からの制御信号に基づいて選択するセレクタであり、その出力データは整数演算ユニット４へ出力される。尚、その他の構成要素は、図１に示したマイクロプロセッサの構成要素と同様なので、同一の参照番号を用いて、ここではその説明を省略する。
【００６９】
次に動作について説明する。
図８は、図１に示したマイクロプロセッサ１のシーケンシャル命令実行時のパイプライン動作を示す説明図であり、図において、２００はパイプラインの各ステージを示している。パイプライン２００は、命令フェッチ（ＩＦ）ステージ、デコード／アドレス演算（Ｄ／Ａ）ステージ、実行／メモリアクセス（Ｅ／Ｍ）ステージ、およびライトバック（ＷＢ）ステージで構成されている。
【００７０】
図８に示すパイプライン動作では、図２の（ａ）に示した命令フォーマット１０１において、命令フォーマットの値ＦＭ＝０１の場合、サブ命令ＡがＡＤＤ命令、サブ命令Ｂがメモリアクセスユニット３で実行可能なＳＵＢ命令の例を示している。ＦＭ＝０１の場合に、最初に実行されるサブ命令Ａは、メモリアクセスユニット３で実行される。次に実行されるサブ命令Ｂは、メモリアクセスユニット３で実行可能な命令なので、制御回路２１の制御のもとで、整数演算ユニット４で実行が可能か否かに係わらず、先行サブ命令Ａを実行した演算実行ユニットであるメモリアクセスユニット３で必ず実行される。
【００７１】
図９は、図８に示したパイプライン動作を示すタイミングチャートである。このタイミングチャートは、図８に示したパイプラインにおけるシーケンシャル命令実行に対応したものである。
【００７２】
まず、制御回路２１の制御に基づいて実行されるサブ命令Ａのデコードステージの動作を説明する。
６４ビットのＩＤバスを介して、命令ＲＡＭ６から送信されてきた命令コードの上位ビット（３２ビット）および下位ビット（３２ビット）はそれぞれ、ＡＤＤ命令とＳＵＢ命令に対応したコードとなっている。制御回路２１内の判定回路２１７から出力された制御信号に基づいて、第１のセレクタ２１１から出力されるデータをラッチする第１のラッチ２１３の上位ビットおよび下位ビットは、それぞれＡＤＤ命令とＳＵＢ命令に対応したコードとなる。
【００７３】
次に、判定回路２１７からの制御信号に基づいて、入替回路２１６により、第１のラッチ２１３の出力データの上位ビット（３２ビット）と下位ビット（３２ビット）とが入れ替えられるため、判定回路２１７からの制御信号に基づいて第２のラッチ２１２から出力されるデータは、上位ビットがＳＵＢ命令、下位ビットがＡＤＤ命令にそれぞれ対応したコードとなっている。従って、第１のラッチ２１３の上位ビットはＳＵＢ命令、下位ビットはＡＤＤ命令に対応したコードとなる。
【００７４】
次に、セレクタ２１４は、判定回路２１７からの制御信号に基づいて第１のラッチ２１３の出力を選択しメモリアクセスユニット３用デコーダ８へ出力する。従って、メモリアクセスユニット３用デコーダ８は、第２のセレクタ２１４から出力されたＡＤＤ命令コードをデコードする。
【００７５】
一方、第３のセレクタ２１５は、判定回路２１７からの制御信号に基づいてＮＯＰ命令コードを選択し整数演算ユニット４用デコーダ９へ出力する。従って、整数演算ユニット４用デコーダ９は、ＮＯＰ命令コードをデコードする。
【００７６】
次に、サブ命令Ｂのデコードステージの動作に関して説明する。
判定回路２１７からの制御信号に基づいて、第１のセレクタ２１１は、第２のラッチ２１２の値を選択するように制御され、第１のラッチ２１３の上位ビット、下位ビットは、それぞれＳＵＢ命令とＡＤＤ命令に対応したコードとなる。次に、第２のセレクタ２１４は、判定回路２１７からの制御信号に基づいて第１のラッチ２１３の出力データであるＳＵＢ命令コードを選択し、選択したデータをメモリアクセスユニット３用デコーダ８へ出力する。メモリアクセスユニット３用デコーダ８は、第２のセレクタ２１４から出力されたＳＵＢ命令コードをデコードする。
【００７７】
一方、第３のセレクタ２１５は、判定回路２１７からの制御信号に基づいてＮＯＰ命令コードを選択し、選択したデータを整数演算ユニット４用デコーダ９へ出力する。整数演算ユニット４用デコーダ９は、第３のセレクタ２１５から出力されたＮＯＰ命令コードを入力しデコードする。
【００７８】
図１０は、図１に示したマイクロプロセッサ１のシーケンシャル命令実行時の他のパイプライン動作を示す説明図であり、図において、２０５はパイプラインの各ステージを示している。パイプライン２０５は、パイプライン２００と同様に、命令フェッチ（ＩＦ）ステージ、デコード／アドレス演算（Ｄ／Ａ）ステージ、実行／メモリアクセス（Ｅ／Ｍ）ステージ、およびライトバック（ＷＢ）ステージで構成されている。
【００７９】
図１０に示すマイクロプロセッサ１のパイプライン動作は、図２の（ａ）に示した命令フォーマット１０１において、命令フォーマットの値ＦＭ＝０１の場合、サブ命令ＡがＡＤＤ命令、サブ命令Ｂが整数演算ユニット４のみで実行可能なＭＵＬ命令の例を示している。ＦＭ＝０１の場合に、最初に実行されるサブ命令Ａは、メモリアクセスユニット３で実行される。次に実行されるサブ命令Ｂは、メモリアクセスユニット３で実行不可能な命令なので、制御回路２１の制御のもとで整数演算ユニット４が実行する。
【００８０】
図１１は、図１０に示したパイプライン動作を示すタイミングチャートである。このタイミングチャートは、図１０に示したパイプラインにおけるシーケンシャル命令実行に対応したものである。
【００８１】
まず、制御回路２１によるサブ命令Ａのデコードステージの動作を説明する。ＩＤバスを介して送られてきた命令コードの上位ビット（３２ビット）および下位ビット（３２ビット）はそれぞれ、ＡＤＤ命令とＭＵＬ命令に対応したコードとなっている。第１のセレクタ２１１から出力されるデータをラッチする第１のラッチ２１３の上位ビットおよび下位ビットは、それぞれＡＤＤ命令とＭＵＬ命令に対応したコードとなる。
【００８２】
次に、図１０に示すパイプラインの場合では、判定回路２１７からの制御信号に基づいて入替回路２１６により第１のラッチ２１３の出力データの上位ビットと下位ビットが入れ替えられないため、第２のラッチ２１２から出力されるデータは、上位ビットがＡＤＤ命令、下位ビットがＭＵＬ命令にそれぞれ対応したコードとなっている。従って、第１のラッチ２１３の上位ビットはＡＤＤ命令、下位ビットはＭＵＬ命令に対応したコードとなる。
【００８３】
次に、第２のセレクタ２１４は、判定回路２１７からの制御信号に基づいて第１のラッチ２１３の出力を選択し出力する。メモリアクセスユニット３用デコーダ８は、第２のセレクタ２１４から出力されたＡＤＤ命令コードをデコードする。
【００８４】
一方、第３のセレクタ２１５は、判定回路２１７からの制御信号に基づいてＮＯＰ命令コードを選択し出力する。従って、整数演算ユニット４用デコーダ９はＮＯＰ命令コードをデコードする。
【００８５】
次に、サブ命令Ｂのデコードステージの動作に関して説明する。
第１のセレクタ２１１は、判定回路２１７からの制御信号に基づいて第２のラッチ２１２の値を選択するように制御され、第１のラッチ２１３の上位ビット、下位ビットは、それぞれＡＤＤ命令とＭＵＬ命令に対応したコードとなる。次に、第２のセレクタ２１４は、判定回路２１７からの制御信号に基づいてＮＯＰ命令コードを選択し、選択したＮＯＰ命令コードをメモリアクセスユニット３用デコーダ８へ出力する。メモリアクセスユニット３用デコーダ８は、第２のセレクタ２１４から出力されたＮＯＰ命令コードをデコードする。
【００８６】
一方、第３のセレクタ２１５は、判定回路２１７からの制御信号に基づいて第１のラッチ２１３から出力されたＭＵＬ命令コードを選択し、選択したＭＵＬ命令コードを整数演算ユニット４用デコーダ９へ出力する。整数演算ユニット４用デコーダ９は、第３のセレクタ２１５から出力されたＭＵＬ命令コードをデコードする。
【００８７】
この発明のマイクロプロセッサ１において、判定回路２１７を持つ制御回路２１の制御のもとで、命令コードにおける命令フォーマットフィールドの値が、ＦＭ＝１０の場合では、先に実行されるサブ命令が整数演算ユニット４で実行され、次に実行されるサブ命令が整数演算ユニット４で実行可能である場合は、同一の整数演算ユニット４で実行される。また、後続のサブ命令が整数演算ユニット４で実行できない場合は、先行のサブ命令が実行された整数演算ユニット４とは異なる演算ユニットである、例えばメモリアクセスユニット３で実行される。
【００８８】
従来のマイクロプロセッサでは、メモリアクセスユニット３や整数演算ユニット４等の各演算ユニットでの演算結果は、後続のサイクルで、例えば、汎用レジスタ５等のレジスタファイルへ格納される。同じ演算ユニットにおいて、連続する演算での演算結果が互いに干渉する場合は、レジスタファイルに格納した値を使用しないで、直前に実行された演算での演算結果を、次に実行されるサブ命令で直接使用可能なように、専用のバイパス経路を設ける手法が一般的に使用されている。しかしながら、異なる演算ユニット間でデータ干渉が発生する場合においては、バイパス経路でのデータ転送における遅延値が大きくなるため、専用のバイパス経路を設ける手法は使用されない。しかしながら、この発明のマイクロプロセッサ１では、制御回路２１の制御に基づいて、可能な限り、同一の演算ユニットで後続のサブ命令を実行することが可能なので、専用のバイパス経路は、他のパイプライン等で利用可能であり、演算性能が向上することができる。
【００８９】
以上のように、この実施の形態によれば、命令デコードユニット２内に設けられた制御回路２１内の判定回路２１７が、例えば、整数演算ユニット４が後続で実行される後続のサブ命令を実行できないと判断した場合、後続のサブ命令を整数演算ユニット４以外の演算ユニットであるメモリアクセスユニット３で実行させるように構成したので、複数の命令実行手段の各々がバイパス経路を有効に利用することが可能となり、命令の処理速度を向上することができ、従って、マイクロプロセッサ全体の演算効率を向上することができる。
尚、上記では演算ユニットとして整数演算ユニット４，メモリアクセスユニット３の２個で構成した例について示したが、演算ユニットの個数は、２個に限らず、３個以上であってもよい。
また、上述の実施の形態では演算ユニットの個数が２個の場合について示したが、演算ユニットの個数が３個以上の場合についても同様の効果が得られる。
【００９０】
【発明の効果】
以上のように、この発明によれば、命令デコード手段である命令デコードユニットは、複数のサブ命令を複数の命令実行手段、例えば、メモリアクセスユニットや整数演算ユニットの演算ユニットで実行させる場合、複数の命令実行手段の中で、第１のサブ命令を先行して実行した第１の命令実行手段に、後続して実行する第２番目以降のサブ命令を実行させるように制御する制御手段としての制御回路を備え、特に、制御回路内の判定手段である判定回路が、整数演算ユニットが後続で実行される後続のサブ命令を実行できないと判断した場合、後続のサブ命令を整数演算ユニット以外のメモリアクセスユニットで実行させるように制御するように構成したので、複数の命令実行手段の各々がバイパス経路を有効に利用することが可能となり、マイクロプロセッサ全体の演算効率を向上できるので演算性能が向上するという効果がある。
【図面の簡単な説明】
【図１】  この発明のマイクロプロセッサの全体構成を示すブロック図である。
【図２】  図１に示したマイクロプロセッサで用いられる命令フォーマットを示す説明図である。
【図３】  短型の演算フィールドと長型の演算フィールドの詳細を示す説明図である。
【図４】  図１に示したマイクロプロセッサのレジスタ構成を示す説明図である。
【図５】  プロセッサ状態語（ＰＳＷ）の詳細を示す説明図である。
【図６】  図１に示したマイクロプロセッサのパイプライン動作を示す説明図である。
【図７】  図１に示したマイクロプロセッサのシーケンシャル命令実行時のパイプライン動作を制御するための命令デコードユニット内に設けられた制御回路を示す構成図である。
【図８】  図１に示したマイクロプロセッサのシーケンシャル命令実行時のパイプライン動作を示す説明図である。
【図９】  図８に示したパイプライン動作を示すタイミングチャートである。
【図１０】  図１に示したマイクロプロセッサのシーケンシャル命令実行時の他のパイプライン動作を示す説明図である。
【図１１】  図１０に示したパイプライン動作を示すタイミングチャートである。
【符号の説明】
１  マイクロプロセッサ、２  命令デコードユニット（命令デコード手段）、３  メモリアクセスユニット（命令実行手段）、４  整数演算ユニット（命令実行手段）、５  汎用レジスタ（レジスタ）、６  命令ＲＡＭ（メモリ手段）、７データＲＡＭ（メモリ手段）、１０  ＰＳＷ（プロセッサ状態語）およびその他の制御レジスタ（レジスタ）、２１  制御回路（制御手段）、２１１  第１のセレクタ（セレクタ）、２１４  第２のセレクタ（セレクタ）、２１５  第３のセレクタ（セレクタ）、２１６  上位と下位の入替回路（入替回路）、２１７  判定回路（判定手段）。
【図１】
0003841967.tif 000016
【図２】
0003841967.tif 000017
【図３】
0003841967.tif 000018
【図４】
0003841967.tif 000019
【図５】
0003841967.tif 000020
【図６】
0003841967.tif 000021
【図７】
0003841967.tif 000022
【図８】
0003841967.tif 000023
【図９】
0003841967.tif 000024
【図１０】
0003841967.tif 000025
【図１１】
0003841967.tif 000026