(57)【要約】  本発明のプロセッサは、ループ先頭アドレスからループ末尾アドレスまでのループ内処理を実行するループ命令が発行されると、０にリセットされるループカウンタと、前記ループ内処理に用いるデータが、外部から転送されるデータメモリと、前記データメモリに転送されたデータを用いて前記ループ内処理を実行する演算部と、外部から前記データメモリに対して一定量のデータが転送される度に、前記ループカウンタを１インクリメントするデータカウンタと、前記ループカウンタのループカウント値が０でない場合に、前記ループカウンタを１デクリメントして、前記演算部に対し、前記ループ内処理を実行させるループ制御部と、を有する。
2011065145.tif 000002
【特許請求の範囲】
【請求項１】
ループ先頭アドレスからループ末尾アドレスまでのループ内処理を実行するループ命令が発行されると、０にリセットされるループカウンタと、
前記ループ内処理に用いるデータが、外部から転送されるデータメモリと、
前記データメモリに転送されたデータを用いて前記ループ内処理を実行する演算部と、
外部から前記データメモリに対して一定量のデータが転送される度に、前記ループカウンタを１インクリメントするデータカウンタと、
前記ループカウンタのループカウント値が０でない場合に、前記ループカウンタを１デクリメントして、前記演算部に対し、前記ループ内処理を実行させるループ制御部と、を有することを特徴とするプロセッサ。
【請求項２】
前記データカウンタは、予めデータカウント条件が設定され、外部から前記データメモリに対して、前記データカウント条件を満たす一定量のデータが転送される度に、前記ループカウンタを１インクリメントする、請求項１に記載のプロセッサ。
【請求項３】
前記データカウント条件は、データの値の範囲を規定したものであり、
前記データカウンタは、外部から前記データメモリに対して、前記データカウント条件により規定された範囲内にある値のデータが一定量転送される度に、前記ループカウンタを１インクリメントする、請求項２に記載のプロセッサ。
【請求項４】
前記データカウント条件は、前記データメモリのアドレスの範囲を規定したものであり、
前記データカウンタは、外部から前記データメモリに対して、前記データカウント条件により規定された範囲内のアドレスに一定量のデータが転送される度に、前記ループカウンタを１インクリメントする、請求項２に記載のプロセッサ。
【請求項５】
プロセッサによるループ回数制御方法であって、
ループ先頭アドレスからループ末尾アドレスまでのループ内処理を実行するループ命令が発行されると、ループカウンタを０にリセットするステップと、
外部からデータメモリに対して、前記ループ内処理に用いるデータが一定量転送される度に、前記ループカウンタを１インクリメントするステップと、
前記ループカウンタのループカウント値が０でない場合に、前記ループカウンタを１デクリメントして、前記ループ内処理を実行するステップと、を有することを特徴とするループ回数制御方法。
【請求項６】
前記ループカウンタを１インクリメントするステップでは、外部から前記データメモリに対して、予め設定されたデータカウント条件を満たす一定量のデータが転送される度に、前記ループカウンタを１インクリメントする、請求項５に記載のループ回数制御方法。
【請求項７】
前記データカウント条件は、データの値の範囲を規定したものであり、
前記ループカウンタを１インクリメントするステップでは、外部から前記データメモリに対して、前記データカウント条件により規定された範囲内にある値のデータが一定量転送される度に、前記ループカウンタを１インクリメントする、請求項６に記載のループ回数制御方法。
【請求項８】
前記データカウント条件は、前記データメモリのアドレスの範囲を規定したものであり、
前記ループカウンタを１インクリメントするステップでは、外部から前記データメモリに対して、前記データカウント条件により規定された範囲内のアドレスに一定量のデータが転送される度に、前記ループカウンタを１インクリメントする、請求項６に記載のループ回数制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ハードウエアループ機能を具備したプロセッサに関し、特に、ループ回数を制御するプロセッサに関する。
【背景技術】
【０００２】
プロセッサにおいては、プログラムを構成する命令は、命令メモリに格納される。プログラムが、１つもしくは複数の命令を繰り返し使用する繰り返し構造を持つ場合、条件分岐命令を使用してループプログラムを作成することで、命令メモリの容量を削減することができる。但し、条件分岐命令を使用すると、ループ末尾からループ先頭（もしくはループ外）に戻るためのオーバヘッドが生じる。【０００３】
特に、パイプラインプロセッサにおいては、条件分岐命令を使用する場合、すでにフェッチされたパイプライン内の命令が無効になり、分岐先の命令が新たにフェッチされるため、オーバヘッドが顕著になる。【０００４】
このため、プロセッサは、一般的に、ループ命令を用いて、ループ先頭アドレス、ループ末尾アドレス、ループ回数をレジスタに設定し、ハードウエアでオーバヘッドなしにループ処理を管理し実行する機能を具備している。本機能は、ハードウエアループ機能、Ｚｅｒｏ  ｏｖｅｒｈｅａｄ  ｌｏｏｐ機能、Ｚｅｒｏ  ｄｅｌａｙ  ｌｏｏｐ機能、ループ命令機能などと呼称される。なお、本明細書では、以降、特に断らないかぎり、これらを総称して、ハードウエアループ機能と呼称する。【０００５】
図１に、関連する、ハードウエアループ機能を具備したプロセッサの構成を示す。本関連技術の詳細は、特許文献１および特許文献２に開示されている。【０００６】
図１に示すように、関連技術のプロセッサ１００２は、プログラムカウンタ１００と、命令メモリ２００と、命令デコーダ３００と、演算部４００と、データメモリ５００と、ループカウンタ６００と、ループ制御部７００と、を有している。【０００７】
プログラムカウンタ１００は、発行する命令の命令アドレスを、命令メモリ２００およびループ制御部７００に通知する。プログラムカウンタ１００は、通常、命令アドレスを順次インクリメントし、インクリメントした命令アドレスを通知していくが、演算部４００もしくはループ制御部７００により、後述する命令アドレスジャンプ先が設定された場合は、設定されたジャンプ先の命令アドレスを通知する。【０００８】
命令メモリ２００は、プログラムカウンタ１００から通知された命令アドレスに従って命令をフェッチし、フェッチした命令を命令デコーダ３００に発行する。【０００９】
命令デコーダ３００は、命令メモリ２００により発行された命令をデコードし、デコードした命令を演算制御信号として演算部４００へ通知する。また、命令デコーダ３００は、ループ命令が発行された時は、ループ先頭アドレスおよびループ末尾アドレスをループ制御部７００に設定する。【００１０】
演算部４００は、命令デコーダ３００から通知された演算制御信号に従って、各種演算を行う。演算部４００は、演算に必要なデータをデータメモリ５００からロードして、内部に具備するレジスタファイルに格納し、そのデータを用いて演算を行う。また、演算部４００は、演算結果をデータメモリ５００に格納することもできる。また、演算部４００は、ループ命令をデコードした演算制御信号が通知された時は、ループ回数をループカウンタ６００へ設定する。また、演算部４００は、条件分岐命令をデコードした演算制御信号が通知された時は、状態（例えば、レジスタファイル値や、ＤＭＡＣ（Data  Memory  Access  Controller）３０００から通知されるデータ転送完了通知信号）が演算制御信号で規定した条件に一致した場合、命令アドレスジャンプ先をプログラムカウンタ１００へ設定し、プログラム進行を分岐することができる。【００１１】
データメモリ５００は、演算部４００からのデータの格納および演算部４００へのデータのロードを行う。また、データメモリ５００とプロセッサ外部の外部メモリ４０００間で、外部バス２０００を介してデータ転送を行うことができる。データ転送は、ＤＭＡＣ３０００で管理する。ＤＭＡＣ３０００は、プロセッサ１００２を含む外部装置から入力されたＤＭＡＣ設定に基づいてデータ転送を管理する。【００１２】
ループ制御部７００は、プログラムカウンタ１００から通知された命令アドレスが、命令デコーダ３００により設定されたループ先頭アドレスに一致した場合、ループカウンタ６００へデクリメント信号を通知する。【００１３】
ループカウンタ６００は、演算部４００により設定されたループ回数をループカウント値の初期値とし、ループ制御部７００からデクリメント信号が通知される度に、ループカウント値を１デクリメントし、デクリメントしたループカウント値をループ制御部７００に通知する。【００１４】
ループ制御部７００は、プログラムカウンタ１００から通知された命令アドレスが、命令デコーダ３００により設定されたループ末尾アドレスと一致し、かつ、ループカウンタ６００から通知されたループカウント値が０以外の場合、ループ先頭アドレスを、命令アドレスジャンプ先として、プログラムカウンタ１００に通知する。【００１５】
また、ループ制御部７００は、プログラムカウンタ１００から通知された命令アドレスが、命令デコーダ３００により設定されたループ末尾アドレスと一致し、かつ、ループカウンタ６００から通知されたループカウント値が０の場合、ループ末尾アドレスの次の命令アドレスを、命令アドレスジャンプ先として、プログラムカウンタ１００に通知する。【００１６】
上述のように、上記関連技術では、ループ命令の発行前に、ループ回数が判明していて、ループ回数の情報を演算部４００で保持しておく必要がある。【００１７】
しかし、アプリケーションの中には、ループ回数がループ内処理データ量に依存し、外部メモリ４０００からデータメモリ５００に対し、ループ内処理データの転送が完了した後に、ループ内処理データ量の情報が転送されるものもある。【００１８】
こうしたアプリケーションの場合、ループ内処理データとループ内処理データ量の情報とがデータメモリ５００に転送された後に、ループ処理を開始する必要があるため、データメモリ５００の容量の増大や処理遅延の増大を招く。【００１９】
図２に、図１に示した関連技術のプロセッサ１００２において、ループ内処理データの転送後に、ループ内処理データ量の情報が転送される場合の処理フローを示す。【００２０】
図２に示すように、まず、外部メモリ４０００からデータメモリ５００に対し、ループ内処理データが転送され（ステップＳ１０１）、その後、ループ内処理データ量の情報が転送される（ステップＳ１０２）。【００２１】
演算部４００は、ループ内処理データ量の情報の転送完了を確認した後、ループ内処理データ量を基にループ回数を算出する（ステップＳ１０３）。なお、転送完了は、ＤＭＡＣ３０００から通知されるデータ転送完了通知信号で確認することができる。【００２２】
以降に、ループ命令が発行されると（ステップＳ１０４のＹｅｓ）、演算部４００により算出されたループ回数が、ループカウント値の初期値としてループカウンタ６００に設定される。また、ループ先頭アドレスおよびループ末尾アドレスがループ制御部７００に設定される（ステップＳ１０５）。【００２３】
ループ命令の発行後は、命令アドレスがループ先頭アドレスに一致するまで、プログラムが進められる。【００２４】
命令アドレスがループ先頭アドレスに一致すると（ステップＳ１０６のＹｅｓ）、ループ制御部７００は、デクリメント信号をループカウンタ６００へ通知し、ループカウンタ６００は、ループカウント値を１減らす（ステップＳ１０７）。その後、命令アドレスがループ末尾アドレスに達するまで、演算部４００によるループ内処理が進められる（ステップＳ１０８）。【００２５】
命令アドレスがループ末尾アドレスに一致すると（ステップＳ１０９のＹｅｓ）、ループ制御部７００は、ループ完了判定処理を行う。【００２６】
ループカウント値が０以外の場合（ステップＳ１１０のＮｏ）、ループ制御部７００は、ループ処理は完了していないと判定し、ループ先頭アドレスを命令アドレスジャンプ先として、プログラムカウンタ１００に通知する（ステップＳ１１１）。【００２７】
一方、ループカウント値が０の場合（ステップＳ１１０のＹｅｓ）、ループ制御部７００は、ループ処理が完了したと判定し、ループ末尾アドレスの次の命令アドレスを命令アドレスジャンプ先として、プログラムカウンタ１００に通知する（ステップＳ１１２）。【００２８】
これにより、ループ内処理を、設定されたループ回数分だけ実行することができる。
【先行技術文献】
【特許文献】
【００２９】
【特許文献１】特開平０７−２００２９２号公報
【特許文献２】特開平０９−２３７１８６号公報
【発明の概要】
【発明が解決しようとする課題】
【００３０】
上述のように、特許文献１および特許文献２に開示されたプロセッサにおいては、ループ命令の発行前に、ループ回数が判明していなければならない。【００３１】
このため、ループ回数がループ内処理データ量に依存し、外部からループ内処理データがデータメモリに転送された後にループ内処理データ量が判明するアプリケーションの場合、ループ内処理データとループ内処理データ量の情報がデータメモリに格納された後に、ループ処理を開始するため、データメモリの容量の増大や処理遅延の増大を招くという課題がある。【００３２】
本発明は、上記課題に鑑みてなされたものであって、データメモリの容量を低減し、かつ処理遅延を低減することができるプロセッサ、プロセッサによるループ回数制御方法を提供することを目的とする。
【課題を解決するための手段】
【００３３】
本発明のプロセッサは、
ループ先頭アドレスからループ末尾アドレスまでのループ内処理を実行するループ命令が発行されると、０にリセットされるループカウンタと、
前記ループ内処理に用いるデータが、外部から転送されるデータメモリと、
前記データメモリに転送されたデータを用いて前記ループ内処理を実行する演算部と、
外部から前記データメモリに対して一定量のデータが転送される度に、前記ループカウンタを１インクリメントするデータカウンタと、
前記ループカウンタのループカウント値が０でない場合に、前記ループカウンタを１デクリメントして、前記演算部に対し、前記ループ内処理を実行させるループ制御部と、を有する。【００３４】
本発明のループ回数制御方法は、
プロセッサによるループ回数制御方法であって、
ループ先頭アドレスからループ末尾アドレスまでのループ内処理を実行するループ命令が発行されると、ループカウンタを０にリセットするステップと、
外部からデータメモリに対して、前記ループ内処理に用いるデータが一定量転送される度に、前記ループカウンタを１インクリメントするステップと、
前記ループカウンタのループカウント値が０でない場合に、前記ループカウンタを１デクリメントして、前記ループ内処理を実行するステップと、を有する。
【発明の効果】
【００３５】
本発明のプロセッサは、ループ命令が発行されると、ループカウンタを０にリセットし、ループ内処理に用いるデータがデータメモリに一定量転送される度に、ループカウンタをインクリメントし、ループカウンタのループカウント値が０でない場合に、ループカウンタをデクリメントしてループ内処理を実行する。【００３６】
すなわち、本発明のプロセッサは、ループ回数を設定せずに、データメモリに転送されてきたデータのデータ量に応じて、ループ内処理を繰り返し実行する。【００３７】
このため、ループ回数がループ内処理に用いるデータのデータ量に依存し、そのデータが外部からデータメモリに転送された後に、そのデータのデータ量が判明するアプリケーションの場合でも、データ転送開始直後からループ処理を開始できる。【００３８】
よって、関連技術と比較して、データメモリの容量を低減し、かつ処理遅延を低減することができるという効果が得られる。
【図面の簡単な説明】
【００３９】
【図１】関連技術のプロセッサの構成を示すブロック図である。
【図２】関連技術のプロセッサの動作を説明するフローチャートである。
【図３】本発明の第１の実施形態のプロセッサの構成を示すブロック図である。
【図４】本発明の第１の実施形態のプロセッサの動作を説明するフローチャートである。
【図５】本発明の第２の実施形態のプロセッサの構成を示すブロック図である。
【発明を実施するための形態】
【００４０】
以下に、本発明を実施するための形態について図面を参照して説明する。
【００４１】
（第１の実施形態）
図３に、本発明の第１の実施形態のプロセッサの構成を示す。
【００４２】
図３に示すように、本実施形態のプロセッサ１０００は、プログラムカウンタ１００と、命令メモリ２００と、命令デコーダ３００と、演算部４００と、データメモリ５００と、ループカウンタ６００と、ループ制御部７００と、データカウンタ８００と、を有している。
【００４３】
すなわち、本実施形態のプロセッサ１０００は、図１の関連技術のプロセッサ１００２と比較して、データカウンタ８００が追加された点が異なり、それ以外の構成要素は同じである。
【００４４】
関連技術のプロセッサ１００２では、ループカウンタ６００に対し、演算部４００からループ回数が設定されていた。これに対して、本実施形態のプロセッサ１０００では、ループカウンタ６００に対し、命令デコーダ３００からループカウントリセットが設定される。また、ループ制御部７００は、命令メモリ２００に対し、強制ＮＯＰ（No  Operation）通知を行い、ＮＯＰ命令を強制発行させることができる。
【００４５】
追加したデータカウンタ８００は、外部バス２０００に接続され、外部メモリ４０００からデータメモリ５００へのデータ転送をモニタし、ループ内処理データが一定量転送される度に、ループカウンタ６００へインクリメント信号を通知する。このループカウンタ６００をインクリメントするデータ単位を、インクリメントデータ単位と呼称する。インクリメントデータ単位は、命令デコーダ３００から設定される。
【００４６】
プログラムカウンタ１００は、発行する命令の命令アドレスを、命令メモリ２００およびループ制御部７００に通知する。プログラムカウンタ１００は、通常、命令アドレスを順次インクリメントし、インクリメントした命令アドレスを通知していくが、演算部４００もしくはループ制御部７００により、後述する命令アドレスジャンプ先が設定された場合は、設定されたジャンプ先の命令アドレスを通知する。
【００４７】
命令メモリ２００は、プログラムカウンタ１００から通知された命令アドレスに従って命令をフェッチし、フェッチした命令を命令デコーダ３００に発行する。但し、命令メモリ２００は、ループ制御部７００から強制ＮＯＰ通知を受信した場合は、ＮＯＰ命令を命令デコーダ３００に発行する。
【００４８】
命令デコーダ３００は、命令メモリ２００により発行された命令をデコードし、デコードした命令を演算制御信号として演算部４００へ通知する。また、命令デコーダ３００は、ループ命令が発行された時は、ループ先頭アドレスおよびループ末尾アドレスをループ制御部７００に設定するとともに、インクリメントデータ単位をデータカウンタ８００に設定する。
【００４９】
演算部４００は、命令デコーダ３００から通知された演算制御信号に従って、各種演算を行う。演算部４００は、演算に必要なデータをデータメモリ５００からロードして、内部に具備するレジスタファイルに格納し、そのデータを用いて演算を行う。また、演算部４００は、演算結果をデータメモリ５００に格納することもできる。また、演算部４００は、ループ命令をデコードした演算制御信号が通知された時は、ループ回数をループカウンタ６００へ設定する。また、演算部４００は、条件分岐命令をデコードした演算制御信号が通知された時は、状態（例えば、レジスタファイル値や、ＤＭＡＣ３０００から通知されるデータ転送完了通知信号）が演算制御信号で規定した条件に一致した場合、命令アドレスジャンプ先をプログラムカウンタ１００へ設定し、プログラム進行を分岐することができる。
【００５０】
データメモリ５００は、演算部４００からのデータの格納および演算部４００へのデータのロードを行う。また、データメモリ５００とプロセッサ外部の外部メモリ４０００間で、外部バス２０００を介してデータ転送を行うことができる。データ転送は、ＤＭＡＣ３０００で管理する。ＤＭＡＣ３０００は、プロセッサ１００２を含む外部装置から入力されたＤＭＡＣ設定に基づいてデータ転送を管理する。
【００５１】
ループ制御部７００は、プログラムカウンタ１００から通知された命令アドレスが、命令デコーダ３００により設定されたループ先頭アドレスに一致した場合、ループカウンタ６００から通知されたループカウント値が０か否かを判定する。０の場合、ループ制御部７００は、ループカウント値が１以上になるまで、ループ先頭アドレスを、命令アドレスジャンプ先として、プログラムカウンタ１００に通知するとともに、命令メモリ２００に強制ＮＯＰ通知を行い、プログラム進行を停止する。一方、ループカウント値が１以上の場合、ループ制御部７００は、ループカウンタ６００へデクリメント信号を通知する。
【００５２】
データカウンタ８００は、上述のように、外部バス２０００に接続され、外部メモリ４０００からデータメモリ５００へのデータ転送をモニタし、インクリメントデータ単位のループ内処理データが転送される度に、ループカウンタ６００へインクリメント信号を通知する。
【００５３】
ループカウンタ６００は、命令デコーダ３００からループカウンタリセットが設定されると、ループカウント値を０にリセットし、データカウンタ８００からインクリメント信号が通知される度に、ループカウント値を１インクリメントし、ループ制御部７００からデクリメント信号が通知される度に、ループカウント値を１デクリメントする。
【００５４】
ループ制御部７００は、プログラムカウンタ１００から通知された命令アドレスが、命令デコーダ３００により設定されたループ末尾アドレスと一致し、かつ、ループカウンタ６００から通知されたループカウント値が０以外の場合、ループ先頭アドレスを、命令アドレスジャンプ先として、プログラムカウンタ１００に通知する。
【００５５】
また、ループ制御部７００は、プログラムカウンタ１００から通知された命令アドレスが、命令デコーダ３００により設定されたループ末尾アドレスと一致し、かつ、ループカウンタ６００から通知されたループカウント値が０の場合、ループ末尾アドレスの次の命令アドレスを、命令アドレスジャンプ先として、プログラムカウンタ１００に通知する。
【００５６】
以下、本実施形態のプロセッサ１０００の動作について説明する。
【００５７】
図４に、図３に示した本実施形態のプロセッサ１０００の処理フローを示す。
【００５８】
図４に示すように、ループ命令が発行されると（ステップＳ２０１のＹｅｓ）、ループカウンタ６００にカウンタリセットが設定される。また、ループ先頭アドレスおよびループ末尾アドレスがループ制御部７００に設定され、インクリメントデータ単位がデータカウンタ８００に設定される（ステップＳ２０２）。
【００５９】
次に、外部メモリ４０００からデータメモリ５００へのループ内処理データの転送を開始する（ステップＳ２０３）。データカウンタ８００は、インクリメントデータ単位のループ内処理データが転送される度に、ループカウンタ６００へインクリメント信号を通知する。
【００６０】
ループ命令の発行およびデータ転送の開始後は、命令アドレスがループ先頭アドレスに一致するまで、プログラムが進められる。
【００６１】
命令アドレスがループ先頭アドレスに一致すると（ステップＳ２０４のＹｅｓ）、ループ制御部７００は、ループカウント値が０か否かを判定する（ステップＳ２０５）。
【００６２】
ループカウント値が０の場合（ステップＳ２０５のＹｅｓ）、ループ制御部７００は、ループカウント値が１以上になるまで、ループ先頭アドレスを、命令アドレスジャンプ先として、プログラムカウンタ１００に通知するとともに（ステップＳ２０６）、命令メモリ２００に強制ＮＯＰ通知を行い、プログラム進行を停止する（ステップＳ２０７）。
【００６３】
一方、ループカウント値が１以上の場合（ステップＳ２０５のＮｏ）、ループ制御部７００は、ループカウンタ６００へデクリメント信号を通知し、ループカウンタ６００は、ループカウント値を１減らす（ステップＳ２０８）。
【００６４】
その後、命令アドレスがループ末尾アドレスに達するまで、演算部４００によるループ内処理が進められる（ステップＳ２０９）。
【００６５】
命令アドレスがループ末尾アドレスに一致すると（ステップＳ２１０のＹｅｓ）、ループ制御部７００は、ループカウント値を基に、現時点までに転送されたループ内処理データ分の処理が終了したか判定を行う。
【００６６】
ループカウント値が０以外の場合は（ステップＳ２１１のＮｏ）、ループ制御部７００は、処理が完了していないと判定し、ループ先頭アドレスを命令アドレスジャンプ先として、プログラムカウンタ１００に通知する（ステップＳ２１２）。
【００６７】
一方、ループカウント値が０の場合は（ステップＳ２１１のＹｅｓ）、ループ制御部７００は、処理が完了したと判定し、命令メモリ２００は、条件分岐命令を発行し（ステップＳ２１３）、演算部４００は、データ転送完了判定を行う（ステップＳ２１４）。転送完了は、ＤＭＡＣ３０００から通知されるデータ転送完了通知信号で確認することができる。
【００６８】
データ転送が完了していない場合は（ステップＳ２１４のＮｏ）、演算部４００は、ループ先頭アドレスを命令アドレスジャンプ先として、プログラムカウンタ１００に通知する（ステップＳ２１５）。
【００６９】
一方、データ転送が完了していた場合は（ステップＳ２１４のＹｅｓ）、演算部４００は、そのままプログラムを進める（ステップＳ２１６）。
【００７０】
これにより、全てのループ内処理データに対するループ内処理を実行することができる。
【００７１】
上述したように本実施形態では、ループ命令が発行されると、ループカウンタ６００を０にリセットし、ループ内処理データがデータメモリ５００に一定量転送される度に、ループカウンタ６００を１インクリメントし、ループカウンタ６００のループカウント値が０でない場合に、ループカウンタ６００を１デクリメントしてループ内処理を実行する。
【００７２】
すなわち、本実施形態では、ループ回数を設定せずに、データメモリ６００に転送されてきたループ内処理データのデータ量に応じて、ループ内処理を繰り返し実行する。
【００７３】
このため、ループ回数がループ内処理データ量に依存し、外部からループ内処理データがデータメモリに転送された後にループ内処理データ量が判明するアプリケーションの場合でも、データ転送開始直後から、ループ処理を開始できる。
【００７４】
よって、関連技術と比較して、データメモリ６００の容量を低減し、かつ処理遅延を低減することができるという効果が得られる。
【００７５】
なお、本実施形態では、データ転送完了判定を、条件分岐命令を発行して、演算部４００で行っているが、データ転送完了通知をループ制御部７００に入力し、命令アドレスがループ末尾アドレスに一致したときに、ループ抜け条件に、データ転送完了判定結果を加えることも、もちろん可能である。
【００７６】
（第２の実施形態）
図５に、本発明の第２の実施形態のプロセッサの構成を示す。
【００７７】
図５に示すように、本実施形態のプロセッサ１００１は、データカウンタ８００に対し、命令デコーダ３００からデータカウント条件を設定している点以外は、第１の実施形態の構成と同じである。
【００７８】
命令デコーダ３００は、命令メモリ２００からループ命令が発行された時は、ループ先頭アドレス、ループ末尾アドレスをループ制御部７００に設定し、ループカウンタリセットをループカウンタ６００へ設定し、データカウント条件およびインクリメントデータ単位をデータカウンタ８００へ設定する。
【００７９】
データカウンタ８００は、外部バス２０００に接続され、外部メモリ４０００からデータメモリ５００へのデータ転送をモニタし、データカウント条件を満たすインクリメントデータ単位のループ内処理データが転送される度に、ループカウンタ６００へインクリメント信号を通知する。
【００８０】
データカウント条件は、例えば、データの値の範囲を規定したものでも良い。この場合、データカウンタ８００は、データカウント条件により規定された範囲内にある値のインクリメントデータ単位のループ内処理データが転送される度に、ループカウンタ６００へインクリメント信号を通知する。
【００８１】
また、データカウント条件は、データメモリ５００のアドレスの範囲を規定したものでも良い。この場合、データカウンタ８００は、データカウント条件により規定された範囲内のアドレスにインクリメントデータ単位のループ内処理データが転送される度に、ループカウンタ６００へインクリメント信号を通知する。
【００８２】
以上、実施形態を参照して本発明を説明したが、本発明は上記実施形態に限定されものでない。本発明の構成や詳細には、本発明の範囲内で当業者が理解し得る様々な変更をすることができる。
【００８３】
本出願は、２００９年１１月２４日に出願された日本出願特願２００９−２６６３４７を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【図１】
2011065145.tif 000003
【図２】
2011065145.tif 000004
【図３】
2011065145.tif 000005
【図４】
2011065145.tif 000006
【図５】
2011065145.tif 000007
【国際調査報告】
2011065145.tif 000008
2011065145.tif 000009
2011065145.tif 000010
2011065145.tif 000011