(57)【要約】【課題】実行可能な命令を多数実装しつつも、基本命令長を短くでき、コード効率を向上させることが可能なデータ処理装置を提供すること。【解決手段】並列に実行する他方の命令のオペレーションについて、１６ビットのサチュレーションを行なうことを指示するＭＯＤ＿ＳＡＴ命令が左コンテナに配置され、ＡＤＤ命令が右コンテナに配置されている。命令デコード部がこれらの命令をデコードするときに、命令実行部に対してサチュレーション処理を伴ったＡＤＤ命令の実行を指示する。したがって、命令の組合せによって多くの命令のオペレーションを修飾でき、基本命令長を短くできると共に、コード効率を向上させることが可能となる。【選択図】図１９
2006302324.tif 000002
【特許請求の範囲】
【請求項１】
命令コードをフェッチする命令フェッチ部と、
前記命令フェッチ部によってフェッチされた命令コードをデコードする命令デコード部と、
前記命令デコード部によるデコード結果に応じて、命令を実行する命令実行部とを含むデータ処理装置であって、
命令コードがオペレーション修飾命令コードである場合、前記命令実行部に前記オペレーション修飾命令コードで指定されるオペレーション修飾対象の複数の実行単位の他の命令コードに関して、オペレーションを修飾して実行させる手段をさらに含む、データ処理装置。
【請求項２】
前記命令実行部は、オペレーションを修飾して前記他の命令コードを実行する場合に、複数組のデータに対して前記他の命令コードで指定されるオペレーションを実行する、請求項１記載のデータ処理装置。
【請求項３】
前記命令実行部は、オペレーションを修飾して前記他の命令コードを実行する場合に、各々処理対象となるデータを複数に分割し、分割された複数組のデータの各々に対して前記他の命令コードで指定されるオペレーションを実行する、請求項２記載のデータ処理装置。
【請求項４】
前記命令実行部は、オペレーションを修飾して前記他の命令コードを実行する場合に、前記他の命令コードで指定されるデータと予め定められた規則に基づき前記他の命令コードで暗黙に指定されるデータとの複数組のデータに対して前記他の命令コードで指定されるオペレーションを実行する、請求項２記載のデータ処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、命令コードをフェッチして順次実行するデータ処理装置に関し、特に、単独でも実行可能な命令のオペレーション内容を修飾する機能を有するデータ処理装置に関する。
【背景技術】
【０００２】
近年、アプリケーションの高機能化、多機能化などに伴って、マイクロプロセッサなどのデータ処理装置に要求される命令の種類も多くなっている。一般に、データ処理装置の設計時において命令セットを決定する際、ターゲットアプリケーション、コストなどを考慮して命令の取捨選択が行なわれる。
【０００３】
たとえば、製品コストを抑えるためにはコード効率を向上させることが重要である。プログラムがＲＯＭ（Read Only Memory）に書込まれるような機器組込み用途のデータ処理装置においては、プログラムサイズが製品コストを決める大きな要因となるので、コード効率を向上させることが特に重要である。
【０００４】
コード効率の向上は、実行頻度の高い命令を選択し、その命令をより短いコードサイズの命令として実装することによって達成される。しかし、基本命令長を短くするために命令数を削減し過ぎると、所望の機能や性能が得られなくなる。また、所定の処理を実現するために必要となる命令数が増えてしまい、かえってコードサイズが大きくなる場合もある。
【０００５】
一方、ある程度汎用性のあるデータ処理装置を開発する場合には、ターゲットとなるアプリケーションを効率よく処理するためにそのアプリケーションにおいて使用される命令をデータ処理装置に実装する必要がある。たとえば、マルチメディア処理に効率よく対応するためには、積和演算命令などを含んだ命令が追加される。このように、コード効率の向上によるコスト低減と、高機能化のための命令追加とは相反する。
【０００６】
たとえば、信号処理を行なうデータ処理装置においては、飽和（以下、サチュレーションとも呼ぶ。）演算が多用される。飽和演算を行なうことによってオーバーフローが発生した場合には最大値を、アンダーフローが発生した場合には最小値を演算結果として設定することによって、最大値から最小値に、または最小値から最大値に演算結果が変わってしまうことを防止することが可能となる。
【０００７】
しかし、加減算、符号反転、絶対値計算、シフトなど、飽和演算として実装されていた方がよい演算命令は多い。また、これらの１つの演算についても、オペランドが即値で与えられるものや、オペランドがレジスタ、アキュムレータまたはメモリに格納されるものなどがあり、オペランドの種類によっても多くの命令を備えなければならない。
【０００８】
このように、飽和演算機能付き命令と飽和演算機能なし命令とを共に備えると実装する命令数が増大し、命令に必要となるビット幅が増大してコード効率が低下する。特に、汎用的なデータ処理装置においては、命令のサイズが少なくともバイト（８ビット）単位となっている。さらには、ハードウェア制御を単純にし、動作周波数を向上させ、高性能化を図るために、１６／３２／６４ビット単位の命令セットを採用しているデータ処理装置が多い。したがって、命令の割当てに関する制約が大きくなり、多くの命令を短い命令長に割当てることが困難となり、コストの低減が難しくなる。
【０００９】
このような問題を解決するために、動作モードを指定する機能を備え、同じ命令コードであっても、動作モードによって異なる演算内容を実行できるデータ処理装置が開発されている。しかし、一般的にはアドレス計算などにおいては飽和演算は行われない。アドレス計算とデータ演算とで同一の命令を使用し、かつデータ演算において飽和演算を必要とする場合などにおいて、モード設定変更を頻繁に行なう必要が生じる。したがって、このような場合にモード設定変更に要するオーバヘッドが大きくなり、性能が大きく低下することが考えられる。
【００１０】
また、命令コードのみではオペレーションの内容が決定されないので、プログラムのデバッグが困難になると共に、プログラムにバグが混入される可能性が高くなる。たとえば、同一の処理をサブルーチン化する場合に、そのサブルーチンを呼出すときのモード設定が異なっていれば、その状態によってサブルーチンの動作内容が異なり、不具合を生じるなどの問題が起こり得る。
【発明の開示】
【発明が解決しようとする課題】
【００１１】
上述したように、従来のデータ処理装置においては、性能向上のために多くの独立した演算命令を実装しようとすると基本命令長が長くなり、コード効率が低下して、製品コストが高くなるといった問題点があった。
【００１２】
また、モード設定によって同一の命令で異なる演算を実行させる場合には、プログラムのデバッグが困難になり、プログラムにバグが混入される可能性が高くなると共に、モード設定変更に伴うオーバヘッドが大きくなり、処理性能が低下するといった問題点があった。
【００１３】
本発明は、上記問題点を解決するためになされたものであり、第１の目的は、実行可能な命令を多数実装しつつも、基本命令長を短くでき、コード効率を向上させることが可能なデータ処理装置を提供することである。
【００１４】
第２の目的は、ソフトウェアのデバッグが容易であり、ソフトウェアにバグが混入されるのを防止したデータ処理装置を提供することである。
【課題を解決するための手段】
【００１５】
請求項１に記載のデータ処理装置は、命令コードをフェッチする命令フェッチ部と、命令フェッチ部によってフェッチされた命令コードをデコードする命令デコード部と、命令デコード部によるデコード結果に応じて、命令を実行する命令実行部とを含むデータ処理装置であって、命令コードがオペレーション修飾命令コードである場合、命令実行部にオペレーション修飾命令コードで指定されるオペレーション修飾対象の複数の実行単位の他の命令コードに関して、オペレーションを修飾して実行させる手段をさらに含む。
【００１６】
請求項２に記載のデータ処理装置は、請求項１記載のデータ処理装置であって、命令実行部は、オペレーションを修飾して他の命令コードを実行する場合に、複数組のデータに対して他の命令コードで指定されるオペレーションを実行する。
【００１７】
請求項３に記載のデータ処理装置は、請求項２記載のデータ処理装置であって、命令実行部は、オペレーションを修飾して他の命令コードを実行する場合に、各々処理対象となるデータを複数に分割し、分割された複数組のデータの各々に対して他の命令コードで指定されるオペレーションを実行する。
【００１８】
請求項４に記載のデータ処理装置は、請求項２記載のデータ処理装置であって、命令実行部は、オペレーションを修飾して他の命令コードを実行する場合に、他の命令コードで指定されるデータと予め定められた規則に基づき他の命令コードで暗黙に指定されるデータとの複数組のデータに対して他の命令コードで指定されるオペレーションを実行する。
【発明の効果】
【００１９】
請求項１に記載のデータ処理装置によれば、命令実行部にオペレーション修飾命令コードで指定されるオペレーション修飾対象の複数の実行単位の他の命令コードに関して、オペレーションを修飾して実行させる手段を含むので、命令の組合せによって多くの命令のオペレーションを修飾でき、基本命令長を短くできると共に、コード効率を向上させることが可能となった。また、命令コードのみでオペレーションの内容が決まるので、ソフトウェアのデバッグが容易であり、ソフトウェアにバグが混入されるのを防止することが可能となる。さらには、１つの命令コードで複数の他の命令コードのオペレーションを修飾するので、さらにコード効率を向上させることが可能となった。
【００２０】
請求項２に記載のデータ処理装置によれば、１つのデータに対してオペレーションを実行する命令を実装するだけで、複数組のデータに対してオペレーションを実行できるようになり、コード効率を向上させることが可能となった。
【００２１】
請求項３に記載のデータ処理装置によれば、１つのデータに対してオペレーションを実行する命令を実装するだけで、複数組のデータの各々に対してオペレーションを実行できるようになり、コード効率を向上させることが可能となった。
【００２２】
請求項４に記載のデータ処理装置によれば、様々なデータの組合せに対するオペレーションを実行することが可能となった。
【発明を実施するための最良の形態】
【００２３】
（第１の実施の形態）
本発明の第１の実施の形態においては、データ処理装置が１６ビットプロセッサであり、アドレスおよびデータのビット長が１６ビットの場合について説明するが、アドレスおよびデータのビット長が３２ビットや６４ビットの場合にも適用可能である。
【００２４】
図１は、本発明の第１の実施の形態におけるデータ処理装置のレジスタセットを説明するための図である。このデータ処理装置は、ビット順およびバイト順に関してビッグエンディアンを採用しており、ビット位置においてはＭＳＢ（Most Significant Bit）がビット０となる。
【００２５】
１６本の汎用レジスタＲ０（１）〜Ｒ１５（１６，１７）は、データやアドレス値を格納する。レジスタＲ１３（１４）は、サブルーチンジャンプ時における戻り先アドレスを格納するためのリンク（ＬＩＮＫ）レジスタとして割当てられている。レジスタＲ１５（１６，１７）は、スタックポインタ（ＳＰ）であり、割込み用のスタックポインタＳＰＩ１６と、ユーザ用のスタックポインタＳＰＵ１７とを含む。これらのレジスタは、後述するプロセッサ・ステータス・ワード（ＰＳＷ）１８内のスタックモードビットによって切替えられる。以下、ＳＰＩ１６およびＳＰＵ１７を総称してスタックポインタ（ＳＰ）と呼ぶ。なお、特別な場合を除き、４ビットのレジスタ指定フィールドでオペランドとなるレジスタの番号が指定される。
【００２６】
また、本実施の形態におけるデータ処理装置においては、ＰＳＷ（ＣＲ０）１８、図示しないプログラムカウンタ（ＰＣ）などの制御レジスタを備えている。これらの制御レジスタも汎用レジスタと同様に、レジスタの番号が４ビットで示される。なお、これらのレジスタは本発明と直接関係がないため詳細な説明は省略する。
【００２７】
レジスタＡ０（２１）およびＡ１（２２）は、４０ビットのアキュムレータを示している。
【００２８】
図２は、ＰＳＷ１８の詳細を説明するための図である。このＰＳＷ１８は、割込み用スタックポインタＳＰＩ１６およびユーザ用スタックポインタＳＰＵ１７のいずれを選択するかを示すスタックモード（ＳＭ）ビット３１と、比較命令などでセットされ、条件分岐命令などの条件として参照される条件フラグであるＦ０フラグ３３、Ｆ１フラグ３４、サチュレーション（Ｓ）フラグ３５およびキャリー（Ｃ）フラグ３６とを含む。その他の状態フラグやモードビット３２は、本発明と直接関係がないため詳細な説明は省略する。
【００２９】
図３は、本実施の形態におけるデータ処理装置の命令フォーマットを説明するための図である。本実施の形態におけるデータ処理装置は、２ウェイのＶＬＩＷ（Very Long Instruction Word）命令セットを処理する。基本命令長は、３２ビット固定であり、３２ビット境界に整置されている。ＰＣ値は３２ビットの命令ワードアドレスで管理される。
【００３０】
図３に示すように、３２ビットの命令コードは、命令のフォーマットを示す２ビットのフォーマット指定（ＦＭ）ビット５１と、１５ビットの左コンテナ５２と、１５ビットの右コンテナ５３とによって構成される。左コンテナ５２および右コンテナ５３は、それぞれ１５ビットのショートフォーマットのサブ命令を格納できる他、２つのコンテナで３０ビットのロングフォーマットのサブ命令を格納することもできる。以下、簡単のために、ショートフォーマットのサブ命令をショート命令と呼び、ロングフォーマットのサブ命令をロング命令と呼ぶことにする。
【００３１】
図４は、ＦＭビット５１の内容を説明するための図である。ＦＭビット５１は、命令のフォーマットおよび２つのショート命令の実行順序を指定する。命令実行順序において、第１は先に実行される命令を示し、第２は後で実行される命令を示している。ＦＭビット５１が“１１”の場合には、左コンテナ５２および右コンテナ５３が３０ビットの１つのロング命令を保持することを示している。それ以外の場合には、左コンテナ５２および右コンテナ５３が、それぞれショート命令を保持することを示している。
【００３２】
ＦＭビット５１が“００”の場合には、２つのショート命令を並列に実行することを示している。また、ＦＭビット５１が“０１”の場合には、左コンテナ５２に保持されるショート命令を実行した後、右コンテナ５３に保持されるショート命令を実行することを示している。また、ＦＭビット５１が“１０”の場合には、右コンテナ５３に保持されるショート命令を実行した後、左コンテナ５２に保持されるショート命令を実行することを示している。このように、シーケンシャルに実行される２つのショート命令を１つの３２ビット命令にエンコードできるようにして、コード効率の向上を図っている。
【００３３】
図５〜図７は、本実施の形態におけるデータ処理装置の典型的な命令のビット割付けの一例を示す図である。図５は、２つのオペランドを持ったショート命令のビット割付けを示している。フィールド６１および６４は、オペレーションコードフィールドである。また、フィールド６４によって、アキュムレータ番号を指定する場合もある。
【００３４】
フィールド６２および６３は、オペランドとして参照または更新されるデータの格納位置を、レジスタ番号やアキュムレータ番号で指定する。また、フィールド６３によって、４ビットの即値を指定する場合もある。
【００３５】
図６は、ショートフォーマットの分岐命令のビット割付けを示している。この命令フォーマットは、７ビットのオペレーションコードフィールド７１と、８ビットの分岐変位フィールド７２とによって構成される。分岐変位は、ＰＣ値と同様に、当該命令ワード（３２ビット）からのオフセットで指定される。
【００３６】
図７は、１６ビットの変位や即値を持った３オペンランド命令やロード／ストア命令のビット割付けを示している。この命令フォーマットは、オペレーションコードフィールド８１と、ショートフォーマットと同様にレジスタ番号などを指定するフィールド８２および８３と、１６ビットの変位や即値などを指定する拡張データフィールド８４とによって構成される。
【００３７】
上述した命令フォーマット以外に、ＮＯＰ（No OPeration）命令のように、１５ビット全てがオペレーションコードとなる命令や、１オペランド命令などの特殊なビット割付けを有する命令もある。
【００３８】
本実施の形態におけるデータ処理装置に実装される各サブ命令は、ＲＩＳＣ（Reduced Instruction Set Computer）ライクな命令セットとなっている。メモリにアクセスする命令はロード／ストア命令のみである。演算命令は、レジスタまたはアキュムレータに格納されたオペランドや、即値オペランドに対する演算を行なう。
【００３９】
オペランドデータに対するアクセスのアドレッシングモードとしては、レジスタ間接モード、ポストインクリメント付きレジスタ間接モード、ポストデクリメント付きレジスタ間接モード、プッシュモードおよびレジスタ相対間接モードの５種類がある。これら５種類のニーモニックはそれぞれ、“＠Ｒｓｒｃ”、“＠Ｒｓｒｃ＋”、“＠Ｒｓｒｃ−”、“＠−ＳＰ”および“＠（ｄｉｓｐ１６，Ｒｓｒｃ）”で示される。Ｒｓｒｃはベースアドレスを指定するレジスタ番号を示し、ｄｉｓｐ１６は１６ビットの変位値を示している。なお、オペランドのアドレスはバイトアドレスで指定される。
【００４０】
レジスタ相対間接モード以外のロード／ストア命令は、図５に示す命令フォーマットとなる。すなわち、フィールド６３によってベースレジスタ番号が指定され、フィールド６２によってメモリからロードした値を書込むレジスタの番号またはストアする値を保持するレジスタの番号が指定される。
【００４１】
レジスタ間接モードにおいては、ベースレジスタとして指定されたレジスタの値がオペランドアドレスとなる。
【００４２】
ポストインクリメント付きレジスタ間接モードにおいては、ベースレジスタとして指定されたレジスタの値がオペランドアドレスとなり、このベースレジスタの値がオペランドのサイズ（バイト数）分だけポストインクリメントされてレジスタに書き戻される。
【００４３】
ポストデクリメント付きレジスタ間接モードにおいては、ベースレジスタとして指定されたレジスタの値がオペランドアドレスとなり、このベースレジスタの値がオペランドのサイズ（バイト数）分だけポストデクリメントされてレジスタに書き戻される。
【００４４】
プッシュモードは、ストア命令であり、かつベースレジスタがＲ１５（ＳＰ）の場合にのみ使用可能であり、ＳＰ値がオペランドのサイズ（バイト数）だけポストデクリメントされてオペランドアドレスとなり、そのデクリメントされた値がＳＰに書き戻される。
【００４５】
レジスタ相対間接モードのロード／ストア命令のフォーマットは、図７に示す命令フォーマットとなる。フィールド８３によってベースレジスタの番号が指定され、フィールド８２によってメモリからロードした値を書込むレジスタの番号またはメモリにストアする値を保持するレジスタの番号が指定される。また、フィールド８４によってベースアドレスからの変位値が指定される。このレジスタ相対間接モードにおいては、ベースレジスタとして指定されたレジスタの値に１６ビットの変位値が加算されて、オペランドアドレスとされる。
【００４６】
ジャンプ命令のジャンプ先アドレス指定には、ジャンプ先アドレスをレジスタに格納された値で指定するレジスタ間接モードと、ＰＣ値からの分岐変位でジャンプ先アドレスを指定するＰＣ相対間接モードとがある。このＰＣ相対間接モードにおいては、分岐変位を８ビットで指定するショートフォーマットと、分岐変位を１６ビットで指定するロングフォーマットとの２種類がある。
【００４７】
図８は、本発明の第１の実施の形態におけるデータ処理装置の概略構成を示すブロック図である。このデータ処理装置１００は、ＭＰＵ（Micro Processing Unit）コア部１０１と、ＭＰＵコア部１０１からの要求に応じて命令データをフェッチする命令フェッチ部１０２と、内蔵命令メモリ１０３と、ＭＰＵコア部１０１からの要求に応じてオペランドデータのアクセスを行なうオペランドアクセス部１０４と、内蔵データメモリ１０５と、命令フェッチ部１０２およびオペランドアクセス部１０４からの要求を調停し、データ処理装置１００の外部にあるメモリ対してアクセスを行なう外部バスインタフェース部１０６とを含む。
【００４８】
また、ＭＰＵコア部１０１は、ＭＰＵコア部１０１の全体的な制御を行なう制御部１１１と、レジスタファイル１１５と、第１演算部１１６と、第２演算部１１７と、ＰＣ値を制御するＰＣ部１１８とを含む。さらには、制御部１１１は、命令キュー１１２と、命令デコード部１１３とを含む。
【００４９】
命令キュー１１２は、２エントリの３２ビット命令バッファ、その有効ビットおよび入出力ポインタなどによって構成され、ＦＩＦＯ（First In First Out）方式で制御される。命令キュー１１２は、命令フェッチ部１０２によってフェッチされた命令データを一時保持し、この命令データを命令デコード部１１３へ送出する。命令デコード部１１３は、実行する命令データをデコードし、命令の実行に必要な制御信号を生成する。
【００５０】
図９は、命令デコード部１１３をさらに詳細に説明するためのブロック図である。図９に示すブロック図は、本実施の形態におけるデータ処理装置の説明に必要な接続関係のみを示しており、その説明に関係しない部分については図示していない。
【００５１】
この命令デコード部１１３は、命令キュー１１２から受けた命令データを保持する命令レジスタ１２１と、第１デコーダ１２２と、第２デコーダ１２３と、プリデコーダ１２４と、拡張データ生成部１２５と、Ｄステージ制御部１２６とを含む。
【００５２】
命令レジスタ１２１は、命令キュー１１２から受けたデコード対象の命令データを保持する。なお、この命令レジスタ１２１に保持される命令データのフォーマットは、図３に示す命令フォーマットと同様である。
【００５３】
命令デコード部１１３は、実行制御信号等を生成する２つのデコーダ（第１デコーダ１２２、第２デコーダ１２３）を備えており、２つのショート命令を並列にデコードすることが可能である。
【００５４】
第１デコーダ１２２は、第１演算部１１６が実行する命令をデコードするものであり、主として第１演算部１１６、ＰＣ部１１８およびレジスタファイル１１５の命令実行制御信号や、分岐／ジャンプ／オペランドアクセスに関連した制御信号などを生成する。
【００５５】
第２デコーダ１２３は、第２演算部１１７が実行する命令をデコードするものであり、主として第２演算部１１７およびレジスタファイル１１５の命令実行制御信号を生成する。
【００５６】
プリデコーダ１２４は、２つのショート命令がシーケンシャルに実行される場合、先行して実行されるショート命令の実行中に後で実行するショート命令をデコードして、先行命令の実行後に第１デコーダ１２２および第２デコーダ１２３のどちらで後続命令のデコードを行なうかを判定する。
【００５７】
なお、第１デコーダ１２２、第２デコーダ１２３およびプリデコーダ１２４は、それぞれマルチプレクサ（ＭＵＸ）を有しており、左コンテナ５２に保持されるショート命令と右コンテナ５３に保持されるショート命令とのいずれかを選択的に入力することが可能である。
【００５８】
拡張データ生成部１２５は、第１デコーダ１２２からデコード結果を受け、第１演算部１１６における命令実行に必要な即値、変位等の拡張データを切出す。ロングフォーマット命令の拡張データの切出しを行なうために、右コンテナ５３に格納されるデータも拡張データ生成部１２５へ転送される。なお、第２演算部１１７における命令実行に必要な即値、変位等を生成する部分は、第２デコーダ１２３に含めて図示している。
【００５９】
Ｄステージ制御部１２６は、後述する命令デコードステージ（Ｄステージ）における命令デコードの状態制御を行なう。なお、Ｄステージ制御部１２６は、命令デコード部１１３に含める必要はないが、命令の解析が関係するので、本実施の形態においては命令デコード部１１３に含めて説明するものとする。
【００６０】
３２ビット命令のデコードの第１サイクルにおいては、必ず左コンテナ５２に格納される命令コードが第１デコーダ１２２において解析され、右コンテナ５３に格納される命令コードが第２デコーダ１２３において解析される。ただし、ＦＭビット５１と左コンテナ５２のビット０およびビット１とは、両方のデコーダによって解析される。したがって、最初に実行される命令は、その命令を実行する演算部に対応する位置に置かれなければならない。
【００６１】
２つのショート命令がシーケンシャルに実行される場合には、プリデコーダ１２４におけるデコード結果にしたがって、先行するショート命令がデコードされた後、後で実行されるショート命令がデコードするべきデコーダに取込まれ、解析される。後で実行されるショート命令が、どちらのデコーダによっても処理できる命令の場合には、第１デコーダ１２２がそのショート命令をデコードする。
【００６２】
レジスタファイル１１５は、図１に示す汎用レジスタＲ０〜Ｒ１５（１〜１７）に相当し、処理対象となるアドレス値やデータを保持する。このレジスタファイル１１５は、第１演算部１１６、第２演算部１１７、ＰＣ部１１８およびオペランドアクセス部１０４と複数のバスで接続されている。ワード／２ワードロード命令実行時には、ロードデータがオペランドアクセス部１０４から直接レジスタファイル１１５に取込まれる。
【００６３】
第１演算部１１６は、主としてロード／ストア命令、分岐命令、算術演算命令、論理演算命令、比較命令、転送命令などを実行する。この第１演算部１１６は、レジスタファイル１１５、ＰＣ部１１８およびオペランドアクセス部１０４と複数のバスで接続されており、それらとの間で命令の実行に必要なデータやアドレスの転送を行なう。また、第１演算部１１６は、演算に必要な即値、変位等の拡張データを拡張データ生成部１２５から取込む。
【００６４】
また、第１演算部１１６は、図示しないＡＬＵ（Arithmetic and Logic Unit）を備えており、転送、比較、算術演算、論理演算、オペランドアドレスの計算／転送、オペランドアドレス値のインクリメント／デクリメント、ジャンプ先アドレスの計算／転送などを行なう。第１演算部１１６は、演算結果やアドレス更新結果をバスを介して、命令で指定されたレジスタファイル１１５内のレジスタに書き戻す。
【００６５】
ロード／ストア命令実行時には、第１演算部１１６は、計算したオペランドアドレスをオペランドアクセス部１０４へ出力する。また、ジャンプ／分岐命令実行時には、ジャンプ先アドレスをＰＣ部１１８へ出力する。
【００６６】
ストア命令実行時には、第１演算部１１６は、レジスタファイル１１５から読出したストアデータを保持／整置した後、オペランドアクセス部１０４へ出力する。また、バイトロード時には、第１演算部１１６は、オペランドアクセス部１０４から取込んだロードデータのバイト整置およびゼロ／符号拡張を行ない、レジスタファイル１１５へ出力する。
【００６７】
ＰＣ部１１８は、インクリメンタ等の演算器やラッチなどを備えており、制御部１１１の制御によって、命令のパイプライン処理に同期して命令フェッチアドレスの管理／更新、実行命令ＰＣ値の管理／更新を行なう。リセット直後を含め命令の処理シーケンスが切替わった場合に、ＰＣ部１１８はジャンプ先アドレスを第１演算部１１６から取込み、ＰＣ部１１８内の種々のアドレスラッチの値が初期設定される。
【００６８】
命令フェッチ時には、ＰＣ部１１８は、次にフェッチする命令のアドレスを命令フェッチ部１０２へ出力する。また、分岐命令の処理時には、ＰＣ部１１８は、分岐先アドレスの計算に必要な分岐命令のアドレスを第１演算部１１６へ出力する。また、サブルーチンジャンプ／分岐命令の場合には、ＰＣ部１１８は、サブルーチンジャンプ／分岐命令の次命令アドレスを戻り先アドレスとしてレジスタファイル１１５へ出力する。
【００６９】
第２演算部１１７は、主として積和演算を含む算術演算、シフト処理、ビット操作、比較、転送などの処理を行なう。第２演算部１１７は、レジスタファイル１１５と複数のバスで接続されており、参照オペランドデータをレジスタファイル１１５から読出し、書込みオペランドデータをレジスタファイル１１５へ出力する。
【００７０】
第２演算部１１７は、４０ビットＡＬＵ、４０ビットバレルシフタ、１７ビット×１７ビット乗算器、プライオリティエンコーダなどの演算器と、図１に示す２本の４０ビットアキュムレータ３１および３２とを含む。
【００７１】
図１０は、本発明の第１の実施の形態におけるデータ処理装置１００のパイプライン処理を説明するための図である。データ処理装置１００は、命令データのフェッチを行なう命令フェッチ（ＩＦ）ステージ４０１と、命令の解析を行なう命令デコード（Ｄ）ステージ４０２と、演算実行を行なう命令実行（Ｅ）ステージ４０３と、データメモリに対するアクセスを行なうメモリアクセス（Ｍ）ステージ４０４と、メモリからロードしたバイトオペランドをレジスタに書込むライトバック（Ｗ）ステージ４０５との５段のパイプライン処理を行なう。
【００７２】
Ｅステージ４０３における演算結果のレジスタへの書込みは、Ｅステージ４０３で完了する。また、ワード（２バイト）、２ワード（４バイト）ロード時におけるレジスタへのデータ書込みは、Ｍステージ４０４で完了する。積和／積差演算については、さらに乗算と加算との２段のパイプラインで命令の実行が行なわれる。この後段の処理（加算）を命令実行２（Ｅ２）ステージ４０６と呼ぶ。このように、２段のパイプラインで乗算と加算とを行なうことにより、連続する積和／積差演算を１回／１クロックサイクルのスループットで実行できる。
【００７３】
ＩＦステージ４０１においては、主として命令のフェッチおよび命令キュー１１２の管理が行なわれる。命令フェッチ部１０２、内蔵命令メモリ１０３、外部バスインタフェース部１０６およびＰＣ部１１８の命令フェッチアドレス管理に関する部分や、制御部１１１のＩＦステージ制御、命令フェッチ制御、ＰＣ部１１８の制御などを行なう部分が、このＩＦステージ４０１の制御で動作する。ＩＦステージ４０１は、Ｅステージ４０３におけるジャンプの実行時に初期化される。
【００７４】
ＩＦステージ４０１においては、命令キュー１１２に空きがある場合、制御部１１１が命令フェッチ要求を命令フェッチ部１０２へ出力する。命令フェッチ部１０２は、ＰＣ部１１８から転送された命令フェッチアドレスの値に応じて、命令データのフェッチを行なう。
【００７５】
対応する命令データが内蔵命令メモリ１０３にある場合には、命令フェッチ部１０２は内蔵命令メモリ１０３から命令データをフェッチする。この場合、１クロックサイクルで３２ビットの命令データのフェッチが完了する。
【００７６】
対応する命令データが内蔵命令メモリ１０３にない場合には、命令フェッチ部１０２は外部バスインタフェース部１０６に命令フェッチ要求を出力する。外部バスインタフェース部１０６は、この命令フェッチ要求とオペランドアクセス部１０４からの要求との調停を行ない、命令のフェッチが可能となったときに外部メモリから命令データを取込み、命令フェッチ部１０２へ出力する。外部バスインタフェース部１０６は、最小２クロックサイクルで外部メモリに対するアクセスを行なうことが可能である。命令フェッチ部１０２は、フェッチした命令を命令キュー１１２へ出力する。命令キュー１１２に取込まれた命令データが、順次命令デコード部１１３へ出力される。
【００７７】
Ｄステージ４０２においては、命令デコード部１１３がオペレーションコードの解析を行ない、第１演算部１１６、第２演算部１１７、ＰＣ部１１８などの命令の実行に関連した部分を制御するための制御信号群を生成する。Ｄステージ４０２は、Ｅステージ４０３におけるジャンプの実行時に初期化される。Ｄステージ４０２において、命令キュー１１２から無効な命令コードが転送された場合には、アイドルサイクルとなって有効な命令コードが転送されるまで待機する。
【００７８】
Ｅステージ４０３が次の処理を開始できない場合には、命令デコーダ１１３は演算器などに出力する制御信号を無効化し、Ｅステージ４０３における先行命令の処理の終了を待つ。たとえば、Ｅステージ４０３で実行中の命令がメモリアクセスを行なう命令であり、そのときＭステージ４０４でメモリアクセスを行なっている場合には、Ｅステージ４０３における先行命令の処理が待たされて、このような状態になる。
【００７９】
また、Ｄステージ４０２においては、シーケンシャルに実行が行なわれる２命令の分割や、２サイクル実行命令のシーケンス制御も行なわれる。さらに、Ｄステージ４０２において、図示しないスコアボードレジスタを用いたロードオペランドの干渉チェックや、第２演算部１１７の演算器の干渉チェックなども行なわれ、干渉が検出された場合には、干渉が解消されるまで処理の発行を抑止する。
【００８０】
ワードまたは２ワードのロード命令の直後に、ロードするオペランドを参照する演算命令がある場合には、レジスタへのロードが完了するまで演算命令の実行開始を抑止する。この場合、メモリアクセスが１クロックサイクルで終了する場合でも、１クロックサイクルのストールが発生する。バイトデータをロードする場合には、さらにＷステージ４０５でレジスタファイル１１５への書込みが完了するため、さらに１サイクルだけストール期間が延びる。
【００８１】
また、積和演算命令の直後に加算器を使用する丸め処理がある場合には、命令デコード部１１３は、先行の積和演算命令の演算が終了するまで丸め命令の実行開始を抑止する。この場合、１クロックサイクルのストールが発生する。積和演算命令が連続する場合には、ストールは発生しない。
【００８２】
Ｅステージ４０３においては、演算、比較、制御レジスタを含むレジスタ間転送、ロード／ストア命令のオペランドアドレス計算、ジャンプ命令のジャンプ先アドレスの計算、ジャンプ処理、ＥＩＴ（例外、割込み、トラップ）検出、各ＥＩＴのベクタアドレスへのジャンプなど、メモリアクセスと積和／積差演算命令の加減算処理とを除く命令処理に関するほとんど全ての処理が行なわれる。
【００８３】
Ｅステージ４０３は、Ｄステージ４０２から処理が発行されないと、アイドル状態となる。Ｅステージ４０３で処理中の命令がオペランドアクセスを行なう命令であり、Ｍステージ４０４でメモリアクセスが完了していない場合には、Ｅステージ４０３における処理の完了が待たされる。
【００８４】
Ｅステージ４０３において、第１演算部１１６は、算術演算、論理演算、比較、転送、メモリオペランドのアドレスや分岐先のアドレス計算などを行なう。Ｅステージ４０３において、レジスタファイル１１５内の汎用レジスタ、第１演算部１１６やＰＣ部１１８内の制御レジスタ、命令デコード部１１３から取込まれた即値、変位などの拡張データの値がソースオペランドとして読出される。
【００８５】
演算命令の実行時には、第１演算部１１６内のＡＬＵにおいて転送を含む演算が行なわれる。デスティネーションオペランドが汎用レジスタや制御レジスタの場合には、ＡＬＵにおける演算結果がレジスタファイル１１５、若しくは、第１演算部１１６またはＰＣ部１１８内の制御レジスタに書込まれる。
【００８６】
ロード／ストア命令の場合には、第１演算部１１６が演算結果（アドレス値）をオペランドアクセス部１０４へ転送する。ジャンプ命令の場合には、第１演算部１１６がジャンプ先アドレスをＰＣ部１１８へ転送する。また、ストア命令の場合には、第１演算部１１６がレジスタファイル１１５から読出したストアデータを整置し、その値を保持する。
【００８７】
また、Ｅステージ４０３においては、実行する命令に依存しないＰＣ値の更新も行なわれる。ＰＣ部１１８は、実行中の命令のＰＣ値の管理や、次に実行する命令のアドレスの生成を行なう。Ｅステージ４０３において、ジャンプが起こった場合には、第１演算部１１６がジャンプ先アドレスをＰＣ部１１８へ転送し、初期化が行なわれる。シーケンシャルにショート命令の実行が行なわれる場合には、３２ビット命令の処理が開始されるたびに、ＰＣ部１１８内の図示しないインクリメンタがＰＣ値を１だけインクリメントする。
【００８８】
Ｅステージ４０３において、第２演算部１１７は、算術演算、論理演算、比較、転送、シフトなど、積和演算の加算以外の全ての演算処理を行なう。第２演算部１１７は、オペランドの値として、レジスタファイル１１５やアキュムレータに保持される値、第２デコーダ１２３によって切出された即値を読出し、第２演算部１１７内の演算器でその値に指定された演算を行なう。そして、演算結果がレジスタファイル１１５またはアキュムレータに書込まれる。
【００８９】
Ｅステージ４０３においては、第１演算部１１６または第２演算部１１７における演算結果によるＰＳＷ中のフラグ値の更新制御も行なわれる。また、Ｅステージ４０３は、第２デコーダ１２３が生成した積和／積差演算における加算／減算の実行のための演算制御信号を保持する。メモリアクセス情報、ロードレジスタ情報は、Ｍステージ４０４に転送される。なお、Ｅステージ４０３のステージ制御は制御部１１１によって行なわれる。
【００９０】
Ｍステージ４０４は、制御部１１１からのオペランドアクセス要求に応じて、第１演算部１１６から転送されたアドレスを用いてオペランドのアクセスを行なう。オペランドアクセス部１０４は、オペランドが内蔵データメモリ１０５や図示しないチップ内Ｉ／Ｏにある場合には、内蔵データメモリ１０５やチップ内Ｉ／Ｏに対して、１クロックサイクルで１回のオペランドの読出し、または書込みを行なう。
【００９１】
オペランドが内蔵データメモリ１０５やチップ内Ｉ／Ｏにない場合には、外部バスインタフェース１０６に対してデータアクセス要求を出力する。外部バスインタフェース部１０６は、データアクセス要求を受けると、外部メモリに対してデータアクセスを行なう。
【００９２】
ロードの場合には、オペランドアクセス部１０４は、外部バスインタフェース部１０６によって読出されたデータをバスを介して転送する。バイトデータの場合には、第１演算部１１６へデータが転送される。また、ワードまたは２ワードデータの場合には、レジスタファイル１１５に直接データが書込まれる。
【００９３】
ストアの場合には、オペランドアクセス部１０４が第１演算部１１６から整置されたストアデータを受け、外部バスインタフェース部１０６を介して、対象となる外部メモリにデータを書込む。非整置アクセス時における後半アクセスのアドレス生成およびアクセス制御は、Ｍステージ４０４において行なわれる。
【００９４】
バイトデータのロードの場合には、Ｗステージ４０５において、第１演算部１１６内に保持されたロードオペランド（バイト）が、整置、ゼロ／符号拡張された後、レジスタファイル１１５に書込まれる。
【００９５】
Ｅ２ステージ４０６においては、積和／積差演算の加算処理または減算処理が行なわれ、加算結果または減算結果がアキュムレータに書き戻される。
【００９６】
本実施の形態におけるデータ処理装置は、入力クロックに基づいて内部制御を行ない、最短の場合、各パイプラインステージは１クロックサイクルで処理を終了する。なお、本実施の形態においては、クロック制御が直接関係しないので、詳細な説明は省略する。
【００９７】
次に、各サブ命令の処理の一例について説明する。加算／減算、論理演算、比較などの演算命令やレジスタ間の転送命令は、ＩＦステージ４０１、Ｄステージ４０２およびＥステージ４０３の３段で処理が終了する。演算やデータ転送は、Ｅステージ４０３で行なわれる。
【００９８】
積和／積差演算命令は、Ｅステージ４０３における乗算処理と、Ｅ２ステージ４０６における加算／減算処理との２クロックサイクルで演算実行される。したがって、ＩＦステージ４０１、Ｄステージ４０２、Ｅステージ４０３およびＥ２ステージ４０６の４段で処理が終了する。
【００９９】
バイトロード命令は、ＩＦステージ４０１、Ｄステージ４０２、Ｅステージ４０３、Ｍステージ４０４およびＷステージ４０５の５段で処理が終了する。ワード／２ワードロード命令やストア命令は、ＩＦステージ４０１、Ｄステージ４０２、Ｅステージ４０３およびＭステージ４０４の４段で処理が終了する。
【０１００】
非整置アクセスの場合には、Ｍステージ４０４においては、オペランドアクセス部１０４が２回のアクセスに分割して、メモリアクセスを行なう。Ｅステージ４０３においては、１クロックサイクルで処理が終了する。実行に２サイクルを要する命令においては、第１命令デコーダ１２２または第２命令デコーダ１２３が各サイクル毎に実行制御信号を生成して出力し、第１演算部１１６または第２演算部１１７が２サイクルで演算実行を行なう。
【０１０１】
ロング命令は、上述したように、１つの３２ビット命令が１つのロング命令で構成されているが、この１つのロング命令の処理によって３２ビット命令の実行が完了する。
【０１０２】
２つのショート命令がパラレルで実行される場合には、２つのショート命令のうち処理サイクルの大きい方の命令の処理に律速される。たとえば、２サイクルで実行する命令と、１サイクルで実行する命令との組合わせの場合、この２つのショート命令の実行に２サイクルを要する。
【０１０３】
２つのショート命令がシーケンシャルに実行される場合には、各サブ命令の組合せによって処理サイクルが決定される。すなわち、デコード段階で各命令がシーケンシャルにデコードされ、各命令がシーケンシャルに実行される。たとえば、Ｅステージ４０３において１サイクルで実行が完了する２つの加算命令の場合、Ｄステージ４０２とＥステージ４０３とのそれぞれが各命令に１サイクル、計２サイクルで処理を終了する。Ｅステージ４０３における先行命令の実行と並列に、Ｄステージ４０２における後続命令のデコードが行なわれる。
【０１０４】
次に、本発明の第１の実施の形態におけるデータ処理装置が実行するオペレーション修飾命令について詳細に説明する。図１１〜図１４は、オペレーション修飾命令のビット割付けを説明するための図である。
【０１０５】
図１１に示すＭＯＤ＿ＳＡＴ命令は、並列実行においてのみ使用可能な命令であり、並列に実行する他方の命令のオペレーションについて、１６ビットのサチュレーションを行なうことを指示する命令である。
【０１０６】
図１２に示すＭＯＤ＿ＳＡＴＢ命令は、図１１に示すＭＯＤ＿ＳＡＴ命令と同様に、並列実行においてのみ使用可能な命令であり、並列に実行する他方の命令のオペレーションについて、８ビットのサチュレーションを行なうことを指示する命令である。
【０１０７】
図１３に示すＭＯＤ＿ＳＡＴＮ命令は、次命令のオペレーションについて、サチュレーションを行なうことを指示する命令である。ロングフォーマットのサブ命令や、並列実行する２つのショートフォーマットのサブ命令についてサチュレーションを行なう場合に使用される。
【０１０８】
図１４に示すＭＯＤ＿ＳＡＴＸ命令は、並列に実行する他方の命令と次命令とのオペレーションについて、サチュレーションを行なうことを指示する命令である。
【０１０９】
これらのオペレーション修飾命令は、自身では処理を行なわないＮＯＰ命令である。また、オペレーション修飾命令は、左コンテナ５２および右コンテナ５３のいずれにも配置可能である。
【０１１０】
図１５は、レジスタ間の１６ビット加算を行なうＡＤＤ命令のビット割付けを説明するための図である。このＡＤＤ命令が実行されると、Ｒｄｅｓｔによって指定されるレジスタの値に、Ｒｓｒｃによって指定されるレジスタの値が加算され、加算結果がＲｄｅｓｔによって指定されるレジスタに書き戻される。この加算命令は単独で実行可能である。この場合には、サチュレーションは行なわれない。
【０１１１】
図１６は、２つのＡＤＤ命令を並列に実行する場合の３２ビット命令を示す図である。第１演算部１１６によって“ＡＤＤ  Ｒ０，Ｒ２”が実行され、第２演算部１１７によって“ＡＤＤ  Ｒ１，Ｒ３”が実行される。この３２ビット命令が単独で実行される場合には、サチュレーションは行なわれない。
【０１１２】
図１７および図１８は、“ＡＤＤ  Ｒ０，Ｒ２”が単独で実行された場合の演算の前後のレジスタ値およびサチュレーション（Ｓ）フラグの値を示す図である。なお、“０ｘ”はそれ以下が１６進数で表記されていることを示している。図１７においては、符号付き１６ビット数を加算する場合であって、オーバーフローが発生する例を示している。しかし、サチュレーション処理は行なわれず、１６ビットとして加算した演算結果がそのままレジスタＲ０に書込まれる。このとき、Ｓフラグは変化しない。
【０１１３】
図１８においては、符号付き１６ビット数を加算する場合であって、アンダーフローが発生する例を示している。この場合もサチュレーション処理は行なわれず、１６ビットとして加算した演算結果がそのままレジスタＲ０に書込まれる。このときも、Ｓフラグは変化しない。
【０１１４】
図１９は、ＡＤＤ命令がＭＯＤ＿ＳＡＴ命令と並列に実行される場合の３２ビット命令を示す図である。左コンテナ５２にＭＯＤ＿ＳＡＴ命令が配置され、右コンテナ５３にＡＤＤ命令が配置されている。命令デコード部１１３は、２つの命令を並列にデコードする。第１デコーダ１２２は、ＭＯＤ＿ＳＡＴ命令をデコードし、実行制御情報として有効な処理を行なわないノーオペレーション情報を生成して、第１演算部１１６などへ出力する。第１デコーダ１２２は、第２デコーダ１２３に対して、第２デコーダ１２３がデコード中の命令に対して１６ビットのサチュレーションを行なうよう演算内容を修飾することを指示する情報を、信号線１２７を介して第２デコーダ１２３へ出力する。
【０１１５】
第２デコーダ１２３は、ＡＤＤ命令をデコードし、加算処理を行なうための演算制御情報を生成し、レジスタファイル１１５および第２演算部１１７に出力する。このとき、信号線１２７によって、１６ビットのサチュレーションを行なうよう演算内容を修飾することが指示されていれば、第２デコーダ１２３はサチュレーションを行なうための制御信号を生成して第２演算部１１７などに出力する。
【０１１６】
図２０は、第２演算部１１７内のＡＬＵ、シフタおよびその周辺回路の構成を示すブロック図である。なお、第２演算部１１７は、他の多くの演算器を備えているが、本発明と直接関係しない部分については省略している。
【０１１７】
第２演算部１１７は、ＡＬＵ演算用のラッチＡ１３１およびＢ１３２と、ＡＬＵ１３３と、ＡＬＵ演算用オーバーフロー判定回路１３４と、ＡＬＵ１３３の出力を選択するセレクタ１３５と、シフト量入力ラッチＳＣ１４１と、シフトデータ入力ラッチＳＤ１４２と、シフタ１４３と、シフト演算用オーバーフロー判定回路１４４と、シフタ１４３の出力を選択するセレクタ１４５と、即値部（ＩＭＭ）１５１とを含む。
【０１１８】
即値部１５１は、命令コードから切出された即値を取込み、即値を符号／ゼロ拡張したり、ビット演算用ビットマスクデータを作成したりする。
【０１１９】
次に、図１９に示す命令が実行される場合の第２演算部１１７の動作について、図２０を参照しながら説明する。左コンテナ５２にＭＯＤ＿ＳＡＴ命令があるので、第１演算部１１６は有効な演算を行なわない。第２演算部１１７は、サチュレーションを伴う加算処理を行なう。
【０１２０】
まず、レジスタＲ０およびＲ２の値がレジスタファイル１１５から読出され、それぞれラッチＡ１３１およびＢ１３２に転送される。ＡＬＵ１３３は、ラッチＡ１３１およびＢ１３２に保持される値に対して加算処理を行なう。サチュレーション制御信号１３６によって、１６ビットのサチュレーションを行なうことが指示されているので、判定回路１３４はＡＬＵ１３３の演算結果（ビット０およびビット１のキャリー出力情報など）に基づき、オーバーフローまたはアンダーフローの判定を行ない、その判定結果をセレクタ１３５の選択信号として出力する。
【０１２１】
オーバーフローが検出された場合には、セレクタ１３５は、正の最大値“０ｘ７ｆｆｆ”を出力する。また、アンダーフローが検出された場合には、セレクタ１３５は、負の最小値“０ｘ８０００”を出力する。また、オーバーフローもアンダーフローも検出されなかった場合には、セレクタ１３５は、ＡＬＵ１３３の出力を選択して出力する。このセレクタ１３５の出力は、レジスタＲ０に書き戻される。
【０１２２】
また、オーバーフローまたはアンダーフローが検出された場合には、制御部１１１内のＳフラグ３５が“１”にセットされる。オーバーフローもアンダーフローも検出されなかった場合には、制御部１１１内のＳフラグ３５がゼロクリアされる。第２の演算部１１７から制御部１１１への演算結果の出力やフラグ制御の詳細は、本発明の説明に必要ないので説明を省略する。
【０１２３】
図２１および図２２は、オペレーションが修飾された命令“ＡＤＤ  Ｒ０，Ｒ２”が実行された場合の演算の前後のレジスタ値およびＳフラグの値を示す図である。図２１においては、符号付き１６ビット数を加算する場合であって、オーバーフローが発生する例を示している。サチュレーション処理が行なわれるので、演算実行後のレジスタＲ０には正の最大値“０ｘ７ｆｆｆ”が書込まれる。このとき、オーバーフローが発生するので、Ｓフラグは“１”となる。
【０１２４】
図２２においては、符号付き１６ビット数を加算する場合であって、アンダーフローが発生する例を示している。この場合もサチュレーション処理が行なわれるので、演算後のレジスタＲ０には負の最小値“０ｘ８０００”が書込まれる。このとき、アンダーフローが発生するので、Ｓフラグは“１”となる。
【０１２５】
図１６に示すようなオペレーションが修飾されないＡＤＤ命令が実行される場合には、第２デコーダ１２３は、信号線１２７によってオペレーション修飾を行なわないことを示す情報を受け、サチュレーション制御信号１３６によってサチュレーションを行なわないことを指示する。この場合、オーバーフローまたはアンダーフローが発生したか否かに関係なく、セレクタ１３５がＡＬＵ１３３の出力を選択する。この加算結果がレジスタファイル１１５に書き戻される。また、制御部１１１内のＳフラグ３５は、このＡＤＤ命令の実行の影響を受けない。
【０１２６】
次に、シフト命令についてオペレーション修飾が行なわれる場合の第２演算部１１７の動作について説明する。図２３は、シフト量が４ビットの即値で指定される左シフト命令ＳＬＬＩのビット割付けを説明するための図である。Ｒｄｅｓｔによって指定されるレジスタの値が、ｉｍｍ４によって指定されるシフト量分だけ左シフトされ、Ｒｄｅｓｔによって指定されるレジスタに書き戻される。
【０１２７】
オペレーション修飾を行なわない場合には、オーバーフローまたはアンダーフローが発生したか否かに関係なく、シフトした値がそのままレジスタに書き戻される。オペレーション修飾を行なう場合には、シフトアウトされたデータも含めてオーバーフローまたはアンダーフローの判定が行なわれ、サチュレーション処理が行なわれる。また、制御部１１１内のＳフラグ３５も演算の実行による影響を受ける。
【０１２８】
図２４は、ＳＬＬＩ命令がＭＯＤ＿ＳＡＴ命令と並列に実行される場合の３２ビット命令を示す図である。左コンテナ５２にＭＯＤ＿ＳＡＴ命令が配置され、右コンテナ５３にＳＬＬＩ命令が配置されている。命令のデコード方法は、実行される命令が加算命令ではなく、シフト命令であることを除き、図１９を用いて説明した方法と同様である。
【０１２９】
次に、図２４に示す命令が実行される場合の第２演算部１１７の動作について、図２０を参照しながら説明する。左コンテナ５２にＭＯＤ＿ＳＡＴ命令があるので、第１演算部１１６は有効な演算を行なわない。第２演算部１１７は、サチュレーションを伴う左シフト処理を行なう。
【０１３０】
まず、レジスタＲ０の値がレジスタファイル１１５から読出され、ラッチＳＤ１４２に転送される。また、命令コードから切出された即値がＩＭＭ１５１によってゼロ拡張され、ラッチＳＣ１４１に転送される。シフタ１４３は、ラッチＳＣ１４１およびＳＤ１４２に保持される値を参照して左シフト処理を行ない、シフト結果をセレクタ１４５へ出力する。
【０１３１】
サチュレーション制御信号１４６によって、サチュレーションを行なうことが指示されているので、判定回路１４４はシフタ１４３に入力される値に基づき、オーバーフローまたはアンダーフローの判定を行ない、その判定結果をセレクタ１４５の選択信号として出力する。判定回路１４４は、ラッチＳＣ１４１に保持されるシフト量に基づいて、ラッチＳＤ１４２に保持される値（シフトデータ）のＭＳＢ側の２ビット目から、ＬＳＢ側へシフト量分だけ“１”になっているマスクデータを生成する。
【０１３２】
そして、シフトデータのＭＳＢ側の２ビット目からＬＳＢまでの各ビットと、符号ビット（ＭＳＢの値）との排他的論理和を演算し、この演算結果の各ビット毎にマスクデータとの論理積を演算する。その結果、いずれかのビットが“１”であり、かつシフトデータの符号が正（ＭＳＢが“０”）であれば、オーバーフローが発生したと判定する。また、いずれかのビットが“１”であり、かつシフトデータの符号が負（ＭＳＢが“１”）であれば、アンダーフローが発生したと判定する。
【０１３３】
オーバーフローが検出された場合には、セレクタ１４５は、正の最大値“０ｘ７ｆｆｆ”を出力する。また、アンダーフローが検出された場合には、セレクタ１４５は、負の最小値“０ｘ８０００”を出力する。また、オーバーフローもアンダーフローも検出されなかった場合には、セレクタ１４５は、シフタ１４３の出力を選択して出力する。このセレクタ１４５の出力は、レジスタＲ０に書き戻される。
【０１３４】
また、オーバーフローまたはアンダーフローが検出された場合には、制御部１１１内のＳフラグ３５が“１”にセットされる。オーバーフローもアンダーフローも検出されなかった場合には、制御部１１１内のＳフラグ３５がゼロクリアされる。
【０１３５】
次に、右コンテナ５３にオペレーション修飾命令がある場合の動作について説明する。図２５は、ＡＤＤ命令が左コンテナ５２に配置され、ＭＯＤ＿ＳＡＴ命令が右コンテナ５３に配置される場合の３２ビット命令を示す図である。命令デコード部１１３は、２つの命令を並列にデコードする。第２デコーダ１２３は、ＭＯＤ＿ＳＡＴ命令をデコードし、実行制御情報として有効な処理を行なわないノーオペレーション情報を生成して、第２演算部１１７などへ出力する。第２デコーダ１２３は、第１デコーダ１２２に対して、第１デコーダ１２２がデコード中の命令に対して１６ビットのサチュレーションを行なうよう演算内容を修飾することを指示する情報を、信号線１２８を介して第１デコーダ１２２へ出力する。
【０１３６】
第１デコーダ１２２は、ＡＤＤ命令をデコードし、加算処理を行なうための演算制御情報を生成し、レジスタファイル１１５および第１演算部１１６に出力する。このとき、信号線１２８によって、サチュレーションを行なうよう演算内容を修飾することが指示されていれば、第１デコーダ１２２はサチュレーションを行なうための制御信号を生成して第１演算部１１６などに出力する。
【０１３７】
図２６は、第１演算部１１６内のＡＬＵ、整置回路およびその周辺回路の構成を示すブロック図である。なお、第１演算部１１６は、他の多くの演算器を備えているが、本発明と直接関係しない部分については省略している。
【０１３８】
第１演算部１１６は、ＡＬＵ演算用のラッチＡ１６１およびＢ１６２と、ＡＬＵ１６３と、ＡＬＵ演算用オーバーフロー判定回路１６４と、ＡＬＵ１６３の出力を選択するセレクタ１６５と、アドレスを保持するラッチ１６６と、整置用のラッチ１７１、１７２および１７５と、サチュレーション（ＳＡＴ）回路１７３と、整置回路１７４とを含む。
【０１３９】
ＡＬＵ１６３およびその周辺回路１６１、１６２、１６４および１６５は、図２０に示す第２演算部１１７内のＡＬＵ１３３およびその周辺回路１３１、１３２、１３４および１３５と同様であるので、詳細な説明は繰返さない。なお、ラッチ１６６は、アドレスを保持して出力する。
【０１４０】
図２５に示す命令が実行される場合、右コンテナ５３にＭＯＤ＿ＳＡＴ命令があるので、第２演算部１１７は有効な演算を行なわない。第１演算部１１６は、サチュレーションを伴う加算処理を行なう。なお、図２５に示す命令が実行される場合の動作は、図１９に示す命令が実行される場合の動作と同様であるので、詳細な説明は繰返さない。
【０１４１】
図２７は、レジスタ間接モードのバイトストア（ＳＴＢ）命令の命令ビット割付けを示す図である。このＳＴＢ命令が実行されると、Ｒｓｒｃ１で指定されるレジスタの値の下位８ビットが、Ｒｓｒｃ２で指定されるレジスタの値が示すアドレスにストアされる。
【０１４２】
図２８は、ＳＴＢ命令がＭＯＤ＿ＳＡＴＢ命令と並列に実行される場合の３２ビット命令を示す図である。左コンテナ５２にＳＴＢ命令が配置され、右コンテナ５３にＭＯＤ＿ＳＡＴＢ命令が配置されている。命令デコード部１１３は、２つの命令を並列にデコードする。第２デコーダ１２３は、ＭＯＤ＿ＳＡＴＢ命令をデコードし、実行制御情報として有効な処理を行なわないノーオペレーション情報を生成して、第２演算部１１７などへ出力する。第２デコーダ１２３は、第１デコーダ１２２に対して、第１デコーダ１２２がデコード中の命令に対して８ビットのサチュレーションを行なうよう演算内容を修飾することを指示する情報を、信号線１２８を介して第１デコーダ１２２へ出力する。
【０１４３】
次に、図２８に示す命令が実行される場合の第１演算部１１６の動作について、図２６を参照しながら説明する。右コンテナ５３にＭＯＤ＿ＳＡＴＢ命令があるので、第２演算部１１７は有効な演算を行なわない。第１演算部１１６は、サチュレーションを伴うストア処理を行なう。
【０１４４】
まず、レジスタＲ０の値（ストアデータ）がレジスタファイル１１５から読出され、ラッチ１７１に転送される。サチュレーション制御信号１７６によって、８ビットのサチュレーションを行なうことが指示されているので、サチュレーション回路１７３は１６ビットデータを入力とし、８ビットで表現できる値にサチュレーションを行なう。すなわち、“０ｘ００７ｆ”以上の値は“０ｘ００７ｆ”にクリッピングされ、“０ｘｆｆ８０”以下の値は“０ｘｆｆ８０”にクリッピングされて出力される。なお、サチュレーションを行なわない場合には、入力された値がそのまま出力される。
【０１４５】
整置回路１７４は、ラッチＡ１６１に保持されるアドレスに基づいて整置を行なう。この整置された値はラッチ１７５によって保持され、オペランドアクセス部１０４へ出力される。また、オペランドアドレスについては、レジスタファイル１１５内のレジスタＲ８の値がラッチＡ１６１に保持され、ラッチ１６６を介してオペランドアクセス部１０４へ出力される。オペランドアクセス部１０４は、ラッチ１７５に保持されるオペランドを、ラッチ１６６に保持されるオペランドアドレスにストアする。
【０１４６】
次に、左コンテナ５２に保持されるレジスタ間転送命令“ＭＶ  Ｒｄｅｓｔ，Ｒｓｒｃ”と、右コンテナ５３に保持されるＭＯＤ＿ＳＡＴＢ命令とが並列に実行される場合について説明する。ＭＶ命令を実行する場合、第１演算部１１６において、Ｒｓｒｃで指定されたレジスタの値がラッチ１７１に転送される。サチュレーション回路１７３は、ラッチ１７１に保持される値に対してサチュレーションを行ない、レジスタファイル１１５内のＲｄｅｓｔで指定されたレジスタにその値を書き戻す。このようにして、１６ビットデータを８ビットデータにサチュレーションすることが可能である。
【０１４７】
次に、次命令のオペレーションを修飾するＭＯＤ＿ＳＡＴＮ命令の動作について説明する。図２９は、即値の加算を行なう３オペランド加算（ＡＤＤ３）命令の命令ビット割付けを示す図である。このＡＤＤ３命令が実行されると、Ｒｓｒｃで指定されるレジスタの値と、ｉｍｍ１６で指定される１６ビットの即値とが加算され、この加算結果がＲｄｅｓｔで指定されるレジスタに書き戻される。
【０１４８】
このＡＤＤ３命令は、ロングフォーマットの命令であるため、ＭＯＤ＿ＳＡＴ命令を使用することができない。図３０は、ロングフォーマットのＡＤＤ命令のオペレーションを修飾する場合の一例を示す図である。図３０に示すように、ＡＤＤ３命令のオペレーションを修飾する場合、ＭＯＤ＿ＳＡＴＮ命令の実行直後に、ＡＤＤ３命令が実行される。
【０１４９】
ＭＯＤ＿ＳＡＴＮ命令が右コンテナ５３に格納されているため、ＭＯＤ＿ＳＡＴＮ命令は第２デコーダ１２３でデコードされる。ＭＯＤ＿ＳＡＴＮ命令自体は、有効なオペレーションを行なわないＮＯＰ命令である。第２デコーダ１２３がＭＯＤ＿ＳＡＴＮ命令をデコードすると、Ｄステージ制御部１２６に対して、次命令のオペレーションを修飾することを指示する情報を出力する。Ｄステージ制御部１２６は、この情報を次命令がデコードされるまで保持し、次命令デコード時にこの情報を第１デコーダ１２２および第２デコーダ１２３へ出力する。
【０１５０】
第１デコーダ１２２がＡＤＤ３命令をデコードするが、このときＤステージ制御部１２６から出力される次命令のオペレーションの修飾を指示する情報にしたがって、サチュレーションを伴うことを示す演算制御信号を生成し、第１演算部１１６へ出力する。第１演算部１１６は、この演算制御信号を受けて、サチュレーションを伴う加算処理を行なう。
【０１５１】
まず、レジスタファイル１１５内のレジスタＲ０の値がラッチＡ１６１に転送され、第１デコーダ１２２から出力された即値がラッチＢ１６２に転送される。ＡＬＵ１６３は、ラッチＡ１６１およびＢ１６２に保持される値を加算し、サチュレーション処理を行なった後、その演算結果をセレクタ１６５を介してレジスタファイル１１５内のＲ０に書き戻す。
【０１５２】
次に、並列に実行する命令と次に実行する命令とのオペレーションを修飾するＭＯＤ＿ＳＡＴＸ命令について説明する。図３１は、ＭＯＤ＿ＳＡＴＸ命令の使用方法の一例を示す図である。このＭＯＤ＿ＳＡＴＸ命令がデコードされるときに、ＭＯＤ＿ＳＡＴ命令とＭＯＤ＿ＳＡＴＮ命令との両方の処理が行なわれる。したがって、ＭＯＤ＿ＳＡＴＸ命令と並列に実行される命令“ＡＤＤ  Ｒ８，Ｒ９”と、次に実行される命令“ＡＤＤ  Ｒ０，Ｒ２”および“ＡＤＤ  Ｒ１，Ｒ３”とがサチュレーションを伴って実行される。
【０１５３】
オペレーション修飾命令としてサチュレーションを行なう場合について説明した。画像処理ではバイトデータを扱う場合も多い。このため、本実施の形態におけるデータ処理装置では、２つのバイトデータに関するＳＩＭＤ（Single Instruction Multiple Data stream）演算機能を備えている。以下、オペレーション修飾命令としてＳＩＭＤ演算を行なう場合について説明する。
【０１５４】
図３２は、並列に実行するペアの命令のオペレーションについて、８ビットの２つの演算を並列に行なうことを指示するＭＯＤ＿２Ｂ命令であり、並列実行のみ可能な命令である。ＭＯＤ＿２Ｂ命令自身は、演算処理を行なわない（ＮＯＰ）。ＭＯＤ＿２Ｂ命令は、左コンテナ５２および右コンテナのいずれにも配置可能である。
【０１５５】
図３３は、ＳＵＢ命令が、ＭＯＤ＿２Ｂ命令と並列に実行される場合の一例を示す図である。“ＳＵＢ  Ｒ０，Ｒ２”命令は、Ｒ０の値からＲ２の値を減算し、Ｒ０に書戻す命令である。左コンテナ５２にＭＯＤ＿２Ｂ命令が、右コンテナ５３にＳＵＢ命令が配置されており、図９に示した命令デコード部１１３において２つの命令が並列にデコードされる。ＭＯＤ＿２Ｂ命令は第１デコーダ１２２でデコードされ、第１演算部１１６に転送する実行制御情報として有効な処理を行なわないノーオペレーション情報を生成し、第１演算部１１６等に出力する。
【０１５６】
また、第１デコーダ１２２から、第２デコーダ１２３でデコード中の命令に対して、２つのバイトオペレーションを行なうように演算内容を修飾することを指示する情報が信号線１２７で第２デコーダ１２３に送られる。ＳＵＢ命令は第２デコーダ１２３でデコードされ、減算処理を行なうための演算制御情報が生成され、レジスタファイル１１５および第２演算部１１７に出力される。このとき、信号線１２７で２つのバイトオペレーションを行なうよう演算内容を修飾することが指示されている場合には、２つのバイトオペレーションを行なうための制御信号が生成され、出力される。
【０１５７】
図３４は、２つのバイトオペレーションのＳＩＭＤ処理を説明するために、第２演算部１１７内のＡＬＵ１３３周りのブロック構成を詳細に示した図である。上位８ビットと下位８ビットとが各々独立に算術演算できる機能を有している。図３４において、図２０と同一の構成および機能を有する部分には同一の参照符号が付けられている。なお、第２演算部１１７は、他の多くの制御信号が存在するが、本発明と直接関係しない部分については省略している。
【０１５８】
第２演算部１１７は、上位８ビットのＡＬＵ用のラッチ１３１ａおよび１３２ａと、下位８ビットのＡＬＵ用のラッチ１３１ｂおよび１３２ｂと、上位８ビットのＡＬＵ部分であるＡＬＵ＿Ｈ１３３ａと、下位８ビットのＡＬＵ部分であるＡＬＵ＿Ｌ１３３ｂと、ＡＬＵ＿Ｈ１３３ａへのキャリー入力を選択するセレクタ１３３ｃと、ＡＬＵ演算用オーバーフロー判定回路１３４と、ＡＬＵ＿Ｈ１３３ａおよびＡＬＵ＿Ｌ１３３ｂの出力を選択するセレクタ１３５とを含む。
【０１５９】
図３３に示した命令が実行される場合の第２演算部１１７動作について、図３４を参照しながら説明する。２つのバイトデータのＳＩＭＤ演算を行なう場合、本実施の形態におけるデータ処理装置は１つの１６ビットレジスタの上位８ビットと下位８ビットとに各々処理対象のバイトデータが格納されているものとして処理を行なう。
【０１６０】
第１演算部１１６は、左コンテナ５２にＭＯＤ＿２Ｂ命令があるので、第１演算部１１６は有効な演算を行なわない。第２演算部１１７は、２つのバイト（８ビット）減算処理を行なう。レジスタＲ０およびＲ２の値がそれぞれレジスタファイル１１５から読出され、上位８ビットが各々ラッチＡ＿Ｈ１３１ａおよびラッチＢ＿Ｈ１３２ａに転送され、下位８ビットが各々ラッチＡ＿Ｌ１３１ｂおよびＢ＿Ｌ１３２ｂに転送される。
【０１６１】
ＡＬＵ＿Ｈ１３３ａおよびＡＬＵ＿Ｌ１３３ｂにおける減算処理は、キャリー入力ＣＹＩを“１”にし、ラッチＡ＿Ｈ１３１ａまたはＡ＿Ｌ１３１ｂから取込まれた値に、ラッチＢ＿Ｈ１３２ａまたはＢ＿Ｌ１３２ｂから取込まれた値の反転値を加えることによって実現される。図３３に示す命令実行時において、第２デコーダ１２３は、キャリー入力１３８を“１”とし、キャリー選択信号１３７をセレクタ１３３ｃがキャリー入力１３８を選択する値にする。
【０１６２】
このように制御することによって、ＡＬＵ＿Ｈ１３３ａにおいて上位８ビットの減算処理が行なわれ、ＡＬＵ＿Ｌ１３３ｂにおいて下位８ビットの減算処理が行なわれる。２つのバイト減算結果は連結され、セレクタ１３５を介してレジスタファイル１１５内のレジスタＲ０に書戻される。
【０１６３】
図３５は、２つのバイトデータの減算処理の結果の一例を示す図である。上位８ビットの“０ｘ００−０ｘ０１”と、下位８ビットの“０ｘ０１−０ｘ０２”とがそれぞれ計算され、その演算結果である“０ｘｆｆ”（上位８ビット）と“０ｘｆｆ”（下位８ビット）とが連結されて、レジスタＲ０に書戻される。
【０１６４】
“ＳＵＢ  Ｒ０，Ｒ２”命令が第２演算部１１７において単独で実行される場合についても簡単に説明しておく。この場合、１６ビットの減算処理が行なわれる。命令デコード時に、信号１２７でオペレーション修飾を行なわない情報が第２デコーダ１２３に転送され、キャリー選択信号１３７でセレクタ１３３ｃがＡＬＵ＿Ｌ１３３ｂからのキャリー出力ＣＹＯ１３９を選択する値がセレクタ１３９に転送される。その他の演算制御信号は、２つのバイトデータを演算する場合と同様である。このようにして、１６ビットの減算処理が実現される。
【０１６５】
図３６は、図３５と同じ初期値で１６ビットデータの減算処理を行なった場合の演算処理を説明するための図である。図３５と異なり、演算結果として１６ビットの演算結果である“０ｘｆｅｆｆ”がレジスタＲ０に書戻される。
【０１６６】
上述したオペレーション修飾命令として、サチュレーションを行なうＭＯＤ＿ＳＡＴＮ命令やＭＯＤ＿ＳＡＴＸ命令と同様に、本実施の形態におけるデータ処理装置は、次命令のオペレーションについて２つのバイトオペレーションを行なうようオペレーションを修飾するＭＯＤ＿２ＢＮ命令や、並列に実行する命令と次に実行する命令とについて２つのバイトオペレーションを行なうようオペレーションを修飾するＭＯＤ＿２ＢＸ命令も備えるが、オペレーションの修飾内容が異なるのみで、ＭＯＤ＿ＳＡＴＮ命令やＭＯＤ＿ＳＡＴＸ命令と同様の制御が行なわれるので、詳細な説明は繰返さない。
【０１６７】
以上、本実施の形態におけるデータ処理装置について説明したが、命令セット、パイプライン構成、データビット長などが異なる場合であっても、本発明を適用することができることは言うまでもない。
【０１６８】
また、オペレーションの修飾として、サチュレーション処理やＳＩＭＤ演算を行なう場合について説明したが、それ以外の様々な処理を伴うようにすることも可能である。たとえば、デフォルトのオペレーションサイズと異なる演算を行なう場合のオペレーションサイズの指定、丸めモードの指定、アドレスのビット長が複数ある場合（たとえば、１６ビットモードと３２ビットモード）のアドレスビット長の指定、モジュロアドレッシングなどを行なう場合のアドレッシング方法の指定、アドレスの特殊な修飾、アドレスの特殊な更新方法の指定などのような、オペレーション内容の修飾を行なう場合にも本発明を適用することが可能である。また、既存のデータ処理装置が実装している命令のオペレーション内容を変更する場合であっても、オペレーションの修飾を行なう命令を追加するだけで、互換性を維持したままオペレーション内容を変更することも可能である。
【０１６９】
また、本実施の形態においては、１６ビットのデータ処理装置について説明したが、３２ビットや６４ビットのデータ処理装置に本発明を適用することも可能である。
【０１７０】
また、本実施の形態においては、ＶＬＩＷ方式のデータ処理装置について説明したが、次命令の演算のオペレーションを修飾するＭＯＤ＿ＳＡＴＮ命令やＭＯＤ＿２ＢＮ命令は、ＶＬＩＷ以外の命令セットを処理するデータ処理装置に適用することも可能である。また、ＭＯＤ＿ＳＡＴＮ命令等にスーパースカラー技術を適用して、オペレーション修飾命令とオペレーション修飾対象命令とを並列に処理するようにすれば、さらに性能を向上させることも可能である。
【０１７１】
さらに、可変長命令セットでプリフィックスワードのようにオプション指定扱いするようにしてもよい。
【０１７２】
また、本実施の形態においては、簡単のために２命令を並列に実行するデータ処理装置について説明したが、３命令以上を並列に実行するデータ処理装置に本発明を適用することも可能である。
【０１７３】
また、サチュレーションを行なうようにオペレーションを修飾する命令として、加算命令、左シフト命令、ストア命令を例にして説明したが、符号反転命令、絶対値命令、加減算命令、転送命令など、どのような命令を修飾することも可能である。また、ＳＩＭＤ演算については減算の場合を例に挙げて説明したが、絶対値や乗算／積和を含む他の算術演算命令やシフト命令など、どのような命令を修飾することも可能である。
【０１７４】
さらに、１つの命令に対して複数のオペレーション修飾が可能なように構成してもよい。
【０１７５】
本実施の形態ではＳＩＭＤ演算修飾を行なう場合に、１つの１６ビットレジスタに２つのバイトデータが保持される場合に対する適用例を挙げているが、３つ以上のデータに対応するようにしてもよい。たとえば、３２ビット演算で、４つのバイト演算を行なうようにしてもよい。
【０１７６】
また、ハードウェアを追加して、２つ以上の１６ビット演算を行なえるようにしてもよい。たとえば、１６ビット加算器とレジスタファイルとに接続されるバスを追加し、“ＡＤＤ  Ｒ０，Ｒ２”に対して、ＳＩＭＤ演算修飾を行なった場合、Ｒ０の値とＲ２の値との加算結果をＲ０に書戻し、Ｒ１の値とＲ３の値との加算結果をＲ１に書戻すようにしてもよい。Ｒ１およびＲ３は、それぞれＲ０およびＲ２のレジスタ番号に“１”を加算した番号のレジスタであり、明示的にではなく予め決められた規則にしたがって指定される。どのような指定方法にするかは特に制限はなく、自由に決めればよい。
【０１７７】
さらに、積和演算や絶対値和等の演算命令に対してＳＩＭＤ演算修飾を適用する場合、複数の乗算器や絶対値計算回路と３入力加算器を実装し、乗算や絶対値演算については２組の演算を行ない、最後の加算の段階で３値加算を行なうことにより、１つのアキュムレータやレジスタに加算結果を累積する等を行なってもよい。
【０１７８】
どのような演算に対して、どのような修飾を行なうかについては、ターゲットアプリケーション、命令の出現頻度、追加されるハードウェアコストや検証コストなどを考慮して自由に選択すればよい。また、どの命令との組合せを実装するかについても、同様のトレードオフを考慮して選択すればよい。
【０１７９】
本実施の形態では命令デコーダでオペレーションの修飾を行なっているが、命令をデコードして実行するまでのどの段階でオペレーションの修飾制御を行なうようにしてもよい。
【０１８０】
また、本実施の形態においては、ＭＯＤ＿ＳＡＴＮ命令は次に実行する命令のオペレーションのみを修飾しているが、オペレーションを修飾する命令数を指定するようにして、１つのオペレーション修飾命令で多くの命令のオペレーションを修飾するようにしてもよい。
【０１８１】
以上説明したように、本実施の形態におけるデータ処理装置によれば、オペレーション修飾命令を実装することによって、オペレーションが異なる命令毎に異なる命令コードを割当てる必要がなくなり、命令の基本命令長を短くすることができ、コード効率を向上させることが可能となった。したがって、プログラムがＲＯＭに書込まれるような機器組込み用途のデータ処理装置において、製品コストを低減することが可能となる。
【０１８２】
また、命令の組合わせによって、多くの命令のオペレーションの修飾が可能となるので、実装する命令の数を増やすのと実質的に同様の効果が得られ、データ処理装置の性能が向上するといった効果が得られる。また、極少ないオペレーション修飾命令を実装するだけで、多くの命令のオペレーションを修飾することができるので、データ処理装置の開発コストの削減も可能となった。
【０１８３】
また、モードビットによって動作モードを切替える場合と比較して、本発明は命令コードのみでオペレーションの内容が決まるので、ソフトウェアのデバッグが容易であり、ソフトウェアにバグが混入されるのを防止することが可能となった。
【０１８４】
さらには、ＭＯＤ＿ＳＡＴＸ命令やＭＯＤ＿２ＢＸ命令のように、１つの命令で複数の命令のオペレーションを修飾する場合には、さらにコード効率を向上させることが可能となった。
【０１８５】
（第２の実施の形態）
本発明の第２の実施の形態におけるデータ処理装置は、命令プリフィックスワードを備えたデータ処理装置に関するものである。
【０１８６】
図３７は、本発明の第２の実施の形態におけるデータ処理装置が実行する基本命令のフォーマットを示す図である。この命令フォーマットは、プリフィックスワード５０１と、第１コンテナ５０２と、第２コンテナ５０３と、第３コンテナ５０４とを含む。プリフィックスワード５０１は、サブ命令の長さ、並列に実行する命令の数、実行条件などを指定するほか、各コンテナに格納されたサブ命令のオペレーション内容を修飾することができる。
【０１８７】
図３８は、図３７に示すプリフィックスワード５０１の詳細を説明するための図である。簡単のために、サチュレーションを行なう場合のみ説明する。フィールド５１１が“０００１”であれば、各コンテナにおいて指定される命令のオペレーションを修飾して、サチュレーションを伴うようにすることが可能となる。
【０１８８】
Ｓ１フィールド５１２は、第１コンテナ５０２のサブ命令のオペレーションの修飾を指定する。Ｓ２フィールド５１３は、第２コンテナ５０３のサブ命令のオペレーションの修飾を指定する。第３コンテナ５１４は、第３コンテナ５０４のサブ命令のオペレーションを修飾する。これらのフィールド５１２〜５１４が“０”であれば、対応するコンテナのサブ命令のオペレーションの修飾を行なわないことを示している。また、フィールド５１２〜５１４が“１”であれば、対応するコンテナのサブ命令のオペレーションの修飾を行ない、サチュレーション処理を伴うことを示している。
【０１８９】
図３９は、本発明の第２の実施の形態におけるデータ処理装置の概略構成を示すブロック図である。このデータ処理装置６００は、ＭＰＵコア部６０１と、ＭＰＵコア部６０１からの要求に応じて命令データをフェッチする命令フェッチ部６０２と、内蔵命令メモリ６０３と、ＭＰＵコア部６０１からの要求に応じてオペランドデータのアクセスを行なうオペランドアクセス部６０４と、内蔵データメモリ６０５と、命令フェッチ部６０２およびオペランドアクセス部６０４からの要求を調停し、データ処理装置６００の外部にあるメモリに対してアクセスを行なう外部バスインタフェース部６０６とを含む。
【０１９０】
なお、命令フェッチ部６０２、内蔵命令メモリ６０３、オペランドアクセス部６０４、内蔵データメモリ６０５および外部バスインタフェース部６０６は、図８に示す第１の実施の形態における命令フェッチ部１０２、内蔵命令メモリ１０３、オペランドアクセス部１０４、内蔵データメモリ１０５および外部バスインタフェース部１０６と同様であるので、詳細な説明は繰返さない。
【０１９１】
また、ＭＰＵコア部６０１は、ＭＰＵコア部６０１の全体的な制御を行なう制御部６１１と、ＰＣ値を制御するＰＣ部６１４と、レジスタファイル６１５と、第１演算部６１６と、第２演算部６１７と、第３演算部６１８とを含む。なお、ＰＣ部６１４、レジスタファイル６１５、第１演算部６１６および第２演算部６１７は、図８に示す第１の実施の形態におけるＰＣ部１１８、レジスタファイル１１５、第１演算部１１６および第２演算部１１７と同様であるので、詳細な説明は繰返さない。
【０１９２】
第３演算部６１８は、レジスタファイル６１５と複数のバスで接続されており、第１演算部６１６や第２演算部６１７と並列に算術演算を行なうことができる。
【０１９３】
制御部６１１は、命令キュー６１２と、命令デコード部６１３とを含む。また、命令デコード部６１３は、命令キュー６１２から受けた命令データを保持する命令レジスタ６２１と、Ｄステージ制御部６２２と、第１デコーダ６２３と、第２デコーダ６２４と、第３デコーダ６２５とを含む。
【０１９４】
命令レジスタ６２１は、命令キュー６１２から受けたデコード対象の命令データを保持する。なお、この命令レジスタ６２１に保持される命令データのフォーマットは、図３７に示す命令フォーマットと同様である。
【０１９５】
命令デコード部６１３は、実行制御信号等を生成する３つのデコーダ（第１デコーダ６２３、第２デコーダ６２４、第３デコーダ６２５）を備えており、３つのサブ命令を並列にデコードすることが可能である。
【０１９６】
第１デコーダ６２３は、第１コンテナ５０２に格納された命令をデコードし、デコード結果に応じて第１演算部６１６が命令を実行する。第２デコーダ６２４は、第２コンテナ５０３に格納された命令をデコードし、デコード結果に応じて第２演算部６１７が命令を実行する。第３デコーダ６２５は、第３コンテナ５０４に格納された命令をデコードし、デコード結果に応じて第３演算部６１８が命令を実行する。
【０１９７】
プリフィックスワード５０１は、主としてＤステージ制御部６２２においてデコードされるが、プリフィックスワード５０１内のフィールド５１１は、第１〜第３デコーダ６２３〜６２５においてもデコードされる。また、Ｓ１フィールド５１２は第１デコーダ６２３においてもデコードされ、Ｓ２フィールド５１３は第２デコーダ６２４においてもデコードされ、Ｓ３フィールド５１４は第３デコーダ６２５においてもデコードされる。
【０１９８】
フィールド５１１が“０００１”であり、Ｓ１フィールド５１２、Ｓ２フィールド５１３およびＳ３フィールド５１４のいずれかが“１”であれば、“１”となっているフィールドに対応するコンテナに格納されたサブ命令に関して、サチュレーションを伴う演算および処理が行なわれる。なお、Ｄステージ制御部６２２は、図９に示す第１の実施の形態におけるＤステージ制御部１２６と同様の処理を行なうことにより、第１デコーダ６２３、第２デコーダ６２４および第３デコーダ６２５を制御する。
【０１９９】
以上、第２の実施の形態について説明したが、命令セット、パイプライン構成、データビット長などが異なる場合であっても、本発明を適用できることは言うまでもない。
【０２００】
オペレーションコードの数が可変に制御できるようにしてもよいし、プリフィックスワードをオプション扱いし、必ずしもそれが含まれないような命令エンコーディング方法を採用しても構わない。
【０２０１】
また、オペレーションの修飾内容や対象となるオペレーションが作用する命令等も第１の実施の形態と同様、どのようなものに適用してもよい。また、１つの命令に対して複数のオペレーション修飾が行なえるようにしてもよい。
【０２０２】
以上説明したように、本実施の形態におけるデータ処理装置によれば、プリフィックスワード５０１で命令のオペレーションを修飾するようにしたので、基本命令の命令コード長を短くすることができ、コード効率を向上させることが可能となった。
【０２０３】
また、１つのプリフィックスワード５０１で複数の命令のオペレーションを修飾できるので、複数の命令のオペレーションを修飾する場合でも短い命令長でそれを実現することができ、コード効率を向上させることが可能となった。したがって、プログラムがＲＯＭに書込まれるような機器組込み用途のデータ処理装置において、製品コストを低減することが可能となる。
【０２０４】
また、モードビットによって動作モードを切替える場合と比較して、本発明は命令コードのみでオペレーションの内容が決まるので、ソフトウェアのデバッグが容易であり、ソフトウェアにバグが混入されるのを防止することが可能となった。
【０２０５】
今回開示された実施の形態は、すべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【図面の簡単な説明】
【０２０６】
【図１】本発明の第１の実施の形態におけるデータ処理装置のレジスタセットを説明するための図である。
【図２】ＰＳＷ１８の詳細を説明するための図である。
【図３】本発明の第１の実施の形態におけるデータ処理装置の命令フォーマットを説明するための図である。
【図４】ＦＭビット５１の内容を説明するための図である。
【図５】２つのオペランドを持ったショート命令のビット割付けを示す図である。
【図６】ショートフォーマットの分岐命令のビット割付けを示す図である。
【図７】１６ビットの変位や即値を持った３オペンランド命令やロード／ストア命令のビット割付けを示す図である。
【図８】本発明の第１の実施の形態におけるデータ処理装置の概略構成を示すブロック図である。
【図９】命令デコード部１１３をさらに詳細に説明するためのブロック図である。
【図１０】本発明の第１の実施の形態におけるデータ処理装置１００のパイプライン処理を説明するための図である。
【図１１】オペレーション修飾命令ＭＯＤ＿ＳＡＴのビット割付けを説明するための図である。
【図１２】オペレーション修飾命令ＭＯＤ＿ＳＡＴＢのビット割付けを説明するための図である。
【図１３】オペレーション修飾命令ＭＯＤ＿ＳＡＴＮのビット割付けを説明するための図である。
【図１４】オペレーション修飾命令ＭＯＤ＿ＳＡＴＸのビット割付けを説明するための図である。
【図１５】レジスタ間の１６ビット加算を行なうＡＤＤ命令のビット割付けを説明するための図である。
【図１６】２つのＡＤＤ命令を並列に実行する場合の３２ビット命令を示す図である。
【図１７】“ＡＤＤ  Ｒ０，Ｒ２”が単独で実行された場合であり、オーバーフローが発生する場合の演算の前後のレジスタ値およびＳフラグの値を示す図である。
【図１８】“ＡＤＤ  Ｒ０，Ｒ２”が単独で実行された場合であり、アンダーフローが発生する場合の演算の前後のレジスタ値およびＳフラグの値を示す図である。
【図１９】ＡＤＤ命令がＭＯＤ＿ＳＡＴ命令と並列に実行される場合の３２ビット命令を示す図である。
【図２０】第２演算部１１７内のＡＬＵ、シフタおよびその周辺回路の構成を示すブロック図である。
【図２１】オペレーションが修飾された命令“ＡＤＤ  Ｒ０，Ｒ２”が実行された場合であり、オーバーフローが発生する場合の演算の前後のレジスタ値およびＳフラグの値を示す図である。
【図２２】オペレーションが修飾された命令“ＡＤＤ  Ｒ０，Ｒ２”が実行された場合であり、アンダーフローが発生する場合の演算の前後のレジスタ値およびＳフラグの値を示す図である。
【図２３】シフト量が４ビットの即値で指定される左シフト命令ＳＬＬＩのビット割付けを説明するための図である。
【図２４】ＳＬＬＩ命令がＭＯＤ＿ＳＡＴ命令と並列に実行される場合の３２ビット命令を示す図である。
【図２５】ＡＤＤ命令が左コンテナ５２に配置され、ＭＯＤ＿ＳＡＴ命令が右コンテナ５３に配置される場合の３２ビット命令を示す図である。
【図２６】第１演算部１１６内のＡＬＵ、整置回路およびその周辺回路の構成を示すブロック図である。
【図２７】レジスタ間接モードのバイトストア（ＳＴＢ）命令の命令ビット割付けを示す図である。
【図２８】ＳＴＢ命令がＭＯＤ＿ＳＡＴＢ命令と並列に実行される場合の３２ビット命令を示す図である。
【図２９】即値の加算を行なう３オペランド加算（ＡＤＤ３）命令の命令ビット割付けを示す図である。
【図３０】ロングフォーマットのＡＤＤ命令のオペレーションを修飾する場合の一例を示す図である。
【図３１】ＭＯＤ＿ＳＡＴＸ命令の使用方法の一例を示す図である。
【図３２】並列に実行するペアの命令のオペレーションについて、８ビットの２つの演算を並列に行なうことを指示するＭＯＤ＿２Ｂ命令の命令ビット割付けを示す図である。
【図３３】ＳＵＢ命令が、ＭＯＤ＿２Ｂ命令と並列に実行される場合の一例を示す図である。
【図３４】２つのバイトオペレーションのＳＩＭＤ処理を説明するために、第２演算部１１７内のＡＬＵ１３３周りのブロック構成を詳細に示した図である。
【図３５】２つのバイトデータの減算処理の結果の一例を示す図である。
【図３６】図３５と同じ初期値で１６ビットデータの減算処理を行なった場合の演算処理を説明するための図である。
【図３７】本発明の第２の実施の形態におけるデータ処理装置が実行する基本命令のフォーマットを示す図である。
【図３８】図３７に示すプリフィックスワード５０１の詳細を説明するための図である。
【図３９】本発明の第２の実施の形態におけるデータ処理装置の概略構成を示すブロック図である。
【符号の説明】
【０２０７】
１００，６００  データ処理装置、１０１，６０１  ＭＰＵコア部、１０２，６０２  命令フェッチ部、１０３，６０３  内蔵命令メモリ、１０４，６０４  オペランドアクセス部、１０５，６０５  内蔵データメモリ、１０６，６０６  外部バスインタフェース部、１１１，６１１  制御部、１１２，６１２  命令キュー、１１３，６１３  命令デコード部、１１５，６１５  レジスタファイル、１１６，６１６  第１演算部、１１７，６１７  第２演算部、１１８，６１４  ＰＣ部、１２１，６２１  命令レジスタ、１２２，６２３  第１デコーダ、１２３，６２４  第２デコーダ、１２４  プリデコーダ、１２５  拡張データ生成部、１２６，６２２  Ｄステージ制御部、１３１，１３２，１４１，１４２，１６１，１６２，１６６，１７１，１７２，１７５  ラッチ、１３３，１６３  ＡＬＵ、１３４，１４４，１６４  判定回路、１３５，１４５，１６５  セレクタ、１４３  シフタ、１５１  即値部、１７３  サチュレーション回路、１７４  整置回路、４０１  ＩＦステージ、４０２  Ｄステージ、４０３  Ｅステージ、４０４  Ｍステージ、４０５  Ｗステージ、４０６  Ｅ２ステージ、６１８  第３演算部、６２５  第３デコーダ。
【図１】
2006302324.tif 000003
【図２】
2006302324.tif 000004
【図３】
2006302324.tif 000005
【図４】
2006302324.tif 000006
【図５】
2006302324.tif 000007
【図６】
2006302324.tif 000008
【図７】
2006302324.tif 000009
【図８】
2006302324.tif 000010
【図９】
2006302324.tif 000011
【図１０】
2006302324.tif 000012
【図１１】
2006302324.tif 000013
【図１２】
2006302324.tif 000014
【図１３】
2006302324.tif 000015
【図１４】
2006302324.tif 000016
【図１５】
2006302324.tif 000017
【図１６】
2006302324.tif 000018
【図１７】
2006302324.tif 000019
【図１８】
2006302324.tif 000020
【図１９】
2006302324.tif 000021
【図２０】
2006302324.tif 000022
【図２１】
2006302324.tif 000023
【図２２】
2006302324.tif 000024
【図２３】
2006302324.tif 000025
【図２４】
2006302324.tif 000026
【図２５】
2006302324.tif 000027
【図２６】
2006302324.tif 000028
【図２７】
2006302324.tif 000029
【図２８】
2006302324.tif 000030
【図２９】
2006302324.tif 000031
【図３０】
2006302324.tif 000032
【図３１】
2006302324.tif 000033
【図３２】
2006302324.tif 000034
【図３３】
2006302324.tif 000035
【図３４】
2006302324.tif 000036
【図３５】
2006302324.tif 000037
【図３６】
2006302324.tif 000038
【図３７】
2006302324.tif 000039
【図３８】
2006302324.tif 000040
【図３９】
2006302324.tif 000041