(57)【要約】  各命令は、ループ処理を行う命令群を規定するフラグ情報及びループ処理の回数にかかる管理情報を保持する。命令レジスタファイル１６は、一のループ処理で処理される命令群を退避する。セレクタ１８は、リピートコントローラ１７の制御に応じて命令レジスタ１２から出力された命令、または命令レジスタファイル１６から出力された命令を選択して出力する。リピートコントローラ１７は、命令に含まれる管理情報と、内部状態に応じて、プログラムカウンタ１２の制御、命令レジスタファイル１６からの命令読み出しと格納状態の更新、及びセレクタ１８の選択処理、を制御する。
2012160794.tif 000002
【特許請求の範囲】
【請求項１】
命令実行手段で実行する命令が格納された命令格納手段から読み出す命令のアドレスを順次指定するプログラムカウンタと、
前記プログラムカウンタにより指定されて前記命令格納手段から読み出された命令のうち、ループ処理する１以上の命令からなる命令群を退避する命令退避手段と、
前記命令に含まれる前記ループ処理を行うか否か及び当該ループ処理の規定回数を示す管理情報に基づき、前記命令実行手段に供給する命令を制御するリピートコンローラと、
前記リピートコントローラの制御に基づき、前記命令格納手段から読み出された命令、または前記命令退避手段から出力された命令のいずれかを選択して前記命令実行手段に供給する選択手段と、を有し、
前記管理情報は、前記命令格納手段から読み出された命令が一のループ処理で処理される命令であるか否かを示す情報を含むものであって、
前記リピートコントローラは、前記管理情報に基づき、前記一のループ処理で処理される命令群を前記命令退避手段に退避させ、前記命令退避手段に前記一のループ処理で処理される命令が全て退避されると前記プログラムカウンタが指定するアドレスの更新を停止し、前記命令退避手段に保持された前記命令群から処理対象となる一の命令を出力させ、当該ループ処理実行中は、前記選択手段に前記命令退避手段から出力された命令を選択出力させる、演算処理装置。
【請求項２】
前記管理情報内の前記ループ処理の規定回数を第１の情報とし、前記命令格納手段から読み出された命令が前記一のループ処理で処理される命令であるか否かを示す情報を第２の情報とした場合、
前記命令の各々は、前記第１の情報を示すリピート回数フィールドと、前記第２の情報を示すフラグフィールドと、を備えることを特徴とする請求項１に記載の演算処理装置。
【請求項３】
前記管理情報内の前記ループ処理の規定回数を第１の情報とし、前記命令格納手段から読み出された命令が前記一のループ処理で処理される命令であるか否かを示す情報を第２の情報とした場合、
前記命令の各々は前記第１の情報を示すリピート回数フィールドを備え、
前記リピート回数フィールドに所定値が代入されているか否かにより前記第２の情報を表現することを特徴とする請求項１に記載の演算処理装置。
【請求項４】
前記プログラムカウンタにより指定されて前記命令格納手段から読み出された命令を一時的に格納する命令一時保持手段を備え、
前記選択手段及び前記命令退避手段は、前記命令格納手段から読み出された命令を、前記命令一時保持手段を介して取得することを特徴とする請求項１乃至請求項３のいずれか１項に記載の演算処理装置。
【請求項５】
前記リピートコントローラは、命令実行状態及び前記命令退避手段への命令退避状態を示す内部状態を保持し、前記内部状態及び前記管理情報に基づいて、前記命令退避手段への命令の退避処理、前記プログラムカウンタが指定するアドレスの更新、及び前記選択手段による選択処理、の制御を行うことを特徴とする請求項１乃至請求項４のいずれか１項に記載の演算処理装置。
【請求項６】
前記内部状態は、前記命令退避手段が前記命令群を保持しない第１の状態、前記命令退避手段が前記命令群を保持する第２の状態、前記一のループ処理の実行中を示す第３の状態のいずれかであることを特徴とする請求項５に記載の演算処理装置。
【請求項７】
前記リピートコントローラは、
前記命令から前記管理情報を読み出すプリデコーダと、
現在の前記内部状態と、前記プリデコーダの読み出した前記管理情報に応じて次サイクルの前記内部状態を決定するとともに、前記命令退避手段への命令の退避処理、前記プログラムカウンタが指定するアドレスの更新、及び前記選択手段による選択処理、の制御を行うステートコントローラと、
前記一のループ処理の現在の実行回数に関するカウント値を保持するカウンタと、を備えることを特徴とする請求項５または請求項６に記載の演算処理装置。
【請求項８】
前記命令実行手段を備えることを特徴とする請求項１乃至請求項７のいずれか１項に記載の演算処理装置。
【請求項９】
前記命令記憶手段を備えることを特徴とする請求項１乃至請求項８のいずれか１項に記載の演算処理装置。
【請求項１０】
処理対象となる命令は、ループ処理を行うか否か及び当該ループ処理の規定回数を示す管理情報を含み、前記管理情報は、命令格納手段から読み出された命令が一のループ処理で処理される命令であるか否かを示す情報を含み、
前記管理情報に基づいて、前記命令格納手段から読み出された命令のうち、前記一のループで処理する１以上の命令からなる命令群を退避し、前記一のループ処理で処理される命令が全て退避されると前記命令格納手段から読み出される命令の更新を停止し、前記一のループ処理の実行中は退避された前記命令群から処理対象となる一の命令を命令実行手段に出力し、当該ループ処理以外の命令実行中には前記命令格納手段から読み出された命令を命令実行手段に出力する、演算処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は演算処理装置及び演算処理方法に関し、特に命令のループ処理を扱う演算処理装置及び演算処理方法に関する。
【背景技術】
【０００２】
信号処理では、連続する多量のデータ（たとえばストリームデータ）を演算処理対象データとして扱い、それらの多量のデータに対して繰り返し同じ処理（複数の命令を用いて実現できる演算）を実行する場合が多い。【０００３】
図１７は、これらの信号処理を実現する一般的な汎用プロセッサである。汎用プロセッサは、命令メモリ５０と、プログラムカウンタ５１と、命令レジスタ５２と、デコードユニット５３と、レジスタファイル５４と、ＡＬＵ（Arithmetic Logic Unit）５５と、を備える。命令メモリ５０は、命令を格納する。プログラムカウンタ５１は、命令メモリ５０から命令を読み出すためのアドレスを生成する。命令レジスタ５２は、命令メモリ５０から読み出された命令を一時的に保持する。デコードユニット５３は、命令レジスタ５２に保持された命令を解釈して制御信号を生成する。レジスタファイル５４は、ＡＬＵ５５による演算に必要となる演算データを格納する。ＡＬＵ５５は、デコードユニット５３から発行される制御信号に応じて所望の演算処理を行う。【０００４】
図１７に示す汎用プロセッサで前述した信号処理（連続する多量のデータに対して繰り返し同じ処理（複数の命令を用いて実現できる演算）を実行する処理）を実現する場合、ループ処理を制御するための加算命令または減算命令、ループ回数のカウント、ジャンプ命令、比較命令等を実行する。すなわち、メインの演算処理の他に、ループ回数のカウントや命令分岐処理といった制御系の命令実行が必要となる。これにより、処理の実行に必要となる命令が増加し、これに伴い実行時間も増加するという問題が生じる。【０００５】
この問題を解決するために、ＤＳＰ（Digital Signal Processor）等の信号処理向けのプロセッサは、特許文献１に示すようなハードウェアループと呼ばれる機構を備えている。図１８は、ハードウェアループの処理機構を備えたプロセッサを示す図である。【０００６】
図１８に示すプロセッサは、命令メモリ６０と、プログラムカウンタ６１と、命令レジスタ６２と、デコードユニット６３と、レジスタファイル６４と、ＡＬＵ６５と、に加えて、ハードウェア（ＨＷ）ループユニット６６を備える。ＨＷループユニット６６は、ループ制御をハードウェア資源を用いて行うユニットである。ＨＷループユニット６６は、プログラムカウンタ６１、デコードユニット６３、及びレジスタファイル６４と接続されている。【０００７】
ＨＷループユニット６６には、ループ制御用の特殊命令を用いて、繰り返し回数、ループ部分の終端アドレス等がセットされる。ＨＷループユニット６６は、セットされた情報を基に、特殊命令からループ終端アドレスまでの命令を繰り返し回数分だけ繰り返し読み出すようなプログラムカウンタ動作となるようにプログラムカウンタ６１を制御する。これにより、プロセッサは、ループ処理を実現する。【０００８】
しかし、特許文献１に記載の技術では、ループ制御方式を指定するために必要なループ命令をループ対象となる演算の前に用いる必要がある。そのため、小規模なループが多数存在する場合、全体の命令数に対するループ制御用の特殊命令の割合が増加してしまう。【０００９】
この割合増加を回避するために、様々な手法が提案されている。特許文献２では、同じ処理を繰り返し実行する命令（たとえば、アドレスのインクリメント等）に対して、リピートの可否を示すフラグ及びリピート回数を指定するフィールドを設ける。そして、特許文献２に記載の制御装置は、このフィールドを参照することによってループ制御用の追加命令を実行することなくループ処理を実行できる。図１９は、特許文献２に記載の制御装置が処理対象とする命令のフィールドを示す図である。図示するように、命令には、"Ｒｅｐｅａｔ"（リピートの可否を示すフラグ）及び"Ｃｏｕｎｔ"（リピート回数）というフィールドが含まれる。特許文献２に記載の技術により、ループ処理に対する特殊命令の割合を小さくすることができ、命令メモリが保持する命令のサイズを削減できる。さらに、命令メモリのメモリ帯域が制限された状況であっても、制御装置はループ処理を実行することができる。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開昭５９−４７６５１号公報
【特許文献２】特表２０００−５０７００９号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
しかしながら、図１９に示す命令セット（特許文献２が提案する命令セット）は、１命令に対するリピート処理を対象とするものである。すなわち、特許文献２では、複数の命令を連続して繰り返し実行すること（たとえば、命令１→命令２→命令３という一連の実行を１０回繰り返すこと）を考慮していない。そのため、複数の命令を連続して繰り返し実行しようとする場合には、ハードウェアループのようにリピート制御を指定する個別命令を使用するか、ジャンプ命令や比較命令等を使用し、プログラムでループ構造を実現する必要がある。この場合、実行すべき命令数が増加し、命令メモリの増大や実行速度の低下を招いてしまう。【００１２】
本発明は、上記の課題を鑑みてなされたものであり、複数命令をまとめて繰り返し実行する場合でも、投入命令数を増加させることなく処理を実行することができる演算処理装置、及び演算処理方法を提供することを主たる目的とする。
【課題を解決するための手段】
【００１３】
本発明にかかる演算処理装置の一態様は、
命令実行手段（たとえば実施の形態１におけるデコードユニット１３、レジスタファイル１４、及びＡＬＵ１５）で実行する命令が格納された命令格納手段（たとえば実施の形態１における命令メモリ１０）から読み出す命令のアドレスを順次指定するプログラムカウンタと、
前記プログラムカウンタにより指定されて前記命令格納手段から読み出された命令のうち、ループ処理する１以上の命令からなる命令群を退避する命令退避手段（たとえば実施の形態１における命令レジスタファイル１６）と、
前記命令に含まれる前記ループ処理を行うか否か及び当該ループ処理の規定回数を示す管理情報に基づき、前記命令実行手段に供給する命令を制御するリピートコンローラと、
前記リピートコントローラの制御に基づき、前記命令格納手段から読み出された命令、または前記命令退避手段から出力された命令のいずれかを選択して前記命令実行手段に供給する選択手段（たとえば実施の形態１におけるセレクタ１８）と、を有し、
前記管理情報は、前記命令格納手段から読み出された命令が前記一のループ処理で処理される命令であるか否かを示す情報を含むものであって、
前記リピートコントローラは、前記管理情報に基づき、前記一のループ処理で処理される命令群を前記命令退避手段に退避させ、前記命令退避手段に前記一のループ処理で処理される命令が全て退避されると前記プログラムカウンタが指定するアドレスの更新を停止し、前記命令退避手段に保持された前記命令群から処理対象となる一の命令を出力させ、当該ループ処理実行中は、前記選択手段に前記命令退避手段から出力された命令を選択出力させる、ものである。【００１４】
本発明にかかる演算処理方法の一態様は、
処理対象となる命令は、ループ処理を行うか否か及び当該ループ処理の規定回数を示す管理情報を含み、前記管理情報は、命令格納手段から読み出された命令が一のループ処理で処理される命令であるか否かを示す情報を含み、
前記管理情報に基づいて、前記命令格納手段から読み出された命令のうち、前記一のループで処理する１以上の命令からなる命令群を退避し、前記一のループ処理で処理される命令が全て退避されると前記命令格納手段から読み出される命令の更新を停止し、前記一のループ処理の実行中は退避された前記命令群から処理対象となる一の命令を命令実行手段に出力し、当該ループ処理以外の命令実行中には前記命令格納手段から読み出された命令を命令実行手段に出力する、ものである。
【発明の効果】
【００１５】
本発明によれば、複数命令をまとめて繰り返し実行する場合でも、投入命令数を増加させることなく処理を実行することができる演算処理装置、及び演算処理方法を提供することができる。
【図面の簡単な説明】
【００１６】
【図１】実施の形態１にかかる演算処理装置の構成を示すブロック図である。
【図２】実施の形態１にかかるリピートコントローラ１７の内部構成を示すブロック図である。
【図３】実施の形態１にかかる演算処理装置が処理を行う命令のフィールドを示す図である。
【図４】実施の形態１にかかるリピートコントローラ１７による各処理部の制御を示す表である。
【図５】実施の形態１にかかる演算処理装置の処理する命令の具体例を示す図である。
【図６】実施の形態１にかかる演算処理装置の動作を示す概念図である。
【図７】実施の形態１にかかる演算処理装置の動作を示す概念図である。
【図８】実施の形態１にかかる演算処理装置の動作を示す概念図である。
【図９】実施の形態１にかかる演算処理装置の動作を示す概念図である。
【図１０】実施の形態１にかかる演算処理装置の動作を示す概念図である。
【図１１】実施の形態１にかかる演算処理装置の動作を示す概念図である。
【図１２】実施の形態１にかかる演算処理装置の動作を示す概念図である。
【図１３】実施の形態２にかかる演算処理装置が処理を行う命令のフィールドを示す図である。
【図１４】実施の形態２にかかるリピートコントローラ１７による各処理部の制御を示す表である。
【図１５】実施の形態２にかかる演算処理装置の処理する命令の具体例を示す図である。
【図１６】実施の形態２にかかる演算処理装置の処理する命令の具体例を示す図である。
【図１７】一般的なプロセッサの構成を示すブロック図である。
【図１８】ハードウェアループの処理機構を備えたプロセッサの構成を示すブロック図である。
【図１９】特許文献２に記載の制御装置が処理対象とする命令のフィールドを示す図である。
【発明を実施するための形態】
【００１７】
＜実施の形態１＞
以下、図面を参照して本発明の実施の形態について説明する。図１は、本実施の形態にかかる演算処理装置を示すブロック図である。
【００１８】
演算処理装置１は、命令メモリ１０と、プログラムカウンタ１１と、命令レジスタ１２と、デコードユニット１３と、レジスタファイル１４と、ＡＬＵ（Arithmetic Logic Unit）１５と、命令レジスタファイル１６と、リピートコントローラ１７と、セレクタ１８と、を備える。
【００１９】
命令メモリ１０は、実行対象となる命令が格納される。命令メモリ１０は、命令レジスタ１２と、プログラムカウンタ１１と、に接続されている。
【００２０】
プログラムカウンタ１１は、命令メモリ１０から命令を読み出す際のアドレスを供給するための情報を保持する。すなわち、プログラムカウンタ１１は、命令メモリ１０から読み出されるべき命令の情報を保持する。プログラムカウンタ１１は、更新状態またはＨＯＬＤ状態のいずれか状態となる。更新状態は、読み出されるべき命令の情報を更新できる状態である。ＨＯＬＤ状態は、読み出されるべき命令の情報を更新できない状態である。プログラムカウンタ１１は、命令メモリ１０と、リピートコントローラ１７と、ＡＬＵ１５と、に接続されている。
【００２１】
命令レジスタ１２は、命令メモリ１０から読み出された命令を一時的に保持するレジスタである。命令レジスタ１２は、セレクタ１８と、リピートコントローラ１７と、命令レジスタファイル１６と、に接続されている。
【００２２】
デコードユニット１３は、セレクタ１８から供給される命令を解釈し、後段に存在するレジスタファイル１４及びＡＬＵ１５を制御するための実行制御信号をレジスタファイル１４及びＡＬＵ１５に出力する。デコードユニット１３は、セレクタ１８と、レジスタファイル１４と、ＡＬＵ１５と、に接続されている。
【００２３】
レジスタファイル１４は、ＡＬＵ１５にて行う演算において使用されるデータを格納する。レジスタファイル１４は、デコードユニット１３と、ＡＬＵ１５と、に接続されている。
【００２４】
ＡＬＵ１５は、供給された命令を用いた演算処理を行う演算処理ユニットである。ＡＬＵ１５は、デコードユニット１３と、レジスタファイル１４と、に接続されている。
【００２５】
命令レジスタファイル１６は、ループ処理対象となる命令を一時的に格納する。命令レジスタファイル１６には、命令レジスタ１２から命令が供給される。さらに、リピートコントローラ１７の動作指示信号により、命令レジスタファイル１６が保持する命令が更新される。命令レジスタファイル１６による命令格納の具体例については後述する。命令レジスタファイル１６は、命令レジスタ１２と、リピートコントローラ１７と、セレクタ１８と、に接続されている。
【００２６】
リピートコントローラ１７は、デコードユニット１３による命令解釈に先立って、ループ処理を示すフラグ（後述の図３におけるＲＥＰ  ＦＬＡＧ３１）及びループ処理の規定回数を示す値（後述の図３におけるＲＥＰ  ＣＯＵＮＴ３２）をプリデコードする。リピートコントローラ１７は、内部状態と、プリデコードにより取得したフラグと、を参照して命令レジスタファイル１６と、セレクタ１８と、プログラムカウンタ１１と、に対して動作指示を行う。リピートコントローラ１７は、命令レジスタ１２と、命令レジスタファイル１６と、セレクタ１８と、プログラムカウンタ１１と、に接続されている。
【００２７】
図２は、リピートコントローラ１７の内部構成を示すブロック図である。リピートコントローラ１７は、プリデコーダ２０と、カウンタ２１と、ステートコントローラ２２と、を備える。
【００２８】
プリデコーダ２０は、命令レジスタ１２に格納されている命令を読み出し、当該命令をプリデコードする。カウンタ２１は、命令のループ処理を制御するためのカウント値を保持する。このカウント値は、ループ処理の残回数を示す。
【００２９】
ステートマシン２２は、３つの内部状態（０〜２）のうちいずれかの状態となる。第１の状態（０）は、命令レジスタファイル１６内に命令が存在しないことを示す。第２の状態（１）は、命令レジスタファイル１６内に命令が存在することを示す。第３の状態（２）は、リピート処理を実行中であることを示す。
【００３０】
ステートマシン２２は、カウンタ２１と、プリデコーダ２０と、に接続されている。カウンタ２１は、ステートマシン２２に接続されている。
【００３１】
図１の説明を再度行う。セレクタ１８は、命令レジスタ１２に格納されている命令、及び命令レジスタファイル１６に格納されている命令のいずれか一方を選択してデコードユニット１３に供給する。セレクタ１８は、リピートコントローラ１７からの指示に応じて当該選択を行う。セレクタ１８は、デコードユニット１３と、命令レジスタ１２と、命令レジスタファイル１６と、リピートコントローラ１７と、に接続されている。
【００３２】
上記した各処理部の動作を更に説明する。なお、前提として、命令メモリ１０には、所望の演算処理を行うために必要な命令が少なくとも１つ格納されている。図３は、命令メモリ１０に格納される命令の各フィールドを示す図である。
【００３３】
各命令は、ＯＰＥＣＯＤＥ３０と、ＲＥＰ ＦＬＡＧ３１と、ＲＥＰ  ＣＯＵＮＴ３２と、ＯＰＥＲＡＮＤ＃０（３３ａ）と、ＯＰＥＲＡＮＤ＃１（３３ｂ）と、ＯＰＥＲＡＮＤ＃２（３３ｃ）と、を備える。
【００３４】
ＯＰＥＣＯＤＥ３０は、命令の種類を示すフィールドである。ＲＥＰ ＦＬＡＧ３１は、ループ処理に含まれる命令であるか否かを示すフィールドである。ＲＥＰ  ＣＯＵＮＴ３２は、ループ処理の規定回数を示すフィールドである。ＯＰＥＲＡＮＤ＃０（３３ａ）は、実行される命令で使用される第一のデータが格納されているインデックスを示すフィールドである。当該インデックスは、レジスタファイル１４内での位置を示す。ＯＰＥＲＡＮＤ＃１（３３ｂ）及びＯＰＥＲＡＮＤ＃２（３３ｃ）についても同様である。ＯＰＥＲＡＮＤ＃１（３３ｂ）は、実行される命令で使用される第二のデータが格納されているインデックスを示すフィールドである。ＯＰＥＲＡＮＤ＃２（３３ｃ）は、実行される命令の演算結果を格納するインデックスを示すフィールドである。
【００３５】
以下に、上記した各処理部が１つの命令をどのように処理するかを説明する。
【００３６】
はじめに、プログラムカウンタ１１の保持する値を参照し、当該値に対応する命令が命令メモリ１０から読み出される。読み出された命令は命令レジスタ１２に格納される。そして、命令レジスタ１２に格納された命令は、リピートコントローラ１７に供給される。これと同時に、当該命令は、命令レジスタファイル１６に供給される。
【００３７】
リピートコントローラ１７内のプリデコーダ２０は、供給された命令をプリデコードする。ここでプリデコードとは、命令のＲＥＰ  ＦＬＡＧ３１及びＲＥＰ  ＣＯＵＮＴ３２の値を読み出すことである。プリデコーダ２０は、読み出したＲＥＰ  ＦＬＡＧ３１及びＲＥＰ  ＣＯＵＮＴ３２の値をステートマシン２２に供給する。
【００３８】
ステートマシン２２は、供給されたＲＥＰ  ＦＬＡＧ３１及びＲＥＰ  ＣＯＵＮＴ３２の値と、ステートマシン２２の内部状態（０〜２のいずれか）と、カウンタ２１のカウント値と、に基づいてプログラムカウンタ１１と、命令レジスタファイル１６と、セレクタ１８と、を制御する。ステートマシン２２による各処理部の制御、ステートマシン２２内での内部状態の変化、及びカウンタ２１の値の更新について以下に説明する。
【００３９】
内部状態が０である場合（命令レジスタファイル１６内に命令が存在しない場合）について説明する。読み出したＲＥＰ  ＦＬＡＧ３１の値が０である場合、ステートマシン２２は、命令レジスタ１２からの命令を選択することをセレクタ１８に指示する。さらに、ステートマシン２２は、更新状態に遷移することをプログラムカウンタ１１に指示する。さらにまた、ステートマシン２２は、命令レジスタファイル１６内部に保持されている命令のうち最新の命令を破棄することを指示する。そして、ステートマシン２２の内部状態は０（命令レジスタファイル１６内に命令が存在しない）のままとする。
【００４０】
一方、読み出したＲＥＰ  ＦＬＡＧ３１の値が１である場合、ステートマシン２２は、命令レジスタ１２からの命令を選択することをセレクタ１８に指示する。さらに、ステートマシン２２は、更新状態に遷移することをプログラムカウンタ１１に指示する。さらに、ステートマシン２２は、カウンタ２１のカウント値をプリデコーダ２０が抽出したＲＥＰ  ＣＯＵＮＴ３２の値から１引いた値に更新する。そして、ステートマシン２２の内部状態を１（命令レジスタファイル１６内に命令が存在する）とする。
【００４１】
次に、内部状態が１である場合（命令レジスタファイル１６内に命令が存在する場合）について説明する。読み出したＲＥＰ  ＦＬＡＧ３１の値が０である場合、ステートマシン２２は、命令レジスタ１２からの命令を選択することをセレクタ１８に指示する。さらに、ステートマシン２２は、更新状態に遷移することをプログラムカウンタ１１に指示する。そして、ステートマシン２２の内部状態は１（命令レジスタファイル１６内に命令が存在する）のままとする。
【００４２】
一方、読み出したＲＥＰ  ＦＬＡＧ３１の値が１である場合、ステートマシン２２は、命令レジスタファイル１６に対して、最も新しく入力された命令を破棄することを指示する。そして、ステートマシン２２は、セレクタ１８に対して、命令レジスタファイル１６の先頭に位置する命令（最も以前に入力された命令）を読み出して出力することを指示する。さらにステートマシン２２は、ＨＯＬＤ状態に遷移することをプログラムカウンタ１１に指示する。そして、ステートマシン２２の内部状態を２（リピート処理の実行中）とする。
【００４３】
次に、内部状態が２である場合（命令レジスタファイル１６内に命令が存在する場合）について説明する。読み出したＲＥＰ  ＦＬＡＧ３１の値が０である場合、ステートマシン２２は、命令レジスタファイル１６に対して、最も新しく入力された命令を破棄することを指示する。さらにステートマシン２２は、ＨＯＬＤ状態に遷移することをプログラムカウンタ１１に指示する。ステートマシン２２の内部状態を２（リピート処理の実行中）とする。そして、ステートマシン２２は、セレクタ１８に対して、命令レジスタファイル１６内の命令のうち、前クロックサイクルで読み出された命令の次に入力された命令を読み出して出力することを指示する。この際、読み出した命令が命令レジスタファイル１６の最後尾（最も新しく入力された命令）である場合、カウンタ２１のカウント値はデクリメントされる。
【００４４】
カウンタ２１のカウント値が０になった場合にのみ、ステートマシン２２は、ＨＯＬＤ状態から更新状態に遷移することをプログラムカウンタ１１に指示する。さらに、ステートマシン２２は、命令レジスタファイル１６の内部データをクリアすることを指示する。そして、ステートマシン２２の内部状態は０（命令レジスタファイル１６内に命令が存在しない）とする。
【００４５】
なお、図４は、上述のステートマシン２２による各処理部の制御、ステートマシン２２内での内部状態の変化、及びカウンタ２１のカウント値の更新を示す表である。
【００４６】
上述のように、リピートコントローラ１７は動作する。セレクタ１８は、リピートコントローラ１７の動作指示に応じて命令を選択し、選択した命令をデコードユニット１３に供給する。デコードユニット１３は、命令に含まれるＯＰＥＣＯＤＥ３０と、ＯＰＥＲＡＮＤ＃０（３３ａ）と、ＯＰＥＲＡＮＤ＃１（３３ｂ）と、ＯＰＥＲＡＮＤ＃２（３３ｃ）と、を解析し、解析結果を後段のレジスタファイル１４及びＡＬＵ１５に供給する。これに応じて、レジスタファイル１４及びＡＬＵ１５が所望の命令を実行する。このように、デコードユニット１３、レジスタファイル１４、ＡＬＵ１５は、供給された命令を実行する命令実行部として動作する。
【００４７】
続いて、具体的な命令の例を用いて、本実施の形態にかかる演算処理装置の動作について説明する。図５は、命令メモリ１０に格納されている命令を示す図である。図示するように、命令メモリ１０には４つの命令が格納されている。各命令のＲＥＰ  ＦＬＡＧ３１、ＲＥＰ  ＣＯＵＮＴ３２には、図５に示す値が設定されている。リピートコントローラ１７内部のステートマシン２２の内部状態は、初期状態で０（命令レジスタファイル内に命令が存在しない）である。プログラムカウンタ１１のカウント値は、命令１に対応する値である"１"とする。
【００４８】
なお、デコードユニット１３、レジスタファイル１４、及びＡＬＵ１５の動作は、既存の演算処理装置と同様の動作を行うため、詳細な説明は省略する。また、以下の説明に対応する各クロックサイクルでの演算処理装置の動作イメージを図６〜図１２に示す。
【００４９】
第１のクロックサイクルでは、プログラムカウンタ１１のカウント値"１"に応じて、命令１が命令メモリ１０から読み出される。読み出された命令１は、命令レジスタ１２に一時格納される。以上の動作は、図６に示される。
【００５０】
続いて第２のクロックサイクルでの動作について説明する。命令レジスタ１２に格納された命令１は、命令レジスタファイル１６及びリピートコントローラ１７に供給される。リピートコントローラ１７内のプレデコーダ２０は、命令１のＲＥＰ  ＦＬＡＧ３１及びＲＥＰ  ＣＯＵＮＴ３２の値を読み出す。命令１のＲＥＰ ＦＬＡＧ３１の値は"１"であり、ステートマシン２２の内部状態は"０"であるため、リピートコントローラ１７は、命令レジスタ１２から読み出された命令を選択するようにセレクタ１８を制御する。さらに、リピートコントローラ１７は、プログラムカウンタ１１を更新状態とする。ステートマシン２２は、カウンタ２１にＲＥＰ  ＣＯＵＮＴ３２の値"２"から１を減算した値である"１"をセットする。そして、ステートマシン２２の内部状態を"１"とする。セレクタ１８は、命令レジスタ１２から供給された命令１を選択してデコードユニット１３に入力する。これと同時に、プログラムカウンタ１１が更新状態であるため、プログラムカウンタ１１の値がカウントアップし、"１"から"２"となる。プログラムカウンタ１１の値が"２"であるため、命令２が命令メモリ１０から読み出される。読み出された命令２は、命令レジスタ１２に一時格納される。なお、命令レジスタファイル１６には、（命令１）が格納された状態となる。以上の動作は、図７に示される。
【００５１】
続いて第３のクロックサイクルでの動作について説明する。命令レジスタ１２に格納された命令２は、命令レジスタファイル１６及びリピートコントローラ１７に供給される。リピートコントローラ１７内のプレデコーダ２０は、命令２のＲＥＰ  ＦＬＡＧ３１及びＲＥＰ  ＣＯＵＮＴ３２の値を読み出す。命令２のＲＥＰ ＦＬＡＧ３１の値は"１"であり、ステートマシン２２の内部状態は"１"であるため、リピートコントローラ１７は、命令レジスタ１２から読み出された命令を選択するようにセレクタ１８を制御する。さらに、リピートコントローラ１７は、プログラムカウンタ１１を更新状態とする。そして、ステートマシン２２の内部状態を"１"とする。セレクタ１８は、命令レジスタ１２から供給された命令２を選択してデコードユニット１３に入力する。これと同時に、プログラムカウンタ１１が更新状態であるため、プログラムカウンタ１１の値がカウントアップし、"２"から"３"となる。プログラムカウンタ１１の値が"３"であるため、命令３が命令メモリ１０から読み出される。読み出された命令３は、命令レジスタ１２に一時格納される。なお、命令レジスタファイル１６には、（命令１、命令２）が格納された状態となる。以上の動作は、図８に示される。
【００５２】
第３のクロックサイクルでは、ループ処理の対象となる全ての命令（命令１及び命令２）が命令レジスタファイル１６に退避された状態である。
【００５３】
続いて第４のクロックサイクルでの動作について説明する。命令レジスタ１２に格納された命令３は、命令レジスタファイル１６及びリピートコントローラ１７に供給される。リピートコントローラ１７内のプレデコーダ２０は、命令３のＲＥＰ  ＦＬＡＧ３１及びＲＥＰ  ＣＯＵＮＴ３２の値を読み出す。命令３のＲＥＰ ＦＬＡＧ３１の値は"０"であり、ステートマシン２２の内部状態は"１"であるため、リピートコントローラ１７は、命令レジスタファイル１６に対して命令３の破棄を指示する。そして、リピートコントローラ１７は、命令レジスタファイル１６の先頭に格納されている命令１を読み出して出力するようにセレクタ１８を制御する。さらに、リピートコントローラ１７は、プログラムカウンタ１１をＨＯＬＤ状態とする。そして、ステートマシン２２の内部状態を"２"とする。セレクタ１８は、命令レジスタファイル１６から読み出した命令１をデコードユニット１３に入力する。プログラムカウンタ１１がＨＯＬＤ状態であるため、プログラムカウンタ１１の値はカウントアップせず、"３"のままとなる。読み出された命令３は、命令レジスタ１２に一時格納される。なお、命令レジスタファイル１６には、命令３が破棄されたため、（命令１、命令２）が格納された状態となる。以上の動作は、図９に示される。
【００５４】
第４のクロックサイクルでは、第３のクロックサイクルにおいてループ処理の対象となる全ての命令が退避されたため、プログラムカウンタ１１の更新の停止、命令レジスタファイル１６からの命令選択が行われている。後述する第５のクロックサイクルでも同様である。
【００５５】
続いて第５のクロックサイクルでの動作について説明する。命令レジスタ１２に格納された命令３は、命令レジスタファイル１６及びリピートコントローラ１７に供給される。リピートコントローラ１７内のプレデコーダ２０は、命令３のＲＥＰ  ＦＬＡＧ３１及びＲＥＰ  ＣＯＵＮＴ３２の値を読み出す。命令３のＲＥＰ ＦＬＡＧ３１の値は"０"であり、ステートマシン２２の内部状態は"２"であるため、リピートコントローラ１７は、命令レジスタファイル１６に対して命令３の破棄を指示する。そして、リピートコントローラ１７は、前サイクルで出力した命令１の次の命令である命令２を命令レジスタファイル１６から読み出して出力するようにセレクタ１８を制御する。これにより、命令レジスタファイル１６に格納された全ての命令を読み出したことになったため、カウンタ２１のカウント値をデクリメントする。デクリメントによりカウンタ２１のカウント値は"０"となる。カウンタ２１のカウント値が"０"になったため、リピートコントローラ１７は、プログラムカウンタ１１を更新状態とする。そして、ステートマシン２２の内部状態を"０"とする。さらに、リピートコントローラ１７は、命令レジスタファイル１６の保持する命令群をクリアする。セレクタ１８は、命令レジスタファイル１６から読み出した命令２をデコードユニット１３に入力する。プログラムカウンタ１１がＨＯＬＤ状態であったため、プログラムカウンタ１１の値はカウントアップせず、"３"のままとなる。読み出された命令３は、命令レジスタ１２に一時格納される。なお、命令レジスタファイル１６には、命令が格納されていない状態となる。以上の動作は、図１０に示される。
【００５６】
続いて第６のクロックサイクルでの動作について説明する。命令レジスタ１２に格納された命令３は、命令レジスタファイル１６及びリピートコントローラ１７に供給される。リピートコントローラ１７内のプレデコーダ２０は、命令３のＲＥＰ  ＦＬＡＧ３１及びＲＥＰ  ＣＯＵＮＴ３２の値を読み出す。命令３のＲＥＰ ＦＬＡＧ３１の値は"０"であり、ステートマシン２２の内部状態は"０"であるため、リピートコントローラ１７は、命令レジスタファイル１６に対して命令３の破棄を指示する。リピートコントローラ１７は、命令レジスタ１２から読み出された命令を選択するようにセレクタ１８を制御する。さらに、リピートコントローラ１７は、プログラムカウンタ１１を更新状態とする。そして、ステートマシン２２の内部状態を"０"とする。セレクタ１８は、命令レジスタ１２から供給された命令３を選択してデコードユニット１３に入力する。これと同時に、プログラムカウンタ１１が更新状態であるため、プログラムカウンタ１１の値がカウントアップし、"３"から"４"となる。プログラムカウンタ１１の値が"４"であるため、命令４が命令メモリ１０から読み出される。読み出された命令４は、命令レジスタ１２に一時格納される。以上の動作は、図１１に示される。
【００５７】
続いて第７のクロックサイクルでの動作について説明する。命令レジスタ１２に格納された命令４は、命令レジスタファイル１６及びリピートコントローラ１７に供給される。リピートコントローラ１７内のプレデコーダ２０は、命令４のＲＥＰ  ＦＬＡＧ３１及びＲＥＰ  ＣＯＵＮＴ３２の値を読み出す。命令４のＲＥＰ ＦＬＡＧ３１の値は"０"であり、ステートマシン２２の内部状態は"０"であるため、リピートコントローラ１７は、命令レジスタファイル１６に対して命令４の破棄を指示する。リピートコントローラ１７は、命令レジスタ１２から読み出された命令を選択するようにセレクタ１８を制御する。さらに、リピートコントローラ１７は、プログラムカウンタ１１を更新状態とする。そして、ステートマシン２２の内部状態を"０"とする。セレクタ１８は、命令レジスタ１２から供給された命令４を選択してデコードユニット１３に入力する。これと同時に、プログラムカウンタ１１が更新状態であるため、プログラムカウンタ１１の値がカウントアップし、"４"から"５"となる。プログラムカウンタ１１の値が"５"であるため、命令５が命令メモリ１０から読み出される。なお、図５に示す命令数は、４つであるため、以降の命令は実際には読み出されず、ＮＯＰ（No Operation）扱いとなる。以上の動作は、図１２に示される。
【００５８】
以上が、図５の命令を処理する場合における、本実施の形態にかかる演算処理装置の動作の具体例である。
【００５９】
続いて、本実施の形態にかかる演算処理装置の効果について説明する。上述のように、各命令には、ループ処理の対象となる（１つ以上の命令を含む）命令群に含まれるか否かを示すフラグ（ＲＥＰ  ＦＬＡＧ３１）と、ループ処理の規定回数（ＲＥＰ  ＣＯＵＮＴ３２）と、が規定されている。リピートコントローラ１７は、内部状態（０〜２）、カウンタ２１の保持するカウント値（すなわち、ループ処理の実行回数を表す値）、及びＲＥＰ  ＦＬＡＧ３１の値に応じて命令実行を制御する。すなわち、リピートコントローラ１７は、プログラムカウンタ１１の更新／ＨＯＬＤの設定、命令レジスタファイル１６の更新や読み出す命令の決定、及びセレクタ１８の動作の制御を行う。ここで、リピートコントローラ１７は、フラグ（ＲＥＰ  ＦＬＡＧ３１）に"１"が設定されている連続する命令をループ処理対象の命令群として扱う。すなわち、リピートコントローラ１７は、各命令に含まれる情報（ＲＥＰ  ＦＬＡＧ３１、ＲＥＰ  ＣＯＵＮＴ３２）を解釈することにより、新たな命令を処理することなく複数命令を１単位として繰り返し実行することができる。換言すると、本実施の携帯にかかる演算処理装置は、投入命令数を増加させることなく、複数命令を１単位として繰り返し実行することができる。
【００６０】
なお、図３に示す命令のフィールド構成は、あくまで一例であり、他のフィールド等を含む構成であっても良い。さらに、セレクタ１８が命令を供給するデコードユニット１３及び後段のレジスタファイル１４及びＡＬＵ１５の構成は、図１に示すものに限られず、演算の種類等に応じて適宜変更することが可能である。
【００６１】
なお、本実施の形態にかかる演算処理装置が処理を行う命令は、ループ処理の対象となる命令の範囲を示す情報（たとえば３つの命令をまとめてループ処理する等）と、ループ処理の回数に関する規定情報を備えたものと換言できる。上記した例では、リピートコントローラ１６が命令に含まれる情報（ＲＥＰ ＦＬＡＧ３１及びＲＥＰ  ＣＯＵＮＴ３２）を解釈することにより演算処理の制御を行ったが、必ずしもこれに限られるものではなく、プログラムカウンタ１１またはこれを制御する処理部がこれらの情報を解釈して命令メモリ１２から読み出される命令を制御しても良い。すなわち、プログラムカウンタ１１またはこれを制御する処理部がこれらの情報を基にデコードユニット１３に供給する命令を１つに決定し、この命令を読み出してデコードユニット１３に供給するようにしても良い。
【００６２】
＜実施の形態２＞
本実施の形態にかかる演算処理装置は、命令内に上述のＲＥＰ  ＦＬＡＧ３１というフィールドを有していなくても実施の形態１にかかる演算処理装置と同様の処理が行えることを特徴とする。以下、本実施の形態にかかる演算処理装置について実施の形態１にかかる演算処理装置との違いを中心に説明する。
【００６３】
図１３は、本実施の形態にかかる演算処理装置が扱う命令の各フィールドを示す図である。各命令は、ＯＰＥＣＯＤＥ４０と、ＲＥＰ  ＣＯＵＮＴ４１と、ＯＰＥＲＡＮＤ＃０（４２ａ）と、ＯＰＥＲＡＮＤ＃１（４２ｂ）と、ＯＰＥＲＡＮＤ＃２（４２ｃ）と、を備える。各命令は、ＲＥＰ  ＦＬＡＧ３１に対応するフィールドを持たない。
【００６４】
ＯＰＥＣＯＤＥ４０、ＯＰＥＲＡＮＤ＃０（４２ａ）、ＯＰＥＲＡＮＤ＃１（４２ｂ）、及びＯＰＥＲＡＮＤ＃２（４２ｃ）は、上述のＯＰＥＣＯＤＥ３０、ＯＰＥＲＡＮＤ＃０（３３ａ）、ＯＰＥＲＡＮＤ＃１（３３ｂ）、及びＯＰＥＲＡＮＤ＃２（３３ｃ）とほぼ同様の用途で使用される。
【００６５】
ＲＥＰ  ＣＯＵＮＴ４１は、０以上の整数をとり得る。ここで、ある命令のＲＥＰ  ＣＯＵＮＴ４１に"０"が設定されていた場合、前に発行されておりＲＥＰ  ＣＯＵＮＴ４１に"２"以上が設定されている命令と同時にループ処理が実行される。
【００６６】
たとえば、ある命令（命令Ｘ）のＲＥＰ  ＣＯＵＮＴ４１に"３"が設定されており、直後の命令（命令Ｙ）及び命令Ｙの直後の命令（命令Ｚ）のＲＥＰ  ＣＯＵＮＴ４１に"０"が設定されている場合、命令Ｘ→命令Ｙ→命令Ｚという一連の処理が３回繰り返される。
【００６７】
このように処理を行うことにより、本実施の形態にかかる命令は、実施の形態１と比べてＲＥＰ  ＦＬＡＧ３１のフィールドに対応するビット幅だけサイズを減少することができる。命令サイズを減少することにより、メモリ規模の削減が可能となる。
【００６８】
なお、本実施の形態にかかる演算処理装置の全体構成は、実施の形態１にかかる演算処理装置（図１）と同様の構成である。また、リピートコントローラ１７の内部構成も実施の形態１にかかる演算処理装置（図２）と同様である。
【００６９】
次に、本実施の形態にかかる演算処理装置の動作について図１を参照して詳細に説明する。まず、本実施の形態にかかる演算処理装置内の各処理部が１つの命令をどのように処理するかを説明する。
【００７０】
はじめに、プログラムカウンタ１１のカウント値を参照し、当該カウント値に対応する命令が命令メモリ１０から読み出される。読み出された命令は命令レジスタ１２に格納される。そして、命令レジスタ１２に格納された命令は、リピートコントローラ１７に供給される。これと同時に、当該命令は、命令レジスタファイル１６に供給される。
【００７１】
リピートコントローラ１７内のプリデコーダ２０は、供給された命令をプリデコードする。ここでプリデコードとは、命令のＲＥＰ  ＣＯＵＮＴ４１の値を読み出すことである。プリデコーダ２０は、読み出したＲＥＰ  ＣＯＵＮＴ４１の値をステートマシン２２に供給する。
【００７２】
ステートマシン２２は、供給されたＲＥＰ  ＣＯＵＮＴ４１の値と、ステートマシン２２の内部状態（０〜２のいずれか）と、カウンタ２１のカウント値と、に基づいてプログラムカウンタ１１と、命令レジスタファイル１６と、セレクタ１８と、を制御する。ステートマシン２２による各処理部の制御、ステートマシン２２内での内部状態の変化、及びカウンタ２１のカウント値の更新について以下に説明する。
【００７３】
内部状態が０である場合（命令レジスタファイル１６内に命令が存在しない場合）について説明する。読み出したＲＥＰ  ＣＯＵＮＴ４１の値が１である場合、ステートマシン２２は、命令レジスタ１２からの命令を選択することをセレクタ１８に指示する。さらに、ステートマシン２２は、更新状態に遷移することをプログラムカウンタ１１に指示する。さらにまた、ステートマシン２２は、命令レジスタファイル１６内部に保持されている命令のうち最新の命令を破棄することを指示する。そして、ステートマシン２２の内部状態は０（命令レジスタファイル１６内に命令が存在しない）のままとする。
【００７４】
読み出したＲＥＰ  ＣＯＵＮＴ４１の値が２以上である場合、ステートマシン２２は、命令レジスタ１２からの命令を選択することをセレクタ１８に指示する。さらに、ステートマシン２２は、更新状態に遷移することをプログラムカウンタ１１に指示する。さらに、ステートマシン２２は、カウンタ２１のカウント値をプリデコーダ２０が抽出したＲＥＰ  ＣＯＵＮＴ４１の値から１引いた値に更新する。そして、ステートマシン２２の内部状態を１（命令レジスタファイル１６内に命令が存在する）とする。
【００７５】
次に、内部状態が１である場合（命令レジスタファイル１６内に命令が存在する場合）について説明する。読み出したＲＥＰ  ＣＯＵＮＴ４１の値が０である場合、ステートマシン２２は、命令レジスタ１２からの命令を選択することをセレクタ１８に指示する。さらに、ステートマシン２２は、更新状態に遷移することをプログラムカウンタ１１に指示する。そして、ステートマシン２２の内部状態は１（命令レジスタファイル１６内に命令が存在する）のままとする。
【００７６】
読み出したＲＥＰ  ＣＯＵＮＴ４１の値が１以上である場合、ステートマシン２２は、命令レジスタファイル１６に対して、最も新しく入力された命令を破棄することを指示する。そして、ステートマシン２２は、セレクタ１８に対して、命令レジスタファイル１６の先頭に位置する命令（最も以前に入力された命令）を読み出して出力することを指示する。さらにステートマシン２２は、ＨＯＬＤ状態に遷移することをプログラムカウンタ１１に指示する。そして、ステートマシン２２の内部状態を２（リピート処理の実行中）とする。
【００７７】
次に、内部状態が２である場合（命令レジスタファイル１６内に命令が存在する場合）について説明する。読み出したＲＥＰ  ＣＯＵＮＴの値が１以上である場合、ステートマシン２２は、命令レジスタファイル１６に対して、最も新しく入力された命令を破棄することを指示する。さらにステートマシン２２は、ＨＯＬＤ状態に遷移することをプログラムカウンタ１１に指示する。ステートマシン２２の内部状態を２（リピート処理の実行中）とする。そして、ステートマシン２２は、セレクタ１８に対して、命令レジスタファイル１６内の命令のうち、全クロックサイクルで読み出された命令の次に入力された命令を読み出して出力することを指示する。この際、読み出した命令が命令レジスタファイル１６の最後尾（最も新しく入力された命令）である場合、カウンタ２１のカウント値はデクリメントされる。
【００７８】
カウンタ２１のカウント値が０になった場合にのみ、ステートマシン２２は、ＨＯＬＤ状態から更新状態に遷移することをプログラムカウンタ１１に指示する。さらに、ステートマシン２２は、命令レジスタファイル１６の内部データをクリアすることを指示する。そして、ステートマシン２２の内部状態は０（命令レジスタファイル内に命令が存在しない）とする。
【００７９】
なお、図１４は、上述のステートマシン２２による各処理部の制御、ステートマシン２２内での内部状態の変化、及びカウンタ２１のカウント値の更新を示す表である。
【００８０】
上述のように、リピートコントローラ１７は動作する。セレクタ１８は、リピートコントローラ１７の動作指示に応じて命令を選択し、選択した命令をデコードユニット１３に供給する。デコードユニット１３は、命令に含まれるＯＰＥＣＯＤＥ４０と、ＯＰＥＲＡＮＤ＃０（４２ａ）と、ＯＰＥＲＡＮＤ＃１（４２ｂ）と、ＯＰＥＲＡＮＤ＃２（４２ｃ）と、を解析し、解析結果を後段のレジスタファイル１４及びＡＬＵ１５に供給する。これに応じて、レジスタファイル１４及びＡＬＵ１５が所望の命令を実行する。このように、デコードユニット１３、レジスタファイル１４、ＡＬＵ１５は、供給された命令を実行する命令実行部として動作する。
【００８１】
続いて、具体的な命令の例を用いて、本実施の形態にかかる演算処理装置の動作について説明する。図１５は、命令メモリ１０に格納されている命令を示す図である。図示するように、命令メモリ１０には４つの命令が格納されている。リピートコントローラ１７内部のステートマシン２２の内部状態は、初期状態で０（命令レジスタファイル内に命令が存在しない）である。プログラムカウンタ１１のカウント値は、命令１に対応する値である"１"とする。なお、第１のクロックサイクルから第７のクロックサイクルの動作概念図は図６〜図１２と略同一（命令内にＲＥＰ  ＦＬＡＧが含まれないことを除く）であるため、図示は省略する。
【００８２】
第１のクロックサイクルでは、プログラムカウンタ１１のカウント値"１"に応じて、命令１が命令メモリ１０から読み出される。読み出された命令１は、命令レジスタ１２に一時格納される。
【００８３】
続いて第２のクロックサイクルでの動作について説明する。命令レジスタ１２に格納された命令１は、命令レジスタファイル１６及びリピートコントローラ１７に供給される。リピートコントローラ１７内のプレデコーダ２０は、命令１のＲＥＰ  ＣＯＵＮＴ４１の値を読み出す。命令１のＲＥＰ ＣＯＵＮＴ４１の値は"２"であり、ステートマシン２２の内部状態は"０"であるため、リピートコントローラ１７は、命令レジスタ１２から読み出された命令を選択するようにセレクタ１８を制御する。さらに、リピートコントローラ１７は、プログラムカウンタ１１を更新状態とする。ステートマシン２２は、カウンタ２１にＲＥＰ  ＣＯＵＮＴ３２の値"２"から１を減算した値である"１"をセットする。そして、ステートマシン２２の内部状態を"１"とする。セレクタ１８は、命令レジスタ１２から供給された命令１を選択してデコードユニット１３に入力する。これと同時に、プログラムカウンタ１１が更新状態であるため、プログラムカウンタ１１の値がカウントアップし、"１"から"２"となる。プログラムカウンタ１１の値が"２"であるため、命令２が命令メモリ１０から読み出される。読み出された命令２は、命令レジスタ１２に一時格納される。なお、命令レジスタファイル１６には、（命令１）が格納された状態となる。
【００８４】
続いて第３のクロックサイクルでの動作について説明する。命令レジスタ１２に格納された命令２は、命令レジスタファイル１６及びリピートコントローラ１７に供給される。リピートコントローラ１７内のプレデコーダ２０は、命令２のＲＥＰ  ＣＯＵＮＴ４１の値を読み出す。命令２のＲＥＰ ＣＯＵＮＴ４１の値は"０"であり、ステートマシン２２の内部状態は"１"であるため、リピートコントローラ１７は、命令レジスタ１２から読み出された命令を選択するようにセレクタ１８を制御する。さらに、リピートコントローラ１７は、プログラムカウンタ１１を更新状態とする。そして、ステートマシン２２の内部状態を"１"とする。セレクタ１８は、命令レジスタ１２から供給された命令２を選択してデコードユニット１３に入力する。これと同時に、プログラムカウンタ１１が更新状態であるため、プログラムカウンタ１１の値がカウントアップし、"２"から"３"となる。プログラムカウンタ１１の値が"３"であるため、命令３が命令メモリ１０から読み出される。読み出された命令３は、命令レジスタ１２に一時格納される。なお、命令レジスタファイル１６には、（命令１、命令２）が格納された状態となる。
【００８５】
続いて第４のクロックサイクルでの動作について説明する。命令レジスタ１２に格納された命令３は、命令レジスタファイル１６及びリピートコントローラ１７に供給される。リピートコントローラ１７内のプレデコーダ２０は、命令３のＲＥＰ  ＣＯＵＮＴ４１の値を読み出す。命令３のＲＥＰ ＣＯＵＮＴ４１の値は"１"であり、ステートマシン２２の内部状態は"１"であるため、リピートコントローラ１７は、命令レジスタファイル１６に対して命令３の破棄を指示する。そして、リピートコントローラ１７は、命令レジスタファイル１６の先頭に格納されている命令１を読み出して出力するようにセレクタ１８を制御する。さらに、リピートコントローラ１７は、プログラムカウンタ１１をＨＯＬＤ状態とする。そして、ステートマシン２２の内部状態を"２"とする。セレクタ１８は、命令レジスタファイル１６から読み出した命令１をデコードユニット１３に入力する。プログラムカウンタ１１がＨＯＬＤ状態であるため、プログラムカウンタ１１の値はカウントアップせず、"３"のままとなる。読み出された命令３は、命令レジスタ１２に一時格納される。なお、命令レジスタファイル１６には、命令３が破棄されたため、（命令１、命令２）が格納された状態となる。
【００８６】
続いて第５のクロックサイクルでの動作について説明する。命令レジスタ１２に格納された命令３は、命令レジスタファイル１６及びリピートコントローラ１７に供給される。リピートコントローラ１７内のプレデコーダ２０は、命令３のＲＥＰ  ＣＯＵＮＴ４１の値を読み出す。命令３のＲＥＰ ＣＯＵＮＴ４１の値は"１"であり、ステートマシン２２の内部状態は"２"であるため、リピートコントローラ１７は、命令レジスタファイル１６に対して命令３の破棄を指示する。そして、リピートコントローラ１７は、前サイクルで出力した命令１の次の命令である命令２を読み出して出力するようにセレクタ１８を制御する。これにより、命令レジスタファイル１６に格納された全ての命令を読み出したことになったため、カウンタ２１のカウント値をデクリメントする。デクリメントによりカウンタ２１のカウント値は"０"となる。カウンタ２１のカウント値が"０"になったため、リピートコントローラ１７は、プログラムカウンタ１１を更新状態とする。そして、ステートマシン２２の内部状態を"０"とする。さらに、リピートコントローラ１７は、命令レジスタファイル１６の保持する命令群をクリアする。セレクタ１８は、命令レジスタファイル１６から読み出した命令２をデコードユニット１３に入力する。プログラムカウンタ１１がＨＯＬＤ状態であったため、プログラムカウンタ１１の値はカウントアップせず、"３"のままとなる。読み出された命令３は、命令レジスタ１２に一時格納される。なお、命令レジスタファイル１６には、命令が格納されていない状態となる。
【００８７】
続いて第６のクロックサイクルでの動作について説明する。命令レジスタ１２に格納された命令３は、命令レジスタファイル１６及びリピートコントローラ１７に供給される。リピートコントローラ１７内のプレデコーダ２０は、命令３のＲＥＰ  ＣＯＵＮＴ４１の値を読み出す。命令３のＲＥＰ ＣＯＵＮＴ４１の値は"１"であり、ステートマシン２２の内部状態は"０"であるため、リピートコントローラ１７は、命令レジスタファイル１６に対して命令３の破棄を指示する。リピートコントローラ１７は、命令レジスタ１２から読み出された命令を選択するようにセレクタ１８を制御する。さらに、リピートコントローラ１７は、プログラムカウンタ１１を更新状態とする。そして、ステートマシン２２の内部状態を"０"とする。セレクタ１８は、命令レジスタ１２から供給された命令３を選択してデコードユニット１３に入力する。これと同時に、プログラムカウンタ１１が更新状態であるため、プログラムカウンタ１１の値がカウントアップし、"３"から"４"となる。プログラムカウンタ１１の値が"４"であるため、命令４が命令メモリ１０から読み出される。読み出された命令４は、命令レジスタ１２に一時格納される。
【００８８】
続いて第７のクロックサイクルでの動作について説明する。命令レジスタ１２に格納された命令４は、命令レジスタファイル１６及びリピートコントローラ１７に供給される。リピートコントローラ１７内のプレデコーダ２０は、命令４のＲＥＰ  ＣＯＵＮＴ４１の値を読み出す。命令４のＲＥＰ ＣＯＵＮＴ４１の値は"１"であり、ステートマシン２２の内部状態は"０"であるため、リピートコントローラ１７は、命令レジスタファイル１６に対して命令４の破棄を指示する。リピートコントローラ１７は、命令レジスタ１２から読み出された命令を選択するようにセレクタ１８を制御する。さらに、リピートコントローラ１７は、プログラムカウンタ１１を更新状態とする。そして、ステートマシン２２の内部状態を"０"とする。セレクタ１８は、命令レジスタ１２から供給された命令４を選択してデコードユニット１３に入力する。これと同時に、プログラムカウンタ１１が更新状態であるため、プログラムカウンタ１１の値がカウントアップし、"４"から"５"となる。プログラムカウンタ１１の値が"５"であるため、命令５が命令メモリ１０から読み出される。なお、図１５に示す命令数は、４つであるため、以降の命令は実際には読み出されず、ＮＯＰ（No Operation）扱いとなる。
【００８９】
以上が、図１５の命令を処理する場合における、本実施の形態にかかる演算処理装置の動作の具体例である。
【００９０】
続いて、本実施の形態にかかる演算処理装置の効果について説明する。上述したように、本実施の形態にかかる演算処理装置は、図１３に示す命令を扱う。図１３に示す命令は、前述のＲＥＰ  ＦＬＡＧ３１を含むものではない。すなわち、図３に示す命令と比べて、図１３に示す命令は、ＲＥＰ  ＦＬＡＧ３１のフィールド幅だけデータサイズが小さい。これにより、メモリ規模の削減を図ることができる。
【００９１】
さらに、本実施の形態にかかる演算処理装置は、図１６に示すような単一命令のループ処理も適切に扱うことができる。すなわち、本実施の形態にかかる演算処理装置は、図１６に示す命令が処理対象である場合に、命令１→命令２→命令１→命令２→命令１→命令１→命令２→命令２→命令３→命令４というように処理を行うことができる。
【００９２】
なお、図１３に示す命令のフィールド構成は、あくまで一例であり、他のフィールド等を含む構成であっても良い。さらに、セレクタ１８が命令を供給するデコードユニット１３及び後段のレジスタファイル１４及びＡＬＵ１５の構成は、図１に示すものに限られず、演算の種類等に応じて適宜変更することが可能である。
【００９３】
以上、実施の形態を参照して本願発明を説明したが、本願発明は上記によって限定されるものではない。本願発明の構成や詳細には、発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【００９４】
上記実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
【００９５】
（付記１）
命令実行手段で実行する命令が格納された命令格納手段から読み出す命令のアドレスを順次指定するプログラムカウンタと、
前記プログラムカウンタにより指定されて前記命令格納手段から読み出された命令のうち、ループ処理する１以上の命令からなる命令群を退避する命令退避手段と、
前記命令に含まれる前記ループ処理を行うか否か及び当該ループ処理の規定回数を示す管理情報に基づき、前記命令実行手段に供給する命令を制御するリピートコンローラと、
前記リピートコントローラの制御に基づき、前記命令格納手段から読み出された命令、または前記命令退避手段から出力された命令のいずれかを選択して前記命令実行手段に供給する選択手段と、を有し、
前記管理情報は、前記命令格納手段から読み出された命令が一のループ処理で処理される命令であるか否かを示す情報を含むものであって、
前記リピートコントローラは、前記管理情報に基づき、前記一のループ処理で処理される命令群を前記命令退避手段に退避させ、前記命令退避手段に前記一のループ処理で処理される命令が全て退避されると前記プログラムカウンタが指定するアドレスの更新を停止し、前記命令退避手段に保持された前記命令群から処理対象となる一の命令を出力させ、当該ループ処理実行中は、前記選択手段に前記命令退避手段から出力された命令を選択出力させる、演算処理装置。
【００９６】
（付記２）
前記管理情報内の前記ループ処理の規定回数を第１の情報とし、前記命令格納手段から読み出された命令が前記一のループ処理で処理される命令であるか否かを示す情報を第２の情報とした場合、
前記命令の各々は、前記第１の情報を示すリピート回数フィールドと、前記第２の情報を示すフラグフィールドと、を備えることを特徴とする付記１に記載の演算処理装置。
【００９７】
（付記３）
前記管理情報内の前記ループ処理の規定回数を第１の情報とし、前記命令格納手段から読み出された命令が前記一のループ処理で処理される命令であるか否かを示す情報を第２の情報とした場合、
前記命令の各々は前記第１の情報を示すリピート回数フィールドを備え、
前記リピート回数フィールドに所定値が代入されているか否かにより前記第２の情報を表現することを特徴とする付記１に記載の演算処理装置。
【００９８】
（付記４）
前記プログラムカウンタにより指定されて前記命令格納手段から読み出された命令を一時的に格納する命令一時保持手段を備え、
前記選択手段及び前記命令退避手段は、前記命令格納手段から読み出された命令を、前記命令一時保持手段を介して取得することを特徴とする付記１乃至付記３のいずれか１項に記載の演算処理装置。
【００９９】
（付記５）
前記リピートコントローラは、命令実行状態及び前記退避手段への命令退避状態を示す内部状態を保持し、前記内部状態及び前記管理情報に基づいて、前記命令退避手段への命令の退避処理、前記プログラムカウンタが指定するアドレスの更新、及び前記選択手段による選択処理、の制御を行うことを特徴とする付記１乃至付記４のいずれか１項に記載の演算処理装置。
【０１００】
（付記６）
前記内部状態は、前記命令退避手段が前記命令群を保持しない第１の状態、前記命令退避手段が前記命令群を保持する第２の状態、前記一のループ処理の実行中を示す第３の状態のいずれかであることを特徴とする付記５に記載の演算処理装置。
【０１０１】
（付記７）
前記リピートコントローラは、
前記命令から前記管理情報を読み出すプリデコーダと、
現在の前記内部状態と、前記プリデコーダの読み出した前記管理情報に応じて次サイクルの前記内部状態を決定するとともに、前記命令退避手段への命令の退避処理、前記プログラムカウンタが指定するアドレスの更新、及び前記選択手段による選択処理、の制御を行うステートコントローラと、
前記一のループ処理の現在の実行回数であるカウント値を保持するカウンタと、を備えることを特徴とする付記５または付記６に記載の演算処理装置。
【０１０２】
（付記８）
前記命令実行手段を備えることを特徴とする付記１乃至付記７のいずれか１項に記載の演算処理装置。
【０１０３】
（付記９）
前記命令記憶手段を備えることを特徴とする付記１乃至付記８のいずれか１項に記載の演算処理装置。
【０１０４】
（付記１０）
前記内部状態が前記第１の状態であり、前記第２の情報が前記一のループ処理で処理される命令ではないことを示す値である場合、前記ステートコントローラは、前記選択手段に前記命令一時保持手段から出力された前記命令を選択させ、前記プログラムカウンタによるアドレスの更新を継続させ、前記命令退避手段に入力された最新の命令を破棄させ、
前記内部状態が前記第１の状態であり、前記第２の情報が前記一のループ処理で処理される命令であることを示す値である場合、前記ステートコントローラは、前記選択手段に前記命令一時保持手段から出力された前記命令を選択させ、前記プログラムカウンタによるアドレスの更新を継続させた後に、前記内部状態を前記第２の状態とし、前記カウンタは、前記カウント値をデクリメントし、
前記内部状態が前記第２の状態であり、前記第２の情報が前記一のループ処理で処理される命令ではないことを示す値である場合、前記ステートコントローラは、前記選択手段に前記命令一時保持手段から出力された前記命令を選択させ、前記プログラムカウンタによるアドレスの更新を継続させ、
前記内部状態が前記第２の状態であり、前記第２の情報が前記一のループ処理で処理される命令であることを示す値である場合、前記ステートコントローラは、前記選択手段に前記命令退避手段内の前記命令群から直近に読み出された命令に後続する命令を読み出して選択させ、前記プログラムカウンタによるアドレスの更新を停止させ、前記命令退避手段に入力された最新の命令を破棄させた後に前記内部状態を前記第３の状態とし、
前記内部状態が前記第３の状態であり、前記第２の情報が前記一のループ処理で処理される命令ではないことを示す値であり、前記カウント値が０でない場合、前記ステートコントローラは、前記選択手段に前記命令退避手段内の前記命令群から直近に読み出された命令に後続する命令を読み出して選択させ、前記プログラムカウンタによるアドレスの更新を停止させ、前記命令退避手段に入力された最新の命令を破棄させた後に前記内部状態を前記第３の状態とし、前記カウンタは、前記選択手段が選択した命令が前記命令退避手段の保持する前記命令群の最後尾であった場合には前記カウント値をデクリメントし、
前記内部状態が前記第３の状態であり、前記第２の情報が前記一のループ処理で処理される命令ではないことを示す値であり、前記カウント値が０ではない場合、前記ステートコントローラは、前記プログラムカウンタによるアドレスの更新を継続さるとともに、前記命令退避手段の保持する命令を全てクリアさせる、
ことを特徴とする付記６乃至付記９のいずれか１項に記載の演算処理装置。
【０１０５】
（付記１１）
処理対象となる命令は、ループ処理を行うか否か及び当該ループ処理の規定回数を示す管理情報を含み、前記管理情報は、命令格納手段から読み出された命令が一のループ処理で処理される命令であるか否かを示す情報を含み、
前記管理情報に基づいて、前記命令格納手段から読み出された命令のうち、ループ処理する１以上の命令からなる命令群を退避し、一のループ処理で処理される命令が全て退避されると前記命令格納手段から読み出される命令の更新を停止し、前記一のループ処理の実行中は退避された前記命令群から処理対象となる一の命令を命令実行手段に出力し、当該ループ処理以外の命令実行中には前記命令格納手段から読み出された命令を命令実行手段に出力する、演算処理方法。
【０１０６】
（付記１２）
前記管理情報内の前記ループ処理の規定回数を第１の情報とし、前記命令格納手段から読み出された命令が前記一のループ処理で処理される命令であるか否かを示す情報を第２の情報とした場合、
前記命令の各々は、前記第１の情報を示すリピート回数フィールドと、前記第２の情報を示すフラグフィールドと、を備えることを特徴とする付記１１に記載の演算処理方法。
【０１０７】
（付記１３）
前記管理情報内の前記ループ処理の規定回数を第１の情報とし、前記命令格納手段から読み出された命令が前記一のループ処理で処理される命令であるか否かを示す情報を第２の情報とした場合、
前記命令の各々は前記第１の情報を示すリピート回数フィールドを備え、
前記リピート回数フィールドに所定値が代入されているか否かにより前記第２の情報を表現することを特徴とする付記１１に記載の演算処理方法。
【０１０８】
この出願は、２０１１年５月２０日に出願された日本出願特願２０１１−１１３３９５を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【産業上の利用可能性】
【０１０９】
本発明は、単一の処理を多数データに対して実行するストリーム処理、詳細にはフィルタリング処理やデータのソート処理等の信号処理等に適用することができる。
【符号の説明】
【０１１０】
１０  命令メモリ
１１  プログラムカウンタ
１２  命令レジスタ
１３  デコードユニット
１４  レジスタファイル
１５  ＡＬＵ
１６  命令レジスタファイル
１７  リピートコントローラ
１８  セレクタ
２０  プリデコーダ
２１  カウンタ
２２  ステートコントローラ
３０  ＯＰＥＣＯＤＥ
３１  ＲＥＰ  ＦＬＡＧ
３２  ＲＥＰ  ＣＯＵＮＴ
３３ａ  ＯＰＥＲＡＮＤ＃０
３３ｂ  ＯＰＥＲＡＮＤ＃１
３３ｃ  ＯＰＥＲＡＮＤ＃２
４０  ＯＰＥＣＯＤＥ
４１  ＲＥＰ  ＣＯＵＮＴ
４２ａ  ＯＰＥＲＡＮＤ＃０
４２ｂ  ＯＰＥＲＡＮＤ＃１
４２ｃ  ＯＰＥＲＡＮＤ＃２ 
【図１】
2012160794.tif 000003
【図２】
2012160794.tif 000004
【図３】
2012160794.tif 000005
【図４】
2012160794.tif 000006
【図５】
2012160794.tif 000007
【図６】
2012160794.tif 000008
【図７】
2012160794.tif 000009
【図８】
2012160794.tif 000010
【図９】
2012160794.tif 000011
【図１０】
2012160794.tif 000012
【図１１】
2012160794.tif 000013
【図１２】
2012160794.tif 000014
【図１３】
2012160794.tif 000015
【図１４】
2012160794.tif 000016
【図１５】
2012160794.tif 000017
【図１６】
2012160794.tif 000018
【図１７】
2012160794.tif 000019
【図１８】
2012160794.tif 000020
【図１９】
2012160794.tif 000021
【手続補正書】
【提出日】平成25年11月18日(2013.11.18)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
命令実行手段で実行する命令が格納された命令格納手段から読み出す命令のアドレスを順次指定するプログラムカウンタと、
前記プログラムカウンタにより指定されて前記命令格納手段から読み出された命令のうち、ループ処理する１以上の命令からなる命令群を退避する命令退避手段と、
前記命令に含まれる前記ループ処理を行うか否か及び当該ループ処理の規定回数を示す管理情報に基づき、前記命令実行手段に供給する命令を制御するリピートコントローラと、
前記リピートコントローラの制御に基づき、前記命令格納手段から読み出された命令、または前記命令退避手段から出力された命令のいずれかを選択して前記命令実行手段に供給する選択手段と、を有し、
前記管理情報は、前記命令格納手段から読み出された命令が一のループ処理で処理される命令であるか否かを示す情報を含むものであって、
前記リピートコントローラは、前記管理情報に基づき、前記一のループ処理で処理される命令群を前記命令退避手段に退避させ、前記命令退避手段に前記一のループ処理で処理される命令が全て退避されると前記プログラムカウンタが指定するアドレスの更新を停止し、前記命令退避手段に保持された前記命令群から処理対象となる一の命令を出力させ、当該ループ処理実行中は、前記選択手段に前記命令退避手段から出力された命令を選択出力させる、演算処理装置。
【請求項２】
前記管理情報内の前記ループ処理の規定回数を第１の情報とし、前記命令格納手段から読み出された命令が前記一のループ処理で処理される命令であるか否かを示す情報を第２の情報とした場合、
前記命令の各々は、前記第１の情報を示すリピート回数フィールドと、前記第２の情報を示すフラグフィールドと、を備えることを特徴とする請求項１に記載の演算処理装置。
【請求項３】
前記管理情報内の前記ループ処理の規定回数を第１の情報とし、前記命令格納手段から読み出された命令が前記一のループ処理で処理される命令であるか否かを示す情報を第２の情報とした場合、
前記命令の各々は前記第１の情報を示すリピート回数フィールドを備え、
前記リピート回数フィールドに所定値が代入されているか否かにより前記第２の情報を表現することを特徴とする請求項１に記載の演算処理装置。
【請求項４】
前記プログラムカウンタにより指定されて前記命令格納手段から読み出された命令を一時的に格納する命令一時保持手段を備え、
前記選択手段及び前記命令退避手段は、前記命令格納手段から読み出された命令を、前記命令一時保持手段を介して取得することを特徴とする請求項１乃至請求項３のいずれか１項に記載の演算処理装置。
【請求項５】
前記リピートコントローラは、命令実行状態及び前記命令退避手段への命令退避状態を示す内部状態を保持し、前記内部状態及び前記管理情報に基づいて、前記命令退避手段への命令の退避処理、前記プログラムカウンタが指定するアドレスの更新、及び前記選択手段による選択処理、の制御を行うことを特徴とする請求項１乃至請求項４のいずれか１項に記載の演算処理装置。
【請求項６】
前記内部状態は、前記命令退避手段が前記命令群を保持しない第１の状態、前記命令退避手段が前記命令群を保持する第２の状態、前記一のループ処理の実行中を示す第３の状態のいずれかであることを特徴とする請求項５に記載の演算処理装置。
【請求項７】
前記リピートコントローラは、
前記命令から前記管理情報を読み出すプリデコーダと、
現在の前記内部状態と、前記プリデコーダの読み出した前記管理情報に応じて次サイクルの前記内部状態を決定するとともに、前記命令退避手段への命令の退避処理、前記プログラムカウンタが指定するアドレスの更新、及び前記選択手段による選択処理、の制御を行うステートコントローラと、
前記一のループ処理の現在の実行回数に関するカウント値を保持するカウンタと、を備えることを特徴とする請求項５または請求項６に記載の演算処理装置。
【請求項８】
前記命令実行手段を備えることを特徴とする請求項１乃至請求項７のいずれか１項に記載の演算処理装置。
【請求項９】
前記命令格納手段を備えることを特徴とする請求項１乃至請求項８のいずれか１項に記載の演算処理装置。
【請求項１０】
処理対象となる命令は、ループ処理を行うか否か及び当該ループ処理の規定回数を示す管理情報を含み、前記管理情報は、命令格納手段から読み出された命令が一のループ処理で処理される命令であるか否かを示す情報を含み、
前記管理情報に基づいて、前記命令格納手段から読み出された命令のうち、前記一のループで処理する１以上の命令からなる命令群を退避し、前記一のループ処理で処理される命令が全て退避されると前記命令格納手段から読み出される命令の更新を停止し、前記一のループ処理の実行中は退避された前記命令群から処理対象となる一の命令を命令実行手段に出力し、当該ループ処理以外の命令実行中には前記命令格納手段から読み出された命令を命令実行手段に出力する、演算処理方法。
【国際調査報告】
2012160794.tif 000022
2012160794.tif 000023
2012160794.tif 000024
2012160794.tif 000025