(57)【特許請求の範囲】
【請求項１】
既存命令、拡張命令を、少なくともフォワード先に関する演算結果データの型を判定するための型判定情報を含むオペコードにデコードする命令デコード手段と、
前記オペコードに基づいて第１の型に関する既存演算を実行し、演算終了通知信号を出力する既存演算手段と、
前記既存演算手段に対応して設けられた第１保持手段と、
前記既存演算手段と同期して動作し、前記オペコードに基づいて第２の型に関する拡張演算を実行する拡張演算手段と、
前記拡張演算手段に対応して設けられた第２保持手段と、
前記型判定情報に基づいて、前記拡張演算手段の演算結果データの型がフォワード先の前記第１保持手段のデータの型と異なりかつ前記演算終了通知信号が入力された場合、前記拡張演算手段の演算結果データを前記第１保持手段へフォワードするフォワード手段と、
を備えることを特徴とする演算処理装置。
【請求項２】
既存命令、拡張命令を、少なくともフォワード先に関する演算結果データの型を判定するための型判定情報を含む同一のオペコードにデコードする命令デコード手段と、
前記オペコードに基づいて第１の型に関する既存演算を実行する既存演算手段と、
前記既存演算手段に対応して設けられた第１保持手段と、
前記既存演算手段と非同期で動作し、前記オペコードに基づいて第２の型に関する拡張演算を実行する拡張演算手段と、
前記拡張演算手段の演算が終了した旨を表す演算終了通知信号を出力する出力手段と、
前記拡張演算手段に対応して設けられた第２保持手段と、
前記型判定情報に基づいて、前記拡張演算手段の演算結果データの型がフォワード先の前記第１保持手段のデータの型と異なりかつ前記演算終了通知信号が入力された場合、前記拡張演算手段の演算結果データを前記第１保持手段へフォワードするフォワード手段と、
を備えることを特徴とする演算処理装置。
【請求項３】
前記演算終了通知信号が入力された場合、前記第１保持手段に対する前記既存演算手段の演算結果データの出力タイミングと、前記拡張演算手段の演算結果データのフォワードタイミングとを調停するタイミング調停手段を備えることを特徴とする請求項２に記載の演算処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、演算処理装置に関するものであり、特に、既存命令に対して拡張命令（新命令）を追加するカスタム対応に用いて好適な演算処理装置に関するものである。
【０００２】
近時、コンピュータの高性能化の要請を受けて、ＣＰＵ（Central Processing Unit）やＭＰＵ（Micro Processing Unit）等の演算処理装置の開発競争に拍車がかかっている。従って、開発メーカでは、新機能を搭載した演算処理装置を次々と市場に投入しなければならない状況にあり、いかに低コストでしかも短期間で演算処理装置を開発できるかが市場を征するための鍵となっている。
【０００３】
【従来の技術】
演算処理装置は、パーソナルコンピュータからスーパコンピュータまでのあらゆるコンピュータに組み込まれており、コンピュータの中核をなす装置である。一般的に演算処理装置は、演算命令をデコードする命令デコーダと、該命令デコーダによりデコードされた演算命令（オペコード）に基づいて算術演算や論理演算等の各種演算を実行する演算器と、該演算器により演算された結果（演算結果データ）を一時的に格納するレジスタと、演算器の制御やレジスタ（例えば、整数レジスタ、浮動小数点レジスタ）への演算結果データの格納制御等を実行する制御回路（例えば、パイプライン制御回路、ステートマシン）とから概略構成されている。上記演算処理装置では、命令に応じた各種演算、演算結果データの格納が超高速で行われる。
【０００４】
【発明が解決しようとする課題】
ところで、前述したように、従来の演算処理装置では、既存の演算命令（以下、既存命令という）に対して、新たな演算命令（以下、拡張命令という）を追加するというカスタマイズが行われる。このカスタマイズでは、既存命令に対応する演算内容と拡張命令に対応する演算内容とが異なる場合や、既存命令を応用して拡張命令を実行できない場合、拡張命令に対応する制御回路を付加しなければならないため、既存の機構に対する設計変更箇所が多くなってしまうという問題があった。
【０００５】
また、従来の演算処理装置では、整数の演算結果データが整数レジスタに格納され、一方、浮動小数点の演算結果データが浮動小数点レジスタに格納されるようになっており、演算結果データの型（整数または浮動小数点）とレジスタの型とは同型であることが一般的である。ここで、カスタマイズの要求によっては、異型の演算結果データをレジスタに格納するという特別な拡張命令が追加される場合がある。この種のカスタマイズでは、演算結果データをレジスタへと導く既存のパスを再設計しなければならず、大がかりな設計変更を要するという問題があった。
【０００６】
本発明は、上記に鑑みてなされたもので、既存の機構に対して最小限の設計変更で拡張命令を追加することができる演算処理装置を提供することを目的とする。
【０００７】
【課題を解決するための手段】
上記目的を達成するために、本発明は、既存命令、拡張命令を、少なくとも前記既存命令と前記拡張命令とを判定するための命令種別判定情報を含む同一のオペコードにデコードする命令デコード手段（後述する実施の形態１の命令デコーダ１０に相当）と、前記オペコードに基づいて既存演算を実行し、演算終了通知信号を出力する既存演算手段（後述する実施の形態１の既存演算器１２Ａに相当）と、前記既存演算手段と同期して動作し、前記オペコードに基づいて拡張演算を実行する拡張演算手段（後述する実施の形態１の拡張演算器１２Ｂに相当）と、前記命令種別判定情報に基づいて命令種別を判定する命令種別判定手段（後述する実施の形態１の制御回路１１に相当）と、前記命令種別が前記拡張命令と判定されかつ前記演算終了通知信号が入力された場合に、前記拡張演算手段の演算結果データを選択する選択手段（後述する実施の形態１のマルチプレクサ１３に相当）とを備えることを特徴とする。
【０００８】
この発明によれば、拡張命令が発行されると、命令デコード手段により拡張命令がオペコードにデコードされる。このオペコードは、既存演算手段および拡張演算手段の双方に通知され、既存演算手段および拡張演算手段は、それぞれ演算を同期的に実行する。そして、演算が終了すると既存演算手段からは、演算終了通知信号が出力される。このとき、命令種別が拡張命令と判定されているものとすると、選択手段により、拡張演算手段の演算結果データを選択する。
【０００９】
このように、この発明によれば、オペコードに命令種別判定情報を含ませ、拡張命令が発行された場合であっても、既存演算手段からの演算終了通知信号を利用して、拡張演算手段の演算終了を認識し、この拡張演算手段の演算結果データを選択するようにしたので、既存の機構に対して最小限の設計変更で拡張命令を追加することができる。
【００１０】
また、本発明は、前記選択手段は、前記命令種別が前記既存命令と判定されかつ前記演算終了通知信号が入力された場合に、前記既存演算手段の演算結果データを選択することを特徴とする。
【００１１】
この発明によれば、命令種別が既存命令と判定された場合に既存演算手段の演算結果データを選択するようにしたので、既存演算手段に変更を加えることなく、拡張命令を追加することができる。
【００１２】
また、本発明は、既存命令、拡張命令を、少なくともフォワード先に関する演算結果データの型を判定するための型判定情報を含む同一のオペコードにデコードする命令デコード手段（後述する実施の形態２の命令デコーダ２０に相当）と、前記オペコードに基づいて第１の型に関する既存演算を実行し、演算終了通知信号を出力する既存演算手段（後述する実施の形態２の既存演算器２２Ａに相当）と、前記既存演算手段に対応して設けられた第１保持手段（後述する実施の形態２のレジスタ２４Ａに相当）と、前記既存演算手段と同期して動作し、前記オペコードに基づいて第２の型に関する拡張演算を実行する拡張演算手段（後述する実施の形態２の拡張演算器２２Ｂに相当）と、前記拡張演算手段に対応して設けられた第２保持手段（後述する実施の形態２のレジスタ２４Ｂに相当）と、前記型判定情報に基づいて、前記拡張演算手段の演算結果データの型がフォワード先の前記第１保持手段のデータの型と異なりかつ前記演算終了通知信号が入力された場合、前記拡張演算手段の演算結果データを前記第１保持手段へフォワードするフォワード手段（後述する実施の形態２の制御回路２１Ａ、マルチプレクサ２３に相当）とを備えることを特徴とする。
【００１３】
この発明によれば、拡張命令が発行されると、命令デコード手段により拡張命令がオペコードにデコードされる。このオペコードは、既存演算手段および拡張演算手段の双方に通知され、既存演算手段および拡張演算手段は、それぞれ演算を同期的に実行する。そして、演算が終了すると既存演算手段からは、演算終了通知信号が出力される。このとき、拡張演算手段の演算結果データの型がフォワード先の第１保持手段のデータの型と異なるものとすると、上記演算結果データは、フォワード手段により、第１保持手段にフォワードされる。
【００１４】
このように、この発明によれば、オペコードに含まれる型判定情報に基づいて、拡張演算手段の演算結果データを第１保持手段にフォワードさせるようにしたので、既存の機構に対して最小限の設計変更で拡張命令を追加することができる。
【００１５】
また、本発明は、既存命令、拡張命令を、少なくともフォワード先に関する演算結果データの型を判定するための型判定情報を含むオペコードにデコードする命令デコード手段（後述する実施の形態３の命令デコーダ３０Ａ、命令デコーダ３０Ｂに相当）と、前記オペコードに基づいて第１の型に関する既存演算を実行する既存演算手段（後述する実施の形態３の既存演算器３２Ａに相当）と、前記既存演算手段に対応して設けられた第１保持手段（後述する実施の形態３のレジスタ３６Ａに相当）と、前記既存演算手段と非同期で動作し、前記オペコードに基づいて第２の型に関する拡張演算を実行する拡張演算手段（後述する実施の形態３の拡張演算器３２Ｂに相当）と、前記拡張演算手段の演算が終了した旨を表す演算終了通知信号を出力する出力手段（後述する実施の形態３の制御回路３１Ｂに相当）と、前記拡張演算手段に対応して設けられた第２保持手段（後述する実施の形態３のレジスタ３６Ｂに相当）と、前記型判定情報に基づいて、前記拡張演算手段の演算結果データの型がフォワード先の前記第１保持手段のデータの型と異なりかつ前記演算終了通知信号が入力された場合、前記拡張演算手段の演算結果データを前記第１保持手段へフォワードするフォワード手段（後述する実施の形態３の制御回路３１Ａ、マルチプレクサ３５に相当）とを備えることを特徴とする。
【００１６】
この発明によれば、拡張命令、既存命令が発行されると、命令デコード手段により拡張命令、既存命令がオペコードにそれぞれデコードされる。これらのオペコードは、既存演算手段および拡張演算手段のそれぞれに通知され、既存演算手段および拡張演算手段は、それぞれ演算を非同期で実行する。そして、拡張演算手段の演算が終了すると出力手段からは、演算終了通知信号が出力される。このとき、拡張演算手段の演算結果データの型がフォワード先の第１保持手段のデータの型と異なるものとすると、上記演算結果データは、フォワード手段により、第１保持手段にフォワードされる。
【００１７】
このように、この発明によれば、拡張演算手段に関する演算終了通知信号を出力し、オペコードに含まれる型判定情報に基づいて、拡張演算手段の演算結果データを第１保持手段にフォワードさせるようにしたので、拡張演算手段と既存演算手段とが非同期で動作する場合であっても、既存の機構に対して最小限の設計変更で拡張命令を追加することができる。
【００１８】
また、本発明は、前記演算終了通知信号が入力された場合、前記第１保持手段に対する前記既存演算手段の演算結果データの出力タイミングと、前記拡張演算手段の演算結果データのフォワードタイミングとを調停するタイミング調停手段（後述する実施の形態３の制御回路３１Ａに相当）を備えることを特徴とする。
【００１９】
この発明によれば、タイミング調停手段により、第１保守手段に対する既存演算手段の演算結果データの出力タイミングと、拡張演算手段の演算結果データのフォワードタイミングとを調停するようにしたので、同一タイミングに発生するバッティングを防止することができる。
【００２０】
また、後述する付記３記載の発明は、付記１または２に記載の演算処理装置において、前記選択手段により選択された演算結果データを保持する保持手段を備えることを特徴とする。
【００２１】
この発明によれば、選択手段を設けて、命令種別の判定結果に応じて保持手段に保持させる演算結果データを選択するようにしたので、拡張命令用に保持手段を追加する必要がなく、コストを低減させることができる。
【００２２】
【発明の実施の形態】
以下、図面を参照して本発明にかかる演算処理装置の実施の形態１〜５について詳細に説明する。
【００２３】
（実施の形態１）
図１は、本発明にかかる実施の形態１の構成を示すブロック図である。この図には、カスタマイズの要請により、既存命令に対して拡張命令を追加した後の演算処理装置の主要部の構成が図示されている。ここで既存命令は、例えば、整数加算命令であり、拡張命令は、例えば、整数乗算命令である。これらの既存命令および拡張命令は、３２ｂｉｔの命令コードからなり１６進数表現でつぎのようにそれぞれ表される。
既存命令：０ｘ８ａ８ａ８ａ８ａ
拡張命令：０ｘ５ｃ５ｃ５ｃ５ｃ
【００２４】
命令デコーダ１０は、３２ｂｉｔの既存命令、拡張命令をデコードし、１２ｂｉｔのオペコード（既存命令ＣＡ1 、拡張命令ＣＢ1 ）に変換する。これらの既存命令ＣＡ1 および拡張命令ＣＢ1 は、１６進数表現（２進数表現）でつぎのようにそれぞれ表される。
既存命令ＣＡ1：０ｘ１ｆｆ（０００１１１１１１１１１）
拡張命令ＣＢ1：０ｘ３ｆｆ（００１１１１１１１１１１）
【００２５】
これらの既存命令ＣＡ1 および拡張命令ＣＢ1 で実際に命令として有効なビットは、［１１：１０．８：０］ビットである。このことから、既存命令ＣＡ1 および拡張命令ＣＢ1 は、それぞれの［１１：１０．８：０］ビットが同値であるため、同一ビット構成の命令である。また、既存命令ＣＡ1 および拡張命令ＣＢ1 のそれぞれの［９］ビットは、命令用のビットとしては用いられない空ビットである。ただし、実施の形態１では、上記［９］ビットは、既存命令ＣＡ1 と拡張命令ＣＢ1 とを判定するための命令種別用ビットである。すなわち、［９］ビットが「０」である場合には、命令種別が既存命令であり、［９］ビットが「１」である場合には、命令種別が拡張命令である。
【００２６】
制御回路１１は、既存演算器１２Ａおよび拡張演算器１２Ｂへ既存命令ＣＡ1 および拡張命令ＣＢ1 を通知する制御や、レジスタ１４への演算結果データの格納制御を行う。既存演算器１２Ａは、既存の演算器であり、既存命令ＣＡ1 に従って整数加算を行い、演算を終了した旨を表す演算終了通知信号ＤＮ1 を制御回路１１へ出力する。また、既存演算器１２Ａは、演算結果を既存命令演算結果データＥＡ1 として出力する。
【００２７】
拡張演算器１２Ｂは、カスタマイズの要請により既存の機構に付加されたものであり、拡張命令ＣＢ1 に従って整数乗算を行う。この拡張演算器１２Ｂは、演算結果を拡張命令演算結果データＥＢ1 として出力する。ここで、既存演算器１２Ａの演算終了サイクル数と拡張演算器１２Ｂの演算終了サイクル数とは、同値とされている。ここで注意すべきは、拡張演算器１２Ｂからは、演算終了通知信号ＤＮ1 に相当する信号が出力されない点である。また、既存命令演算結果データＥＡ1 の型（この場合、整数）と拡張命令演算結果データＥＢ1（この場合、整数）とは同型とされている。
【００２８】
マルチプレクサ１３は、制御回路１１の制御により、既存命令演算結果データＥＡ1 または拡張命令演算結果データＥＢ1 のいずれか一方を選択し、これをレジスタ１４へ出力する。具体的には、制御回路１１より選択信号ＳＥＬＡ1 が入力された場合、マルチプレクサ１３は、既存命令演算結果データＥＡ1 をレジスタ１４へ出力する。一方、制御回路１１より選択信号ＳＥＬＢ1 が入力された場合、マルチプレクサ１３は、拡張命令演算結果データＥＢ1 をレジスタ１４へ出力する。レジスタ１４は、例えば、整数レジスタであり、既存命令演算結果データＥＡ1 または拡張命令演算結果データＥＢ1 を一時的に格納する。
【００２９】
つぎに、上述した実施の形態１の動作について図２に示したフローチャートを参照しつつ説明する。同図に示したステップＳＡ１で、３２ｂｉｔの既存命令（０ｘ８ａ８ａ８ａ８ａ）が発行されると、ステップＳＡ２では、命令デコーダ１０は、既存命令（０ｘ８ａ８ａ８ａ８ａ）を１２ｂｉｔのオペコード（０ｘ１ｆｆ（０００１１１１１１１１１））に変換した後、これを制御回路１１へ通知する。これにより、ステップＳＡ３およびステップＳＡ５では、制御回路１１は、命令として同値ビットからなる拡張命令ＣＢ1 （この場合、０ｘ１ｆｆ（０００１１１１１１１１１））および既存命令ＣＡ1 （この場合、０ｘ１ｆｆ（０００１１１１１１１１１））を拡張演算器１２Ｂおよび既存演算器１２Ａへ通知する。
【００３０】
これにより、拡張演算器１２Ｂでは、拡張命令ＣＢ1 に従って演算（整数乗算）が実行される。これに並行して、既存演算器１２Ａでは、既存命令ＣＡ1 に従って演算（整数加算）が実行される。これらの処理に並行して、ステップＳＡ１０では、制御回路１１は、命令デコーダ１０により変換されたオペコード（０ｘ１ｆｆ（０００１１１１１１１１１））の［９］ビット（この場合、「０」）に基づいて、命令種別を判定する。この場合、上記［９］ビットが「０」であるため、制御回路１１は、命令種別を既存命令として判定する。
【００３１】
ステップＳＡ６では、既存演算器１２Ａは、演算が終了したか否かを判断し、この場合、判断結果を「Ｎｏ」として同判断を繰り返す。そして、演算が終了すると、既存演算器１２Ａは、ステップＳＡ６の判断結果を「Ｙｅｓ」とし、ステップＳＡ７で演算終了通知信号ＤＮ1 を制御回路１１へ出力する。つぎのステップＳＡ８では、既存演算器１２Ａは、既存命令演算結果データＥＡ1 をマルチプレクサ１３へ出力する。一方、既存演算器１２Ａの演算が終了すると同時に、拡張演算器１２Ｂの演算も終了するため、ステップＳＡ４では、拡張演算器１２Ｂは、拡張命令演算結果データＥＢ1 をマルチプレクサ１３へ出力する。
【００３２】
上記演算終了通知信号ＤＮ1 が入力されると、制御回路１１は、既存演算器１２Ａおよび拡張演算器１２Ｂのそれぞれの演算が終了したことを認識し、ステップＳＡ９の処理を実行する。すなわち、ステップＳＡ９では、制御回路１１は、ステップＳＡ１０の命令種別の判定結果を受けて、選択信号ＳＥＬＡ1 または選択信号ＳＥＬＢ1 のいずれかをマルチプレクサ１３へ出力する。この場合、オペコード［９］＝「０」、すなわち、命令種別が既存命令であるため、制御回路１１は、選択信号ＳＥＬＡ1 をマルチプレクサ１３へ出力する。これにより、マルチプレクサ１３で既存命令演算結果データＥＡ1 が選択され、この既存命令演算結果データＥＡ1 は、レジスタ１４に格納される。
【００３３】
一方、ステップＳＡ１で３２ｂｉｔの拡張命令（０ｘ５ｃ５ｃ５ｃ５ｃ）が発行されると、ステップＳＡ２では、命令デコーダ１０は、拡張命令（０ｘ５ｃ５ｃ５ｃ５ｃ）を１２ｂｉｔのオペコード（０ｘ３ｆｆ（００１１１１１１１１１１））に変換した後、これを制御回路１１へ通知する。これにより、ステップＳＡ３およびステップＳＡ５では、制御回路１１は、命令として同値ビットからなる拡張命令ＣＢ1 （この場合、０ｘ３ｆｆ（００１１１１１１１１１１））および既存命令ＣＡ1 （この場合、０ｘ３ｆｆ（００１１１１１１１１１１））を拡張演算器１２Ｂおよび既存演算器１２Ａへ通知する。
【００３４】
これにより、拡張演算器１２Ｂでは、拡張命令ＣＢ1 に従って演算（整数乗算）が実行されるとともに、既存演算器１２Ａでは、既存命令ＣＡ1 に従って演算（整数加算）が実行される。これらの処理に並行して、ステップＳＡ１０では、制御回路１１は、命令デコーダ１０により変換されたオペコード（０ｘ３ｆｆ（００１１１１１１１１１１））の［９］ビット（この場合、「１」）に基づいて、命令種別を判定する。この場合、上記［９］ビットが「１」であるため、制御回路１１は、命令種別を拡張命令として判定する。
【００３５】
ステップＳＡ６では、既存演算器１２Ａは、演算が終了したか否かを判断し、この場合、判断結果を「Ｎｏ」として同判断を繰り返す。そして、演算が終了すると、既存演算器１２Ａは、ステップＳＡ６の判断結果を「Ｙｅｓ」とし、ステップＳＡ７で演算終了通知信号ＤＮ1 を制御回路１１へ出力する。つぎのステップＳＡ８では、既存演算器１２Ａは、既存命令演算結果データＥＡ1 をマルチプレクサ１３へ出力する。これに並行して、ステップＳＡ４では、拡張演算器１２Ｂは、拡張命令演算結果データＥＢ1 をマルチプレクサ１３へ出力する。
【００３６】
上記演算終了通知信号ＤＮ1 が入力されると、ステップＳＡ９では、制御回路１１は、オペコード［９］＝「１」、すなわち、命令種別が拡張命令であるため、選択信号ＳＥＬＢ1 をマルチプレクサ１３へ出力する。これにより、マルチプレクサ１３で拡張命令演算結果データＥＢ1 が選択され、この拡張命令演算結果データＥＢ1 は、レジスタ１４に格納される。
【００３７】
以上説明したように、実施の形態１によれば、オペコードに命令種別判定ビットを含ませ、拡張命令が発行された場合であっても、既存演算器１２Ａからの演算終了通知信号ＤＮ1 を利用して、拡張演算器１２Ｂの演算終了を認識し、この拡張演算器１２Ｂの拡張命令演算結果データＥＢ1 を選択するようにしたので、既存の機構に対して最小限の設計変更で拡張命令を追加することができるとともに、コストを低減することができる。
【００３８】
（実施の形態２）
図３は、本発明にかかる実施の形態２の構成を示すブロック図である。この図には、カスタマイズの要請により、既存命令に対して拡張命令を追加した後の演算処理装置の主要部の構成が図示されている。ここで既存命令は、例えば、整数加算命令であり、拡張命令は、例えば、浮動小数点乗算命令である。この拡張命令は、異型の演算結果データ（この場合、拡張命令演算結果データＥＢ2 ）をレジスタ２４Ａに格納するという特別な命令である。
【００３９】
これらの既存命令および拡張命令は、実施の形態１の場合と同様にして、３２ｂｉｔの命令コードからなり１６進数表現でつぎのようにそれぞれ表される。
既存命令：０ｘ８ａ８ａ８ａ８ａ
拡張命令：０ｘ５ｃ５ｃ５ｃ５ｃ
【００４０】
命令デコーダ２０は、命令デコーダ１０（図１参照）と同様にして、３２ｂｉｔの既存命令、拡張命令をデコードし、１２ｂｉｔのオペコード（既存命令ＣＡ2 、拡張命令ＣＢ2 ）に変換する。これらの既存命令ＣＡ2 および拡張命令ＣＢ2 は、１６進数表現（２進数表現）でつぎのようにそれぞれ表される。
既存命令ＣＡ2：０ｘ１ｆｆ（０００１１１１１１１１１）
拡張命令ＣＢ2：０ｘ３ｆｆ（００１１１１１１１１１１）
【００４１】
これらの既存命令ＣＡ2 および拡張命令ＣＢ2 で実際に命令として有効なビットは、実施の形態１の場合と同様にして、［１１：１０．８：０］ビットである。このことから、既存命令ＣＡ2 および拡張命令ＣＢ2 は、それぞれの［１１：１０．８：０］ビットが同値であるため、同一ビット構成の命令である。また、既存命令ＣＡ2 および拡張命令ＣＢ2 のそれぞれの［９］ビットは、命令用のビットとしては用いられない空ビットである。
【００４２】
ただし、実施の形態２では、上記［９］ビットは、レジスタ２４Ａ（この場合、整数レジスタ）に格納すべき演算結果データ（既存命令演算結果データＥＡ2 または拡張命令演算結果データＥＢ2 ）の型（この場合、整数または浮動小数点）を判定するための演算結果データ型判定用ビットである。すなわち、［９］ビットが「０」である場合には、レジスタ２４Ａに格納すべき演算結果データ（この場合、既存命令演算結果データＥＡ2 ）の型が整数であることを意味している。一方、［９］ビットが「１」である場合には、レジスタ２４Ａに格納すべき演算結果データ（この場合、拡張命令演算結果データＥＢ2 ）の型が浮動小数点であることを意味している。
【００４３】
制御回路２１Ａは、既存演算器２２Ａへ既存命令ＣＡ2 を通知する制御や、レジスタ２４Ａへの演算結果データの格納制御を行う。既存演算器２２Ａは、既存の演算器であり、既存命令ＣＡ2 に従って整数加算を行い、演算を終了した旨を表す演算終了通知信号ＤＮ2 を制御回路２１Ａへ出力する。また、既存演算器２２Ａは、演算結果を既存命令演算結果データＥＡ2 として出力する。
【００４４】
マルチプレクサ２３は、制御回路２１Ａの制御により、既存命令演算結果データＥＡ2 または拡張命令演算結果データＥＢ2 のいずれか一方を選択し、これをレジスタ２４Ａへ出力する。具体的には、制御回路２１Ａより選択信号ＳＥＬＡ2 が入力された場合、マルチプレクサ２３は、既存命令演算結果データＥＡ2 をレジスタ２４Ａへ出力する。
【００４５】
一方、制御回路２１Ａより選択信号ＳＥＬＢ2 が入力された場合、マルチプレクサ２３は、拡張命令演算結果データＥＢ2 をレジスタ２４Ａへ出力する。レジスタ２４Ａは、整数レジスタであり、既存命令演算結果データＥＡ2 または拡張命令演算結果データＥＢ2 を一時的に格納する。ここで注意すべきは、型が整数の既存命令演算結果データＥＡ2 または型が浮動小数点の拡張命令演算結果データＥＢ2 がレジスタ２４Ａに格納される点である。
【００４６】
制御回路２１Ｂは、拡張演算器２２Ｂへ拡張命令ＣＢ2 を通知する制御や、レジスタ２４Ｂに対する拡張命令演算結果データＥＢ2 の出力を制御を行う。拡張演算器２２Ｂは、カスタマイズの要請により、拡張命令ＣＢ2 に従って浮動小数点乗算を行う。この拡張演算器２２Ｂは、演算結果を拡張命令演算結果データＥＢ2 として出力する。ここで、既存演算器２２Ａの演算終了サイクル数と拡張演算器２２Ｂの演算終了サイクル数とは、同値とされている。
【００４７】
ここで注意すべきは、拡張演算器２２Ｂからは、演算終了通知信号ＤＮ2 に相当する信号が出力されない点である。また、既存命令演算結果データＥＡ2 の型（この場合、整数）と拡張命令演算結果データＥＢ2（この場合、浮動小数点）とは異なる。レジスタ２４Ｂは、浮動小数点レジスタであり、拡張命令演算結果データＥＢ2 を一時的に格納する。ただし、後述する条件によっては、レジスタ２４Ｂには、拡張命令演算結果データＥＢ2 が格納されない。
【００４８】
つぎに、上述した実施の形態２の動作について図４に示したフローチャートを参照しつつ説明する。同図に示したステップＳＢ１で、３２ｂｉｔの既存命令（０ｘ８ａ８ａ８ａ８ａ）が発行されると、ステップＳＢ２では、命令デコーダ２０は、既存命令（０ｘ８ａ８ａ８ａ８ａ）を１２ｂｉｔのオペコード（０ｘ１ｆｆ（０００１１１１１１１１１））に変換した後、これを制御回路２１Ａおよび制御回路２１Ｂへ通知する。
【００４９】
これにより、ステップＳＢ３では、制御回路２１Ａは、既存命令ＣＡ2 （この場合、０ｘ１ｆｆ（０００１１１１１１１１１））を既存演算器２２Ａへ通知する。この動作に並行して、ステップＳＢ９では、制御回路２１Ｂは、拡張命令ＣＢ2 （この場合、０ｘ１ｆｆ（０００１１１１１１１１１））を拡張演算器２２Ｂへ通知する。
【００５０】
これにより、既存演算器２２Ａでは、既存命令ＣＡ2 に従って演算（整数加算）が実行される。これに並行して、拡張演算器２２Ｂでは、拡張命令ＣＢ2 に従って演算（浮動小数点乗算）が実行される。これらの処理に並行して、ステップＳＢ８では、制御回路２１Ａは、命令デコーダ２０により変換されたオペコード（０ｘ１ｆｆ（０００１１１１１１１１１））の［９］ビット（この場合、「０」）に基づいて、レジスタ２４Ａに格納すべき演算結果データの型を判定する。この場合、上記［９］ビットが「０」であるため、制御回路２１Ａは、型を整数として判定する。
【００５１】
ステップＳＢ４では、既存演算器２２Ａは、演算が終了したか否かを判断し、この場合、判断結果を「Ｎｏ」として同判断を繰り返す。そして、演算が終了すると、既存演算器２２Ａは、ステップＳＢ４の判断結果を「Ｙｅｓ」とし、ステップＳＢ５で演算終了通知信号ＤＮ2 を制御回路２１Ａへ出力する。つぎのステップＳＢ６では、既存演算器２２Ａは、既存命令演算結果データＥＡ2 をマルチプレクサ２３へ出力する。
【００５２】
一方、ステップＳＢ１０では、制御回路２１Ｂは、命令デコーダ２０により変換されたオペコード（０ｘ１ｆｆ（０００１１１１１１１１１））の［９］ビットが「１」であるか否かを判断する。この場合、制御回路２１Ｂは、［９］ビットが「０」であるため、ステップＳＢ１０の判断結果を「Ｎｏ」とする。また、既存演算器２２Ａの演算が終了すると同時に、拡張演算器２２Ｂの演算も終了するため、ステップＳＢ１２では、拡張演算器２２Ｂは、拡張命令演算結果データＥＢ2 をレジスタ２４Ｂへ出力する。
【００５３】
上記演算終了通知信号ＤＮ2 が入力されると、制御回路２１Ａは、既存演算器２２Ａおよび拡張演算器２２Ｂのそれぞれの演算が終了したことを認識し、ステップＳＢ７の処理を実行する。すなわち、ステップＳＢ７では、制御回路２１Ａは、ステップＳＢ８における型の判定結果を受けて、選択信号ＳＥＬＡ2 または選択信号ＳＥＬＢ2 のいずれかをマルチプレクサ２３へ出力する。この場合、オペコード［９］＝「０」、すなわち、レジスタ２４Ａに格納すべき演算結果データの型が整数であるため、制御回路２１Ａは、選択信号ＳＥＬＡ2 をマルチプレクサ２３へ出力する。これにより、マルチプレクサ２３で既存命令演算結果データＥＡ2 が選択され、この既存命令演算結果データＥＡ2 は、レジスタ２４Ａに格納される。
【００５４】
一方、ステップＳＢ１で３２ｂｉｔの拡張命令（０ｘ５ｃ５ｃ５ｃ５ｃ）が発行されると、ステップＳＢ２では、命令デコーダ２０は、拡張命令（０ｘ５ｃ５ｃ５ｃ５ｃ）を１２ｂｉｔのオペコード（０ｘ３ｆｆ（００１１１１１１１１１１））に変換した後、これを制御回路２１Ａおよび制御回路２１Ｂへ通知する。
【００５５】
これにより、ステップＳＢ３では、制御回路２１Ａは、既存命令ＣＡ2 （この場合、０ｘ３ｆｆ（００１１１１１１１１１１））を既存演算器２２Ａへ通知する。この動作に並行して、ステップＳＢ９では、制御回路２１Ｂは、拡張命令ＣＢ2 （この場合、０ｘ３ｆｆ（００１１１１１１１１１１））を拡張演算器２２Ｂへ通知する。
【００５６】
これにより、既存演算器２２Ａでは、上述した動作と同様にして、既存命令ＣＡ2 に従って演算（整数加算）が実行される。これに並行して、拡張演算器２２Ｂでは、拡張命令ＣＢ2 に従って演算（浮動小数点乗算）が実行される。これらの処理に並行して、ステップＳＢ８では、制御回路２１Ａは、命令デコーダ２０により変換されたオペコード（０ｘ３ｆｆ（００１１１１１１１１１１））の［９］ビット（この場合、「１」）に基づいて、レジスタ２４Ａに格納すべき演算結果データの型を判定する。この場合、上記［９］ビットが「１」であるため、制御回路２１Ａは、型を浮動小数点として判定する。
【００５７】
ステップＳＢ４では、既存演算器２２Ａは、演算が終了したか否かを判断し、この場合、判断結果を「Ｎｏ」として同判断を繰り返す。そして、演算が終了すると、既存演算器２２Ａは、ステップＳＢ４の判断結果を「Ｙｅｓ」とし、ステップＳＢ５で演算終了通知信号ＤＮ2 を制御回路２１Ａへ出力する。つぎのステップＳＢ６では、既存演算器２２Ａは、既存命令演算結果データＥＡ2 をマルチプレクサ２３へ出力する。
【００５８】
一方、ステップＳＢ１０では、制御回路２１Ｂは、命令デコーダ２０により変換されたオペコード（０ｘ３ｆｆ（００１１１１１１１１１１））の［９］ビットが「１」であるか否かを判断する。この場合、制御回路２１Ｂは、［９］ビットが「１」であるため、ステップＳＢ１０の判断結果を「Ｙｅｓ」とする。また、既存演算器２２Ａの演算が終了すると同時に、拡張演算器２２Ｂの演算も終了するため、ステップＳＢ１１では、拡張演算器２２Ｂは、拡張命令演算結果データＥＢ2 をマルチプレクサ２３へ出力する。ここで拡張演算器２２Ｂは、制御回路２１Ｂの制御により、レジスタ２４Ｂへの拡張命令演算結果データＥＢ2 の出力を抑止する。
【００５９】
上記演算終了通知信号ＤＮ2 が入力されると、制御回路２１Ａは、既存演算器２２Ａおよび拡張演算器２２Ｂのそれぞれの演算が終了したことを認識し、ステップＳＢ７の処理を実行する。すなわち、ステップＳＢ７では、制御回路２１Ａは、ステップＳＢ８における型の判定結果を受けて、選択信号ＳＥＬＡ2 または選択信号ＳＥＬＢ2 のいずれかをマルチプレクサ２３へ出力する。
【００６０】
この場合、オペコード［９］＝「１」、すなわち、レジスタ２４Ａに格納すべき演算結果データの型が浮動小数点であるため、制御回路２１Ａは、選択信号ＳＥＬＢ2 をマルチプレクサ２３へ出力する。これにより、マルチプレクサ２３で拡張命令演算結果データＥＢ2 が選択され、この拡張命令演算結果データＥＢ2 は、レジスタ２４Ａに格納される。
【００６１】
以上説明したように、実施の形態２によれば、オペコードに含まれる型判定ビットに基づいて、拡張演算器２２Ｂの拡張命令演算結果データＥＢ2 をレジスタ２４Ａにフォワードさせるようにしたので、既存の機構に対して最小限の設計変更で拡張命令を追加することができる。
【００６２】
（実施の形態３）
さて、上述した実施の形態２では、図３に示した既存演算器２２Ａの演算終了サイクル数と拡張演算器２２Ｂの演算終了サイクル数とが同値、すなわち既存演算器２２Ａと拡張演算器２２Ｂとの同期が取られている例について説明したが、非同期の場合であってもよい。以下では、この場合を実施の形態３として説明する。
【００６３】
図５は、本発明にかかる実施の形態３の構成を示すブロック図である。この図には、カスタマイズの要請により、既存命令に対して拡張命令を追加した後の演算処理装置の主要部の構成が図示されている。ここで既存命令は、例えば、整数加算命令であり、拡張命令は、例えば、浮動小数点乗算命令である。この拡張命令は、実施の形態２の場合と同様にして、異型の演算結果データ（この場合、拡張命令演算結果データＥＢ3 ）をレジスタ３６Ａに格納するという特別な命令である。
【００６４】
これらの既存命令および拡張命令は、実施の形態２の場合と同様にして、３２ｂｉｔの命令コードからなり１６進数表現でつぎのようにそれぞれ表される。
既存命令：０ｘ８ａ８ａ８ａ８ａ
拡張命令：０ｘ５ｃ５ｃ５ｃ５ｃ
【００６５】
命令デコーダ３０Ａは、３２ｂｉｔの既存命令をデコードし、１２ｂｉｔのオペコード（既存命令ＣＡ3 ）に変換する。一方、命令デコーダ３０Ｂは、３２ｂｉｔの拡張命令をデコードし、１２ｂｉｔのオペコード（拡張命令ＣＢ3 ）に変換する。これらの既存命令ＣＡ3 および拡張命令ＣＢ3 は、１６進数表現（２進数表現）でつぎのようにそれぞれ表される。
既存命令ＣＡ3：０ｘ１ｆｆ（０００１１１１１１１１１）
拡張命令ＣＢ3：０ｘ３ｆｆ（００１１１１１１１１１１）
【００６６】
上記既存命令ＣＡ3 および拡張命令ＣＢ3 で実際に命令として有効なビットは、［１１：１０．８：０］ビットである。既存命令ＣＡ3 および拡張命令ＣＢ3 の［９］ビットは、命令用のビットとしては用いられない空ビットである。ただし、実施の形態３では、上記［９］ビットは、レジスタ３６Ａ（この場合、整数レジスタ）に格納すべき演算結果データ（既存命令演算結果データＥＡ3 または拡張命令演算結果データＥＢ3 ）の型（この場合、整数または浮動小数点）を判定するための演算結果データ型判定用ビットである。すなわち、［９］ビットが「０」である場合には、レジスタ３６Ａに格納すべき演算結果データ（この場合、既存命令演算結果データＥＡ3 ）の型が整数であることを意味している。一方、［９］ビットが「１」である場合には、レジスタ３６Ａに格納すべき演算結果データ（この場合、拡張命令演算結果データＥＢ3 ）の型が浮動小数点であることを意味している。
【００６７】
制御回路３１Ａは、既存演算器３２Ａへ既存命令ＣＡ3 を通知する制御や、レジスタ３６Ａへの演算結果データの格納制御を行う。既存演算器３２Ａは、既存の演算器であり、既存命令ＣＡ3 に従って整数加算を行い、演算結果を既存命令演算結果データＥＡ3 として出力する。
【００６８】
ＦＦ（フリップフロップ）回路３３は、既存命令演算結果データＥＡ3 を一時的に格納する。マルチプレクサ３４は、制御回路３１Ａの制御により、既存演算器３２Ａから直接出力された既存命令演算結果データＥＡ3 またはＦＦ回路３３に格納された既存命令演算結果データＥＡ3 のいずれか一方を選択し、これをマルチプレクサ３５へ出力する。
【００６９】
具体的には、マルチプレクサ３４は、制御回路３１Ａより選択信号ＳＥＬＤ3 が入力された場合、既存演算器３２Ａから直接出力された既存命令演算結果データＥＡ3 を選択する。一方、制御回路３１Ａより選択信号ＳＥＬＣ3 が出力された場合、マルチプレクサ３４は、ＦＦ回路３３に格納された既存命令演算結果データＥＡ3 を選択する。
【００７０】
マルチプレクサ３５は、制御回路３１Ａの制御により、既存命令演算結果データＥＡ3 または拡張命令演算結果データＥＢ3 のいずれか一方を選択し、これをレジスタ３６Ａへ出力する。具体的には、制御回路３１Ａより選択信号ＳＥＬＡ4 が入力された場合、マルチプレクサ３５は、既存命令演算結果データＥＡ3 をレジスタ３６Ａへ出力する。
【００７１】
一方、制御回路３１Ａより選択信号ＳＥＬＢ4 が入力された場合、マルチプレクサ３５は、拡張命令演算結果データＥＢ3 をレジスタ３６Ａへ出力する。レジスタ３６Ａは、整数レジスタであり、既存命令演算結果データＥＡ3 または拡張命令演算結果データＥＢ3 を一時的に格納する。ここで注意すべきは、型が整数の既存命令演算結果データＥＡ3 または型が浮動小数点の拡張命令演算結果データＥＢ3 がレジスタ３６Ａに格納される点である。
【００７２】
制御回路３１Ｂは、拡張演算器３２Ｂへ拡張命令ＣＢ3 を通知する制御や、レジスタ３６Ｂへの拡張命令演算結果データＥＢ3 の格納制御を行う。この制御回路３１Ｂは、拡張演算器３２Ｂの演算が終了した旨を表す演算終了通知信号ＤＮ3 を制御回路３１Ａへ出力する。拡張演算器３２Ｂは、カスタマイズの要請により、拡張命令ＣＢ3 に従って浮動小数点乗算を行う。この拡張演算器３２Ｂは、演算結果を拡張命令演算結果データＥＢ3 として出力する。
【００７３】
ここで、既存演算器３２Ａの演算終了サイクル数と拡張演算器３２Ｂの演算終了サイクル数とは、異なる。すなわち、既存演算器３２Ａと拡張演算器３２Ｂとは非同期とされている。レジスタ３６Ｂは、浮動小数点レジスタであり、拡張命令演算結果データＥＢ3 を一時的に格納する。ただし、後述する条件によっては、レジスタ３６Ｂには、拡張命令演算結果データＥＢ3 が格納されない。
【００７４】
つぎに、上述した実施の形態３の動作について図６（ａ）および（ｂ）ならびに図７にそれぞれ示したフローチャートを参照しつつ説明する。図６（ａ）は、図５に示した制御回路３１Ｂ側の動作を説明するフローチャートであり、図６（ｂ）は、制御回路３１Ａ側の動作を説明するフローチャートである。また、図７は、図５に示した制御回路３１Ａの動作を説明するフローチャートである。
【００７５】
図６（ｂ）に示したステップＳＤ１で、３２ｂｉｔの既存命令（０ｘ８ａ８ａ８ａ８ａ）が発行されると、ステップＳＤ２では、命令デコーダ３０Ａは、既存命令（０ｘ８ａ８ａ８ａ８ａ）を１２ｂｉｔのオペコード（０ｘ１ｆｆ（０００１１１１１１１１１））に変換した後、これを制御回路３１Ａへ通知する。
【００７６】
これにより、ステップＳＤ３では、制御回路３１Ａは、既存命令ＣＡ3 を既存演算器３２Ａへ通知する。これにより、既存演算器３２Ａでは、既存命令ＣＡ3 に従って演算（整数加算）が実行される。ステップＳＤ４では、既存演算器３２Ａは、演算が終了したか否かを判断し、この場合、判断結果を「Ｎｏ」として同判断を繰り返す。そして、演算が終了すると、既存演算器３２Ａは、ステップＳＤ４の判断結果を「Ｙｅｓ」とし、ステップＳＤ５で既存命令演算結果データＥＡ3を出力する。これにより、既存命令演算結果データＥＡ3は、マルチプレクサ３４へ直接出力されるとともに、ＦＦ回路３３に格納される。
【００７７】
一方、図７に示したステップＳＥ１では、制御回路３１Ａは、制御回路３１Ｂより演算終了通知信号ＤＮ3 が入力されたか否かを判断し、この場合、判断結果を「Ｎｏ」とする。ステップＳＥ６では、制御回路３１Ａは、選択信号ＳＥＬＤ3 をマルチプレクサ３４へ出力するとともに、選択信号ＳＥＬＡ4 をマルチプレクサ３５へ出力する。これにより、マルチプレクサ３４では、既存演算器３２Ａから直接出力された既存命令演算結果データＥＡ3 が選択され、マルチプレクサ３５では、マルチプレクサ３４からの既存命令演算結果データＥＡ3 が選択される。この既存命令演算結果データＥＡ3 は、レジスタ３６Ａに格納される。
【００７８】
また、図６（ａ）に示したステップＳＣ１で３２ｂｉｔの拡張命令（０ｘ５ｃ５ｃ５ｃ５ｃ）が発行されると、ステップＳＣ２では、命令デコーダ３０Ｂは、拡張命令（０ｘ５ｃ５ｃ５ｃ５ｃ）を１２ｂｉｔのオペコード（０ｘ３ｆｆ（００１１１１１１１１１１）に変換した後、これを制御回路３１Ｂへ通知する。ステップＳＣ３では、制御回路３１Ｂは、拡張命令ＣＢ3 （この場合、０ｘ３ｆｆ（００１１１１１１１１１１））を拡張演算器３２Ｂへ通知する。これにより、拡張演算器３２Ｂでは、拡張命令ＣＢ3 に従って演算（浮動小数点乗算）が実行される。
【００７９】
ステップＳＣ４では、制御回路３１Ｂは、拡張命令ＣＢ3 に基づいて、拡張演算器３２Ｂにおける演算終了サイクル数を判定する。ステップＳＣ５では、制御回路３１Ｂは、上記演算終了サイクル数に基づいて、拡張演算器３２Ｂの演算が終了したか否かを判断し、この場合、判断結果を「Ｎｏ」とし同判断を繰り返す。そして、拡張演算器３２Ｂの演算が終了すると、制御回路３１Ｂは、ステップＳＣ５の判断結果を「Ｙｅｓ」とし、ステップＳＣ６で演算終了通知信号ＤＮ3 を制御回路３１Ａへ出力する。
【００８０】
ステップＳＣ７では、制御回路３１Ｂは、命令デコーダ３０Ｂにより変換されたオペコード（０ｘ３ｆｆ（００１１１１１１１１１１））の［９］ビットが「１」であるか否かを判断する。すなわち、制御回路３１Ｂは、［９］ビット（この場合、「１」）に基づいて、レジスタ３６Ａに格納すべき演算結果データの型を判定する。
【００８１】
この場合、上記［９］ビットが「１」であるため、制御回路３１Ｂは、型を整数として判定し、ステップＳＣ７の判断結果を「Ｙｅｓ」とする。ステップＳＣ８では、拡張演算器３２Ｂは、拡張命令演算結果データＥＢ3 をマルチプレクサ３５へ出力する。この場合、拡張演算器３２Ｂは、制御回路３１Ｂの制御により、レジスタ３６Ｂへの拡張命令演算結果データＥＢ3 の出力を抑止する。
【００８２】
また、上述した演算終了通知信号ＤＮ3 が制御回路３１Ａに入力されると、制御回路３１Ａは、図７に示したステップＳＥ１の判断結果を「Ｙｅｓ」とする。ステップＳＥ２では、制御回路３１Ａは、既存命令演算結果データＥＡ3 を出力するか否か、言い換えれば、既存演算器３２Ａの演算が終了するか否かを判断する。ここで、既存演算器３２Ａで演算が実行されていない場合、または既存演算器３２Ａで演算が実行中であっても演算終了タイミングでない場合、制御回路３１Ａは、ステップＳＥ２の判断結果を「Ｎｏ」として、ステップＳＥ５で選択信号ＳＥＬＢ4 をマルチプレクサ３５へ出力する。これにより、マルチプレクサ３５により拡張命令演算結果データＥＢ3 が選択され、この拡張命令演算結果データＥＢ3 は、レジスタ３６Ａに格納される。
【００８３】
一方、ステップＳＥ２の判断結果が「Ｙｅｓ」である場合、すなわち、既存演算器３２Ａの演算が終了する場合、ステップＳＥ３では、制御回路３１Ａは、所定時間待機する。演算が終了すると、既存演算器３２Ａからの既存命令演算結果データＥＡ3は、マルチプレクサ３４へ直接出力されるとともに、ＦＦ回路３３に格納される。
【００８４】
そして、所定時間が経過すると、ステップＳＥ４では、制御回路３１Ａは、選択信号ＳＥＬＣ3 をマルチプレクサ３４へ出力するとともに、選択信号ＳＥＬＡ4 をマルチプレクサ３５へ出力する。これにより、マルチプレクサ３４では、ＦＦ回路３３に格納された既存命令演算結果データＥＡ3 が選択され、マルチプレクサ３５では、マルチプレクサ３４からの既存命令演算結果データＥＡ3 が選択される。この既存命令演算結果データＥＡ3 は、レジスタ３６Ａに格納される。このように、制御回路３１Ａは、レジスタ３６Ａに対する既存命令演算結果データＥＡ3 の格納タイミングと拡張命令演算結果データＥＢ3 の格納タイミングとの調停を行っているのである。
【００８５】
また、図６（ａ）に示したステップＳＣ７で［９］ビットが「０」である場合、制御回路３１Ｂは、判断結果を「Ｎｏ」とする。ステップＳＣ９では、拡張演算器３２Ｂは、拡張命令演算結果データＥＢ3 をレジスタ３６Ｂへ出力する。これにより、拡張命令演算結果データＥＢ3 は、レジスタ３６Ｂに格納される。
【００８６】
以上説明したように、実施の形態３によれば、拡張演算器３２Ｂに関する演算終了通知信号ＤＮ3 を出力し、オペコードに含まれる型判定ビットに基づいて、拡張演算器３２Ｂの拡張命令演算結果データＥＢ3 をレジスタ３６Ａにフォワードさせるようにしたので、拡張演算器３２Ｂと既存演算器３２Ａとが非同期で動作する場合であっても、既存の機構に対して最小限の設計変更で拡張命令を追加することができる。
【００８７】
また、実施の形態３によれば、レジスタ３６Ａに対する既存命令演算結果データＥＡ3 の出力タイミングと、拡張命令演算結果データＥＢ3 のフォワードタイミングとを調停するようにしたので、同一タイミングに発生するバッティングを防止することができる。
【００８８】
（実施の形態４）
図８は、本発明にかかる実施の形態４の構成を示すブロック図である。この図には、カスタマイズの要請により、第１および第２既存命令に対して第１および第２拡張命令を追加した後の演算処理装置の主要部の構成が図示されている。ここで第１既存命令は、整数乗算／除算命令であり、第１拡張命令は、整数演算命令である。また、第２既存命令は、浮動小数点加算命令であり、第２拡張命令は、浮動小数点演算命令である。この第２拡張命令は、実施の形態２の場合と同様にして、異型の演算結果データ（この場合、拡張命令演算結果データＥＢ5 ）を整数レジスタ４４に格納するという特別な命令である。
【００８９】
これらの第１および第２既存命令ならびに第１および第２拡張命令は、実施の形態１の場合と同様にして、３２ｂｉｔの命令コードからなり１６進数表現でつぎのようにそれぞれ表される。
第１既存命令：０ｘ１２１２１２１２
第１拡張命令：０ｘ８７８７８７８７
第２既存命令：０ｘ８ａ８ａ８ａ８ａ
第２拡張命令：０ｘ５ｃ５ｃ５ｃ５ｃ
【００９０】
命令デコーダ４０は、３２ｂｉｔの第１既存命令、第１拡張命令をデコードし、１２ｂｉｔのオペコード（既存命令ＣＡ4 、拡張命令ＣＢ4 ）に変換する。これらの既存命令ＣＡ4 および拡張命令ＣＢ4 は、１６進数表現（２進数表現）でつぎのようにそれぞれ表される。
既存命令ＣＡ4：０ｘ０ａａ（００００１０１０１０１０）
拡張命令ＣＢ4：０ｘ８ａａ（１０００１０１０１０１０）
【００９１】
これらの既存命令ＣＡ4 および拡張命令ＣＢ4 で実際に命令として有効なビットは、［１０：０］ビットである。このことから、既存命令ＣＡ4 および拡張命令ＣＢ4 は、それぞれの［１０：０］ビットが同値であるため、同一ビット構成の命令である。また、既存命令ＣＡ4 および拡張命令ＣＢ4 のそれぞれの［１１］ビットは、命令用のビットとしては用いられない空ビットである。
【００９２】
ただし、実施の形態４では、上記［１１］ビットは、既存命令ＣＡ4 と拡張命令ＣＢ4 とを判定するための命令種別用ビットである。すなわち、［１１］ビットが「０」である場合には、命令種別が第１既存命令であり、［１１］ビットが「１」である場合には、命令種別が第１拡張命令である。さらに、命令デコーダ４０は、第２拡張命令をデコードする。
【００９３】
ステートマシン４１は、既存整数乗算／除算器４２Ａおよび拡張整数演算器４２Ｂへ既存命令ＣＡ4 および拡張命令ＣＢ4 を通知する制御や、整数レジスタ４４への演算結果データの格納制御を行う。既存整数乗算／除算器４２Ａは、既存の演算器であり、既存命令ＣＡ4 に従って整数乗算／除算を行い、演算を終了した旨を表す演算終了通知信号ＤＮ3 をステートマシン４１へ出力する。また、既存整数乗算／除算器４２Ａは、演算結果を既存命令演算結果データＥＡ4 として出力する。
【００９４】
拡張整数演算器４２Ｂは、カスタマイズの要請により既存の機構に付加されたものであり、拡張命令ＣＢ4 に従って整数演算を行う。この拡張整数演算器４２Ｂは、演算結果を拡張命令演算結果データＥＢ4 として出力する。ここで、既存整数乗算／除算器４２Ａの演算終了サイクル数と拡張整数演算器４２Ｂの演算終了サイクル数とは、同値とされている。ここで注意すべきは、拡張整数演算器４２Ｂからは、演算終了通知信号ＤＮ3 に相当する信号が出力されない点である。また、既存命令演算結果データＥＡ4 の型（この場合、整数）と拡張命令演算結果データＥＢ4の型（この場合、整数）とは同型とされている。
【００９５】
マルチプレクサ４３は、ステートマシン４１の制御により、既存命令演算結果データＥＡ4 、拡張命令演算結果データＥＢ4 または拡張命令演算結果データＥＢ5 のいずれか一つを選択し、これを整数レジスタ４４へ出力する。具体的には、ステートマシン４１より選択信号ＳＥＬＡ5 が入力された場合、マルチプレクサ４３は、既存命令演算結果データＥＡ4 を整数レジスタ４４へ出力する。
【００９６】
また、ステートマシン４１より選択信号ＳＥＬＢ5 が入力された場合、マルチプレクサ４３は、拡張命令演算結果データＥＢ4 を整数レジスタ４４へ出力する。さらに、ステートマシン４１より選択信号ＳＥＬＣ5 が入力された場合、マルチプレクサ４３は、拡張命令演算結果データＥＢ5 を整数レジスタ４４へ出力する。ここで注意すべきは、型が整数の既存命令演算結果データＥＡ4 （拡張命令演算結果データＥＢ4）または型が浮動小数点の拡張命令演算結果データＥＢ5 が整数レジスタ４４に格納される点である。
【００９７】
一方、命令デコーダ５０は、３２ｂｉｔの第２既存命令、第２拡張命令をデコードし、１２ｂｉｔのオペコード（既存命令ＣＡ5 、拡張命令ＣＢ5 ）に変換する。これらの既存命令ＣＡ5 および拡張命令ＣＢ5 は、１６進数表現（２進数表現）でつぎのようにそれぞれ表される。
既存命令ＣＡ5：０ｘ１ｆｆ（０００１１１１１１１１１）
拡張命令ＣＢ5：０ｘ３ｆｆ（００１１１１１１１１１１）
【００９８】
これらの既存命令ＣＡ5 および拡張命令ＣＢ5 で実際に命令として有効なビットは、実施の形態１の場合と同様にして、［１１：１０．８：０］ビットである。このことから、既存命令ＣＡ5 および拡張命令ＣＢ5 は、それぞれの［１１：１０．８：０］ビットが同値であるため、同一ビット構成の命令である。また、既存命令ＣＡ5 および拡張命令ＣＢ5 のそれぞれの［９］ビットは、命令用のビットとしては用いられない空ビットである。
【００９９】
ただし、実施の形態４では、上記［９］ビットは、整数レジスタ４４に格納すべき演算結果データの型（この場合、整数または浮動小数点）を判定するための演算結果データ型判定用ビットである。すなわち、［９］ビットが「０」である場合には、整数レジスタ４４に格納すべき演算結果データの型が整数であることを意味している。一方、［９］ビットが「１」である場合には、整数レジスタ４４に格納すべき演算結果データの型が浮動小数点であることを意味している。
【０１００】
パイプライン制御回路５１は、既存浮動小数点加算器５２Ａまたは拡張浮動小数点演算器５２Ｂへ既存命令ＣＡ5 または拡張命令ＣＢ5 を通知する制御や、浮動小数点レジスタ５４および整数レジスタ４４への演算結果データの格納制御を行う。また、パイプライン制御回路５１は、既存浮動小数点加算器５２Ａおよび拡張浮動小数点演算器５２Ｂで実行されるパイプライン制御を行う。ここで、既存浮動小数点加算器５２Ａのパイプラインの段数と拡張浮動小数点演算器５２Ｂのパイプラインの段数とは異なる。
【０１０１】
既存浮動小数点加算器５２Ａは、既存の演算器であり、既存命令ＣＡ5 に従って浮動小数点加算を行い、演算結果を既存命令演算結果データＥＡ5 として出力する。拡張浮動小数点演算器５２Ｂは、カスタマイズの要請に対応する拡張命令ＣＢ5 に従って浮動小数点演算を行い、演算結果を拡張命令演算結果データＥＢ5 として出力する。マルチプレクサ５３は、パイプライン制御回路５１の制御により、既存命令演算結果データＥＡ5 または拡張命令演算結果データＥＢ5 のいずれか一方を選択し、これを浮動小数点レジスタ５４へ出力する。具体的には、パイプライン制御回路５１より選択信号ＳＥＬＡ6 が入力された場合、マルチプレクサ５３は、既存命令演算結果データＥＡ5 を浮動小数点レジスタ５４へ出力する。
【０１０２】
一方、パイプライン制御回路５１より選択信号ＳＥＬＢ6 が入力された場合、マルチプレクサ５３は、拡張命令演算結果データＥＢ5 を浮動小数点レジスタ５４へ出力する。浮動小数点レジスタ５４は、既存命令演算結果データＥＡ5 または拡張命令演算結果データＥＢ5 を一時的に格納する。
【０１０３】
つぎに、上述した実施の形態４の動作について図９および図１０に示したフローチャートを参照しつつ説明する。図９に示したステップＳＦ１で、３２ｂｉｔの第１既存命令（０ｘ１２１２１２１２）が発行されると、ステップＳＦ２では、命令デコーダ４０は、第１既存命令（０ｘ１２１２１２１２）を１２ｂｉｔのオペコード（０ｘ０ａａ（００００１０１０１０１０）に変換した後、これをステートマシン４１へ通知する。
【０１０４】
ステップＳＦ３では、ステートマシン４１は、第２拡張命令が命令デコーダ４０によりデコードされたか否かを判断し、この場合、判断結果を「Ｎｏ」とする。ステップＳＦ４では、ステートマシン４１は、命令として同値ビットからなる拡張命令ＣＢ4 （この場合、０ｘ０ａａ（００００１０１０１０１０））および既存命令ＣＡ4 （この場合、０ｘ０ａａ（００００１０１０１０１０））を拡張整数演算器４２Ｂおよび既存整数乗算／除算器４２Ａへ通知する。
【０１０５】
これにより、拡張整数演算器４２Ｂでは、拡張命令ＣＢ4 に従って演算が実行されるとともに、既存整数乗算／除算器４２Ａでは、既存命令ＣＡ4 に従って演算が実行される。これらの処理に並行して、ステップＳＦ５では、ステートマシン４１は、既存整数乗算／除算器４２Ａより演算終了通知信号ＤＮ3 が入力されたか否かを判断し、この場合、判断結果を「Ｎｏ」とし同判断を繰り返す。
【０１０６】
そして、ステップＳＦ５の判断結果が「Ｙｅｓ」になると、ステップＳＦ６では、ステートマシン４１は、命令デコーダ４０により変換されたオペコード（０ｘ０ａａ（００００１０１０１０１０））の［１１］ビット（この場合、「０」）に基づいて、命令種別を判定する。この場合、上記［１１］ビットが「０」であるため、ステートマシン４１は、命令種別を第１既存命令として判定する。
【０１０７】
つぎにステートマシン４１は、オペコード［１１］＝「０」であるため、選択信号ＳＥＬＡ5 をマルチプレクサ４３へ出力する。これにより、マルチプレクサ４３で既存命令演算結果データＥＡ4 が選択され、この既存命令演算結果データＥＡ4 は、整数レジスタ４４に格納される。
【０１０８】
一方、ステップＳＦ１で３２ｂｉｔの第１拡張命令（０ｘ８７８７８７８７）が発行されると、ステップＳＦ２では、命令デコーダ４０は、第１拡張命令（０ｘ８７８７８７８７）を１２ｂｉｔのオペコード（０ｘ８ａａ（１０００１０１０１０１０）に変換した後、これをステートマシン４１へ通知する。
【０１０９】
ステップＳＦ３では、ステートマシン４１は、第２拡張命令が命令デコーダ４０によりデコードされたか否かを判断し、この場合、判断結果を「Ｎｏ」とする。ステップＳＦ４では、ステートマシン４１は、命令として同値ビットからなる拡張命令ＣＢ4 （この場合、０ｘ８ａａ（１０００１０１０１０１０））および既存命令ＣＡ4 （この場合、０ｘ８ａａ（１０００１０１０１０１０））を拡張整数演算器４２Ｂおよび既存整数乗算／除算器４２Ａへ通知する。
【０１１０】
これにより、拡張整数演算器４２Ｂでは、拡張命令ＣＢ4 に従って演算が実行されるとともに、既存整数乗算／除算器４２Ａでは、既存命令ＣＡ4 に従って演算が実行される。これらの処理に並行して、ステップＳＦ５では、ステートマシン４１は、既存整数乗算／除算器４２Ａより演算終了通知信号ＤＮ3 が入力されたか否かを判断し、この場合、判断結果を「Ｎｏ」とし同判断を繰り返す。
【０１１１】
そして、ステップＳＦ５の判断結果が「Ｙｅｓ」になると、ステップＳＦ６では、ステートマシン４１は、命令デコーダ４０により変換されたオペコード（０ｘ８ａａ（１０００１０１０１０１０））の［１１］ビット（この場合、「１」）に基づいて、命令種別を判定する。この場合、上記［１１］ビットが「１」であるため、ステートマシン４１は、命令種別を第１拡張命令として判定する。
【０１１２】
つぎにステートマシン４１は、オペコード［１１］＝「１」であるため、選択信号ＳＥＬＢ5 をマルチプレクサ４３へ出力する。これにより、マルチプレクサ４３で拡張命令演算結果データＥＢ4 が選択され、この拡張命令演算結果データＥＢ4 は、整数レジスタ４４に格納される。
【０１１３】
図１０に示したステップＳＧ１で、３２ｂｉｔの第２既存命令（０ｘ８ａ８ａ８ａ８ａ）が発行されると、ステップＳＧ２では、命令デコーダ５０は、第２既存命令（０ｘ８ａ８ａ８ａ８ａ）を１２ｂｉｔのオペコード（０ｘ１ｆｆ（０００１１１１１１１１１）に変換した後、これをパイプライン制御回路５１へ通知する。
【０１１４】
ステップＳＧ３では、パイプライン制御回路５１は、命令として同値ビットからなる拡張命令ＣＢ5 （この場合、０ｘ１ｆｆ（０００１１１１１１１１１））および既存命令ＣＡ5 （この場合、０ｘ１ｆｆ（０００１１１１１１１１１））を拡張浮動小数点演算器５２Ｂおよび既存浮動小数点加算器５２Ａへ通知する。
【０１１５】
ステップＳＧ４では、パイプライン制御回路５１は、拡張命令ＣＢ5 および既存命令ＣＡ5 に基づいて、既存浮動小数点加算器５２Ａおよび拡張浮動小数点演算器５２Ｂに対してパイプライン制御を実行する。ステップＳＧ５では、パイプライン制御回路５１は、整数レジスタ４４に格納すべき演算結果データの型を命令デコーダ５０からの命令に基づいて判定する。
【０１１６】
ステップＳＧ６では、パイプライン制御回路５１は、演算結果データ（既存命令演算結果データＥＡ5 、拡張命令演算結果データＥＢ5 ）の出力タイミングであるか否かを判断し、この場合、判断結果を「Ｎｏ」として同判断を繰り返す。そして、演算が終了すると、パイプライン制御回路５１は、ステップＳＧ６の判断結果を「Ｙｅｓ」とする。ステップＳＧ７では、パイプライン制御回路５１は、ステップＳＧ５の判定結果に基づいて、演算結果データの型が異なるか否かを判断し、この場合、判断結果を「Ｎｏ」とする。
【０１１７】
ステップＳＧ８では、パイプライン制御回路５１は、オペコード（０ｘ１ｆｆ（０００１１１１１１１１１））の［９］ビットが「０」であるため、選択信号ＳＥＬＡ6 をマルチプレクサ５３へ出力する。これにより、既存命令演算結果データＥＡ5 が選択され、この既存命令演算結果データＥＡ5 は、浮動小数点レジスタ５４に格納される。なお、オペコードの［９］ビットが「１」である場合には、パイプライン制御回路５１は、選択信号ＳＥＬＢ6 をマルチプレクサ５３へ出力する。この場合、拡張命令演算結果データＥＢ5 が選択され、この拡張命令演算結果データＥＢ5 は、浮動小数点レジスタ５４に格納される。
【０１１８】
また、ステップＳＧ１で３２ｂｉｔの第２拡張命令（０ｘ５ｃ５ｃ５ｃ５ｃ）が発行されると、ステップＳＧ２では、命令デコーダ５０は、第２拡張命令（０ｘ５ｃ５ｃ５ｃ５ｃ）を１２ｂｉｔのオペコード（０ｘ３ｆｆ（００１１１１１１１１１１）に変換した後、これをパイプライン制御回路５１へ通知する。
【０１１９】
ステップＳＧ３では、パイプライン制御回路５１は、命令として同値ビットからなる拡張命令ＣＢ5 （この場合、０ｘ３ｆｆ（００１１１１１１１１１１））および既存命令ＣＡ5 （この場合、０ｘ３ｆｆ（００１１１１１１１１１１））を拡張浮動小数点演算器５２Ｂおよび既存浮動小数点加算器５２Ａへ通知する。
【０１２０】
ステップＳＧ４では、パイプライン制御回路５１は、拡張命令ＣＢ5 および既存命令ＣＡ5 に基づいて、既存浮動小数点加算器５２Ａおよび拡張浮動小数点演算器５２Ｂに対してパイプライン制御を実行する。ステップＳＧ５では、パイプライン制御回路５１は、整数レジスタ４４に格納すべき演算データの型を命令デコーダ５０からの命令に基づいて判定する。
【０１２１】
ステップＳＧ６では、パイプライン制御回路５１は、演算結果データ（既存命令演算結果データＥＡ5 、拡張命令演算結果データＥＢ5 ）の出力タイミングであるか否かを判断し、この場合、判断結果を「Ｎｏ」として同判断を繰り返す。そして、演算が終了すると、パイプライン制御回路５１は、ステップＳＧ６の判断結果を「Ｙｅｓ」とする。ステップＳＧ７では、パイプライン制御回路５１は、ステップＳＧ５の判定結果に基づいて、演算結果データの型が異なるか否かを判断し、この場合、判断結果を「Ｙｅｓ」とする。
【０１２２】
ステップＳＧ９では、パイプライン制御回路５１は、浮動小数点レジスタ５４への書き込みを抑止する。従って、浮動小数点レジスタ５４には、いずれの演算結果データも保持されない。また、拡張命令演算結果データＥＢ5 は、マルチプレクサ４３に入力される。ここで、命令デコーダ４０に対して第２拡張命令が発行されると、ステートマシン４１は、図９に示したステップＳＦ３の判断結果を「Ｙｅｓ」とする。
【０１２３】
ステップＳＦ７では、ステートマシン４１は、演算結果データの型が異なるか否かを判断し、この場合、判断結果を「Ｙｅｓ」とする。ステップＳＦ８では、ステートマシン４１は、選択信号ＳＥＬＣ5 をマルチプレクサ４３へ出力する。これにより、マルチプレクサ４３は、拡張命令演算結果データＥＢ5 を選択し、この拡張命令演算結果データＥＢ5 は、整数レジスタ４４に格納される。
【０１２４】
（実施の形態５）
図１１は、本発明にかかる実施の形態５の構成を示すブロック図である。この図には、カスタマイズの要請により、第１および第２既存命令に対して第１および第２拡張命令を追加した後の演算処理装置の主要部の構成が図示されている。ここで第１既存命令は、整数乗算／除算命令であり、第１拡張命令は、整数演算命令である。また、第２既存命令は、浮動小数点加算命令であり、第２拡張命令は、浮動小数点演算命令である。この第２拡張命令は、実施の形態２の場合と同様にして、異型の演算結果データ（この場合、拡張命令演算結果データＥＢ7 ）を整数レジスタ６６に格納するという特別な命令である。
【０１２５】
これらの第１および第２既存命令ならびに第１および第２拡張命令は、実施の形態４の場合と同様にして、３２ｂｉｔの命令コードからなり１６進数表現でつぎのようにそれぞれ表される。
第１既存命令：０ｘ１２１２１２１２
第１拡張命令：０ｘ８７８７８７８７
第２既存命令：０ｘ４ｂ４ｂ４ｂ４ｂ
第２拡張命令：０ｘ９ａ９ａ９ａ９ａ
【０１２６】
命令デコーダ６０は、３２ｂｉｔの第１既存命令、第１拡張命令をデコードし、１２ｂｉｔのオペコード（既存命令ＣＡ6 、拡張命令ＣＢ6 ）に変換する。これらの既存命令ＣＡ6 および拡張命令ＣＢ6 は、１６進数表現（２進数表現）でつぎのようにそれぞれ表される。
既存命令ＣＡ6：０ｘ０ａａ（００００１０１０１０１０）
拡張命令ＣＢ6：０ｘ８ａａ（１０００１０１０１０１０）
【０１２７】
これらの既存命令ＣＡ6 および拡張命令ＣＢ6 で実際に命令として有効なビットは、［１０：０］ビットである。このことから、既存命令ＣＡ6 および拡張命令ＣＢ6 は、それぞれの［１０：０］ビットが同値であるため、同一ビット構成の命令である。また、既存命令ＣＡ6 および拡張命令ＣＢ6 のそれぞれの［１１］ビットは、命令用のビットとしては用いられない空ビットである。
【０１２８】
ただし、実施の形態５では、上記［１１］ビットは、既存命令ＣＡ6 と拡張命令ＣＢ6 とを判定するための命令種別用ビットである。すなわち、［１１］ビットが「０」である場合には、命令種別が第１既存命令であり、［１１］ビットが「１」である場合には、命令種別が第１拡張命令である。
【０１２９】
ステートマシン６１は、既存整数乗算／除算器６２Ａおよび拡張整数演算器６２Ｂへ既存命令ＣＡ6 および拡張命令ＣＢ6 を通知する制御や、整数レジスタ６６への演算結果データの格納制御を行う。既存整数乗算／除算器６２Ａは、既存の演算器であり、既存命令ＣＡ6 に従って整数乗算／除算を行い、演算を終了した旨を表す演算終了通知信号ＤＮ4 をステートマシン６１へ出力する。また、既存整数乗算／除算器６２Ａは、演算結果を既存命令演算結果データＥＡ6 として出力する。
【０１３０】
拡張整数演算器６２Ｂは、カスタマイズの要請により既存の機構に付加されたものであり、拡張命令ＣＢ6 に従って整数演算を行う。この拡張整数演算器６２Ｂは、演算結果を拡張命令演算結果データＥＢ6 として出力する。ここで、既存整数乗算／除算器６２Ａの演算終了サイクル数と拡張整数演算器６２Ｂの演算終了サイクル数とは、同値とされている。ここで注意すべきは、拡張整数演算器６２Ｂからは、演算終了通知信号ＤＮ4 に相当する信号が出力されない点である。また、既存命令演算結果データＥＡ6 の型（この場合、整数）と拡張命令演算結果データＥＢ6（この場合、整数）とは同型とされている。
【０１３１】
マルチプレクサ６３は、ステートマシン６１の制御により、既存命令演算結果データＥＡ6 または拡張命令演算結果データＥＢ6 のいずれか一方を選択する。具体的には、マルチプレクサ６３は、ステートマシン６１より選択信号ＳＥＬＡ7 が入力された場合、既存命令演算結果データＥＡ6 を選択する。また、ステートマシン６１より選択信号ＳＥＬＢ7 が入力された場合、マルチプレクサ６３は、拡張命令演算結果データＥＢ6 を選択する。
【０１３２】
ＦＦ回路６４は、マルチプレクサ６３により選択された既存命令演算結果データＥＡ6 （または拡張命令演算結果データＥＢ6 ）を保持する。マルチプレクサ６５は、拡張命令演算結果データＥＢ7 、マルチプレクサ６３から直接出力された演算結果データまたはＦＦ回路６４に格納された演算結果データのいずれか一つを選択し、これを整数レジスタ６６へ出力する。
【０１３３】
具体的には、マルチプレクサ６５は、ステートマシン６１より選択信号ＳＥＬＣ8 が入力された場合、拡張命令演算結果データＥＢ7 を選択する。また、ステートマシン６１より選択信号ＳＥＬＤ8 が入力された場合、マルチプレクサ６５は、マルチプレクサ６３から直接出力された演算結果データを選択する。さらに、ステートマシン６１より選択信号ＳＥＬＥ8 が入力された場合、マルチプレクサ６５は、ＦＦ回路３３に格納された演算結果データを選択する。
【０１３４】
一方、 命令デコーダ７０は、３２ｂｉｔの第２既存命令、第２拡張命令をデコードし、１２ｂｉｔのオペコード（既存命令ＣＡ7 、拡張命令ＣＢ7 ）に変換する。これらの既存命令ＣＡ7 および拡張命令ＣＢ7 は、１６進数表現（２進数表現）でつぎのようにそれぞれ表される。
既存命令ＣＡ7：０ｘ０ｆｆ（００００１１１１１１１１）
拡張命令ＣＢ7：０ｘ８ｆｆ（１０００１１１１１１１１）
【０１３５】
これらの既存命令ＣＡ7 および拡張命令ＣＢ7 で実際に命令として有効なビットは、［１０：０］ビットである。このことから、既存命令ＣＡ7 および拡張命令ＣＢ7 は、それぞれの［１０：０］ビットが同値であるため、同一ビット構成の命令である。また、既存命令ＣＡ7 および拡張命令ＣＢ7 のそれぞれの［１１］ビットは、命令用のビットとしては用いられない空ビットである。
【０１３６】
ただし、実施の形態５では、上記［１１］ビットは、整数レジスタ６６に格納すべき演算結果データの型（この場合、整数または浮動小数点）を判定するための演算結果データ型判定用ビットである。すなわち、［１１］ビットが「０」である場合には、整数レジスタ６６に格納すべき演算結果データの型が整数であることを意味している。一方、［１１］ビットが「１」である場合には、整数レジスタ６６に格納すべき演算結果データの型が浮動小数点であることを意味している。
【０１３７】
パイプライン制御回路７１は、既存浮動小数点加算器７２Ａへ既存命令ＣＡ7 を通知する制御や、浮動小数点レジスタ７４への演算結果データの格納制御を行う。また、パイプライン制御回路７１は、既存浮動小数点加算器７２Ａおよび拡張浮動小数点演算器７２Ｂで実行されるパイプライン制御を行うとともに、フォワード信号Ｆをステートマシン６１へ出力する。このフォワード信号Ｆは、拡張命令演算結果データＥＢ7 を整数レジスタ６６へフォワードすべきことを指示する信号である。また、既存浮動小数点加算器７２Ａのパイプラインの段数と拡張浮動小数点演算器７２Ｂのパイプラインの段数とは異なる。
【０１３８】
既存浮動小数点加算器７２Ａは、既存の演算器であり、既存命令ＣＡ7 に従って浮動小数点加算を行い、演算結果を既存命令演算結果データＥＡ7 として出力する。拡張浮動小数点演算器７２Ｂは、カスタマイズの要請に対応する拡張命令ＣＢ7 に従って浮動小数点演算を行い、演算結果を拡張命令演算結果データＥＢ7 として出力する。
【０１３９】
マルチプレクサ７３は、パイプライン制御回路７１の制御により、既存命令演算結果データＥＡ7 または拡張命令演算結果データＥＢ7 のいずれか一方を選択し、これを浮動小数点レジスタ７４へ出力する。具体的には、パイプライン制御回路７１より選択信号ＳＥＬＡ9 が入力された場合、マルチプレクサ７３は、既存命令演算結果データＥＡ7 を浮動小数点レジスタ７４へ出力する。
【０１４０】
一方、パイプライン制御回路７１より選択信号ＳＥＬＢ9 が入力された場合、マルチプレクサ７３は、拡張命令演算結果データＥＢ7 を浮動小数点レジスタ７４へ出力する。浮動小数点レジスタ７４は、既存命令演算結果データＥＡ7 または拡張命令演算結果データＥＢ7 を一時的に格納する。
【０１４１】
つぎに、上述した実施の形態５の動作について図１２〜図１４に示したフローチャートを参照しつつ説明する。図１２に示したステップＳＨ１で、３２ｂｉｔの第１既存命令（０ｘ１２１２１２１２）が発行されると、ステップＳＨ２では、命令デコーダ６０は、第１既存命令（０ｘ１２１２１２１２）を１２ｂｉｔのオペコード（０ｘ０ａａ（００００１０１０１０１０）に変換した後、これをステートマシン６１へ通知する。
【０１４２】
ステップＳＨ３では、ステートマシン６１は、命令として同値ビットからなる拡張命令ＣＢ6 （この場合、０ｘ０ａａ（００００１０１０１０１０））および既存命令ＣＡ6 （この場合、０ｘ０ａａ（００００１０１０１０１０））を拡張整数演算器６２Ｂおよび既存整数乗算／除算器６２Ａへ通知する。
【０１４３】
これにより、拡張整数演算器６２Ｂでは、拡張命令ＣＢ6 に従って演算が実行されるとともに、既存整数乗算／除算器６２Ａでは、既存命令ＣＡ6 に従って演算が実行される。これらの処理に並行して、ステップＳＨ４では、ステートマシン６１は、既存整数乗算／除算器６２Ａより演算終了通知信号ＤＮ4 が入力されたか否かを判断し、この場合、判断結果を「Ｎｏ」とし同判断を繰り返す。
【０１４４】
そして、ステップＳＨ４の判断結果が「Ｙｅｓ」になると、ステップＳＨ５では、ステートマシン６１は、命令デコーダ６０により変換されたオペコード（０ｘ０ａａ（００００１０１０１０１０））の［１１］ビット（この場合、「０」）に基づいて、命令種別を判定する。この場合、上記［１１］ビットが「０」であるため、ステートマシン６１は、命令種別を第１既存命令として判定する。
【０１４５】
つぎにステートマシン６１は、オペコード［１１］＝「０」であるため、選択信号ＳＥＬＡ7 をマルチプレクサ６３へ出力する。これにより、マルチプレクサ６３で既存命令演算結果データＥＡ6 が選択され、この既存命令演算結果データＥＡ6 は、マルチプレクサ６５へ出力されるとともに、ＦＦ回路６４に保持される。
【０１４６】
一方、図１３に示したステップＳＩ１では、ステートマシン６１は、パイプライン制御回路７１よりフォワード信号Ｆが入力されたか否かを判断し、この場合、判断結果を「Ｎｏ」とする。ステップＳＩ５では、ステートマシン６１は、選択信号ＳＥＬＤ8 をマルチプレクサ６５へ出力する。これにより、マルチプレクサ６５では、マルチプレクサ６３から直接出力された既存命令演算結果データＥＡ6 が選択される。この既存命令演算結果データＥＡ6 は、整数レジスタ６６に格納される。
【０１４７】
一方、３２ｂｉｔの第１拡張命令（０ｘ８７８７８７８７）が発行されると、ステップＳＨ２では、命令デコーダ６０は、第１拡張命令（０ｘ８７８７８７８７）を１２ｂｉｔのオペコード（０ｘ８ａａ（１０００１０１０１０１０）に変換した後、これをステートマシン６１へ通知する。
【０１４８】
ステップＳＨ３では、ステートマシン６１は、命令として同値ビットからなる拡張命令ＣＢ6 （この場合、０ｘ８ａａ（１０００１０１０１０１０））および既存命令ＣＡ6 （この場合、０ｘ８ａａ（１０００１０１０１０１０））を拡張整数演算器６２Ｂおよび既存整数乗算／除算器６２Ａへ通知する。
【０１４９】
これにより、拡張整数演算器６２Ｂでは、拡張命令ＣＢ6 に従って演算が実行されるとともに、既存整数乗算／除算器６２Ａでは、既存命令ＣＡ6 に従って演算が実行される。これらの処理に並行して、ステップＳＨ４では、ステートマシン６１は、既存整数乗算／除算器６２Ａより演算終了通知信号ＤＮ4 が入力されたか否かを判断し、この場合、判断結果を「Ｎｏ」とし同判断を繰り返す。
【０１５０】
そして、ステップＳＨ４の判断結果が「Ｙｅｓ」になると、ステップＳＨ５では、ステートマシン６１は、命令デコーダ６０により変換されたオペコード（０ｘ８ａａ（１０００１０１０１０１０））の［１１］ビット（この場合、「１」）に基づいて、命令種別を判定する。この場合、上記［１１］ビットが「１」であるため、ステートマシン６１は、命令種別を第１拡張命令として判定する。
【０１５１】
つぎにステートマシン６１は、オペコード［１１］＝「１」であるため、選択信号ＳＥＬＢ7 をマルチプレクサ６３へ出力する。これにより、マルチプレクサ６３で拡張命令演算結果データＥＢ6 が選択される。また、図１３に示したステップＳＩ５では、ステートマシン６１は、選択信号ＳＥＬＤ8 をマルチプレクサ６５へ出力する。これにより、マルチプレクサ６５では、拡張命令演算結果データＥＢ6 が選択され、この拡張命令演算結果データＥＢ6 は、マルチプレクサ６５を介して整数レジスタ６６に保持される。
【０１５２】
図１４に示したステップＳＪ１で、３２ｂｉｔの第２既存命令（０ｘ４ｂ４ｂ４ｂ４ｂ）が発行されると、ステップＳＪ２では、 命令デコーダ７０は、第２既存命令（０ｘ４ｂ４ｂ４ｂ４ｂ）を１２ｂｉｔのオペコード（０ｘ０ｆｆ（００００１１１１１１１１）に変換した後、これをパイプライン制御回路７１へ通知する。
【０１５３】
ステップＳＪ３では、パイプライン制御回路７１は、命令として同値ビットからなる拡張命令ＣＢ7 （この場合、０ｘ０ｆｆ（００００１１１１１１１１））および既存命令ＣＡ7 （この場合、０ｘ０ｆｆ（００００１１１１１１１１））を拡張浮動小数点演算器７２Ｂおよび既存浮動小数点加算器７２Ａへ通知する。
【０１５４】
ステップＳＪ４では、パイプライン制御回路７１は、拡張命令ＣＢ7 および既存命令ＣＡ7 に基づいて、拡張浮動小数点演算器７２Ｂおよび既存浮動小数点加算器７２Ａに対してパイプライン制御を実行する。ステップＳＪ５では、パイプライン制御回路７１は、整数レジスタ６６に格納すべき演算データの型を命令デコーダ７０からの命令に基づいて判定する。
【０１５５】
ステップＳＪ６では、パイプライン制御回路７１は、演算結果データ（既存命令演算結果データＥＡ7 、拡張命令演算結果データＥＢ7 ）の出力タイミングであるか否かを判断し、この場合、判断結果を「Ｎｏ」として同判断を繰り返す。そして、演算が終了すると、パイプライン制御回路７１は、ステップＳＪ６の判断結果を「Ｙｅｓ」とする。ステップＳＪ７では、パイプライン制御回路７１は、ステップＳＪ５の判定結果に基づいて、演算結果データの型が異なるか否かを判断し、この場合、判断結果を「Ｎｏ」とする。
【０１５６】
ステップＳＪ８では、パイプライン制御回路７１は、オペコード（０ｘ０ｆｆ（００００１１１１１１１１））の［１１］ビットが「０」であるため、選択信号ＳＥＬＡ9 をマルチプレクサ７３へ出力する。これにより、既存命令演算結果データＥＡ7 が選択され、この既存命令演算結果データＥＡ7 は、浮動小数点レジスタ７４に格納される。なお、オペコードの［１１］ビットが「１」である場合には、パイプライン制御回路７１は、選択信号ＳＥＬＢ9 をマルチプレクサ７３へ出力する。この場合、拡張命令演算結果データＥＢ7 が選択され、この拡張命令演算結果データＥＢ7 は、浮動小数点レジスタ７４に格納される。
【０１５７】
また、３２ｂｉｔの第２拡張命令（０ｘ９ａ９ａ９ａ９ａ）が発行されると、ステップＳＪ２では、 命令デコーダ７０は、第２拡張命令（０ｘ９ａ９ａ９ａ９ａ）を１２ｂｉｔのオペコード（０ｘ８ｆｆ（１０００１１１１１１１１）に変換した後、これをパイプライン制御回路７１へ通知する。
【０１５８】
ステップＳＪ３では、パイプライン制御回路７１は、命令として同値ビットからなる拡張命令ＣＢ7 （この場合、０ｘ８ｆｆ（１０００１１１１１１１１））および既存命令ＣＡ7 （この場合、０ｘ８ｆｆ（１０００１１１１１１１１））を拡張浮動小数点演算器７２Ｂおよび既存浮動小数点加算器７２Ａへ通知する。
【０１５９】
ステップＳＪ４では、パイプライン制御回路７１は、拡張命令ＣＢ7 および既存命令ＣＡ7 に基づいて、拡張浮動小数点演算器７２Ｂおよび既存浮動小数点加算器７２Ａに対してパイプライン制御を実行する。ステップＳＪ５では、パイプライン制御回路７１は、整数レジスタ６６に格納すべき演算データの型を 命令デコーダ７０からの命令に基づいて判定する。
【０１６０】
ステップＳＪ６では、パイプライン制御回路７１は、演算結果データ（既存命令演算結果データＥＡ7 、拡張命令演算結果データＥＢ7 ）の出力タイミングであるか否かを判断し、この場合、判断結果を「Ｎｏ」として同判断を繰り返す。そして、演算が終了すると、パイプライン制御回路７１は、ステップＳＪ６の判断結果を「Ｙｅｓ」とする。ステップＳＪ７では、パイプライン制御回路７１は、ステップＳＪ５の判定結果に基づいて、演算結果データの型が異なるか否かを判断し、この場合、判断結果を「Ｙｅｓ」とする。
【０１６１】
ステップＳＪ９では、パイプライン制御回路７１は、フォワード信号Ｆをステートマシン６１へ出力する。ステップＳＪ１０では、パイプライン制御回路７１は、浮動小数点レジスタ７４への書き込みを抑止する。従って、浮動小数点レジスタ７４には、いずれの演算結果データも保持されない。また、拡張命令演算結果データＥＢ7 は、マルチプレクサ６５に入力される。
【０１６２】
また、フォワード信号Ｆがステートマシン６１に入力されると、ステートマシン６１は、図１３に示したステップＳＩ１の判断結果を「Ｙｅｓ」とする。ステップＳＩ２では、ステートマシン６１は、選択信号ＳＥＬＣ8 をマルチプレクサ６５へ出力する。これにより、マルチプレクサ６５では、拡張命令演算結果データＥＢ7 が選択され、この拡張命令演算結果データＥＢ7 は、整数レジスタ６６に格納される。
【０１６３】
ステップＳＩ３では、ステートマシン６１は、所定時間待機する。演算が終了すると、既存命令演算結果データＥＡ6 または拡張命令演算結果データＥＢ6 は、マルチプレクサ６５へ直接出力されるとともに、ＦＦ回路６４に格納される。そして、所定時間が経過すると、ステップＳＩ４では、ステートマシン６１は、選択信号ＳＥＬＥ8 をマルチプレクサ６５へ出力する。
【０１６４】
これにより、マルチプレクサ６５では、ＦＦ回路６４に格納された既存命令演算結果データＥＡ6 （または拡張命令演算結果データＥＢ6 ）が選択される。この既存命令演算結果データＥＡ6 （または拡張命令演算結果データＥＢ6 ）は、整数レジスタ６６に格納される。このように、ステートマシン６１は、整数レジスタ６６に対する拡張命令演算結果データＥＢ7 の格納タイミングと既存命令演算結果データＥＡ6 （または拡張命令演算結果データＥＢ6）の格納タイミングとの調停を行っているのである。
【０１６５】
（付記１）  既存命令、拡張命令を、少なくとも前記既存命令と前記拡張命令とを判定するための命令種別判定情報を含む同一のオペコードにデコードする命令デコード手段と、
前記オペコードに基づいて既存演算を実行し、演算終了通知信号を出力する既存演算手段と、
前記既存演算手段と同期して動作し、前記オペコードに基づいて拡張演算を実行する拡張演算手段と、
前記命令種別判定情報に基づいて命令種別を判定する命令種別判定手段と、
前記命令種別が前記拡張命令と判定されかつ前記演算終了通知信号が入力された場合に、前記拡張演算手段の演算結果データを選択する選択手段と、
を備えることを特徴とする演算処理装置。
（付記２）  前記選択手段は、前記命令種別が前記既存命令と判定されかつ前記演算終了通知信号が入力された場合に、前記既存演算手段の演算結果データを選択することを特徴とする付記１に記載の演算処理装置。
（付記３）  前記選択手段により選択された演算結果データを保持する保持手段を備えることを特徴とする付記１または２に記載の演算処理装置。
（付記４）  既存命令、拡張命令を、少なくともフォワード先に関する演算結果データの型を判定するための型判定情報を含むオペコードにデコードする命令デコード手段と、
前記オペコードに基づいて第１の型に関する既存演算を実行し、演算終了通知信号を出力する既存演算手段と、
前記既存演算手段に対応して設けられた第１保持手段と、
前記既存演算手段と同期して動作し、前記オペコードに基づいて第２の型に関する拡張演算を実行する拡張演算手段と、
前記拡張演算手段に対応して設けられた第２保持手段と、
前記型判定情報に基づいて、前記拡張演算手段の演算結果データの型がフォワード先の前記第１保持手段のデータの型と異なりかつ前記演算終了通知信号が入力された場合、前記拡張演算手段の演算結果データを前記第１保持手段へフォワードするフォワード手段と、
を備えることを特徴とする演算処理装置。
（付記５）  既存命令、拡張命令を、少なくともフォワード先に関する演算結果データの型を判定するための型判定情報を含む同一のオペコードにデコードする命令デコード手段と、
前記オペコードに基づいて第１の型に関する既存演算を実行する既存演算手段と、
前記既存演算手段に対応して設けられた第１保持手段と、
前記既存演算手段と非同期で動作し、前記オペコードに基づいて第２の型に関する拡張演算を実行する拡張演算手段と、
前記拡張演算手段の演算が終了した旨を表す演算終了通知信号を出力する出力手段と、
前記拡張演算手段に対応して設けられた第２保持手段と、
前記型判定情報に基づいて、前記拡張演算手段の演算結果データの型がフォワード先の前記第１保持手段のデータの型と異なりかつ前記演算終了通知信号が入力された場合、前記拡張演算手段の演算結果データを前記第１保持手段へフォワードするフォワード手段と、
を備えることを特徴とする演算処理装置。
（付記６）  前記演算終了通知信号が入力された場合、前記第１保持手段に対する前記既存演算手段の演算結果データの出力タイミングと、前記拡張演算手段の演算結果データのフォワードタイミングとを調停するタイミング調停手段を備えることを特徴とする付記５に記載の演算処理装置。
【０１６６】
【発明の効果】
以上説明したように、本発明によれば、オペコードに命令種別判定情報を含ませ、拡張命令が発行された場合であっても、既存演算手段からの演算終了通知信号を利用して、拡張演算手段の演算終了を認識し、この拡張演算手段の演算結果データを選択するようにしたので、既存の機構に対して最小限の設計変更で拡張命令を追加することができるという効果を奏する。
【０１６７】
また、本発明によれば、命令種別が既存命令と判定された場合に既存演算手段の演算結果データを選択するようにしたので、既存演算手段に変更を加えることなく、拡張命令を追加することができるという効果を奏する。
【０１６８】
また、本発明によれば、オペコードに含まれる型判定情報に基づいて、拡張演算手段の演算結果データを第１保持手段にフォワードさせるようにしたので、既存の機構に対して最小限の設計変更で拡張命令を追加することができるという効果を奏する。
【０１６９】
また、本発明によれば、拡張演算手段に関する演算終了通知信号を出力し、オペコードに含まれる型判定情報に基づいて、拡張演算手段の演算結果データを第１保持手段にフォワードさせるようにしたので、拡張演算手段と既存演算手段とが非同期で動作する場合であっても、既存の機構に対して最小限の設計変更で拡張命令を追加することができるという効果を奏する。
【０１７０】
また、本発明によれば、タイミング調停手段により、第１保守手段に対する既存演算手段の演算結果データの出力タイミングと、拡張演算手段の演算結果データのフォワードタイミングとを調停するようにしたので、同一タイミングに発生するバッティングを防止することができるという効果を奏する。
【０１７１】
また、付記３にかかる発明によれば、選択手段を設けて、命令種別の判定結果に応じて保持手段に保持させる演算結果データを選択するようにしたので、拡張命令用に保持手段を追加する必要がなく、コストを低減させることができるという効果を奏する。
【図面の簡単な説明】
【図１】本発明にかかる実施の形態１の構成を示すブロック図である。
【図２】同実施の形態１の動作を説明するフローチャートである。
【図３】本発明にかかる実施の形態２の構成を示すブロック図である。
【図４】同実施の形態２の動作を説明するフローチャートである。
【図５】本発明にかかる実施の形態３の構成を示すブロック図である。
【図６】同実施の形態３の動作を説明するフローチャートである。
【図７】図５に示した制御回路３１Ａの動作を説明するフローチャートである。
【図８】本発明にかかる実施の形態４の構成を示すブロック図である。
【図９】図８に示したステートマシン４１側の動作を説明するフローチャートである。
【図１０】図８に示したパイプライン制御回路５１側の動作を説明するフローチャートである。
【図１１】本発明にかかる実施の形態５の構成を示すブロック図である。
【図１２】図１１に示したステートマシン６１側の動作を説明するフローチャートである。
【図１３】図１１に示したステートマシン６１の動作を説明するフローチャートである。
【図１４】図１１に示したパイプライン制御回路７１側の動作を説明するフローチャートである。
【符号の説明】
１０  命令デコーダ
１１  制御回路
１２Ａ  既存演算器
１２Ｂ  拡張演算器
１３  マルチプレクサ
１４  レジスタ
２０  命令デコーダ
２１Ａ  制御回路
２１Ｂ  制御回路
２２Ａ  既存演算器
２２Ｂ  拡張演算器
２３    マルチプレクサ
２４Ａ  レジスタ
２４Ｂ  レジスタ
３０Ａ  命令デコーダ
３０Ｂ  命令デコーダ
３１Ａ  制御回路
３１Ｂ  制御回路
３２Ａ  既存演算器
３２Ｂ  拡張演算器
３３  ＦＦ回路
３４  マルチプレクサ
３５  マルチプレクサ
３６Ａ  レジスタ
３６Ｂ  レジスタ
【図１】
0003957948.tif 000002
【図２】
0003957948.tif 000003
【図３】
0003957948.tif 000004
【図４】
0003957948.tif 000005
【図５】
0003957948.tif 000006
【図６】
0003957948.tif 000007
【図７】
0003957948.tif 000008
【図８】
0003957948.tif 000009
【図９】
0003957948.tif 000010
【図１０】
0003957948.tif 000011
【図１１】
0003957948.tif 000012
【図１２】
0003957948.tif 000013
【図１３】
0003957948.tif 000014
【図１４】
0003957948.tif 000015