(57)【要約】【課題】多重ループ処理を効率良く実行できる演算装置及び電子機器等を提供すること。【解決手段】演算装置は、命令をデコードする命令デコード部１７０と、デコード結果に基づいて、第１、第２のループ処理で実行される命令の開始アドレスが設定される第１、第２のループ開始アドレス用レジスター１４０、１５０と、デコード結果に基づいて、第１、第２のループ処理で実行される命令の命令数が設定される第１第２のループ命令数レジスター１１０、２１０と、デコード結果に基づいて、第１、第２のループ処理のループ回数が設定される第１、第２のループ回数レジスター１２０、２２０と、デコード結果に基づいて、第１、第２のループ処理を実行する命令実行部１９０とを含む。【選択図】図２
2010277124.tif 000002
【特許請求の範囲】
【請求項１】
命令をデコードする命令デコード部と、
デコード結果に基づいて、第１のループ処理で実行される命令の開始アドレスが設定される第１のループ開始アドレス用レジスターと、
デコード結果に基づいて、前記第１のループ処理で実行される命令の命令数が設定される第１のループ命令数レジスターと、
デコード結果に基づいて、前記第１のループ処理のループ回数が設定される第１のループ回数レジスターと、
デコード結果に基づいて、第２のループ処理で実行される命令の開始アドレスが設定される第２のループ開始アドレス用レジスターと、
デコード結果に基づいて、前記第２のループ処理で実行される命令の命令数が設定される第２のループ命令数レジスターと、
デコード結果に基づいて、前記第２のループ処理のループ回数が設定される第２のループ回数レジスターと、
デコード結果に基づいて、前記第１のループ処理及び前記第２のループ処理を実行する命令実行部とを含み、
前記第１のループ処理のループ回数変更命令がフェッチされデコードされた場合には、ループ回数変更命令で指定される増減値だけ前記第１のループ回数レジスターの値が増減され、
前記第２のループ処理のループ回数変更命令がフェッチされデコードされた場合には、ループ回数変更命令で指定される増減値だけ前記第２のループ回数レジスターの値が増減されることを特徴とする演算装置。
【請求項２】
請求項１において、
デコード結果に基づいて、前記第１のループ命令数レジスターの値及び前記第１のループ回数レジスターの値の更新処理を行う第１のカウント制御回路と、
デコード結果に基づいて、前記第２のループ命令数レジスターの値及び前記第２のループ回数レジスターの値の更新処理を行う第２のカウント制御回路とを含むことを特徴とする演算装置。
【請求項３】
請求項２において、
前記第２のカウント制御回路は、
前記第２のループ処理が実行される期間に、前記第１のカウント制御回路に対して前記第１のループ命令数レジスター及び前記第１のループ回数レジスターのレジスター値の更新処理の停止を指示する制御信号を出力することを特徴とする演算装置。
【請求項４】
請求項３において、
前記第２のカウント制御回路は、
前記第２のループ処理の最終回のループが実行される期間には、前記制御信号による更新処理の停止を解除することを特徴とする演算装置。
【請求項５】
請求項２乃至４のいずれかにおいて、
前記命令実行部で実行される実行命令のアドレスが設定されるプログラムカウンターと、
前記プログラムカウンターを制御するプログラムカウンター制御回路を含むことを特徴とする演算装置。
【請求項６】
請求項５において、
前記プログラムカウンター制御回路は、
前記第１のループ処理の実行が開始される前に、前記第１のループ開始アドレス用レジスターの値を前記プログラムカウンターにセットし、
前記第２のループ処理の実行が開始される前に、前記第２のループ開始アドレス用レジスターの値を前記プログラムカウンターにセットし、
前記第１のループ処理の実行中に、前記第１のカウント制御回路からアドレス選択信号を受けた場合には、前記第１のループ開始アドレス用レジスターの値を前記プログラムカウンターにセットし、
前記第２のループ処理の実行中に、前記第２のカウント制御回路からアドレス選択信号を受けた場合には、前記第２のループ開始アドレス用レジスターの値を前記プログラムカウンターにセットすることを特徴とする演算装置。
【請求項７】
請求項１乃至６のいずれかにおいて、
デコード結果に基づいて、第３のループ処理で実行される命令の開始アドレスが設定される第３のループ開始アドレス用レジスターと、
デコード結果に基づいて、前記第３のループ処理で実行される命令の命令数が設定される第３のループ命令数レジスターと、
デコード結果に基づいて、前記第３のループ処理のループ回数が設定される第３のループ回数レジスターとを含み、
前記命令実行部は、デコード結果に基づいて、前記第３のループ処理を実行し、
前記第３のループ処理のループ回数変更命令がフェッチされデコードされた場合には、ループ回数変更命令で指定される増減値だけ前記第３のループ回数レジスターの値が増減されることを特徴とする演算装置。
【請求項８】
請求項７において、
デコード結果に基づいて、前記第３のループ命令数レジスターの値及び前記第３のループ回数レジスターの値の更新処理を行う第３のカウント制御回路を含むことを特徴とする演算装置。
【請求項９】
請求項８において、
前記第３のカウント制御回路は、
前記第３のループ処理が実行される期間に、前記第１のカウント制御回路に対して前記第１のループ命令数レジスターの値及び前記第１のループ回数レジスターの値の更新処理の停止と、前記第２のカウント制御回路に対して前記第２のループ命令数レジスターの値及び前記第２のループ回数レジスターの値の更新処理の停止とを指示する制御信号を出力することを特徴とする演算装置。
【請求項１０】
請求項９において、
前記プログラムカウンター制御回路は、
前記第３のループ処理の実行が開始される前に、前記第３のループ開始アドレス用レジスターの値を前記プログラムカウンターにセットし、
前記第３のループ処理の実行中に、前記第３のカウント制御回路からアドレス選択信号を受けた場合には、前記第３のループ開始アドレス用レジスターの値を前記プログラムカウンターにセットすることを特徴とする演算装置。
【請求項１１】
命令をデコードする命令デコード部と、
デコード結果に基づいて、第１のループ処理で実行される命令の開始アドレスが設定される第１のループ開始アドレス用レジスターと、
デコード結果に基づいて、前記第１のループ処理で実行される命令の命令数が設定される第１のループ命令数レジスターと、
デコード結果に基づいて、前記第１のループ処理のループ回数が設定される第１のループ回数レジスターと、
デコード結果に基づいて、第２のループ処理で実行される命令の開始アドレスが設定される第２のループ開始アドレス用レジスターと、
デコード結果に基づいて、前記第２のループ処理で実行される命令の命令数が設定される第２のループ命令数レジスターと、
デコード結果に基づいて、前記第２のループ処理のループ回数が設定される第２のループ回数レジスターと、
デコード結果に基づいて、前記第１のループ処理及び前記第２のループ処理を実行する命令実行部と、
デコード結果に基づいて、前記第１のループ命令数レジスター及び前記第１のループ回数レジスターの値の更新処理を行う第１のカウント制御回路と、
デコード結果に基づいて、前記第２のループ命令数レジスター及び前記第２のループ回数レジスターの値の更新処理を行う第２のカウント制御回路とを含み、
前記第２のカウント制御回路は、前記第２のループ処理が実行される期間に、前記第１のカウント制御回路に対して前記第１のループ命令数レジスターの値及び前記第１のループ回数レジスターの値の更新処理の停止を指示する制御信号を出力することを特徴とする演算装置。
【請求項１２】
請求項１乃至１１のいずれかに記載の演算装置を含むことを特徴とする電子機器。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算装置及び電子機器等に関する。
【背景技術】
【０００２】
近年デジタル信号処理の分野では、高速でかつ低消費電力のデータ処理装置に対する要求が高まっている。特にセンサーを搭載した携帯機器（脈拍計、デジタルカメラ等）では、センサーの出力信号をリアルタイムにかつ低消費電力で処理する必要がある。この課題に対して、積和演算などデジタル信号処理に多用される演算処理を効率的に実行するための専用プロセッサー（アクセラレーター、サブプロセッサー等）が開発されている。特にこのような演算処理ではループ処理が多く用いられるために、多重ループ処理を効率良く実行できる演算装置が求められている。
【０００３】
この課題に対して例えば特許文献１には、複数のプログラムカウンターが並列的に多重ループを効率良く実行する手法が開示されている。しかしながらこの手法では、実行中にループ内でループ回数を変更することができないなどの課題があった。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００５−３５２７５５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明の幾つかの態様によれば、多重ループ処理を効率良く実行できる演算装置及び電子機器等を提供できる。
【課題を解決するための手段】
【０００６】
本発明の一態様は、命令をデコードする命令デコード部と、デコード結果に基づいて、第１のループ処理で実行される命令の開始アドレスが設定される第１のループ開始アドレス用レジスターと、デコード結果に基づいて、前記第１のループ処理で実行される命令の命令数が設定される第１のループ命令数レジスターと、デコード結果に基づいて、前記第１のループ処理のループ回数が設定される第１のループ回数レジスターと、デコード結果に基づいて、第２のループ処理で実行される命令の開始アドレスが設定される第２のループ開始アドレス用レジスターと、デコード結果に基づいて、前記第２のループ処理で実行される命令の命令数が設定される第２のループ命令数レジスターと、デコード結果に基づいて、前記第２のループ処理のループ回数が設定される第２のループ回数レジスターと、デコード結果に基づいて、前記第１のループ処理及び前記第２のループ処理を実行する命令実行部とを含み、前記第１のループ処理のループ回数変更命令がフェッチされデコードされた場合には、ループ回数変更命令で指定される増減値だけ前記第１のループ回数レジスターの値が増減され、前記第２のループ処理のループ回数変更命令がフェッチされデコードされた場合には、ループ回数変更命令で指定される増減値だけ前記第２のループ回数レジスターの値が増減されることを特徴とする演算装置に関係する。
【０００７】
本発明の一態様によれば、ループ開始アドレス用レジスター、ループ命令数レジスター及びループ回数レジスターによるループ処理制御をすることができる。これによりハードウェアによる効率の良いループ処理ができる。さらにループ回数変更命令を用いて、ループ処理中にループ回数を変更することができるから、処理回数を低減して効率の良いループ処理ができる。
【０００８】
また本発明の一態様では、デコード結果に基づいて、前記第１のループ命令数レジスターの値及び前記第１のループ回数レジスターの値の更新処理を行う第１のカウント制御回路と、デコード結果に基づいて、前記第２のループ命令数レジスターの値及び前記第２のループ回数レジスターの値の更新処理を行う第２のカウント制御回路とを含んでもよい。
【０００９】
このようにすれば、ループ命令数及びループ回数をカウントすることで、容易にハードウェアによるループ制御を実現することができる。
【００１０】
また本発明の一態様では、前記第２のカウント制御回路は、前記第２のループ処理が実行される期間に、前記第１のカウント制御回路に対して前記第１のループ命令数レジスター及び前記第１のループ回数レジスターのレジスター値の更新処理の停止を指示する制御信号を出力してもよい。
【００１１】
このようにすれば、２重ループ処理の場合でも、処理負荷を重くすることなく、ループ処理を制御することができる。
【００１２】
また本発明の一態様では、前記第２のカウント制御回路は、前記第２のループ処理の最終回のループが実行される期間には、前記制御信号による更新処理の停止を解除してもよい。
【００１３】
このようにすれば、２重ループ処理の場合でも、特別の処理をすることなく、ループ処理を制御することができる。
【００１４】
また本発明の一態様では、前記命令実行部で実行される実行命令のアドレスが設定されるプログラムカウンターと、前記プログラムカウンターを制御するプログラムカウンター制御回路を含んでもよい。
【００１５】
このようにすれば、プログラムカウンター制御回路により、ループ処理中に実行する命令の命令アドレスを更新することができる。
【００１６】
また本発明の一態様では、前記プログラムカウンター制御回路は、前記第１のループ処理の実行が開始される前に、前記第１のループ開始アドレス用レジスターの値を前記プログラムカウンターにセットし、前記第２のループ処理の実行が開始される前に、前記第２のループ開始アドレス用レジスターの値を前記プログラムカウンターにセットし、前記第１のループ処理の実行中に、前記第１のカウント制御回路からアドレス選択信号を受けた場合には、前記第１のループ開始アドレス用レジスターの値を前記プログラムカウンターにセットし、前記第２のループ処理の実行中に、前記第２のカウント制御回路からアドレス選択信号を受けた場合には、前記第２のループ開始アドレス用レジスターの値を前記プログラムカウンターにセットしてもよい。
【００１７】
このようにすれば、ループ処理の最初にループ開始アドレスに格納される命令を実行することができ、さらにループの最後の命令が実行された後、再びループの最初の命令に戻って実行することができる。
【００１８】
また本発明の一態様では、デコード結果に基づいて、第３のループ処理で実行される命令の開始アドレスが設定される第３のループ開始アドレス用レジスターと、デコード結果に基づいて、前記第３のループ処理で実行される命令の命令数が設定される第３のループ命令数レジスターと、デコード結果に基づいて、前記第３のループ処理のループ回数が設定される第３のループ回数レジスターとを含み、前記命令実行部は、デコード結果に基づいて、前記第３のループ処理を実行し、前記第３のループ処理のループ回数変更命令がフェッチされデコードされた場合には、ループ回数変更命令で指定される増減値だけ前記第３のループ回数レジスターの値が増減されてもよい。
【００１９】
このようにすれば、３重ループ処理の場合でも、ループ開始アドレス用レジスター、ループ命令数レジスター及びループ回数レジスターによるループ処理制御をすることができる。これによりハードウェアによる効率の良いループ処理ができる。さらにループ回数変更命令を用いて、ループ処理中にループ回数を変更することができるから、処理回数を低減して効率の良いループ処理ができる。
【００２０】
また本発明の一態様では、デコード結果に基づいて、前記第３のループ命令数レジスターの値及び前記第３のループ回数レジスターの値の更新処理を行う第３のカウント制御回路を含んでもよい。
【００２１】
このようにすれば、３重ループ処理の場合でも、ループ命令数及びループ回数をカウントすることで、容易にハードウェアによるループ制御を実現することができる。
【００２２】
また本発明の一態様では、前記第３のループ処理が実行される期間に、前記第１のカウント制御回路に対して前記第１のループ命令数レジスターの値及び前記第１のループ回数レジスターの値の更新処理の停止と、前記第２のカウント制御回路に対して前記第２のループ命令数レジスターの値及び前記第２のループ回数レジスターの値の更新処理の停止とを指示する制御信号を出力してもよい。
【００２３】
このようにすれば、３重ループ処理の場合でも、処理負荷を重くすることなく、ループ処理を制御することができる。
【００２４】
また本発明の一態様では、前記プログラムカウンター制御回路は、前記第３のループ処理の実行が開始される前に、前記第３のループ開始アドレス用レジスターの値を前記プログラムカウンターにセットし、前記第３のループ処理の実行中に、前記第３のカウント制御回路からアドレス選択信号を受けた場合には、前記第３のループ開始アドレス用レジスターの値を前記プログラムカウンターにセットしてもよい。
【００２５】
このようにすれば、３重ループ処理の場合でも、ループ処理の最初にループ開始アドレスに格納される命令を実行することができ、さらにループの最後の命令が実行された後、再びループの最初の命令に戻って実行することができる。
【００２６】
本発明の他の態様は、命令をデコードする命令デコード部と、デコード結果に基づいて、第１のループ処理で実行される命令の開始アドレスが設定される第１のループ開始アドレス用レジスターと、デコード結果に基づいて、前記第１のループ処理で実行される命令の命令数が設定される第１のループ命令数レジスターと、デコード結果に基づいて、前記第１のループ処理のループ回数が設定される第１のループ回数レジスターと、デコード結果に基づいて、第２のループ処理で実行される命令の開始アドレスが設定される第２のループ開始アドレス用レジスターと、デコード結果に基づいて、前記第２のループ処理で実行される命令の命令数が設定される第２のループ命令数レジスターと、デコード結果に基づいて、前記第２のループ処理のループ回数が設定される第２のループ回数レジスターと、デコード結果に基づいて、前記第１のループ処理及び前記第２のループ処理を実行する命令実行部と、デコード結果に基づいて、前記第１のループ命令数レジスター及び前記第１のループ回数レジスターの値の更新処理を行う第１のカウント制御回路と、デコード結果に基づいて、前記第２のループ命令数レジスター及び前記第２のループ回数レジスターの値の更新処理を行う第２のカウント制御回路とを含み、前記第２のカウント制御回路は、前記第２のループ処理が実行される期間に、前記第１のカウント制御回路に対して前記第１のループ命令数レジスターの値及び前記第１のループ回数レジスターの値の更新処理の停止を指示する制御信号を出力することを特徴とする演算装置に関係する。
【００２７】
本発明の一態様によれば、ループ開始アドレス用レジスター、ループ命令数レジスター及びループ回数レジスターによるループ処理制御をすることができる。ループ命令数及びループ回数をカウントすることで、容易にハードウェアによるループ制御を実現することができる。さらに２重ループ処理の場合でも、処理負荷を重くすることなく、ループ処理を制御することができる。
【００２８】
本発明の他の態様は、上記に記載の演算装置を含む電子機器に関係する。
【図面の簡単な説明】
【００２９】
【図１】図１（Ａ）、図１（Ｂ）はループ処理の制御方法を説明する図。
【図２】演算装置の基本的な構成例。
【図３】カウント制御回路の基本的な動作のフローチャート。
【図４】プログラムカウンター制御回路の基本的な動作のフローチャート。
【図５】図５（Ａ）、図５（Ｂ）は２重ループ処理を説明する図。
【図６】図６（Ａ）、図６（Ｂ）はループ回数を変更する処理を説明する図。
【図７】電子機器の一例。
【発明を実施するための形態】
【００３０】
以下、本発明の好適な実施の形態について詳細に説明する。なお以下に説明する本実施形態は特許請求の範囲に記載された本発明の内容を不当に限定するものではなく、本実施形態で説明される構成の全てが本発明の解決手段として必須であるとは限らない。
【００３１】
１．ループ処理の制御
本実施形態の演算装置は、ループ処理を含む演算を効率的に実行することを特徴とする。本実施形態の演算装置の構成を説明する前に、本実施形態の演算装置がどのような方法でループ処理を制御するかを以下に説明する。
【００３２】
図１（Ａ）は基本的な２重ループを含む処理の一例である。ＬＯＯＰ１及びＬＯＯＰ２はループ命令であり、ループ開始アドレス、ループ命令数及びループ回数を設定してループ処理を開始する。ここでループ開始アドレスとは、ループ内で最初に記述された命令のアドレス（命令が記憶されているメモリー上のアドレス）である。ループ命令数とは、そのループに含まれる命令の数（ただし、そのループ命令自身はカウントしない）である。ループ回数とは、そのループ処理の繰り返しの回数である。ＩＮＳ１〜ＩＮＳ４は、ループ命令以外の命令である。
【００３３】
ＬＯＯＰ１で設定される第１のループに含まれる命令は、ＩＮＳ１、ＬＯＯＰ２、ＩＮＳ２、ＩＮＳ３及びＩＮＳ４である。したがって、第１のループの命令数は５である。一方、ＬＯＯＰ２で設定される第２のループに含まれる命令はＩＮＳ２及びＩＮＳ３であるから、第２のループの命令数は２である。このようにループ命令数は、実際にループ処理で実行される命令の数ではなく、プログラム上でループ内に記述された命令の数である。
【００３４】
図１（Ｂ）は、上記の２重ループ処理を実行する際の第１、第２のループの制御方法を説明する図である。図１（Ｂ）では各実行命令が実行される順に、各ステップを上から下へ示してある。ここでＬＯＯＰ１の命令アドレスをａ１、ＩＮＳ１の命令アドレスをａ２、ＬＯＯＰ２の命令アドレスをａ３、ＩＮＳ２の命令アドレスをａ４、ＩＮＳ３の命令アドレスをａ５、ＩＮＳ４の命令アドレスをａ６とした。
【００３５】
ループ処理を制御するためには、各ループについてループ命令数及びループ回数をカウントすることが必要である。図１（Ｂ）は、第１、第２のループについてループ命令数及びループ回数のカウント値が、各ステップでどのように変化するかを示す。
【００３６】
ステップ１では、ループ命令ＬＯＯＰ１が実行され、ループ開始アドレスとしてａ２、ループ命令数として５、ループ回数として２が設定される。プログラムカウンターにループ開始アドレスａ２がセットされる。
【００３７】
ステップ２では、ループ開始アドレスａ２に対応する実行命令ＩＮＳ１が実行される。ここで第１のループの命令数及びループ回数をカウントする。実行後にプログラムカウンターにａ３をセットする。
【００３８】
ステップ３では、ループ命令ＬＯＯＰ２が実行され、ループ開始アドレスとしてａ４、ループ命令数として２、ループ回数として２が設定される。ここで第１のループの命令数をカウントして、カウント値を２とする。プログラムカウンターにループ開始アドレスａ４がセットされる。
【００３９】
ステップ４では、ループ開始アドレスａ４に対応する実行命令ＩＮＳ２が実行される。ここで第２のループの命令数及びループ回数をカウントする。実行後にプログラムカウンターにａ５をセットする。
【００４０】
ステップ５では、命令アドレスａ５に対応する実行命令ＩＮＳ３が実行される。ここで第２のループの命令数をカウントして、カウント値を２とする。カウント値が設定されたループ命令数２に達したが、ループ回数のカウント値が設定されたループ回数２に達していないから、プログラムカウンターにループ開始アドレスａ４を再びセットする。
【００４１】
ステップ６では、命令アドレスａ４に対応する実行命令ＩＮＳ２が実行される。ここで第２のループの命令数及びループ回数をカウントする。ただし、ループ命令数は再度１からカウントする。また、ここでは第１のループの命令数もカウントし、カウント値を３とする。実行後にプログラムカウンターにａ５をセットする。
【００４２】
ステップ７では、命令アドレスａ５に対応する実行命令ＩＮＳ３が実行される。ここで第２のループの命令数をカウントして、カウント値を２とする。ループ命令数及びループ回数共に設定値に達したから、第２のループ処理は終了する。第１のループの命令数をカウントし、カウント値を４とする。実行後にプログラムカウンターにａ６をセットする。
【００４３】
ステップ８では、命令アドレスａ６に対応する実行命令ＩＮＳ４が実行される。第１のループの命令数をカウントし、カウント値を５とする。カウント値が設定されたループ命令数５に達したが、ループ回数のカウント値が設定されたループ回数２に達していないから、プログラムカウンターにループ開始アドレスａ２を再びセットする。
【００４４】
ステップ９では、命令アドレスａ２に対応する実行命令ＩＮＳ１が実行される。ここで第１のループの命令数及びループ回数をカウントする。ただし、ループ命令数は再度１からカウントする。実行後にプログラムカウンターにａ３をセットする。
【００４５】
ステップ１０では、ループ命令ＬＯＯＰ２が実行され、ステップ１１からステップ１４まで、上記のステップ４〜ステップ７と同様に第２のループ処理が実行される。
【００４６】
ステップ１５では、命令アドレスａ６に対応する実行命令ＩＮＳ４が実行される。第１のループの命令数をカウントし、カウント値を５とする。ここでループ命令数及びループ回数共に設定値に達したから、第１のループ処理は終了する。
【００４７】
図１（Ｂ）の命令アドレスの推移を見ると分かるように、ステップ６、ステップ９、ステップ１３で命令アドレスが前に戻っている。すなわちループ開始アドレスに戻っていることが分かる。言い換えれば、ステップ５、ステップ８、ステップ１２で命令実行後にプログラムカウンターにループ開始アドレスをセットすればよい。
【００４８】
このようにするためには、例えばステップ５、ステップ１２に示すように、ループ命令数のカウント値は設定値２に達したが、まだループ回数のカウント値が設定値２に達していないという条件が満たされた場合に、プログラムカウンターにループ開始アドレスをセットすればよい。
【００４９】
この条件は、第１のループについても適用できる。例えばステップ８に示すように、ループ命令数のカウント値は設定値５に達したが、まだループ回数のカウント値が設定値２に達していないという条件が満たされた場合に、プログラムカウンターにループ開始アドレスをセットすればよい。ただし第１のループでは、ループ命令数のカウント方法に注意が必要である。例えばステップ４、ステップ５及びステップ１１、ステップ１２では第１のループのループ命令数をカウントしない。
【００５０】
このようにするためには、第２のループに含まれる命令（例えばＩＮＳ２、ＩＮＳ３）を実行する際には、第２のループの最終回（例えばステップ６、７、１３、１４）を除いて、第１のループの命令数をカウントしなければよい。
【００５１】
本実施形態の演算装置では、以上説明した手法をハードウェアで実現することで、効率の良いループ処理を実行することができる。
【００５２】
２．演算装置の基本的な構成例
図２に本実施形態の演算装置の基本的な構成例を示す。本構成例の演算装置は、第１、第２のループ開始アドレス用レジスター１４０、１５０と、第１、第２のループ命令数レジスター１１０、２１０と、第１、第２のループ回数レジスター１２０、２２０とを含む。第１、第２のループ開始アドレス用レジスター１４０、１５０には、第１、第２のループ処理で実行される命令の開始アドレスがそれぞれ設定される。第１、第２のループ命令数レジスター１１０、２１０には、第１、第２のループ処理で実行される命令の命令数がそれぞれ設定される。第１、第２のループ回数レジスター１２０、２２０には、第１、第２のループ処理のループ回数がそれぞれ設定される。
【００５３】
さらに本構成例の演算装置は、命令をデコードする命令デコード部１７０と、デコード結果に基づいて第１、第２のループ処理を実行する命令実行部１９０とを含む。
【００５４】
さらに本構成例の演算装置は、第１、第２のカウント制御回路１００、２００と、プログラムカウンター１６０と、プログラムカウンター制御回路１３０とを含む。第１、第２のカウント制御回路１００、２００は、それぞれデコード結果に基づいて第１、第２のループ命令数レジスターの値及び第１、第２のループ回数レジスターの値の更新処理を行う。プログラムカウンター１６０には、命令実行部で実行される実行命令のアドレスが設定され、プログラムカウンター制御回路１３０はプログラムカウンター１６０を制御する。
【００５５】
なお、本実施形態の演算装置は図２の構成に限定されず、その構成要素の一部を省略したり、他の構成要素に置き換えたり、他の構成要素を追加するなどの種々の変形実施が可能である。
【００５６】
図３は、第１、第２のカウント制御回路１００、２００の基本的な動作のフローチャートである。なお、２つのカウント制御回路１００、２００の動作フローは同一であるから、２つを区別して説明する必要はなく、図３では「第１の」或いは「第２の」という記載は省略した。第１、第２のループ命令数レジスター１１０、２１０及び第１、第２のループ回数レジスター１２０、２２０についても、同様に「第１の」或いは「第２の」という記載は省略した。
【００５７】
以下に、図３を用いて第１、第２のカウント制御回路１００、２００の動作を説明する。以下の説明においても、特に必要のある場合を除いて、「第１の」或いは「第２の」という記載は省略する。また、図の符号は「第１の」構成要素についてのみ記載する。
【００５８】
先に図１（Ｂ）を用いて説明したように、基本的なループ制御は、ループ命令数及びループ回数をカウントし、それらの値とループ命令で設定された値とを比較して、上述した条件が満足される場合にプログラムカウンターにループ開始アドレスをセットすることで行われる。
【００５９】
図３に示すフローチャートでは、ループ命令数及びループ回数を１からカウントしていくのではなく、第１、第２のループ命令数レジスター１１０、２１０及び第１、第２のループ回数レジスター１２０、２２０にループ命令による設定値をセットして、命令が実行される毎に各レジスターの値をデクリメント（１を減算）する手法をとる。しかし、この手法に限定されるものではなく、初期値を１として命令が実行される毎に各レジスターの値をインクリメント（１を加算）する手法をとることもできる。
【００６０】
図３のステップＢ１では、ループ命令が実行されると、ループ命令に基づいてループ命令数レジスター１１０にループ命令数をセットする。さらにステップＢ２では、ループ命令に基づいてループ回数レジスター１２０にループ回数をセットする。
【００６１】
次に、ステップＢ３では、ループ回数レジスター１２０の値をデクリメントする。ステップＢ４では、命令が実行される毎にループ命令数レジスター１１０の値をデクリメントする。
【００６２】
ステップＢ５では、制御信号を出力して、動作中のカウント制御回路を除く１又は複数のカウント制御回路（他のカウント制御回路）の更新処理を停止させる。ただし、ループの最終回では更新処理の停止を解除する。上述したように、２重ループの場合に、この制御信号によって外側のループ（例えば図１（Ｂ）の第１のループ）のカウントを停止させることができる。この更新処理の停止及び停止の解除の制御は、ループ命令数レジスター１１０及びループ回数レジスター１２０の値により行ってもよいし、カウント制御回路が動作中であることを示すフラグを設けることにより行ってもよい。
【００６３】
ステップＢ６では、ループ命令数レジスター１１０の値が０より大きいかどうか判断する。０より大きい場合、すなわち、まだループの最後の命令が実行されていない場合には、ステップＢ４に戻って、次の実行命令が実行されて、ループ命令数レジスター１１０の値をデクリメントする。一方、ループ命令数レジスター１１０の値が０である場合には、ループの最後の命令が実行された場合であるから、ステップＢ７に進む。
【００６４】
ステップＢ７では、ループ回数レジスター１２０の値が０より大きいかどうか判断する。０より大きい場合、すなわち、まだループが所定の回数分実行されていない場合には、ステップＢ８に進む。一方、ループ回数レジスター１２０の値が０である場合には、ループが所定の回数分実行された場合であるから、ループ処理は終了する。
【００６５】
ステップＢ８では、ループ命令数レジスター１１０にループ命令数（ステップＢ１でセットしたループ命令数）を再度セットする。
【００６６】
ステップＢ９では、アドレス選択信号をアクティブにし、ステップＢ３に戻る。ステップＢ３では、ループ回数レジスター１２０の値をデクリメントして、次回のループ処理が実行される。ここでアドレス選択信号は、プログラムカウンター１６０の値をループ開始アドレスに戻すための信号である。具体的には、プログラムカウンター制御回路１３０が、上記アドレス選択信号を受けて、プログラムカウンター１６０にループ開始アドレスをセットする。このようにして、ループの最初の命令に戻って再び処理が実行される。
【００６７】
図４は、プログラムカウンター制御回路１３０の基本的な動作のフローチャートである。プログラムカウンター制御回路１３０は、プログラムカウンター１６０の更新及び第１、第２のループ開始アドレス用レジスター１４０、１５０の書き込みを制御する。以下に、図４を用いてプログラムカウンター制御回路１３０の基本的な動作を説明する。
【００６８】
図４のステップＣ１では、ループ命令が実行されると、ループ命令に基づいて、第１又は第２のループ開始アドレス用レジスター１４０、１５０にループ開始アドレスを書き込む。具体的には、例えば図１（Ａ）のループ命令ＬＯＯＰ１に基づいて、ループ開始アドレスａ２を第１のループ開始アドレス用レジスター１４０に書き込む。
【００６９】
ステップＣ２では、プログラムカウンター１６０に上記のループ開始アドレス（例えばａ２）をセットする。これにより上記のループ開始アドレスに格納される実行命令（例えば図１（Ａ）のＩＮＳ１）がフェッチされ、デコードされて、命令実行部１９０により実行される。
【００７０】
ステップＣ３では、アドレス選択信号がアクティブかどうか判断する。アクティブでない場合には、プログラムカウンター１６０の値をインクリメント（１を加算）する。これにより次の命令アドレスに格納される実行命令がフェッチされ、デコードされて、命令実行部１９０により実行される。このように、アドレス選択信号がアクティブになるまでは、プログラムカウンターの値がインクリメントされて、順次命令が実行される。
【００７１】
一方、アドレス選択信号がアクティブの場合には、アドレス選択信号に対応するループ開始アドレスをプログラムカウンター１６０にセットする。例えば図２において、第１のカウント制御回路１００が出力するアドレス選択信号ＡＳ１がアクティブである場合には、第１のループ開始アドレス用レジスター１４０に書き込まれた第１のループ開始アドレスが、プログラムカウンター１６０にセットされる。また、例えば第２のカウント制御回路２００が出力するアドレス選択信号ＡＳ２がアクティブである場合には、第２のループ開始アドレス用レジスター１５０に書き込まれた第２のループ開始アドレスが、プログラムカウンター１６０にセットされる。こうすることにより、ループの最初の命令に戻って処理が実行される。
【００７２】
以上説明したように、プログラムカウンター制御回路１３０は、第１のループ処理の実行に先立って、第１のループ開始アドレス用レジスター１４０の値をプログラムカウンター１６０にセットする。また、第２のループ処理の実行に先立って、第２のループ開始アドレス用レジスター１５０の値をプログラムカウンター１６０にセットする。そして第１のループ処理の実行中に、第１のカウント制御回路１００からアドレス選択信号ＡＳ１を受けた場合には、第１のループ開始アドレス用レジスター１４０の値をプログラムカウンター１６０にセットする。また、第２のループ処理の実行中に、第２のカウント制御回路２００からアドレス選択信号ＡＳ２を受けた場合には、第２のループ開始アドレス用レジスター１５０の値をプログラムカウンター１６０にセットする。このようにすることで、ループ処理の最初にループ開始アドレスに格納される命令を実行することができ、さらにループの最後の命令が実行された後、再びループの最初の命令に戻って実行することができる。
【００７３】
以上説明したように、本実施形態の演算装置によれば、ループ開始アドレス用レジスター、ループ命令数レジスター及びループ回数レジスターのそれぞれの値を制御することにより、ハードウェアによる効率の良いループ処理を実現することができる。
【００７４】
３．２重ループの制御
２重ループの場合のループ制御について、図５（Ａ）、図５（Ｂ）を用いて以下に説明する。ここでは２重ループ処理の一例として、図１（Ａ）と同じ処理について説明する。図５（Ａ）には２重ループ処理の一例（図１（Ａ）と同一）を示す。図５（Ｂ）には、上記処理の各ステップ（ステップ１〜１５）の命令実行直後の各レジスターの値を示す。
【００７５】
ステップ１では、ループ命令ＬＯＯＰ１が実行され、第１のループ開始アドレス用レジスター１４０にａ２がセットされ（図４のＣ１）、第１のループ命令数レジスター１１０に５がセットされ（図３のＢ１）、第１のループ回数レジスター１２０に２がセットされる（図３のＢ２）。さらにプログラムカウンター１６０にループ開始アドレスａ２がセットされる（図４のＣ２）。
【００７６】
ステップ２では、第１のループ回数レジスター１２０の値を１にして（図３のＢ３）、第１のループ命令数レジスター１１０の値を４にする（図３のＢ４）と共に、第１のループの最初の命令ＩＮＳ１が実行される。また、アドレス選択信号がアクティブでないから（図４のＣ３）、プログラムカウンター１６０の値をインクリメントする（図４のＣ４）。
【００７７】
ステップ３では、第１のループ命令数レジスター１１０の値を３にする（図３のＢ４）と共に、第２のループ命令ＬＯＯＰ２が実行される。ＬＯＯＰ２が実行されると、第２のループについての制御が開始される。すなわち、第２のループ開始アドレス用レジスター１５０にａ４がセットされ（図４のＣ１）、第２のループ命令数レジスター２１０に２がセットされ（図３のＢ１）、第２のループ回数レジスター２２０に２がセットされる（図３のＢ２）。さらにプログラムカウンター１６０にループ開始アドレスａ４がセットされる（図４のＣ２）。
【００７８】
ステップ４では、第２のループ回数レジスター２２０の値を１にして（図３のＢ３）、第２のループ命令数レジスター２１０の値を１にする（図３のＢ４）と共に、第２のループの最初の命令ＩＮＳ２が実行される。実行後、アドレス選択信号がアクティブでないから（図４のＣ３）、プログラムカウンター１６０の値をインクリメントする（図４のＣ４）。さらに制御信号を出力して、第１のカウント制御回路１００（広義には、動作中のカウント制御回路を除く１又は複数のカウント制御回路）の更新処理を停止させる（図３のＢ５）。これにより、第１のループ命令数レジスター及び第１のループ命令数レジスターの値は更新されない。この更新処理の停止の制御は、第２のループ命令数レジスター２１０及び第２のループ回数レジスター２２０の値により行うことができる。或いはカウント制御回路が動作中であることを示すフラグを設けることにより行ってもよい。具体的には、例えば第１のカウント制御回路１００が動作中であることを示す第１のフラグを記憶する第１のフラグレジスターと、第２のカウント制御回路２００が動作中であることを示す第２のフラグを記憶する第２のフラグレジスターを設ける。そしてこれらの第１、第２のフラグをモニターすることで、更新処理の停止制御を実現する。
【００７９】
ステップ５では、第２のループ命令数レジスター２１０の値を０にして（図３のＢ４）、ＩＮＳ３が実行される。実行後に図３のＢ５からＢ７へ進み、Ｂ８、Ｂ９の制御が行われる。すなわち、第２のループ命令数レジスター２１０にループ命令数の設定値２がセットされ（図３のＢ８）、アドレス選択信号ＡＳ２がアクティブになる（図３のＢ９）。そうすると図４のＣ５に示すように、プログラムカウンター制御回路１３０が第２のループ開始アドレスａ４をプログラムカウンター１６０にセットする。ステップ４と同様に、制御信号を出力して、第１のカウント制御回路１００の更新処理を停止させる（図３のＢ５）。これにより、第１のループ命令数レジスター及び第１のループ命令数レジスターの値は更新されない。
【００８０】
ステップ６では、第２のループの最初の命令に戻り、第２のループ回数レジスター２２０の値を０にして（図３のＢ３）、第２のループ命令数レジスター２１０の値を１にする（図３のＢ４）と共に、ＩＮＳ２が実行される。この時は第２のループの最終回のループであるから、上記の制御信号による第１のカウント制御回路１００の更新処理の停止は解除される（図３のＢ５）。したがって、第１のカウント制御回路１００は第１のループ命令数レジスター１１０の値を２にする（図３のＢ４）。また、アドレス選択信号がアクティブでないから（図４のＣ３）、プログラムカウンター１６０の値をインクリメントする（図４のＣ４）。
【００８１】
なお、この更新処理の停止の解除の制御は、第２のループ命令数レジスター２１０及び第２のループ回数レジスター２２０の値により行ってもよいし、カウント制御回路が動作中であることを示すフラグを設けることにより行ってもよい。
【００８２】
ステップ７では、第２のループ命令数レジスター２１０の値を０にする（図３のＢ４）と共に、ＩＮＳ３が実行される。実行後、Ｂ５、Ｂ６、Ｂ７へ進み、第２のループ回数レジスターの値が０であるから（図３のＢ７）、第２のループ処理は終了する。この時はステップ６と同様に第２のループの最終回のループであるから、上記の制御信号による第１のカウント制御回路１００の更新処理の停止は解除される（図３のＢ５）。したがって、第１のカウント制御回路１００は第１のループ命令数レジスター１１０の値を１にする（図３のＢ４）。また、アドレス選択信号がアクティブでないから（図４のＣ３）、プログラムカウンター１６０の値をインクリメントする（図４のＣ４）。
【００８３】
ステップ８では、第１のループ命令数レジスター１１０の値を０にする（図３のＢ４）と共に、ＩＮＳ４が実行される。実行後Ｂ５、Ｂ６、Ｂ７と進み、第１のループ回数レジスターの値が１であるから（図３のＢ７）、第１のループ命令数レジスター１１０にループ命令数の設定値５がセットされ（図３のＢ８）、アドレス選択信号ＡＳ１がアクティブになる（図３のＢ９）。そうすると図４のＣ５に示すように、プログラムカウンター制御回路１３０が第１のループ開始アドレスａ２をプログラムカウンター１６０にセットする。なお、この時は第２のループ処理は既に終了しているから、第２のカウント制御回路２００は停止している。
【００８４】
ステップ９では、第１のループの最初の命令に戻り、第１のループ回数レジスター１２０の値を０にして（図３のＢ３）、第１のループ命令数レジスター１１０の値を４にする（図３のＢ４）と共に、ＩＮＳ１が実行される。実行後、アドレス選択信号がアクティブでないから（図４のＣ３）、プログラムカウンター１６０の値をインクリメントする（図４のＣ４）。
【００８５】
ステップ１０では、第１のループ命令数レジスター１１０の値を３にする（図３のＢ４）と共に、第２のループ命令ＬＯＯＰ２が実行される。ＬＯＯＰ２が実行されると、第２のループについての制御が開始される。すなわち、第２のループ開始アドレス用レジスター１５０にａ４がセットされ（図４のＣ１）、第２のループ命令数レジスター２１０に２がセットされ（図３のＢ１）、第２のループ回数レジスター２２０に２がセットされる（図３のＢ２）。さらにプログラムカウンター１６０にループ開始アドレスａ４がセットされる（図４のＣ２）。
【００８６】
ステップ１１では、第２のループ回数レジスター２２０の値を１にして（図３のＢ３）、第２のループ命令数レジスター２１０の値を１にする（図３のＢ４）と共に、第２のループの最初の命令ＩＮＳ２が実行される。実行後、アドレス選択信号がアクティブでないから（図４のＣ３）、プログラムカウンター１６０の値をインクリメントする（図４のＣ４）。さらに制御信号を出力して、第１のカウント制御回路１００の更新処理を停止させる（図３のＢ５）。これにより、第１のループ命令数レジスター及び第１のループ命令数レジスターの値は更新されない。
【００８７】
ステップ１２では、第２のループ命令数レジスター２１０の値を０にして（図３のＢ４）、ＩＮＳ３が実行される。実行後に図３のＢ５からＢ７へ進み、Ｂ８、Ｂ９の制御が行われる。すなわち、第２のループ命令数レジスター２１０にループ命令数の設定値２がセットされ（図３のＢ８）、アドレス選択信号ＡＳ２がアクティブになる（図３のＢ９）。そうすると図４のＣ５に示すように、プログラムカウンター制御回路１３０が第２のループ開始アドレスａ４をプログラムカウンター１６０にセットする。ステップ１１と同様に、制御信号を出力して、第１のカウント制御回路１００の更新処理を停止させる（図３のＢ５）。これにより、第１のループ命令数レジスター及び第１のループ命令数レジスターの値は更新されない。
【００８８】
ステップ１３では、第２のループの最初の命令に戻り、第２のループ回数レジスター２２０の値を０にして（図３のＢ３）、第２のループ命令数レジスター２１０の値を１にする（図３のＢ４）と共に、ＩＮＳ２が実行される。この時は第２のループの最終回のループであるから、上記の制御信号による第１のカウント制御回路１００の更新処理の停止は解除される（図３のＢ５）。したがって、第１のカウント制御回路１００は第１のループ命令数レジスター１１０の値を２にする（図３のＢ４）。また、アドレス選択信号がアクティブでないから（図４のＣ３）、プログラムカウンター１６０の値をインクリメントする（図４のＣ４）。
【００８９】
ステップ１４では、第２のループ命令数レジスター２１０の値を０にする（図３のＢ４）と共に、ＩＮＳ３が実行される。実行後、Ｂ５、Ｂ６、Ｂ７へ進み、第２のループ回数レジスターの値が０であるから（図３のＢ７）、第２のループ処理は終了する。この時はステップ１３と同様に第２のループの最終回のループであるから、上記の制御信号による第１のカウント制御回路１００の更新処理の停止は解除される（図３のＢ５）。したがって、第１のカウント制御回路１００は第１のループ命令数レジスター１１０の値を１にする（図３のＢ４）。また、アドレス選択信号がアクティブでないから（図４のＣ３）、プログラムカウンター１６０の値をインクリメントする（図４のＣ４）。
【００９０】
ステップ１５では、第１のループ命令数レジスター１１０の値を０にする（図３のＢ４）と共に、ＩＮＳ４が実行される。実行後Ｂ５、Ｂ６、Ｂ７と進み、第１のループ回数レジスターの値が０であるから（図３のＢ７）、第１のループ処理は終了する。
【００９１】
以上説明したように、図２に示す本構成例の演算装置によれば、内側のループ処理（上記の第２のループ処理）を制御する第２のカウント制御回路２００が、第２のループ処理が実行される期間に、制御信号を出力して外側のループ処理（上記の第１のループ処理）を制御する第１のカウント制御回路１００の更新処理を停止させることにより、効率的に２重ループ処理を実行することができる。具体的には、第２のカウント制御回路２００は、第２のループ命令数レジスター２１０の値及び第２のループ回数レジスター２２０の値の更新処理を行っている際に、第１のカウント制御回路１００の更新処理を停止させる。この更新処理の停止の制御は、ループ命令数レジスター及びループ回数レジスターの値により行ってもよいし、カウント制御回路が動作中であることを示すフラグを設けることにより行ってもよい。
【００９２】
本実施形態の演算装置によらないループ処理では、ループ制御のための変数を管理したり、条件判定のための命令を実行するために、ループ回数が多くなるほど処理負荷が重くなるという欠点がある。また、コードサイズが大きくなるという問題もある。
【００９３】
本実施形態の演算装置によれば、カウント制御回路及びプログラムカウンター制御回路によるハードウェア処理でループ制御を行うことができるから、ループ回数が多い場合でも処理負荷を軽減し、またコードサイズを低減することができる。
【００９４】
なお、上記の説明では、第１のカウント制御回路１００が外側のループ処理を、第２のカウント制御回路２００が内側のループ処理を制御するとしているが、逆であってもよい。
【００９５】
４．３重ループの処理が可能な構成例
本実施形態の演算装置では、さらにカウント制御回路及び必要なレジスターを付加することにより、３重ループ処理を効率的に行うことができる。
【００９６】
３重ループの処理が可能な構成例の演算装置は、第３のループ開始アドレス用レジスターと、第３のループ処理で実行される命令の命令数が設定される第３のループ命令数レジスターと、第３のループ処理のループ回数が設定される第３のループ回数レジスターと、第３のカウント制御回路とを含む。
【００９７】
本構成例は図示していないが、上記４つの構成要素は、それぞれ図２に示す第１、第２のループ開始アドレス用レジスター１４０、１５０、第１、第２のループ命令数レジスター１１０、２１０、第１、第２のループ回数レジスター１２０、２２０及び第１、第２のカウント制御回路１００、２００と同じ構成である。
【００９８】
第３のループ開始アドレス用レジスターには、第３のループ処理で実行される命令の開始アドレスが設定される。第３のループ命令数レジスターには、第３のループ処理で実行される命令の命令数が設定される。第３のループ回数レジスターには、第３のループ処理のループ回数が設定される。第３のカウント制御回路は、デコード結果に基づいて、第３のループ命令数レジスターの値及び第３のループ回数レジスターの値の更新処理を行う。
【００９９】
第３のカウント制御回路は、第３のループ処理が実行される期間に、第１のカウント制御回路１００に対して第１のループ命令数レジスター１１０の値及び第１のループ回数レジスター１２０の値の更新処理の停止と、第２のカウント制御回路２００に対して第２のループ命令数レジスター２１０の値及び第２のループ回数レジスター２２０の値の更新処理の停止とを指示する制御信号を出力する。このようにすることで、第３のループ処理が実行されている期間に、第１、第２のループの命令数及びループ回数のカウントを停止させることができる。具体的には、第３のカウント制御回路は、第３の命令数レジスターの値及び第３のループ回数レジスターの値の更新処理を行っている際に、第１、第２のカウント制御回路１００、２００のそれぞれの更新処理を停止させる。
【０１００】
プログラムカウンター制御回路１３０は、第３のループ処理の実行が開始される前に、第３のループ開始アドレス用レジスターの値をプログラムカウンター１６０にセットし、第３のループ処理の実行中に、第３のカウント制御回路からアドレス選択信号を受けた場合には、第３のループ開始アドレス用レジスターの値をプログラムカウンター１６０にセットする。このようにすることで、第３のループ処理の最初に第３のループ開始アドレスに格納される命令を実行することができ、さらに第３のループの最後の命令が実行された後、再び第３のループの最初の命令に戻って実行することができる。
【０１０１】
以上説明したように、本実施形態の演算装置によれば、３重ループ処理の場合であっても、カウント制御回路及びプログラムカウンター制御回路によるハードウェア処理でループ制御を行うことができるから、ループ回数が多い場合でも処理負荷を軽減し、またコードサイズを低減することができる。
【０１０２】
さらに、本実施形態の演算装置では、カウント制御回路、ループ命令数レジスター及びループ回数レジスターを４セット以上設けてもよい。このようにすれば、４重以上のループ処理の場合でも、上述した処理方法によりループ処理を行うことができる。
【０１０３】
５．ループ回数の変更
本実施形態の演算装置では、ループ回数変更命令によってループ処理の回数を変更することができる。具体的には、第１のループ処理のループ回数変更命令がフェッチされデコードされた場合には、ループ回数変更命令で指定される増減値だけ第１のループ回数レジスター１２０の値が増減される。また、同様に第２のループ処理のループ回数変更命令がフェッチされデコードされた場合には、ループ回数変更命令で指定される増減値だけ第２のループ回数レジスター２２０の値が増減される。
【０１０４】
本実施形態の演算装置では、上述したようにカウント制御回路及びプログラムカウンター制御回路によるハードウェア処理でループ制御を行うから、第１、第２のループ回数レジスター１２０、２２０の値を増減させる命令を実行することにより、ループ処理中であっても容易にループ回数を変更することができる。
【０１０５】
図６（Ａ）は、ループ処理中にループ回数を変更するプログラムの一例である。このプログラムは、バブルソートと呼ばれるアルゴリズムを用いて、与えられた数字列を大きい順又は小さい順に並べ替えるものである。図６（Ｂ）に上記のプログラムの実行例を示す。
【０１０６】
図６（Ａ）に示すプログラムでは、１行目でループ処理Ａについてループ開始アドレス、ループ命令数、ループ回数を設定し、ループ処理Ａを開始する。２行目では、ループ処理Ｂについてループ開始アドレス、ループ命令数、ループ回数を設定し、ループ処理Ｂを開始する。３行目では、ループ処理Ｂの命令、すなわちサンプルの抜き出し、大小比較及び入れ替えが実行される。そして４行目では、ループ処理Ｂのループ回数レジスター値から１を減算する。
【０１０７】
図６（Ｂ）に示すように、ループ処理Ｂは対象データの抜き出し、大小比較及び入れ替えを行い、これを繰り返すことで最大値が求められる。ループ処理Ａはループ処理Ｂを繰り返すことで、ソート処理を完了する。ループ処理Ａの２回目以降の処理は、前の処理で最大値が既に選択されていることから、ループ処理Ｂの処理回数は３回ですむ。バブルソートでは、このようにループ処理Ａの回数分だけ、必要なループ処理Ｂの回数が減っていく。例えば図６（Ｂ）では、ループ処理Ｂの回数は４回、３回、２回と減っている。
【０１０８】
以上説明したように、本実施形態の演算装置ではループ回数変更命令によってループ処理の回数を変更することができるから、バブルソートのように規則的に内側のループ処理の回数が変わる場合には、条件判定及び分岐命令を内側のループ内で実行する必要がなく、効率良く処理を行うことができる。
【０１０９】
６．電子機器
図７は本実施形態の演算装置を含む電子機器の一例を示す。図７の電子機器４００は、センサー３１０、検出回路３２０、Ａ／Ｄ変換器３３０及び処理部３４０を含む。処理部３４０は、本実施形態の演算装置（アクセラレーター、サブプロセッサー）３００と、ホストプロセッサー３５０を含む。なお、検出回路３２０、Ａ／Ｄ変換器３３０及び処理部３４０を１個の集積回路装置に組み込んで、１チップ構成にしてもよい。
【０１１０】
電子機器４００は、例えば脈拍計、歩数計、デジタルカメラ等である。センサー３１０は、ジャイロセンサー、加速度センサー、フォトセンサー、圧力センサー等であって、電子機器４００の用途に応じたセンサーが用いられる。検出回路３２０はセンサー３１０からの出力信号（センサー信号）を増幅し、フィルターによりノイズを除去する。Ａ／Ｄ変換器３３０は増幅された信号をデジタル信号に変換して処理部３４０へ出力する。
【０１１１】
処理部３４０は、Ａ／Ｄ変換回路３３０からのデジタル信号に対して必要なデジタル信号処理を実行する。また検出回路３２０のゲイン制御等を行ってもよい。ここで、処理部３４０で行われるデジタル信号処理としては、例えばフーリエ変換等の処理を想定できる。このデータ処理を、本実施形態の演算装置（アクセラレーター、サブプロセッサー）３００を用いることで、ループ処理の負荷を軽減し、効率良く信号処理を実現できる。
【０１１２】
なお、以上のように本実施形態について詳細に説明したが、本発明の新規事項および効果から実体的に逸脱しない多くの変形が可能であることは当業者には容易に理解できるであろう。従って、このような変形例はすべて本発明の範囲に含まれるものとする。例えば、明細書又は図面において、少なくとも一度、より広義または同義な異なる用語と共に記載された用語は、明細書又は図面のいかなる箇所においても、その異なる用語に置き換えることができる。また演算装置及び電子機器の構成、動作も本実施形態で説明したものに限定されず、種々の変形実施が可能である。
【符号の説明】
【０１１３】
ＡＳ１、ＡＳ２  アドレス選択信号、１００、２００  第１、第２のカウント制御回路、
１３０  プログラムカウンター制御回路、
１１０、２１０  第１、第２のループ命令数レジスター、
１２０、２２０  第１、第２のループ回数レジスター、
１４０、１５０  第１、第２のループ開始アドレス用レジスター、
１６０  プログラムカウンター、１７０  命令デコード部、１９０  命令実行部、
３００  アクセラレーター、３１０  センサー、３２０  検出回路、
３３０  Ａ／Ｄ変換器、３４０  処理部、３５０ホストプロセッサー、４００  電子機器
【図１】
2010277124.tif 000003
【図２】
2010277124.tif 000004
【図３】
2010277124.tif 000005
【図４】
2010277124.tif 000006
【図５】
2010277124.tif 000007
【図６】
2010277124.tif 000008
【図７】
2010277124.tif 000009