(57)【特許請求の範囲】
【請求項１】
シーケンス制御用のプログラム内の命令が、演算用命令メモリに格納されている一連の演算命令を外部の演算器に実行させる演算開始命令であれば、一連の演算命令の中の先頭の演算命令が格納されている上記演算用命令メモリ内のアドレスを示すスタートアドレスを設定する処理と、最後の演算命令が格納されている上記演算用命令メモリ内のアドレスを示すエンドアドレスを設定する処理と、一連の演算命令の繰り返しの有無を設定する処理とのそれぞれを、演算開始命令を実行する際に行うか、または、演算開始命令を実行することに先立って行い、一連の演算命令の繰り返しが有る場合には、一連の演算命令の繰り返し回数を設定する処理を、演算開始命令を実行することに先立って行う初期設定手段と、上記初期設定手段により設定されたスタートアドレスを読み出しアドレスに設定して、上記読み出しアドレスを出力し、その後、上記読み出しアドレスをインクリメントして、インクリメント後の読み出しアドレスを出力する処理を繰り返し実施するアドレス出力手段と、上記演算用命令メモリに格納されている演算命令の中から、上記アドレス出力手段から出力された読み出しアドレスに対応する演算命令を読み出し、上記演算命令を上記演算器に発行する命令発行手段と、上記初期設定手段により設定された繰り返しの有無が“有”である場合、上記アドレス出力手段から出力された読み出しアドレスが上記初期設定手段により設定されたエンドアドレスと一致すると、１ループ終了通知を出力するとともに、現時点までに演算終了指示が出力されていなければ、上記アドレス出力手段により設定された読み出しアドレスを上記スタートアドレスに戻して、アドレス出力処理の継続を上記アドレス出力手段に指示し、上記初期設定手段により設定された繰り返しの有無が“無”である場合、上記アドレス出力手段から出力された読み出しアドレスが上記初期設定手段により設定されたエンドアドレスと一致すると、アドレス出力処理の停止を上記アドレス出力手段に指示する繰り返し処理制御手段と、上記繰り返し処理制御手段による１ループ終了通知の出力回数と上記初期設定手段により設定された繰り返し回数を比較して繰り返し演算を終了するか否かを判定し、繰り返し演算を終了する際に上記演算終了指示を上記繰り返し処理制御手段に出力する演算終了判定手段とを備えたデータ演算装置の制御回路。
【請求項２】
演算終了判定手段は、予め、初期設定手段により設定された繰り返し回数をループカウンタに設定しておき、繰り返し処理制御手段から１ループ終了通知が出力される毎に、上記ループカウンタのカウント値をデクリメントし、デクリメント後のカウント値が“１”になると、演算終了指示を上記繰り返し処理制御手段に出力することを特徴とする請求項１記載のデータ演算装置の制御回路。
【請求項３】
初期設定手段は、シーケンス制御用のプログラム内の命令が、スタートアドレス、エンドアドレス及び一連の演算命令の繰り返しの有無を含む演算開始命令である場合、上記演算開始命令に含まれているスタートアドレス、エンドアドレス及び一連の演算命令の繰り返しの有無を設定することを特徴とする請求項１または請求項２記載のデータ演算装置の制御回路。
【請求項４】
初期設定手段は、スタートアドレス、エンドアドレス及び一連の演算命令の繰り返しの有無が演算開始命令に含まれていない場合、スタートアドレス、エンドアドレス又は一連の演算命令の繰り返しの有無を設定する設定命令にしたがってスタートアドレス、エンドアドレス又は一連の演算命令の繰り返しの有無を設定することを特徴とする請求項１または請求項２記載のデータ演算装置の制御回路。
【請求項５】
データ演算装置の制御回路には、スタートアドレス、エンドアドレス及び一連の演算命令の繰り返しの有無を格納するメモリが複数個実装されており、
初期設定手段は、複数の演算開始命令に係るスタートアドレス、エンドアドレス及び一連の演算命令の繰り返しの有無をそれぞれ上記メモリに設定し、
アドレス出力手段は、選択信号が指し示すメモリからスタートアドレスを読み出し、
繰り返し処理制御手段は、上記選択信号が指し示すメモリからエンドアドレス及び一連の演算命令の繰り返しの有無を読み出すことを特徴とする請求項１から請求項４のうちのいずれか１項記載のデータ演算装置の制御回路。
【請求項６】
発行された演算命令を実行して、上記演算命令の演算結果を返す演算器と、シーケンス制御用のプログラム内の命令が、演算用命令メモリに格納されている一連の演算命令を上記演算器に実行させる演算開始命令であれば、一連の演算命令の中の先頭の演算命令が格納されている上記演算用命令メモリ内のアドレスを示すスタートアドレスを設定する処理と、最後の演算命令が格納されている上記演算用命令メモリ内のアドレスを示すエンドアドレスを設定する処理と、一連の演算命令の繰り返しの有無を設定する処理とのそれぞれを、演算開始命令を実行する際に行うか、または、演算開始命令を実行することに先立って行い、一連の演算命令の繰り返しが有る場合には、一連の演算命令の繰り返し回数を設定する処理を、演算開始命令を実行することに先立って行う初期設定手段と、上記初期設定手段により設定されたスタートアドレスを読み出しアドレスに設定して、上記読み出しアドレスを出力し、その後、上記読み出しアドレスをインクリメントして、インクリメント後の読み出しアドレスを出力する処理を繰り返し実施するアドレス出力手段と、上記演算用命令メモリに格納されている演算命令の中から、上記アドレス出力手段から出力された読み出しアドレスに対応する演算命令を読み出し、上記演算命令を上記演算器に発行する命令発行手段と、上記初期設定手段により設定された繰り返しの有無が“有”である場合、上記アドレス出力手段から出力された読み出しアドレスが上記初期設定手段により設定されたエンドアドレスと一致すると、１ループ終了通知を出力するとともに、現時点までに演算終了指示が出力されていなければ、上記アドレス出力手段により設定された読み出しアドレスを上記スタートアドレスに戻して、アドレス出力処理の継続を上記アドレス出力手段に指示し、上記初期設定手段により設定された繰り返しの有無が“無”である場合、上記アドレス出力手段から出力された読み出しアドレスが上記初期設定手段により設定されたエンドアドレスと一致すると、アドレス出力処理の停止を上記アドレス出力手段に指示する繰り返し処理制御手段と、上記繰り返し処理制御手段による１ループ終了通知の出力回数と上記初期設定手段により設定された繰り返し回数を比較して繰り返し演算を終了するか否かを判定し、繰り返し演算を終了する際に上記演算終了指示を上記繰り返し処理制御手段に出力する演算終了判定手段とを備えたデータ演算装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、一連の演算命令を演算器に繰り返し実行させる制御回路と、その制御回路と演算器を実装しているデータ演算装置とに関するものである。
【背景技術】
【０００２】
一連の演算命令を繰り返し実行（ループ実行）するプログラムの場合、一般的に、ループの初期化部分と、演算処理の本体部分と、ループの後処理部分とから構成される。
図７は一般的なループ制御を行うプログラム例を示す説明図である。
図７のプログラムは、一連の演算命令である「命令Ｃ０〜Ｃ９９」を１００回ループ実行するものである。
【０００３】
即ち、図７のプログラムでは、ループの初期化部分において、一連の演算命令の繰り返し回数（ループ回数）として、“１００”をループカウンタに設定する初期化処理を実行している。
次に、演算処理の本体部分において、一連の演算命令である「命令Ｃ０〜Ｃ９９」を実行している。
ループの後処理部分では、一連の演算命令である「命令Ｃ０〜Ｃ９９」が実行されると、ループカウンタのカウント値をデクリメントし、デクリメント後のカウント値が“０”であるか否かを判定する。
デクリメント後のカウント値が“０”でなければ、再度、演算処理の本体部分に戻り、デクリメント後のカウント値が“０”であれば、ループを抜けて、一連の演算命令の実行を終了する。
【０００４】
このとき、ループの初期化部分と後処理部分は、ループ実行を制御するための処理を実行する部分であって、実際に演算命令を実行する部分ではないため、演算処理の本体部分から見るとオーバーヘッドとなる。
特に、ループの後処理部分は、演算処理の本体部分を１回実行する毎に発生するため、ループ回数が多くなれば、その分だけオーバーヘッドも増加して性能が低下する。
【０００５】
以下の非特許文献１には、ループ制御による性能低下を抑制する方法として、“ループアンローリング”が開示されている。
“ループアンローリング”は、本来のループ１回分の演算処理を数回分まとめて新たな演算処理の本体部分を生成することで、ループの繰り返し回数を削減するものである。
これにより、トータルのオーバーヘッドが削減されて、データ演算の高速化を図ることができるが、ループの繰り返し回数を削減する分だけ、演算処理の本体部分の命令数が増加する。
【０００６】
例えば、一連の演算処理を１００回繰り返すループ実行のオーバーヘッドを削減するために、“ループアンローリング”によって、４回分の演算処理をまとめて新たな演算処理の本体部分を生成すると、ループの繰り返し回数が４分の１の２５回に削減されるため、ループ制御によるオーバーヘッドが４分の１に削減される。
ただし、４回分の演算処理をまとめれば、演算処理の本体部分の命令数が４倍に増加して、プログラム量が増加することになる。
【０００７】
なお、以下の特許文献１には、ループ情報にしたがってループ実行を行う専用のループ制御回路を設けているデータ演算装置が開示されている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特表２００６−５０８４４７号公報
【非特許文献】
【０００９】
【非特許文献１】曽和将容著、「コンピュータアーキテクチャ原理」、コロナ社、１９９３年８月２０日発行、初版第１版、ｐｐ．１１０−１１２
【発明の概要】
【発明が解決しようとする課題】
【００１０】
従来のデータ演算装置の制御回路は以上のように構成されているので、ループ実行を行う専用のループ制御回路を設ければ、“ループアンローリング”のように、プログラム量の増加を招くことなく、ループ制御によるオーバーヘッドを削減することができる。しかし、ループ実行を伴わない演算命令の実行を制御する一般的な制御回路の他に、専用のループ制御回路を設ける必要があるため、ハードウェア規模の大型化を招いてしまうなどの課題があった。
【００１１】
この発明は上記のような課題を解決するためになされたもので、専用のループ制御回路を設けることなく、僅かなプログラム量の増加だけで、ループ制御によるオーバーヘッドを削減することができるデータ演算装置の制御回路及びデータ演算装置を得ることを目的とする。
【課題を解決するための手段】
【００１２】
この発明に係るデータ演算装置の制御回路は、初期設定手段により設定されたスタートアドレスを読み出しアドレスに設定して、その読み出しアドレスを出力し、その後、その読み出しアドレスをインクリメントして、インクリメント後の読み出しアドレスを出力する処理を繰り返し実施するアドレス出力手段と、初期設定手段により設定された繰り返しの有無が“有”である場合、アドレス出力手段から出力された読み出しアドレスが初期設定手段により設定されたエンドアドレスと一致すると、１ループ終了通知を出力するとともに、現時点までに演算終了指示が出力されていなければ、アドレス出力手段により設定された読み出しアドレスをスタートアドレスに戻して、アドレス出力処理の継続をアドレス出力手段に指示し、初期設定手段により設定された繰り返しの有無が“無”である場合、アドレス出力手段から出力された読み出しアドレスが初期設定手段により設定されたエンドアドレスと一致すると、アドレス出力処理の停止をアドレス出力手段に指示する繰り返し処理制御手段とを設け、演算終了判定手段が、繰り返し処理制御手段による１ループ終了通知の出力回数と初期設定手段により設定された繰り返し回数を比較して繰り返し演算を終了するか否かを判定し、繰り返し演算を終了する際に演算終了指示を繰り返し処理制御手段に出力するようにしたものである。
【発明の効果】
【００１３】
この発明によれば、初期設定手段により設定されたスタートアドレスを読み出しアドレスに設定して、その読み出しアドレスを出力し、その後、その読み出しアドレスをインクリメントして、インクリメント後の読み出しアドレスを出力する処理を繰り返し実施するアドレス出力手段と、初期設定手段により設定された繰り返しの有無が“有”である場合、アドレス出力手段から出力された読み出しアドレスが初期設定手段により設定されたエンドアドレスと一致すると、１ループ終了通知を出力するとともに、現時点までに演算終了指示が出力されていなければ、アドレス出力手段により設定された読み出しアドレスをスタートアドレスに戻して、アドレス出力処理の継続をアドレス出力手段に指示し、初期設定手段により設定された繰り返しの有無が“無”である場合、アドレス出力手段から出力された読み出しアドレスが初期設定手段により設定されたエンドアドレスと一致すると、アドレス出力処理の停止をアドレス出力手段に指示する繰り返し処理制御手段とを設け、演算終了判定手段が、繰り返し処理制御手段による１ループ終了通知の出力回数と初期設定手段により設定された繰り返し回数を比較して繰り返し演算を終了するか否かを判定し、繰り返し演算を終了する際に演算終了指示を繰り返し処理制御手段に出力するように構成したので、専用のループ制御回路を設けることなく、僅かなプログラム量の増加だけで、ループ制御によるオーバーヘッドを削減することができる効果がある。
【図面の簡単な説明】
【００１４】
【図１】この発明の実施の形態１によるデータ演算装置を示す構成図である。
【図２】演算用命令メモリ３２により格納されている一連の演算命令を示す説明図である。
【図３】シーケンス制御用命令メモリ１２により格納されているシーケンス制御用のプログラム内の命令を示す説明図である。
【図４】シーケンス制御用命令メモリ１２により格納されているシーケンス制御用のプログラム内の命令を示す説明図である。
【図５】この発明の実施の形態３によるデータ演算装置を示す構成図である。
【図６】シーケンス制御用命令メモリ１２により格納されているシーケンス制御用のプログラム内の命令を示す説明図である。
【図７】一般的なループ制御を行うプログラム例を示す説明図である。
【発明を実施するための形態】
【００１５】
実施の形態１．
図１はこの発明の実施の形態１によるデータ演算装置を示す構成図である。
図１において、制御回路１はシーケンス制御用のプログラムを実行することで、一連の演算命令を演算器２に発行して、演算器２の演算結果を取得する処理を実施する。
演算器２は制御回路１から発行された演算命令を実行して、その演算命令の演算結果を制御回路１に返す処理を実施する。
【００１６】
シーケンス制御部１１はシーケンス制御用のプログラム内の命令が、演算用命令メモリ３２に格納されている一連の演算命令を演算器２に実行させる演算開始命令であれば、一連の演算命令の中の先頭の演算命令が格納されている演算用命令メモリ３２内のアドレスを示すスタートアドレスをレジスタ群２２のスタートアドレスレジスタ２２ｂに設定するとともに、一連の演算命令の中の最後の演算命令が格納されている演算用命令メモリ３２内のアドレスを示すエンドアドレスをレジスタ群２２のエンドアドレスレジスタ２２ｃに設定し、また、一連の演算命令の繰り返しの有無を示すループ指示（ＯＮ／ＯＦＦ）をレジスタ群２２のループ指示レジスタ２２ａに設定する処理を実施する。また、シーケンス制御用のプログラム内の命令が、一連の演算命令の繰り返し回数（以下、「ループ回数」と称する）を設定する設定命令であれば、ループ回数を汎用レジスタ１５に設定する処理を実施する。
また、シーケンス制御部１１は演算器制御部２１における演算命令の発行処理と並行して、ループ制御の後処理として、繰り返し演算（ループ実行）を終了するか否かを判定する処理を実施する。即ち、ＰＣ制御部２３による「１ループ終了通知」の出力回数とループ回数を比較して繰り返し演算を終了するか否かを判定し、繰り返し演算を終了する際に「演算終了指示」をＰＣ制御部２３に出力する処理を実施する。
【００１７】
シーケンス制御用命令メモリ１２はシーケンス制御用のプログラムを格納している記録媒体である。
なお、シーケンス制御用のプログラムには、演算用命令メモリ３２に格納されている一連の演算命令を演算器２に実行させる演算開始命令（スタートアドレス、エンドアドレス、ループ指示（ＯＮ／ＯＦＦ）を含む命令）のほか、ループ回数を汎用レジスタ１５に設定するための命令や、ループ制御の後処理として、繰り返し演算（ループ実行）を終了するか否かを判定するための命令や、内部演算器１４が実行する単一演算命令（単一演算命令は、シーケンス制御に必要な演算を行う命令であり、例えば、２値の加算、減算、乗算、比較、レジスタの読み書きなどの命令が該当する）などが含まれている。
【００１８】
演算器制御指示生成回路１３はシーケンス制御用命令メモリ１２により格納されているシーケンス制御用のプログラム内の命令が、演算用命令メモリ３２に格納されている一連の演算命令を演算器２に実行させる演算開始命令であれば、書き込みイネーブルをレジスタ群２２に出力することで、その演算開始命令のオペランドであるスタートアドレスをレジスタ群２２のスタートアドレスレジスタ２２ｂに設定し、その演算開始命令のオペランドであるエンドアドレスをレジスタ群２２のエンドアドレスレジスタ２２ｃに設定し、また、その演算開始命令のオペランドであるループ指示（ＯＮ／ＯＦＦ）をレジスタ群２２のループ指示レジスタ２２ａに設定する処理を実施する。
また、演算器制御指示生成回路１３はスタートアドレス等の設定を完了したのち、内部演算器１４の指示の下、「演算開始指示」又は「演算終了指示」をＰＣ制御部２３に出力する一方、ＰＣ制御部２３から出力された「１ループ終了通知」を内部演算器１４に転送する処理を実施する。
なお、演算器制御指示生成回路１３は初期設定手段を構成している。
【００１９】
内部演算器１４はシーケンス制御用命令メモリ１２により格納されているシーケンス制御用のプログラム内の命令が、ループ回数を設定する設定命令であれば、ループ回数を汎用レジスタ１５に設定し、シーケンス制御用のプログラム内の命令が、単一演算命令であれば、その単一演算命令にしたがって単一演算を実行し、その演算結果を汎用レジスタ１５に格納する処理を実施する。
また、内部演算器１４はシーケンス制御用のプログラム内の命令が、ループ制御の後処理部分に相当する「ｄｏ−ｗｈｉｌｅ命令」であれば、演算器制御指示生成回路１３による「１ループ終了通知」の転送回数と汎用レジスタ１５に設定しているループ回数を比較して繰り返し演算（ループ実行）を終了するか否かを判定し、繰り返し演算を終了する際に、演算器制御指示生成回路１３を介して、「演算終了指示」をＰＣ制御部２３に出力する処理を実施する。
さらに、内部演算器１４は演算器２から返された演算結果を用いて、所定のシーケンス制御を実行する。
なお、内部演算器１４は演算終了判定手段を構成している。
汎用レジスタ１５はループ回数や単一演算の演算結果などを格納する記録媒体である。
【００２０】
演算器制御部２１はレジスタ群２２、ＰＣ制御部２３及び命令発行部３１から構成されており、シーケンス制御部１１の指示の下、一連の演算命令を演算器２に発行する処理を実施する。
レジスタ群２２はループ指示（ＯＮ／ＯＦＦ）を格納するループ指示レジスタ２２ａと、スタートアドレスを格納するスタートアドレスレジスタ２２ｂと、エンドアドレスを格納するエンドアドレスレジスタ２２ｃとから構成されている記録媒体である
ＰＣ制御部２３はレジスタ群２２を参照して、演算用命令メモリ３２に格納されている演算命令を読み出すための読み出しアドレスを生成する処理を実施する。
【００２１】
フラグ生成回路２４は演算器制御指示生成回路１３から「演算開始指示」が出力されると、実行フラグレジスタ２５に“有効”（“１”）を設定し、また、スタートアドレスレジスタ２２ｂからスタートアドレスを取得するとともに、エンドアドレスレジスタ２２ｃからエンドアドレスを取得し、そのエンドアドレスからスタートアドレスを減算して、差分値（エンドアドレス−スタートアドレス）を算出する処理を実施する。
また、フラグ生成回路２４は現ＰＣレジスタ２９のレジスタ値（初期状態では、レジスタ値は“０”）が上記差分値に到達すると、ループ指示レジスタ２２ａに格納されているループ指示が「ＯＮ」である場合、演算終了フラグレジスタ２６が“無効”（“０”）であれば、実行フラグレジスタ２５に設定されている“有効”（“１”）を維持し、演算終了フラグレジスタ２６が“有効”（“１”）であれば、実行フラグレジスタ２５に設定されている“有効”（“１”）を“無効”（“０”）に変更する処理を実施する。
一方、ループ指示レジスタ２２ａに格納されているループ指示が「ＯＦＦ」である場合、実行フラグレジスタ２５に設定されている“有効”（“１”）を“無効”（“０”）に変更する処理を実施する。
また、フラグ生成回路２４は演算器制御指示生成回路１３から「演算終了指示」が出力されると、演算終了フラグレジスタ２６に“有効”（“１”）を設定する処理を実施する。
【００２２】
実行フラグレジスタ２５は初期状態では“無効”（“０”）が設定されており、フラグ生成回路２４によって、適宜設定状態が変更される。
演算終了フラグレジスタ２６は初期状態では“無効”（“０”）が設定されており、フラグ生成回路２４によって、適宜設定状態が変更される。
【００２３】
ＰＣ生成回路２７はスタートアドレスレジスタ２２ｂからスタートアドレスを取得するとともに、エンドアドレスレジスタ２２ｃからエンドアドレスを取得し、そのエンドアドレスからスタートアドレスを減算して、差分値（エンドアドレス−スタートアドレス）を算出する処理を実施する。
また、ＰＣ生成回路２７は実行フラグレジスタ２５が“有効”（“１”）である場合、次ＰＣレジスタ２８のレジスタ値（初期状態では、レジスタ値は“０”）を現ＰＣレジスタ２９に設定し、現ＰＣレジスタ２９のレジスタ値が上記差分値と一致しなければ、次ＰＣレジスタ２８のレジスタ値を１だけインクリメントする処理を実施する。
一方、現ＰＣレジスタ２９のレジスタ値が上記差分値と一致すれば、次ＰＣレジスタ２８のレジスタ値を“０”にクリアするとともに、「１ループ終了通知」を演算器制御指示生成回路１３に出力する処理を実施する。
【００２４】
次ＰＣレジスタ２８は初期状態ではカウント値が“０”に設定されており、そのカウント値がＰＣ生成回路２７によって１ずつインクリメントされ、あるいは、“０”にクリアされる。
現ＰＣレジスタ２９は初期状態ではカウント値が“０”に設定されており、そのカウント値がＰＣ生成回路２７によって次ＰＣレジスタ２８のレジスタ値に設定される。
アドレス生成回路３０はスタートアドレスレジスタ２２ｂからスタートアドレスを取得するとともに、現ＰＣレジスタ２９のレジスタ値を取得し、そのスタートアドレスと現ＰＣレジスタ２９のレジスタ値との加算値を読み出しアドレスとして命令発行部３１に出力する処理を実施する。
【００２５】
なお、ＰＣ生成回路２７、次ＰＣレジスタ２８、現ＰＣレジスタ２９及びアドレス生成回路３０からアドレス出力手段が構成されている。
また、フラグ生成回路２４、実行フラグレジスタ２５、演算終了フラグレジスタ２６、ＰＣ生成回路２７、次ＰＣレジスタ２８及び現ＰＣレジスタ２９から繰り返し処理制御手段が構成されている。
【００２６】
命令発行部３１は実行フラグレジスタ２５が“有効”（“１”）である場合、演算用命令メモリ３２に格納されている演算命令の中から、アドレス生成回路３０から出力された読み出しアドレスに対応する演算命令を読み出し、その演算命令を演算器２に発行する処理を実施する。なお、命令発行部３１は命令発行手段を構成している。
演算用命令メモリ３２は演算器２に発行する一連の演算命令を格納している記録媒体である。
【００２７】
ここで、図２は演算用命令メモリ３２により格納されている一連の演算命令を示す説明図である。
図３はシーケンス制御用命令メモリ１２により格納されているシーケンス制御用のプログラム内の命令を示す説明図である。
図３では、ＰＲＯＣ＿Ｃ（命令Ｃ０〜Ｃ９９）を１００回繰り返し実行し、ＰＲＯＣ＿Ｄ（命令Ｄ０〜Ｄ４４）を１回実行する例を示している。
【００２８】
次に動作について説明する。
この実施の形態１では、説明の便宜上、シーケンス制御用のプログラム内の命令が図３の命令であり、演算用命令メモリ３２により格納されている一連の演算命令が図２の命令であるものとして説明する。
【００２９】
制御回路１は、処理開始前に初期化され、レジスタ群２２のループ指示レジスタ２２ａ、スタートアドレスレジスタ２２ｂ及びエンドアドレスレジスタ２２ｃには“０”が設定される。
また、実行フラグレジスタ２５及び演算終了フラグレジスタ２６には、“無効”（“０”）が設定され、次ＰＣレジスタ２８及び現ＰＣレジスタ２９のカウント値には、“０”が設定される。
【００３０】
シーケンス制御部１１は、シーケンス制御用命令メモリ１２により格納されているシーケンス制御用のプログラムを読み込み、そのプログラム内の命令を解析する。
図３の例では、最初に、ＰＲＯＣ＿Ｃ（命令Ｃ０〜Ｃ９９）を１００回繰り返すために、ループ回数を設定する設定命令（図３では、“ループカウンタを１００に設定する”と記述されている）がプログラムに記述されているので、シーケンス制御部１１の内部演算器１４は、その設定命令にしたがってループ回数を汎用レジスタ１５に設定する。
図３の例では、ループ回数として、“１００”を汎用レジスタ１５に設定する。
【００３１】
次に、ＰＲＯＣ＿Ｃ（命令Ｃ０〜Ｃ９９）の演算開始命令（記述（１））がプログラムに記述されているので、シーケンス制御部１１の演算器制御指示生成回路１３は、書き込みイネーブルをレジスタ群２２に出力することで、その演算開始命令のオペランド（スタートアドレス、エンドアドレス、ループ指示（ＯＮ／ＯＦＦ））をレジスタ群２２に設定する。
図３の例では、演算器制御指示生成回路１３が書き込みイネーブルをレジスタ群２２に出力することにより、スタートアドレス＝０ｘ０１１０をスタートアドレスレジスタ２２ｂに設定し、エンドアドレス＝０ｘ０１７３をエンドアドレスレジスタ２２ｃに設定し、また、ループ指示（ＬＯＯＰ＝ＯＮ）をループ指示レジスタ２２ａに設定する。
【００３２】
ここで、スタートアドレス＝０ｘ０１１０は、演算用命令メモリ３２に格納されている命令Ｃ０（ループ先頭の演算命令）のアドレスを示し、エンドアドレス＝０ｘ０１７３は、演算用命令メモリ３２に格納されている命令Ｃ９９（ループ最後の演算命令）のアドレスを示している。また、ループ指示（ＬＯＯＰ＝ＯＮ）は、ループ実行を行う旨を示している。
したがって、この演算開始命令は、命令Ｃ０〜Ｃ９９のループ実行を意味している。
演算器制御指示生成回路１３は、スタートアドレス等の設定を完了したのち、内部演算器１４の指示の下、「演算開始指示」をＰＣ制御部２３のフラグ生成回路２４に出力する。
【００３３】
フラグ生成回路２４は、演算器制御指示生成回路１３から「演算開始指示」が出力されると、実行フラグレジスタ２５に“有効”（“１”）を設定する。
また、フラグ生成回路２４は、スタートアドレスレジスタ２２ｂからスタートアドレスを取得するとともに、エンドアドレスレジスタ２２ｃからエンドアドレスを取得し、そのエンドアドレスからスタートアドレスを減算して、差分値（エンドアドレス−スタートアドレス）を算出する。
この例では、スタートアドレス＝０ｘ０１１０、エンドアドレス＝０ｘ０１７３であるため、差分値（エンドアドレス−スタートアドレス）は“９９”となる。
なお、この差分値は、フラグ生成回路２４により、後で、現ＰＣレジスタ２９のレジスタ値と比較されるものであるため、内部のメモリ等に保持される。
【００３４】
ＰＣ生成回路２７は、フラグ生成回路２４が実行フラグレジスタ２５に“有効”（“１”）を設定すると、下記に示すレジスタ値の更新処理を開始する。
即ち、ＰＣ生成回路２７は、フラグ生成回路２４が実行フラグレジスタ２５に“有効”（“１”）を設定すると、フラグ生成回路２４と同様に、スタートアドレスレジスタ２２ｂからスタートアドレスを取得するとともに、エンドアドレスレジスタ２２ｃからエンドアドレスを取得し、そのエンドアドレスからスタートアドレスを減算して、差分値（エンドアドレス−スタートアドレス）を算出する。ここでは、ＰＣ生成回路２７が差分値を算出しているが、フラグ生成回路２４により算出された差分値を取得するようにしてもよい。あるいは、ＰＣ生成回路２７が算出した差分値をフラグ生成回路２４に与えるようにしてもよい。
また、ＰＣ生成回路２７は、実行フラグレジスタ２５が“有効”（“１”）である場合、次ＰＣレジスタ２８のレジスタ値を現ＰＣレジスタ２９に設定する。
この時点では、次ＰＣレジスタ２８のレジスタ値は“０”であるため、現ＰＣレジスタ２９のレジスタ値を“０”に設定する。
【００３５】
ＰＣ生成回路２７は、次ＰＣレジスタ２８のレジスタ値を現ＰＣレジスタ２９に設定すると、現ＰＣレジスタ２９のレジスタ値と差分値（エンドアドレス−スタートアドレス）を比較する。
この時点では、現ＰＣレジスタ２９のレジスタ値は“０”であり、差分値は“９９”である。
ＰＣ生成回路２７は、現ＰＣレジスタ２９のレジスタ値が差分値と一致しないので、次ＰＣレジスタ２８のレジスタ値を１だけインクリメントする。
この時点では、次ＰＣレジスタ２８のレジスタ値は“１”となる。
【００３６】
アドレス生成回路３０は、スタートアドレスレジスタ２２ｂからスタートアドレスを取得するとともに、現ＰＣレジスタ２９のレジスタ値を取得し、そのスタートアドレスと現ＰＣレジスタ２９のレジスタ値とを加算する。
この時点では、現ＰＣレジスタ２９のレジスタ値は“０”であり、スタートアドレス＝０ｘ０１１０であるため、そのスタートアドレスとレジスタ値の加算値は、“０ｘ０１１０”となる。
アドレス生成回路３０は、その加算値“０ｘ０１１０”を読み出しアドレスとして、命令発行部３１に出力する。
【００３７】
命令発行部３１は、実行フラグレジスタ２５が“有効”（“１”）である場合、演算用命令メモリ３２に格納されている演算命令の中から、アドレス生成回路３０から出力された読み出しアドレスに対応する演算命令の読み出しを行う。
この時点では、読み出しアドレスが“０ｘ０１１０”であるため、演算用命令メモリ３２から“０ｘ０１１０”に対応する命令Ｃ０の読み出しを行う。
命令発行部３１は、演算命令である命令Ｃ０の読み出しを行うと、その命令Ｃ０を演算器２に発行する。
演算器２は、命令発行部３１から命令Ｃ０が発行されると、命令Ｃ０を実行して、命令Ｃ０の演算結果を制御回路１のシーケンス制御部１１に出力する。
【００３８】
ＰＣ生成回路２７は、アドレス生成回路３０が読み出しアドレス“０ｘ０１１０”を命令発行部３１に出力すると、引き続き、実行フラグレジスタ２５が“有効”（“１”）であることを確認し、次ＰＣレジスタ２８のレジスタ値を現ＰＣレジスタ２９に設定する。
この時点では、次ＰＣレジスタ２８のレジスタ値は“１”であるため、現ＰＣレジスタ２９のレジスタ値を“１”に設定する。
【００３９】
ＰＣ生成回路２７は、次ＰＣレジスタ２８のレジスタ値を現ＰＣレジスタ２９に設定すると、現ＰＣレジスタ２９のレジスタ値と差分値（エンドアドレス−スタートアドレス）を比較する。
この時点では、現ＰＣレジスタ２９のレジスタ値は“１”であり、差分値は“９９”である。
ＰＣ生成回路２７は、現ＰＣレジスタ２９のレジスタ値が差分値と一致しないので、次ＰＣレジスタ２８のレジスタ値を１だけインクリメントする。
この時点では、次ＰＣレジスタ２８のレジスタ値は“２”となる。
【００４０】
アドレス生成回路３０は、スタートアドレスレジスタ２２ｂからスタートアドレスを取得するとともに、現ＰＣレジスタ２９のレジスタ値を取得し、そのスタートアドレスと現ＰＣレジスタ２９のレジスタ値とを加算する。
この時点では、現ＰＣレジスタ２９のレジスタ値は“１”であり、スタートアドレス＝０ｘ０１１０であるため、そのスタートアドレスとレジスタ値の加算値は、“０ｘ０１１１”となる。
アドレス生成回路３０は、その加算値“０ｘ０１１１”を読み出しアドレスとして、命令発行部３１に出力する。
【００４１】
命令発行部３１は、実行フラグレジスタ２５が“有効”（“１”）である場合、演算用命令メモリ３２に格納されている演算命令の中から、アドレス生成回路３０から出力された読み出しアドレスに対応する演算命令の読み出しを行う。
この時点では、読み出しアドレスが“０ｘ０１１１”であるため、演算用命令メモリ３２から“０ｘ０１１１”に対応する命令Ｃ１の読み出しを行う。
命令発行部３１は、演算命令である命令Ｃ１の読み出しを行うと、その命令Ｃ１を演算器２に発行する。
演算器２は、命令発行部３１から命令Ｃ１が発行されると、命令Ｃ１を実行して、命令Ｃ１の演算結果を制御回路１のシーケンス制御部１１に出力する。
【００４２】
以降、現ＰＣレジスタ２９のレジスタ値が“９８”になるまで、ＰＣ生成回路２７、アドレス生成回路３０、命令発行部３１及び演算器２が同様の処理を繰り返し実施する。
これにより、命令Ｃ２〜Ｃ９８が演算器２により実行されて、命令Ｃ２〜Ｃ９８の演算結果が制御回路１のシーケンス制御部１１に出力される。
この時点では、次ＰＣレジスタ２８のレジスタ値は“９９”であり、現ＰＣレジスタ２９のレジスタ値は“９８”である。
また、読み出しアドレスは“０ｘ０１７２”である。
【００４３】
ＰＣ生成回路２７は、アドレス生成回路３０が読み出しアドレス“０ｘ０１７２”を命令発行部３１に出力すると、引き続き、実行フラグレジスタ２５が“有効”（“１”）であることを確認し、次ＰＣレジスタ２８のレジスタ値を現ＰＣレジスタ２９に設定する。
この時点では、次ＰＣレジスタ２８のレジスタ値は“９９”であるため、現ＰＣレジスタ２９のレジスタ値を“９９”に設定する。
【００４４】
ＰＣ生成回路２７は、次ＰＣレジスタ２８のレジスタ値を現ＰＣレジスタ２９に設定すると、現ＰＣレジスタ２９のレジスタ値と差分値（エンドアドレス−スタートアドレス）を比較する。
この時点では、現ＰＣレジスタ２９のレジスタ値は“９９”であり、差分値は“９９”である。
ＰＣ生成回路２７は、現ＰＣレジスタ２９のレジスタ値が差分値と一致すると、次ＰＣレジスタ２８のレジスタ値を“０”にクリアするとともに、「１ループ終了通知」を演算器制御指示生成回路１３に出力する。
【００４５】
フラグ生成回路２４は、現ＰＣレジスタ２９のレジスタ値と内部のメモリ等に保持している差分値を比較し、現ＰＣレジスタ２９のレジスタ値が差分値と一致すると、ループ指示レジスタ２２ａに格納されているループ指示が「ＯＮ」であるのか、「ＯＦＦ」であるのかを確認する。
この時点では、ループ指示レジスタ２２ａに格納されているループ指示は「ＯＮ」である。
フラグ生成回路２４は、ループ指示が「ＯＮ」であることを確認すると、演算終了フラグレジスタ２６が“無効”（“０”）であるのか、“有効”（“１”）であるのかを確認する。
この時点では、未だ、演算器制御指示生成回路１３から「演算終了指示」が出力されていないので、演算終了フラグレジスタ２６は“無効”（“０”）である。
【００４６】
フラグ生成回路２４は、演算終了フラグレジスタ２６が“無効”（“０”）であることを確認すると、実行フラグレジスタ２５に設定されている“有効”（“１”）を維持する。
フラグ生成回路２４が実行フラグレジスタ２５に設定されている“有効”（“１”）を維持すると、ＰＣ生成回路２７、アドレス生成回路３０、命令発行部３１及び演算器２は、上述した処理と同様の処理を繰り返し実施する。
即ち、ＰＣ生成回路２７が、現ＰＣレジスタ２９のレジスタ値が“０”から“９９”になるまで、そのレジスタ値を更新する処理を繰り返し、アドレス生成回路３０が、読み出しアドレスが“０ｘ０１１０”から“０ｘ０１７３”になるまで、その読み出しアドレスを順次出力し、命令発行部３１が命令Ｃ０〜Ｃ９９を順次発行する。
これにより、演算器２は、命令Ｃ０〜Ｃ９９を順次実行する。
【００４７】
このように、命令発行部３１から命令Ｃ０〜Ｃ９９が順次発行される処理は、後述するように、演算器制御指示生成回路１３から「演算終了指示」が出力されて、演算終了フラグレジスタ２６が“有効”（“１”）になるまで繰り返される。
図３の例では、ループ回数が“１００”に設定されているので、命令発行部３１から命令Ｃ０〜Ｃ９９が順次発行される処理は、１００回繰り返される。
なお、上記の繰り返し処理において、現ＰＣレジスタ２９のレジスタ値が“９９”となるサイクルの次のサイクルには、現ＰＣレジスタ２９のレジスタ値を“０”に戻すことが可能であるため、オーバーヘッドなしに、ループ先頭の演算命令を発行する処理に戻ることができる。
【００４８】
シーケンス制御部１１は、演算器制御部２１における演算命令の発行処理と並行して、ループ制御の後処理として、繰り返し演算（ループ実行）を終了するか否かを判定する処理を実施する。
即ち、シーケンス制御部１１の内部演算器１４は、シーケンス制御用のプログラム内の命令が、ループ制御の後処理部分に相当する「ｄｏ−ｗｈｉｌｅ命令」であれば、ｄｏ−ｗｈｉｌｅ命令（図３では、記述（２）の命令）を実行する。
具体的には、以下の通りである。
【００４９】
まず、シーケンス制御部１１の内部演算器１４は、汎用レジスタ１５に設定されているループ回数“１００”をループカウンタ（図示せぬ）に設定する。
ここでは、ループ回数をループカウンタに設定する例を示しているが、汎用レジスタ１５をループカウンタとして用いる場合には、ループ回数を別のループカウンタに設定する必要はない。
演算器制御指示生成回路１３は、ＰＣ制御部２３のＰＣ生成回路２７から「１ループ終了通知」が出力されると、「１ループ終了通知」を内部演算器１４に転送する。
【００５０】
内部演算器１４は、演算器制御指示生成回路１３から「１ループ終了通知」が転送される毎に、ループカウンタのカウント値を１だけデクリメントする。
内部演算器１４は、ループカウンタのカウント値をデクリメントすると、デクリメント後のカウント値が“１”であるか否かを判定（演算終了判定）する。
ループカウンタのカウント値は、上述したように、“１００”が設定されており、ＰＣ制御部２３のＰＣ生成回路２７から「１ループ終了通知」が出力される毎（１回分のループ実行が完了する毎）に、カウント値が１デクリメントされるので、演算器制御部２１において、９９回分のループ実行が完了すると、ループカウンタのカウント値が“１”となる。
【００５１】
内部演算器１４は、ループカウンタのカウント値が“１”になると、「演算終了指示」を演算器制御指示生成回路１３に出力する。
即ち、内部演算器１４は、残りのループ回数が１回になると、「演算終了指示」を演算器制御指示生成回路１３に出力する。
演算器制御指示生成回路１３は、内部演算器１４から「演算終了指示」を受けると、「演算終了指示」をＰＣ制御部２３のフラグ生成回路２４に出力する。
【００５２】
ＰＣ制御部２３のＰＣ生成回路２７は、９９回分のループ実行が完了して（残りのループ回数が１回）、９９回目の「１ループ終了通知」を出力した時点では、未だシーケンス制御部１１の演算器制御指示生成回路１３から「演算終了指示」が出力されておらず（内部演算器１４は、ＰＣ生成回路２７から９９回目の「１ループ終了通知」を受けた時点から、９９回目の演算終了判定を開始するので、ＰＣ生成回路２７が９９回目の「１ループ終了通知」を出力した時点では、演算器制御指示生成回路１３から「演算終了指示」が出力されない）、アドレス生成回路３０が読み出しアドレスを命令発行部３１に出力すると、直ちに、実行フラグレジスタ２５が“有効”（“１”）であることを確認して、次ＰＣレジスタ２８のレジスタ値を現ＰＣレジスタ２９に設定するので、１００回目のループ実行が開始される。
したがって、シーケンス制御部１１の演算器制御指示生成回路１３から出力される「演算終了指示」は、１００回目のループ実行が行われているときに、ＰＣ制御部２３のフラグ生成回路２４に入力される。
【００５３】
フラグ生成回路２４は、演算器制御指示生成回路１３から「演算終了指示」を受けると、演算終了フラグレジスタ２６に“有効”（“１”）を設定する。
フラグ生成回路２４は、１００回目のループ実行において、現ＰＣレジスタ２９のレジスタ値が“９９”になり（レジスタ値が“９９”になると、読み出しアドレスが“０ｘ０１７３”になって、命令Ｃ９９が発行される）、現ＰＣレジスタ２９のレジスタ値が差分値（エンドアドレス−スタートアドレス）に到達すると、演算終了フラグレジスタ２６が“有効”（“１”）であることを確認して、実行フラグレジスタ２５に設定されている“有効”（“１”）を“無効”（“０”）に変更する。
【００５４】
ＰＣ生成回路２７は、実行フラグレジスタ２５に“有効”（“１”）が設定されているときに、レジスタ値の更新処理を開始し、実行フラグレジスタ２５に“無効”（“０”）が設定されている場合には、レジスタ値の更新処理を行わないので、アドレス生成回路３０から１０１回目のループ実行に係る読み出しアドレスが出力されることはない。
また、命令発行部３１についても、実行フラグレジスタ２５に“有効”（“１”）が設定されているときに演算命令を発行し、実行フラグレジスタ２５に“無効”（“０”）が設定されている場合には、演算命令を発行しないので、１０１回目のループ実行に係る演算命令が発行されることはない。
これにより、ＰＲＯＣ＿Ｃ（命令Ｃ０〜Ｃ９９）に係る１００回のループ実行が終了する。
【００５５】
次に、ＰＲＯＣ＿Ｄ（命令Ｄ０〜Ｄ４４）の演算開始命令（記述（３））がプログラムに記述されているので、シーケンス制御部１１の演算器制御指示生成回路１３は、書き込みイネーブルをレジスタ群２２に出力することで、その演算開始命令のオペランド（スタートアドレス、エンドアドレス、ループ指示（ＯＮ／ＯＦＦ））をレジスタ群２２に設定する。
図３の例では、演算器制御指示生成回路１３が書き込みイネーブルをレジスタ群２２に出力することにより、スタートアドレス＝０ｘ０１７４をスタートアドレスレジスタ２２ｂに設定し、エンドアドレス＝０ｘ０１Ａ０をエンドアドレスレジスタ２２ｃに設定し、また、ループ指示（ＬＯＯＰ＝ＯＦＦ）をループ指示レジスタ２２ａに設定する。
【００５６】
ここで、スタートアドレス＝０ｘ０１７４は、演算用命令メモリ３２に格納されている命令Ｄ０のアドレスを示し、エンドアドレス＝０ｘ０１Ａ０は、演算用命令メモリ３２に格納されている命令Ｄ４４のアドレスを示している。また、ループ指示（ＬＯＯＰ＝ＯＦＦ）は、ループ実行を行わない旨を示している。
したがって、この演算開始命令は、命令Ｄ０〜Ｄ４４を１回ずつ実行することを意味している。
演算器制御指示生成回路１３は、スタートアドレス等の設定を完了したのち、内部演算器１４の指示の下、「演算開始指示」をＰＣ制御部２３のフラグ生成回路２４に出力する。
【００５７】
フラグ生成回路２４は、演算器制御指示生成回路１３から「演算開始指示」が出力されると、実行フラグレジスタ２５に“有効”（“１”）を設定する。
また、フラグ生成回路２４は、スタートアドレスレジスタ２２ｂからスタートアドレスを取得するとともに、エンドアドレスレジスタ２２ｃからエンドアドレスを取得し、そのエンドアドレスからスタートアドレスを減算して、差分値（エンドアドレス−スタートアドレス）を算出する。
この例では、スタートアドレス＝０ｘ０１７４、エンドアドレス＝０ｘ０１Ａ０であるため、差分値（エンドアドレス−スタートアドレス）は“４４”となる。
なお、この差分値は、フラグ生成回路２４により、後で、現ＰＣレジスタ２９のレジスタ値と比較されるものであるため、内部のメモリ等に保持される。
【００５８】
ＰＣ生成回路２７は、フラグ生成回路２４が実行フラグレジスタ２５に“有効”（“１”）を設定すると、下記に示すレジスタ値の更新処理を開始する。
即ち、ＰＣ生成回路２７は、フラグ生成回路２４が実行フラグレジスタ２５に“有効”（“１”）を設定すると、フラグ生成回路２４と同様に、スタートアドレスレジスタ２２ｂからスタートアドレスを取得するとともに、エンドアドレスレジスタ２２ｃからエンドアドレスを取得し、そのエンドアドレスからスタートアドレスを減算して、差分値（エンドアドレス−スタートアドレス）を算出する。ここでは、ＰＣ生成回路２７が差分値を算出しているが、フラグ生成回路２４により算出された差分値を取得するようにしてもよい。あるいは、ＰＣ生成回路２７が算出した差分値をフラグ生成回路２４に与えるようにしてもよい。
また、ＰＣ生成回路２７は、実行フラグレジスタ２５が“有効”（“１”）である場合、次ＰＣレジスタ２８のレジスタ値を現ＰＣレジスタ２９に設定する。
この時点では、次ＰＣレジスタ２８のレジスタ値は“０”であるため、現ＰＣレジスタ２９のレジスタ値を“０”に設定する。
【００５９】
ＰＣ生成回路２７は、次ＰＣレジスタ２８のレジスタ値を現ＰＣレジスタ２９に設定すると、現ＰＣレジスタ２９のレジスタ値と差分値（エンドアドレス−スタートアドレス）を比較する。
この時点では、現ＰＣレジスタ２９のレジスタ値は“０”であり、差分値は“４４”である。
ＰＣ生成回路２７は、現ＰＣレジスタ２９のレジスタ値が差分値と一致しないので、次ＰＣレジスタ２８のレジスタ値を１だけインクリメントする。
この時点では、次ＰＣレジスタ２８のレジスタ値は“１”となる。
【００６０】
アドレス生成回路３０は、スタートアドレスレジスタ２２ｂからスタートアドレスを取得するとともに、現ＰＣレジスタ２９のレジスタ値を取得し、そのスタートアドレスと現ＰＣレジスタ２９のレジスタ値とを加算する。
この時点では、現ＰＣレジスタ２９のレジスタ値は“０”であり、スタートアドレス＝０ｘ０１７４であるため、そのスタートアドレスとレジスタ値の加算値は、“０ｘ０１７４”となる。
アドレス生成回路３０は、その加算値“０ｘ０１７４”を読み出しアドレスとして、命令発行部３１に出力する。
【００６１】
命令発行部３１は、実行フラグレジスタ２５が“有効”（“１”）である場合、演算用命令メモリ３２に格納されている演算命令の中から、アドレス生成回路３０から出力された読み出しアドレスに対応する演算命令の読み出しを行う。
この時点では、読み出しアドレスが“０ｘ０１７４”であるため、演算用命令メモリ３２から“０ｘ０１７４”に対応する命令Ｄ０の読み出しを行う。
命令発行部３１は、演算命令である命令Ｄ０の読み出しを行うと、その命令Ｄ０を演算器２に発行する。
演算器２は、命令発行部３１から命令Ｄ０が発行されると、命令Ｄ０を実行して、命令Ｄ０の演算結果を制御回路１のシーケンス制御部１１に出力する。
【００６２】
ＰＣ生成回路２７は、アドレス生成回路３０が読み出しアドレス“０ｘ０１７４”を命令発行部３１に出力すると、引き続き、実行フラグレジスタ２５が“有効”（“１”）であることを確認し、次ＰＣレジスタ２８のレジスタ値を現ＰＣレジスタ２９に設定する。
この時点では、次ＰＣレジスタ２８のレジスタ値は“１”であるため、現ＰＣレジスタ２９のレジスタ値を“１”に設定する。
【００６３】
ＰＣ生成回路２７は、次ＰＣレジスタ２８のレジスタ値を現ＰＣレジスタ２９に設定すると、現ＰＣレジスタ２９のレジスタ値と差分値（エンドアドレス−スタートアドレス）を比較する。
この時点では、現ＰＣレジスタ２９のレジスタ値は“１”であり、差分値は“４４”である。
ＰＣ生成回路２７は、現ＰＣレジスタ２９のレジスタ値が差分値と一致しないので、次ＰＣレジスタ２８のレジスタ値を１だけインクリメントする。
この時点では、次ＰＣレジスタ２８のレジスタ値は“２”となる。
【００６４】
アドレス生成回路３０は、スタートアドレスレジスタ２２ｂからスタートアドレスを取得するとともに、現ＰＣレジスタ２９のレジスタ値を取得し、そのスタートアドレスと現ＰＣレジスタ２９のレジスタ値とを加算する。
この時点では、現ＰＣレジスタ２９のレジスタ値は“１”であり、スタートアドレス＝０ｘ０１７４であるため、そのスタートアドレスとレジスタ値の加算値は、“０ｘ０１７５”となる。
アドレス生成回路３０は、その加算値“０ｘ０１７５”を読み出しアドレスとして、命令発行部３１に出力する。
【００６５】
命令発行部３１は、実行フラグレジスタ２５が“有効”（“１”）である場合、演算用命令メモリ３２に格納されている演算命令の中から、アドレス生成回路３０から出力された読み出しアドレスに対応する演算命令の読み出しを行う。
この時点では、読み出しアドレスが“０ｘ０１７５”であるため、演算用命令メモリ３２から“０ｘ０１７５”に対応する命令Ｄ１の読み出しを行う。
命令発行部３１は、演算命令である命令Ｄ１の読み出しを行うと、その命令Ｄ１を演算器２に発行する。
演算器２は、命令発行部３１から命令Ｄ１が発行されると、命令Ｄ１を実行して、命令Ｄ１の演算結果を制御回路１のシーケンス制御部１１に出力する。
【００６６】
以降、現ＰＣレジスタ２９のレジスタ値が“４３”になるまで、ＰＣ生成回路２７、アドレス生成回路３０、命令発行部３１及び演算器２が同様の処理を繰り返し実施する。
これにより、命令Ｄ２〜Ｄ４３が演算器２により実行されて、命令Ｄ２〜Ｄ４３の演算結果が制御回路１のシーケンス制御部１１に出力される。
この時点では、次ＰＣレジスタ２８のレジスタ値は“４４”であり、現ＰＣレジスタ２９のレジスタ値は“４３”である。
また、読み出しアドレスは“０ｘ０１９Ｆ”である。
【００６７】
ＰＣ生成回路２７は、アドレス生成回路３０が読み出しアドレス“０ｘ０１９Ｆ”を命令発行部３１に出力すると、引き続き、実行フラグレジスタ２５が“有効”（“１”）であることを確認し、次ＰＣレジスタ２８のレジスタ値を現ＰＣレジスタ２９に設定する。
この時点では、次ＰＣレジスタ２８のレジスタ値は“４４”であるため、現ＰＣレジスタ２９のレジスタ値を“４４”に設定する。
【００６８】
ＰＣ生成回路２７は、次ＰＣレジスタ２８のレジスタ値を現ＰＣレジスタ２９に設定すると、現ＰＣレジスタ２９のレジスタ値と差分値（エンドアドレス−スタートアドレス）を比較する。
この時点では、現ＰＣレジスタ２９のレジスタ値は“４４”であり、差分値は“４４”である。
ＰＣ生成回路２７は、現ＰＣレジスタ２９のレジスタ値が差分値と一致すると、次ＰＣレジスタ２８のレジスタ値を“０”にクリアするとともに、「１ループ終了通知」を演算器制御指示生成回路１３に出力する。
【００６９】
フラグ生成回路２４は、現ＰＣレジスタ２９のレジスタ値と内部のメモリ等に保持している差分値を比較し、現ＰＣレジスタ２９のレジスタ値が差分値と一致すると、ループ指示レジスタ２２ａに格納されているループ指示が「ＯＮ」であるのか、「ＯＦＦ」であるのかを確認する。
この時点では、ループ指示レジスタ２２ａに格納されているループ指示は「ＯＦＦ」である。
フラグ生成回路２４は、ループ指示が「ＯＦＦ」であることを確認すると、実行フラグレジスタ２５に設定されている“有効”（“１”）を“無効”（“０”）に変更する。
【００７０】
ＰＣ生成回路２７は、実行フラグレジスタ２５に“無効”（“０”）が設定されている場合には、レジスタ値の更新処理を行わず、命令発行部３１は、実行フラグレジスタ２５に“無効”（“０”）が設定されている場合には、演算命令を発行しないので、ＰＲＯＣ＿Ｄ（命令Ｄ０〜Ｄ４５）の実行が終了する。
【００７１】
以上で明らかなように、この実施の形態１によれば、スタートアドレスレジスタ２２ｂに設定されているスタートアドレスを読み出しアドレスに設定して、その読み出しアドレスを出力し、その後、その読み出しアドレスをインクリメントして、インクリメント後の読み出しアドレスを出力する処理を繰り返し実施するアドレス出力手段と、ループ指示レジスタ２２ａに設定されているループ指示が「ＬＯＯＰ＝ＯＮ」である場合、アドレス出力手段から出力された読み出しアドレスがエンドアドレスレジスタ２２ｃに設定されているエンドアドレスと一致すると、「１ループ終了通知」を出力するとともに、現時点までにシーケンス制御部１１から「演算終了指示」が出力されていなければ、アドレス出力手段により設定された読み出しアドレスをスタートアドレスに戻して、アドレス出力処理の継続をアドレス出力手段に指示し、ループ指示が「ＬＯＯＰ＝ＯＦＦ」である場合、アドレス出力手段から出力された読み出しアドレスがエンドアドレスと一致すると、アドレス出力処理の停止をアドレス出力手段に指示する繰り返し処理制御手段とを設け、内部演算器１４が、「１ループ終了通知」の出力回数とループ回数を比較して繰り返し演算を終了するか否かを判定し、繰り返し演算を終了する際に「演算終了指示」を繰り返し処理制御手段に出力するように構成したので、専用のループ制御回路を設けることなく（演算器制御部２１が、ループ実行を伴う演算命令の発行制御と、ループ実行を伴わない演算命令の発行制御とを兼ねている）、僅かなプログラム量の増加だけで、ループ制御によるオーバーヘッドを削減することができる効果を奏する。
【００７２】
即ち、ループ制御の後処理部分に相当する「ｄｏ−ｗｈｉｌｅ命令」が、内部演算器１４によって、演算器制御部２１における演算命令の発行処理と並行して実行されるため、ループ実行（最終回のループ実行を除く）の後処理に係るサイクル数を隠蔽することができるようになり、ループ制御の後処理に係るオーバーヘッドを削減することができる。
ループ制御の後処理に係るオーバーヘッドを削減するために追加するプログラムは、内部演算器１４が実行する「ｄｏ−ｗｈｉｌｅ命令」だけであるため、僅かなプログラム量の増加だけで、ループ制御によるオーバーヘッドを削減することができる。
このように、ループ制御によるオーバーヘッドの削減が可能であるため、処理の高速化を実現することができるとともに、低消費電力化を図ることができる。
【００７３】
なお、この実施の形態１では、シーケンス制御用のプログラムがシーケンス制御用命令メモリ１２に格納され、演算命令が演算用命令メモリ３２に格納されているものを示したが、シーケンス制御用のプログラムや演算命令が外部からダウンロードされるようにしてもよい。
【００７４】
実施の形態２．
上記実施の形態１では、シーケンス制御用のプログラム内の命令である演算開始命令が、オペランドとして、スタートアドレス、エンドアドレス及びループ指示（ＯＮ／ＯＦＦ）を有し、その演算開始命令によってスタートアドレス、エンドアドレス及びループ指示（ＯＮ／ＯＦＦ）が設定されるものについて示したが、オペランドを有しない演算開始命令と別のパラメータ設定命令によって、スタートアドレス、エンドアドレス及びループ指示（ＯＮ／ＯＦＦ）が設定されるようにしてもよい。
【００７５】
図４はシーケンス制御用命令メモリ１２により格納されているシーケンス制御用のプログラム内の命令を示す説明図である。
図４でも、図３と同様に、ＰＲＯＣ＿Ｃ（命令Ｃ０〜Ｃ９９）を１００回繰り返し実行し、ＰＲＯＣ＿Ｄ（命令Ｄ０〜Ｄ４４）を１回実行する例を示している。
【００７６】
次に動作について説明する。
ただし、演算器制御指示生成回路１３によるスタートアドレス等の設定処理以外は、上記実施の形態１と同様であるため、主に演算器制御指示生成回路１３の設定処理について説明する。
【００７７】
制御回路１は、上記実施の形態１と同様に、処理開始前に初期化され、レジスタ群２２のループ指示レジスタ２２ａ、スタートアドレスレジスタ２２ｂ及びエンドアドレスレジスタ２２ｃには“０”が設定される。
また、実行フラグレジスタ２５及び演算終了フラグレジスタ２６には、“無効”（“０”）が設定され、次ＰＣレジスタ２８及び現ＰＣレジスタ２９のカウント値には、“０”が設定される。
【００７８】
シーケンス制御部１１は、シーケンス制御用命令メモリ１２により格納されているシーケンス制御用のプログラムを読み込み、そのプログラム内の命令を解析する。
図４の例では、最初に、ＰＲＯＣ＿Ｃ（命令Ｃ０〜Ｃ９９）を１００回繰り返すために、ループ回数を設定する設定命令（図４では、“ループカウンタを１００に設定する”と記述されている）がプログラムに記述されているので、シーケンス制御部１１の内部演算器１４は、その設定命令にしたがってループ回数を汎用レジスタ１５に設定する。
図４の例では、ループ回数として、“１００”を汎用レジスタ１５に設定する。
【００７９】
次に、オペランドがスタートアドレスであるパラメータ設定命令（記述（１−１））がプログラムに記述されているので、シーケンス制御部１１の演算器制御指示生成回路１３は、書き込みイネーブルをレジスタ群２２に出力することで、そのパラメータ設定命令のオペランドであるスタートアドレス＝０ｘ０１１０をスタートアドレスレジスタ２２ｂに設定する。
次に、オペランドがエンドアドレスであるパラメータ設定命令（記述（１−２））がプログラムに記述されているので、シーケンス制御部１１の演算器制御指示生成回路１３は、書き込みイネーブルをレジスタ群２２に出力することで、そのパラメータ設定命令のオペランドであるエンドアドレス＝０ｘ０１７３をエンドアドレスレジスタ２２ｃに設定する。
【００８０】
次に、オペランドがループ指示であるパラメータ設定命令（記述（１−３））がプログラムに記述されているので、シーケンス制御部１１の演算器制御指示生成回路１３は、書き込みイネーブルをレジスタ群２２に出力することで、そのパラメータ設定命令のオペランドであるループ指示（ＬＯＯＰ＝ＯＮ）をループ指示レジスタ２２ａに設定する。
次に、オペランドを有しない演算開始命令（記述（１−４））がプログラムに記述されているので、シーケンス制御部１１の演算器制御指示生成回路１３が、内部演算器１４の指示の下、「演算開始指示」をＰＣ制御部２３のフラグ生成回路２４に出力する。
以降、上記実施の形態１と同様にして、ＰＲＯＣ＿Ｃ（命令Ｃ０〜Ｃ９９）が１００回ループ実行される。
【００８１】
ＰＲＯＣ＿Ｃ（命令Ｃ０〜Ｃ９９）のループ実行が完了すると、ＰＲＯＣ＿Ｄ（命令Ｄ０〜Ｄ４４）を１回実行するために、オペランドがスタートアドレスであるパラメータ設定命令（記述（３−１））がプログラムに記述されているので、シーケンス制御部１１の演算器制御指示生成回路１３は、書き込みイネーブルをレジスタ群２２に出力することで、そのパラメータ設定命令のオペランドであるスタートアドレス＝０ｘ０１７４をスタートアドレスレジスタ２２ｂに設定する。
次に、オペランドがエンドアドレスであるパラメータ設定命令（記述（３−２））がプログラムに記述されているので、シーケンス制御部１１の演算器制御指示生成回路１３は、書き込みイネーブルをレジスタ群２２に出力することで、そのパラメータ設定命令のオペランドであるエンドアドレス＝０ｘ０１Ａ０をエンドアドレスレジスタ２２ｃに設定する。
【００８２】
次に、オペランドがループ指示であるパラメータ設定命令（記述（３−３））がプログラムに記述されているので、シーケンス制御部１１の演算器制御指示生成回路１３は、書き込みイネーブルをレジスタ群２２に出力することで、そのパラメータ設定命令のオペランドであるループ指示（ＬＯＯＰ＝ＯＦＦ）をループ指示レジスタ２２ａに設定する。
次に、オペランドを有しない演算開始命令（記述（３−４））がプログラムに記述されているので、シーケンス制御部１１の演算器制御指示生成回路１３が、内部演算器１４の指示の下、「演算開始指示」をＰＣ制御部２３のフラグ生成回路２４に出力する。
以降、上記実施の形態１と同様にして、ＰＲＯＣ＿Ｄ（命令Ｄ０〜Ｄ４４）が１回実行される。
【００８３】
以上で明らかなように、この実施の形態２によれば、演算開始命令と別命令であるパラメータ設定命令によって、スタートアドレス、エンドアドレス及びループ指示（ＯＮ／ＯＦＦ）を設定するように構成したので、演算開始命令のオペランドを無くして、その演算開始命令が長くなり過ぎるのを抑制することができる効果を奏する。
【００８４】
この実施の形態２では、パラメータ設定命令と演算開始命令の２つを使用するものについて示したが、パラメータ設定と演算開始を同時に指示する複合命令を設ければ、最後のパラメータ設定と同時に演算の開始を指示することができるため、演算開始指示までのサイクルを１サイクル分削減することができ、制御の高速化を図ることができる。
【００８５】
実施の形態３．
図５はこの発明の実施の形態３によるデータ演算装置を示す構成図であり、図において、図１と同一符号は同一又は相当部分を示すので説明を省略する。
したがって、図１のデータ演算装置と同様に、シーケンス制御部１１は、シーケンス制御用命令メモリ１２、演算器制御指示生成回路１３、内部演算器１４及び汎用レジスタ１５から構成されている。
また、ＰＣ制御部２３は、フラグ生成回路２４、実行フラグレジスタ２５、演算終了フラグレジスタ２６、ＰＣ生成回路２７、次ＰＣレジスタ２８、現ＰＣレジスタ２９及びアドレス生成回路３０から構成されている。
また、命令発行部３１は、演算用命令メモリ３２を内蔵している。
【００８６】
レジスタ格納部４０は２個のレジスタ群４１ａ，４１ｂとセレクタ４２，４３を実装しているメモリなどの記録媒体である。
図５の例では、レジスタ格納部４０が２個のレジスタ群４１ａ，４１ｂを実装しているものについて示しているが、これに限るものではなく、３個以上のレジスタ群を実装しているものであってもよい。
レジスタ群４１ａ，４１ｂは図１のレジスタ群２２に相当し、ループ指示レジスタ２２ａ、スタートアドレスレジスタ２２ｂ及びエンドアドレスレジスタ２２ｃから構成されている。
【００８７】
セレクタ４２はシーケンス制御部１１の演算器制御指示生成回路１３がスタートアドレス、エンドアドレス及びループ指示を設定する際、演算器制御指示生成回路１３から設定先のレジスタ群４１ａ又はレジスタ群４１ｂを示すレジスタ選択信号が出力されると、そのレジスタ選択信号が示すレジスタ群４１ａ又はレジスタ群４１ｂを選択する処理を実施する。
セレクタ４３はＰＣ制御部２３がスタートアドレス、エンドアドレス及びループ指示を取得する際、演算器制御指示生成回路１３から取得先のレジスタ群４１ａ又はレジスタ群４１ｂを示すレジスタ選択信号が出力されると、そのレジスタ選択信号が示すレジスタ群４１ａ又はレジスタ群４１ｂを選択する処理を実施する。
【００８８】
上記実施の形態１では、演算器制御部２１が１個のレジスタ群２２を実装しているものについて示したが、演算器制御部２１が２個のレジスタ群４１ａ，４１ｂを実装して、２個のレジスタ群４１ａ，４１ｂに対して、２個の演算開始命令に係るスタートアドレス、エンドアドレス及びループ指示を設定するようにしてもよい。
以下、具体的に処理内容を説明する。
【００８９】
図６はシーケンス制御用命令メモリ１２により格納されているシーケンス制御用のプログラム内の命令を示す説明図である。
図６では、レジスタ群４１ａを使用して、ＰＲＯＣ＿Ｃ（命令Ｃ０〜Ｃ９９）を１００回繰り返し実行し、レジスタ群４１ｂを使用して、ＰＲＯＣ＿Ｄ（命令Ｄ０〜Ｄ４４）を１回実行し、レジスタ群４１ａのスタートアドレス等を書き換えてから、レジスタ群４１ａを使用して、ＰＲＯＣ＿Ａ（命令Ａ０〜Ａ７）を１回実行する例を示している。
ただし、図６においては、ＰＲＯＣ＿Ｃ（命令Ｃ０〜Ｃ９９）及びＰＲＯＣ＿Ｄ（命令Ｄ０〜Ｄ４４）に係るスタートアドレス等の設定に関する記述を省略している。
【００９０】
まず、シーケンス制御部１１の演算器制御指示生成回路１３は、制御処理の開始前に、ＰＲＯＣ＿Ｃ（命令Ｃ０〜Ｃ９９）に係るスタートアドレス等をレジスタ群４１ａに設定するため、内部演算器１４の指示の下、書き込みイネーブルをレジスタ格納部４０に出力するとともに、設定先がレジスタ群４１ａである旨を示すレジスタ選択信号（“０”）をセレクタ４２に出力する。
セレクタ４２は、演算器制御指示生成回路１３から設定先がレジスタ群４１ａである旨を示すレジスタ選択信号（“０”）を受けると、レジスタ群４１ａを選択して、演算器制御指示生成回路１３から出力されるスタートアドレスをレジスタ群４１ａのスタートアドレスレジスタ２２ｂに設定する。
また、演算器制御指示生成回路１３から出力されるエンドアドレスをレジスタ群４１ａのエンドアドレスレジスタ２２ｃに設定し、演算器制御指示生成回路１３から出力されるループ指示をレジスタ群４１ａのループ指示レジスタ２２ａに設定する。
この例では、スタートアドレス＝０ｘ０１１０がスタートアドレスレジスタ２２ｂに設定され、エンドアドレス＝０ｘ０１７３がエンドアドレスレジスタ２２ｃに設定され、ループ指示（ＬＯＯＰ＝ＯＮ）がループ指示レジスタ２２ａに設定される。
【００９１】
次に、シーケンス制御部１１の演算器制御指示生成回路１３は、制御処理の開始前に、ＰＲＯＣ＿Ｄ（命令Ｄ０〜Ｄ４４）に係るスタートアドレス等をレジスタ群４１ｂに設定するため、内部演算器１４の指示の下、書き込みイネーブルをレジスタ格納部４０に出力するとともに、設定先がレジスタ群４１ｂである旨を示すレジスタ選択信号（“１”）をセレクタ４２に出力する。
セレクタ４２は、演算器制御指示生成回路１３から設定先がレジスタ群４１ｂである旨を示すレジスタ選択信号（“１”）を受けると、レジスタ群４１ｂを選択して、演算器制御指示生成回路１３から出力されるスタートアドレスをレジスタ群４１ｂのスタートアドレスレジスタ２２ｂに設定する。
また、演算器制御指示生成回路１３から出力されるエンドアドレスをレジスタ群４１ｂのエンドアドレスレジスタ２２ｃに設定し、演算器制御指示生成回路１３から出力されるループ指示をレジスタ群４１ｂのループ指示レジスタ２２ａに設定する。
この例では、スタートアドレス＝０ｘ０１７４がスタートアドレスレジスタ２２ｂに設定され、エンドアドレス＝０ｘ０１Ａ０がエンドアドレスレジスタ２２ｃに設定され、ループ指示（ＬＯＯＰ＝ＯＦＦ）がループ指示レジスタ２２ａに設定される。
【００９２】
上記のようにして、ＰＲＯＣ＿Ｃ（命令Ｃ０〜Ｃ９９）及びＰＲＯＣ＿Ｄ（命令Ｄ０〜Ｄ４４）に係るスタートアドレス等を設定すると、ＰＲＯＣ＿Ｃ（命令Ｃ０〜Ｃ９９）及びＰＲＯＣ＿Ｄ（命令Ｄ０〜Ｄ４４）の実行を開始する。
まず、ＰＲＯＣ＿Ｃ（命令Ｃ０〜Ｃ９９）を１００回繰り返すために、ループ回数を設定する設定命令（図６では、“ループカウンタを１００に設定する”と記述されている）がプログラムに記述されているので、シーケンス制御部１１の内部演算器１４は、その設定命令にしたがってループ回数を汎用レジスタ１５に設定する。
図６の例では、ループ回数として、“１００”を汎用レジスタ１５に設定する。
【００９３】
次に、ＰＲＯＣ＿Ｃ（命令Ｃ０〜Ｃ９９）の演算開始命令（記述（１））がプログラムに記述されており、その演算開始命令のオペランドが、取得先のレジスタ群がレジスタ群４１ａである旨を示しているので（レジスタ選択＝０）、シーケンス制御部１１の演算器制御指示生成回路１３が、内部演算器１４の指示の下、レジスタ群４１ａの選択を指示するレジスタ選択信号（“０”）をセレクタ４３に出力する。
セレクタ４３は、演算器制御指示生成回路１３からレジスタ群４１ａの選択を指示するレジスタ選択信号（“０”）を受けると、レジスタ群４１ａを選択して、レジスタ群４１ａのスタートアドレスレジスタ２２ｂに設定されているスタートアドレス＝０ｘ０１１０をＰＣ制御部２３に出力し、レジスタ群４１ａのエンドアドレスレジスタ２２ｃに設定されているエンドアドレス＝０ｘ０１７３をＰＣ制御部２３に出力する。
また、レジスタ群４１ａのループ指示レジスタ２２ａに設定されているループ指示（ＬＯＯＰ＝ＯＮ）をＰＣ制御部２３に出力する。
演算器制御指示生成回路１３は、内部演算器１４の指示の下、「演算開始指示」をＰＣ制御部２３に出力する。
【００９４】
ＰＣ制御部２３は、演算器制御指示生成回路１３から「演算開始指示」を受けると、上記実施の形態１と同様にして、ＰＲＯＣ＿Ｃ（命令Ｃ０〜Ｃ９９）に係る読み出しアドレス“０ｘ０１１０”〜“０ｘ０１７３”を命令発行部３１に順次出力する処理を１００回繰り返し実行する。
命令発行部３１は、上記実施の形態１と同様に、ＰＣ制御部２３から出力された読み出しアドレス“０ｘ０１１０”〜“０ｘ０１７３”に対応する命令Ｃ０〜Ｃ９９を演算器２に１００回繰り返し発行する。
なお、ＰＲＯＣ＿Ｃ（命令Ｃ０〜Ｃ９９）のループ実行は、上記実施の形態１と同様にして、ＰＣ制御部２３がシーケンス制御部１１から「演算終了指示」を受けることで終了する。
【００９５】
ＰＲＯＣ＿Ｃ（命令Ｃ０〜Ｃ９９）のループ実行が終了すると、ＰＲＯＣ＿Ｄ（命令Ｄ０〜Ｄ４４）の演算開始命令（記述（３））がプログラムに記述されており、その演算開始命令のオペランドが、取得先のレジスタ群がレジスタ群４１ｂである旨を示しているので（レジスタ選択＝１）、シーケンス制御部１１の演算器制御指示生成回路１３が、内部演算器１４の指示の下、レジスタ群４１ｂの選択を指示するレジスタ選択信号（“１”）をセレクタ４３に出力する。
セレクタ４３は、演算器制御指示生成回路１３からレジスタ群４１ｂの選択を指示するレジスタ選択信号（“１”）を受けると、レジスタ群４１ｂを選択して、レジスタ群４１ｂのスタートアドレスレジスタ２２ｂに設定されているスタートアドレス＝０ｘ０１７４をＰＣ制御部２３に出力し、レジスタ群４１ｂのエンドアドレスレジスタ２２ｃに設定されているエンドアドレス＝０ｘ０１Ａ０をＰＣ制御部２３に出力する。
また、レジスタ群４１ｂのループ指示レジスタ２２ａに設定されているループ指示（ＬＯＯＰ＝ＯＦＦ）をＰＣ制御部２３に出力する。
演算器制御指示生成回路１３は、内部演算器１４の指示の下、「演算開始指示」をＰＣ制御部２３に出力する。
【００９６】
ＰＣ制御部２３は、演算器制御指示生成回路１３から「演算開始指示」を受けると、上記実施の形態１と同様にして、ＰＲＯＣ＿Ｄ（命令Ｄ０〜Ｄ４４）に係る読み出しアドレス“０ｘ０１７４”〜“０ｘ０１Ａ０”を命令発行部３１に順次出力する処理を１回実行する。
命令発行部３１は、上記実施の形態１と同様に、ＰＣ制御部２３から出力された読み出しアドレス“０ｘ０１７４”〜“０ｘ０１Ａ０”に対応する命令Ｄ０〜Ｄ４４を演算器２に１回発行する。
なお、ＰＲＯＣ＿Ｄ（命令Ｄ０〜Ｄ４４）の実行は、上記実施の形態１と同様に、命令発行部３１から命令Ｄ０〜Ｄ４４が発行されることで終了する。
【００９７】
次に、シーケンス制御用のプログラムには、ＰＲＯＣ＿Ｄ（命令Ｄ０〜Ｄ４４）の実行中に、レジスタ群４１ａのスタートアドレス等を書き換えるパラメータ設定命令が記述されている。
即ち、設定先のレジスタ群がレジスタ群４１ａ（レジスタ選択＝０）である旨を示すオペランドと、スタートアドレスが“０ｘ００００”である旨を示すオペランドとを有するパラメータ設定命令（記述（４−１））がプログラムに記述されているので、演算器制御部２１におけるＰＲＯＣ＿Ｄ（命令Ｄ０〜Ｄ４４）の発行処理と並行して、シーケンス制御部１１の演算器制御指示生成回路１３は、内部演算器１４の指示の下、書き込みイネーブルをレジスタ格納部４０に出力するとともに、設定先がレジスタ群４１ａである旨を示すレジスタ選択信号（“０”）と、スタートアドレス＝“０ｘ００００”とをセレクタ４２に出力する。
セレクタ４２は、演算器制御指示生成回路１３から設定先がレジスタ群４１ａである旨を示すレジスタ選択信号（“０”）を受けると、レジスタ群４１ａを選択して、演算器制御指示生成回路１３から出力されたスタートアドレス＝“０ｘ００００”をレジスタ群４１ａのスタートアドレスレジスタ２２ｂに設定する。
【００９８】
次に、設定先のレジスタ群がレジスタ群４１ａ（レジスタ選択＝０）である旨を示すオペランドと、エンドアドレスが“０ｘ０００７”である旨を示すオペランドとを有するパラメータ設定命令（記述（４−２））がプログラムに記述されているので、演算器制御部２１におけるＰＲＯＣ＿Ｄ（命令Ｄ０〜Ｄ４４）の発行処理と並行して、シーケンス制御部１１の演算器制御指示生成回路１３は、内部演算器１４の指示の下、書き込みイネーブルをレジスタ格納部４０に出力するとともに、設定先がレジスタ群４１ａである旨を示すレジスタ選択信号（“０”）と、エンドアドレス＝“０ｘ０００７”とをセレクタ４２に出力する。
セレクタ４２は、演算器制御指示生成回路１３から設定先がレジスタ群４１ａである旨を示すレジスタ選択信号（“０”）を受けると、レジスタ群４１ａを選択して、演算器制御指示生成回路１３から出力されたエンドアドレス＝“０ｘ０００７”をレジスタ群４１ａのエンドアドレスレジスタ２２ｃに設定する。
【００９９】
次に、設定先のレジスタ群がレジスタ群４１ａ（レジスタ選択＝０）である旨を示すオペランドと、ループ指示が“ＯＦＦ”である旨を示すオペランドとを有するパラメータ設定命令（記述（４−３））がプログラムに記述されているので、演算器制御部２１におけるＰＲＯＣ＿Ｄ（命令Ｄ０〜Ｄ４４）の発行処理と並行して、シーケンス制御部１１の演算器制御指示生成回路１３は、内部演算器１４の指示の下、書き込みイネーブルをレジスタ格納部４０に出力するとともに、設定先がレジスタ群４１ａである旨を示すレジスタ選択信号（“０”）と、ループ指示（ＬＯＯＰ＝ＯＦＦ）とをセレクタ４２に出力する。
セレクタ４２は、演算器制御指示生成回路１３から設定先がレジスタ群４１ａである旨を示すレジスタ選択信号（“０”）を受けると、レジスタ群４１ａを選択して、演算器制御指示生成回路１３から出力されたループ指示（ＬＯＯＰ＝ＯＦＦ）をレジスタ群４１ａのループ指示レジスタ２２ａに設定する。
【０１００】
シーケンス制御部１１は、ＰＲＯＣ＿Ａ（命令Ａ０〜Ａ７）に係るスタートアドレス等の設定が完了すると、ＰＲＯＣ＿Ｄ（命令Ｄ０〜Ｄ４４）の実行が完了するまで待機する。あるいは、別の単一演算の実行等を行う。
シーケンス制御部１１の演算器制御指示生成回路１３は、ＰＲＯＣ＿Ａ（命令Ａ０〜Ａ７）の演算開始命令（記述（５））がプログラムに記述されており、その演算開始命令のオペランドが、取得先のレジスタ群がレジスタ群４１ａである旨を示しているので（レジスタ選択＝０）、ＰＣ制御部２３のＰＣ生成回路２７から「１ループ終了通知」が出力されると、内部演算器１４の指示の下、レジスタ群４１ａの選択を指示するレジスタ選択信号（“０”）をセレクタ４３に出力する。
【０１０１】
セレクタ４３は、演算器制御指示生成回路１３からレジスタ群４１ａの選択を指示するレジスタ選択信号（“０”）を受けると、レジスタ群４１ａを選択して、レジスタ群４１ａのスタートアドレスレジスタ２２ｂに設定されているスタートアドレス＝０ｘ００００をＰＣ制御部２３に出力し、レジスタ群４１ａのエンドアドレスレジスタ２２ｃに設定されているエンドアドレス＝０ｘ０００７をＰＣ制御部２３に出力する。
また、レジスタ群４１ａのループ指示レジスタ２２ａに設定されているループ指示（ＬＯＯＰ＝ＯＦＦ）をＰＣ制御部２３に出力する。
演算器制御指示生成回路１３は、内部演算器１４の指示の下、「演算開始指示」をＰＣ制御部２３に出力する。
【０１０２】
ＰＣ制御部２３は、演算器制御指示生成回路１３から「演算開始指示」を受けると、ＰＲＯＣ＿Ｄ（命令Ｄ０〜Ｄ４４）に係る読み出しアドレスを出力する場合と同様にして、ＰＲＯＣ＿Ａ（命令Ａ０〜Ａ７）に係る読み出しアドレス“０ｘ００００”〜“０ｘ０００７”を命令発行部３１に順次出力する処理を１回実行する。
命令発行部３１は、ＰＣ制御部２３から出力された読み出しアドレス“０ｘ００００”〜“０ｘ０００７”に対応する命令Ａ０〜Ａ７を演算器２に１回発行する。
なお、ＰＲＯＣ＿Ａ（命令Ａ０〜Ａ７）の実行は、命令発行部３１から命令Ａ０〜Ａ７が発行されることで終了する。
【０１０３】
以上で明らかなように、この実施の形態３によれば、演算器制御部２１が２個のレジスタ群４１ａ，４１ｂを実装して、２個のレジスタ群４１ａ，４１ｂに対して、２個の演算開始命令に係るスタートアドレス、エンドアドレス及びループ指示を設定するように構成したので、予め制御処理の開始前に、２個の演算開始命令に係るスタートアドレス、エンドアドレス及びループ指示をレジスタ群４１ａ，４１ｂに設定していれば、２個目の演算開始命令を実行する前に、２個目の演算開始命令に係るスタートアドレス等を設定する処理が不要になり、更なる演算処理の高速化を図ることができる効果を奏する。この効果は、レジスタ群の実装数が多いほど大きくなる。
【０１０４】
なお、この実施の形態３では、シーケンス制御部１１が演算開始命令に係るスタートアドレス等を２個のレジスタ群４１ａ，４１ｂに設定するものについて示したが、制御処理の開始前に、外部から演算開始命令に係るスタートアドレス等を２個のレジスタ群４１ａ，４１ｂにダウンロードするようにしてもよい。
【符号の説明】
【０１０５】
１  制御回路、２  演算器、１１  シーケンス制御部、１２  シーケンス制御用命令メモリ、１３  演算器制御指示生成回路（初期設定手段）、１４  内部演算器（演算終了判定手段）、１５  汎用レジスタ、２１  演算器制御部、２２  レジスタ群、２２ａ  ループ指示レジスタ、２２ｂ  スタートアドレスレジスタ、２２ｃ  エンドアドレスレジスタ、２３  ＰＣ制御部、２４  フラグ生成回路（繰り返し処理制御手段）、２５  実行フラグレジスタ（繰り返し処理制御手段）、２６  演算終了フラグレジスタ（繰り返し処理制御手段）、２７  ＰＣ生成回路（アドレス出力手段、繰り返し処理制御手段）、２８  次ＰＣレジスタ（アドレス出力手段、繰り返し処理制御手段）、２９  現ＰＣレジスタ（アドレス出力手段、繰り返し処理制御手段）、３０  アドレス生成回路（アドレス出力手段）、３１  命令発行部（命令発行手段）、３２  演算用命令メモリ、４０  レジスタ格納部、４１ａ，４１ｂ  レジスタ群、４２，４３  セレクタ。
【図１】
0005511299.tif 000002
【図２】
0005511299.tif 000003
【図３】
0005511299.tif 000004
【図４】
0005511299.tif 000005
【図５】
0005511299.tif 000006
【図６】
0005511299.tif 000007
【図７】
0005511299.tif 000008