(57)【特許請求の範囲】
【請求項１】
互いに並列にデコード動作する第１のデコーダおよび第２のデコーダを有し、第１及び第２の演算コードを含む命令を入力し、前記第１および第２のデコーダがそれぞれ前記第１および第２の演算コードをデコードする命令デコード部、
それぞれはデータを格納し、メモリ部との間でデータの転送を行う複数のレジスタで構成されたレジスタファイル部、
前記命令デコード部の第１のデコーダにより前記第１の演算コードをデコードして出力される制御信号に基づき、算術演算を行う演算部、および、
前記演算部と並列に動作し、前記命令デコード部の第２のデコーダにより前記第２の演算コードをデコードして出力される制御信号に基づき、一つのアドレスを前記メモリ部に供給して前記メモリ部から並列に転送された第１および第２のデータをそれぞれ前記レジスタファイル部の第１および第２のレジスタに格納させるオペランドアクセス部を備え、
前記演算部は、前記レジスタファイル部の第３および第４のレジスタにそれぞれ格納された第３および第４のデータを入力し、この第３および第４のデータの積を演算する第１の演算器と、この第１の演算器の演算結果とアキュムレータ又は前記レジスタファイル部内の第５のレジスタであるデータ保持部に保持されたデータとの和又は差を演算し、その演算結果を前記データ保持部へ転送する第２の演算器とを有することを特徴とするデータ処理装置。
【請求項２】
互いに並列にデコード動作する第１のデコーダおよび第２のデコーダを有し、第１及び第２の演算コードを含む命令を入力し、前記第１および第２のデコーダがそれぞれ前記第１および第２の演算コードをデコードする命令デコード部、
それぞれはデータを格納し、メモリ部との間でデータの転送を行う複数のレジスタで構成されたレジスタファイル部、
前記命令デコード部の第１のデコーダにより前記第１の演算コードをデコードして出力される制御信号に基づき、前記レジスタファイル部の第１のレジスタに格納された第１のデータを入力し、この第１のデータを用いて算術演算を行う演算部、および、
前記演算部と並列に動作し、前記命令デコード部の第２のデコーダにより前記第２の演算コードをデコードして出力される制御信号に基づき、一つのアドレスを前記メモリ部に供給し、前記レジスタファイル部の第２のレジスタおよび第３のレジスタに格納されたそれぞれ第２のデータおよび第３のデータを並列に転送して前記メモリ部に保持させるオペランドアクセス部を備えたことを特徴とするデータ処理装置。
【請求項３】
演算部は、第１の演算コードに従い第１のデータとレジスタファイル部の第４のレジスタに格納された第４のデータとの積を演算する第１の演算器と、
前記第１の演算コードに従い該第１の演算器の演算結果とアキュムレータ又は前記レジスタファイル部の第５のレジスタであるデータ保持部に格納されたデータとの和又は差を演算し、その演算結果を前記データ保持部に転送するように構成された第２の演算器とを有することを特徴とする請求項２に記載のデータ処理装置。
【請求項４】
メモリ部に接続され、それぞれはデータもしくはオペランドアドレスを格納する複数のレジスタで構成されたレジスタファイル部、
前記レジスタファイル部に格納されたデータを入力して算術演算する演算部、および
前記レジスタファイル部に格納されたオペランドアドレスを前記メモリに入力させるオペランドアクセス部を備えたデータ処理装置によりデータが処理されるデータ処理方法において、
前記メモリ部の第１の領域に記憶された第１のデータおよび第２のデータを並列に転送してそれぞれ前記レジスタファイル部の第１のレジスタおよび第２のレジスタに書き込む第１のステップ、
前記メモリ部の第２の領域に記憶された第３のデータおよび第４のデータを並列に転送してそれぞれ前記レジスタファイル部の第３のレジスタおよび第４のレジスタに書き込む第２のステップ、
前記演算部が前記第１のレジスタに格納された前記第１のデータと前記第３のレジスタに格納された前記第３のデータとを入力し、前記第１および第３のデータの間で算術演算を行う第３のステップ、および
前記演算部が前記第２のレジスタに格納された前記第２のデータと前記第４のレジスタに格納された前記第４のデータとを入力し、前記第２および第４のデータの間で算術演算を行う第４のステップを含んだことを特徴とするデータ処理方法。
【請求項５】
前記メモリ部の第３の領域に記憶された第５のデータおよび第６のデータを並列に転送してそれぞれ前記レジスタファイル部の第５のレジスタおよび第６のレジスタに書き込む第５のステップ、および
前記メモリ部の第４の領域に記憶された第７のデータおよび第８のデータを並列に転送してそれぞれ前記レジスタファイル部の第７のレジスタおよび第８のレジスタに書き込む第６のステップを含み、
第３および第４のステップのいずれか一方のステップが、前記第５および第６のステップの少なくともいずれか一方のステップと並列に実行されるようにしたことを特徴とする請求項４に記載のデータ処理方法。
【請求項６】
第３のステップは、第１のデータと第３のデータとの積を演算する乗算演算ステップ、この乗算演算結果と第９のレジスタ又はアキュムレータであるデータ保持部に格納されたデータとを加算し、その加算結果である第９のデータを当該データ保持部に格納する加算演算ステップを含み、
第４のステップは、第１のデータと第３のデータとの積を演算する乗算演算ステップ、この乗算結果と前記データ保持部に格納された前記第９のデータとを加算してその加算結果を当該データ保持部に格納する加算演算ステップを含んだことを特徴とする請求項４又は請求項５に記載のデータ処理方法。
【請求項７】
少なくとも２つの演算コードを並列に実行するデータ処理装置であって、
複数の演算コードが記述されたプログラムに従って種々の制御信号を出力する制御部、
ロード演算コードを指定する演算コードに従い前記制御部から出力される制御信号に応答して、メモリからロードすべき複数のデータ値をもつオペランドデータを特定する一つのアドレスを出力する第１の演算部、
前記オペランドデータがロードされるとき、前記メモリから並列に転送された前記複数のデータ値を保持するレジスタファイル、及び、
算術演算を指定する算術演算コードに従い前記制御部から出力される制御信号に応答して、前記レジスタファイルから出力される２つのデータ値を受けて算術演算し、この算術演算により前記２つのデータ値の乗算結果を被加算値とする加算の加算結果を得る第２の演算部、
を備えたデータ処理装置。
【請求項８】
前記第１の演算部は、ストア演算コードを指定する演算コードに従い前記制御部から出力される制御信号に応答して、前記レジスタファイルに保持された別の複数のデータ値をストアすべきメモリの格納領域を特定する別の一つのアドレスを前記メモリに向けて出力し、
前記レジスタファイルは前記別の複数のデータ値を前記メモリに向けて並列に出力する、請求項７に記載のデータ処理装置。
【請求項９】
少なくとも２つの演算コードを並列に実行するデータ処理装置であって、
複数の演算コードが記述されたプログラムに従って種々の制御信号を出力する制御部、
ロード演算コードを指定する演算コードに従い前記制御部から出力される制御信号に応答して、メモリからロードすべき第１および第２のデータ値をもつオペランドデータを特定する一つのアドレスを出力する第１の演算部、
前記オペランドデータがロードされるとき、前記メモリから並列に転送された前記第１及び第２のデータ値をそれぞれ保持する第１及び第２のレジスタを含む複数のレジスタ、及び、
算術演算を指定する算術演算コードに従い前記制御部から出力される制御信号に応答して、前記複数のレジスタのうちの異なる２つのレジスタからそれぞれ出力される２つのデータ値を受けて算術演算し、この算術演算により前記２つのデータ値の乗算結果を被加算値とする加算の加算結果を得る第２の演算部を備え、
前記ロード演算コードに基づく処理と前記算術演算コードに基づく処理とが並列に実行される、
データ処理装置。
【請求項１０】
前記第２の演算部は、前記２つのデータ値の乗算値をアキュムレータ又はレジスタであるデータ保持部に保持されたデータ値に加算した結果を得て、その結果で当該データ保持部を更新する、請求項７又は請求項９に記載のデータ処理装置。
【請求項１１】
データ値であるＡ１ないしＡｍ及びＤ１ないしＤｍをメモリからロードしてＡ１・Ｄ１＋Ａ２・Ｄ２＋・・・＋Ａｍ・Ｄｍの計算をするデータ処理装置であって、
前記一つのアドレスにより前記メモリから並列に転送される複数のデータ値は、前記Ａ１ないし前記Ａｍのうちの複数のデータ値又は前記Ｄ１ないしＤｍのうちの複数のデータ値であり、
前記第２の演算部は、前記２つのデータ知の乗算として、前記Ａ１ないし前記Ａｍのうちの一つのデータ値と前記Ｄ１ないしＤｍのうちの一つのデータ値との乗算を行う、請求項７又は請求項９に記載のデータ処理装置。
【請求項１２】
プログラムに従いデータをメモリからロードして演算を行うデータ処理装置であって、
データを保持するレジスタファイル、
このレジスタファイルに保持されたデータを入力して算術演算する演算部、
データをロードするためにアドレスをメモリに供給してデータをアクセスするオペランドアクセス部、および、
前記プログラムに従い、
前記メモリから第１のデータおよび第２のデータを並列にロードして前記レジスタファイルに保持する第１のステップと、
前記メモリから第３のデータおよび第４のデータを並列にロードして前記レジスタファイルに保持する第２のステップと、
前記レジスタファイルから前記第１および第３のデータを入力し、前記第１および第３のデータを使って算術演算を行う第３のステップと、
前記レジスタファイルから前記第２および第４のデータを入力し、前記第２および第４のデータを使って算術演算を行う第４のステップとを含んだデータ処理を行わせるように、前記演算部及び前記オペランドアクセス部を制御する制御部
を備えたデータ処理装置。
【請求項１３】
前記制御部は、前記プログラムに従い、
前記第３のステップと並列に実行され、前記メモリから第５のデータおよび第６のデータを並列にロードして前記レジスタファイルに保持する第５のステップと、
前記第４のステップと並列に実行され、前記メモリから第７のデータおよび第８のデータを並列にロードして前記レジスタファイルに保持する第６のステップと、
前記レジスタファイルから前記第５および第７のデータを入力し、前記第５および第７のデータの間で算術演算を行う第７のステップと、
前記レジスタファイルから前記第６および第８のデータを入力し、前記第６および第８のデータの間で算術演算を行わせる第８のステップとを含んだデータ処理をさらに実現する、請求項１２記載のデータ処理装置。
【請求項１４】
前記第３のステップは、第１及び第３のデータについての乗算値とアキュムレータ又はレジスタであるデータ保持部に保持されたデータとの加算結果を得る算術演算を行い、その結果で前記データ保持部を更新する演算ステップを含み、
前記第４のステップは、第２及び第４のデータについての乗算値と前記データ保持部に保持されたデータとの加算結果を得る算術演算を行い、その結果で前記データ保持部を更新する演算ステップを含み、
前記第７のステップは、第５及び第７のデータについての乗算値と前記データ保持部に保持されたデータとの加算結果を得る算術演算を行い、その結果で前記データ保持部を更新する演算ステップを含み、
前記第８のステップは、第６及び第８のデータについての乗算値と前記データ保持部に保持されたデータとの加算結果を得る算術演算を行い、その結果で前記データ保持部を更新する演算ステップを含む、請求項１３に記載のデータ処理装置。
【請求項１５】
前記メモリはアドレスが連続してなる第１のメモリ領域と、アドレスが連続してなる前記第１のメモリ領域とは異なる第２のメモリ領域とを有し、
前記第１、第２、第５および第６のデータは前記メモリの第１のメモリ領域からロードされ、前記第３、第４、第７および第８のデータは前記メモリの第２のメモリ領域からロードされる、請求項１３又は請求項１４に記載のデータ処理装置。
【請求項１６】
前記第３のステップは、第１及び第３のデータについての乗算値とアキュムレータ又はレジスタであるデータ保持部に保持されたデータとの加算結果を得る算術演算を行い、その結果で前記データ保持部を更新する演算ステップを含み、
前記第４のステップは、第２及び第４のデータについての乗算値と前記データ保持部に保持されたデータとの加算結果を得る算術演算を行い、その結果で前記データ保持部を更新する演算ステップを含む、請求項１２に記載のデータ処理装置。
【請求項１７】
前記制御部は、前記プログラムに従い、
前記メモリから第５のデータおよび第６のデータを並列にロードして前記レジスタファイルに保持する第５のステップと、
前記メモリから第７のデータおよび第８のデータを並列にロードして前記レジスタファイルに保持する第６のステップと、
前記レジスタファイルから前記第５および第７のデータを入力し、前記第５および第７のデータの間で算術演算を行う第７のステップと、
前記レジスタファイルから前記第６および第８のデータを入力し、前記第６および第８のデータの間で算術演算を行わせる第８のステップとを含んだデータ処理をさらに実現し、
前記メモリはアドレスが連続してなる第１のメモリ領域と、アドレスが連続してなる前記第１のメモリ領域とは異なる第２のメモリ領域とを有し、
前記第１、第２、第５および第６のデータは前記メモリの前記第１のメモリ領域からロードされ、前記第３、第４、第７および第８のデータは前記メモリの前記第２のメモリ領域からロードされ、
前記第１、第２、第５および第６のステップは、前記第１、第２、第５および第６のステップの順で実行され、
前記第３、第４、第７および第８のステップにおける前記算術演算は積和演算を含む、
請求項１２に記載のデータ処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、特に高速なディジタル信号処理を行うデータ処理装置、および高速なディジタル信号処理を行うためのデータ処理方法に関するものである。
【０００２】
【従来の技術】
ディジタル信号処理を高速に行う専用のデータ処理装置として、信号処理に適したアーキテクチャを持つディジタル・シグナル・プロセッサ（ＤＳＰ）が使用されている。これらのＤＳＰでは、積和演算など信号処理でよく使用される処理を、高速に実行する。例えば、モトローラ社のＤＳＰ５６０００等がそれにあたる。ＤＳＰ５６０００では、２組のアドレスポインタ、２組のデータメモリと、積和演算器を備え、各々アドレスポインタで指定される２つの１ワードのメモリからのデータロード（例えば、係数とデータのロード）、２つのアドレスポインタの更新と、積和演算を並列に実行することにより、高いスループットで積和演算を実行できるようになっている。(DSP56000 Digital Signal Processor Family Manual, 1992) このように、ＤＳＰは通常２つのメモリをもつ。この場合、データは、どちらかのメモリに振り分けられる。一部のＤＳＰで、２ポートＲＡＭを用いて、データ転送の効率化を図っているものもある。
【０００３】
ＤＳＰ機能を取り込んだマイクロプロセッサとして、モトローラ社のＣＰＵ１６がある。しかし、ＣＰＵ１６では、ＲＭＡＣ命令１命令で積和演算と２ワードのロードを繰り返し行うことが可能である。しかし、１つの積和に１２サイクルかかり、ＤＳＰに対抗できる性能の実現は困難である。(CPU16 Reference Manual, 1993)
【０００４】
近年、他のマイクロプロセッサでも、動作周波数の向上に伴い、信号処理をソフトウェアで実現しようとしているものもある。演算性能を高めるために、積和演算命令等を追加し、スーパーパイプラインやスーパースケーラー等の高度な並列処理技術を駆使し、ＤＳＰ並みの性能を実現しているものもある。例えば、モトローラ社とＩＢＭ社のＰｏｗｅｒＰＣ６０３は、実行に関して３段のパイプライン処理で単精度の浮動小数点数の積和演算を１クロックサイクルのスループットで実行できる。しかし、このためにハードウェア量は増大し、かつ、非常に複雑な制御を行っている。また、積和演算を１クロックサイクル毎に１回行うためには、１クロックサイクルに２ワードのデータが必要となる。ＰｏｗｅｒＰＣ６０３では最高１クロックサイクルに１ワードのロードしかできず、オペランドの供給が間に合わない。（Proceedings of COMPCON 1994: ”The PowerPC 603 Microprocessor: A High Performance, Low power, Superscalar RISC Microprocessor”、PowerPC603 RISC Microprocessor User's Manual, 1994）
【０００５】
【発明が解決しようとする課題】
ＤＳＰは、２つのメモリを持たなければならず、複雑なメモリ構成になってしまうほか、２つのメモリにデータを振り分けるために非常に煩雑なデータ管理を行う必要があるという問題点があった。２ポートＲＡＭを用いた場合、面積が増大するため、データ処理装置のコストが高価になってしまうという問題点もあった。また、一般的にアキュムレータマシンであり、複雑なデータ処理を行うのは困難であるという問題点があった。
【０００６】
マイクロプロセッサではメモリは１つでよく、比較的な単純なメモリ構成となる。しかし、ＤＳＰのような信号処理の流れを素直にハードウェア化したものと異なり、信号処理を行う場合に効率が悪い。現状のマイクロプロセッサでは、ＤＳＰ並みの性能を実現するために、ハードウェア量が増大し、データ処理装置のコストが高価になるという問題があった。さらに、高い周波数で動作させる必要があるため、消費電力の低減が困難になるという問題があった。
【０００７】
この発明は、以上のような問題点を解消するためになされたもので、比較的単純な制御で、低価格で高性能かつ低消費電力化の容易なマイクロプロセッサタイプのデータ処理装置を提案するものである。特に、ＤＳＰ並みのディジタル信号処理性能を有するデータ処理装置を提案するものであり、高性能なデータ処理制御が可能なデータ処理方法を提案するものである。
【０００８】
【課題を解決するための手段】
この発明に係わるデータ処理装置は、メモリからレジスタファイルへの２つのデータのロードを行う命令と、算術演算を行う命令を並列にデコードし、並列に実行するデータ処理装置であって、レジスタファイルに保持された予めロードされたデータを用いて算術演算を実行するものである。
【０００９】
特に、互いに並列にデコード動作する第１のデコーダおよび第２のデコーダを有し、第１及び第２の演算コードを含む命令を入力し、第１および第２のデコーダがそれぞれ入力した命令の第１および第２の演算コードをデコードする命令デコード部、それぞれはデータを格納し、メモリ部との間でデータの転送を行う複数のレジスタで構成されたレジスタファイル部、命令デコード部の第１のデコーダにより第１の演算コードをデコードして出力される制御信号に基づき、算術演算を行う演算部、および演算部と並列に動作し、命令デコード部の第２のデコーダにより第２の演算コードをデコードして出力される制御信号に基づき、一つのアドレスをメモリ部に供給してメモリ部から並列に転送された第１および第２のデータをそれぞれレジスタファイル部の第１および第２のレジスタに格納させるオペランドアクセス部を備えたものである。
演算部は、レジスタファイル部の第３および第４のレジスタにそれぞれ格納された第３および第４のデータを入力し、この第３および第４のデータの積を演算する第１の演算器と、この第１の演算器の演算結果とアキュムレータ又はレジスタファイル部内の第５のレジスタであるデータ保持部に保持されたデータとの和又は差を演算し、その演算結果をデータ保持部へ転送する第２の演算器とを有する。
【００１０】
また、互いに並列にデコード動作する第１のデコーダおよび第２のデコーダを有し、第１及び第２の演算コードを含む命令を入力し、第１および第２のデコーダがそれぞれ入力した命令の第１および第２の演算コードをデコードする命令デコード部、それぞれはデータを格納し、メモリ部との間でデータの転送を行う複数のレジスタで構成されたレジスタファイル部、命令デコード部の第１のデコーダにより第１の演算コードをデコードして出力される制御信号に基づき、レジスタファイル部の第１のレジスタに格納された第１のデータを入力し、この第１のデータを用いて算術演算を行う演算部、および、この演算部と並列に動作し、命令デコード部の第２のデコーダにより第２の演算コードをデコードして出力される制御信号に基づき、一つのアドレスをメモリ部に供給しレジスタファイル部の第２のレジスタおよび第３のレジスタに格納されたそれぞれ第２のデータおよび第３のデータを並列に転送してメモリ部に保持させるオペランドアクセス部を備えたものである。
【００１１】
演算部は、第１のデータとレジスタファイル部の第４のレジスタに格納された第４のデータとの積を演算する第１の演算器と、この第１の演算器の演算結果とレジスタファイル部の第５のレジスタもしくはアキュムレータであるデータ保持部に格納されたデータとの和を演算し、その演算結果をデータ保持部に格納させる第２の演算器を有する。
【００１４】
本発明に係るデータ処理方法は、メモリ部の第１の領域に記憶された第１のデータおよび第２のデータを並列に転送してそれぞれレジスタファイル部の第１のレジスタおよび第２のレジスタに書き込む第１のステップ、メモリ部の第２の領域に記憶された第３のデータおよび第４のデータを並列に転送してそれぞれレジスタファイル部の第３のレジスタおよび第４のレジスタに書き込む第２のステップ、演算部が第１のレジスタに格納された第１のデータと第３のレジスタに格納された第３のデータとを入力し、第１および第３のデータの間で算術演算を行う第３のステップ、および演算部が第２のレジスタに格納された第２のデータと第４のレジスタに格納された前記第４のデータとを入力し、第２および第４のデータの間で算術演算を行う第４のステップを含んだものである。
【００１５】
また、メモリ部の第３の領域に記憶された第５のデータおよび第６のデータを並列に転送してそれぞれレジスタファイル部の第５のレジスタおよび第６のレジスタに書き込む第５のステップ、およびメモリ部の第４の領域に記憶された第７のデータおよび第８のデータを並列に転送してそれぞれレジスタファイル部の第７のレジスタおよび第８のレジスタに書き込む第６のステップを含み、第３および第４のステップのいずれか一方のステップが、第５および第６のステップの少なくともいずれか一方のステップと並列に実行されるようにしたものである。
【００１８】
【発明の実施の形態】
実施の形態１．
本発明の実施の形態１であるデータ処理装置について説明する。本データ処理装置は、１６ビットプロセッサであり、アドレス及びデータのビット長は１６ビットである。
【００１９】
図１に本データ処理装置のレジスタセットを示す。本データ処理装置は、ビット順、バイト順に関してビッグエンディアンを採用しており、ビット位置はＭＳＢがビット０になる。
データやアドレス値を格納する汎用レジスタはＲ０〜Ｒ１５の１６本ある。１〜１５は汎用レジスタＲ０〜Ｒ１４であり、１４のＲ１３は、サブルーチンジャンプ時の戻り先アドレスを格納するためのリンク（ＬＩＮＫ）レジスタとして割り当てられている。Ｒ１５はスタックポインタ（ＳＰ）であり、割り込み用のスタックポインタ（ＳＰＩ）１６とユーザ用のスタックポインタ（ＳＰＵ）１７とが後で説明するプロセッサ・ステータス・ワード（ＰＳＷ）によって切り替えられる。以後、ＳＰＩ１６とＳＰＵ１７を総称して、ＳＰと呼ぶ。レジスタは、特別な場合を除き、４ビットのレジスタ指定フィールドで各レジスタの番号が指定される。本データ処理装置では、例えばＲ０とＲ１のように２つのレジスタをペアにして、処理する命令を備えている。この場合、偶数番号のレジスタを指定し、ペアのレジスタは、レジスタ番号を１プラスした奇数番号のレジスタが暗に指定される。
【００２０】
２１〜２９は各々１６ビットの制御レジスタである。各制御レジスタも、汎用レジスタと同様、通常レジスタの番号が４ビットで示される。２１のＣＲ０は、プロセッサ・ステータス・ワード（ＰＳＷ）であり、データ処理装置の動作モードを指定するビットや演算結果を示すフラグからなる。図２はＰＳＷ２１の構成を示す図である。４１（ビット０）はスタックモードを示すＳＭビットであり、先ほど説明したＲ１５と指定された場合の対応関係を指定する。”０”の場合は割り込みモードであることを示し、Ｒ１５としてＳＰＩが用いられる。”１”の場合はユーザーモードであることを示し、Ｒ１５としてＳＰＵが用いられる。４２（ビット５）は割り込みイネーブルを指定するＩＥビットであり、”０”の場合は割り込みをマスク（アサートされても無視）し、”１”の場合は割り込みを受け付る。本データ処理装置では、ゼロオーバーヘッドのループ処理を実現するためのリピート機能がインプリメントされている。４３（ビット６）はリピート状態を示すＲＰビットであり、”０”の場合はリピート中でないことを、”１”の場合はリピート中であることを示す。また、本データ処理装置では、サーキュラーバッファをアクセスするためのアドレッシングであるモジュロアドレッシング機能がインプリメントされている。４４（ビット７）はモジュロイネーブルを指定するＭＤビットであり、”０”の場合はモジュロアドレッシングをディスエーブル状態にし、”１”の場合はモジュロアドレッシングをイネーブル状態にする。４５（ビット１２）は実行制御フラグであり、比較命令の比較結果などがこのフラグにセットされる。４６（ビット１５）はキャリー・フラグであり、加減算命令実行時のキャリーがこのフラグにセットされる。
【００２１】
図１の２３のＣＲ２は、プログラムカウンタ（ＰＣ）であり、実行中の命令アドレスを示す。本データ処理装置が処理する命令は、基本的に３２ビット固定長であり、ＰＣ３２は、３２ビットを１ワードとしたワードアドレスを保持する。
【００２２】
２２のＣＲ１は、バックアップ・プロセッサ・ステータス・ワード（ＢＰＳＷ）、２４のＣＲ３は、バックアップ・プログラム・カウンタ（ＢＰＣ）であり、各々例外や割り込みが検出された場合の実行中のＰＳＷ２１の値とＰＣ２３の値を待避・保持するためのレジスタである。２５〜２７は、リピート関連のレジスタであり、リピート中であっても割り込みを受け付けられるように、ユーザーが値を読み書きできるようになっている。
２５のＣＲ７は、リピート・カウンタ（ＲＰＴ＿Ｃ）であり、リピートを後何回行うかを示すカウント値を保持する。２６のＣＲ８は、リピート・スタート・アドレス（ＲＰＴ＿Ｓ）であり、リピートを行うブロックの先頭の命令アドレスを保持する。２７のＣＲ９は、リピート・エンド・アドレス（ＲＰＴ＿Ｅ）であり、リピートを行うブロックの最後の命令のアドレスを保持する。
【００２３】
２８、２９は、モジュロ・アドレッシングを行うための制御レジスタである。２８のＣＲ１０は、モジュロ・スタート・アドレス（ＭＯＤ＿Ｓ）を、２９のＣＲ１１は、モジュロ・エンド・アドレス（ＭＯＤ＿Ｅ）を保持する。共に、最初と最終のワード（１６ビット）・アドレスを保持する。インクリメントでモジュロアドレッシングを利用する場合には、ＭＯＤ＿Ｓ２８に小さい方のアドレスが、ＭＯＤ＿Ｅ２９に大きい方のアドレスがセットされ、インクリメントするレジスタ値がＭＯＤ＿Ｅ２９に保持されているアドレスと一致した場合、インクリメント結果としてＭＯＤ＿Ｅ２９に保持されている値がレジスタに書き戻される。
【００２４】
３１、３２は、４０ビットのアキュムレータＡ０、Ａ１であり、積和演算結果を整数フォーマットで保持する。各アキュムレータは、積和演算結果の上位１６ビットを保持するＡ０Ｈ３１ｂ、Ａ１Ｈ３２ｂ、積和演算結果の下位１６ビットを保持するＡ０Ｌ３１ｃ、Ａ１Ｌ３２ｃ、積和演算結果の上位からあふれたビットを保持する８ビットのガードビットＡ０Ｇ３１ａ、Ａ１Ｇ３２ａからなる。
【００２５】
本データ処理装置は２ウェイのＶＬＩＷ（Very Long Instruction Word）命令セットを処理する。図３は、本データ処理装置の命令フォーマットを示す。基本命令長は３２ビット固定であり、３２ビット境界に整置されている。各３２ビットの命令コードは、命令のフォーマットを示す２ビットのフォーマット指定ビット（ＦＭビット）５１と、１５ビットの左コンテナ５２と右コンテナ５３から構成される。各コンテナ５２、５３はそれぞれ１５ビットからなるショートフォーマットのサブ命令を格納できるほか、２つで１つの２８ビットのロングフォーマットのサブ命令を格納できる。今後、簡単のため、ショートフォーマットのサブ命令をショート命令、ロングフォーマットのサブ命令をロング命令と呼ぶ。
ＦＭビット５１は命令のフォーマット及び２つのショート命令の実行順序を指定することが可能である。ＦＭビット５１が”１１”の場合は、各コンテナ５２、５３がロング命令を保持することを示し、それ以外の場合は各コンテナ５２、５３がそれぞれショート命令を保持することを示す。さらに、２つのショート命令を保持することを示す場合に、ＦＭビット５１で実行順序を指定する。”００”のときは、２つのショート命令を並列に実行することをしめす。”０１”のときは、左コンテナ５２に保持されているショート命令を実行した後に、右コンテナ５３に保持されているショート命令を実行することを示す。”１０”のときは、右コンテナ５３に保持されているショート命令を実行した後に、左コンテナ５２に保持されているショート命令を実行することを示す。このように、シーケンシャルに実行する２つのショート命令も含めて１つの３２ビット命令にエンコード出来るようにして、コード効率の向上を図っている。
【００２６】
図４〜図７に典型的な命令のビット割り付けの例を示す。図４は２つのオペランドを持つショート命令のビット割り付けを示す。フィールド６１、６４は、オペレーションコードフィールドである。フィールド６４は、アキュムレータ番号を指定する場合もある。フィールド６２、６３は参照あるいは更新されるデータの格納位置を、レジスタ番号やアキュムレータ番号で指定する。フィールド６３は、４ビットの小さな即値を指定する場合もある。図５は、ショートフォーマットの分岐命令の割り付けを示しており、オペレーションコードフィールド７１と８ビットの分岐変位フィールド７２からなる。分岐変位は、ＰＣ値と同様、ワード（３２ビット）のオフセットで指定される。図６は、１６ビットの変位や即値を持つ３オペランド命令やロード／ストア命令のフォーマットを示しており、オペレーションコードフィールド８１、ショートフォーマットと同様レジスタ番号等を指定するフィールド８２、８３、と１６ビットの変位や即値等を指定する拡張データフィールド８４からなる。図７は、右コンテナ５３側にオペレーションコードを持つ命令のフォーマットを示しており、２ビットのフィールド９１が”０１”になっている。９３と９６はオペレーションコードフィールドで、９４と９５はレジスタ番号等を指定するフィールドである。９２は予約ビットであり必要に応じてオペレーションコードやレジスタ番号等に使用される。
【００２７】
上述以外に、ＮＯＰ（ノー・オペレーション）のように、１５ビットすべてがオペレーションコードとなる命令や、１オペランド命令等、特殊な命令のビット割り付けを持つものもある。
【００２８】
本データ処理装置の各サブ命令は、ＲＩＳＣライクな命令セットとなっている。メモリデータのアクセスを行う命令はロード／ストア命令のみであり、演算命令はレジスタ／アキュムレータ中のオペランドや即値オペランドに対して演算を行う。オペランドデータのアドレッシングモードとしては、レジスタ間接モード、ポストインクリメント付きレジスタ間接モード、ポストデクリメント付きレジスタ間接モード、プッシュモード、レジスタ相対間接モードの５種類ある。各々のニーモニックは、”＠Ｒｓｒｃ”、”＠Ｒｓｒｃ＋”、”＠Ｒｓｒｃ−”、”＠−ＳＰ”、”＠（ｄｉｓｐ１６、Ｒｓｒｃ）”で示される。Ｒｓｒｃはベースアドレスを指定するレジスタ番号を、ｄｉｓｐ１６は１６ビットの変位値を示す。オペランドのアドレスはバイトアドレスで指定される。
【００２９】
レジスタ相対間接モード以外のモードは、図４に示す命令フォーマットとなる。フィールド６３でベースレジスタ番号が指定され、フィールド６２でメモリからロードしてきた値を書き込むレジスタの番号もしくはストアする値を保持するレジスタの番号が指定される。レジスタ間接モードは、ベースレジスタとして指定されたレジスタの値がオペランドアドレスとなる。ポストインクリメント付きレジスタ間接モードは、ベースレジスタとして指定されたレジスタの値がオペランドアドレスとなり、このベースレジスタの値がオペランドのサイズ（バイト数）分ポストインクリメントされて、書き戻される。ポストデクリメント付きレジスタ間接モードは、ベースレジスタとして指定されたレジスタの値がオペランドアドレスとなり、このベースレジスタの値がオペランドのサイズ（バイト数）分ポストデクリメントされて、書き戻される。プッシュモードは、ストア命令で、かつ、ベースレジスタがＲ１５の場合にのみ使用可能であり、スタックポインタ（ＳＰ）値がオペランドのサイズ（バイト数）分プリデクリメントされた値が、オペランドアドレスとなり、デクリメントされた値がＳＰに書き戻される。
【００３０】
レジスタ相対間接モードは図６に示す命令フォーマットとなる。フィールド８３でベースレジスタ番号が指定され、フィールド８２でメモリからロードしてきた値を書き込むレジスタの番号もしくはストアする値を保持するレジスタの番号が指定される。フィールド８４はオペランド格納位置のベースアドレスからの変位値を指定する。レジスタ相対間接モードは、ベースレジスタとして指定されたレジスタの値に１６ビットの変位値を加算した値がオペランドアドレスとなる。
【００３１】
ポストインクリメント付きレジスタ間接モードとポストデクリメント付きレジスタ間接モードでは、ＰＳＷ２１中のＭＤビット４４を１にする事により、モジュロアドレッシングモードが使用できる。
ジャンプ命令のジャンプ先アドレス指定には、ジャンプ先アドレスをレジスタ値で指定するレジスタ間接と、ジャンプ命令のＰＣからの分岐変位で指定するＰＣ相対間接とがある。ＰＣ相対間接については、分岐変位を８ビットで指定するショートフォーマットと、分岐変位を１６ビットで指定するロングフォーマットの２種類ある。また、オーバーヘッドなしにループ処理を実現するリピート機能を起動するためのリピート命令も備える。
【００３２】
図８に本データ処理装置１００の機能ブロック構成を示す。データ処理装置１００は、ＭＰＵコア部１０１と、ＭＰＵコア部１０１からの要求により命令データのアクセスを行う命令フェッチ部１０２、内蔵命令メモリ１０３、ＭＰＵコア部１０１からの要求によりオペランドデータのアクセスを行うオペランドアクセス部１０４、内蔵データメモリ１０５、命令フェッチ部１０２とオペランドアクセス部１０４からの要求を調停し、データ処理装置１００の外部メモリのアクセス等を行う外部バスインターフェイス部１０６からなる。
【００３３】
ＭＰＵコア部１０１は、命令キュー１１１、制御部１１２、レジスタファイル１１５、第１演算部１１６、第２演算部１１７、ＰＣ部１１８からなる。
命令キュー１１１は、２エントリの３２ビットと有効ビット等からなり、ＦＩＦＯ（先入れ先出し）で制御される。命令フェッチ部１０２でフェッチされた命令データを一時保持し、制御部１１２に送る。
【００３４】
制御部１１２は、前述の命令キュー１１１の制御、パイプライン制御、命令の実行、命令フェッチ部１０２やオペランドアクセス部１０４とのインターフェイスなど、ＭＰＵコア部１０１のすべての制御を行う。また、制御部１１２には、命令キュー１１１から送られる命令コードをデコードするための命令デコード部１１９があり、２つのデコーダを含む。第１デコーダ１１３は、第１演算部１１６で実行する命令をデコードし、第２デコーダ１１４は、第２演算部１１７で実行する命令をデコードする。３２ビットの命令のデコードの第１サイクルでは、必ず左コンテナ５２の命令コードが第１デコーダ１１３で解析され、右コンテナ５３の命令コードが第２デコーダ１１４で解析される。ただし、ＦＭビット５１及び左コンテナのビット０とビット１のデータは両方のデコーダで解析される。また、拡張データの切り出しを行うために、右コンテナ５３のデータが第１デコーダ１１３に送られるが、解析は行われない。従って、最初に実行する命令はその命令を実行する演算器に対応した位置に置かれなければならない。２つのショート命令をシーケンシャルに実行する場合、後で実行する側の命令は両方のデコーダに送られ、実行可能な方のデコード結果が有効になる。ただし、両方で実行できるのは第１デコーダでのデコード結果を優先し、第１デコーダでのデコード結果を無効化する。
レジスタファイル１１５は、１〜１７のレジスタからなり、第１演算部１１６、第２演算部１１７、ＰＣ部１１８に複数のバスで結合されている。
【００３５】
図９に、第１演算部１１６の詳細ブロック構成を示す。第１演算部１１６は、レジスタファイル１１５と、各々Ｓ１バス３０１、Ｓ２バス３０２、Ｓ３バス３０３で結合されており、この３つのバスでレジスタからデータを読み出す。Ｓ２バス３０２は奇数番号のレジスタにのみに結合されており、Ｓ１バス３０１とＳ２バス３０２でレジスタペアの２ワードを並列に転送することが可能である。また、第１演算部１１６は、レジスタファイル１１５と、各々Ｄ１バス３１１、Ｗ１バス３１４、Ｗ２バス３１５で結合されており、この３つのバスでデータをレジスタに書き込む。Ｗ１バス３１４は偶数番号のレジスタにのみに、Ｗ２バス３１５は奇数番号のレジスタにのみに結合されている。Ｗ１バス３１４とＷ２バス３１５でレジスタペアの２ワードを並列に転送することが可能である。
【００３６】
ＡＡラッチ１５１、ＡＢラッチ１５２は、ＡＬＵ１５３の入力ラッチである。ＡＡラッチ１５１は、Ｓ１バス３０１もしくはＳ３バス３０３を介して読み出されたレジスタ値を取り込む。ゼロクリアする機能も備えている。ＡＢラッチ１５２は、Ｓ３バス３０３を介して読み出されたレジスタ値もしくは第１デコーダ１１３でデコードの結果生成された１６ビットの即値を取り込む。ゼロクリアする機能も備えている。ＡＬＵ１５３では、主として転送、比較、算術論理演算、オペランドアドレスの計算／転送、オペランドアドレスのベースアドレス値のインクリメント／デクリメント、ジャンプ先アドレスの計算／転送等が行われる。演算結果やアドレスモディファイの結果はセレクタ１５５、Ｄ１バス３１１を介して、レジスタファイル１１５中の命令で指定されたレジスタに書き戻される。ＡＯラッチ１５４は、オペランドのアドレスを保持するラッチであり、ＡＬＵ１５３でのアドレス計算結果もしくはＡＡラッチ１５１に保持されたベースアドレスの値を選択的に保持し、ＯＡバス３２１を介してオペランドアクセス部１０４に出力する。また、ジャンプ先のアドレスを計算したり転送したりする場合には、ＡＬＵ１５３の出力が、ＪＡバス３２３を介してＰＣ部１１８に転送される。
【００３７】
ＭＯＤ＿Ｓ１５６とＭＯＤ＿Ｅ１５７は、それぞれ図１の２８のＣＲ１０、２９のＣＲ１１に相当する制御レジスタである。比較器１５８は、ＭＯＤ＿Ｓ１５７の値とＳ３バス３０３上のベースアドレスの値とを比較する。モジュロアドレッシングがイネーブル状態で、ポストインクリメント／デクリメント付きのレジスタ間接モードの際には、ラッチ１５９で保持されたＭＯＤ＿Ｓ１５６の値をセレクタ１５５、Ｄ１バス３１１を介して、レジスタファイル１１５中のベースアドレスレジスタに書き戻される。
【００３８】
ストアデータ（ＳＤ）レジスタ１６０は、１６ビットのレジスタ２本からなり、Ｓ１バス３０１、もしくは、Ｓ１バス３０１とＳ２バス３０２の両方に出力されたストアデータを一時保持する。ＳＤレジスタ１６０に保持されたデータは、ラッチ１６１を介して整置回路１６２に転送さる。整置回路１６２では、オペランドのアドレスに従って、３２ビットに整置され、ラッチ１６３、ＯＤバス３２２を介してオペランドアクセス部１０４に出力される。
【００３９】
また、オペランドアクセス部１０４でロードされたデータは、ＯＤバス３２２を介して、１６ビットのレジスタ２本からなるロードデータ（ＬＤ）レジスタ１６４に取り込まれる。ＬＤレジスタ１６４の値は、ラッチ１６５を介して、整置回路１６６に転送される。整置回路１６６では、整置を行い、偶数レジスタ番号に転送するデータをＷ１バス３１４に、奇数レジスタ番号に転送するデータをＷ２バス３１５に、それぞれ出力する。１ワードロードの場合には、Ｗ１バス３１４またはＷ２バス３１５のいずれか一方のみに、２ワードロードの場合には両方にロードデータが出力され、レジスタファイル１１５中の指定されたレジスタに書き込まれる。
【００４０】
制御部１１２中のＰＳＷ１７１は図１の２１のＣＲ０の値を保持するレジスタであり、ラッチを含むＰＳＷ更新部１７２は演算結果や命令の実行によりＰＳＷ１７１の値を更新する。ＰＳＷ１７１に値を転送する場合、ＡＢラッチ１５２から制御部に転送すべきデータのうち、必要なビットのみ転送される。ＰＳＷ１７１の値を読み出す場合には、ＰＳＷ更新部１７２からＤ１バス３１１に出力され、レジスタファイル１１５に書き込まれる。ＢＰＳＷ１６７は図１の２２のＣＲ１に相当するレジスタである。例外処理時には、Ｄ１バス３１１に出力されたＰＳＷ１７１の値がＢＰＳＷ１６７に書き込まれる。ＢＰＳＷ１６７の値はＳ３バス３０３に読み出され、ＰＳＷ１７１やレジスタファイルなど必要な場所に転送される。
【００４１】
図１０は、ＰＣ部の詳細ブロック図である。命令アドレス（ＩＡ）レジスタ１８１は、次にフェッチする命令のアドレスを保持し、次にフェッチする命令のアドレスを命令フェッチ部１０２に出力する。引き続き後続の命令をフェッチする場合には、ＩＡレジスタ１８１からラッチ１８１を介して転送されたアドレス値がインクリメンタ１８２で１インクリメントされて、ＩＡレジスタ１８１に書き戻される。ジャンプやリピート等によりシーケンスが切り替わる場合には、ＩＡレジスタ１８１はＪＡバス３２３で転送されるジャンプ先アドレスを取り込む。
【００４２】
ＲＰＴ＿Ｓ１８４、ＲＰＴ＿Ｅ１８６、ＲＰＴ＿Ｃ１８８は、リピート制御用の制御レジスタであり、それぞれ図１のレジスタセットの２６のＣＲ８、２７のＣＲ９、２５のＣＲ７に対応する。ＲＰＴ＿Ｅ１８６はリピートを行うブロックの最終命令のアドレスを保持する。この最終アドレスは、リピート命令処理時に第１演算部１１６で計算され、ＪＡバス３２３を介してＲＰＴ＿Ｅ１８６に取り込まれる。比較器１８７は、リピートを行うブロックの最終命令のアドレスを保持するＲＰＴ＿Ｅ１８６の値を、フェッチアドレスを保持しているＩＡレジスタ１８１の値と比較する。もし、リピート処理中であり、リピートする回数を保持するＲＰＴ＿Ｃ１８８の値が１でなく、かつ、２つのアドレスが一致した場合、ＲＰＴ＿Ｓ１８４に保持されているリピートを行うブロックの開始アドレスが、ラッチ１８５、ＪＡバス３２３を介して、ＩＡレジスタ１８１に転送される。リピートの終了アドレスの命令が実行されるたびに、ＲＰＴ＿Ｃ１８８の値は、ラッチ１８９を介してデクリメンタ１９０で１だけデクリメントされる。デクリメントした値が、ゼロであった場合には、ＰＳＷ２１中のＲＰビット４３をクリアし、リピート処理を終了する。ＲＰＴ＿Ｓ１８４、ＲＰＴ＿Ｅ１８６、ＲＰＴ＿Ｃ１８８は、Ｄ１バス３１１からの入力ポートとＳ３バス３０３への出力ポートを持ち、必要に応じてリピート命令処理時の初期設定や待避復帰が行なわれる。
【００４３】
実行ステージＰＣ（ＥＰＣ）１９４は実行中の命令のＰＣ値を保持し、次命令ＰＣ（ＮＰＣ）１９１は次に実行する命令のＰＣ値の計算を行う。ＮＰＣ１９１は、実行段階でジャンプが起こった場合、ジャンプ先アドレスが転送されているＪＡバス３２３上の値を取り込み、リピートで分岐が起こった場合には、ラッチ１８５からリピートを行うブロックの先頭アドレスを取り込む。それ以外の場合には、ラッチ１９２を介して転送されたＮＰＣ１９１の値が、インクリメンタ１９３でインクリメントされ、ＮＰＣ１９１に書き戻される。サブルーチンジャンプ命令の場合には、ラッチ１９２の値が戻り先アドレスとしてＤ１バス３１１に出力され、レジスタファイル１１５中のリンクレジスタとして定義されているＲ１３に書き戻される。また、次の命令が実行状態に入る場合には、ラッチ１９２の値がＥＰＣ１９４に転送される。実行中の命令のＰＣ値を参照する場合には、ＥＰＣ１９４の値がＳ３バス３０３に出力され、第１演算部１１６に転送される。ＢＰＣは、図１のレジスタセットの２３のＣＲ３に対応する。例外や割り込み等が検出された場合には、ＥＰＣ１９４の値がラッチ１９５を介してＢＰＣ１９６に転送される。ＢＰＣ１９６は、Ｄ１バス３１１からの入力ポートとＳ３バス３０３への出力ポートを持ち、必要に応じて待避復帰が行なわれる。
【００４４】
図１１に、第２演算部１１７の詳細ブロック図を示す。第２演算部１１７は、レジスタファイル１１５と、各々Ｓ４バス３０４、Ｓ５バス３０５で結合されており、この２つのバスでレジスタからデータを読み出す。Ｓ４バス３０４とＳ５バス３０５でレジスタペアの２ワードを並列に転送することも可能である。また、第２演算部１１７は、レジスタファイル１１５と、Ｄ２バス３１２、Ｄ３バス３１３で結合されており、この２つのバスでデータをレジスタに書き込む。Ｄ２バス３１２はすべてのレジスタに結合されているが、Ｄ３バス３１３は奇数番号のレジスタにのみに結合されている。Ｄ２バス３１２とＤ３バス３１３でレジスタペアの２ワードを並列に転送することが可能である。
アキュムレータ２０８は、図１の３１のＡ０と３２のＡ１の２本の４０ビットアキュムレータに相当する。
【００４５】
２０１は４０ビットのＡＬＵであり、ビット０からビット７までの８ビットがアキュムレータのガードビット用加算器、ビット８からビット２３までの１６ビットが算術論理演算器、ビット２４からビット３９までの１６ビットがアキュムレータの下位１６ビットを加算するための加算器になっており、４０ビットまでの加減算と、１６ビットの論理演算を行う。
【００４６】
ラッチＡ２０２、ラッチＢ２０３は、ＡＬＵ２０１の入力ラッチである。ラッチＡ２０２は、Ｓ４バス３０４からビット８からビット２３の位置に取り込むか、シフタ２０４を介して、アキュムレータ２０８の値をそのままもしくは１６ビット算術右シフトした値を取り込む。シフタ２０５は、アキュムレータ２０８の値を配線２０６（ガードビット８ビット）、Ｓ４バス３０４（上位１６ビット）、Ｓ５バス３０５（下位１６ビット）を介して取り込むか、レジスタの値をＳ５バス３０５のみ、もしくはＳ４バス３０４とＳ５バス３０５を介して符号拡張して４０ビットにして取り込み、その後左３ビットから右１ビットの任意のシフト量で算術シフトした値を取り込む。ラッチＢ２０３は、Ｓ５バス３０５からビット８からビット２３の位置に取り込むか、乗算器の出力、もしくは、シフタ２０８の出力を取り込む。ラッチＡ２０２、ラッチＢ２０３は、各々ゼロクリアしたり定数の値に設定したりする機能も持つ。
【００４７】
デスティネーションオペランドがアキュムレータ２０８の場合には、ＡＬＵ２０１の出力はセレクタ２０７を介して、アキュムレータ２０８に書き込む。デスティネーションオペランドがレジスタの場合は、ＡＬＵ２０１の出力はセレクタ２０７、Ｄ２バス３１２のみ（１ワードデータ）もしくはＤ２バス３１２とＤ３バス３１３（２ワードデータ）を介して、レジスタファイル１１５に書き込む。サチュレーション回路２０９は、ＡＬＵ２０１の出力を取り込み、上位１６ビット、もしくは、上位下位あわせた３２ビットにする際に、ガードビットを見て、各々１６ビットもしくは３２ビットで表現できる最大値もしくは最小値にクリッピングする機能を備える。サチュレーション回路２０９の出力は、Ｄ２バス３１２のみ（１ワードデータ）もしくはＤ２バス３１２とＤ３バス３１３（２ワードデータ）を介して、レジスタファイル１１５に書き込むことができる。また、絶対値の計算、最大値設定命令や、最小値設定命令を実行するために、Ａラッチ２０２とＢラッチ２０３の出力が、セレクタ２０７の入力に結合されている。
【００４８】
ＰＥＮＣ２１０は、プライオリティエンコーダであり、ラッチＢ２０３の値を取り込み、固定小数点フォーマットの数を正規化するのに必要なシフト量を計算し、レジスタファイル１１５に書き戻すために結果をＤ２バス３１２に出力することが出来る。
Ｘラッチ２１２、Ｙラッチ２１３は、各々、Ｓ４バス３０４、Ｓ５バス３０５の１６ビットの値を取り込み、１７ビットにゼロ拡張もしくは符号拡張する機能を備える。
【００４９】
乗算器２１１は、１７ビットｘ１７ビットの乗算器であり、Ｘラッチ２１２に格納された値とＹラッチ２１３に格納された値との乗算を行う。積和命令や積差命令の場合には、乗算結果はＰラッチ２１４に取り込まれ、Ｂラッチ２０３に送られる。乗算命令でデスティネーションオペランドがアキュムレータ２０８の場合には、セレクタ２０７を介して乗算結果をアキュムレータ２０８に書き込む。
【００５０】
バレルシフタ２１５は、４０ビットもしくは１６ビットのデータに対して、左右１６ビットまでの算術／論理シフトが可能である。シフトデータは、アキュムレータ２０８の値もしくはＳ４バス３０４を介してレジスタの値がシフトデータ（ＳＤ）ラッチ２１７に取り込まれる。シフト量は、即値もしくはレジスタ値がＳ５バス３０５を介してシフト量（ＳＣ）ラッチ２１６に取り込まれる。バレルシフタ２１５はＳＤラッチ２１７のデータをＳＣラッチ２１６で指定されるシフト量だけ、オペレーションコードで指定されたシフトを行う。シフト結果は、アキュムレータ２０８もしくはＤ２バス３１２を介してレジスタファイル１１５に書き戻される。また、シフタ２１５は２ワードの転送機能を持つ。この場合、Ｓ４バス３０４、Ｓ５バス３０５を介して取り込まれた、２ワードのデータをＳＤラッチ２１７、シフタ２１５を経由して、Ｄ２バス３１２、Ｄ３バス３１３に出力し、レジスタファイルに書き戻す。もちろん、１ワードの転送も可能である。即値ラッチ２１８は、第２デコーダ１１４で生成された６ビットの即値を１６ビットに拡張して保持し、Ｓ５バス３０５を介して演算器に転送する。
【００５１】
次に本データ処理装置のパイプライン処理について説明する。図１２はパイプライン処理を示す図である。本データ処理装置は、命令データのフェッチを行う命令フェッチ（ＩＦ）ステージ４０１、命令の解析を行う命令デコード（Ｄ）ステージ４０２、演算実行を行う命令実行（Ｅ）ステージ４０３、データメモリのアクセスを行うメモリアクセス（Ｍ）ステージ４０４、メモリからロードしたオペランドのレジスタへの書き込みを行うライトバック（Ｗ）ステージ４０５の５段のパイプライン処理を行う。積和／積差演算に関しては、更に乗算と加算の２段のパイプラインで命令の実行を行う。後段の処理を命令実行２（Ｅ２）ステージ４０６と呼ぶ。
【００５２】
ＩＦステージ４０１では、主として命令のフェッチ、命令キュー１１１の管理、リピート制御が行われる。命令フェッチ部１０２、内蔵命令メモリ１０３、外部バスインターフェイス部１０６、命令キュー１１１、ＰＣ部１１８のＩＡレジスタ１８１、ラッチ１８２、インクリメンタ１８２、比較器１８７等や制御部１１３のステージ制御、命令フェッチ制御、ＰＣ部１１８制御等を行う部分が、このＩＦステージ４０１の制御で動作する。ＩＦステージ４０１は、Ｅステージ４０３のジャンプで処理化される。
【００５３】
フェッチアドレスは、ＩＡレジスタ１８１で保持される。Ｅステージ４０３でジャンプが起こるとＪＡバス３２３を介してジャンプ先アドレスを取り込み、初期化を行う。シーケンシャルに命令データをフェッチする場合には、インクリメンタ１８２でアドレスをインクリメントする。リピート処理中に、比較器１８７でＩＡレジスタ１８１の値とＲＰＴ＿Ｅ１８６の値が一致していることが検出され、かつ、ＲＰＴ＿Ｃの値が１でなければ、シーケンスの切り替え制御が行われる。この場合、ＲＰＴ＿Ｓ１８４に保持されている値がラッチ１８５、ＪＡバス３２３を介してＩＡレジスタ１８１に転送される。
【００５４】
ＩＡレジスタ１８１の値は命令フェッチ部１０２に送られ、命令フェッチ部１０２が命令データのフェッチを行う。対応する命令データが内蔵命令メモリ１０３にある場合には、内蔵命令メモリ１０３から命令コードを読み出す。この場合、１クロックサイクルで命令のフェッチを完了する。対応する命令データが内蔵命令メモリ１０３にない場合には、外部バスインターフェイス部１０６に命令フェッチ要求を出す。外部バスインターフェイス部１０６は、オペランドアクセス部１０４からの要求とを調停し、命令の取り込みが可能になったら、外部のメモリから命令データを取り込み、命令フェッチ部１０２に送る。外部バスインターフェイス部１０６は、最小２クロックサイクルで外部メモリのアクセスを行うことが可能である。命令フェッチ部１０２は取り込まれた命令を、命令キュー１１１に転送する。命令キュー１１１は２エントリのキューになっており、ＦＩＦＯ制御で取り込まれた命令コードを、命令デコードダ１１３、１１４に出力する。
【００５５】
Ｄステージ４０２は、命令デコード部１１９でオペレーションコードの解析を行い、第１演算部１１６、第２演算部１１７、ＰＣ部１１８等で命令の実行を行うための制御信号群を生成する。Ｄステージ４０２は、Ｅステージ４０３のジャンプで処理化される。命令キュー１１１から送られてくる命令コードが無効な場合には、アイドルサイクルとなり、有効な命令コードが取り込まれるまで待つ。Ｅステージ４０３が次の処理を開始できない場合には、演算器等に送る制御信号を無効化し、Ｅステージ４０３での先行命令の処理の終了を待つ。例えば、Ｅステージ４０３で実行中の命令がメモリアクセスを行う命令であり、Ｍステージ４０４でのメモリアクセスが終了していない場合にこのような状態になる。
【００５６】
Ｄステージ４０２は、シーケンシャル実行を行う２命令の分割や、２サイクル実行命令のシーケンス制御も行う。さらに、スコアボードレジスタ（図示せず）を用いたロードオペランドの干渉チェックや第２演算部１１７での演算器の干渉チェック等も行い、干渉が検出された場合には、干渉が解消されるまで制御信号の出力を抑止する。図１３は、ロードオペランド干渉の例を示す。ロード命令の直後にロードするオペランドを参照する積和演算命令がある場合、レジスタへのロードが完了するまで、積和演算命令の実行開始を抑止する。この場合、メモリアクセスが１クロックサイクルで終了する場合でも、２クロックサイクルストールが起こる。図１４は、演算ハードウェア干渉の例を示す。積和演算命令の直後に加算器を使用する丸め命令がある場合、先行命令の演算が終了するまで積和演算命令の実行開始を抑止する。この場合、１クロックサイクルストールが起こる。積和演算命令が連続する場合には、ストールは起こらない。
【００５７】
第１デコーダ１１３は、主として第１演算部１１６のすべて、ＰＣ部１１８のＩＦステージ４０１で制御される部分以外、レジスタファイル１１５のＳ１バス３０１、Ｓ２バス３０２、Ｓ３バス３０３への読み出し制御とＤ１バス３１１からの書き込み制御に関するする演算制御信号を生成する。命令に依存するＭステージ４０４やＷステージ４０５での制御信号もここで生成され、パイプライン中を転送される。第２デコーダ１１４は、主として第２演算部１１７での実行制御信号を生成する。
【００５８】
Ｅステージ４０３は、演算、比較、制御レジスタを含むレジスタ間転送、ロード／ストア命令のオペランドアドレス計算、ジャンプ命令のジャンプ先アドレスの計算、ジャンプ処理、ＥＩＴ（例外、割り込み、トラップの総称）検出と各ＥＩＴのベクタテーブルへのジャンプ等、メモリアクセスと積和／積差演算命令の加算処理を除く命令実行に関するほとんどすべての処理を行う。
割り込みイネーブルの場合の割り込みの検出は、必ず３２ビット命令の切れ目で行われる。３２ビット命令の中にシーケンシャルに実行する２つのショート命令がある場合に、この２つのショート命令間で割り込みを受け付けることはない。
【００５９】
Ｅステージ４０３で処理中の命令がオペランドアクセスを行う命令であり、Ｍステージ４０４でメモリアクセスが完了しない場合には、Ｅステージ４０３での完了は待たされる。ステージ制御は制御部１１２で行われる。
Ｅステージ４０３において、第１演算部１１６では、算術論理演算、比較、転送を行う。モジュロの制御を含むメモリオペランドのアドレスや、分岐先のアドレス計算もこのＡＬＵ１５３で行われる。オペランドと指定された指定されたレジスタの値が、Ｓ１バス３０１、Ｓ２バス３０２、Ｓ３バス３０３に読み出され、別途取り込まれる即値、変位等の拡張データとともに、ＡＬＵ１５３で演算が行われ、Ｄ１バス３１１を介して演算結果がレジスタファイル１１５に書き戻される。ロード／ストア命令の場合には、演算結果はＡＯラッチ１５４、ＯＡバス３２１を介して、オペランドアクセス部に送られ、ジャンプ命令の場合には、ジャンプ先アドレスがＪＡバス３２３を介して、各部に送られる。ストアデータはＳ１バス３０１、Ｓ２バス３０２を介して、レジスタファイル１１５から読み出され、保持、整置が行われ、ＯＤバス３２２を介してオペランドアクセス部１０４に転送される。また、ＰＣ部１１８では、実行中の命令のＰＣ値の管理、次の命令アドレスの計算が行われる。制御レジスタ（アキュムレータを除く）とレジスタファイル１１５間の転送は、第１演算部１１６、ＰＣ部１１８の両方で行われる。
【００６０】
Ｅステージ４０３において、第２演算部１１７では、算術論理演算、比較、転送、シフト他積和演算の加算以外のすべての演算実行が行われる。オペランドの値が、レジスタファイル１１５や即値レジスタ２１８、アキュムレータ２０８等から、Ｓ４バス３０４、Ｓ５バス３０５やその他の専用経路を介して各演算器に転送され、指定された演算を行い、アキュムレータ２０８やＤ２バス３１２、Ｄ３バス３１３を介してレジスタファイル１１５に書き戻される。
第２デコーダ１１４で生成された積和／積差演算の加減算実行のための演算制御信号は、Ｅステージ４０３制御のもとに保持される
【００６１】
Ｍステージ４０４では、第１演算部１１６から送られたアドレスでオペランドのメモリアクセスが行われる。オペランドアクセス部１０４は、オペランドが内蔵データメモリ１０５やチップ内ＩＯ（図示せず）にある場合には、内蔵データメモリ１０５やチップ内ＩＯに対し、１クロックサイクルでメモリのリードもしくはライトを行う。オペランドが内蔵データメモリ１０５やチップ内ＩＯ（図示せず）でない場合には、外部バスインターフェイス部１０６にデータアクセス要求を出す。外部バスインターフェイス部１０６は、外部のメモリに対してデータアクセスを行い、ロードの場合には読み出されたデータをオペランドアクセス部１０４に転送する。外部バスインターフェイス部１０６は、最小２クロックサイクルで外部メモリのアクセスを行うことが可能である。ロードの場合には、オペランドアクセス部１０４は読み出されたデータを、ＯＤバス３２２を介してＬＤレジスタ１６４に転送する。Ｍステージ４０４のステージ制御も制御部１１２で行われる。
【００６２】
Ｗステージ４０５では、ロードされたオペランドの整置、バイトデータの場合のゼロ／符号拡張、レジスタファイル１１５への書き込みが行われる。
Ｅ２ステージ４０６では、積和／積差演算の加減算処理をＡＬＵ２０１で行う。
【００６３】
本データ処理装置は、入力クロックをＰＬＬを用いて４倍に逓倍した内部クロックを内部制御に使用する。最短の場合、各パイプラインステージは、内部の１クロックサイクルで処理を終了する。ここでは、クロック制御の詳細については、本発明に直接関係ないので説明を省略する。
各サブ命令の処理例について説明する。加減算、論理演算、比較等の演算命令やレジスタ間の転送命令は、ＩＦステージ４０１、Ｄステージ４０２、Ｅステージ４０３の３段で処理を終了する。演算結果や転送データをＥステージ４０３で行う。
【００６４】
積和／積差命令は、乗算を行うＥステージ４０３と加減算を行うＥ２ステージの２クロックサイクルで演算実行を行うため、実質４段の処理を行う。
ロード命令は、ＩＦステージ４０１、Ｄステージ４０２、Ｅステージ４０３、Ｍステージ４０４、Ｗステージ４０５の５段で処理を終了する。ストア命令は、ＩＦステージ４０１、Ｄステージ４０２、Ｅステージ４０３、Ｍステージ４０４の４段で処理を終了する。
【００６５】
実行に２サイクルかかかる命令では、第１、第２命令デコーダ１１３、１１４で、２サイクルかけて処理し、各サイクル毎に各々実行制御信号を出力し、２サイクルかけて演算実行を行う。
ロング命令は、１命令で上述の処理となる。パラレル実行の２命令は、前述の場合の長い方の処理になる。例えば、２サイクル実行の命令と１サイクル実行の命令の組み合わせの場合には、２サイクルかかる。シーケンシャル実行の２つのショート命令の場合には、前述の場合の組み合わせになり、デコード段階で各命令がシーケンシャルにデコードされる。例えば、Ｅステージ４０３まで終わる加算命令が２つの場合には、Ｄステージで４０２で各命令の処理に分解され、Ｅステージ４０３で２サイクルかけて実行される。
【００６６】
次に、いくつかのプログラムを基づいて、処理例を説明する。
本データ処理装置の２５６タップのＦＩＲ（有限インパルス応答）フィルタ（フレーム処理）のプログラム例を、図１５に示す。記号”｜｜”は２つのショート命令を並列に実行することを示す。ＦＩＲフィルタでは、以下の計算を行う。Ａ［ｉ］は係数であり、Ｄ［ｉ］はデータである。２５６回の積和演算となる。データ、係数とも１６ビットの場合について説明する。
0003658072.tif 000002
【００６７】
５０１では、初期設定が、５０２でループ処理が、５０３で後処理が行われる。ループ処理部分では、リピート（ｒｅｐｉ）命令により、オーバーヘッドなしのループ処理が実現される。ｒｅｐｉ命令の次の命令から、ラベルｌｏｏｐｅｎｄで指定される命令までの６命令のブロックを４２回実行する。ｒｅｐｉ命令はロング命令であり、オペレーションコードと、ＰＣ相対でリピートブロックの最終アドレスを指定するための１６ビットの変位と、実行回数を指定するための８ビットの即値からなり、２クロックサイクル掛けて実行される。まず、第１サイクルでｒｅｐｉ命令の次の命令アドレスをラッチ１９２からＤ１バス３１１を介してＲＰＴ＿Ｓ１８４、ラッチ１８５に転送する。また、ｒｅｐｉ命令のアドレスをＥＰＣ１９４からＳ３バス３０３を介してＡＡラッチ１５１に転送し、命令で指定された変位値を第１デコーダ１１３からＡＢラッチ１５２に取り込み、ＡＬＵ１５３で両者の加算を行い、リピートを行うブロックの最終命令アドレスであるこの加算結果を、ＪＡバス３２３を介してＲＰＴ＿ Ｅ１８６に転送する。次に、第２のサイクルで、１６ビットにゼロ拡張した８ビットの即値を第１デコーダ１１３からＡＢラッチ１５２に取り込み、ＡＬＵ１５３、Ｄ１バス３１１を介してＲＰＴ＿Ｃ１８８に転送する。また、ＰＳＷ２１中のＲＰビット４３を１にセットする。このようにして、リピート処理を行うのに必要な初期設定を終了する。Ｒ０〜Ｒ５がデータ用のバッファ、Ｒ６〜Ｒ１１が係数用のバッファ、Ｒ１２がデータポインタ、Ｒ１４が係数用のポインタとして、各々使用されている。
【００６８】
ここでは、ループの中の処理について詳しく説明する。各命令はロード命令と積和演算命令からなっており、２つのショート命令が並列に実行される。”ＬＤ２Ｗ  Ｒｄｅｓｔ，＠Ｒｓｒｃ＋”は、Ｒｓｒｃで指定されるレジスタの内容をオペランドのアドレスとして２ワード（３２ビット）のデータをフェッチし、Ｒｄｅｓｔで指定されるレジスタペア（ＲｄｅｓｔがＲ０の場合にはＲ０とＲ１のペア）にフェッチしたオペランドの値を書き込む。Ｒｓｒｃの値は、オペランドのバイトサイズである４が加算されて、書き戻される。”ＭＡＣ  Ａｄｅｓｔ，Ｒｓｒｃ１，Ｒｓｒｃ２”は積和演算命令であり、Ｒｓｒｃ１で指定されるレジスタの値とＲｓｒｃ２で指定されるレジスタの値とを符号付きとして乗算し、乗算結果をＡｄｅｓｔで指定されるアキュムレータの値に加算して同じアキュムレータに書き戻す。これらの２つの命令が並列に実行される場合のビットパターンを、図１６に示す。これらの命令は、共に図４に示した２つのオペランドを持つショート命令のビット割り付けに相当する命令ビットが割り付けられている。５２１はＦＭビットであり、２つの命令が並列に実行されるので、”００”になっている。５２２と５２５はポストインクリメント付きＬＤ２Ｗ命令のオペレーションコードで、５２６はＭＡＣ命令のオペレーションコードである。５２３、５２４、５２７、５２８は、各々オペランドを保持するＲｄｅｓｔ、Ｒｓｒｃ、Ｒｓｒｃ１、Ｒｓｒｃ２のレジスタ番号を指定する。Ｒｄｅｓｔ偶数番号のみ指定可能である。Ａｄ５２９は、Ａｄｅｓｔのアキュムレータ番号を指定する。図１７に、ループ部分の内蔵命令メモリの内容を示す。簡単のためメモリの内容はニーモニックで表現している。今後、各３２ビット命令をＩ１（５１１）、Ｉ２
（５１２）等と呼びを、各ショート命令をＩ１ａ（５１２ａ）、Ｉ１ｂ（５１２ｂ）と呼ぶことにする。ループ内ではＩ１（５１１）〜Ｉ６（５１６）の６つの命令が４２回繰り返し実行される。
【００６９】
図１８は、係数Ａ［ｉ］とデータＤ［ｉ］に関する内蔵データメモリのマッピングを示す。各２５６個のデータが保持される。係数Ａ［ｉ］については１６進で２０００番地から２１ｆｆ番までの２５６ワード（５１２バイト）の領域に、各１６ビットのデータが保持される。データＤ［ｉ］については１６進で２４００番地から２５ｆｆ番までの２５６ワード（５１２バイト）の領域に、各１６ビットのデータが保持される。
【００７０】
図１９に、ループ内の処理の流れを示す。縦軸が時間を、横軸がパイプラインのステージを表す。命令はすべて内蔵命令メモリ１０３に、オペランドデータはすべて内蔵データメモリ１０５にあり、１クロックサイクルで各命令の１つのステージの処理が終了する。リピート処理が続く間は、Ｔ６の後にＴ１の状態が繰り返される。
このデータ処理装置では、レジスタの内容をアドレスとし、アドレス更新を伴うメモリオペランドのレジスタファイルへの取り込みを指定する演算コードと、レジスタの値を参照して演算を行うことを指定する演算コードと含む複数の命令を、パイプライン処理の技術を用いて処理することにより、ソフトウェアでオペランドの干渉なしに演算を実行することができ、処理性能を向上させている。
【００７１】
まず、Ｉ１（５１１）の処理に着目して、説明する。ＩＦステージ４０１では、Ｔ１の期間（５３１）でＩ１（５１１）のフェッチを行う。ＩＡレジスタ１８１の内容が、命令フェッチ部１０２に転送される。ＩＡレジスタ１８１の値とＲＰＴ＿Ｅ１８６の値が比較器１８７で比較される。この場合不一致なので、ＩＡレジスタ１８１の値は、インクリメンタ１８２でインクリメントされ、書き戻される。命令フェッチ部１０２は内蔵命令メモリ１０３のアクセスを行い、読み出された３２ビットの命令データを命令キュー１１１に送る。命令キュー１１１は、そのサイクルで転送された命令データを、第１デコーダ１１３、第２デコーダ１１４に送る。
【００７２】
Ｄステージ４０２では、Ｔ２の期間（５３７）でＩ１（５１１）のデコードを行う。第１デコーダ１１３ではＩ１ａ（５１１ａ）のＬＤ２Ｗ命令が、第２デコーダ１１４ではＩ１ｂ（５１１ｂ）のＭＡＣ命令がデコードされ、制御信号が生成される。各々、第１演算部１１６、第２演算部１１７に出力される。第１演算部１１６に送る即値の値は４となる。Ｄステージ４０１でオペランドや演算器のコンフリクトチェックが行われるが、この場合干渉は起こらない。ＭＡＣ命令のリードオペランドの値は、すでにロードが完了している。Ｉ１ｂ（５１１ｂ）のＭＡＣ命令はＴ３の期間（５４３）で実行されるが、Ｒ０の値はＴ１の期間（５３５）で、Ｒ６の値はＴ２の期間（５４０）で、すでにレジスタへの書き込みを終了している。
【００７３】
Ｅステージ４０３では、Ｔ３の期間（５４３）でＩ１（５１１）の実行を行う。第１演算部１１６では、Ｉ１ａ（５１１ａ）のＬＤ２Ｗ命令のオペランドアドレス生成とアドレスポインタの値の更新が行われる。オペランドのアドレスであるレジスタファイル１１５のＲ１２の値がＳ３バス３０３を介して、ＡＡラッチ１５１に転送される。ＡＡラッチ１５１の値は、そのままＡＯラッチ１５４、ＯＡバス３２１を介して、オペランドアクセス部１０４に出力される。また、第１デコーダ１１３が出力した４の即値がＡＢラッチ１５２に転送される。ＡＬＵ１５３で加算を行い、加算結果をセレクタ１５５、Ｄ１バス３１１を介して、レジスタファイル１１５のＲ１２に書き戻す。第２演算部１１７では、Ｉ１ｂ
（５１１ｂ）のＭＡＣ命令の乗算を行う。レジスタファイル１１５のＲ０の値がＳ４バス３０４を介してＸレジスタ２１２に、Ｒ６の値がＳ５バス３０５を介してＹレジスタ２１３に、それぞれ取り込まれる。両者の値を符号付きの値として扱い乗算を行い、乗算結果をＰレジスタ２１４に取り込む。
【００７４】
Ｍステージ４０４とＥ２ステージ４０６では、Ｔ４の期間（５４９）でそれぞれＩ１（５１１）のメモリアクセスと加算を行う。オペランドアクセス部１０４は、第１演算部１１６から送られたアドレスで内蔵データメモリから４バイトのデータのロードを行い、フェッチした値をＯＤバス３２２を介してＬＤレジスタ１６４に転送する。第２演算部１１７では、Ｉ１ｂ（５１１ｂ）のＭＡＣ命令の加算を行う。アキュムレータ２０８のＡ０の値をシフタ２０４を介してシフトせずにＡラッチ２０２に取り込む。また、Ｐレジスタ２１４の値を４０ビットに符号拡張して、Ｂラッチ２０３に取り込む。ＡＬＵ２０１で両者の加算を行い、加算結果をアキュムレータ２０８のＡ０に書き戻す。
【００７５】
Ｗステージ４０５は、Ｔ５の期間（５５５）でレジスタへのライトバックを行う。第１演算部１１６で、ＬＤレジスタ１６４に保持されたデータをラッチ１６１、整置回路１６６を介してＷ１バス３１４、Ｗ２バス３１５に出力する。この場合、オペランドは４バイト整置されているので、ＭＳＢ側の２バイトがＷ１バス３１４に出力され、ＬＳＢ側の２バイトがＷ２バス３１５に出力される。そして、Ｗ１バス３１４上のデータがレジスタファイル１１５のＲ４に、Ｗ２バス３１５上のデータがレジスタファイル１１５のＲ５にそれぞれ書き込まれる。
以上の処理を、１つの３２ビット命令１つについて１クロックサイクル毎にパイプライン処理することによって、１クロックサイクルに１回の積和演算を実現している。このように、Ｗステージ４０５のＴ１の期間５３５でレジスタファイル１１５のＲ０とＲ１にロードされたデータ値を、Ｗステージ４０５のＴ２の期間５４０でレジスタファイル１１５のＲ６とＲ７にロードされた係数値を、それぞれ２ワード毎に書き込んでいく。そして、Ｅステージ４０３のＴ３の期間５４３でデータが保持されているレジスタファイル１１５のＲ０の値と対応する係数が保持されているレジスタファイル１１５のＲ６の値を参照して乗算が行われ、Ｅステージ４０３のＴ４の期間５４８でデータが保持されているレジスタファイル１１５のＲ１の値と対応する係数が保持されているレジスタファイル１１５のＲ７の値を参照して乗算が行われる。このようにソフトウェア的にオペランド干渉が起こらないようにパイプライン処理することにより、効率よく処理される。
【００７６】
図１９では、リピート処理についての詳細が示されていないが、少し説明しておく。ＩＦステージ４０１で、フェッチアドレスとリピートブロックの最終アドレスとの比較が行われる。ＩＦステージ４０１のＴ６の期間５５６で比較結果が一致する。この場合、ＲＰＴ＿Ｃ１８８のカウンタ値が１でなければ、まだ処理を繰り返すことが示されており、処理シーケンスの切り替えを行う。リピートを行うブロックの開始アドレスであるラッチ１８５の値を、ＪＡバス３２３を介してＩＡレジスタ１８１に転送する。そして、ＩＦステージ４０１のＴ１に相当するＴ７（図示せず）の期間５３１で、リピートを行うブロックの開始アドレスの命令がフェッチされる。リピートブロックの最終命令アドレス一致検出結果は、パイプライン中を転送される。そして、Ｉ６が実行されるＥステージ４０３のＴ２の期間５３８で、実行する命令に依存せず、デクリメンタ１９０でリピートカウンタＲＰＴ＿Ｃ１８８の値を１だけデクリメントする。ＲＰＴ＿Ｃ１８８の値が１の場合には、ＰＳＷ中のＲＰビット４３を０にクリアし、リピートをディスエーブル状態にする。
【００７７】
次に、ｎ段２次バイクワッドＩＩＲ（無限インパルス応答）フィルタについて述べる。信号線図を図２０に示す。記号６０１は係数の乗算を、記号６０２が入力データの加算を、記号６０３が単位遅延を表す。ループの内部は５回の積和になる。この場合、ループ中に過去２回のデータをメモリに書き込む必要がある。データ、係数とも１６ビットの場合について説明する。図２１に本データ処理装置のＩＩＲフィルタのプログラム例を示す。６０６では、初期設定が、６０７でループ処理が、６０８で後処理が行われる。ループ処理部分では、リピート命令により、オーバーヘッドなしのループ処理が実現される。
【００７８】
ここでは、ループの中の処理について詳しく説明する。図２２に、ループ部分の内蔵命令メモリの内容を示す。ループ内ではＩ１（６１１）〜Ｉ７（６１７）の６つの命令が４２回繰り返し実行される。６１１ａのＳＴ２Ｗ命令は、２つのレジスタＲ０とＲ１の値をメモリにストアする。ベースアドレスであるＲ１２の値はポストインクリメントされる。６１１ｂのＭＵＬＸ命令は、２つのレジスタＲ０とＲ６が共に符号付きの値として乗算し、乗算結果がアキュムレータに書き戻す。乗算結果は、セレクタ２０７を介して、そのサイクルでアキュムレータ２０８に書き戻される。６１２ａのＡＤＤ命令は、ＡＬＵ２０１により、Ｒ１２の内容と４が加算される。６１３ｂのＭＶ命令はｒ１にｒ４の値をコピーする。６１６ｂのＭＶ２Ｗ命令は、２ワードの転送を行い、Ｒ４の値をＲ２に、Ｒ５の値をＲ３に、それぞれ転送する。この場合、バレルシフタ２１５を介して、データが転送されるので、直前の積和演算命令とのハードウェアリソースの干渉は起こらない。６１７ｂのＲＡＣＨＩ命令は、Ａ０の値を１ビット左シフトし、上位１６ビットに丸めて、ガードビットの値に基づいて、オーバーフローが起こっている場合には１６ビットで表現できる最大値ｈ’７ｆｆｆに、アンダーフローが起こっている場合には１６ビットで表現できる最小値ｈ’８０００に、リミッティングし、Ｒ０に書き戻す。この演算を、ＡＬＵ２０１とサチュレーション回路２０９を用いて実行する。
【００７９】
Ｒ０が次段への入力データを保持し、Ｒ１は更新データＤｉ１（ｉはｎ以下の整数）、Ｒ２〜Ｒ５はデータ保持用のバッファ、Ｒ６、Ｒ８〜Ｒ１１が係数用のバッファ、Ｒ１２がデータポインタ、Ｒ１４が係数用のポインタとして、各々使用されている。Ｒ７は係数データの３２ビット整置を維持するために、無効なデータを保持する。
【００８０】
図２３は、係数とデータに関する内蔵データメモリのマッピングを示す。各データのビット長は１６ビットで、係数は１段当たり５個づつ、データは１段当たり２個づつとなる。Ａ１６２１は、入力値に掛ける係数である。６２２、６２６等は、係数を効率よくアクセスするためのダミーの領域である。
【００８１】
図２４に、ループ内の処理の流れを示す。縦軸が時間を、横軸がパイプラインのステージを表す。命令はすべて内蔵命令メモリ１０３に、オペランドデータはすべて内蔵データメモリ１０５にあり、１クロックサイクルで各命令の１つのステージの処理が終了する。リピート処理が続く間は、Ｔ６の後にＴ１の状態が繰り返される。この場合にも、前述のＦＩＲフィルタの場合と同様、フェッチされたデータが最低２サイクルあけて参照されるようになっている。また、６１１の命令では、データの更新を行うための２ワードのストアと同時に、乗算が実行される。また、ループの各回で同一のレジスタ番号が使用できるように、ＭＶ２Ｗ命令で、データの内容を２ワードのデータを一度に転送する（６４３）。Ｔ３の６５５でロードされたＲ１０、Ｒ１１の値と、Ｔ４の６５９でロードされたＲ４、Ｒ５の値を用いて、Ｔ６の６６６とＴ７の６７０で各々Ｒ４とＲ１０、Ｒ５とＲ１１の乗算を行う。このような処理を行うことにより、２次のバイクワッドＩＩＲフィルタの１段の処理を、７サイクルで実現している。
【００８２】
次に、ＩＦＦＴ（逆高速フーリエ変換）の例を示す。ａ、ｂは入力データの複素変数、Ａ、Ｂは出力データ複素変数（更新データ）、ｔｍｐはテンポラリ複素変数、ｃは複素定数で、”＿ｒ”は実数部、”＿ｉ”は虚数部を示す。この場合、単位処理は以下のようになる。
tmp_r = (b_r * c_r) - (b_i * c_i);
tmp_i = (b_r * c_i) + (b_i * c_r);
A_r = a_r - tmp_r;
A_i = a_i - tmp_i;
B_r = a_r + tmp_r;
B_i = a_i + tmp_i;
【００８３】
ＩＦＦＴの２つの単位処理を１つのループとした場合の、ループ部分のプログラム例を図２５に示す。Ｒ０とＲ１、と、Ｒ２とＲ３が、１回おきにａの後Ａを保持する。Ｒ４とＲ５がｂを保持する。Ｒ６とＲ７がｔｍｐを保持する。Ｒ８とＲ９がａの後Ｂを保持する。Ｒ１０とＲ１１がｃを保持する。各々、偶数レジスタ番号のレジスタが実数部を、奇数レジスタ番号のレジスタが虚数部を保持する。Ｒ１２はａのアドレスを、Ｒ１４はｂのアドレスを保持する。
ｍｓｕは積差命令であり、乗算結果がアキュムレータから減算される。これは、複素数でｉの２乗が−１になるためである。
この場合、２つの複素数ペアに関する２つの単位処理を１５サイクルで実現できる。３０サブ命令中、２ワードロード命令が４回、２ワードストア命令が４回、加算が４回、減算が４回、乗算が４回、積和が２回、積差が２回、丸め命令が４回、２ワード転送命令が２回と、非常に高い演算効率を実現している。
【００８４】
差分絶対値和のループの部分のプログラム例を、図２６に示す。ａｂｓａｄｄ命令は、レジスタファイル１１５から、Ｓ５バス３０５を介して、指定されたレジスタの値をシフタ２０５の下位側に取り込む。シフタ２０５で、４０ビットに符号拡張してシフトせずにＢラッチ２０３に取り込む。ＡＬＵ２０１で指定されたアキュムレータの値と演算を行い、演算結果をアキュムレータ２０８に書き戻す。ＡＬＵ２０１では、Ｂラッチ２０３の値が正の場合には加算を、負の場合には減算を行う。減算は、データを反転し、最下位にキャリーを入れることにより実現する。このようにして、絶対値和を１クロックサイクルで実現する。
【００８５】
図２７に、ループ内の処理の流れを示す。２ワードロード命令が減算結果の絶対値和命令と並列に実行される。また、Ｔ３サイクルで、Ｉ５ａのＬＤ２Ｗ命令に関するレジスタＲ６、Ｒ７へのロードが行われる（８１３）。次のＴ４サイクルで、Ｉ６ａのＬＤ２Ｗ命令に関するレジスタＲ２、Ｒ３へのロードが行われる（８１７）。Ｔ６サイクルで、Ｉ４ａ命令でＲ３の値からＲ７の値が引かれ、Ｒ３に書き戻され、Ｉ４ｂ命令で並列にＲ２の値からＲ６の値が引かれ、Ｒ２に書き戻される（８２４）。このようにして、４回の差分絶対値和を６サイクルで実現している。
【００８６】
実施の形態２．
図２８は、実施の形態１のデータ処理装置の第２演算部１１７に相当する、本発明の実施の形態２であるデータ処理装置の第２演算部１２０のブロック構成図である。他の部分は、実施の形態１のデータ処理装置と同じ構成をとる。第２演算部１２０は、積和演算を行う加算器２３１とは独立に動作可能なＡＬＵ２２１を持つ点が、実施の形態１のデータ処理装置の第２演算部１１７と異なる。これにより、積和／積差命令の加減算と他の算術論理演算をハードウェアの干渉なしに実行できる。
【００８７】
ＡＬＵ２２１は１６ビットの算術論理演算を行う。Ｓ４バス３０４結合されたＡ２ラッチ２２２とＳ５バス３０５結合されたＢ２ラッチ２２３はＡＬＵ２２１の入力ラッチであり、ＡＬＵＯラッチ２２５は出力ラッチである。ＡＬＵ２２５の出力、Ａ２ラッチ２２２の値、もしくは、Ｂ２ラッチ２２３の値が、セレクタ２２４で選択され、Ｄ２バス３１２を介して、レジスタファイル１１５に書き戻される。ＡＬＵＯラッチ２２５の出力は、シフタ２３５を介して、下位にセットされ、符号拡張する事が可能である。Ｂラッチ２３３は、シフタ２３５の出力、もしくは、乗算器の出力ラッチであるＰラッチ２１４の値を選択的に取り込む。Ａラッチ２３２は、シフタ２０４を介してアキュムレータ２０８から、データを取り込む。その他の構成は、実施の形態１の第２演算部１１７とほぼ同じである。
【００８８】
処理例について説明する。図２９に差分二乗和のプログラム例を示す。７０１では、初期設定が、７０２でループ処理が、７０３で後処理が行われる。図３０に、ループ部分の内蔵命令メモリの内容を示す。Ｄ１［ｉ］とＤ２［ｉ］の差分二乗和を求める。Ｒ１２がＤ１［ｉ］のアドレスを、Ｒ１４がＤ２［ｉ］のアドレスを、Ｒ０〜Ｒ３がＤ１のデータを、Ｒ４〜Ｒ７がＤ２のデータを、それぞれ保持する。すべての命令が並列に実行され、６サイクルで４回分の処理を実行する。図３１に、データに関する内蔵データメモリのマッピングを示す。各データのビット長は１６ビットで、Ｄ１とＤ２はそれぞれ異なる領域に格納されている。
【００８９】
図３２に、ループ内の処理の流れを示す。例えばＴ６の期間で、積和の加算（７５５）と差分をとるための減算（７５４）を、加算器２３１とＡＬＵ２２１で並列に実行する。
【００９０】
実施の形態１のデータ処理装置で説明した差分絶対値和を、実施の形態２のデータ処理装置では、より効率よく処理できる。図３３に、ループ部分の内蔵命令メモリの内容を示す。ｒ１２が一方のデータアレイのアドレスを、ｒ０〜ｒ５がＤ１のそのデータを、ｒ１４が他方のデータアレイのアドレスを、ｒ６〜Ｒ１１がそのデータを、それぞれ保持する。ｄａａｄｄ命令は、差分の絶対値和を求める命令であり、アキュムレータに加算結果が保持される。この命令は、積和演算命令同様２段のパイプライン処理が実行される。
【００９１】
図３４に、ループ内の処理の流れを示す。処理の状態は、実施の形態１のデータ処理装置で説明したＦＩＲフィルタの場合とほとんど同じになる。積和の代わりに差分絶対値和が実行される。乗算に対応するところで差分がとられ、加算に対応するところで絶対値和がとられる。このようにして、１サイクルに１回の差分絶対値和演算のスループットで処理する。
【００９２】
実施の形態３．
図３５に、実施の形態３のデータ処理装置の機能ブロック構成を示す。ＭＰＵコア部８５０は、ＭＰＵコア部である。命令フェッチ部１０２、オペランドアクセス部１０４は、実施の形態１のデータ処理装置とほぼ同じである。ただし、命令データは６４ビット幅で取り込まれる。バスインターフェイス部等、その他のブロックはここでは図示していない。
【００９３】
ＭＰＵコア部８５０は、命令キュー８５１、制御部８５２、レジスタファイル８６０、第１演算部８５８、第２演算部８５９、第３演算部８６１、第４演算部８６２からなる。命令キュー８５１は、６４ビットの命令を最大２つ保持する、ＦＩＦＯ制御の命令バッファである。第１演算部８５８は、インクリメンタやデクリメンタ、加算器等を備え、ＰＣ値の管理や分岐先アドレスの計算、リピート制御等を行う。第２演算部８５９は、ＡＬＵや整置回路等を備え、オペランドアクセス、ポインタの更新、算術論理演算、転送、比較、ロードしたデータの保持・整置、ストアするデータの保持・整置を行う。第３演算部８６１は、ＡＬＵ、シフタ等を備え、算術論理演算、転送、比較、シフト等の演算処理を行う。第４演算部８６２は積和演算器やシフタ、アキュムレータ等を備え、主として積和、積差、アキュムレータシフト等を行う。このように、各々レジスタファイルに結合された４つの独立した演算器を備える。
【００９４】
制御部８５２には、命令デコード部８５３が含まれる。命令デコード部８５３には、４つのデコーダがある。図３６に、本データ処理装置が処理する命令フォーマットを示す。４ビットのフォーマットを示すＦＭビット８７１は、各２ビットで、８７２のコンテナ１と８７３のコンテナ２の組み合わせと、８７４のコンテナ３と８７５のコンテナ４の組み合わせについて、実施の形態１のデータ処理装置と同様のフォーマット指定を行う。各コンテナ８７２〜８７５は１５ビットで表現される。
【００９５】
第１デコーダ８５４は、主として８７２のコンテナ１のオペレーションコードをデコードし、レジスタファイル８６０と第１演算部８５８への制御信号を生成する。主として、分岐命令等が、８７２のコンテナ１のフィールドで指定される。第２デコーダ８５５は、主として８７３のコンテナ２のオペレーションコードをデコードし、レジスタファイル８６０と第２演算部８５９への制御信号を生成する。主として、ロード／ストア命令、算術論理演算命令、転送命令、比較命令等が、８７３のコンテナ２のフィールドで指定される。第３デコーダ８５６は、主として８７４のコンテナ３のオペレーションコードをデコードし、レジスタファイル８６０と第３演算部８６１への制御信号を生成する。主として、算術論理演算命令、転送命令、比較命令、シフト命令等が、８７４のコンテナ３のフィールドで指定される。第４デコーダ８５７は、主として８７５のコンテナ４のオペレーションコードをデコードし、レジスタファイル８６０と第４演算部８６２への制御信号を生成する。主として、積和演算命令等が、８７５のコンテナ４のフィールドで指定される。
【００９６】
このような構成をとることにより、非常に高度な並列処理が可能となる。このような場合にでも、本発明が適用可能である。例えば、前述の差分二乗和演算について、ロードを第２演算部８５９で、減算を第３演算部８６１で、絶対値加算を第４演算部８６２で、各々並列に実行させることにより、１サイクルに１回のスループットで差分二乗和演算を実行できる。同様に、ＩＦＦＴなどの処理も高速に処理できる。このように、本発明では、演算器の個数はいくつでもよく、必要な性能とコストとのトレードオフで決定すればよいことである。データの転送のスループットが足らなければ、４つのワードを並列に転送するようにしてもよい。また、レジスタの本数が足りない場合には、レジスタの本数を増やせばよい。ただし、この場合、ビット長を増やす必要がある。
【００９７】
また、積和のスループットを上げるためには、積和演算ユニットを複数の演算部に持たせ、転送するオペランドの数を上げればよい。この場合にも本発明を用いることが可能である。
【００９８】
実施の形態４．
図３７は、実施の形態１のデータ処理装置の第２演算部１１７に相当する、本発明の実施の形態４であるデータ処理装置の第２演算部１２０のブロック構成図である。他の部分は、実施の形態１のデータ処理装置とほぼ同じ構成をとる。
この形態では、積和演算結果は毎回レジスタに格納される。ガードビットはない。演算精度上、ガードビットが必要な場合には、別途ガードビットを持つようにしてもよい。
【００９９】
本データ処理装置の命令フォーマットを、図３８に示す。ここでは、命令が６４ビットの場合を示している。ＦＭビット９４１は２ビット、コンテナＬ９４２、コンテナＲ９４３は、各々３１ビットである。図３９に、各コンテナの基本フォーマットを示す。基本的に３オペランドフォーマットとなっており、２つのソースレジスタ番号指定フィールド９４６、９４７と１つのデスティネーションレジスタ番号指定フィールド９４５の３つのフィールドを持つ。レジスタは６４本あり、レジスタ番号は６ビットのフィールドで指定される。
【０１００】
基本的なパイプライン処理も、実施の形態１のデータ処理装置と同じなのでここでは説明を省略する。Ｓ４バス９１３、Ｓ５バス９１４、Ｄ２バス９１５、Ｄ３バス９１６は、Ｅステージ４０３で動作する。これらのバスは、主として通常の整数演算命令等のオペランド値を転送する。Ｓ６バス９１１、Ｓ７バス９１２、Ｄ４バス９１７、Ｄ５バス９１８は、Ｅ２ステージ４０６で動作する。これらのバスは、主として累積加算値を転送する。加算器９３４とその入出力部は、Ｅステージ４０３でもＥ２ステージ４０６でも動作するが、その他の演算器やラッチはＥ２ステージ４０６で動作する。
【０１０１】
積和演算命令であるｍａｃ命令は３オペランド命令になっている。”ｍａｃ  Ｒｄｅｓｔ，Ｒｓｒｃ１，Ｒｓｒｃ２”の処理仕様は、Ｒｓｒｃ１で指定されたレジスタ値と、Ｒｓｒｃ２で指定されたレジスタ値との乗算を行い、Ｒｄｅｓｔで指定されるレジスタペアの値に乗算結果を加算することである。ハードウェアでの処理の詳細を説明する。まずＥステージ４０３で、Ｓ４バス９１３、Ｓ５バス９１４を介してレジスタファイル９０３から、各々Ｒｓｒｃ１とＲｓｒｃ２で指定されたレジスタ値を転送し、Ｘラッチ９３８とＹラッチ９３９の取り込む。乗算器９４０で乗算を行い結果をＰレジスタ９４１に保持する。次にＥ２ステージ４０６で、Ｒｄｅｓｔで指定されるレジスタペアの値を、レジスタファイル９０３からＳ６バス９１１、Ｓ７バス９１２、シフタ９３０を介して、Ａラッチ９３１に取り込む。また、Ｐレジスタ９４１の値をＢラッチ９３３に取り込む。加算器９３４で両者の加算を行い、加算結果をサチュレーション回路９３７を介して、Ｄ４バス９１７、Ｄ５バス９１８に出力し、レジスタファイル９０３のＲｄｅｓｔで指定されるレジスタペアに結果を書き戻す。
【０１０２】
図４０にＦＩＲフィルタのループの部分のプログラム例を挙げる。２ワードロード命令と、積和演算命令を並列にデコードし、並列に実行することにより、実施の形態１のデータ処理装置と同様１サイクルに１回の積和演算が実現されている。異なる点は、積和の結果を毎回レジスタファイルに書き戻すことのみである。
このように、積和演算の累積結果をレジスタ中に保持する場合にでも、本発明の技術が有効である。ここでは、オペランドのバイパス等は行っていないが、必要に応じてバイパス経路を設けてもよい。
【０１０３】
実施の形態５．
以上の実施の形態のデータ処理装置では、１ワードが１６ビットのビット長の場合を想定しているが、１ワードが何ビットであってもよい。例えば、オーディオ等の処理では２４ビット程度のビット長が必要であるが、この場合１ワードを２４ビットにしてもよい。また、プロセッサとの整合を考え、ビット長を３２ビットにしてもよい。この場合には、必ずしも乗算器は１ワードｘ１ワードでなくてもよい。処理対象となるアプリケーションの精度上必要不可欠なサイズの乗算器を選択してインプリメントすればよい。
【０１０４】
実施の形態６．
以上の実施の形態のデータ処理装置では、積和演算を２段のパイプライン処理しているが、乗算器の最終加算段と加算を行う加算器をマージし、１サイクルで積和演算を実行できるようにしてもよい。また、高速動作を狙うため、乗算を更に２段のパイプラインとし、３段のパイプラインで積和演算を行うようにしてもよい。また、その他のパイプラインも自由な選択が可能である。例えば、Ｅステージ４０３とＭステージ４０４とをマージし、１つのパイプラインステージで処理するように構成してもよい。また、動作周波数を向上するために演算実行に関するレジスタへのライトバックをＥステージと分けてもよい。また、レジスタへの書き込み経路から、処理の高速化に有効なデータのバイパスを行うようにしてもよい。
【０１０５】
実施の形態７．
以上の実施の形態のデータ処理装置では、ＶＬＩＷアーキテクチャのマイクロプロセッサを例に挙げて、本発明の実施例を上げた。しかし、通常のスーパースケーラＲＩＳＣプロセッサでも、ハードウェアの詳細を意識し、並列に実行できる場合の条件を把握した上で、プログラミングすれば、本発明の技術は有効である。この場合、プログラム中に並列に実行することがエンコードされているか、ハードウェアが並列実行の可否判定を行うかの相違があるだけである。ＶＬＩＷアーキテクチャでも、ＦＭビットは無くてもよい。必ず、並列に実行するようにしてもよい。この場合、並列に実行できないオペレーションをＮＯＰにしておけばよい。
【０１０６】
【発明の効果】
この発明に係るデータ処理装置によれば、第１及び第２のデコーダを備えた命令デコード部と、レジスタファイルと、演算部と、オペランドアクセス部を備え、第１の演算コードと第２の演算コードを並列にデコード及び実行し、演算と２つのデータのメモリアクセスを並列に実行することにより、高速なデータ処理を得ることができる効果がある。特に、ＤＳＰ並みの信号処理性能をマイクロプロセッサとして実現できる効果がある。
【０１０７】
また、単純な構成となるのでデータ処理装置のコストを低減できる効果もある。
【０１０８】
さらに、積和演算命令と２つのデータのメモリアクセスを並列に行うことにより、１クロックサイクルに１回の積和演算を実行できる効果もある。
【０１１０】
また、この発明に係るデータ処理方法によれば、第１のステップでメモリからレジスタに第１のデータと第２のデータとを並列にロードし、第２のステップでメモリからレジスタに第３のデータと第４のデータとを並列にロードし、第３のステップで第１のデータと第３のデータ間で演算を行い、第４のステップで第２のデータと第４のデータ間で演算を行うことにより、１つのメモリで効率よくメモリアクセスと演算を実行でき、データ処理装置の性能が向上するという効果がある。特に、単純な制御でディジタル信号処理性能が大幅に向上するという効果がある。
【図面の簡単な説明】
【図１】  この発明の一実施の形態であるデータ処理装置のレジスタセットを表す説明図である。
【図２】  この発明の一実施の形態であるデータ処理装置のプロセッサ・ステータス・ワードの構成図である。
【図３】  この発明の一実施の形態であるデータ処理装置の命令フォーマット図である。
【図４】  この発明の一実施の形態であるデータ処理装置のショートフォーマットの２オペランド命令の命令フォーマット図である。
【図５】  この発明の一実施の形態であるデータ処理装置のショートフォーマットの分岐命令の命令フォーマット図である。
【図６】  この発明の一実施の形態であるデータ処理装置のロングフォーマットの３オペランド命令やロード／ストア命令の命令フォーマット図である。
【図７】  この発明の一実施の形態であるデータ処理装置の左コンテナにオペレーションコードを持つ命令の命令フォーマット図である。
【図８】  この発明の一実施の形態であるデータ処理装置の機能ブロック図である。
【図９】  この発明の一実施の形態であるデータ処理装置の第１演算部の詳細ブロック図である。
【図１０】  この発明の一実施の形態であるデータ処理装置のＰＣ部の詳細ブロック図である。
【図１１】  この発明の一実施の形態であるデータ処理装置の第２演算部の詳細ブロック図である。
【図１２】  この発明の一実施の形態であるデータ処理装置のパイプライン処理を示す説明図である。
【図１３】  この発明の一実施の形態であるデータ処理装置のロードオペランド干渉を起こす場合のパイプラインの状態を示す説明図である。
【図１４】  この発明の一実施の形態であるデータ処理装置の演算ハードウェア干渉を起こす場合のパイプラインの状態を示す説明図である。
【図１５】  この発明の一実施の形態であるデータ処理装置の２５６タップＦＩＲフィルタのプログラム例を示すプログラム図である。
【図１６】  この発明の一実施の形態であるデータ処理装置の２ワードロード命令と積和演算命令が並列に実行される場合のビットパターンを示す説明図である。
【図１７】  この発明の一実施の形態であるデータ処理装置のＦＩＲフィルタのプログラムのループ部分の内蔵命令メモリの内容を示す説明図である。
【図１８】  この発明の一実施の形態であるデータ処理装置のＦＩＲフィルタのプログラムにおける係数とデータに関する内蔵データメモリのマッピングを示す説明図である。
【図１９】  この発明の一実施の形態であるデータ処理装置のＦＩＲフィルタのプログラムのループ内の処理の流れを示す説明図である。
【図２０】  ｎ段２次バイクワッドＩＩＲフィルタの信号線図である。
【図２１】  この発明の一実施の形態であるデータ処理装置のＩＩＲフィルタのプログラム例を示すプログラム図である。
【図２２】  この発明の一実施の形態であるデータ処理装置のＩＩＲフィルタのプログラムのループ部分の内蔵命令メモリの内容を示す説明図である。
【図２３】  この発明の一実施の形態であるデータ処理装置のＩＩＲフィルタのプログラムの係数とデータに関する内蔵データメモリのマッピングを示す説明図である。
【図２４】  この発明の一実施の形態であるデータ処理装置のＩＩＲフィルタのプログラムのループ内の処理の流れを示す説明図である。
【図２５】  この発明の一実施の形態であるデータ処理装置のＩＦＦＴのループ部分のプログラム例を示すプログラム図である。
【図２６】  この発明の一実施の形態であるデータ処理装置の差分絶対値和のプログラムのループの部分のプログラム例を示すプログラム図である。
【図２７】  この発明の一実施の形態であるデータ処理装置のの差分絶対値和のプログラムのループ内の処理の流れを示す説明図である。
【図２８】  この発明の第２の実施の形態であるデータ処理装置の第２演算部の詳細ブロック図である。
【図２９】  この発明の第２の実施の形態であるデータ処理装置の差分二乗和のプログラム例を示すプログラム図である。
【図３０】  この発明の第２の実施の形態であるデータ処理装置の差分二乗和のプログラム例のループ部分の内蔵命令メモリの内容を示す説明図である。
【図３１】  この発明の第２の実施の形態であるデータ処理装置の差分二乗和のプログラム例のデータに関する内蔵データメモリのマッピングを示す説明図である。
【図３２】  この発明の第２の実施の形態であるデータ処理装置の差分二乗和のプログラム例のループ内の処理の流れを示す説明図である。
【図３３】  この発明の第２の実施の形態であるデータ処理装置の差分絶対値和のプログラムのループ部分の内蔵命令メモリの内容を示す図である。
【図３４】  この発明の第２の実施の形態であるデータ処理装置の差分絶対値和のプログラムのループ内の処理の流れを示す説明図である。
【図３５】  この発明の第３の実施の形態であるデータ処理装置の機能ブロック構成を示すブロック図である。
【図３６】  この発明の第３の実施の形態であるデータ処理装置の命令フォーマットを示す説明図である。
【図３７】  この発明の第４の実施の形態であるデータ処理装置の第２演算部を示すのブロック構成図である。
【図３８】  この発明の第４の実施の形態であるデータ処理装置の命令フォーマットを示す説明図である。
【図３９】  この発明の第４の実施の形態であるデータ処理装置の命令の各コンテナの基本フォーマットを示す説明図である。
【図４０】  この発明の第４の実施の形態であるデータ処理装置のＦＩＲフィルタのループの部分のプログラム例を示すプログラム図である。
【符号の説明】
５１…フォーマット指定（ＦＭ）ビット、５２…左コンテナ、５３…右コンテナ、
１００…データ処理装置、１０１…ＭＰＵコア、１０２…命令フェッチ部、
１０３…内蔵命令メモリ、１０４…オペランドアクセス部、
１０５…内蔵データメモリ、１０６…外部バスインターフェイス部、
１１１…命令キュー、１１２…制御部、１１３…第１デコーダ、
１１４…第２デコーダ、１１９…命令デコード部、１１５…レジスタファイル、
１１６…第１演算部、１１７…第２演算部、１１８…ＰＣ部、１５３…ＡＬＵ、
２０１…ＡＬＵ、２０８…アキュムレータ、２０９…サチュレーション回路、
２１０…プライオリティエンコーダ、２１１…乗算器、２１５…バレルシフタ、
２２１…ＡＬＵ、２３１…加算器、４０１…命令フェッチ（ＩＦ）ステージ、
４０２…命令デコード（Ｄ）ステージ、４０３…命令実行（２）ステージ、
４０４…データメモリアクセス（Ｍ）ステージ、
４０５…ライトバック（Ｗ）ステージ、４０６…命令実行２（Ｅ２）ステージ、
８５０…ＭＰＵコア部、８５１…命令キュー、８５２…制御部、
８５３…命令デコード部、８５４…第１デコーダ、８５５…第２デコーダ、
８５６…第３デコーダ、８５７…第４デコーダ、８５８…第１演算部、
８５９…第２演算部、８６０…レジスタファイル、８６１…第３演算部、
８６２…第４演算部、８６３…命令フェッチ部、８６４…オペランドアクセス部、
８７１…フォーマット指定（ＦＭ）ビット、８７２…コンテナ１、
８７３…コンテナ２、８７４…コンテナ３、８７５…コンテナ４、
９０３…レジスタファイル、９２４…ＡＬＵ、９２９…バレルシフタ、
９３４…加算器、９３５…プライオリティエンコーダ、
９３７…サチュレーション回路、９４０…乗算器、
９４１…フォーマット指定（ＦＭ）ビット、９４２…コンテナＬ、
９４３…コンテナＲ。
【図１】
0003658072.tif 000003
【図２】
0003658072.tif 000004
【図３】
0003658072.tif 000005
【図４】
0003658072.tif 000006
【図５】
0003658072.tif 000007
【図６】
0003658072.tif 000008
【図７】
0003658072.tif 000009
【図８】
0003658072.tif 000010
【図９】
0003658072.tif 000011
【図１０】
0003658072.tif 000012
【図１１】
0003658072.tif 000013
【図１２】
0003658072.tif 000014
【図１３】
0003658072.tif 000015
【図１４】
0003658072.tif 000016
【図１５】
0003658072.tif 000017
【図１６】
0003658072.tif 000018
【図１７】
0003658072.tif 000019
【図１８】
0003658072.tif 000020
【図１９】
0003658072.tif 000021
【図２０】
0003658072.tif 000022
【図２１】
0003658072.tif 000023
【図２２】
0003658072.tif 000024
【図２３】
0003658072.tif 000025
【図２４】
0003658072.tif 000026
【図２５】
0003658072.tif 000027
【図２６】
0003658072.tif 000028
【図２７】
0003658072.tif 000029
【図２８】
0003658072.tif 000030
【図２９】
0003658072.tif 000031
【図３０】
0003658072.tif 000032
【図３１】
0003658072.tif 000033
【図３２】
0003658072.tif 000034
【図３３】
0003658072.tif 000035
【図３４】
0003658072.tif 000036
【図３５】
0003658072.tif 000037
【図３６】
0003658072.tif 000038
【図３７】
0003658072.tif 000039
【図３８】
0003658072.tif 000040
【図３９】
0003658072.tif 000041
【図４０】
0003658072.tif 000042