(57)【特許請求の範囲】
【請求項１】
実行条件フィールドおよび演算フィールドを含む条件実行命令等の各種命令をデコードする命令デコーダと、
前記命令デコーダの出力に従って命令を実行する命令実行部と、
前記命令実行部で実行された命令の演算結果を格納すると共に、条件データが設定される汎用フラグを含んでなる制御レジスタと、
前記命令実行部で実行された命令の演算結果を格納する汎用レジスタと、
前記命令実行部に設けられ、前記汎用レジスタに格納した前記演算結果を用いることなく、直前に実行された命令の演算結果を格納している前記制御レジスタ内の前記演算結果をバイパスするためのバイパス経路とを備え、
前記命令デコーダは、
前記汎用フラグ内に設定された条件データと前記実行条件フィールド内に設定された条件とが合致しているか否かを判定する条件実行判定部と、
前記条件実行判定部の判定結果に従って、前記バイパス経路を使用するか、若しくは、前記汎用レジスタに格納した前記演算結果を使用するかを制御するバイパス制御部と
を有することを特徴とする条件実行命令を有するマイクロプロセッサ。
【請求項２】
バイパス制御部は、
命令実行部で実行される命令のパイプラインでデータ干渉が発生しているか否かを判定するバイパス判定部と、
前記バイパス判定部の判定結果に基づいて、バイパス経路を介した制御レジスタのデータ転送動作を制御するレジスタ出力制御部とを有し、
条件実行制御部は、
実行しようとする条件実行命令が有効であるか無効であるかを判定する条件実行判定部と、
前記条件実行判定部の判定結果に基づいて汎用レジスタへのデータの書き込みを制御する汎用レジスタ書き込み制御部とを有し、
前記制御レジスタは、
前記命令実行部で実行された命令の演算結果を取得して格納するレジスタと、前記汎用レジスタから前記演算結果を取得して格納すると共に、前記汎用レジスタを介して取得した前記演算結果を前記バイパス経路以外の経路でデータ転送するためのデータ転送経路に接続するレジスタとを有してなり、
前記レジスタ出力制御部は、
前記バイパス判定部がデータ干渉の発生を判定した場合であっても、前記条件実行判定部から送信される判定結果に従って、前記制御レジスタとバイパス経路を経由するデータ転送を停止し、前記汎用レジスタに格納していた前記演算結果のデータを使用するように前記バイパス経路以外のデータ転送経路を介した前記制御レジスタのデータ転送を制御することを特徴とする請求項１記載の条件実行命令を有するマイクロプロセッサ。
【請求項３】
実行条件フィールドおよび演算フィールドを含む条件実行命令等の各種命令をデコードする命令デコーダと、
条件が設定される汎用フラグを含む制御レジスタと、
前記命令デコーダの出力に従って命令を実行する命令実行部と、
前記命令実行部の実行結果を格納する複数の汎用レジスタと、
前記命令実行部に設けられ、前記汎用レジスタを経由することなく、直前に実行された命令の演算結果を格納している複数のレジスタ内の前記演算結果をバイパスするための複数のバイパス経路と、
前記汎用レジスタを経由するデータ転送のためのデータ経路とを備え、
前記命令デコーダは、
前記汎用フラグ内に設定された条件と前記実行条件フィールド内に設定された条件が合致しているか否かを判定する条件実行制御部と、前記条件実行判定部の判定に従って、前記複数のバイパス経路および前記汎用レジスタを経由する前記データ経路のうちいずれかを介したデータ転送を制御するバイパス制御部とを有することを特徴とする条件実行命令を有するマイクロプロセッサ。
【請求項４】
バイパス制御部は、
命令実行部で実行される命令のパイプラインでデータ干渉が発生しているか否かを判定するバイパス判定部と、
前記バイパス判定部の判定結果に基づいて、バイパス経路を介した制御レジスタのデータ転送動作を制御するレジスタ出力制御部とを有し、
条件実行制御部は、
実行しようとする条件実行命令が有効であるか無効であるかを判定する条件実行判定部と、
前記条件実行判定部の判定結果に基づいて汎用レジスタへのデータの書き込みを制御する汎用レジスタ書き込み制御部とを有し、
前記バイパス判定部がデータ干渉の発生を判定した場合であっても、前記レジスタ出力制御部は、前記条件実行判定部から送信される判定結果に従って、前記複数のバイパス経路および前記データ経路のいずれかを選択して前記複数のレジスタあるいは前記複数の汎用レジスタのいずれかを介したデータ転送を制御することを特徴とする請求項３記載の条件実行命令を有するマイクロプロセッサ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、命令の一部に含まれる実行条件フィールドを用いて命令の実行を制御する条件実行命令を備えたマイクロプロセッサに関するものである。
【０００２】
【従来の技術】
従来より、分岐のペナルティを減少させ、マイクロプロセッサの性能向上のための手法として、条件実行などの手法が検討されている。従来のＡＲＭマイクロプロセッサでは、条件実行の判定に用いるためのフラグとして、ネガティブフラグ（Ｎ），ゼロフラグ（Ｚ），キャリーフラグ（Ｃ），オーバーフローフラグ（Ｖ）という特定の命令でのみ設定される専用フラグを用いている。
【０００３】
また、マイクロプロセッサの性能向上のための従来の他の手法として、動作周波数の高速化を目的としてパイプラインの段数を多くした場合における演算結果のバイパス処理を用いた手法がある。この手法では、例えば、演算結果を汎用レジスタへ書き込む命令を実行し、次にそのレジスタを参照する命令を実行した場合、後者の命令でレジスタを参照する時点では、前者の命令における演算結果が汎用レジスタへ書き込まれていないため、前者の命令の演算結果を汎用レジスタを経由することなく、専用に設けられたバイパス経路を介して直接参照することで命令を効率良く実行する手法である。
【０００４】
【発明が解決しようとする課題】
しかしながら、従来の条件実行命令を有するマイクロプロセッサにおいてバイパス経路を使用する場合、例えば、演算結果を汎用レジスタ内に書き込む条件実行命令を実行し、次にその演算結果が書き込まれた汎用レジスタを参照するのにバイパス経路を用いる命令を実行した場合に、前者の命令の実行条件が満たされず命令が無効となった場合には、後者の命令で間違ったデータをバイパスすることになり、誤動作を引き起こすという課題があった。
【０００５】
この発明は上記のような課題を解決するためになされたもので、データを直接転送するバイパス経路を設けた条件実行命令を有するマイクロプロセッサにおいて、条件実行命令の後にバイパス経路を用いる命令が続いた場合でも、パイプラインのペナルティを課することなく効率良く、また誤動作なく命令を実行可能な条件実行命令を有するマイクロプロセッサを得ることを目的とする。
【０００６】
【課題を解決するための手段】
請求項１記載の発明に係る条件実行命令を有するマイクロプロセッサは、実行条件フィールドおよび演算フィールドを含む条件実行命令等の各種命令をデコードする命令デコーダと、命令デコーダの出力に従って命令を実行する命令実行部と、命令実行部で実行された命令の演算結果を格納すると共に、条件データが設定される汎用フラグを含んでなる制御レジスタと、命令実行部で実行された命令の演算結果を格納する汎用レジスタと、命令実行部に設けられ、汎用レジスタに格納した演算結果を用いることなく、直前に実行された命令の演算結果を格納している制御レジスタ内の演算結果をバイパスするためのバイパス経路とを備える。特に、命令デコーダ内の条件実行判定部が、汎用フラグ内に設定された条件データと実行条件フィールド内に設定された条件とが合致しているか否かを判定し、バイパス制御部が条件実行判定部の判定結果に従って、バイパス経路を使用するか、若しくは、汎用レジスタに格納した演算結果を使用するかを制御して、条件実行命令の後にバイパス経路を用いる命令が続いた場合でも、パイプラインのペナルティを課することなく効率良く、また誤動作なく命令を実行するものである。
【０００７】
請求項２記載の発明に係る条件実行命令を有するマイクロプロセッサは、バイパス制御部内のバイパス判定部が、命令実行部で実行される命令のパイプラインでデータ干渉が発生しているか否かを判定し、レジスタ出力制御部が、バイパス判定部の判定結果に基づいて、バイパス経路を介した制御レジスタのデータ転送動作を制御し、また、条件実行制御部内の条件実行判定部が、実行しようとする条件実行命令が有効であるか無効であるかを判定し、汎用レジスタ書き込み制御部が条件実行判定部の判定結果に基づいて汎用レジスタへのデータの書き込みを制御する。さらに、制御レジスタが、命令実行部で実行された命令の演算結果を取得して格納するレジスタと、汎用レジスタから演算結果を取得して格納すると共に、汎用レジスタを介して取得した演算結果をバイパス経路以外の経路でデータ転送するためのデータ転送経路に接続するレジスタとを有してなり、バイパス判定部がデータ干渉の発生を判定した場合であっても、レジスタ出力制御部は、条件実行判定部から送信される判定結果に従ってレジスタの動作を停止し、また汎用レジスタに格納していた演算結果のデータを使用するようにバイパス経路以外のデータ転送経路を介した制御レジスタのデータ転送を制御して、条件実行命令の後にバイパス経路を用いる命令が続いた場合でも、パイプラインのペナルティを課することなく効率良く、また誤動作なく命令を実行するものである。
【０００８】
請求項３記載の発明に係る条件実行命令を有するマイクロプロセッサは、実行条件フィールドおよび演算フィールドを含む条件実行命令等の各種命令をデコードする命令デコーダと、条件が設定される汎用フラグを含む制御レジスタと、命令デコーダの出力に従って命令を実行する命令実行部と、命令実行部の実行結果を格納する複数の汎用レジスタと、命令実行部に設けられ、汎用レジスタを経由することなく、直前に実行された命令の演算結果を格納している複数のレジスタ内の演算結果をバイパスするための複数のバイパス経路と汎用レジスタを経由するデータ転送のためのデータ経路とを備える。特に、命令デコーダ内の条件実行制御部は、汎用フラグ内に設定された条件と実行条件フィールド内に設定された条件が合致しているか否かを判定し、バイパス制御部は、条件実行判定部の判定に従って、複数のバイパス経路および汎用レジスタを経由するデータ経路のうちいずれかを介したデータ転送を制御するので、条件実行命令の後にバイパス経路を用いる命令が続いた場合でも、パイプラインのペナルティを課することなく効率良く、また誤動作なく命令を実行するものである。
【０００９】
請求項４記載の発明に係る条件実行命令を有するマイクロプロセッサは、バイパス制御部内のバイパス判定部が、命令実行部で実行される命令のパイプラインでデータ干渉が発生しているか否かを判定し、レジスタ出力制御部が、バイパス判定部の判定結果に基づいて、バイパス経路を介した制御レジスタのデータ転送動作を制御し、条件実行制御部内の条件実行判定部が、実行しようとする条件実行命令が有効であるか無効であるかを判定し、汎用レジスタ書き込み制御部が、条件実行判定部の判定結果に基づいて汎用レジスタへのデータの書き込みを制御し、バイパス判定部がデータ干渉の発生を判定した場合であっても、レジスタ出力制御部は、条件実行判定部から送信される判定結果に従って、複数のバイパス経路およびデータ経路のいずれかを選択して複数のレジスタあるいは複数の汎用レジスタのいずれかを介したデータ転送を制御するので、条件実行命令の後にバイパス経路を用いる命令が続いた場合でも、パイプラインのペナルティを課することなく効率良く、また誤動作なく命令を実行するものである。
【００１０】
【発明の実施の形態】
以下、この発明の実施の一形態を説明する。
実施の形態１．
まず、この発明の条件実行命令を有するマイクロプロセッサの基本構成に関して説明する。
【００１１】
マイクロプロセッサのハードウエア構成
図１は、この発明の条件実行命令を有するマイクロプロセッサの全体構成を示すブロック図であり、３２ビットの内部データバスを有する３２ビットマイクロプロセッサである。図において、１は条件実行命令を有するマイクロプロセッサコア、２は命令ＲＡＭ６から６４ビット幅のＩＤバスを介して入力した命令コードをデコードする処理を行う命令デコードユニット（命令デコーダ）、３はアドレス計算を行うメモリアクセスユニット（命令実行部）、４は算術論理演算またはシフト演算を行う整数演算ユニット、５は３２ビット×６４ワードの汎用レジスタ（複数の汎用レジスタ）、７はデータが格納されるデータＲＡＭである。
【００１２】
命令デコードユニット２において、８、９はそれぞれ命令コードをデコードするデコーダ、１０はプロセッサの状態を示すプロセッサ状態語（Ｐｒｏｃｅｓｓｏｒ  Ｓｔａｔｕｓ  Ｗｏｒｄ、以下プロセッサ状態語をＰＳＷという）である。命令デコードユニット２は、さらに、制御信号１１を作成し、それをメモリアクセスユニット３へ与える。また、命令デコードユニット２は、デコーダ９のデコード結果とＰＳＷ１０の内容に基づいて制御信号１２を作成しそれを整数演算ユニット４へ与える。
【００１３】
メモリアクセスユニット３において、１３はジャンプや分岐を含まない命令を実行するとＰＣ（プログラムカウンタ）値に８を加えて次に実行する命令に対するＰＣ値を算出するとともに、ジャンプや分岐を含む命令の実行時に分岐変位をＰＣ値に加算したり、演算で指定されたアドレッシングモードに応じた計算を行ってジャンプ先の命令に対するＰＣ値を計算するＰＣ制御部である。１４は、ＰＣ制御部１３が計算したＰＣ値を３２ビット幅のＩＡバスを介して命令ＲＡＭ６へ送るとともに、命令ＲＡＭ６から命令コードを出力させるメモリ制御部である。
【００１４】
メモリ制御部１４は、３２ビット幅のＯＡバスを介してアドレスデータをデータＲＡＭ７へ転送し、命令実行に必要なデータを６４ビット幅のＯＤバスを介してアクセスする。１５は、汎用レジスタ５から３２ビット幅のＳ１バス、Ｓ２バス、Ｓ６バスを介して転送された最大３ワードのデータを用いて算術論理演算を行い、演算結果を３２ビット幅のＷ１バスを介して汎用レジスタ５に転送するＡＬＵである。１６は、汎用レジスタ５からＳ１バス、Ｓ２バス、Ｓ６バスを介して転送されたデータを用いてシフト演算を行い、演算結果をＷ１バスを介して汎用レジスタ５へ転送するシフタである。
【００１５】
メモリアクセスユニット３に対して、Ｓ１バス、Ｓ２バス、Ｓ５バス、Ｓ６バスを介して、３２ビット長のデータを一時に４ワード転送することが可能である。従って、例えば、第１のレジスタの内容と第２のレジスタの内容との和でアドレッシングされるメモリの領域に第３のレジスタの内容をストアするとともに、第３のレジスタの内容をストアしたアドレスに所定値を加算して得られる値でアドレッシングされるメモリの領域に、第４のレジスタの内容をストアする２ワードストア命令を実現することができる。
【００１６】
また、メモリアクセスユニット３は、Ｗ１バスおよびＷ３ＥバスおよびＷ３Ｏバスを介して、メモリアクセスユニット３内での２ワードの演算結果またはデータＲＡＭ７から転送された２ワードのデータを、汎用レジスタ５に転送することができる。
【００１７】
整数演算ユニット４において、１７は汎用レジスタ５から３２ビット幅のＳ３バス、Ｓ４バス、Ｓ５バスを介して転送された最大３ワードのデータを用いて乗算を行い、演算結果を３２ビット幅のＷ２バス、Ｗ３Ｅバス、Ｗ３Ｏバスを介して汎用レジスタ５へ転送する乗算器である。１８は、乗算の結果を累積加算または累積減算して保持するアキュムレータである。アキュムレータとして、６４ビットのものが２本組み込まれている。１９は、汎用レジスタ５からＳ３バス、Ｓ４バス、Ｓ５バスを介して転送された最大３ワードのデータを用いて算術論理演算を行い、演算結果をＷ２バス、Ｗ３Ｅバス、Ｗ３Ｏバスを介して汎用レジスタ５へ転送するＡＬＵである。２０は、汎用レジスタ５からＳ３バス、Ｓ４バス、Ｓ５バスを介して転送されたデータを用いてシフト演算を行い、演算結果をＷ２バス、Ｗ３Ｅバス、Ｗ３Ｏバスを介して汎用レジスタ５へ転送するシフタである。
【００１８】
このマイクロプロセッサ１では、汎用レジスタ５から、最大６種類のレジスタ値を読み出すことが可能であり、読み出されたデータは、それぞれ、Ｓ１バス、Ｓ２バス、Ｓ３バス、Ｓ４バス、Ｓ５バス、Ｓ６バスへ出力される。また、汎用レジスタ５内へ、Ｗ１バス、Ｗ２バス、Ｗ３Ｅバス、Ｗ３Ｏバスを介して最大４種類のレジスタ値を同時に書き込むことが可能である。
【００１９】
図２は、図１に示したこの発明における条件実行命令を有するマイクロプロセッサ１で用いられる命令フォーマットを示す説明図である。
命令フォーマットとして、１つの命令コードで２つの演算（ｏｐｅｒａｔｉｏｎ）を指示する２演算命令のフォーマット１０１と、１つの令令コードで１つの演算を指示する１演算命令のフォーマット１０２とがある。
【００２０】
２演算命令のフォーマット１０１には、フィールド１０３およびフィールド１０４からなるフォーマットフィールドと、２つの演算フィールド１０６、１０７に付属する各実行条件フィールド１０５とがある。１演算命令のフォーマット１０２には、フィールド１０８およびフィールド１０４からなるフオーマットフィールドと、フィールド１０８、１０９、１１０からなる演算フィールドと、演算フィールドに付属する実行条件フィールド１０５とがある。
【００２１】
図３は、図１に示したこの発明における条件実行命令を有するマイクロプロセッサ１で用いられる命令フォーマットフィールドを示す説明図であり、図において、ＦＭは、フィールド１０３およびフィールド１０４からなる２ビットの値である。
【００２２】
フォーマットフィールドの値がＦＭ＝００の場合、この命令は２演算命令であることを示す。そして、演算フィールド１０６で指示されたｏｐｅｒａｔｉｏｎ＿０の演算と演算フィールド１０７で指示されたｏｐｅｒａｔｉｏｎ＿１の演算とが、デコード直後のクロックサイクルで並列に実行される。ｏｐｅｒａｔｉｏｎ＿０の演算はメモリアクセスユニット３で実行され、ｏｐｅｒａｔｉｏｎ＿１の演算は整数演算ユニット４で実行される。
【００２３】
フォーマットフィールドの値がＦＭ＝０１の場合、この命令は２演算命令であることを示す。そして、ｏｐｅｒａｔｉｏｎ＿０の演算がデコード直後のクロックサイクルに実行され、ｏｐｅｒａｔｉｏｎ＿１の演算がｏｐｅｒａｔｉｏｎ＿０の演算に対して１クロックサイクル遅れて実行される。
【００２４】
フォーマットフィールドの値がＦＭ＝１０の場合、この命令は２演算命令であることを示す。そして、ｏｐｅｒａｔｉｏｎ＿１の演算がデコード直後のクロックサイクルに実行され、ｏｐｅｒａｔｉｏｎ＿０の演算がｏｐｅｒａｔｉｏｎ＿１の演算に対して１クロックサイクル遅れて実行される。
【００２５】
フォーマットフィールドの値がＦＭ＝１１の場合、この命令は１演算命令であることを示す。そして、フィールド１０８、１０９、１１０からなる演算フィールドで指示された１つの演算がデコード直後のクロックサイクルで実行される。
【００２６】
図４は、図１に示したこの発明における条件実行命令を有するマイクロプロセッサで用いられる命令フォーマット内の実行条件フィールド１０５の詳細な内容を示す説明図である。
実行条件フィールド１０５は、マイクロプロセッサ１の実行コントロールフラグＦ０、Ｆ１の値に応じて、演算フィールド１０６、１０７のｏｐｅｒａｔｉｏｎ＿０の演算やｏｐｅｒａｔｉｏｎ＿１の演算、および演算フィールド１０８、１０９、１１０の演算が有効であるか無効であるかを定める。実行コントロールフラグＦ０、Ｆ１の内容については後述する。
【００２７】
演算が有効であるとは、演算結果がレジスタ、メモリおよびフラグに反映され、その演算による動作の結果が残ることを意味する。演算が無効であるとは、演算結果がレジスタ、メモリおよびフラグに反映されず、あたかも無効演算（ＮＯＰ）が実行されたかのような動作の結果が残ることを意味する。
【００２８】
実行条件フィールド１０５の値がＣＣ＝０００ときには、実行コントロールフラグＦ０、Ｆ１の値に関わらず常に演算は有効である。命令に／ＴＸを記述したときには、ＣＣ＝０００であることを意味する。
【００２９】
実行条件フィールド１０５の値がＣＣ＝００１のときには、実行コントロールフラグＦ０＝真のときにのみ演算は有効である。実行コントロールフラグＦ１の状態はいずれでもよい。命令に／ＦＸを記述したときには、ＣＣ＝００１であることを意味する。
【００３０】
実行条件フィールド１０５の値がＣＣ＝０１０のときには、実行コントロールフラグＦ０＝偽のときにのみ演算は有効である。実行コントロールフラグＦ１の状態はいずれでもよい。命令に／ＦＸを記述したときには、ＣＣ＝０１０であることを意味する。
【００３１】
実行条件フィールド１０５の値がＣＣ＝０１１のときには、実行コントロールフラグＦ１＝真のときにのみ演算は有効である。実行コントロールフラグＦ０の状態はいずれでもよい。命令に／ＸＴを記述したときには、ＣＣ＝０１１であることを意味する。ＣＣ＝１００のときには、実行コントロールフラグＦ１＝偽のときにのみ演算は有効である。実行コントロールフラグＦ０の状態はいずれでもよい。命令に／ＸＦを記述したときには、ＣＣ＝１００であることを意味する。
【００３２】
実行条件フィールド１０５の値がＣＣ＝１０１のときには、実行コントロールフラグＦ０＝真かつＦ１＝真のときにのみ演算は有効である。命令に／ＴＴを記述したときには、ＣＣ＝１０１であることを意味する。ＣＣ＝１１０のときには、実行コントロールフラグＦ０＝真かつＦ１＝偽のときのみ演算は有効である。命令に／ＴＦを記述したときには、ＣＣ＝１１０であることを意味する。
【００３３】
実行条件フィールド１０５の値がＣＣ＝１１１のときの動作は未定義であり、ユーザは、ＣＣ＝１１１となる命令を用いることはできない。
【００３４】
図５は、図１に示したこの発明における条件実行命令を有するマイクロプロセッサで用いられる命令フォーマット内の演算フィールドを示す説明図である。図において、フォーマット１１１〜１１７は、それぞれ２８ビットで表現される短型の演算フィールド１０６または演算フィールド１０７によるものである。フォーマット１１８、１１９は、フィールド１０８、１０９、１１０で構成される長型の演算フィールドによるものである。フォーマット１１１（Ｓｈｏｒｔ＿Ｍ）は、演算内容を指定するフィールド１２０、レジスタ番号を指定する２つのフィールド１２１、１２２、レジスタ番号または６ビット長の即値指定するフィールド１２３、およびフィールド１２３がレジスタ番号を示すのか即値を示すのかを指定するフィールド１２４で構成される。
【００３５】
図５の説明図に示すように、フィールド１２４の値Ｘが「００」、「０１」または「１１」であるときにはフィールド１２３がレジスタ番号を示していることを示し、「１０」であるときには即値を示していることを示す。このフォーマット１１１は、レジスタ間接アドレッシングのメモリアクセス演算に用いられる。
【００３６】
フォーマット１１２（Ｓｈｏｒｔ＿Ａ）は、演算内容を指定するフィールド１２０、レジスタ番号を指定する２つのフィールド１２１、１２２、レジスタ番号または６ビット長の即値を指定するフィールド１２３、およびフィールド１２３がレジスタ番号を示すのか即値を示すのかを指定するフィールド１２５で構成される。
【００３７】
図５の説明図に示すように、フォーマット１１２内のフィールド１２５の値Ｘが「０」であるときにはフィールド１２３がレジスタ番号を示していることを示し、「１」であるときには即値を示していることを示す。このフォーマット１１２は、算術演算、論理演算、シフト演算およびビット演算に用いられる。
【００３８】
フォーマット１１３（Ｓｈｏｒｔ＿Ｂ１）は、演算内容を指定するフィールド１２０およびレジスタ番号を指定するフィールド１２６で構成される。このフォーマット１１３は、レジスタ指定によるジャンプ命令および分岐命令に用いられる。
【００３９】
フォーマット１１４（Ｓｈｏｒｔ＿Ｂ２）は、演算内容を指定するフィールド１２０および１８ビット長のディスプレイスメントのフィールド１２７で構成される。このフォーマット１１４は、ジャンプ命令および分岐命令に用いられる。
【００４０】
フォーマット１１５（Ｓｈｏｒｔ＿Ｂ３）は、演算内容を指定するフィールド１２０、レジスタ番号を指定するフィールド１２１、レジスタ番号または１２ビット長の即値を指定するフィールド１２８、フィールド１２８がレジスタ番号を示すのか即値を示すのかを指定するフィールド１２９、およびゼロ判定に基づいてフィールド１２１に基づく条件ジャンプまたは条件分岐を行うか否かを指定するフィールド１３０で構成される。このフォーマット１１５は、条件ジャンプ命令および条件分岐命令に使用される。
【００４１】
フォーマット１１６（Ｓｈｏｒｔ＿Ｄ１）は、演算内容を指定するフィールド１２０、レジスタ番号を指定するフィールド１２１、レジスタ番号または１２ビット長の即値を指定するフィールド１２８、フィールド１２８がレジスタ番号を示すのか即値を示すのかを指定するフィールド１２９で構成される。このフォーマット１１６は、条件ジャンプ命令、条件分岐命令およびリピート命令に使用される。
【００４２】
フォーマット１１７（Ｓｈｏｒｔ＿Ｄ２）は、演算内容を指定するフィールド１２０、レジスタ番号または１２ビット長の即値を指定するフィールド１２８、フィールド１２８がレジスタ番号を示すのか即値を示すのかを指定するフィールド１２９、遅延命令（ディレイド命令）に関するフィールド１３１で構成される。このフォーマット１１７は、ディレイドジャンプ命令、ディレイド分岐命令およびリピート命令に使用される。
【００４３】
フォーマット１１８（Ｌｏｎｇ１）は、演算内容を指定するフィールド１２０、レジスタ番号を指定する２つのフィールド１２１、１２２、３２ビット長の即値を指定するフィールド１３２で構成される。このフォーマット１１８は、複雑な算術演算、大きな即値を用いる算術演算、大きなディスプレイスメント付きレジスタ間接アドレッシングのメモリアクセス演算、大きな変位の分岐演算および絶対番値へのジャンプ命令などに使用される。
【００４４】
フォーマット１１９（Ｌｏｎｇ２）は、演算内容を指定するフィールド１２０、レジスタ番号を指定する２つのフィールド１２１、１２２、３２ビット長の即値を指定するフィールド１３２、およびゼロ判定に基づいてフィールド１３２に基づく条件ジャンプまたは条件分岐を行うか否かを指定するフィールド１３３で構成される。
【００４５】
このフォーマット１１９は、大きな分岐変位を持つ条件ジャンプや条件分岐命令に使用される。
【００４６】
図６は、図１に示したこの発明における条件実行命令を有するマイクロプロセッサのレジスタの構成を示す説明図である。
このマイクロプロセッサ１は、６４本の３２ビット長の汎用レジスタ５、１２本の制御レジスタ１５０、および２本のアキュムレータ１８を備えている。Ｒ０の汎用レジスタ１４０の内容は常に０であり、そこへの書き込みは無視される。Ｒ６２の汎用レジスタは、サブルーチンからの戻り先アドレスが設定されるリンクレジスタである。Ｒ６３の汎用レジスタは、スタックポインタであり、ＰＳＷ１０のＳＭフィールドの値に応じてユーザスタックポインタ（ＳＰＵ）または割り込みスタッタポインタ（ＳＰＩ）として動作する。制御レジスタ１５０には、プログラムカウンタ１５１、ＰＳＷ１０、および各種の専用レジスタが含まれる。
【００４７】
図５に示すフォーマット１１２による演算では、６４本の汎用レジスタ５のそれぞれを上位１６ビットと下位１６ビットとに分けてアクセスできる。また、２本のアキュムレータ１８を、上位３２ビットと下位３２ビットとに分けて別々にアクセスできる。
【００４８】
図７は、図１に示したこの発明における条件実行命令を有するマイクロプロセッサのレジスタ内のＰＳＷを示す説明図である。
ＰＳＷ１０の上位１６ビットは、スタックポインタを切り替えるためのＳＭフィールド１７１、ソフトウェアデバッガトラップ（ＳＤＢＴ）の検出を示すＥＡフィールド１７２、ＳＤＢＴの許可を指定するＤＢフィールド１７３、割り込み許可を指定するＩＥフィールド１７４、リピート動作の許可を指定するＲＰフィールド１７８、モジュロアドレッシングの許可を指定するＭＤフィールド１７６がある。
【００４９】
下位１６ビットは、フラグフィールド１８０である。フラグフィールド１８０には８個のフラグがあり、その中のＦ０フラグ１８１およびＦ１フラグ１８２は演算の有効／無効を指定する。各フラグの値は、比較演算や算術演算の結果に応じて変化する。また、フラグ初期化演算で初期化したり、フラグ値書き込み演算では任意の値をフラグフィールド１８０に書き込むことによって変化する。フラグフィールド１８０の内容は、フラグ値読み出し演算によって読み出される。
【００５０】
以下、この発明の条件実行命令を有するマイクロプロセッサ１の命令一覧を示す。
【００５１】
0003547585.tif 000002
【００５２】
0003547585.tif 000003
【００５３】
0003547585.tif 000004
【００５４】
0003547585.tif 000005
reserved
【００５５】
0003547585.tif 000006
【００５６】
0003547585.tif 000007
【００５７】
0003547585.tif 000008
【００５８】
0003547585.tif 000009
【００５９】
0003547585.tif 000010
【００６０】
0003547585.tif 000011
【００６１】
0003547585.tif 000012
【００６２】
0003547585.tif 000013
【００６３】
図８は、図１に示したこの発明における条件実行命令を有するマイクロプロセッサ１の並列２命令実行時のパイプライン動作を示す説明図である。
この動作は、命令のフォーマットフィールドの値ＦＭ＝００のときに実行される。パイプライン１９０、１９５は、ＩＦステージ１９１、Ｄ／Ａステージ１９２、Ｅ／Ｍステージ１９３、Ｗステージ１９４で構成される。並列２命令実行時には、メモリアクセスユニット３での実行１９０と整数演算ユニット４での実行１９５が並列に行われる。
【００６４】
図９は、図１に示したこの発明における条件実行命令を有するマイクロプロセッサのパイプライン動作を示す説明図であり、図において、各ステージはクロックに同期しており、クロックのＨｉｇｈの期間とＬｏｗの期間により、２つの期間に分割される。
【００６５】
ＩＦステージのクロックがＨｉｇｈのときがＩ１期間、ＬｏｗのときがＩ２期間、Ｄ／ＡステージのクロックがＨｉｇｈのときがＤ１期間、ＬｏｗのときがＤ２期間、Ｅ／ＭステージのクロックがＨｉｇｈのときがＥ１期間、ＬｏｗのときがＥ２期間、ＩＦステージのクロックがＨｉｇｈのときがＷ１期間、ＬｏｗのときがＷ２期間である。
【００６６】
ＩＦステージでは命令のフェッチを行い、Ｄ／ＡステージではＤ１期間内に命令のデコード及び汎用レジスタのリードを行い、Ｄ２期間内にメモリのアドレス計算を行う。Ｅ／ＭステージとＷステージのＷ１期間では演算の実行及びメモリのアクセスを行い、ＷステージのＷ２期間にて汎用レジスタへの書き込みを行う。
【００６７】
図１０は、マイクロプロセッサ１においてデータ干渉が起こる場合のプログラム例である。データ干渉については後述する。
【００６８】
図において、ＡＤＤ命令は、第２オペランド及び第３オペランドで指定される汎用レジスタの値を加算し、演算結果を第１オペランドで指定される汎用レジスタに書き込む命令である。ＡＤＤ命令２００では、汎用レジスタＲ２の値及び汎用レジスタＲ３の値が加算され、その加算結果が、汎用レジスタＲ４に書き込まれる。
【００６９】
ＡＤＤ命令２１０では、汎用レジスタＲ１０の値及び汎用レジスタＲ４の値が加算され、その加算結果が、汎用レジスタＲ１１内に書き込まれる。ＡＤＤ命令２１０において、汎用レジスタＲ４の値は、ＡＤＤ命令２００の加算結果と等しい。
【００７０】
ＡＤＤ命令２００において、汎用レジスタＲ４への加算結果の書き込みは、Ｗ２期間内に行われるために、ＡＤＤ命令２１０のＤ２期間では、この汎用レジスタＲ４への加算結果の書き込みはまだ終っていないため、ＡＤＤ命令２１０のＤ１期間で読み出した汎用レジスタＲ４の値は、演算に使用することができない。このような状況をデータ干渉と呼ぶ。データ干渉が起こる状況では、ＡＤＤ命令２００の加算結果を、汎用レジスタＲ４を経由せずに専用のデータ転送経路（バイパス経路）を介してＡＤＤ命令２１０のＤ２期間に渡す制御を行う。
【００７１】
図１１は、図１０のプログラムを実行したときのパイプラインの動作を示した説明図であり、図において、２２０は命令２００に対応したパイプライン、２３０は命令２１０に対応したパイプラインである。パイプライン２２０とパイプライン２３０で同じ列にあるステージがそれぞれ同時に実行されることを示している。図１１内の矢印が示すように、パイプライン２２０のＥ２期間からパイプライン２３０のＤ２期間に加算結果をバイパス経路を介して渡すことにより、パイプラインを乱さずに命令の実行を行う。
【００７２】
図１２は、図１０に示すプログラムを実行するときのマイクロプロセッサ１の動作を説明するためのブロック図であり、図１に示すマイクロプロセッサ１のブロック図と同一の参照番号を用いている。即ち、ＡＬＵ１５、汎用レジスタ５、メモリアクセスユニット３、ＭＵデコーダ８は、図１に示したものと同一構成要素である。
【００７３】
メモリアクセスユニット３において、２４０はＤ２バスに出力されたデータをＥ１期間内に取り込み、取り込んだデータをＡＬＵ１５に出力するＥ１レジスタ、２４１は、ＡＬＵ１５からの出力データをＥ１バスを介してＥ２期間内に取り込み、取り込んだデータをＥ２バスに出力するとともに、レジスタ出力制御部２５２から出力される制御信号に従って取り込んだデータをバイパス経路Ｂ０を経由してＤ２バスへ出力するＥ２レジスタ、２４２は汎用レジスタ５の出力をＳ２バスを介してＤ２期間内に取り込み、レジスタ出力制御部２５２の出力に従って取り込んだデータをデータ経路Ｄ０を経由してＤ２バスへ出力するＤ２レジスタ、２４３はＥ２レジスタ２４１の出力をＥ２バスを介してＷ１期間内に取り込み、取り込んだデータをＷ１バスに出力するＷ１レジスタである。
【００７４】
ＭＵデコーダ８において、２５０はバイパス制御を行うバイパス制御部、２６０は条件実行命令における制御を行う条件実行制御部である。
【００７５】
バイパス制御部２５０において、２５１はデータ干渉が起こっているか否かを判定するバイパス判定部、２５２はバイパス判定部の判定結果および条件実行判定部２６１の判定結果に従って、Ｅ２レジスタ２４１およびＤ２レジスタ２４２にＤ２バスへの出力を制御する信号を出力するレジスタ出力制御部である。
【００７６】
条件実行制御部２６０において、２６１は条件実行命令が有効であるか無効であるかを判定する条件実行判定部、２６２は条件実行判定部２６１の判定結果に従って、汎用レジスタ５への書き込みを制御する信号を出力する汎用レジスタ書き込み制御部である。
【００７７】
図１３は、条件実行判定部２６１を示すブロック図であり、図において、２７０は図２における実行条件フィールド１０５と同じものである。２７１は図７におけるＦ０フラグ１８１およびＦ１フラグ１８２と同じものである。２７２は実行条件フィールド２７０に設定されている条件をデコードし実行コントロールフラグ２７１に設定されている条件と合致しているか否かを判断するデコーダである。
【００７８】
次に動作について説明する。
先ず、図１０に示すプログラムを実施の形態１の条件実行命令を有するマイクロプロセッサ１が実行したときの動作について説明する。
【００７９】
図１０に示すプログラム内の命令２００が実行され得られる加算結果は、ＡＬＵ１５から出力され、Ｅ１バスを介して、命令２００のＥ２期間内にＥ２レジスタ２４１に格納される。Ｅ２レジスタ２４１からの出力は、Ｅ２バスを介して命令２００のＷ１期間内にＷ１レジスタ２４３に格納される。
【００８０】
命令２００の実行の場合には、実行条件フィールド２７０はＣＣ＝０００の値を持ち、前に述べたように実行コントロールフラグ２７１の値によらずいつでも当該命令は有効である。従って、条件実行判定部２６１は、当該命令が有効であると判定し判定結果を汎用レジスタ書き込み制御部２６２およびレジスタ出力制御部２５２に出力する。汎用レジスタ書き込み制御部２６２は、条件実行判定部２６１の判定結果に従って書き込むことを許可する制御信号を汎用レジスタへ出力する。
【００８１】
Ｗ１レジスタ２４３に格納されたデータは、汎用レジスタ書き込み制御部２６２の制御信号に従って、Ｗ１バスを介して汎用レジスタ内に、命令２００のＷ２期間内に書き込まれる。命令２１０においてＲ４のデータは、汎用レジスタ５からＳ２バスを介して命令２１０のＤ２期間内にＤ２レジスタ２４２に取り込まれる。
【００８２】
バイパス判定部２５１は、命令２１０がデータ干渉を起こしていると判定し、判定結果をレジスタ出力制御部２５２へ出力する。レジスタ出力制御部２５２は、バイパス判定部２５１の判定結果に従って、命令２００の加算結果を保持しているＥ２レジスタ２４１に、Ｄ２バスへの出力を許可することを意味する制御信号を出力し、汎用レジスタ５のデータを保持するＤ２レジスタ２４２にＤ２バスへの出力を許可しないことを意味する制御信号を出力する。
【００８３】
Ｅ２レジスタ２４１は、レジスタ出力制御部２５２の制御信号に従って保持したデータのＤ２バスへの出力を行う。一方、Ｄ２レジスタ２４２は、レジスタ出力制御部２５２の制御信号に従って保持したデータのＤ２バスへの出力を行わない。Ｅ１レジスタ２４０は、Ｅ２レジスタ２４１からの出力データをＤ２バスを介して命令２１０のＥ１期間内に取り込み、取り込まれたデータをＡＬＵ１５へ出力する。ＡＬＵ１５は、Ｅ１レジスタ２４０からの出力データをもとに命令２１０の加算演算を行う。
【００８４】
次に、図１０に示すプログラム内の命令２００が条件実行命令であった場合の実施の形態１の条件実行命令を有するマイクロプロセッサ１の動作について説明する。
【００８５】
図１４は、図１０に示すプログラム内の命令２００が、条件実行命令である場合のデータ干渉の発生を示す説明図である。図において、命令２８０は条件実行命令であり、命令に／ＴＸが記述されているため、前述したように実行コントロールフラグＦ０が１のとき命令２８０は有効になり、実行コントロールフラグＦ０が０のとき命令２８０は無効となる。実行コントロールフラグＦ１の値は考慮されない。
【００８６】
命令２８０が有効のときには、命令２９１の汎用レジスタＲ４の値は、命令２８０の加算結果と一致し、命令２８０が無効のときは、命令２９１の汎用レジスタＲ４の値は、命令２８０を実行する以前の値と一致する。図１４に示す命令２８０の加算結果は、ＡＬＵ１５から出力され、Ｅ１バスを介して命令２００のＥ２期間内にＥ２レジスタ２４１内に格納される。Ｅ２レジスタ２４１からの出力は、Ｅ２バスを介して命令２８０のＷ１期間内にＷ１レジスタ２４３内に格納される。
【００８７】
命令２８０の場合には、実行条件フィールド２７０はＣＣ＝００１の値を持ち、条件実行判定部２６１は、実行コントロールフラグ２７１のＦ０フラグが１のとき命令２８０は有効であると判定し、Ｆ０フラグが０のとき命令２８０は無効であると判定し、判定結果を汎用レジスタ書き込み制御部２６２に出力するとともに、レジスタ出力制御部２５２に出力する。
【００８８】
まず、命令２８０が有効であった場合、マイクロプロセッサ１が図１０に示すプログラムを実行したときと同じ動作を行う。
次に、命令２８０が無効であったときの動作を説明する。
汎用レジスタ書き込み制御部２６２は、条件実行判定部２６１の判定結果に従って、書き込むことを許可しないことを指示する制御信号を汎用レジスタ５に対して出力する。Ｗ１レジスタ２４３内に格納されたデータは、汎用レジスタ書き込み制御部２６２の制御信号に従い、汎用レジスタ５への書き込みは行われない。命令２９０においてＲ４のデータは、汎用レジスタ５からＳ２バスを介して命令２９０のＤ２期間内にＤ２レジスタ２４２内に取り込まれる。
【００８９】
バイパス判定部２５１は、命令２１０がデータ干渉を起こしていると判定し、判定結果をレジスタ出力制御部２５２へ出力する。レジスタ出力制御部２５２は、条件実行判定部２６１の判定結果に従って、バイパス判定部２５１の判定結果によらず、Ｅ２レジスタ２４１に対してバイパス経路Ｂ０を経由して行われるＤ２バスへの出力を許可しないことを意味する制御信号を出力する。さらに、レジスタ出力制御部２５２は、汎用レジスタ５のデータを保持するＤ２レジスタ２４２に、データ経路Ｄ０を経由したＤ２バスへのデータ出力を許可することを指示する制御信号を出力する。Ｅ２レジスタ２４１は、レジスタ出力制御部２５２から送信される制御信号に従って、保持したデータのバイパス経路Ｂ０を経由して行われるＤ２バスへの出力を実行しない。
【００９０】
一方、Ｄ２レジスタ２４２は、レジスタ出力制御部２５２の制御信号に従って保持したデータのＤ２バスへの出力を行う。Ｅ１レジスタ２４０は、Ｅ２レジスタからの出力データをＤ２バスを介して命令２１０のＥ１期間内に取り込み、取り込まれたデータをＡＬＵ１５へ出力する。ＡＬＵ１５は、Ｅ１レジスタからの出力データをもとに命令２８０の加算演算を行う。
【００９１】
以上のように、この実施の形態１によれば、条件実行命令を含む命令のパイプライン間でデータ干渉が発生しているか否かを判定し、バイパス判定部２５１での判定結果に基づいて行われるレジスタ出力制御部２５２の出力を、実行条件制御部２６０内の条件実行判定部２６１での判定結果に従って制御し、バイパス経路Ｂ０やデータ経路Ｄ０を介したデータ転送を制御するようにしたので、条件実行命令を実行するパイプラインにおいてデータ干渉が発生した場合でも、命令を効率良く実行し、データ干渉による誤動作を回避できる。
【００９２】
実施の形態２．
図１５は、この発明の実施の形態２におけるマイクロプロセッサで実行されるプログラム例を示す説明図である。実施の形態１のマイクロプロセッサの構成要素以外のこの実施の形態２のマイクロプロセッサの構成要素は、図１７に示す説明図を用いて後述する。なお、図１および図１２に示した実施の形態１のマイクロプロセッサの構成要素と同様のものについては、同一符号を用い、またそれらの説明を省略する。
【００９３】
図１５におけるＬＤ２Ｗ命令３００は、第２オペランド及び第３オペランドで指定された汎用レジスタに設定されている値の和で示されるメモリアドレスから８ｂｙｔｅのデータを読み出し、第１オペランドで指定された汎用レジスタおよび、その汎用レジスタ内のレジスタ番号に１を加えた汎用レジスタ内に読み出したデータを書き込む命令である。また、図１５において、第２オペランドのプラス（＋）記号は、アドレッシングモードがポストインクリメントであることを示しており、メモリからデータを読み出した後、第２オペランドで指定されている汎用レジスタの値に８が加算される。
【００９４】
図１５に示すプログラムにおいて、命令３００はレジスタＲ２およびＲ３の値の和で示されるメモリ内のメモリアドレスから８ｂｙｔｅのデータを読み出し、読み出したデータをレジスタＲ１０、Ｒ１１へ書き込む命令である。また、レジスタＲ２へは、メモリからデータが読み出された後、８が加算される。
【００９５】
命令３１０は条件実行命令である。命令３１０において記号／ＴＸは、実行コントロールフラグＦ０が１のとき命令３１０は有効になり、実行コントロールフラグＦ０が０のとき命令３１０は無効となることを示している。実行コントロールフラグＦ１の値は考慮されない。命令３１０が有効のときは、命令３００で更新されたレジスタＲ２の値およびＲ３の値の和で示されるメモリアドレスからデータが読み出され、読み出されたデータは、レジスタＲ１２、Ｒ１３内に書き込まれる。
【００９６】
また、レジスタＲ２はメモリからデータが読み出された後、８が加算される。命令３１０が無効のときには、レジスタＲ１２、Ｒ１３および、Ｒ２の値は変化しない。
【００９７】
命令３２０は、命令３１０が有効のときには、命令３１０で更新されたレジスタＲ２の値およびＲ３の値の和で示されるメモリ内のメモリアドレスからデータが読み出され、読み出されたデータはレジスタＲ１４、Ｒ１５へ書き込まれる。命令３１０が無効のときには、命令３００で更新されたレジスタＲ２の値およびＲ３の値の加算で示されるメモリアドレスのデータが読み出され、読み出されたデータは、レジスタＲ１４、Ｒ１５内に書き込まれる。また、レジスタＲ２へは、メモリからデータが読み出された後、８が加算される。
【００９８】
図１６は、実施の形態２のマイクロプロセッサ１が、図１５に示すプログラムを実行したときのパイプラインの動作を示した説明図であり、図において、命令３００に対応したパイプラインが３３０であり、命令３１０に対応したパイプラインが３４０であり、命令３２０に対応したパイプラインが３５０である。
【００９９】
図１６において、パイプライン３３０、３４０および３５０で同じ列にあるステージがそれぞれ同時に実行されることを示している。命令３００において、汎用レジスタＲ２に８が加算された値が書き戻されるのはＷ２期間であるため、命令３１０においてレジスタＲ２の値が読み出されるＤ１期間ではまだ更新されておらず、データ干渉が起こっている。そのため、矢印３３１に示すように命令３００のＤ１期間で更新されたＲ２の値を、命令３００のＥ１期間から命令３１０のＤ１期間に渡す。
【０１００】
命令３１０において、命令が有効であるとき、レジスタＲ２の値に８が加算された値が書き戻されるのは、Ｗ２期間であるため、命令３２０においてレジスタＲ２の値が汎用レジスタ５から読み出されるＤ１期間では、レジスタＲ２の値はまだ更新されておらず、データ干渉が起こっている。そのため、矢印３４１に示すように、命令３２０のＤ１期間で更新されたレジスタＲ２の値を命令３１０のＥ１期間から命令３２０のＤ１期間に渡す。
【０１０１】
命令３１０が無効であるとき、命令３００においてレジスタＲ２の値に８が加算された値が書き戻されるのはＷ２期間であるため、命令３２０においてレジスタＲ２が汎用レジスタ５から読み出されるＤ１期間ではまだ更新されておらず、データ干渉が起こっている。そのため、矢印３３２に示すように、命令３００のＤ１期間で更新されたＲ２の値を命令３００のＷ１期間から命令３２０のＤ１期間に渡す。
【０１０２】
図１７は、図１５に示すプログラムを実行するときの実施の形態２のマイクロプロセッサの動作を説明するためのブロック図である。図において、汎用レジスタ５、メモリアクセスユニット３、ＭＵデコーダ８、データＲＡＭ７は、図１に示したものと同一の構成要素からなる。また、条件実行制御部２６０は、図１２に示したものと同じ構成要素からなる。
【０１０３】
図１７に示す命令実行ユニットとしてのメモリアクセスユニット３において、３６０はインクリメンタ３７０から得られる出力をＤ２期間内に取り込み、取り込んだデータをＥ１レジスタ３６１へ出力するＤ２レジスタである。３６１はＤ２レジスタ３６０から出力されたデータをＥ１期間内に取り込み、取り込んだデータをＥ２レジスタ３６２に出力するとともに、レジスタ出力制御部３８２から出力される制御信号に従って、バイパス経路Ｂ１を介してＳ１バスへ出力するＥ１レジスタである。
【０１０４】
３６３は加算器３７１からの出力データをＤ２期間内に取り込み、取り込んだデータをＭ１レジスタ３６４へ出力するＤ２レジスタである。３６４はＤ２レジスタ３６３の出力をＥ１期間内に取り込み、取り込んだデータをＯＡバスに出力するＭ１レジスタである。３６５はＥ２バスに出力されたデータをＷ１期間内に取り込み、取り込んだデータをＷ１バスに出力するとともに、レジスタ出力制御部３８２から出力される制御信号に従って、バイパス経路Ｓ２を介してＳ１バスへ出力するＷ１レジスタである。
【０１０５】
３７０はＳ１バスに出力されたデータに８を加算した値を出力するインクリメンタである。３７１はＳ１バスおよび、Ｓ２バスに出力されたデータを入力し、それらの加算結果をＤ２レジスタ３６３に出力する加算器である。ＭＵデコーダ８において、３８０はバイパス制御を行うバイパス制御部である。
【０１０６】
バイパス制御部３８０において、３８１は命令を実行するパイプライン間でデータ干渉が発生しているか否かを判定し、さらにデータ干渉が発生している場合はどのように起こっているかを判定し、判定結果をレジスタ出力制御部３８２へ出力するバイパス判定部である。３８２はバイパス判定部３８１の判定結果および条件実行判定部２６１の判定結果に従って、バイパス経路Ｂ１を介したＥ１レジスタ３６１のデータ転送、バイパス経路Ｂ２を介したＷ１レジスタ３６５のデータ転送、およびデータ経路Ｄ１を介した汎用レジスタ５によるＳ１バスへのデータ転送を制御する制御信号を、これらのＥ１レジスタ３６１、Ｗ１レジスタ３６５および汎用レジスタ５へ出力するレジスタ出力制御部である。
【０１０７】
次に動作について説明する。
先ず、図１５に示すプログラムを実施の形態２のマイクロプロセッサが実行したときの動作について説明する。
命令３００において、汎用レジスタ５内のレジスタＲ２、Ｒ３のデータは、それぞれＳ１バス、Ｓ２バスを介して加算器３７１に出力されるとともに、レジスタＲ２のデータは、Ｓ１バスを介してインクリメンタ３７０にも出力される。加算器３７１から出力される加算結果は、Ｄ２レジスタ３６３、Ｍ１レジスタ３６４を経てＯＡバスへ出力され、データＲＡＭ７のメモリアドレスとして出力される。
【０１０８】
一方、インクリメンタ３７０では、汎用レジスタ５内のレジスタＲ２の値に８が加算され、その加算結果がＤ２レジスタ３６０を経てＥ１レジスタ３６１に出力される。Ｅ１レジスタ３６１に取り込まれたデータは、Ｅ２レジスタ３６２に取り込まれ、Ｅ２バスを介してＷ１レジスタに出力される。Ｗ１レジスタに取り込まれたデータは、Ｗ１バスを介して汎用レジスタ５内へ出力されレジスタＲ２の値が更新される。
【０１０９】
図１５に示す命令３１０では、バイパス判定部３８１は、命令３１０のレジスタＲ２が命令３００とデータ干渉を起こしていると判定し、判定結果をレジスタ出力制御部３８２に出力する。レジスタ出力制御部３８２では、バイパス判定部３８１の判定結果に従って、命令３００のレジスタＲ２の加算結果を保持しているＥ１レジスタにＳ１バスへの出力を許可することを意味する制御信号を出力し、Ｗ１レジスタ３６５および汎用レジスタ５に対してＳ１バスへの出力を許可しないことを意味する制御信号を出力する。
【０１１０】
バイパス経路Ｂ１を介してＳ１バスへ出力されたＥ１レジスタ３６１からのデータは、加算器３７１へ入力されると同時に、インクリメンタ３７０内へ入力される。加算器３７１の加算結果は、Ｄ２レジスタ３６３、Ｍ１レジスタ３６４を経てＯＡバスに出力され、データＲＡＭ７に対するメモリアドレスとして出力される。また、インクリメンタ３７０での加算結果は、Ｄ２レジスタ３６０を経てＥ１レジスタ３６１に取り込まれる。Ｅ１レジスタ３６１に取り込まれたデータは、Ｅ２レジスタ３６２内へ取り込まれ、Ｅ２バスを介してＷ１レジスタ３６５へ出力される。Ｗ１レジスタ３６５に取り込まれたデータは、Ｗ１バスを介して汎用レジスタ５へ出力される。
【０１１１】
実行条件フィールド２７０はＣＣ＝００１の値を持ち、条件実行判定部２６１は、実行コントロールフラグ２７１のＦ０フラグが１のとき命令３１０は有効であると判定し、Ｆ０フラグが０のとき命令３１０は無効であると判定し、判定結果を汎用レジスタ書き込み制御部２６２へ出力する同時に、レジスタ出力制御部３８２へ出力する。命令３１０が有効のときは、汎用レジスタ書き込み制御部２６２は、書き込みを許可することを指示する制御信号を汎用レジスタ５へ出力し、これにより汎用レジスタ５は、Ｗ１バスに出力されたＲ２の更新結果を書き込む。
【０１１２】
命令３１０が無効のときは、汎用レジスタ書き込み制御部２６２は、書き込みを許可しないことを指示する制御信号を汎用レジスタ５に対して出力し、これにより汎用レジスタ５は、Ｗ１バスに出力されたレジスタＲ２の更新結果の書き込みを実行しない。
【０１１３】
命令３２０では、バイパス判定部３８１は、命令３２０のレジスタＲ２が命令３００および命令３１０とデータ干渉を起こしていると判定し、判定結果をレジスタ出力制御部３８２へ出力する。レジスタ出力制御部３８２は、条件実行判定部２６１から出力された命令３１０に対する判定結果に従って、命令３１０が有効のときには、命令３１０のレジスタＲ２の加算結果を保持しているＥ１レジスタ３６１に対し、バイパス経路Ｂ１を介したＳ１バスへのデータ転送を許可することを指示する制御信号を出力し、命令３００のレジスタＲ２の加算結果を保持しているＷ１レジスタ３６５および、汎用レジスタ５に対しては、それぞれバイパス経路Ｂ２、データ経路Ｄ１を介したＳ１バスへの出力を許可しないことを指示する制御信号を出力する。
【０１１４】
命令３１０が無効のときには、レジスタ出力制御部３８２は、命令３１０のレジスタＲ２の加算結果を保持しているＥ１レジスタ３６１および汎用レジスタ５に対し、それぞれバイパス経路Ｂ１、データ経路Ｄ１を介したＳ１バスへのデータ転送を許可しないことを指示する制御信号を出力し、さらに命令３００のレジスタＲ２への加算結果を保持しているＷ１レジスタ３６５に対し、バイパス経路Ｂ２を介したＳ１バスへデータ転送を許可することを指示する制御信号を出力する。
【０１１５】
インクリメンタ３７０および加算器３７１は、命令３１０が有効のとき、Ｅ１レジスタ３６１から出力されたデータをＳ１バスを介して入力する。一方、命令３１０が無効のときには、Ｗ１レジスタ３６５から出力されたデータをＳ１バスを介して入力する。加算器３７１の加算結果は、Ｄ２レジスタ３６３、Ｍ１レジスタ３６４を経てＯＡバスへ出力され、データＲＡＭ７のメモリアドレスとしてデータＲＡＭ７に出力される。
【０１１６】
インクリメンタ３７０の加算結果は、Ｄ２レジスタ３６０を経てＥ１レジスタ３６１へ出力される。Ｅ１レジスタ３６１に取り込まれたデータは、Ｅ２レジスタ３６２へ取り込まれ、Ｅ２バスを介してＷ１レジスタに出力される。Ｗ１レジスタに取り込まれたデータは、Ｗ１バスを介して汎用レジスタ５へ出力される。
【０１１７】
以上のように、この実施の形態２によれば、命令デコードユニット２内に設けられた条件実行制御部２６０内の条件実行判定部２６１が、データ干渉がどのように発生しているかを判定するバイパス制御部３８０内のバイパス判定部３８１の出力を制御し、レジスタ出力制御部３８２から出力される制御信号を制御して、バイパス経路Ｂ１、Ｂ２やデータ経路Ｄ１を選択してデータ転送を実行するように構成したので、条件実行命令を含む複数の命令のパイプラインにおいてデータ干渉が発生した場合でも、命令を効率良く実行でき、データ干渉による誤動作を回避できる。
【０１１８】
【発明の効果】
以上のように、請求項１記載の発明によれば、命令デコーダ内の条件実行判定部が、汎用フラグ内に設定された条件データと実行条件フィールド内に設定された条件とが合致しているか否かを判定し、バイパス制御部が条件実行判定部の判定結果に従って、バイパス経路を使用するか否かを制御するように構成したので、条件実行命令の後にバイパス経路を用いる命令が続いた場合でも、パイプラインのペナルティを課することなく効率良く、また誤動作なく命令を実行できる効果がある。
【０１１９】
請求項２記載の発明によれば、バイパス制御部内のバイパス判定部が、命令実行部で実行される命令のパイプラインでデータ干渉が発生しているか否かを判定し、レジスタ出力制御部が、バイパス判定部の判定結果に基づいて、バイパス経路を介した制御レジスタのデータ転送動作を制御し、また、条件実行制御部内の条件実行判定部が、実行しようとする条件実行命令が有効であるか無効であるかを判定し、汎用レジスタ書き込み制御部が条件実行判定部の判定結果に基づいて汎用レジスタへのデータの書き込みを制御し、バイパス判定部がデータ干渉の発生を判定した場合であっても、レジスタ出力制御部は、条件実行判定部から送信される判定結果に従ってレジスタの動作を停止し、また汎用レジスタ内のデータを使用するようにレジスタおよび汎用レジスタを制御するように構成したので、条件実行命令の後にバイパス経路を用いる命令が続いた場合でも、パイプラインのペナルティを課することなく効率良く、また誤動作なく命令を実行できる効果がある。
【０１２０】
請求項３記載の発明によれば、命令デコーダ内の条件実行制御部が、汎用フラグ内に設定された条件と実行条件フィールド内に設定された条件が合致しているか否かを判定し、バイパス制御部が条件実行判定部の判定に従って、複数のバイパス経路および汎用レジスタを経由するデータ経路のうちいずれかを介したデータ転送を制御するように構成したので、条件実行命令の後にバイパス経路を用いる命令が続いた場合でも、パイプラインのペナルティを課することなく効率良く、また誤動作なく命令を実行できる効果がある。
【０１２１】
請求項４記載の発明によれば、バイパス制御部内のバイパス判定部が、命令実行部で実行される命令のパイプラインでデータ干渉が発生しているか否かを判定し、レジスタ出力制御部がバイパス判定部の判定結果に基づいて、バイパス経路を介した制御レジスタのデータ転送動作を制御し、条件実行制御部内の条件実行判定部が、実行しようとする条件実行命令が有効であるか無効であるかを判定し、汎用レジスタ書き込み制御部が、条件実行判定部の判定結果に基づいて汎用レジスタへのデータの書き込みを制御し、バイパス判定部がデータ干渉の発生を判定した場合であっても、レジスタ出力制御部が条件実行判定部から送信される判定結果に従って、複数のバイパス経路およびデータ経路のいずれかを選択して複数のレジスタあるいは複数の汎用レジスタのいずれかを介したデータ転送を制御するように構成したので、条件実行命令の後にバイパス経路を用いる命令が続いた場合でも、パイプラインのペナルティを課することなく効率良く、また誤動作なく命令を実行できる効果がある。
【図面の簡単な説明】
【図１】この発明の実施の形態１における条件実行命令を有するマイクロプロセッサの基本構成を示すブロック図である。
【図２】図１に示したこの発明における条件実行命令を有するマイクロプロセッサで用いられる命令フォーマットを示す説明図である。
【図３】図１に示したこの発明における条件実行命令を有するマイクロプロセッサで用いられる命令フォーマットフィールドを示す説明図である。
【図４】図１に示したこの発明における条件実行命令を有するマイクロプロセッサで用いられる命令フォーマット内の実行条件フィールドの詳細な内容を示す説明図である。
【図５】図１に示したこの発明における条件実行命令を有するマイクロプロセッサで用いられる命令フォーマット内の演算フィールドを示す説明図である。
【図６】図１に示したこの発明における条件実行命令を有するマイクロプロセッサのレジスタの構成を示す説明図である。
【図７】図１に示したこの発明における条件実行命令を有するマイクロプロセッサのレジスタ内のＰＳＷを示す説明図である。
【図８】図１に示したこの発明における条件実行命令を有するマイクロプロセッサのパイプライン動作を示す説明図である。
【図９】図１に示したこの発明における条件実行命令を有するマイクロプロセッサのパイプライン動作を示す説明図である。
【図１０】この発明の一実施の形態におけるマイクロプロセッサのデータ干渉が起こる場合のプログラム例である。
【図１１】図１０に示すプログラムを実行したときのパイプラインの動作を示した説明図である。
【図１２】図１０に示すプログラムを実行するときのマイクロプロセッサの動作を説明するためのブロック図である。
【図１３】条件実行判定部を示すブロック図である。
【図１４】図１０に示すプログラム内の命令が、条件実行命令である場合のデータ干渉の発生を示す説明図である。
【図１５】この発明の実施の形態２におけるマイクロプロセッサで実行されるプログラム例を示す説明図である。
【図１６】図１５に示すプログラムを実行したときのパイプラインの動作を示す図である。
【図１７】図１５に示すプログラムを実行するときの実施の形態２のマイクロプロセッサの動作を説明するためのブロック図である。
【符号の説明】
２  命令デコードユニット（命令デコーダ）、３  メモリアクセスユニット（命令実行部）、５  汎用レジスタ（複数の汎用レジスタ）、２４１，２４２，３６１，３６５  複数のレジスタ、２５０，３８０  バイパス制御部、２５１，３８１  バイパス判定部、２５２，３８２  レジスタ出力制御部、２６０  条件実行制御部、２６１  条件実行判定部、２６２  汎用レジスタ書き込み制御部、Ｂ０，Ｂ１，Ｂ２  バイパス経路、Ｄ０，Ｄ１  データ経路。
【図１】
0003547585.tif 000014
【図２】
0003547585.tif 000015
【図３】
0003547585.tif 000016
【図４】
0003547585.tif 000017
【図５】
0003547585.tif 000018
【図６】
0003547585.tif 000019
【図７】
0003547585.tif 000020
【図８】
0003547585.tif 000021
【図９】
0003547585.tif 000022
【図１０】
0003547585.tif 000023
【図１１】
0003547585.tif 000024
【図１２】
0003547585.tif 000025
【図１３】
0003547585.tif 000026
【図１４】
0003547585.tif 000027
【図１５】
0003547585.tif 000028
【図１６】
0003547585.tif 000029
【図１７】
0003547585.tif 000030