(57)【要約】【課題】モータ制御などＩＩＲフィルタの演算処理装置で、処理性能の向上と、ハードウェアの小規模化を実現する。【解決手段】演算処理装置１０００を、プログラム・バス１０４とデータ・バスを分離、独立したアーキテクチャとし、かつデータ・バスをリード・データ・バスＡ１１５ａとリード・データ・バスＢ１１５ｂとライト・データ・バス１１６に分離、独立したアーキテクチャとすることで、高速なデータ処理を実現するとともに、演算処理装置を、一次のＩＩＲフィルタを構成する演算器１１２とレジスタからなる最小構成とし、かつコンパイラ４０１及び命令デコード部１０２でパイプライン競合を検出して回避するするように命令スケジューリングすることにより、演算処理装置１０００のハードウェアの小規模化と高速動作を実現する。【選択図】        図１
2004287919.tif 000002
【特許請求の範囲】
【請求項１】
演算に使用するデータを格納するデータメモリと、
上記データメモリから読み出すデータを一時保持するレジスタＢと、
演算に使用する定数データを格納する定数メモリと、
上記定数メモリから読み出す定数データを一時保持するレジスタＣと、
演算結果のデータを一時保持するアキュムレータとして機能するレジスタＡと、
上記レジスタＢに一時保持したデータまたは上記レジスタＣに一時保持したデータのいずれかと、上記レジスタＡに一時保持したデータに対して、算術論理演算を実行し、演算結果のデータを上記レジスタＡに書き込む演算器と、
上記レジスタＡに一時保持した演算結果のデータを上記データメモリに書き込むために、上記レジスタＡに書き込んだ演算結果のデータを一時保持するレジスタＡＸを備える演算装置。
【請求項２】
上記演算装置は、さらに、
演算に使用するデータを周辺装置と入出力する外部インターフェイス部を備え、
上記レジスタＣは、上記定数メモリから読み出す定数データまたは上記外部インターフェイス部から読み出すデータのいずれかを一時保持し、
上記レジスタＡＸは、上記レジスタＡに一時保持した演算結果のデータを上記データメモリまたは上記外部インターフェイス部のいずれかに書き込むために、上記レジスタＡに書き込んだ演算結果のデータを一時保持する請求項１に記載された演算装置。
【請求項３】
上記定数メモリは、データをフィルタリングするためのフィルタ係数を記憶し、
上記演算器は、上記定数メモリが記憶したフィルタ係数と上記データメモリが記憶したデータとの演算を行うことによってデータをフィルタリングする請求項２に記載された演算装置。
【請求項４】
上記演算装置は、上記演算器によってフィルタリングされたデータを出力するＤＳＰ（ＤＩＧＩＴＡＬ  ＳＩＧＮＡＬ  ＰＲＯＣＥＳＳＯＲ）である請求項３に記載された演算装置。
【請求項５】
上記レジスタＢは、リード・データ・バスＡを使用して上記データメモリからデータを入力し、
上記レジスタＣは、リード・データ・バスＡとは別のバスであるリード・データ・バスＢを使用して上記定数メモリから定数データを入力し、上記外部インターフェイス部からデータを入力し、
上記レジスタＡＸは、上記２つのリード・データ・バスとは別のバスであるライト・データ・バスを使用して上記データメモリと上記外部インターフェイス部にデータを出力する請求項２に記載された演算装置。
【請求項６】
上記データメモリは、さらに、
データの読み出しとデータの書き込みの同時動作を可能とするデータメモリ入出力ポートを備え、
上記外部インターフェイス部は、さらに、
データの読み出しとデータの書き込みの同時動作を可能とする外部インターフェイス入出力ポートを備える請求項２に記載された演算装置。
【請求項７】
上記定数メモリは、定数データに対するランダムなアクセスを許可し、
上記データメモリは、データに対するランダムなアクセスを許可する請求項１に記載された演算装置。
【請求項８】
１つの命令の処理を複数の処理に分割し、複数の命令を同時並列的に実行するパイプライン制御を行う制御装置であって、
制御装置は、
命令の依存関係によって起こるパイプライン競合を予めコンパイラによって回避するようにスケジュールしたプログラムを記憶するプログラムメモリと、
上記プログラムメモリから命令を読み込む命令フェッチ部と、
上記命令フェッチ部が読み込んだ命令の処理を複数の処理に分割し、パイプライン制御する命令デコード部を備え、
上記命令デコード部は、実行に複数の処理サイクルを必要とする処理がある場合に、後続する命令で、実行に複数の処理サイクルを必要としない、かつ、パイプライン競合が起きない何れかの処理と並列実行し、後続する命令を遅延させることなく実行するようにパイプライン制御する制御装置。
【請求項９】
上記命令デコード部は、上記実行に複数の処理サイクルを必要とする処理がある場合に、後続する命令の何れかの処理と並列実行できないと判断した場合には、何も実行しない処理サイクルであるダミーサイクルを後続する命令の処理に挿入して、後続する命令のパイプライン制御を遅延させ、パイプライン競合を回避する請求項８に記載された制御装置。
【請求項１０】
上記命令デコード部は、上記命令フェッチ部が読み込んだ命令と、先行命令との間のパイプライン制御の遅延を許容する基準値を設定し、上記命令フェッチ部が読み込んだ命令のパイプライン制御の遅延が、ダミーサイクルの挿入により基準値以上になっている場合には、後続する命令の実行開始時刻を遅延させる請求項９に記載された制御装置。
【請求項１１】
１つの命令の処理を複数の処理に分割し、複数の命令を同時並列的に実行するパイプライン制御を行う制御装置と、該制御装置によってパイプライン制御される演算装置とを備えた演算処理装置であって、
制御装置は、
予めコンパイラによって回避するようにスケジュールしたプログラムを記憶するプログラムメモリと、
上記プログラムメモリから命令を読み込む命令フェッチ部と、
上記命令フェッチ部が読み込んだ命令の処理を複数の処理に分割し、パイプライン制御する命令デコード部を備え、
上記命令デコード部は、実行に複数の処理サイクルを必要とする処理がある場合に、後続する命令で、実行に複数の処理サイクルを必要としない、かつパイプライン競合が起きない何れかの処理と並列実行し、後続する命令を遅延させることなく実行するようにパイプライン制御し、
演算装置は、
演算に使用するデータを格納するデータメモリと、
上記データメモリから読み出すデータを一時保持するレジスタＢと、
演算に使用する定数データを格納する定数メモリと、
演算に使用するデータを周辺装置と入出力する外部インターフェイス部と、
上記定数メモリから読み出す定数データまたは上記外部インターフェイス部から読み出すデータのいずれかを一時保持するレジスタＣと、
演算結果のデータを一時保持するアキュムレータとして機能するレジスタＡと、
上記命令デコード部の制御に従って、上記レジスタＢに一時保持したデータまたは上記レジスタＣに一時保持したデータのいずれかと、上記レジスタＡに一時保持したデータに対して、算術論理演算を実行し、演算結果のデータを上記レジスタＡに書き込む演算器と、
上記レジスタＡに一時保持した演算結果のデータを上記データメモリまたは上記外部インターフェイス部のいずれかに書き込むために、上記レジスタＡに書き込んだ演算結果のデータを一時保持するレジスタＡＸとを備えた演算処理装置。
【請求項１２】
上記制御装置は、プログラム・バスを使用して上記プログラムメモリからプログラムに示された複数の命令を入力し、
上記演算装置は、上記プログラムバスとは別のバスであるデータ・バスを使用してデータの入出力を行う請求項１１に記載された演算処理装置。
【請求項１３】
演算に使用するデータをデータメモリに格納し、
上記データメモリから読み出すデータをレジスタＢに一時保持し、
演算に使用する定数データを定数メモリに格納し、
演算に使用するデータを周辺装置に入出力し、
上記定数メモリから読み出す定数データまたは周辺装置に入出力するデータのいずれかをレジスタＣに一時保持し、
レジスタＡは演算結果のデータを一時保持するアキュムレータとして機能し、
上記レジスタＢに一時保持したデータまたは上記レジスタＣに一時保持したデータのいずれかと、上記レジスタＡに一時保持したデータに対して、算術論理演算を実行し、演算結果のデータを上記レジスタＡに書き込み、
上記レジスタＡに一時保持した演算結果のデータを書き込むために、上記レジスタＡに書き込んだ演算結果のデータを一時保持する演算方法。
【請求項１４】
演算に使用するデータをデータメモリに格納する処理と、
上記データメモリから読み出すデータをレジスタＢに一時保持する処理と、
演算に使用する定数データを定数メモリに格納する処理と、
演算に使用するデータを周辺装置に入出力する処理と、
上記定数メモリから読み出す定数データまたは周辺装置に入出力するデータのいずれかをレジスタＣに一時保持する処理と、
レジスタＡは演算結果のデータを一時保持するアキュムレータとして機能する処理と、
上記レジスタＢに一時保持したデータまたは上記レジスタＣに一時保持したデータのいずれかと、上記レジスタＡに一時保持したデータに対して、算術論理演算を実行し、演算結果のデータを上記レジスタＡに書き込む処理と、
上記レジスタＡに一時保持した演算結果のデータを書き込むために、上記レジスタＡに書き込んだ演算結果のデータを一時保持する処理とをコンピュータに実行させる演算プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、データの演算処理を行う演算装置並びに該演算装置を制御する制御装置及びその方法に関する。
【０００２】
【従来の技術】
デジタル・フィルタに代表されるデジタル信号処理にはＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）が利用される。ＤＳＰのアーキテクチャは、デジタル信号処理に多く現れる積和演算を高速処理するための積和演算器や、データ転送を高速処理するためのプログラムメモリとデータメモリ、それぞれのバスが分離、独立したアーキテクチャなど、デジタル信号処理に適した特徴をもつ。
【０００３】
従来例１．
ＤＳＰの従来例としては特開昭６３−３１６１６５号公報に示されるものがある。
音楽用ＣＤのオーディオ信号を処理するＤＳＰで、２チャンネルの信号処理のために２つのＤＳＰを備え、並列処理により処理性能を向上させている。２つのＤＳＰの内部には、演算データを格納するデータＲＡＭまたは定数ＲＡＭと定数ＲＯＭ、積和演算器を構成する乗算器と加算器、積和演算結果を格納するアキュムレータとレジスタとが設置されている。
従来例１ではＤＳＰそのものを並列化しているが、ＤＳＰの処理性能の向上を目的として、積和演算器等の演算器の並列化による並列化処理や、大容量のレジスタやメモリ等の記憶装置の搭載によるデータ処理の高速化が図られている。
【０００４】
従来例２．
また、並列化処理するような演算処理装置の制御に関しては、特開２０００−５６９７１号公報に示されるものがある。
従来例２では、ある命令の実行に必要なデータが他の命令で実行され確定しないと実行できないというデータ依存関係を、コンパイラで検出して静的な命令のスケジューリングを行うだけでなく、静的な命令のスケジューリングが行えない命令では、命令の実行時にデータを予測し先行実行するという、動的な命令のスケジューリングを行い、処理性能の向上が図られている。
従来例２では、ソースコードを解析し実行形式バイナリを作成するシステムの構成図を示し、このシステムで作成された実行形式バイナリを示し、実行形式バイナリは命令コードの他に、データ依存する命令のアドレスとデータ予測するか否のフラグで構成される。
動的にデータ予測するシステムのハードウェアでは、プログラムカウンタと実行形式バイナリのデータ依存するか否かのタグを比較して、予測値を算出する。
上記の通り、動的な命令のスケジューリングを行うには、データを予測して先行実行する機構や、予測に失敗した場合に状態回復する機構がハードウェアに必要となる。
【０００５】
【特許文献１】
特開昭６３−３１６１６５号公報
【特許文献２】
特開２０００−５６９７１号公報
【０００６】
【発明が解決しようとする課題】
従来の演算処理装置では、処理性能の向上を目的として、そのハードウェアは大規模かつ複雑である。
しかしながら、モータ制御などに使用する演算処理装置は、アプリケーションに適したＡ／Ｄ（Ａｎａｌｏｇ／Ｄｉｇｉｔａｌ）コンバータやＰＷＭ（Ｐｕｌｓｅ  Ｗｉｄｔｈ  Ｍｏｄｕｌａｔｉｏｎ）などの周辺装置の搭載や、周辺装置の制御を含めたシステム全体の処理の高速化が要求され、また処理するデータ量は多くなく、小容量かつ高速なランダム・アクセス・メモリと小規模な回路で高速動作する演算処理装置を実現し、システムの小規模化や低消費電力化、低コスト化が要求される。
ところが、従来は演算処理装置では、大規模演算装置と大規模メモリ周辺の配線が収束せず、演算速度の向上とメモリアクセス速度の向上を、両立させて、実現することに問題があった。
【０００７】
本発明は、モータ制御などに使用するＩＩＲフィルタ等の演算処理装置において、システム全体の高速処理を実現し、かつハードウェア規模の小さい演算処理装置を実現することを目的とする。
【０００８】
【課題を解決するための手段】
本発明に係る演算装置は、
演算に使用するデータを格納するデータメモリと、
上記データメモリから読み出すデータを一時保持するレジスタＢと、
演算に使用する定数データを格納する定数メモリと、
上記定数メモリから読み出す定数データを一時保持するレジスタＣと、
演算結果のデータを一時保持するアキュムレータとして機能するレジスタＡと、
上記レジスタＢに一時保持したデータまたは上記レジスタＣに一時保持したデータのいずれかと、上記レジスタＡに一時保持したデータに対して、算術論理演算を実行し、演算結果のデータを上記レジスタＡに書き込む演算器と、
上記レジスタＡに一時保持した演算結果のデータを上記データメモリに書き込むために、上記レジスタＡに書き込んだ演算結果のデータを一時保持するレジスタＡＸを備える。
【０００９】
【発明の実施の形態】
図１から図１２を用いて本発明の実施の形態を説明する。
実施の形態１．
本実施の形態の演算処理装置の構成図を図１に示す。演算処理装置１０００は、制御装置１００と、プログラムを格納するプログラムメモリ１０５と、ＩＩＲフィルタ等の演算装置１１０と、ＩＩＲフィルタ演算のフィルタ係数等、演算に使用する定数データを格納する定数メモリ１１７と、ＩＩＲフィルタ演算等、演算に使用するデータおよび演算結果のデータを格納するデータメモリ１１８と、Ａ／ＤコンバータやＰＷＭなどの周辺装置３００との入出力を行う外部インターフェイス部１１９とから構成される。
【００１０】
演算処理装置１０００内のバスについて説明する。
プログラム・バス１０４は、制御装置１００がプログラムメモリ１０５から命令を読み出すバスである。
リード・データ・バスＡ１１５ａは、データメモリ１１８から演算装置１１０へのデータ転送（データの読み込み）を行うバスである。リード・データ・バスＢ１１５ｂは、定数メモリ１１７と外部インターフェイス部１１９から演算装置１１０へのデータ転送を行うバスである。
ライト・データ・バス１１６は、演算装置１１０からデータメモリ１１８と外部インターフェイス部１１９へのデータ転送（データの書き出し）を行うバスである。上記４つのバスは、各々、分離・独立に動作する。
【００１１】
次に、制御装置１００の内部構成について説明する。
制御装置１００は、プログラムメモリ１０５に記憶されたプログラムから順次命令を読み出す命令フェッチ部１０１と、命令フェッチ部１０１がプログラムメモリ１０５から読み出した命令を解読する命令デコード部１０２と、命令デコード部１０２の解読結果である演算処理装置１０００を制御する制御命令を格納する制御命令バッファ１０３とから構成される。
【００１２】
次に、演算装置１１０の内部構成について説明する。
データメモリ１１８は演算データを格納し、読み出しと書き込みが可能なメモリ、定数メモリ１１７は定数データを格納し、読み出しのみ可能なメモリ、外部インターフェイス部１１９は周辺装置３００とデータの入出力制御するインターフェイス、周辺装置３００は外部インターフェイス部１１９によりデータを入出力する装置、レジスタＢ１０６はデータメモリ１１８から読み出すデータを一時保持するレジスタ、レジスタＣ１０７は定数メモリ１１７または外部インターフェイス部１１９から読み出すデータを一時保持するレジスタである。
レジスタＡ１０８は演算器１１２の演算結果のデータを一時格納するアキュムレータとして機能するレジスタである。
演算器１１２は、レジスタＢ１０６に一時保持したデータまたはレジスタＣ１０７に一時保持したデータのいずれかと、レジスタＡ１０８に一時保持したデータに対して、加減算、乗除算、論理演算などの算術論理演算を実行し、演算結果のデータをレジスタＡ１０８に書き込む。
レジスタＡＸ１０９は、レジスタＡ１０８に一時保持した演算結果のデータをデータメモリ１１８または外部インターフェイス部１１９のいずれかに書き込むために、レジスタＡ１０８に書き込んだ演算結果のデータを一時保持するライトバッファとして機能するレジスタである。
【００１３】
本実施の形態に係る演算処理装置１０００の動作を、１次のＩＩＲフィルタ演算の実施例で説明する。１次のＩＩＲフィルタを図２に示す。
２００は一時のＩＩＲフィルタであり、２０１、２０２は時間ｎ、ｎ−１のデータｘ（ｎ）、ｘ（ｎ−１）を示し、２０３、２０４は演算結果ｙ（ｎ）、ｙ（ｎ−１）  を示し、２０５、２０６は遅延要素を示し、２０７、２０８、２０９は係数乗算ｂ０、ｂ１、ａ１を示し、２１０は乗算結果を加算する加算器を示す。１次のＩＩＲフィルタの演算結果ｙ（ｎ）は、データｘ（ｎ）とｘ（ｎ−１）並びに演算結果ｙ（ｎ−１）に対して、係数乗算ｂ０とｂ１とａ１を行い、加算器で全ての乗算結果を加算するという積和演算の繰返しによって得られる。
ｙ（ｎ）＝ｂ０×ｘ（ｎ）＋ｂ１×ｘ（ｎ−１）＋ａ１×ｙ（ｎ−１）・・・（式１）
本実施の形態では、式１の演算は、下記の式２から式４までの、３回の演算に分割して行う。
ｓｕｍ（０）＝ｂ０×ｘ（ｎ）                  ・・・（式２）
ｓｕｍ（１）＝ｓｕｍ（０）＋ｂ１×ｘ（ｎ−１）・・・（式３）
ｙ（ｎ）＝ｓｕｍ（１）＋ａ１×ｙ（ｎ−１）    ・・・（式４）
【００１４】
本実施の形態では、データｘ（ｎ）とｘ（ｎ−１）、演算結果ｙ（ｎ）とｙ（ｎ−１）（以下演算データという。）はデータメモリ１１８に格納し、係数乗算ｂ０とｂ１とａ０（以下フィルタ係数という。）は定数メモリ１１７に格納し、加算結果ｓｕｍ（０）とｓｕｍ（１）はデータメモリ１１８に格納するものとする。
データメモリ１１８と定数メモリ１１７は、３２ビット幅データを格納するものとし、レジスタＢ１０６とレジスタＣ１０７とレジスタＡ１０８とレジスタＡＸ１０９は、３２ビット幅のレジスタとする。
演算器１１２は、レジスタＢ１０６またはレジスタＣ１０７に保持する３２ビット幅データの下位１６ビットと、レジスタＡ１０８に保持する３２ビット幅データの下位１６ビットを入力として乗算を行い、３２ビット幅の乗算結果をレジスタＡ１０８に格納するものとし、レジスタＢ１０６またはレジスタＣ１０７の３２ビット幅データと、レジスタＡ１０８の３２ビット幅データを入力として加算を行い、３２ビット幅の加算結果をレジスタＡ１０８に格納するものとする。演算データとフィルタ係数は３２ビット幅データの下位１６ビットを有効データとした１６ビット幅データとする。
【００１５】
式２から式４の各演算は下記の手順で行う。
（１）演算器１１２がロード命令を実行することにより、定数メモリ１１７からフィルタ係数を読み出し、レジスタＣ１０７を経由してレジスタＡ１０８に格納する。
（２）データメモリ１１８から演算データをレジスタＢ１０６を経由して読み出すか、または、外部インターフェイス部１１９から演算データをレジスタＣ１０７を経由して読み出し、レジスタＡ１０８のフィルタ係数又はデータとレジスタＢ１０６の演算データを演算器１１２で乗算し、乗算結果をレジスタＡ１０８に格納する。
（３）データメモリ１１８から前回の加算結果をレジスタＢ１０６に読み出し、レジスタＢ１０６の演算データとしてレジスタＢ１０６から読み出し、レジスタＡ１０８の乗算結果とレジスタＢ１０６の演算データを演算器１１２で加算し、加算結果をレジスタＡ１０８に書き込む。
（４）レジスタＡ１０８に一時保持した加算結果のデータをデータメモリ１１８または外部インターフェイス部１１９のいずれかに書き込むために、レジスタＡ１０８に書き込んだ演算結果のデータをレジスタＡＸ１０９に一時保持する。レジスタＡＸ１０９は、このように、ライトバッファとして機能する。レジスタＡＸ１０９を経由して演算結果のデータをデータメモリ１１８及び外部インターフェイス部１１９に書き込む。
上記手順の繰り返しにより、式２から式４の各演算を実行し、３２ビット幅の演算結果を得た後、１６ビットに丸め演算し、式１に示す１次のＩＩＲフィルタの演算結果を得る。
【００１６】
本実施の形態によれば、演算器とメモリをレジスタを経由して接続し、かつ、複数のレジスタを使用し、途中マルチプレクサを介在させず、接続毎に一つのレジスタを使用して接続することで、レジスタとメモリ間の遅延を抑制するとともに、単純な配線を実現できる。すなわち、ＲＡＭ周りの配線を単純化してメモリアクセス速度を上げることができるため、配線性も高く、実現がより容易なコンパクトな演算装置１１０を構築できる。
【００１７】
また、従来の積和演算器では、乗算器と加算器を直接配線し、１回の処理で積和演算を実行するので、積和演算処理の遅延が大きくなり、積和演算器の高速動作が困難となっていたのに対し、本実施の形態の発明によれば、積和演算器の役目を果たす演算器１１２は、乗算処理結果のデータをレジスタで受け、その後加算処理を行うことで、積和演算処理を乗算処理と加算処理に分割して処理するので、演算処理の遅延が小さくなり、演算器１１２の高速動作を実現することができる。
【００１８】
さらに、たとえば、従来例１で示した演算装置は、ｄｕａｌ  ｐｒｏｃｅｓｓｏｒであり、定数メモリとデータメモリに同時にアクセスして同時に演算器にデータを入力することを可能としている点に特徴があるが、これを実現するにはプロセッサへの命令長も長く取らなければならないし、スケジューラや実現にこのプロセッサに入れるプログラムを書くこと自体が難しくなる。一方、本実施の形態の発明によれば、定数メモリとデータメモリに同時にアクセスすることはできないが、その分命令長も短くスケジューラも簡単でプログラミングも容易にすることが可能である。
【００１９】
本実施の形態に係る発明では、上記演算の結果である演算結果のデータを出力する演算装置１１０をモータ制御用に使用することができる。また、本実施の形態に係る発明を汎用のＤＳＰ（ＤＩＧＩＴＡＬ  ＳＩＧＮＡＬ  ＰＲＯＣＥＳＳＯＲ）として使用することも可能である。
【００２０】
実施の形態２．
モータ制御などのＩＩＲフィルタの処理では、図１に示す構成の本実施の形態に係る演算処理装置１０００の外部インターフェイス部１１９を経由してＡ／ＤコンバータやＰＷＭなどの周辺装置３００との入出力や、ＩＩＲフィルタ演算におけるデータメモリ１１８との入出力など、データ転送処理が多く現れ、かつランダム・アクセスが要求され、データ転送性能が演算処理装置１０００の処理性能を律速する。
図１に示す演算処理装置１０００では、プログラム・バス１０４とデータ・バスを分離、独立したアーキテクチャとし、かつデータ・バスをリード・データ・バスＡ１１５ａとリード・データ・バスＢ１１５ｂとライト・データ・バス１１６に分離、独立したアーキテクチャとすることで、データ転送処理でのバス競合を回避する。また、データメモリ１１８には、データの読み出しと書き込みが同時に実行できるデータメモリ入出力ポート１３０を備えるマルチポートメモリを使用し、外部インターフェイス部１１９にも、データの読み出しと書き込みが同時に実行できる外部インターフェイス入出力ポート１３１を備え、さらに、定数メモリ１１７及びデータメモリ１１８に記憶された定数データ及びデータへのランダム・アクセスを可能とすることで、高速なデータ転送処理を実現する。
【００２１】
このように、本実施の形態では、メモリや周辺装置３００からのデータ転送には遅延があるが、モータ制御などの制御演算では大容量のメモリは要求されないので、小容量／低レイテンシのメモリを使用して物理的に演算装置１１０と近接させることが可能であるため、レイテンシに対応し、高速処理を可能とすることができる。
【００２２】
従って、本実施の形態の演算装置１１０は、回路的に高速動作が可能であり、ＲＡＭ周りの配線を単純化して、メモリアクセス速度の向上と、ランダムにアクセスするデータの読み出し書き込み速度の向上とをチップにとって最小面積で実現することが可能である。よって、チップ単価を安くできるとともに、収束しにくいメモリ周りの配線を単純化して開発期間を短縮できる。
【００２３】
実施の形態３．
次に、本実施の形態の演算処理装置１０００のパイプライン処理について説明する。
パイプライン処理は高速化のための基本技術であり、図１に示す構成の本実施の形態の演算処理装置１０００では、１つの命令の処理過程を図３に示す処理単位、すなわち、処理サイクル（Ｓ３１〜Ｓ３６）に分割し、複数の命令を重複させて同時実行する。なお、本実施の形態の演算処理装置１０００の記憶装置（データメモリ１１８、外部インターフェイス部１１９）は、アクセスに２サイクルを必要とする同期メモリとし、同期メモリへのアクセスを伴う処理過程は２サイクルで処理する。すなわち、図３に示すように、メモリ・リードをＭＲ１、ＭＲ２の２サイクル、メモリ・ライトをＭＷ１、ＭＷ２の２サイクルで処理している（Ｓ３４、Ｓ３６）。
【００２４】
パイプライン処理の命令実行の処理過程は、メモリ・リードと演算実行とメモリ・ライトの処理過程に分割されるが（Ｓ３４〜Ｓ３６）、命令によって実行されない処理過程が存在する。
本実施の形態に係る演算処理装置１０００で実行する命令のパイプライン処理を図４に示す。１サイクルで演算を実行する命令（１サイクル演算命令：Ｓ４１）ではメモリ・ライトの処理過程（ＭＷ１，ＭＷ２）が実行されず、ライト命令（Ｓ４２）ではメモリ・リード（ＭＲ１，ＭＲ２）と演算実行の処理過程（ＥＸ）が実行されず、２サイクルで演算を実行する命令（２サイクル演算命令：Ｓ４３、２サイクル演算命令の詳細については後で説明する）では演算実行の処理過程が２サイクルに増加し（ＥＸ１，ＥＸ２）、メモリ・ライトの処理過程（ＭＷ１，ＭＷ２）が実行されないものとする。
【００２５】
パイプライン処理では、複数の命令を重複させて同時実行するので、命令の依存関係によっては、パイプライン処理の各処理過程がアクセスするメモリ等の記憶装置や演算装置のレジスタなどの共通リソースで競合が発生する。
本実施の形態に係る演算処理装置１０００では、メモリ等の記憶装置（データメモリ１１８または外部インターフェイス部１１９）にあるデータに対してのアクセスで、パイプライン処理のメモリ・リードとメモリ・ライトの処理過程で、先行する命令がメモリ等の記憶装置（データメモリ１１８または外部インターフェイス部１１９）にデータを書き込む前に、後続する命令が該データを読み出すような競合（パイプライン競合）が発生するので、メモリ等の記憶装置（データメモリ１１８または外部インターフェイス部１１９）にあるデータに対しての依存関係を検出して、競合がある場合に回避するように命令スケジューリングする必要がある。
【００２６】
ここで、コンパイラがプログラムを処理する手順を図５に示す。
コンパイラ４０１ａはソースプログラム４００を解析し、中間コード４０２を生成し、コンパイラ４０１ｂは中間コード４０２を競合解析し、最適化して、実行コード４０４を生成する。
コンパイラ４０１ａが生成する中間コード４０２は、パイプライン制御を考慮しないコードであり、コンパイラ４０１ｂが生成する実行コード４０４は、命令の依存関係を検出し、パイプライン競合を回避するように検出した命令に対し依存関係を解消する命令スケジューリングを行った後のコードである。生成された実行コード４０４は、図１に示すように、パイプライン競合を回避するようにスケジューリングしたプログラムとしてプログラムメモリ１０５に記憶される。
【００２７】
コンパイラ４０１ｂの命令スケジューリングについて説明する。
上記の通り、コンパイラ４０１ｂは、メモリ等の記憶装置（データメモリ１１８または外部インターフェイス部１１９）にあるデータに対して依存関係のある命令と、分岐等の制御で依存関係にある命令を検出し、パイプライン処理で競合がある場合に回避するように命令スケジューリングする。
本実施の形態に係る演算処理装置１０００では、一次のＩＩＲフィルタを構成する演算器１１２とレジスタからなる最小構成であり、並列化した演算器や多数のレジスタを使用するような高度な命令スケジューリングは行わない。
したがって、コンパイラ４０１ｂで行うスケジューリング方法は、命令の依存関係の検出結果から後続する命令で依存関係の無い命令と再配置する、または何の処理も実行しないＮＯＰ命令を挿入して命令の実行を遅延させるなど、基本的な方法となる。
【００２８】
次に、コンパイラ４０１ｂが行う競合解析について説明する。
メモリ等の記憶装置にあるデータに対してのアクセスが競合する例を図６の（Ａ）に示す。
命令１は時刻Ｃ７でメモリ・ライト（ＭＷ１）の処理過程を実行し（Ｓ５１）、命令２は時刻Ｃ５でメモリ・リード（ＭＲ１）の処理過程を実行する（Ｓ５２）。
このように、命令１と命令２がメモリ等の記憶装置にある同じ演算データに対してアクセスする場合、図６の（Ａ）のＦ１に示すように、命令１がメモリ等の記憶装置にデータを書き込む前に、命令２が該データを読み出すという競合が発生する。
この競合を回避するために、コンパイラ４０１ｂは、図６の（Ｂ）に示すように、何の処理も実行しないダミー命令であるＮＯＰ命令など、依存関係の無い命令を挿入し（Ｓ５４〜Ｓ５６）、図６の（Ｂ）のＦ２に示すように、命令１がメモリ等の記憶装置にデータを書き込んだ後に（Ｓ５３、Ｃ７：ＭＷ１）、命令２が該データを読み出す（Ｓ５７、Ｃ８：ＭＲ１）ように命令スケジューリングする。
【００２９】
実施の形態４．
本実施の形態では、上記先行する命令が分岐命令である場合について、コンパイラ４０１ｂが行うスケジューリング方法を説明する。
分岐命令等の制御では、分岐が成立するか否かの判定がなされるまで、分岐先の命令が決定されないという依存関係があり、条件分岐命令などでは、分岐が成立するか否かの判定がパイプライン処理の演算実行の処理過程までなされない。そこで、本実施の形態に係る演算処理装置１０００では、分岐が成立するか否かに関係なく、後続命令を先行実行し、分岐が成立するか否かの判定が、パイプライン処理の演算実行の処理過程でなされた時点で、後続命令の先行実行を有効にするか否かを判定する制御を行う。
本実施の形態の演算処理装置１０００では、この後続命令の先行実行でパイプライン処理のメモリ・リードの処理過程が実行され、メモリ等の場合はリード動作では記憶内容に影響を与えないが、Ａ／ＤコンバータやＰＷＭなどの周辺装置３００では、リード動作で内部状態に影響を与えるため、該周辺装置３００へのリード命令を分岐命令に後続させないように、コンパイラ４０１ｂが命令スケジューリングする制御が必要となる。
【００３０】
条件分岐命令の実行で、上記の競合が発生する例を図７の（Ａ）に示す。
命令１の条件分岐命令（Ｓ６１）は、時刻Ｃ６の演算実行の処理過程（Ｃ６：ＥＸ）で分岐が成立するか否か判定するので、命令１の時刻Ｃ６の処理過程（ＥＸ）に対し、命令２（Ｓ６２）の時刻Ｃ５、Ｃ６のメモリ・リードの処理過程（ＭＲ１，ＭＲ２）が先行実行される。また、命令１の時刻Ｃ６の処理過程（ＥＸ）に対し、命令３（Ｓ６３）の時刻Ｃ６のメモリ・リードの処理過程（ＭＲ１）が先行実行され、競合する（Ｆ４）。
そこで、命令１と命令２と命令３が周辺装置３００へのリード動作を行う場合、コンパイラ４０１ｂは、図７の（Ｂ）に示すように、何の処理も実行しないＮＯＰ命令（Ｓ６９，Ｓ７０）などを挿入し、周辺装置３００へのリード命令を先行実行させないように（Ｆ５，Ｆ６）、命令スケジューリングする。
以上、コンパイラ４０１で実行される静的スケジューリングについて説明した。
【００３１】
実施の形態５．
次に、上述したコンパイラ４０１による動作で静的スケジューリングされた命令に対し、さらに、命令デコード部１０２が行う動的スケジューリングについて説明する。
本実施の形態では、演算に２サイクル必要とする演算実行命令を例に、演算に複数サイクルを必要とする演算実行命令に対し、命令デコード部１０２によって行われる命令スケジューリングについて説明する。
図４に示すように演算に２サイクル必要とする命令（Ｓ４３）では、パイプライン処理の演算実行の処理過程を更に２つのパイプライン処理過程に分割し、２サイクル（ＥＸ１，ＥＸ２）でパイプライン処理する。
【００３２】
演算に２サイクル必要とする命令では、本実施の形態の演算処理装置１０００では、演算器１１２は１つであり、また、演算の対象の１つが内部レジスタに保持されており、演算結果が内部レジスタに書き込まれるまで次の演算命令が実行できないので、後続する命令で命令実行の処理過程が競合するため、後続する命令の実行を１サイクル遅らせるようにする必要がある。
２サイクル演算命令のパイプライン処理を図８に示す。命令１の２サイクル演算命令（Ｓ８１）に、命令２の１サイクル演算命令（Ｓ８２）が後続する場合、図８の（Ａ）に示すように、時刻Ｃ７で演算実行の処理過程が競合する（Ｆ７）ので、命令デコード部１０２は、図８の（Ｂ）に示すように、命令２の１サイクル演算命令（Ｓ８４）で、命令実行の処理過程を時刻Ｃ６から開始するように、ダミーのサイクルを時刻Ｃ５に挿入して１サイクル遅延させ（Ｆ８）、演算実行の処理過程が競合しないようにする。
更に、命令３の２サイクル演算（Ｓ８５）が連続する場合、命令デコード部１０２は、命令４の１サイクル演算命令（Ｓ８６）で、命令実行の処理過程を時刻Ｃ９から開始するように、さらに、ダミーのサイクルを挿入し、１サイクル遅延させる（Ｆ９）。
【００３３】
本実施の形態に係る演算処理装置１０００で実行する命令の場合、図４に示すように、１サイクル演算命令（Ｓ４１）または２サイクル演算命令（Ｓ４３）はメモリ・ライトの処理過程を実行しないので、後続する命令がメモリ・リードと演算実行の処理過程を実行しないライト命令（Ｓ４２）の場合は、命令実行の処理過程は競合せず同時に実行が可能であり、ライト命令の命令実行の処理過程を１サイクル先行して並列に実行することが可能という特徴がある。
したがって、命令実行の処理過程に遅延があり、図８の（Ｂ）に示す、命令４の１サイクル演算命令（Ｓ８６）に、命令５のライト命令（Ｓ８７）が後続する場合、命令デコード部１０２は、命令４と命令５の命令実行の処理過程を、時刻Ｃ９から並列実行することによって、命令実行の処理過程の遅延を１サイクル回復することができる（Ｆ１０）。
また、命令６の２サイクル演算命令（Ｓ８８）に、命令７のライト命令（Ｓ８９）が後続する場合、命令デコード部１０２は、命令６は時刻Ｃ１０から命令実行の処理過程を開始し、命令７は時刻Ｃ１１から命令実行の処理過程を開始するように並列実行し、命令実行の処理過程の遅延はそのままとする（Ｆ１１，Ｆ１２）。
【００３４】
条件分岐命令の実行では、分岐が成立する場合に、先行実行した命令が無効となる。このような場合に、分岐先の命令の実行から、無効としたサイクル数、命令実行の処理過程の遅延が回復する動作について、次に説明する。
パイプライン処理の遅延が２サイクルの状態で、条件分岐命令を実行する場合のパイプライン処理を図９に示す。
時刻Ｃ８で命令１（Ｓ９１）の演算実行の処理過程で条件分岐が成立し、先行実行した命令２から命令８（Ｓ９２〜Ｓ９８）が無効となる場合、時刻Ｃ８以降は、命令２から命令８の残りのパイプライン処理が無効となるので、分岐先の命令９から命令実行の処理過程を遅延させる必要はないため、命令デコード部１０２は、命令実行の処理過程の遅延を回復するようにスケジュールする（Ｓ９９）。
【００３５】
実施の形態６．
２サイクル演算命令が連続する場合は、命令実行の処理過程の遅延が大きくなり、パイプライン処理のハードウェアが大規模かつ複雑になるので、本実施の形態では、命令実行の処理過程の遅延に最大値（基準値）を設定し、命令実行の処理過程の遅延が最大値となる場合は、後続する命令の命令フェッチの処理過程を停止する。次に、この場合の命令デコード部１０２の動作について説明する。
最大値を２サイクルとする場合のパイプライン処理を図１０に示す。
時刻Ｃ４では、命令２の２サイクル演算命令（Ｓ１０２）の命令デコード（ＩＤ）で、命令実行の処理過程の遅延が最大値の２サイクルとなるので（Ｆ１４）、命令デコード部１０２は、時刻Ｃ５で、命令５以降の命令フェッチの処理過程を１サイクル停止させる（Ｆ１５）。
時刻Ｃ５では、命令３の２サイクル演算命令（Ｓ１０３）の命令デコード（ＩＤ）で、命令実行の処理過程の遅延が３サイクルとなるので（Ｆ１６）、命令デコード部１０２は、時刻Ｃ６で、命令５以降の命令フェッチの処理過程を更に１サイクル停止させる（Ｆ１７）。
時刻Ｃ６では、命令４の２サイクル演算命令（Ｓ１０４）の命令デコード（ＩＤ）で、命令実行の処理過程の遅延が４サイクルとなるので（Ｆ１８）、命令デコード部１０２は、時刻Ｃ７で、命令５以降の命令フェッチの処理過程を更に１サイクル停止させる（Ｆ１９）。
【００３６】
このように、命令デコード部１０２は、上記スケジューリングによって挿入することが可能なダミーのサイクル数の規定値設定し（上記例では、最大値として２サイクルを設定）、実行中の複数の命令に挿入されたダミーのサイクル数と前記規定値とを比較し、比較した結果、所定の場合（上記例では、命令に挿入されたダミーのサイクル数が２サイクル以上の場合）には後続する所定の命令の実行開始時刻（命令フェッチの処理過程開始時刻）を遅延させる。
このような命令デコード部１０２の動作により、命令５（Ｓ１０５）では、命令実行の処理過程は４サイクル遅延しているが、命令フェッチの処理過程を３サイクル停止させ、命令実行の処理過程の遅延を１サイクルに回復することができる。
【００３７】
実施の形態７．
本実施の形態の演算処理装置１０００では、２サイクル演算の命令スケジューリングは、コンパイラ４０１ｂでも可能である。
そこで、本実施の形態の演算処理装置１０００では、演算に２サイクルを必要とする命令か否かに関係なく、全て１サイクルで演算を実行するものとして命令の実行をパイプライン処理し、つまり、実施の形態５と実施の形態６に示す制御を行わずに、コンパイラ４０１ｂで、２サイクル演算命令の後に命令実行の処理過程以降が競合しない、並列実行が可能な命令を配置するように、また並列実行が可能な命令の配置が不可能な場合は、何の処理も実行しないＮＯＰ命令で１命令サイクル処理を空けるように命令スケジューリングする。
【００３８】
コンパイラ４０１ｂで命令スケジューリングした２サイクル演算命令のパイプライン処理を図１１に示す。命令１の２サイクル演算命令（Ｓ１１１）の後に命令２の１サイクル演算命令（Ｓ１１３）が続き、演算実行の処理過程以降が競合する場合、コンパイラ４０１ｂは、２サイクル演算命令（Ｓ１１１）の後にＮＯＰ命令を挿入し（Ｓ１１２）、パイプライン処理を遅延させる。
命令３の２サイクル演算命令（Ｓ１１４）の後に命令４のライト命令（Ｓ１１５）が続き、演算実行の処理過程以降が競合しない場合は、並列実行が可能なのでＮＯＰ命令の挿入は必要無い。
【００３９】
本実施の形態に係る演算処理装置１０００の命令スケジューリングを図１２のフローチャートにまとめる。本実施の形態に係る演算処理装置１０００では、分岐命令と２サイクル演算命令の命令スケジューリングの制御を行うものとする。Ｓ１２０１、Ｓ１２０２は無条件分岐命令の制御、Ｓ１２０３〜Ｓ１２０６は条件分岐命令の制御、Ｓ１２０７〜Ｓ１２１０は２サイクル演算命令の制御、Ｓ１２１１〜Ｓ１２１５はライト命令の制御を示す。
【００４０】
このように、複数の命令の各命令を複数のサイクルに分割してパイプライン制御する場合に、パイプライン競合を回避するようにスケジューリングされた命令を順次読み込み、デコードし、実行する制御装置１００であって、制御装置１００は、命令の実行順序がパイプライン競合を回避するようにスケジューリングされたプログラムを記憶するプログラムメモリ１０５と、プログラムメモリ１０５から命令を読み込む命令フェッチ部１０１と、命令フェッチ部１０１が読み込んだ命令を解読し、解読した命令のうち、演算実行に複数サイクルが必要な演算実行命令に対して、演算実行命令と後続命令とを並列処理させるためのスケジューリングする命令デコード部１０２とを備え、命令デコード部１０２は、上記演算実行命令と後続命令との並列処理ができないと判断した場合には、何も実行しない処理サイクルであるダミーサイクルを生成し、上記演算実行命令と後続命令との間にダミーサイクルを挿入してスケジューリングすることによって、、先行命令と後続命令の依存関係のない、独立した命令にスケジューリングすることができる。
【００４１】
なお、上記すべての実施の形態において記載した「格納する」、「記憶する」、「保持する」という用語は、記録媒体に保存することを意味する。
また、すべての実施の形態では、各構成要素の各動作はお互いに関連しており、各構成要素の動作は、上記に示された動作の関連を考慮しながら、一連の動作として置き換えることができる。そして、このように置き換えることにより、方法の発明の実施形態とすることができる。
また、上記各構成要素の動作を、各構成要素の処理と置き換えることにより、プログラムの実施の形態とすることができる。
また、プログラムを、プログラムを記録したコンピュータ読み取り可能な記録媒体に記憶させることで、プログラムに記録したコンピュータ読み取り可能な記録媒体の実施の形態とすることができる。
【００４２】
プログラムの実施の形態及びプログラムに記録したコンピュータ読み取り可能な記録媒体の実施の形態は、すべてコンピュータで動作可能なプログラムにより構成することができる。
プログラムの実施の形態およびプログラムを記録したコンピュータ読み取り可能な記録媒体の実施の形態における各処理はプログラムで実行されるが、このプログラムは、記録装置に記録されていて、記録装置から中央処理装置（ＣＰＵ）に読み込まれ、中央処理装置によって、各プログラムが実行されることになる。
また、各実施の形態のソフトウェアやプログラムは、ＲＯＭ（ＲＥＡＤ  ＯＮＬＹ  ＭＥＭＯＲＹ）に記憶されたファームウェアで実現されていても構わない。あるいは、ソフトウェアとファームウェアとハードウェアとの組み合わせで前述したプログラムの各機能を実現しても構わない。
【００４３】
【発明の効果】
演算処理装置を、プログラム・バスとデータ・バスを分離、独立したアーキテクチャとし、かつデータ・バスをリード・データ・バスとライト・データ・バスに分離、独立したアーキテクチャとし、プログラムおよび演算データの読み出しと書き込みを同時に実行できる手段を備えることで、高速なデータ処理を実現するとともに、演算処理装置を、一次のＩＩＲフィルタを構成する演算器とレジスタからなる最小構成とし、かつコンパイラでパイプライン競合を検出して回避するするように命令スケジューリングすることにより、演算処理装置のハードウェアの小規模化と高速動作を実現することができる。
【図面の簡単な説明】
【図１】本発明の演算処理装置の実施例を示した図である。
【図２】本発明の演算処理装置で処理するＩＩＲフィルタを示した図である。
【図３】本発明の演算処理装置の実施例におけるパイプラインを示した図である。
【図４】本発明の演算処理装置の実施例における命令実行のパイプライン処理を示した図である。
【図５】本発明の演算処理装置のプログラム処理手順を示した図である。
【図６】本発明の演算処理装置の実施例における命令実行のパイプライン処理で、記憶装置にある演算データに対してのアクセスのパイプライン処理を示した図である。
【図７】本発明の演算処理装置の実施例における命令実行のパイプライン処理で、条件分岐命令のパイプライン処理を示した図である。
【図８】本発明の演算処理装置の実施例における命令実行のパイプライン処理で、２サイクル演算命令の処理を示した図である。
【図９】本発明の演算処理装置の実施例における命令実行のパイプライン処理で、条件分岐命令の実行時にパイプライン処理の遅延が回復する処理を示した図である。
【図１０】本発明の演算処理装置の実施例における命令実行のパイプライン処理で、パイプライン処理の遅延の最大値を２サイクルとした場合の２サイクル演算命令の処理を示した図である。
【図１１】本発明の演算処理装置の実施例における命令実行のパイプライン処理で、コンパイラで命令スケジューリングした２サイクル演算命令の処理を示した図である。
【図１２】本発明の演算処理装置の実施例における命令スケジューリングを示した図である。
【符号の説明】
１００  制御装置、１０１  命令フェッチ部、１０２  命令デコード部、１０３  制御命令バッファ、１０４  プログラム・バス、１０５  プログラムメモリ、１０６  レジスタＢ、１０７  レジスタＣ、１０８  レジスタＡ、１０９  レジスタＡＸ、１１０  演算装置、１１５ａ  リード・データ・バスＡ、１１５ｂリード・データ・バスＢ、１１６  ライト・データ・バス、１１７  定数メモリ、１１８  データメモリ、１１９  外部インターフェイス部、１３０  データメモリ入出力ポート、１３１  外部インターフェイス入出力ポート、３００  周辺装置、４００  ソースプログラム、４０２  中間コード、４０１ａ，４０１ｂ，４０１  コンパイラ、４０４  実行コード、１０００  演算処理装置。
【図１】
2004287919.tif 000003
【図２】
2004287919.tif 000004
【図３】
2004287919.tif 000005
【図４】
2004287919.tif 000006
【図５】
2004287919.tif 000007
【図６】
2004287919.tif 000008
【図７】
2004287919.tif 000009
【図８】
2004287919.tif 000010
【図９】
2004287919.tif 000011
【図１０】
2004287919.tif 000012
【図１１】
2004287919.tif 000013
【図１２】
2004287919.tif 000014