(57)【要約】【課題】演算命令を繰り返し実行させる場合に演算に寄与しない無駄な命令サイクルを削減し、演算の実行効率を向上させることができる演算処理装置を提供する。【解決手段】複数の命令を記憶する記憶部と、デコード対象の命令を計数値により特定する計数部と、記憶部から計数値に基づいて読み出された命令をデコードするデコード部と、デコードした命令が繰り返し命令である場合、繰り返し命令の後続の命令のうち、指定される命令数分の繰り返し対象命令を指定される繰り返し回数だけ繰り返すように計数部の計数値を更新させるとともに、２回目以降に繰り返し実行する繰り返し対象命令の被演算対象である更新オペランドを生成し、２回目以降の繰り返し対象命令を実行する場合、２回目以降の繰り返し対象命令のオペランドを生成した更新オペランドにそれぞれ更新して出力する制御部とを有する。【選択図】図２
2017228213.tif 000002
【特許請求の範囲】
【請求項１】
複数の命令を記憶する記憶部と、
デコード対象の命令を計数値により特定する計数部と、
前記記憶部から前記計数値に基づいて読み出された命令をデコードするデコード部と、
前記デコード部がデコードした命令が繰り返し命令である場合、前記繰り返し命令の後続の命令のうち、指定される命令数分の繰り返し対象命令を指定される繰り返し回数だけ繰り返すように前記計数部の計数値を更新させるとともに、２回目以降に繰り返し実行する繰り返し対象命令の被演算対象である更新オペランドを生成し、２回目以降の繰り返し対象命令を実行する場合、前記２回目以降の繰り返し対象命令のオペランドを生成した更新オペランドにそれぞれ更新して出力する制御部とを有する演算処理装置。
【請求項２】
前記制御部は、
複数のエントリを有するとともに前記複数のエントリのうち各繰り返し対象命令に割り当てたエントリの各々に繰り返し対象命令のオペランドを保持し、繰り返し対象命令をそれぞれ実行する度に前記複数のエントリの各々に格納した各オペランドが更新オペランドに更新される保持部を有し、
各繰り返し対象命令を実行する場合、前記２回目以降の繰り返し対象命令の各オペランドを前記保持部に格納された更新オペランドに更新して出力する請求項１記載の演算処理装置。
【請求項３】
各繰り返し対象命令において指定されるステップ数に基づいて、前記複数のエントリの各々に格納した各オペランドを更新する請求項２記載の演算処理装置。
【請求項４】
前記制御部は、
前記繰り返し命令の後続の命令の計数部の計数値を保持するレジスタを有し、
前記繰り返し命令の後、前記命令数分の繰り返し対象命令を実行する毎に、実行する繰り返し命令の計数値を前記レジスタに保持した計数値に更新する請求項１〜３の何れか１項に記載の演算処理装置。
【請求項５】
複数の命令を記憶する記憶部を有する演算処理装置の制御方法において、
前記演算処理装置が有する計数部が、デコード対象の命令を計数値により特定し、
前記演算処理装置が有するデコード部が、前記記憶部から前記計数値に基づいて読み出された命令をデコードし、
前記デコード部がデコードした命令が繰り返し命令である場合、前記演算処理装置が有する制御部が、前記繰り返し命令の後続の命令のうち、指定される命令数分の繰り返し対象命令を指定される繰り返し回数だけ繰り返すように前記計数部の計数値を更新させるとともに、２回目以降に繰り返し実行する繰り返し対象命令の被演算対象である更新オペランドを生成し、２回目以降の繰り返し対象命令を実行する場合、前記２回目以降の繰り返し対象命令のオペランドを生成した更新オペランドにそれぞれ更新して出力する演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
演算処理装置としてのプロセッサにおいて、複数の演算命令を繰り返し実行させる繰り返し演算処理は、例えば図１４（Ａ）に示すように実装されている。すなわち、（１）演算データの参照先オフセットであるデータ参照先の初期設定Ｐ１４０１、（２）演算命令Ｐ１４０２、（３）データ参照先の更新Ｐ１４０３、（４）繰り返しカウンタの減算命令Ｐ１４０４、（５）繰り返し分岐命令Ｐ１４０５の５つのフェーズで実装されている。
【０００３】
例えば、図１４（Ａ）に示したフローで演算を行うように演算器を実装した場合、実際に繰り返される４つのフェーズＰ１４０２〜Ｐ１４０５のうち、実質的に演算を行うフェーズは（２）演算命令Ｐ１４０２のみである。各フェーズの処理に１サイクル以上を要するため、１回の演算命令あたり最低でも４サイクルを必要とし、演算の実行効率が２５％以下となり演算器を効果的に使用できない。
【０００４】
例えば、多数の浮動小数点レジスタを有するプロセッサにおいて、図１４（Ｂ）に示すように個々に独立した浮動小数点レジスタに対し、レジスタ番号を１ずつ進めて乗算を繰り返し行い、６４回の乗算を行う処理を考える。図１４（Ｃ）にコーディング例を示すように、演算に使用する浮動小数点レジスタ番号を汎用レジスタに格納して、演算命令から間接参照させて演算を行い、演算命令を行う毎に汎用レジスタに格納する値を更新することで、個々の６４回の乗算が行える。
【０００５】
図１４（Ｃ）において、命令ｍｕｌが（２）演算命令Ｐ１４０２に対応し、３つの命令ａｄｄが（３）データ参照先の更新Ｐ１４０３に対応し、命令ｓｕｂが（４）繰り返しカウンタの減算命令Ｐ１４０４に対応し、命令ｂｒｎｚａが（５）繰り返し分岐命令Ｐ１４０５に対応する。この場合、ループ処理で繰り返される命令数は６命令であり、各命令の処理が１サイクルで実行できたとしても、６サイクルに１回しか演算命令を実行することができない。
【０００６】
繰り返し演算処理を実行させる場合の演算の実行効率を改善するため、対象の命令を繰り返し実行させる繰り返し命令（リピート命令）を持つプロセッサが提案されている（例えば、特許文献１〜３参照）。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平５−１２０００５号公報
【特許文献２】特開２０００−１８７５８３号公報
【特許文献３】特開２００１−１７５４７２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
繰り返し命令（リピート命令）を持つプロセッサとして、例えば命令デコード部の出力を記憶する記憶部を有し、命令デコード部が繰り返し命令であることを解読した場合、それより前の所定数の命令を記憶部から指定回数だけ繰り返し出力するプロセッサが提案されている。このプロセッサでは、繰り返し命令以降は、記憶部に保持した命令列を隙間なく指定回数だけ繰り返し出力するため、図１５（Ａ）に示すように繰り返しカウンタの減算命令及び繰り返し分岐命令は削減される。繰り返し演算処理は、（１）データ参照先の初期設定Ｐ１５０１、（２）演算命令Ｐ１５０２、（３）データ参照先の更新Ｐ１５０３の３つのフェーズで実装される。
【０００９】
例えば、図１４（Ｂ）に示した処理を行う場合、図１５（Ｂ）にコーディング例を示すように命令ｓｕｂ及び命令ｂｒｎｚａが削減される。ループ処理で繰り返される命令数は４命令であり、各命令の処理が１サイクルで実行できたとしても、４サイクルに１回しか演算命令を実行することができない。このように繰り返し命令（リピート命令）を適用した場合でも演算に寄与しない無駄な命令サイクルが存在して演算の実行効率を改善できないことがある。１つの側面では、本発明の目的は、演算命令を繰り返し実行させる場合に演算に寄与しない無駄な命令サイクルを削減し、演算の実行効率を向上させることができる演算処理装置を提供することにある。
【課題を解決するための手段】
【００１０】
演算処理装置の一態様は、複数の命令を記憶する記憶部と、デコード対象の命令を計数値により特定する計数部と、記憶部から計数値に基づいて読み出された命令をデコードするデコード部と、命令に係る制御を行う制御部とを有する。制御部は、デコード部がデコードした命令が繰り返し命令である場合、繰り返し命令の後続の命令のうち、指定される命令数分の繰り返し対象命令を指定される繰り返し回数だけ繰り返すように計数部の計数値を更新させるとともに、２回目以降に繰り返し実行する繰り返し対象命令の被演算対象である更新オペランドを生成し、２回目以降の繰り返し対象命令を実行する場合、２回目以降の繰り返し対象命令のオペランドを生成した更新オペランドにそれぞれ更新して出力する。
【発明の効果】
【００１１】
発明の一態様においては、演算命令を繰り返し実行させる場合に演算に寄与しないデータ参照先の更新や分岐に係る処理を行う命令サイクルを削減し、演算の実行効率を向上させることができる。
【図面の簡単な説明】
【００１２】
【図１】第１の実施形態における演算処理装置の構成例を示す図である。
【図２】第１の実施形態における命令制御部の構成例を示す図である。
【図３】第１の実施形態におけるリピート命令の処理を示す図である。
【図４】第１の実施形態におけるリピート命令の実装例を示す図である。
【図５】第１の実施形態におけるオペランド更新バッファを説明する図である。
【図６】第１の実施形態におけるリピート命令の処理例を示す図である。
【図７】図６に示したリピート命令でのオペランド更新バッファの使用例を示す図である。
【図８】第１の実施形態におけるプログラムカウンタ制御部の構成例を示す図である。
【図９】図６に示したリピート命令の処理例を示すタイムチャートである。
【図１０】第２の実施形態におけるプログラムカウンタ制御部の構成例を示す図である。
【図１１】第２の実施形態における制御レジスタセットの選択論理を示す図である。
【図１２】第２の実施形態におけるリピート命令の処理例を示す図である。
【図１３】図１２に示したリピート命令の処理例を示すタイムチャートである。
【図１４】従来の繰り返し演算処理の例を示す図である。
【図１５】従来の繰り返し演算処理の他の例を示す図である。
【発明を実施するための形態】
【００１３】
以下、本発明の実施形態を図面に基づいて説明する。
【００１４】
（第１の実施形態）
本発明の第１の実施形態について説明する。
図１は、第１の実施形態における演算処理装置としてのプロセッサの構成例を示す図である。本実施形態におけるプロセッサ１００は、命令フェッチステージ、命令デコードステージ、レジスタリードステージ、及び命令処理ステージのパイプライン構成を有するプロセッサである。
【００１５】
命令フェッチステージでは、プログラムカウンタ（ＰＣ）１０１の値に基づいて、命令列が格納されている命令領域１０２から命令を読み出す。本実施形態におけるプロセッサが実行可能な命令には、後続の所定数の命令を指定回数だけ繰り返し実行させる繰り返し命令（リピート命令）を含む。命令デコードステージでは、命令フェッチステージにおいて読み出した命令をデコード部１０３がデコードする。
【００１６】
デコードした結果、命令が整数演算命令である場合、レジスタリードステージでは、汎用レジスタ１０４や即値データレジスタ１０８からデータを読み出し、命令処理ステージでは、読み出したデータ等を用いて整数演算処理部１０５が命令によって指示された演算処理を行う。デコードした結果、命令が浮動小数点演算命令である場合、レジスタリードステージでは、浮動小数点レジスタ１０６や即値データレジスタ１０８からデータを読み出し、命令処理ステージでは、読み出したデータ等を用いて浮動小数点演算処理部１０７が命令によって指示された演算処理を行う。
【００１７】
また、デコードした結果、命令がロード命令又はストア命令である場合、レジスタリードステージでは、汎用レジスタ１０４や即値データレジスタ１０８からデータを読み出し、命令処理ステージでは、読み出したデータ等に基づいてアドレスを生成してロード処理部１０９又はストア処理部１１０がメモリ１２０に対するロード処理又はストア処理を行う。ロード処理によりメモリ１２０から読み出されたデータは、例えば汎用レジスタ１０４や浮動小数点レジスタ１０６に格納される。また、命令デコード部２３０によりデコードした結果、命令が分岐命令である場合、レジスタリードステージでは、汎用レジスタ１０４や即値データレジスタ１０８からデータを読み出し、命令処理ステージでは、読み出したデータ等に基づいて分岐処理部１１１が分岐処理を行い、処理結果に応じてプログラムカウンタ１０１の値を適宜更新する。
【００１８】
図２は、本実施形態におけるプロセッサにおいて、実行する命令に係る制御を行う命令制御部の構成例を示す図である。本実施形態における命令制御部は、プログラムカウンタ制御部２１０、命令デコード部２３０、及びリピート制御部２４０を有する。
【００１９】
プログラムカウンタ制御部２１０は、プログラムカウンタ２１１に係る制御を行う。プログラムカウンタ制御部２１０は、通常はサイクル毎に命令バイト数の値だけ増加させるようにプログラムカウンタ２１１の値を制御し、分岐命令である場合には処理結果に応じてプログラムカウンタ２１１の値を制御する。
【００２０】
プログラムカウンタ制御部２１０は、命令デコード部２３０によりデコードした結果、リピート命令である場合、命令デコード部２３０からの信号ＳＧＮ、ＳＧＲに基づいて、次の命令である後続命令から指定個数Ｎの繰り返し対象命令を指定回数Ｒだけ繰り返すようにプログラムカウンタ２１１の値を更新する制御を行う。また、プログラムカウンタ制御部２１０は、リピート命令である場合、リピート制御部２４０に対して、実行する繰り返し対象命令のオペランドのオペランド更新バッファ２４１における格納場所を示すアドレス情報を信号ＳＡＤにより通知するとともに、実行した繰り返し回数を信号ＲＣＮＴにより通知する。
【００２１】
命令デコード部２３０は、プログラムカウンタ２１１の値に基づいて命令領域２２０から読み出された命令をデコードする。命令デコード部２３０は、デコードした結果、命令がリピート命令以外の命令２３１である場合、命令のオペコード（ＯｐＣｏｄｅ）、オペランド（Ｏｐｅｒａｎｄ）、及びオペランドのステップ数（ｓｔｅｐ）をリピート制御部２４０に供給する。
【００２２】
また、命令デコード部２３０は、命令デコード部２３０によりデコードした結果、命令がリピート命令２３２である場合、プログラムカウンタ制御部２１０に対して、命令がリピート命令であることを信号ＳＧＲＰＴにより通知するとともに、リピート命令により指定される繰り返す命令数Ｎ及び繰り返し回数Ｒを信号ＳＧＮ、ＳＧＲによりそれぞれ通知する。なお、信号ＳＧＮ、ＳＧＲは、リピート命令により指定可能な命令数Ｎ及び繰り返し回数Ｒに応じたビット幅を有する。
【００２３】
リピート制御部２４０は、オペランド更新バッファ２４１、加算器２４２、及びセレクタ２４３を有する。オペランド更新バッファ２４１は、複数のエントリを有し、リピート命令によって繰り返し実行される繰り返し対象命令のオペランドを格納する。オペランド更新バッファ２４１は、プログラムカウンタ制御部２１０からの信号ＳＡＤが指定するエントリに格納されている値を、実行する繰り返し対象命令のオペランドとして出力する。また、オペランド更新バッファ２４１は、実行する繰り返し対象命令のオペランドとその繰り返し対象命令のオペランドのステップ数（ｓｔｅｐ）とを加算器２４２で加算した値を後続命令の更新オペランドとして、プログラムカウンタ制御部２１０からの信号ＳＡＤが指定するエントリに格納する。
【００２４】
セレクタ２４３は、プログラムカウンタ制御部２１０からの信号ＲＣＮＴに基づいて、命令デコード部２３０から供給されるオペランド又はオペランド更新バッファ２４１から供給されるオペランドを選択する。具体的には、セレクタ２４３は、リピート命令によって繰り返し対象命令を繰り返し実行されている期間であって、かつ信号ＲＣＮＴにより繰り返し回数が２回目以上であることが示された場合、オペランド更新バッファ２４１からの更新オペランドを選択し、それ以外は命令デコード部２３０からのオペランドを選択する。そして、リピート制御部２４０は、セレクタ２４３により選択されたオペランドと命令デコード部２３０から供給されるオペコードと結合した命令２４４を命令処理部へ出力する。
【００２５】
このようにオペランド更新バッファ２４１を設け、リピート命令によって繰り返される繰り返し対象命令の更新オペランドをすべて保持するとともに、繰り返し対象命令を実行する度に繰り返し対象命令に指定されたステップ数を加算器２４２により加算することで繰り返し対象命令のオペランドを更新オペランドに更新する。そして、リピート命令による２回目以降の繰り返し対象命令の繰り返しでは、繰り返し対象命令のオペランドをオペランド更新バッファ２４１が格納する更新オペランドに置き換えて命令を出力する。これにより、リピート命令を用いた繰り返し演算処理において、データ参照先の更新を行うための命令が不要となり、演算に寄与しない無駄な命令サイクルを削減することができる。
【００２６】
例えば、本実施形態におけるプロセッサにおいて、図１４（Ｂ）に示した処理を行う場合、図３（Ａ）にコーディング例を示すようにリピート命令ｒｅｐ及び演算命令ｍｕｌで実現でき、図３（Ｂ）に示すように繰り返し演算処理は、（１）リピート命令Ｐ３０１、（２）演算命令Ｐ３０２の２つのフェーズで実装できる。このとき、ループ処理で繰り返される命令は演算命令だけになり、毎サイクル連続で演算器に演算指示を出すことが可能になる。このように本実施形態におけるプロセッサによれば、繰り返し演算処理を実行させる場合、演算に寄与しないデータ参照先の更新や分岐に係る処理を行う命令サイクルを削減でき、繰り返し演算処理全体での演算の実行効率を向上させることができる。
【００２７】
なお、図３（Ａ）に示す命令＜ｒｅｐ  １，  ６４＞は、後続の１つの命令を６４回繰り返し実行することを示す。また、命令＜ｍｕｌ  ％ｆ０，  ％ｆ６４，  ％ｆ１２８，  １，  １，  １＞は、オペランドが％ｆ０、％ｆ６４、％ｆ１６４、それぞれのオペランドのステップ数が１である演算命令であり、浮動小数点レジスタ％ｆ０、％ｆ６４に格納されている値を乗算した結果を浮動小数点レジスタ％ｆ１２８に格納し、オペランド％ｆ０、％ｆ６４、％ｆ１２８を＋１ずつ増加させて同様の演算を行うことを示す。
【００２８】
図４は、リピート命令ｒｅｐの実装例を示す図である。図４（Ａ）には、リピート命令ｒｅｐによる繰り返し回数を汎用レジスタｇsrc2から取得する例を示しており、命令データには、リピート命令ｒｅｐのオペコードｏｐｃｏｄｅ、繰り返す命令数ｌｅｎｇｔｈ、レジスタアドレスｓｒｃ２を含む。このリピート命令ｒｅｐでは、後続の命令うち、命令数ｌｅｎｇｔｈで指定した命令数分の繰り返し対象命令を、汎用レジスタｇsrc2から取得した値の回数だけ繰り返す。
【００２９】
また、図４（Ｂ）には、リピート命令ｒｅｐによる繰り返し回数を命令中に指定する例を示しており、命令データには、リピート命令ｒｅｐのオペコードｏｐｃｏｄｅ、繰り返す命令数ｌｅｎｇｔｈ、繰り返し回数ｃｏｕｎｔを含む。このリピート命令ｒｅｐでは、後続の命令のうち、命令数ｌｅｎｇｔｈで指定した命令数分の繰り返し対象命令を、繰り返し回数ｃｏｕｎｔで指定した回数だけ繰り返す。
【００３０】
なお、前述したものに限らず、例えば繰り返す命令数を汎用レジスタから取得するようにしてもよい。また、リピート命令ｒｅｐにおいて、繰り返す命令数及び繰り返し回数の少なくとも一方の値が０である場合、そのリピート命令ｒｅｐはＮｏｐ（ｎｏ  ｏｐｅｒａｔｉｏｎ）処理となり、次の命令から処理が継続される。
【００３１】
図５は、第１の実施形態におけるオペランド更新バッファ２４１を説明する図である。最大で２つのソース（ｓｒｃ１、ｓｒｃ２）と１つのディスティネーション（ｄｓｔ）との３つのオペランドの演算命令をプロセッサがサポートする場合、オペランド更新バッファ２４１は、図５に示すように各エントリにソースｓｒｃ１が格納されるフィールド５０１、ソースｓｒｃ２が格納されるフィールド５０２、ディスティネーションｄｓｔが格納されるフィールド５０３を有する。
【００３２】
また、オペランド更新バッファ２４１のエントリは、リピート命令によって繰り返される繰り返し対象命令の各々に対して割り当てられる。例えば図６に示すように命令０〜命令７の８個の命令をリピート命令ｒｅｐによって繰り返す場合、繰り返される命令０〜命令７のオペランドは、図７に示すようにオペランド更新バッファ２４１に格納される。すなわち、命令０のオペランドがエントリ７００に格納され、命令１のオペランドがエントリ７０１に格納される。他の命令２〜命令７のオペランドも同様に、繰り返される繰り返し対象命令の実行順序に従って、それぞれエントリ７０２〜７０７に格納される。
【００３３】
なお、本例においては、オペランド更新バッファ２４１が１２８個のエントリを有する例を示しているが、これは一例であり、プロセッサの仕様等に応じて適切な数のエントリを設ければよい。また、オペランド更新バッファ２４１が１２８個のエントリを有する場合、プログラムカウンタ制御部２１０からの信号ＳＡＤのビット幅は少なくとも７ビットである。すなわち、信号ＳＡＤは、オペランド更新バッファ２４１が有するエントリを一意に指定できるビット幅を有していればよい。
【００３４】
次に、第１の実施形態におけるプログラムカウンタ制御部２１０について説明する。図８は、プログラムカウンタ制御部２１０の構成例を示す図である。プログラムカウンタ制御部２１０は、ＰＣレジスタ８０１、スタートＰＣレジスタ８０２、繰り返し指定命令数レジスタ８０３、繰り返し実行命令数レジスタ８０４、繰り返し回数レジスタ８０５、セレクタ８０６、８１０、比較回路８０７、８０８、論理積演算回路（ＡＮＤ回路）８０９、及び論理和演算回路（ＯＲ回路）８１１を有する。
【００３５】
ＰＣレジスタ８０１は、プログラムカウンタ値を保持する。スタートＰＣレジスタ８０２は、リピート命令によって繰り返す繰り返し対象命令の先頭の命令（リピート命令の次の命令）のプログラムカウンタ値を保持する。繰り返し指定命令数レジスタ８０３は、リピート命令によって指定された繰り返す命令数を保持する。リピート命令によって繰り返す命令数Ｎは、命令デコード部２３０から信号ＳＧＮにより通知される。
【００３６】
繰り返し実行命令数レジスタ８０４は、リピート命令によって繰り返し対象命令を繰り返しているとき、実行している繰り返し対象命令が繰り返す繰り返し対象命令の内の実行順序で何番目の命令であるかを保持する。なお、繰り返し対象命令のうち、実行順序で一番先の命令は０番目とし、以降、１番目、２番目、…とする。繰り返し回数レジスタ８０５は、リピート命令によって繰り返し対象命令を繰り返しているとき、繰り返した回数を保持する。なお、繰り返し回数レジスタ８０５は、リピート命令によって指定された繰り返し回数から実際に繰り返した回数を減算した値を保持する。繰り返し実行命令数レジスタ８０４及び繰り返し回数レジスタ８０５の値は、それぞれ信号ＳＡＤ、ＲＣＮＴとしてリピート制御部２４０に供給される。
【００３７】
セレクタ８０６は、命令デコード部２３０からの信号ＳＧＲＰＴに応じて、命令デコード部２３０から信号ＳＧＲにより通知される繰り返し回数Ｒ又は繰り返し回数レジスタ８０５の値から１減算した値の一方を出力する。セレクタ８１０は、ＡＮＤ回路８０９の出力信号ｐｃｓｅｌに応じて、スタートＰＣレジスタ８０２の値又はＰＣレジスタ８０１の値に命令バイト数を加算した値の一方を出力する。
【００３８】
比較回路８０７は、繰り返し指定命令数レジスタ８０３の値と繰り返し実行命令数レジスタ８０４の値に１加算した値とを比較し、一致する場合、出力信号ｃｍｐ１を“１”にし、一致しない場合、出力信号ｃｍｐを“０”にする。比較回路８０８は、繰り返し回数レジスタ８０５の値から１減算した値に係る比較動作を行い、繰り返し回数レジスタ８０５の値から１減算した値が０の場合、出力信号ｃｍｐ２を“１”にし、０より大きい場合、出力信号ｃｍｐ２を“０”にする。
【００３９】
ＡＮＤ回路８０９は、比較回路８０７の出力信号ｃｍｐ１、比較回路８０８の出力信号ｃｍｐ２、及び命令デコード部２３０からの信号ＳＧＲＰＴが入力され、演算結果を出力する。ＡＮＤ回路８０９は、出力信号ｃｍｐ１が“１”であり、かつ出力信号ｃｍｐ２及び信号ＳＧＲＰＴが“０”である場合、出力信号ｐｃｓｅｌを“１”にし、それ以外の場合、出力信号ｐｃｓｅｌを“０”にする。すなわち、ＡＮＤ回路８０９は、繰り返し指定命令数レジスタ８０３の値と繰り返し実行命令数レジスタ８０４の値に１加算した値とが一致し、かつ繰り返し回数レジスタ８０５の値から１減算した値が０でなく、かつ命令デコード部２３０によりデコードされた命令がリピート命令でないとき、出力信号ｐｃｓｅｌを“１”にする。
【００４０】
ＯＲ回路８１１は、命令デコード部２３０からの信号ＳＧＲＰＴ及び比較回路８０７の出力信号ｃｍｐ１が入力され、演算結果を出力する。ＯＲ回路８１１は、信号ＳＧＲＰＴ及び出力信号ｃｍｐ１の一方が“１”である場合、出力信号ｕｐｄａｔｅを“１”にし、信号ＳＧＲＰＴ及び出力信号ｃｍｐ１がともに“０”である場合、出力信号ｕｐｄａｔｅを“０”にする。すなわち、ＯＲ回路８１１は、命令デコード部２３０によりデコードされた命令がリピート命令である場合、又は繰り返し指定命令数レジスタ８０３の値と繰り返し実行命令数レジスタ８０４の値に１加算した値とが一致した場合、出力信号ｕｐｄａｔｅを“１”にする。
【００４１】
命令デコード部２３０でリピート命令がデコードされたとき、命令がリピート命令であることを示すように信号ＳＧＲＰＴが“０”から“１”に変化する。プログラムカウンタ制御部２１０は、信号ＳＧＲＰＴが“０”から“１”に変化することで、リピート命令によって繰り返す繰り返し対象命令の先頭の命令（リピート命令の次の命令）のプログラムカウンタ値をスタートＰＣレジスタ８０２に保持し、リピート命令によって繰り返す命令数Ｎを繰り返し指定命令数レジスタ８０３に保持する。また、信号ＳＧＲＰＴが“１”になることでＯＲ回路８１１の出力信号ｕｐｄａｔｅが“１”になり、リピート命令による繰り返し回数Ｒを繰り返し回数レジスタ８０５に保持し、繰り返し実行命令数レジスタ８０４の値が０にリセットされる。
【００４２】
次のサイクルで信号ＳＧＲＰＴが“０”に変化すると、ＯＲ回路８１１の出力信号ｕｐｄａｔｅも“０”になる。そして、サイクル毎にＰＣレジスタ８０１の値に命令バイト数を加算してプログラムカウンタ値を順次更新し処理を行う。また、このとき、繰り返し実行命令数レジスタ８０４の値がサイクル毎に１ずつ加算され、繰り返し指定命令数レジスタ８０３の値に達すると、比較回路８０７の出力信号ｃｍｐ１が“１”になる。
【００４３】
比較回路８０７の出力信号ｃｍｐ１が“１”になったとき、リピート命令による繰り返し回数に達していなければ、ＡＮＤ回路８０９の出力信号ｐｃｓｅｌが“１”になることで、ＰＣレジスタ８０１の値がスタートＰＣレジスタ８０２の値に更新される。また、比較回路８０７の出力信号ｃｍｐ１が“１”になることでＯＲ回路８１１の出力信号ｕｐｄａｔｅが“１”になり、繰り返し回数レジスタ８０５の値が１減算した値に更新され、繰り返し実行命令数レジスタ８０４の値が０にリセットされる。
【００４４】
次のサイクルで比較回路８０７の出力信号ｃｍｐ１が“０”になると、ＯＲ回路８１１の出力信号ｕｐｄａｔｅが“０”になる。そして、サイクル毎にＰＣレジスタ８０１の値に命令バイト数を加算してプログラムカウンタ値を順次更新し処理を行い、繰り返し実行命令数レジスタ８０４の値が繰り返し指定命令数レジスタ８０３の値に達する度に、スタートＰＣレジスタ８０２の値でのＰＣレジスタ８０１の値の更新、繰り返し回数レジスタ８０５の値の１減算、及び繰り返し実行命令数レジスタ８０４の値の０リセットを行う。
【００４５】
前述した動作を繰り返し、比較回路８０７の出力信号ｃｍｐ１が“１”になったときに、リピート命令による繰り返し回数に達し比較回路８０８の出力信号ｃｍｐ２が“０であると、ＡＮＤ回路８０９の出力信号ｐｃｓｅｌは“０”のままである。したがって、ＰＣレジスタ８０１の値がスタートＰＣレジスタ８０２の値で更新されることはなく、次の命令列の処理に移行する。なお、ＰＣレジスタ８０１の値は、通常はサイクル毎に命令バイト数を加算するように更新され、ＰＣレジスタ８０１の値に応じた命令の処理が実行される。
【００４６】
図９に、第１の実施形態におけるプロセッサにおいて、図６に示したリピート命令の処理、すなわちリピート命令に続く繰り返し対象命令である命令０〜命令７の８個の演算命令を６４回繰り返し行う場合のタイムチャートを示す。クロックにおける０サイクル目でリピート命令ｒｅｐがデコードされて、１サイクル目〜８サイクル目において命令０〜命令７が順に実行され１回目のループ処理ｌｏｏｐ＜１＞が実行される。また、１サイクル目〜８サイクル目における１回目のループ処理ｌｏｏｐ＜１＞が実行されることで、オペランド更新バッファ２４１のエントリ０〜エントリ７には、命令０〜命令７の初期のオペランドに対して（ステップ数×１）を加算した値（更新オペランド）が格納される。
【００４７】
１サイクル目〜８サイクル目において１回目のループ処理ｌｏｏｐ＜１＞が実行された後、繰り返し回数レジスタ（ｃｏｕｎｔ）の値が１減算されて６３になり、ＰＣレジスタ（ＰＣ）の値がスタートＰＣレジスタ（ｓｔａｒｔ  ＰＣ）の値で更新される。そして、９サイクル目〜１６サイクル目において命令０〜命令７が順に実行されて２回目のループ処理ｌｏｏｐ＜２＞が実行される。このとき、オペランド更新バッファ２４１のエントリ０〜エントリ７に格納されている値（更新オペランド）が命令０〜命令７のオペランドとして用いられて処理が実行される。また、９サイクル目〜１６サイクル目における２回目のループ処理ｌｏｏｐ＜２＞が実行されることで、オペランド更新バッファ２４１のエントリ０〜エントリ７には、命令０〜命令７の初期のオペランドに対して（ステップ数×２）を加算した値が格納される。
【００４８】
以降、同様に処理を行い、６３回目のループ処理が実行された後、繰り返し回数レジスタ（ｃｏｕｎｔ）の値が１減算されて１になり、ＰＣレジスタ（ＰＣ）の値がスタートＰＣレジスタ（ｓｔａｒｔ  ＰＣ）の値で更新される。そして、５０５サイクル目〜５１２サイクル目において命令０〜命令７が順に実行されて６４回目のループ処理ｌｏｏｐ＜６４＞が実行される。このとき、オペランド更新バッファ２４１のエントリ０〜エントリ７に格納されている値、すなわち命令０〜命令７の初期のオペランドに対して（ステップ数×６３）を加算した値が命令０〜命令７のオペランドとして用いられて処理が実行される。そして、５０５サイクル目〜５１２サイクル目における６４回目のループ処理ｌｏｏｐ＜６４＞が終了すると、次の命令列の処理に移行する。
【００４９】
（第２の実施形態）
次に、本発明の第２の実施形態について説明する。以下に説明する第２の実施形態は、リピート命令によるループ処理の内に他のリピート命令によるループ処理が入る、リピート命令による多重のループ処理を可能とするものである。以下では、第２の実施形態において、前述した第１の実施形態と異なる点についてのみ説明する。
【００５０】
図１０は、第２の実施形態におけるプログラムカウンタ制御部２１０の構成例を示す図である。図１０において、図８に示した構成要素と同一の機能を有する構成要素には同一の符号を付し、重複する説明は省略する。プログラムカウンタ制御部２１０は、ＰＣレジスタ８０１、スタートＰＣレジスタ８０２、繰り返し指定命令数レジスタ８０３、繰り返し実行命令数レジスタ８０４、繰り返し回数レジスタ８０５、セレクタ８０６、８１０、比較回路８０７、８０８、ＡＮＤ回路８０９、ＯＲ回路８１１、及び選択処理部１００１を有する。
【００５１】
また、第２の実施形態におけるプログラムカウンタ制御部２１０は、スタートＰＣレジスタ８０２、繰り返し指定命令数レジスタ８０３、繰り返し実行命令数レジスタ８０４、及び繰り返し回数レジスタ８０５を１組とした制御レジスタセットを複数有しており、図１０に示す例では８個の制御レジスタセットＲＥＧ０〜ＲＥＧ７を有している。なお、図１０に示す例は一例であり、許容するリピート命令によるループ処理の多重数に応じた数の制御レジスタセットを有していればよい。
【００５２】
また、ＰＣレジスタ８０１、セレクタ８０６、８１０、比較回路８０７、８０８、ＡＮＤ回路８０９、及びＯＲ回路８１１は、制御レジスタセットＲＥＧ０〜ＲＥＧ７のそれぞれに対応して設ける必要はなく、選択処理部１００１の出力信号ｒｅｇｓｅｌにより選択されている制御レジスタセットＲＥＧ０〜ＲＥＧ７について第１の実施形態と同様に制御を行えばよい。また、８個の制御レジスタセットＲＥＧ０〜ＲＥＧ７を設けた場合、リピート制御部２４０のオペランド更新バッファ２４１のエントリ数も８倍に拡張し、それに合わせて信号ＳＡＤのビット幅も拡張する。
【００５３】
ここで、本実施形態では、制御レジスタセットＲＥＧ０〜ＲＥＧ７は、制御レジスタセットＲＥＧ０、ＲＥＧ１、ＲＥＧ２、…の順に使用されるものとする。例えば、第１のリピート命令では制御レジスタセットＲＥＧ０を使用し、第１のリピート命令内の第２のリピート命令では制御レジスタセットＲＥＧ１を使用し、さらに第２のリピート命令内の第３のリピート命令では制御レジスタセットＲＥＧ２を使用する。
【００５４】
選択処理部１００１は、制御レジスタセットＲＥＧ０〜ＲＥＧ７が有する繰り返し回数レジスタ８０５の値を評価し、図１１に示す制御レジスタセットの選択論理に従って、制御レジスタセットＲＥＧ０〜ＲＥＧ７の内から制御対象の制御レジスタセットを選択する。また、選択処理部１００１は、選択した制御対象の制御レジスタセットの番号を繰り返し実行命令数レジスタ８０４の値と合わせて信号ＳＡＤとしてリピート制御部２４０に出力する。
【００５５】
選択処理部１００１は、例えば命令デコード部２３０からの信号ＳＧＲＰＴが“１”である、すなわちデコードされた命令がリピート命令である場合、繰り返し回数レジスタ８０５の値が０である（未使用である）制御レジスタセットＲＥＧ０〜ＲＥＧ７の内から制御レジスタセットＲＥＧ０、ＲＥＧ１、ＲＥＧ２、…、ＲＥＧ７の順で１つの制御レジスタセットを出力信号ｒｅｇｓｅｌにより選択する。また、選択処理部１００１は、命令デコード部２３０からの信号ＳＧＲＰＴが“０”である場合、繰り返し回数レジスタ８０５の値が０より大きい制御レジスタセットＲＥＧ０〜ＲＥＧ７の内から制御レジスタセットＲＥＧ７、ＲＥＧ６、ＲＥＧ５、…、ＲＥＧ０の順で１つの制御レジスタセットを出力信号ｒｅｇｓｅｌにより選択する。したがって、命令デコード部２３０からの信号ＳＧＲＰＴが“０”である場合、例えば制御レジスタセットＲＥＧ３が選択されている状態で繰り返し回数レジスタ８０５の値が０になると、次に制御レジスタセットＲＥＧ２が選択されて制御が行われる。
【００５６】
このように制御することで、第２の実施形態におけるプロセッサは、複数の制御レジスタセットを設け、それらを切り替えて制御することで、リピート命令による多重のループ処理を実行することが可能となる。また、それぞれのリピート命令による動作は第１の実施形態と同様であるので、繰り返し演算処理を実行させる場合、演算に寄与しないデータ参照先の更新や分岐に係る処理を行う命令サイクルを削減でき、繰り返し演算処理全体での演算の実行効率を向上させることができる。
【００５７】
図１３に、第２の実施形態におけるプロセッサにおいて、図１２に示すリピート命令の処理を行う場合のタイムチャートを示す。図１２に示す処理は、リピート命令＜ｒｅｐ  ７，３＞によって命令０〜命令３、リピート命令＜ｒｅｐ  ２，４＞、及び命令６〜命令７を繰り返し対象命令として３回繰り返し実行する際に、命令３と命令６との間にリピート命令＜ｒｅｐ  ２，４＞によって命令４及び命令５を繰り返し対象命令として４回繰り返し実行する。すなわち、命令０〜命令３を実行し、命令４及び命令５を４回繰り返し実行し、命令６及び命令７を実行する一連の処理を３回繰り返し実行する。
【００５８】
クロックにおける０サイクル目でリピート命令＜ｒｅｐ  ７，３＞がデコードされて、制御レジスタセットＲＥＧ０を使用し、１サイクル目からリピート命令＜ｒｅｐ  ７，３＞に係る１回目の第１のループ処理ｌｏｏｐ１＜１＞が実行される。また、１サイクル目からの１回目の第１のループ処理ｌｏｏｐ１＜１＞が実行されることで、オペランド更新バッファ２４１のエントリ０〜エントリ６には、命令０〜命令３、命令６〜命令７の初期のオペランドに対して（ステップ数×１）を加算した値（更新オペランド）が格納される。
【００５９】
この１回目の第１のループ処理ｌｏｏｐ１＜１＞において、命令３を実行した後の５サイクル目でリピート命令＜ｒｅｐ  ２，４＞がデコードされて、制御対象の制御レジスタセットをＲＥＧ０からＲＥＧ１に切り替え、６サイクル目からリピート命令＜ｒｅｐ  ２，４＞に係る１回目の第２のループ処理ｌｏｏｐ２＜１＞が実行される。また、６サイクル目からの１回目の第２のループ処理ｌｏｏｐ２＜１＞が実行されることで、オペランド更新バッファ２４１のエントリ１２８、１２９には、命令４、５の初期のオペランドに対して（ステップ数×１）を加算した値（更新オペランド）が格納される。
【００６０】
続いて、８サイクル目からリピート命令＜ｒｅｐ  ２，４＞に係る２回目の第２のループ処理ｌｏｏｐ２＜２＞が実行され、オペランド更新バッファ２４１のエントリ１２８、１２９には、命令４、５の初期のオペランドに対して（ステップ数×２）を加算した値が格納される。同様にして、１０サイクル目からリピート命令＜ｒｅｐ  ２，４＞に係る３回目の第２のループ処理ｌｏｏｐ２＜３＞が実行され、１２サイクル目からリピート命令＜ｒｅｐ  ２，４＞に係る４回目の第２のループ処理ｌｏｏｐ２＜４＞が実行される。
【００６１】
１２サイクル目からのリピート命令＜ｒｅｐ  ２，４＞に係る４回目の第２のループ処理ｌｏｏｐ２＜４＞が終了した１４サイクル目で制御対象の制御レジスタセットをＲＥＧ１からＲＥＧ０に切り替え、１回目の第１のループ処理ｌｏｏｐ１＜１＞に係る命令６及び命令７を実行する。
【００６２】
１回目の第１のループ処理ｌｏｏｐ１＜１＞が実行された後、第１のループ処理に係る制御レジスタセットＲＥＧ０の繰り返し回数レジスタ（ｃｏｕｎｔ）の値が１減算されて２になる。その後、１６サイクル目において同様の処理を行い、２回目の第１のループ処理ｌｏｏｐ１＜２＞及びそれぞれの第１のループ処理における４回の第２のループ処理が実行される。このとき、オペランド更新バッファ２４１のエントリ０〜エントリ７、エントリ１２８、１２９には、次に繰り返し対象命令が実行される場合の更新オペランドが格納される。そして、４５番目のサイクルにてリピート命令による命令７の処理が終了すると、次の命令列の処理に移行する。
【００６３】
なお、前記実施形態は、何れも本発明を実施するにあたっての具体化のほんの一例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【００６４】
２１０  プログラムカウンタ制御部
２１１  プログラムカウンタレジスタ
２２０  命令領域
２３０  命令デコード部
２４０  リピート制御部
２４１  オペランド更新バッファ
２４２  加算器
２４３  セレクタ
【図１】
2017228213.tif 000003
【図２】
2017228213.tif 000004
【図３】
2017228213.tif 000005
【図４】
2017228213.tif 000006
【図５】
2017228213.tif 000007
【図６】
2017228213.tif 000008
【図７】
2017228213.tif 000009
【図８】
2017228213.tif 000010
【図９】
2017228213.tif 000011
【図１０】
2017228213.tif 000012
【図１１】
2017228213.tif 000013
【図１２】
2017228213.tif 000014
【図１３】
2017228213.tif 000015
【図１４】
2017228213.tif 000016
【図１５】
2017228213.tif 000017