(57)【特許請求の範囲】
【請求項１】
第１及び第２のオペレーションコードフィールドと、前記第１及び第２のオペレーションコードフィールドを含む複数のオペレーションコードフィールドで指定される複数のオペレーションの実行順序を指定する実行順序指定フィールドを含む命令を処理するデータ処理装置であって、
命令をデコードする命令デコード手段と、前記命令デコード手段でのデコード結果に従って命令を実行する命令実行手段とを備え、
前記命令デコード手段は、
前記実行順序指定フィールドの指定内容により前記第１のオペレーションコードフィールドで指定されるオペレーションを第１の順序で実行する場合に、前記第１のオペレーションコードフィールドをデコードする第１のデコード手段と、
前記実行順序指定フィールドの指定内容により前記第２のオペレーションコードフィールドで指定されるオペレーションを第１の順序で実行する場合に、前記第２のオペレーションコードフィールドをデコードする第２のデコード手段と、
前記実行順序指定フィールドの指定内容により、第２の順序以降で実行するオペレーションコードフィールドを前記第１及び第２のデコード手段を含むいずれのデコード手段でデコードするかを判定する判定手段とを含み、
前記命令実行手段は、
前記第１のオペレーションコードフィールドが第１のビットパターンであり、実行順序指定フィールドにより前記第１のオペレーションコードフィールドで指定されるオペレーションが第１の順序で実行される場合には、前記第１のデコード手段のデコード結果に基づき第１のオペレーションを実行し、
前記第２のオペレーションコードフィールドが第１のビットパターンであり、実行順序指定フィールドにより前記第２のオペレーションコードフィールドで指定されるオペレーションが第１の順序で実行される場合には、前記第２のデコード手段のデコード結果に基づき第１のオペレーションとは異なる第２のオペレーションを実行し、
前記第１のオペレーションコードフィールドが第１のビットパターンであり、実行順序指定フィールドにより前記第１のオペレーションコードフィールドで指定されるオペレーションが第２の順序以降で実行され、かつ、前記判定手段において前記第２のデコード手段でデコードすると判定された場合には、前記第２のデコード手段のデコード結果に基づき第２のオペレーションを実行することを特徴とするデータ処理装置。
【請求項２】
判定手段は、第１及び第２のデコード手段とは異なるデコーダでのデコード結果に基づき判定することを特徴とする請求項１記載のデータ処理装置。
【請求項３】
判定手段は、第１及び第２のデコード手段を含む各デコーダでのデコード結果に基づき判定することを特徴とする請求項１記載のデータ処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、複数のオペレーションを並列に実行する機能を有するデータ処理装置に関するものである。
【０００２】
【従来の技術】
近年、ＶＬＩＷ（Ｖｅｒｙ  Ｌｏｎｇ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｗｏｒｄ）技術を用いた高性能プロセッサやディジタル信号処理を効率良く処理するマルチメディア向けプロセッサが開発されている。
【０００３】
ＶＬＩＷ技術を用いた場合、スーパースケーラ技術を用いる場合に比べ、単純なハードウェア制御で複数のオペレーションの並列実行が可能となるが、一般的にコードサイズが大きくなるという問題点がある。例えば、複数のオペレーションコードを備えた命令を実行する際に、実行するオペレーションがないフィールドには、ノーオペレーション（ＮＯＰ）を指定するオペレーションコードを埋め込む。何の対処もなされないと、このＮＯＰのコードのため、コードサイズが増大する。
【０００４】
例えば、ＵＳＰ５，５６１，４７０では、命令のフォーマット（ロングフォーマット、もしくは、ショートフォーマット）と実行順序を指定するフィールドを設けることにより、コードサイズを削減する技術が開示されている。しかし、実行順序指定によりシーケンシャルに実行する必要があるため、演算器が非対称なものであり実行される演算器が異なっても、オペレーションコードの値とオペレーションの内容は１対１に対応させる必要がある。別途実行させる演算器を指定するフィールドを設ければ、同一のオペレーションコードに異なるオペレーションを割り当てることが可能となるが、この場合も実行演算器を指定するフィールドが別途必要となるため、コードサイズが増大する。
【０００５】
また、基本命令長を短くするため命令数を削減しすぎると、所望の機能／性能が得られないという問題点がある。また、ある処理を実現するために必要な命令数が増え、かえってコードサイズが大きくなることもある。
【０００６】
【発明が解決しようとする課題】
従来のデータ処理装置は以上のように構成されているので、性能向上のために実行可能な命令数を増やそうとするとコードサイズが増大したり、また、基本命令長を短くするため命令数を削減しすぎると、所望の機能／性能が得られないという課題があった。
【０００７】
この発明は上記のような課題を解決するためになされたもので、実行する演算器を指定するフィールドを設けることなく、同一のオペレーションコードを複数のオペレーションに割り当てることにより、短い命令コード長により多くのオペレーションを割り当て、高性能でコード効率のよい安価なデータ処理装置を得ることを目的とする。
【０００８】
【課題を解決するための手段】
この発明に係るデータ処理装置は、命令デコード手段において、実行順序指定フィールドの指定内容により第１のオペレーションコードフィールドで指定されるオペレーションを第１の順序で実行する場合に、第１のオペレーションコードフィールドをデコードする第１のデコード手段と、実行順序指定フィールドの指定内容により第２のオペレーションコードフィールドで指定されるオペレーションを第１の順序で実行する場合に、第２のオペレーションコードフィールドをデコードする第２のデコード手段と、実行順序指定フィールドの指定内容により、第２の順序以降で実行するオペレーションコードフィールドを第１及び第２のデコード手段を含むいずれのデコード手段でデコードするかを判定する判定手段とを含み、命令実行手段は、第１のオペレーションコードフィールドが第１のビットパターンであり、実行順序指定フィールドにより第１のオペレーションコードフィールドで指定されるオペレーションが第１の順序で実行される場合には、第１のデコード手段のデコード結果に基づき第１のオペレーションを実行し、第２のオペレーションコードフィールドが第１のビットパターンであり、実行順序指定フィールドにより第２のオペレーションコードフィールドで指定されるオペレーションが第１の順序で実行される場合には、第２のデコード手段のデコード結果に基づき第１のオペレーションとは異なる第２のオペレーションを実行し、第１のオペレーションコードフィールドが第１のビットパターンであり、実行順序指定フィールドにより第１のオペレーションコードフィールドで指定されるオペレーションが第２の順序以降で実行され、かつ、判定手段において第２のデコード手段でデコードすると判定された場合には、第２のデコード手段のデコード結果に基づき第２のオペレーションを実行するようにしたものである。
【０００９】
この発明に係るデータ処理装置は、判定手段において、第１及び第２のデコード手段とは異なるデコーダでのデコード結果に基づき判定するようにしたものである。
【００１０】
この発明に係るデータ処理装置は、判定手段において、第１及び第２のデコード手段を含む各デコーダでのデコード結果に基づき判定するようにしたものである。
【００１１】
【発明の実施の形態】
以下、この発明の実施の一形態を説明する。
実施の形態１．
本データ処理装置は、１６ビットプロセッサであり、アドレス及びデータのビット長は１６ビットである。
【００１２】
図１に本データ処理装置のレジスタセットを示す。本データ処理装置は、ビット順、バイト順に関してビッグエンディアンを採用しており、ビット位置ではＭＳＢがビット０になる。
【００１３】
１６本の汎用レジスタＲ０〜Ｒ１５はデータやアドレス値を格納する。１〜１５は汎用レジスタＲ０〜Ｒ１４であり、１４のＲ１３は、サブルーチンジャンプ時の戻り先アドレスを格納するためのリンク（ＬＩＮＫ）レジスタとして割り当てられている。Ｒ１５はスタックポインタ（ＳＰ）であり、割り込み用のスタックポインタ（ＳＰＩ）１６とユーザ用のスタックポインタ（ＳＰＵ）１７とがプロセッサ・ステータス・ワード（ＰＳＷ）１８のスタックモードビット（図示せず）によって切り替えられる。以後、ＳＰＩ１６とＳＰＵ１７を総称して、スタックポインタ（ＳＰ）と呼ぶ。特別な場合を除き、４ビットのレジスタ指定フィールドでオペランドとなる各レジスタの番号が指定される。
【００１４】
また、本データ処理装置はプロセッサ・ステータス・ワード（ＰＳＷ）１８やプログラムカウンタ（ＰＣ）１９等の制御レジスタを備えている。各制御レジスタも、汎用レジスタと同様、通常レジスタの番号が４ビットで示される。本発明と直接関係がないため詳細な説明は省略する。
２１，２２は、４０ビットのアキュムレータＡ０，Ａ１である。
【００１５】
本データ処理装置は２ウェイのＶＬＩＷ（Ｖｅｒｙ  Ｌｏｎｇ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｗｏｒｄ）命令セットを処理する。図２は、本データ処理装置の命令フォーマットを示す。基本命令長は３２ビット固定であり、各命令は３２ビット境界に整置されている。ＰＣ値は、３２ビットの命令ワードアドレスで管理される。
【００１６】
各３２ビットの命令コードは、命令のフォーマットを示す２ビットのフォーマット指定ビット（ＦＭビット）５１と、１５ビットの左コンテナ５２と右コンテナ５３から構成される。各コンテナ５２，５３はそれぞれ１５ビットからなるショートフォーマットのサブ命令を格納できるほか、２つで１つの３０ビットのロングフォーマットのサブ命令を格納できる。今後、簡単のため、ショートフォーマットのサブ命令をショート命令、ロングフォーマットのサブ命令をロング命令と呼ぶ。
【００１７】
ＦＭビット５１は命令のフォーマット及び２つのショート命令の実行順序を指定する。図３に、ＦＭビット５１のフォーマット及び実行順序指定の詳細を示す。命令実行順序において、第１は先に実行される命令を、第２は後で実行される命令であることを示す。ＦＭビット５１が“１１”の場合は、コンテナ５２，５３の３０ビットで１つのロング命令を保持することを示し、それ以外の場合は各コンテナ５２，５３がそれぞれショート命令を保持することを示す。さらに、２つのショート命令を保持する場合、ＦＭビット５１で実行順序を指定する。“００”のときは、２つのショート命令を並列に実行することを示す。“０１”のときは、左コンテナ５２に保持されているショート命令を実行した後に、右コンテナ５３に保持されているショート命令を実行することを示す。“１０”のときは、右コンテナ５３に保持されているショート命令を実行した後に、左コンテナ５２に保持されているショート命令を実行することを示す。このように、シーケンシャルに実行する２つのショート命令も含めて１つの３２ビット命令にエンコードできるようにして、コード効率の向上を図っている。
【００１８】
図４から図７に典型的な命令のビット割り付けの例を示す。図４は２つのオペランドを持つショート命令のビット割り付けを示す。フィールド６１，６４は、オペレーションコードフィールドである。フィールド６４は、アキュムレータ番号を指定する場合もある。フィールド６２，６３はオペランドとして参照あるいは更新されるデータの格納位置を、レジスタ番号やアキュムレータ番号で指定する。フィールド６３は、４ビットの小さな即値を指定する場合もある。図５は、ショートフォーマットの分岐命令の割り付けを示しており、オペレーションコードフィールド７１と８ビットの分岐変位フィールド７２からなる。分岐変位は、ＰＣ値と同様、命令ワード（３２ビット）のオフセットで指定される。図６は、１６ビットの変位や即値を持つ３オペランド命令やロード／ストア命令のフォーマットを示しており、オペレーションコードフィールド８１、ショートフォーマットと同様レジスタ番号等を指定するフィールド８２，８３と、１６ビットの変位や即値等を指定する拡張データフィールド８４からなる。図７は、右コンテナ５３側にオペレーションコードを持つロング命令のフォーマットを示しており、２ビットのフィールド９１が“０１”になっている。フィールド９３と９６はオペレーションコードフィールドで、９４と９５はレジスタ番号等を指定するフィールドである。フィールド９２でさらにオペレーションコードやレジスタ番号等の指定を行うものもある。
【００１９】
上述以外に、ＮＯＰ（ノー・オペレーション）のように、１５ビットすべてがオペレーションコードとなる命令や、１オペランド命令等、特殊な命令のビット割り付けを持つものもある。
【００２０】
本データ処理装置の各サブ命令は、ＲＩＳＣライクな命令セットとなっている。メモリデータのアクセスを行う命令はロード／ストア命令のみであり、演算命令はレジスタ／アキュムレータ中のオペランドや即値オペランドに対して演算を行う。オペランドデータのアドレッシングモードとしては、レジスタ間接モード、ポストインクリメント付きレジスタ間接モード、ポストデクリメント付きレジスタ間接モード、プッシュモード、レジスタ相対間接モードの５種類ある。各々のニーモニックは、“＠Ｒｓｒｃ”、“＠Ｒｓｒｃ＋”、“＠Ｒｓｒｃ−”、“＠−ＳＰ”、“＠（ｄｉｓｐ１６、Ｒｓｒｃ）”で示される。Ｒｓｒｃはベースアドレスを指定するレジスタ番号を、ｄｉｓｐ１６は１６ビットの変位値を示す。オペランドのアドレスはバイトアドレスで指定される。
【００２１】
レジスタ相対間接モード以外のロード／ストア命令は、図４に示す命令フォーマットとなる。フィールド６３でベースレジスタ番号が指定され、フィールド６２でメモリからロードしてきた値を書き込むレジスタの番号もしくはストアする値を保持するレジスタの番号が指定される。レジスタ間接モードは、ベースレジスタとして指定されたレジスタの値がオペランドアドレスとなる。ポストインクリメント付きレジスタ間接モードは、ベースレジスタとして指定されたレジスタの値がオペランドアドレスとなり、このベースレジスタの値がオペランドのサイズ（バイト数）分ポストインクリメントされて、書き戻される。ポストデクリメント付きレジスタ間接モードは、ベースレジスタとして指定されたレジスタの値がオペランドアドレスとなり、このベースレジスタの値がオペランドのサイズ（バイト数）分ポストデクリメントされて、書き戻される。プッシュモードは、ストア命令で、かつ、ベースレジスタがＲ１５の場合にのみ使用可能であり、スタックポインタ（ＳＰ）値がオペランドのサイズ（バイト数）分プリデクリメントされた値が、オペランドアドレスとなり、デクリメントされた値がＳＰに書き戻される。
【００２２】
レジスタ相対間接モードのロード／ストア命令は図６に示す命令フォーマットとなる。フィールド８３でベースレジスタ番号が指定され、フィールド８２でメモリからロードしてきた値を書き込むレジスタの番号もしくはストアする値を保持するレジスタの番号が指定される。フィールド８４はオペランド格納位置のベースアドレスからの変位値を指定する。レジスタ相対間接モードでは、ベースレジスタとして指定されたレジスタの値に１６ビットの変位値を加算した値がオペランドアドレスとなる。
【００２３】
ジャンプ命令のジャンプ先アドレス指定には、ジャンプ先アドレスをレジスタ値で指定するレジスタ間接モードと、ジャンプ命令のＰＣからの分岐変位で指定するＰＣ相対間接モードとがある。ＰＣ相対間接モードについては、分岐変位を８ビットで指定するショートフォーマットと、分岐変位を１６ビットで指定するロングフォーマットの２種類ある。
【００２４】
図８に本データ処理装置１００の機能ブロック構成を示す。データ処理装置１００は、ＭＰＵコア部１０１と、ＭＰＵコア部１０１からの要求により命令データのアクセスを行う命令フェッチ部１０２、内蔵命令メモリ１０３、ＭＰＵコア部１０１からの要求によりオペランドデータのアクセスを行うオペランドアクセス部１０４、内蔵データメモリ１０５、命令フェッチ部１０２とオペランドアクセス部１０４からの要求を調停し、データ処理装置１００の外部のメモリアクセスを行う外部バスインタフェース部１０６からなる。図中、ＩＡは命令アドレスを、ＩＤは命令データ（命令コード）を、ＯＡはオペランドアドレスを、ＯＤはオペランドデータを示す。
【００２５】
ＭＰＵコア部１０１は、命令キュー１１１、制御部１１２、レジスタファイル１１５、第１演算部（命令実行手段）１１６、第２演算部（命令実行手段）１１７、ＰＣ部１１８からなる。
【００２６】
命令キュー１１１は、２エントリの３２ビット命令バッファと有効ビット、及び入出力ポインタ等からなり、ＦＩＦＯ（先入れ先出し）方式で制御される。命令フェッチ部１０２でフェッチされた命令データを一時保持し、制御部１１２に送る。
制御部１１２は、前述の命令キュー１１１の制御、パイプライン制御、命令の実行、命令フェッチ部１０２やオペランドアクセス部１０４とのインタフェース制御など、ＭＰＵコア部１０１のすべての制御を行う。また、制御部１１２には、命令キュー１１１から送られる命令コードをデコードするための命令デコード部１１３がある。
【００２７】
図９に命令デコード部１１３のブロック構成を示す。図中、ＭＵＸはマルチプレクサを示す。また、本図では実施の形態の説明に必要な接続関係のみを示しており、関係ない部分は図示していない。命令レジスタ１２１は、デコード対象の命令を保持する。命令デコード部１１３は、実行制御信号等を生成する２つのデコーダを備えており、２つのショートフォーマットの命令を並列にデコードすることが可能である。第１デコーダ（第１のデコード手段）１２２は、第１演算部１１６で実行する命令をデコードし、主として第１演算部１１６、ＰＣ部１１８、レジスタファイル１１５での命令実行制御信号や、分岐／ジャンプ／オペランドアクセス関連の制御信号等を生成する。第２デコーダ（第２のデコード手段）１２３は、第２演算部１１７で実行する命令をデコードし、主として第２演算部１１７、レジスタファイル１１５での命令実行制御信号を生成する。プリデコーダ（判定手段）１２４は、２つのショート命令をシーケンシャルに実行する場合、先行して実行される命令のデコード中に後で実行する側の命令をデコードし、先行命令のデコード後どちらのデコーダで後続命令のデコードを行うかを判定する。拡張データ生成部１２５は、第１演算部１１６での命令実行に必要な即値や変位等の拡張データを切り出す部分である。ロングフォーマット命令の拡張データの切り出しを行うために、右コンテナ５３のデータも送られる。第２演算部１１７での実行に必要な即値の生成は、第２デコーダ１２３に含めて図示している。Ｄステージ制御部１２６は、命令デコードステージ（Ｄステージ）における命令デコードの状態制御を行う。パイプライン処理については、後述する。（Ｄステージ制御部１２６は、命令デコード部１１３に含めて考える必要もないが、命令の解析が絡むので、本実施の形態では命令デコード部１１３に含めて説明を行う。）
【００２８】
３２ビットの命令のデコードの第１サイクルでは、必ず左コンテナ５２の命令コードが第１デコーダ１２２で解析され、右コンテナ５３の命令コードが第２デコーダ１２３で解析される。ただし、ＦＭビット５１及び左コンテナのビット０とビット１のデータは両方のデコーダで解析される。従って、最初に実行する命令はその命令を実行する演算器に対応した位置に置かれなければならない。２つのショート命令をシーケンシャルに実行する場合は、プリデコーダでのデコード結果に従い、先行する命令のデコード後、後で実行する命令の命令コードが選択されたデコーダに取り込まれ、解析される。後で実行される命令がどちらのデコーダでも処理できる命令の場合は第１デコーダ１２２でデコードする。デコード処理の詳細については、後述する。
【００２９】
レジスタファイル１１５は、１〜１７の汎用レジスタＲ０〜Ｒ１５に相当し、処理対象となるアドレスやデータの値を保持する。レジスタファイル１１５は、第１演算部１１６、第２演算部１１７、ＰＣ部１１８、オペランドアクセス部１０４と複数のバスで結合されている。ワード／２ワード／４ワードロード命令実行時には、ロードデータはオペランドアクセス部１０４から直接取り込まれる。
【００３０】
第１演算部１１６では、主としてロード／ストア命令や分岐命令、算術／論理／比較／転送命令等を実行する。
【００３１】
第１演算部１１６は、レジスタファイル１１５、オペランドアクセス部１０４、ＰＣ部１１８と複数のバスで結合されており、命令の実行に必要なデータやアドレスの転送を行う。また、演算に必要な即値や変位等の拡張データは命令デコード部１１３の拡張データ生成部１２５から取り込まれる。
【００３２】
第１演算部１１６は、ＡＬＵ（図示せず）を備えており、転送、比較、算術論理演算、オペランドアドレスの計算／転送、オペランドアドレス値のインクリメント／デクリメント、ジャンプ先アドレスの計算／転送等を行う。演算結果やアドレス更新結果はバスを介して、レジスタファイル１１５中の命令で指定されたレジスタに書き戻される。
【００３３】
ロード／ストア命令実行時には、計算されたオペランドアドレスをオペランドアクセス部１０４に出力する。ジャンプ／分岐命令実行時には、ジャンプ先アドレスをＰＣ部１１８に出力する。
【００３４】
ストア命令実行時には、レジスタファイル１１５から読み出されたストアデータを保持／整置した後、オペランドアクセス部１０４に出力する。また、バイトロード時には、オペランドアクセス部１０４から取り込まれたロードデータのバイト整置及びゼロ／符号拡張を行い、レジスタファイル１１５に出力する。
【００３５】
ＰＣ部１１８は、インクリメンタ等演算器やラッチを備えており、命令のパイプライン処理に同期し、制御部１１２の制御のもと、命令フェッチアドレスの管理／更新、実行命令ＰＣ値の管理／更新を行う。リセット直後を含め命令の処理シーケンスが切り替わった場合には、ジャンプ先アドレスが、第１演算部１１６から取り込まれ、種々のアドレスラッチの値が初期設定される。
【００３６】
命令フェッチ時には、次にフェッチする命令のアドレスを命令フェッチ部１０２に出力する。また、分岐命令の処理時には、分岐先アドレスの計算に必要な分岐命令のアドレスを第１演算部１１６に出力する。サブルーチンジャンプ／分岐命令の場合には、戻り先アドレスとしてサブルーチンジャンプ／分岐命令の次命令アドレスが第１演算部１１６を介してレジスタファイル１１５に出力される。
【００３７】
第２演算部１１７は、主として積和演算を含む算術論理演算、シフト処理、ビット操作、比較、転送等のオペレーションを行う。レジスタファイル１１５と複数のバスで接続されており、参照オペランドデータをレジスタファイル１１５から読み出し、書き込みオペランドデータをレジスタファイル１１５に出力する。第２演算部１１７は、４０ビットＡＬＵ、４０ビットバレルシフタ、１７ビットｘ１７ビット乗算器、プライオリティエンコーダ等の演算器と、図１の２１，２２の２本の４０ビットアキュムレータを含む。乗算器及び加算器は、２個ずつ備えており、２つの積和演算を並列に実行する機能も備えている。
【００３８】
次に本データ処理装置のパイプライン処理について説明する。図１０はパイプライン処理を示す図である。本データ処理装置は、命令データのフェッチを行う命令フェッチ（ＩＦ）ステージ４０１、命令の解析を行う命令デコード（Ｄ）ステージ４０２、演算実行を行う命令実行（Ｅ）ステージ４０３、データメモリのアクセスを行うメモリアクセス（Ｍ）ステージ４０４、メモリからロードしたバイトオペランドをレジスタへ書き込むライトバック（Ｗ）ステージ４０５の５段のパイプライン処理を行う。Ｅステージ４０３での演算結果のレジスタへの書き込みはＥステージ４０３、ワード（２バイト）、２ワード（４バイト）、４ワード（８バイト）ロード時のレジスタへの書き込みはＭステージ４０４で完了する。積和／積差演算に関しては、更に乗算と加算の２段のパイプラインで命令の実行を行う。後段の処理を命令実行２（Ｅ２）ステージ４０６と呼ぶ。連続する積和／積差演算を１回／１クロックサイクルのスループットで実行できる。
【００３９】
ＩＦステージ４０１では、主として命令のフェッチ、命令キュー１１１の管理が行われる。命令フェッチ部１０２、内蔵命令メモリ１０３、外部バスインタフェース部１０６、命令キュー１１１、ＰＣ部１１８の命令フェッチアドレス管理に関する部分や制御部１１２のＩＦステージステージ制御、命令フェッチ制御、ＰＣ部１１８制御等を行う部分が、このＩＦステージ４０１の制御で動作する。ＩＦステージ４０１は、Ｅステージ４０３のジャンプで処理化される。
【００４０】
ＩＦステージ４０１では、命令キュー１１１に空きがある場合、命令フェッチ要求を制御部１１２から命令フェッチ部１０２に出力する。命令フェッチアドレスの値はＰＣ部１１８から命令フェッチ部１０２に送られ、命令フェッチ部１０２が命令データのフェッチを行う。対応する命令データが内蔵命令メモリ１０３にある場合には、内蔵命令メモリ１０３から命令コードを読み出す。この場合、１クロックサイクルで３２ビットの命令のフェッチを完了する。対応する命令データが内蔵命令メモリ１０３にない場合には、外部バスインタフェース部１０６に命令フェッチ要求を出す。外部バスインタフェース部１０６は、オペランドアクセス部１０４からの要求とを調停し、命令の取り込みが可能になったら、外部のメモリから命令データを取り込み、命令フェッチ部１０２に送る。外部バスインタフェース部１０６は、最小２クロックサイクルで外部メモリのアクセスを行うことが可能である。命令フェッチ部１０２は取り込まれた命令を、命令キュー１１１に出力する。命令キュー１１１に取り込まれた命令コードが、命令デコード部１１３に出力される。
Ｄステージ４０２では、命令デコード部１１３でオペレーションコードの解析を行い、第１演算部１１６、第２演算部１１７、ＰＣ部１１８等で命令の実行を行うための制御信号群を生成する。Ｄステージ４０２は、Ｅステージ４０３のジャンプで初期化される。命令キュー１１１から送られてくる命令コードが無効な場合には、アイドルサイクルとなり、有効な命令コードが取り込まれるまで待つ。Ｅステージ４０３が次の処理を開始できない場合には、演算器等に送る制御信号を無効化し、Ｅステージ４０３における先行命令の処理の終了を待つ。例えば、Ｅステージ４０３で実行中の命令がメモリアクセスを行う命令であり、Ｍステージ４０４でのメモリアクセスが終了していない場合にこのような状態になる。
【００４１】
Ｄステージ４０２では、シーケンシャル実行を行う２命令の分割や、２サイクル実行命令のシーケンス制御も行う。さらに、スコアボードレジスタ（図示せず）を用いたロードオペランドの干渉チェックや第２演算部１１７での演算器の干渉チェック等も行い、干渉が検出された場合には、干渉が解消されるまで処理の発行を抑止する。図１１は、ロードオペランド干渉の例を示す。ワード、２ワードもしくは４ワードのロード命令の直後にロードするオペランドを参照する積和演算命令がある場合、レジスタへのロードが完了するまで、積和演算命令の実行開始を抑止する。この場合、メモリアクセスが１クロックサイクルで終了する場合でも、１クロックサイクルストールが起こる。バイトデータをロードする場合には、更にＷステージでレジスタファイルへの書き込みが完了するため、更に１サイクルストール期間が延びる。図１２は、演算ハードウェア干渉の例を示す。例えば、積和演算命令の直後に加算器を使用する丸め命令がある場合、先行の積和演算命令の演算が終了するまで丸め命令の実行開始を抑止する。この場合、１クロックサイクルストールが起こる。積和演算命令が連続する場合には、ストールは起こらない。
【００４２】
Ｅステージ４０３では、演算、比較、制御レジスタを含むレジスタ間転送、ロード／ストア命令のオペランドアドレス計算、ジャンプ命令のジャンプ先アドレスの計算、ジャンプ処理、ＥＩＴ（例外、割り込み、トラップの総称）検出と各ＥＩＴのベクタアドレスへのジャンプ等、メモリアクセスと積和／積差演算命令の加減算処理を除く命令実行に関するほとんどすべての処理を行う。
【００４３】
Ｅステージ４０３はＤステージ４０２から処理が発行されないと、アイドル状態となる。
【００４４】
Ｅステージ４０３で処理中の命令がオペランドアクセスを行う命令であり、Ｍステージ４０４でメモリアクセスが完了しない場合には、Ｅステージ４０３での完了は待たされる。ステージ制御は制御部１１２で行われる。
【００４５】
Ｅステージ４０３において、第１演算部１１６では、算術論理演算、比較、転送、メモリオペランドのアドレスや分岐先のアドレス計算等を行う。レジスタファイル１１５内の汎用レジスタ、第１演算部１１６やＰＣ部１１８内の制御レジスタ、命令デコード部１１３から取り込まれた即値、変位等の拡張データの値がソースオペランドとして読み出される。演算命令の実行時には、第１演算部１１６内のＡＬＵで転送を含む演算が行われる。デスティネーションオペランドが汎用レジスタや制御レジスタの場合、ＡＬＵでの演算結果がレジスタファイル１１５、もしくは、第１演算部１１６、ＰＣ部１１８内の制御レジスタに書き込まれる。ロード／ストア命令の場合には、演算結果（アドレス値）はオペランドアクセス部１０４に送られる。ジャンプ命令の場合には、ジャンプ先アドレスがＰＣ部１１８に送られる。ストア命令の場合には、レジスタファイル１１５から読み出されたストアデータが整置され、保持される。
【００４６】
Ｅステージ４０３では、実行する命令に依存しないＰＣ値の更新も行われる。ＰＣ部１１８では、実行中の命令のＰＣ値の管理や、次に実行する命令のアドレスの生成が行われる。Ｅステージでジャンプが起こった場合には、第１演算部１１６からジャンプ先アドレスがＰＣ部１１８に転送され、初期化される。シーケンシャルに命令の処理が継続する場合には、３２ビット命令の処理を開始するたびに、ＰＣ値がインクリメンタ（図示せず）で１インクリメントされる。
【００４７】
Ｅステージ４０３において、第２演算部１１６では、算術論理演算、比較、転送、シフト他積和演算の加減算以外のすべての演算実行が行われる。オペランドの値が、レジスタファイル１１５や即値（デコード結果、図示せず）、アキュムレータ等から読み出され、第２演算部１１７内の演算器で指定された演算を行い、演算結果がアキュムレータやレジスタファイル１１５に書き込まれる。
【００４８】
第１演算部１１６及び第２演算部１１７での演算結果によるＰＳＷ中のフラグ値の更新制御も、Ｅステージ４０３で行われる。
【００４９】
第２デコーダ１２３で生成された積和／積差演算の加減算実行のための演算制御信号は、Ｅステージ４０３制御のもとに保持される。メモリアクセス情報、ロードレジスタ情報は、Ｍステージ４０４に送られる。Ｅステージ４０３のステージ制御も制御部１１２で行われる。
【００５０】
Ｍステージ４０４では、制御部１１２からのオペランドアクセス要求に従い、第１演算部１１６から送られたアドレスでオペランドのアクセスが行われる。オペランドアクセス部１０４は、オペランドが内蔵データメモリ１０５やチップ内ＩＯ（図示せず）にある場合には、内蔵データメモリ１０５やチップ内ＩＯに対し、１クロックサイクルに１回のオペランドのリードもしくはライトを行う。オペランドが内蔵データメモリ１０５やチップ内ＩＯでない場合には、外部バスインタフェース部１０６にデータアクセス要求を出す。外部バスインタフェース部１０６は、外部のメモリに対してデータアクセスを行い、ロードの場合には読み出されたデータをオペランドアクセス部１０４に転送する。外部バスインタフェース部１０６は、最小２クロックサイクルで外部メモリのアクセスを行うことが可能である。ロードの場合には、オペランドアクセス部１０４は読み出されたデータを、バスを介して転送する。バイトデータの場合は第１演算部１１６に書き込み、ワード、２ワードもしくは４ワードデータの場合にはレジスタファイル１１５に直接書き込む。ストアの場合には、整置されたストアデータの値が第１演算部１１６からオペランドアクセス部１０４に転送され、対象となるメモリへの書き込みが行われる。非整置アクセス時の後半アクセスのアドレス生成、アクセス制御は、Ｍステージ４０４で行われる。Ｍステージ４０４のステージ制御も制御部１１２で行われる。
【００５１】
バイトデータのロードの場合、Ｗステージ４０５において、第１演算部１１６内に保持されたロードオペランド（バイト）が、整置、ゼロ／符号拡張された後に、レジスタファイル１１５に書き込まれる。
【００５２】
Ｅ２ステージ４０６では、積和／積差演算の加減算処理を行い、加減算結果をアキュムレータに書き戻される。
【００５３】
本データ処理装置は、入力クロックに基づいて内部制御を行う。最短の場合、各パイプラインステージは、内部の１クロックサイクルで処理を終了する。ここでは、クロック制御の詳細については、本発明に直接関係ないので説明を省略する。
【００５４】
各サブ命令の処理例について説明する。加減算、論理演算、比較等の演算命令やレジスタ間の転送命令は、ＩＦステージ４０１、Ｄステージ４０２、Ｅステージ４０３の３段で処理を終了する。演算やデータ転送をＥステージ４０３で行う。
【００５５】
積和／積差命令は、乗算を行うＥステージ４０３と加減算を行うＥ２ステージの２クロックサイクルで演算実行を行うため、４段の処理となる。
【００５６】
バイトロード命令は、ＩＦステージ４０１、Ｄステージ４０２、Ｅステージ４０３、Ｍステージ４０４、Ｗステージ４０５の５段で処理を終了する。ワード／２ワード／４ワードロードやストア命令は、ＩＦステージ４０１、Ｄステージ４０２、Ｅステージ４０３、Ｍステージ４０４の４段で処理を終了する。
【００５７】
非整置アクセスの場合には、オペランドアクセス部１０４でＭステージ４０４の制御のもと２回のアクセスに分割され、メモリアクセスが行われる。Ｅステージ４０３では、１クロックサイクルで処理を終了する。
【００５８】
実行に２サイクルかかる命令では、第１、第２命令デコーダ１２２，１２３で、２サイクルかけて処理し、各サイクル毎に各々実行制御信号を出力し、２サイクルかけて演算実行を行う。
【００５９】
ロング命令は、１つの３２ビット命令が１つのロング命令で構成されており、この１つのロング命令の処理で３２ビット命令の実行が完了する。並列実行する２つの命令は、２つのショート命令で処理サイクルの大きい方の命令の処理に律速される。例えば、２サイクル実行の命令と１サイクル実行の命令の組み合わせの場合には、２サイクルかかる。シーケンシャル実行の２つのショート命令の場合には、各サブ命令の組み合わせになり、デコード段階で各命令がシーケンシャルにデコードされ、実行される。例えば、Ｅステージ４０３で１サイクルで実行が完了する加算命令が２つの場合には、Ｄステージ４０２、Ｅステージ４０３とも各命令に１サイクル、計２サイクルかけて処理する。Ｅステージ４０３における先行命令の実行と並列に、Ｄステージ４０２で後続命令のデコードが行われる。
【００６０】
次に命令のビット割り付け、及び、デコード処理について、詳細な説明を行う。
【００６１】
一般的に、出来るだけ短い命令ビット長の命令コードに多くの命令を割り振れれば、同じ処理を行うのに必要なコードサイズが削減できる。また、ショート命令に割り振る命令が増えれば増えるほど、並列実行により性能向上が見込める。しかし、短いコードに多くの命令を割り振ることは容易なことではない。特に、汎用レジスタを備えるデータ処理装置では、オペランド指定のために結構命令ビット長を使用してしまうため割り振れる命令の種類が限定されてしまう。例えば、本実施の形態の場合は、ショート命令が１５ビットであるが、１６本の汎用レジスタをオペランドとして指定する２オペランド命令の場合、８ビットをオペランド指定に使用してしまうため、２オペランド命令換算で１２８命令しか割り振れない。また、本実施の形態では１命令のビット長を３２ビットとしているが、汎用性を考慮すると、３２ビットにうまく割り振れない場合、整置の問題等を考慮すると１命令のビット長が６４ビットとするのが妥当であるが、そうなるとコードサイズが激増してしまう。
【００６２】
そこで、本データ処理装置では、以下のようなビット割り付けを行っている。第１演算部１１６と第２演算部１１７は非対称な演算器となっている。ただし、レジスタ−レジスタ間、レジスタ−短い即値間の転送、比較、算術論理演算命令は、いずれの演算器でも実行可能である。第１デコーダ１２２は第１演算部１１６を使用して実行する命令をデコードする。第２デコーダ１２３は第２演算部１１７を使用して実行する命令を処理する。従って、第１デコーダ１２２と第２デコーダ１２３も非対称になっている。
【００６３】
命令がフェッチされてからデコードを開始するための遅延時間を削減するために、１命令のデコード開始時に、どのコンテナの命令コードをどのデコーダに入力するかを事前判定せずに、デコードを開始するようになっている。第１デコーダ１２２は必ず左コンテナ５２の命令コードをデコードし、第２デコーダ１２３は必ず右コンテナ５３のコードをデコードする。図９に示したように、ＦＭビット５１と左コンテナのビット０とビット１（３２ビット命令としてのビット２とビット３）は両デコーダ１２２，１２３に入力される。シーケンシャル実行２命令のうち後に実行される命令は、先に実行する命令のデコード中にプリデコーダ１２４でいずれのデコーダでデコードするかが判定され、判定結果がＤステージ制御部１２６に送られる。Ｄステージ制御部１２６の制御により、シーケンシャル実行２命令のうち先に実行する命令のデコード後、シーケンシャル実行２命令のうち後で実行する命令が選択された側のデコーダでデコードされる。簡単のため今後の説明において、シーケンシャル実行２命令のうち先に実行される命令をＳ１命令、シーケンシャル実行２命令のうち後に実行される命令をＳ２命令と呼ぶ。また、並列実行する命令をＰ命令と呼ぶ。
【００６４】
本データ処理装置のショート命令は、以下のカテゴリに分類できる。
分類Ａ：第１演算部１１６でも、第２演算部１１７でも実行可能な命令
分類Ｂ：第１演算部１１６でのみ実行可能な命令
分類Ｂ１：Ｐ、Ｓ１、Ｓ２命令として実行可能
分類Ｂ２：Ｐ、Ｓ１命令として実行可能だが、Ｓ２命令として実行不可
分類Ｃ：第２演算部１１７でのみ実行可能な命令
分類Ｃ１：Ｐ、Ｓ１、Ｓ２命令として実行可能
分類Ｃ２：Ｐ、Ｓ１命令として実行可能だが、Ｓ２命令として実行不可
【００６５】
通常、ディジタル信号処理を行う場合でさえ、プログラム全体から見るとシーケンス制御的な部分が占める割合は非常に高い。また、信号処理部分でもよく使用される命令は割合限定されている。このような基本的な演算、転送、比較、ロード／ストア、分岐命令など、静的な出現頻度が高く、コードサイズ、性能とも優先される命令は、分類Ａ、Ｂ１、Ｃ１として割り当てる。
【００６６】
特定の処理（用途）でのみ使用する命令や比較的特殊な演算を行う命令は、動的な実行頻度は比較的高いが、静的な出現頻度は比較的低いものも多い。すなわち、性能向上のため他の命令と並列実行できるようにショート命令に割り当てたいが、コードサイズは多少犠牲にしても全体のコードサイズ（コスト）にそれほど影響を及ぼさないものである。このような命令については、分類Ｂ２、Ｃ２に割り当てる。
【００６７】
Ｐ命令、Ｓ１命令の場合、配置されるコンテナの位置によって実行される演算部が決まっている。従って、同じオペレーションコードに異なるオペレーションを割り当てても問題ない。すなわち、分類Ｂ１と分類Ｃ２、及び、分類Ｃ１と分類Ｂ２に対しては、分類Ｂの命令と分類Ｃの命令で同一のオペレーションコードに対し、異なるオペレーションを行う命令を割り当てることが可能である。このようにして、命令の特性を考慮し、より多くの命令を短い命令コードに効率よく割り当てている。分類Ｂ２、Ｃ２の命令は、Ｓ２命令としてはエンコードできないため、並列実行できないＳ１命令の次に実行する場合には、先行するＳ１命令と並列に実行するＮＯＰ（Ｎｏ  Ｏｐｅｒａｔｉｏｎ）命令が挿入される。分類Ａについては、いずれの演算部で実行する場合も、同一オペレーションには同一のオペレーションコードを割り付けている。
【００６８】
以下、ハードウェア上での処理について詳細に説明する。まず、実行例としてあげる命令のビット割り付けを説明する。
【００６９】
図１３はポストインクリメント付きレジスタ間接モードのＬＤ命令とＭＡＣ２命令の命令ビット割り付けを示す。これらの２命令は、オペレーションコードフィールド２０１，２０４が同じオペレーションコードに割り振られている。ＬＤ命令は分類Ｂ１の命令であり、ＭＡＣ２命令は分類Ｃ２の命令である。このＬＤ命令は、Ｒｂフィールド２０３で指定されるレジスタＲｂに格納されているアドレスで指定される１６ビットのデータをメモリから読み出し、Ｒａフィールド２０２で指定されるレジスタＲａに書き込む。Ｒｂの値は２だけインクリメントされて、書き戻される。ＭＡＣ２命令は、２つの積和演算を並列に実行する命令である。ＲａとＲｂの値の乗算結果をアキュムレータＡ０の値に加算し、加算結果をＡ０に書き戻す。Ｒａのレジスタ番号に１足した番号のレジスタＲａ＋１（今後同様の表記を用いる）とＲｂ＋１の値の乗算結果をアキュムレータＡ１の値に加算し、加算結果をＡ１に書き戻す。
【００７０】
図１４はポストインクリメント付きレジスタ間接モードのＬＤＢ２命令とＭＡＣ命令の命令ビット割り付けを示す。これらの２命令は、オペレーションコードフィールド２０５，２０７が同じオペレーションコードに割り振られている。ただし、ＭＡＣ命令では、フィールド２０８がデスティネーションのアキュムレータ指定フィールドとなっている。アキュムレータＡ０が指定される場合に、フィールド２０６を含め全く同じオペレーションコードとなる。ＬＤＢ２命令は分類Ｂ２の命令であり、ＭＡＣ命令は分類Ｃ１の命令である。このＬＤＢ２命令は、レジスタＲｂに格納されているアドレスで指定される１６ビットのデータをメモリから読み出し、各バイトデータを１６ビットに符号拡張してレジスタＲａ、Ｒａ＋１に書き込む。Ｒｂの値は２だけインクリメントされて、書き戻される。ＭＡＣ命令は、積和演算命令である。ＲａとＲｂの値の乗算結果をＡｄフィールド２０８で指定されるアキュムレータＡｄの値に加算し、加算結果をＡｄに書き戻す。
【００７１】
図１５は、ＡＤＤ命令の命令ビット割り付けであり、ＡＤＤ命令は分類Ａの命令である。Ｒａの値とＲｂの値を加算し、Ｒａに書き戻す。図１６は、ＮＯＰ命令のビット割り付けを示す。ＮＯＰ命令も分類Ａの命令である。
【００７２】
図１７はＬＤ命令とＡＤＤ命令を並列に実行するプログラム例である。Ｉａ、Ｉｂは第１演算部１１６で実行されるロング命令を想定している。プログラム中“｜｜”は２つの命令を並列に実行することを示す。（以下同様）図１８は、図１７のＬＤ命令とＡＤＤ命令の３２ビット命令としてのエンコードの様子を示す。左コンテナにＬＤ命令が、右コンテナにＡＤＤ命令が格納され、ＦＭビットは“００”となっており、２つの命令を並列に実行することを示している。図１９に、図１７のプログラムのパイプライン処理の様子を示す。簡単のため、ＩａからＩｂまでの様子のみ示している。Ｔ３期間において、第１デコーダ１２２でＬＤ命令のデコードが行われ、第２デコーダ１２３でＡＤＤ命令のデコードが行われる。Ｔ４期間で、第１演算部１１６においてＬＤ命令のアドレス計算、ポインタ値の更新が行われ、第２演算部１１７において、ＡＤＤ命令が実行される。
【００７３】
図２０はＬＤ命令実行後、ＡＤＤ命令を実行するプログラム例である。図２１は、図２０のＬＤ命令とＡＤＤ命令の３２ビット命令としてのエンコードの様子を示す。左コンテナにＬＤ命令が、右コンテナにＡＤＤ命令が格納され、ＦＭビットは“０１”となっており、ＬＤ命令実行後ＡＤＤ命令を実行することを示している。図２２に、図２０のプログラムのパイプライン処理の様子を示す。Ｔ３期間において、第１デコーダ１２２でＳ１命令であるＬＤ命令のデコードが行われる。また、Ｔ３期間においてプリデコーダ１２４ではＳ２命令であるＡＤＤ命令のプリデコードが行われる。本実施例のデータ処理装置では、いずれの演算器でも実行可能な分類Ａの命令は、第１演算部１１６で実行するとハードウェア的に判断する。従って、ＡＤＤ命令は第１デコーダ１２２でデコードすると判定される。判定結果は、Ｄステージ制御部１２６に送られる。Ｔ４期間では、Ｄステージ制御部１２６の制御のもと、プリデコーダ１２４での判定結果に従って第１デコーダ１２２でＡＤＤ命令のデコードが行われる。Ｔ４期間では、Ｅステージ４０３においてＬＤ命令の実行が行われる。このプログラム例では、Ｒ０に関してロードオペランドの干渉が起こるため、Ｒ０のロードが完了するまでＥステージ４０３へのＡＤＤ命令の発行は抑止される。Ｔ５期間で、ＡＤＤ命令の処理がＥステージ４０３に発行され、Ｔ６期間でＡＤＤ命令が第１演算部１１６で実行される。
【００７４】
図２３はＡＤＤ命令実行後、ＬＤ命令を実行するプログラム例である。図２４、図２６は、図２３のＬＤ命令とＡＤＤ命令の３２ビット命令としてのエンコードの様子を示す。ＡＤＤ命令は分類Ａの命令であり、Ｓ１命令としてエンコードする際、左右いずれのコンテナにも格納できるため、２種類のエンコード方法が存在する。エンコード方法により、プログラム上の処理は全く変わらないが、ＡＤＤ命令が実行される演算器が異なる。図２４の場合は、左コンテナにＡＤＤ命令が、右コンテナにＬＤ命令が格納され、ＦＭビットは“０１”となっており、ＡＤＤ命令実行後ＬＤ命令を実行することを示している。図２５に、図２３のプログラムで図２４のようにエンコードされた場合のパイプライン処理の様子を示す。Ｔ３期間において、第１デコーダ１２２でＳ１命令であるＡＤＤ命令のデコードが行われる。また、Ｔ３期間においてプリデコーダ１２４ではＳ２命令であるＬＤ命令のプリデコードが行われる。ＬＤ命令は第１デコーダ１２２でデコードすると判定される。判定結果は、Ｄステージ制御部１２６に送られる。Ｔ４期間では、Ｄステージ制御部１２６の制御のもと、第１デコーダ１２２でＬＤ命令のデコードが行われる。ＡＤＤ命令は第１演算部１１６で実行される。図２６の場合は、左コンテナにＬＤ命令が、右コンテナにＡＤＤ命令が格納され、ＦＭビットは“１０”となっており、ＡＤＤ命令実行後ＬＤ命令を実行することを示している。図２７に、図２３のプログラムで図２６のようにエンコードされた場合のパイプライン処理の様子を示す。Ｔ３期間において、第２デコーダ１２３でＳ１命令であるＡＤＤ命令のデコードが行われる。また、Ｔ３期間においてプリデコーダ１２４ではＳ２命令であるＬＤ命令のプリデコードが行われる。ＬＤ命令は第１デコーダ１２２でデコードすると判定される。判定結果は、Ｄステージ制御部１２６に送られる。Ｔ４期間では、Ｄステージ制御部１２６の制御のもと、第１デコーダ１２２でＬＤ命令のデコードが行われる。ＡＤＤ命令は第２演算部１１７で実行される。
【００７５】
図２８はＡＤＤ命令とＭＡＣ２命令を並列に実行するプログラム例である。図２９は、図２８のＡＤＤ命令とＭＡＣ２命令の３２ビット命令としてのエンコードの様子を示す。左コンテナにＡＤＤ命令が、右コンテナにＭＡＣ２命令が格納され、ＦＭビットは“００”となっており、２つの命令を並列に実行することを示している。図３０に、図２８のプログラムのパイプライン処理の様子を示す。Ｔ３期間において、第１デコーダ１２２でＡＤＤ命令のデコードが行われ、第２デコーダ１２３でＭＡＣ２命令の解析が行われる。Ｔ４期間で、第１演算部においてＡＤＤ命令の実行が行われ、第２演算部において、ＭＡＣ２命令の２つの乗算が行われる。Ｔ５期間で、ＭＡＣ２命令の２つの加算が行われる。
【００７６】
図３１はＭＡＣ２命令実行後、ＡＤＤ命令を実行するプログラム例である。この例では、特にオペランドの干渉もなく並列実行可能であるが、デコード処理の説明のためシーケンシャル実行を行う場合の説明を行う。図３２は、図３１のＡＤＤ命令とＭＡＣ２命令の３２ビット命令としてのエンコードの様子を示す。左コンテナにＡＤＤ命令が、右コンテナにＭＡＣ２命令が格納され、ＦＭビットは“１０”となっており、ＭＡＣ２命令実行後ＡＤＤ命令を実行することを示している。図３３に、図３１のプログラムのパイプライン処理の様子を示す。Ｔ３期間において、第２デコーダ１２３でＳ１命令であるＭＡＣ２命令のデコードが行われる。また、Ｔ３期間においてプリデコーダ１２４ではＳ２命令であるＡＤＤ命令のプリデコードが行われ、ＡＤＤ命令は第１デコーダ１２２でデコードすると判定される。判定結果は、Ｄステージ制御部１２６に送られる。Ｔ４期間では、Ｄステージ制御部１２６の制御のもと、プリデコーダ１２４での判定結果に従って第１デコーダ１２２でＡＤＤ命令のデコードが行われる。Ｔ４期間では、Ｅステージにおいて第２演算部１１７でＭＡＣ２命令の乗算が行われ、Ｔ５期間に第１演算部１１６でＡＤＤ命令の実行が行われる。
【００７７】
図３４はＡＤＤ命令実行後、ＭＡＣ２命令を実行するプログラム例である。図３５は、図３４のＡＤＤ命令とＭＡＣ２命令の３２ビット命令としてのエンコードの様子を示す。ＭＡＣ２命令はＳ２命令として実行できない分類Ｃ２の命令である。従って、１つの３２ビット命令に格納することができない。ＭＡＣ２命令はＳ１命令としてはエンコード可能であるが、このプログラム例ではペアとなるショート命令がない。従って、各命令はＮＯＰ命令と並列実行を行うものとしてエンコードされている。図３５の例では、ＡＤＤ命令が左コンテナに格納され、右コンテナに格納されるＮＯＰ命令との並列実行を行い、ＭＡＣ２命令は右コンテナに格納され、左コンテナに格納されるＮＯＰ命令との並列実行を行う命令として、２つの３２ビット命令にエンコードされている。図３６に、図３４のプログラムで図３５のようにエンコードされた場合のパイプライン処理の様子を示す。ＡＤＤ命令とＮＯＰ命令、ＮＯＰ命令とＭＡＣ２命令がそれぞれ並列に処理される。
【００７８】
以上のように、この実施の形態１では、分類Ｂ１と分類Ｃ２、分類Ｃ１と分類Ｂ２に対して、第１演算部１１６と第２演算部１１７で実行する異なる命令を同一のオペレーションコードに割り当てることにより、限定された命令ビット長で並列実行が可能なショート命令の数を増加させており、性能が向上出来るという効果がある。さらに、分類Ｂ２、分類Ｃ２命令では、Ｓ２命令に割り振れないという制限はあるが、いずれの命令もＳ１命令としては実行可能であり、並列実行できない場合にも、コードサイズを削減できる効果もある。さらに、実行する演算器を明示的に指定するフィールドなしに、同一のオペレーションコードに異なる命令を割り当てることが可能であり、この点でもコードサイズを削減できる効果がある。コードサイズが削減できると、機器組込用途におけるプログラムＲＯＭのサイズが削減できるので、データ処理装置のコストも削減できる。さらに、プログラムＲＯＭのサイズが削減できるとＲＯＭの容量や個数が削減でき、メモリと接続するための配線長も短くできる。従って、メモリ接続のための配線容量が削減でき、消費電力も削減できる効果もある。また、メモリアクセスが全体の動作速度を律速している場合、動作周波数を向上できる効果もある。
【００７９】
このように、短い命令ビット長のオペレーションコードにより多くの命令を割り当てることが可能であり、コード効率が良く、高性能で低コストなデータ処理装置が得られる効果がある。
【００８０】
本実施の形態で示したデータ処理装置の構成例は、あくまでも一実施例を示したものであり、本発明の適用範囲を限定するものではない。
【００８１】
例えば、簡単のため、第１演算部１１６でも、第２演算部１１７でも実行可能な命令に同一命令コードを割り振っているが、各デコーダでデコードしやすいように異なるオペレーションコードに割り振っても良い。分類Ａの命令がＳ２命令の場合、第１演算部１１６で実行するようにハードウェア的に判断しているが、第２演算部１１７で処理するようにしても良い。
【００８２】
命令レジスタは物理的にどこに設けても良い。例えば、各デコーダの入り口にラッチを設け、右コンテナと左コンテナの選択後の値を保持するようにしても良い。新規にデコードが必要な命令のみをデコーダに取り込み、不要なサイクルではデコーダを動作させないことにより、消費電力を削減できる。ただし、有効な命令を発行しないように制御する必要がある。
【００８３】
上述の実施の形態では、説明を簡単にするため２並列の場合について説明を行っているが、３以上の命令を並列に実行する場合についても適応可能である。Ｎ個の命令を並列にデコードする場合、１つのオペレーションコードに最大Ｎ個の異なるオペレーションを割り当てることが可能となる。ただし、シーケンシャルに実行する２サイクル目以降で実行される命令に関しては、そのうち１つのオペレーションのみしか指定できない。Ｎ個の命令を並列にデコードする場合、シーケンシャルに１命令のみ先に実行する場合を対処しようとすると、Ｎ−１個のプリデコーダが必要となる。また、Ｎ個の命令を並列にデコードする場合、Ｎ個の命令をＮ個より小さいＭ個のグループに分割し、このＭ個の各グループ毎に本発明の技術を適用しても良い。各グループ毎に同一オペレーションコードに異なるオペレーションを割り当てる。２サイクル目以降に実行される命令については、各グループ内で規定されたオペレーションのみを実行する。
【００８４】
また、複数のＶＬＩＷ命令をさらにＶＬＩＷやスーパースケーラを使用して、制御する場合に適応することも可能である。
【００８５】
上述の実施の形態では、説明を簡単にするために、２命令を並列に実行する場合で、かつ、命令デコーダ（１２２，１２３）、及び、主として動作する演算部（１１６，１１７）が各々１個の場合について説明を行っているが、論理的に複数のデコーダ、演算器に分かれていても良い。例えば、第１演算部１１６を、分岐／ジャンプ関連の処理を行う演算部、メモリアクセス関連の処理を行う演算部、整数演算や転送等を行う演算部の３つの演算部に分離した構成をとっても良い。また、命令デコーダも論理的に複数のグループ毎に命令をデコードする部分に分けても良い。例えば、第１デコーダ１２２が、分岐／ジャンプ関連の命令をデコードするデコーダ、メモリアクセス関連の命令をデコードするデコーダ、整数演算や転送等を行うの命令をデコードするデコーダに分離した構成をとっても良い。すなわち、１つの命令をデコードするデコーダ群を１つのデコーダとしてとらえ、本技術を適用すれば良い。
【００８６】
パイプライン構成も本技術の適用に特に制限はない。
【００８７】
実施の形態２．
次に、Ｓ２命令をデコードするデコーダの判定手段を、別の構成で実現した実施の形態２について説明する。簡単のため、実施の形態１とほぼ同じ構成で、同じ命令セットを処理する場合を想定する。図３７に実施の形態２のデータ処理装置の命令デコード部３０１のブロック構成を示す。実施の形態１の命令デコード部１１３に相当する。その他の部分は、実施の形態１と全く同じである。以下、実施の形態１と異なる点に着目して説明を行う。
【００８８】
本データ処理装置の第１デコーダ（第１のデコード手段）３０２、第２デコーダ（第２のデコード手段）３０３は、実施の形態１の第１デコーダ１２２、第２デコーダ１２３に各々対応する。１つの３２ビット命令の最初のデコードサイクルで、第１デコーダ３０２は左コンテナに格納された命令のデコードを、第２デコーダ３０３は右コンテナに格納された命令のデコードを行う。シーケンシャル実行を行う２命令を処理する場合、第１デコーダ３０２、第２デコーダ３０３は、Ｓ１命令のデコード中に、取り込まれたＳ２命令のデコードを行い、各々デコード中の命令がＳ２命令であった場合に、いずれのデコーダでＳ２命令を処理すべきかを示す情報の生成を行い、その情報を２命令処理デコーダ判定部３０４に出力する。Ｓ２命令処理デコーダ判定部３０４は、この情報とＦＭビットの値に基づき、Ｓ２命令をいずれのデコーダで処理するのかを示す情報をＤステージ制御部１２６に送る。このように、実施の形態１と異なる点は、各デコーダ３０２，３０３がＳ２命令であった場合のＳ２命令処理デコーダ情報の生成を行う点にある。実施の形態２では実施の形態１のプリデコーダ１２４に相当するものはない。Ｓ１命令のデコード後、Ｓ２命令はＤステージ制御部１２６の制御のもと、選択されたデコーダでデコードされる。命令デコード部３０１での処理以外は、実施の形態１と全く同じである。
【００８９】
以上のように、この実施の形態２では、Ｓ２命令であった場合の処理デコーダの判定機能を各デコーダ毎に持たせているが、このような形態をとっても実施の形態１の場合と全く同様の処理が行える。
【００９０】
実施の形態１との対応関係を明確にするために、Ｓ２命令処理デコーダ判定部３０４を別途分離して示してあるが、非常に単純な論理であり、Ｄステージ制御部１２６等いずれに含めても良い。
【００９１】
実施の形態２のようなＳ２命令の処理デコーダの判定を行っても、実施の形態１と同じ効果を得ることが可能である。すなわち、短い命令ビット長のオペレーションコードにより多くの命令を割り当てることが可能であり、コード効率が良く、高性能で低コストなデータ処理装置が得られる効果がある。
【００９２】
また、本実施の形態２では、説明を簡単にするために２命令を並列に実行する場合について説明を行っているが、並列にデコード、及び、実行する命令数が増加した場合、実施の形態１の方法を適用すると必要なプリデコーダの数が増える。例えば、命令デコーダとしてＮ個命令を並列にデコードする場合、最大Ｎ−１個のプリデコーダが必要となり、かつ、プリデコーダへの命令コードの選択制御も複雑になる。従って、並列にデコードする命令数が多い場合には、各デコーダに処理デコーダを判定する機能を持たせた方が、プリデコードを行うための追加ハードウェア量も少なく、単純な構成となる効果がある。
【００９３】
本実施の形態２に示した技術も、実施の形態１と同様様々な構成に対して適用可能であり、同様の効果を得ることができる。
【００９４】
【発明の効果】
以上のように、この発明によれば、命令デコード手段において、実行順序指定フィールドの指定内容により第１のオペレーションコードフィールドで指定されるオペレーションを第１の順序で実行する場合に、第１のオペレーションコードフィールドをデコードする第１のデコード手段と、実行順序指定フィールドの指定内容により第２のオペレーションコードフィールドで指定されるオペレーションを第１の順序で実行する場合に、第２のオペレーションコードフィールドをデコードする第２のデコード手段と、実行順序指定フィールドの指定内容により、第２の順序以降で実行するオペレーションコードフィールドを第１及び第２のデコード手段を含むいずれのデコード手段でデコードするかを判定する判定手段とを含み、命令実行手段は、第１のオペレーションコードフィールドが第１のビットパターンであり、実行順序指定フィールドにより第１のオペレーションコードフィールドで指定されるオペレーションが第１の順序で実行される場合には、第１のデコード手段のデコード結果に基づき第１のオペレーションを実行し、第２のオペレーションコードフィールドが第１のビットパターンであり、実行順序指定フィールドにより第２のオペレーションコードフィールドで指定されるオペレーションが第１の順序で実行される場合には、第２のデコード手段のデコード結果に基づき第１のオペレーションとは異なる第２のオペレーションを実行し、第１のオペレーションコードフィールドが第１のビットパターンであり、実行順序指定フィールドにより第１のオペレーションコードフィールドで指定されるオペレーションが第２の順序以降で実行され、かつ、判定手段において第２のデコード手段でデコードすると判定された場合には、第２のデコード手段のデコード結果に基づき第２のオペレーションを実行するように構成したので、短い命令ビット長のオペレーションコードにより多くの命令を割り当てることが可能であり、コード効率が良く、高性能で低コストなデータ処理装置が得られる効果がある。
【００９５】
また、この発明によれば、判定手段において、第１及び第２のデコード手段とは異なるデコーダでのデコード結果に基づき判定するように構成したので、各デコーダに判定する機能を持たせることなく、１つのデコーダによって集中して判定することができ、単純な構成のデータ処理装置が得られる効果がある。
【００９６】
さらに、この発明によれば、判定手段において、第１及び第２のデコード手段を含む各デコーダでのデコード結果に基づき判定するように構成したので、並列にデコードする命令数が多い場合に、追加ハードウェア量も少なく、単純な構成のデータ処理装置が得られる効果がある。
【図面の簡単な説明】
【図１】  この発明の実施の形態１によるデータ処理装置のレジスタセットを示す概念図である。
【図２】  データ処理装置の命令フォーマットを示す概念図である。
【図３】  ＦＭビットのフォーマット及び実行順序指定の詳細を示す説明図である。
【図４】  ２つのオペランドを持つショート命令のビット割り付けを示す概念図である。
【図５】  ショートフォーマットの分岐命令の割り付けを示す概念図である。
【図６】  １６ビットの変位や即値を持つ３オペランド命令やロード／ストア命令のフォーマットを示す概念図である。
【図７】  右コンテナ側にオペレーションコードを持つロングフォーマットの命令のフォーマットを示す概念図である。
【図８】  データ処理装置の構成を示す機能ブロック図である。
【図９】  命令デコード部の構成を示す機能ブロック図である。
【図１０】  パイプライン処理を示す説明図である。
【図１１】  ロードオペランド干渉の例を示す概念図である。
【図１２】  演算ハードウェア干渉の例を示す概念図である。
【図１３】  ポストインクリメント付きレジスタ間接モードのＬＤ命令とＭＡＣ２命令の命令ビット割り付けを示す概念図である。
【図１４】  ポストインクリメント付きレジスタ間接モードのＬＤＢ２命令とＭＡＣ命令の命令ビット割り付けを示す概念図である。
【図１５】  ＡＤＤ命令の命令ビット割り付けを示す概念図である。
【図１６】  ＮＯＰ命令のビット割り付けを示す概念図である。
【図１７】  ＬＤ命令とＡＤＤ命令を並列に実行するプログラム例を示す説明図である。
【図１８】  ＬＤ命令とＡＤＤ命令の３２ビット命令としてのエンコードの様子を示す概念図である。
【図１９】  プログラムのパイプライン処理の様子を示す概念図である。
【図２０】  ＬＤ命令実行後、ＡＤＤ命令を実行するプログラム例を示す説明図である。
【図２１】  ＬＤ命令とＡＤＤ命令の３２ビット命令としてのエンコードの様子を示す概念図である。
【図２２】  プログラムのパイプライン処理の様子を示す概念図である。
【図２３】  ＡＤＤ命令実行後、ＬＤ命令を実行するプログラム例を示す説明図である。
【図２４】  ＬＤ命令とＡＤＤ命令の３２ビット命令としてのエンコードの様子を示す概念図である。
【図２５】  エンコードされた場合のパイプライン処理の様子を示す概念図である。
【図２６】  左コンテナにＬＤ命令が、右コンテナにＡＤＤ命令が格納された様子を示す概念図である。
【図２７】  エンコードされた場合のパイプライン処理の様子を示す概念図である。
【図２８】  ＡＤＤ命令とＭＡＣ２命令を並列に実行するプログラム例を示す説明図である。
【図２９】  ＡＤＤ命令とＭＡＣ２命令の３２ビット命令としてのエンコードの様子を示す概念図である。
【図３０】  プログラムのパイプライン処理の様子を示す概念図である。
【図３１】  ＭＡＣ２命令実行後、ＡＤＤ命令を実行するプログラム例を示す説明図である。
【図３２】  ＡＤＤ命令とＭＡＣ２命令の３２ビット命令としてのエンコードの様子を示す概念図である。
【図３３】  プログラムのパイプライン処理の様子を示す概念図である。
【図３４】  ＡＤＤ命令実行後、ＭＡＣ２命令を実行するプログラム例を示す説明図である。
【図３５】  ＡＤＤ命令とＭＡＣ２命令の３２ビット命令としてのエンコードの様子を示す概念図である。
【図３６】  プログラムでエンコードされた場合のパイプライン処理の様子を示す概念図である。
【図３７】  この発明の実施の形態２によるデータ処理装置の命令デコード部を示すブロック構成図である。
【符号の説明】
１〜１５  汎用レジスタ、１６，１７  スタックポインタ、１８，１９  制御レジスタ、２１，２２  アキュムレータ、５１  フォーマット指定ビット、５２  左コンテナ、５３  右コンテナ、６１〜６４，７１，７２，８１〜８４，９１〜９６，２０１〜２０８    フィールド、１００  データ処理装置、１０１  ＭＰＵコア部、１０２  命令フェッチ部、１０３  内蔵命令メモリ、１０４  オペランドアクセス部、１０５  内蔵データメモリ、１０６  外部バスインタフェース部、１１１  命令キュー、１１２  制御部、１１３，３０１  命令デコード部、１１５  レジスタファイル、１１６  第１演算部（命令実行手段）、１１７  第２演算部（命令実行手段）、１１８  ＰＣ部、１２１  命令レジスタ、１２２，３０２  第１デコーダ（第１のデコード手段）、１２３，３０３  第２デコーダ（第２のデコード手段）、１２４  プリデコーダ（判定手段）、１２５  拡張データ生成部、１２６  Ｄステージ制御部、３０４  Ｓ２命令処理デコーダ判定部、４０１  命令フェッチステージ、４０２  命令デコードステージ、４０３  命令実行ステージ、４０４  メモリアクセスステージ、４０５  ライトバックステージ、４０６  命令実行２ステージ。
【図１】
0004502532.tif 000002
【図２】
0004502532.tif 000003
【図３】
0004502532.tif 000004
【図４】
0004502532.tif 000005
【図５】
0004502532.tif 000006
【図６】
0004502532.tif 000007
【図７】
0004502532.tif 000008
【図８】
0004502532.tif 000009
【図９】
0004502532.tif 000010
【図１０】
0004502532.tif 000011
【図１１】
0004502532.tif 000012
【図１２】
0004502532.tif 000013
【図１３】
0004502532.tif 000014
【図１４】
0004502532.tif 000015
【図１５】
0004502532.tif 000016
【図１６】
0004502532.tif 000017
【図１７】
0004502532.tif 000018
【図１８】
0004502532.tif 000019
【図１９】
0004502532.tif 000020
【図２０】
0004502532.tif 000021
【図２１】
0004502532.tif 000022
【図２２】
0004502532.tif 000023
【図２３】
0004502532.tif 000024
【図２４】
0004502532.tif 000025
【図２５】
0004502532.tif 000026
【図２６】
0004502532.tif 000027
【図２７】
0004502532.tif 000028
【図２８】
0004502532.tif 000029
【図２９】
0004502532.tif 000030
【図３０】
0004502532.tif 000031
【図３１】
0004502532.tif 000032
【図３２】
0004502532.tif 000033
【図３３】
0004502532.tif 000034
【図３４】
0004502532.tif 000035
【図３５】
0004502532.tif 000036
【図３６】
0004502532.tif 000037
【図３７】
0004502532.tif 000038