(57)【要約】【課題】演算データが該演算データを使用する演算ユニットにおいて無効なデータ（無効データ）であることに応じて該演算ユニット内でのデータ遷移を抑制でき、消費電力を低減できる演算装置を提供する。【解決手段】無効データ検知回路５００において演算ユニット３００の演算結果である演算データが無効データであることを検知すると、演算データに代えて固定値をフラグ付きレジスタファイル１００へ入力するとともに、無効データであることを示すフラグも入力する。データ保持回路２００へは、演算ユニット３００で使用する演算データとそのフラグを入力する。データ保持回路２００は、演算ユニット３００で使用する演算データが無効データであった場合、演算データに代えて、データ保持回路２００が既に保持しているデータを保持する。【選択図】図１
2006072864.tif 000002
【特許請求の範囲】
【請求項１】
演算結果を用いて演算を所定回数実行する演算装置であって、
演算結果である演算データが無効データであることを検知する検知器と、
前記検知器により無効データであることが検知されないと演算データを保持し、無効データであることが検知されると既に保持しているデータもしくは任意の固定値を保持する記憶素子と、
前記記憶素子の出力を入力として演算を実行する演算器と、
を備えることを特徴とする演算装置。
【請求項２】
演算結果を用いて演算を所定回数実行する演算装置であって、
少なくとも２つ以上のレジスタを有するとともに、前記レジスタに格納された演算データが無効データであるか有効データであるかを示すフラグを保持するフラグ記憶素子を有するレジスタファイルと、
前記レジスタファイルから出力される演算データのフラグが有効データであることを示すとその演算データを保持し、無効データであることを示すと既に保持しているデータもしくは任意の固定値を保持するデータ保持回路と、
前記データ保持回路の出力を入力として演算を実行する演算ユニットと、
前記演算ユニットの出力が無効データであることを検知するか、もしくは前記演算ユニットの出力が有効データであっても演算で使用した演算データのフラグが無効データであることを示すと、前記演算ユニットの出力が無効データであることを検知する無効データ検知回路と、
前記無効データ検知回路において無効データであることが検知されないと前記演算ユニットの出力を選択し、無効データであることが検知されると任意の固定値を選択して出力するセレクタと、
を備え、前記セレクタの出力を演算データとして前記レジスタに入力するとともに、前記無効データ検知回路の出力をフラグとして前記フラグ記憶素子に入力することを特徴とする演算装置。
【請求項３】
演算結果を用いて演算を所定回数実行する演算装置であって、
少なくとも２つ以上のレジスタを有し前記レジスタには演算データが格納されるレジスタファイルと、
前記レジスタファイルの出力が無効データであることを検知する無効データ検知回路と、
前記無効データ検知回路において無効データであることが検知されないと前記レジスタファイルの出力を保持し、無効データであることが検知されると既に保持しているデータもしくは任意の固定値を保持するデータ保持回路と、
前記データ保持回路の出力を入力として演算を実行する演算ユニットと、
前記無効データ検知回路において無効データであることが検知されないと前記演算ユニットの出力を選択し、無効データであることが検知されると任意の固定値を選択して出力するセレクタと、
を備え、前記セレクタの出力を演算データとして前記レジスタファイルに入力することを特徴とする演算装置。
【請求項４】
請求項１ないし３のいずれかに記載の演算装置であって、
複数サイクルで実行されるマルチサイクル演算において前記演算装置の状態遷移を制御するステート制御部を備え、
前記ステート制御部は、前記演算装置に対し、前記無効データ検知回路において無効データであることが検知されないとマルチサイクル演算を完了させ、無効データであることが検知されると無効データであることが検知されない場合より少ないサイクルで演算を完了させる制御を行う
ことを特徴とする演算装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＬＳＩの消費電力を低減する演算装置に関する。
【背景技術】
【０００２】
近年、携帯機器の需要が増えるとともに、機器に内蔵されるＬＳＩの消費電力の低減が求められている。従来より、ＬＳＩの消費電力を低減するために、演算命令の種類（加算命令や乗算命令など）に応じて演算に必要のない演算ユニットに対する電力供給やクロック供給を停止したり（例えば、特許文献１参照。）、演算に必要のない演算ユニット内でのデータ遷移を抑制する手法が一般的に知られている。以下、演算命令の種類に応じて演算に必要のない演算ユニット内でのデータ遷移を抑制してＬＳＩの消費電力を低減する手法を実現するための一般的な例について、図１０、図１１を用いて説明する。
【０００３】
図１０は従来の演算装置の構成の概略を示す図であり、演算命令の種類に応じて演算に必要のない演算ユニット内でのデータ遷移を抑制するための構成を表している。図１０において、レジスタファイル１００１は、演算ユニットの演算結果である演算データを保持するレジスタ群を備える。
【０００４】
データ保持回路１００２は、演算命令の種類に応じてレジスタファイル１００１から読み出した演算データを保持する。演算ユニット１００３、１００４は、データ保持回路１００２が保持するデータを用いてそれぞれ所定の演算を行う。セレクタ１００５は、演算命令の種類に応じて演算ユニット１００３、１００４のいずれか一方の出力（演算結果）を選択してレジスタファイル１００１へ出力する。
【０００５】
制御ユニット１００６は、演算命令の種類に応じてデータ保持回路１００２のデータ保持動作を制御するための制御信号１００７、１００８を出力する。具体的には、制御信号１００７、１００８は演算命令の種類に応じて値“１”の信号か値“０”の信号となる。したがって、データ保持回路１００２は、制御ユニット１００６からの制御信号により演算命令の種類に応じてレジスタファイル１００１から読み出した演算データを保持することになる。
【０００６】
データ保持回路１００２の詳細構成を図１１に示す。
図１１において、セレクタ１１０１〜１１０４は、制御ユニット１００６からの制御信号１００７、１００８により演算命令の種類に応じてレジスタファイル１００１の出力（演算データ）もしくはフリップフロップ１１０５〜１１０８の出力（前値）を選択する。
【０００７】
フリップフロップ１１０５〜１１０８は、セレクタ１１０１〜１１０４の出力を保持する。つまり、演算命令の種類に応じてレジスタファイル１００１の出力もしくはフリップフロップ１１０５〜１１０８の出力を保持する。また、フリップフロップ１１０５、１１０６は演算ユニット１００３へデータを出力し、フリップフロップ１１０７、１１０８は演算ユニット１００４へデータを出力する。
【０００８】
ここでは、セレクタ１１０１〜１１０４は、制御信号１００７、１００８が値“０”の信号のときにレジスタファイル１００１の出力を選択し、値“１”の信号のときにフリップフロップ１１０５〜１１０８の出力を選択するものとする。
【０００９】
以上のように構成された演算装置について、以下その動作を説明する。なお、説明の便宜上、演算ユニット１００３は加算命令を実行し、演算ユニット１００４は乗算命令を実行するものとする。また、制御ユニット１００６は演算命令が加算命令の場合に制御信号１００７を値“０”の信号にし、制御信号１００８を値“１”の信号にし、乗算命令の場合に制御信号１００７を値“１”の信号にし、制御信号１００８を値“０”の信号にするものとする。
【００１０】
図１０、１１に示した演算装置を含むプロセッサにおいて、まず、加算命令を実行する場合について説明する。加算命令実行時、制御信号１００７は値“０”の信号、制御信号１００８は値“１”の信号となるので、データ保持回路１００２内のフリップフロップ１１０５、１１０６はレジスタファイル１００１から読み出した演算データを保持し、フリップフロップ１１０７、１１０８は前値を保持する。
【００１１】
演算ユニット１００３は、フリップフロップ１１０５、１１０６に保持された演算データを入力として加算を実行し、加算結果をセレクタ１００５へ出力する。セレクタ１００５は演算ユニット１００３の出力を選択し、演算結果をレジスタファイル１００１に書き込み、加算命令を完了する。一方、フリップフロップ１１０７、１１０８ではデータが遷移しないので、演算ユニット１００４内においてもデータ遷移が起こらない。
【００１２】
次に乗算命令を実行する場合について説明する。乗算命令実行時、制御信号１００７は値“１”の信号、制御信号１００８は値“０”の信号となるので、データ保持回路１００２内のフリップフロップ１１０７、１１０８はレジスタファイル１００１から読み出した演算データを保持し、フリップフロップ１１０５、１１０６は前値を保持する。
【００１３】
演算ユニット１００４は、フリップフロップ１１０７、１１０８に保持された演算データを入力として乗算を実行し、乗算結果をセレクタ１００５へ出力する。セレクタ１００５は演算ユニット１００４の出力を選択し、演算結果をレジスタファイル１００１に書き込み、乗算命令を完了する。一方、フリップフロップ１１０５、１１０６ではデータが遷移しないので、演算ユニット１００３内においてもデータ遷移が起こらない。
【００１４】
以上のようにして、従来の演算装置は、演算命令の種類に応じて演算に必要のない演算ユニット内でのデータ遷移を抑制して、ＬＳＩの消費電力の削減を図っていた。しかしながら、従来の演算装置は、演算命令の種類に応じて演算に必要のない演算ユニット内でのデータ遷移を抑制しているのみであり、レジスタファイルに書き込まれた演算データがその演算データを使用する演算ユニットにおいて無効なデータ（無効データ）であることに応じては演算ユニット内のデータ遷移を抑制できないので、演算として意味のない無効なデータ（例えば、無限大）についても演算が実行され、プログラムによっては、演算結果が無効なデータとなってもその無効なデータに基づく演算を実行することになり、無駄な電力を消費してしまうという問題があった。
【特許文献１】特開２０００−４７８７２号公報
【発明の開示】
【発明が解決しようとする課題】
【００１５】
本発明は、上記問題点に鑑み、レジスタファイルに書き込まれた演算データ（演算結果）が例えば無限大のような演算として意味のない無効なデータ（無効データ）であった場合に、演算ユニット（演算器）の前段のデータ保持回路（記憶素子）に該データ保持回路が既に保持しているデータもしくは任意の固定値を保持させることにより、演算データが該演算データを使用する演算ユニットにおいて無効なデータ（無効データ）であることに応じて該演算ユニット内でのデータ遷移を抑制でき、消費電力を低減できる演算装置を提供することを目的とする。
【課題を解決するための手段】
【００１６】
本発明の請求項１記載の演算装置は、演算結果を用いて演算を所定回数実行する演算装置であって、演算結果である演算データが無効データであることを検知する検知器と、前記検知器により無効データであることが検知されないと演算データを保持し、無効データであることが検知されると既に保持しているデータもしくは任意の固定値を保持する記憶素子と、前記記憶素子の出力を入力として演算を実行する演算器と、を備えることを特徴とする。
【００１７】
また、本発明の請求項２記載の演算装置は、演算結果を用いて演算を所定回数実行する演算装置であって、少なくとも２つ以上のレジスタを有するとともに、前記レジスタに格納された演算データが無効データであるか有効データであるかを示すフラグを保持するフラグ記憶素子を有するレジスタファイルと、前記レジスタファイルから出力される演算データのフラグが有効データであることを示すとその演算データを保持し、無効データであることを示すと既に保持しているデータもしくは任意の固定値を保持するデータ保持回路と、前記データ保持回路の出力を入力として演算を実行する演算ユニットと、前記演算ユニットの出力が無効データであることを検知するか、もしくは前記演算ユニットの出力が有効データであっても演算で使用した演算データのフラグが無効データであることを示すと、前記演算ユニットの出力が無効データであることを検知する無効データ検知回路と、前記無効データ検知回路において無効データであることが検知されないと前記演算ユニットの出力を選択し、無効データであることが検知されると任意の固定値を選択して出力するセレクタと、を備え、前記セレクタの出力を演算データとして前記レジスタに入力するとともに、前記無効データ検知回路の出力をフラグとして前記フラグ記憶素子に入力することを特徴とする。
【００１８】
また、本発明の請求項３記載の演算装置は、演算結果を用いて演算を所定回数実行する演算装置であって、少なくとも２つ以上のレジスタを有し前記レジスタには演算データが格納されるレジスタファイルと、前記レジスタファイルの出力が無効データであることを検知する無効データ検知回路と、前記無効データ検知回路において無効データであることが検知されないと前記レジスタファイルの出力を保持し、無効データであることが検知されると既に保持しているデータもしくは任意の固定値を保持するデータ保持回路と、前記データ保持回路の出力を入力として演算を実行する演算ユニットと、前記無効データ検知回路において無効データであることが検知されないと前記演算ユニットの出力を選択し、無効データであることが検知されると任意の固定値を選択して出力するセレクタと、を備え、前記セレクタの出力を演算データとして前記レジスタファイルに入力することを特徴とする。
【００１９】
また、本発明の請求項４記載の演算装置は、請求項１ないし３のいずれかに記載の演算装置であって、複数サイクルで実行されるマルチサイクル演算において前記演算装置の状態遷移を制御するステート制御部を備え、前記ステート制御部は、前記演算装置に対し、前記無効データ検知回路において無効データであることが検知されないとマルチサイクル演算を完了させ、無効データであることが検知されると無効データであることが検知されない場合より少ないサイクルで演算を完了させる制御を行うことを特徴とする。
【発明の効果】
【００２０】
本発明によれば、演算結果である演算データが該演算データを使用する演算ユニット（演算器）において無効なデータ（無効データ）であることに応じて該演算ユニット（演算器）内のデータ遷移を抑制でき、消費電力を低減できる。一般的に、演算ユニット（演算器）の消費電力は無効データ検知器等に対して非常に大きいので、演算ユニットのデータ遷移を抑制することで演算装置全体の消費電力を抑えることができるという効果が得られる。
【発明を実施するための最良の形態】
【００２１】
以下、本発明の実施の形態について、図１〜図９を用いて説明する。
（実施の形態１）
図１は本実施の形態１における演算装置の概略構成の一例を示す図であり、演算に使用する演算データが無効データであった場合に演算ユニット内でのデータ遷移を抑制するための構成を表している。
【００２２】
なお、無効データとは、演算データが、該演算データを使用する演算ユニット（演算器）において意味のない無効なデータであることを指す。また、同様に、有効データとは、演算データが、該演算データを使用する演算ユニット（演算器）において意味のある有効なデータであることを指す。
【００２３】
図１において、フラグ付きレジスタファイル１００は、演算ユニットの演算結果（演算データ）を保持するための少なくとも２つ以上のレジスタを有するとともに、各レジスタに格納された演算データが有効データであるか無効データであるかを示すフラグを保持し、演算に使用する演算データに対応する少なくとも１つのフラグが無効データであることを示すのに応じて演算ユニット内でデータ遷移が起こらないようにするイネーブル信号を出力する機能を備える。
【００２４】
具体的には、演算に使用する演算データに対応するフラグ値の少なくとも１つが無効データであることを示す値である場合に演算ユニット内でデータ遷移が起こらないようにするために、演算に使用する演算データのフラグ値の論理和結果をイネーブル信号として出力する。
【００２５】
なお、演算開始時のフラグの初期値は、演算ユニット内でデータが遷移する値に設定される。つまり、演算開始時にレジスタに設定されているデータは有効データとして取り扱われる。
【００２６】
データ保持回路２００は、フラグ付きレジスタファイル１００からのイネーブル信号を入力として、演算に使用する全ての演算データのフラグが有効データであることを示すのに応じてフラグ付きレジスタファイル１００から読み出したデータを保持する。一方、フラグの少なくとも１つが無効データであること示す場合には、既に保持しているデータを保持する。
【００２７】
演算ユニット（演算器）３００は、データ保持回路２００の出力を入力として所定の演算を行う。イネーブル保持回路であるフリップフロップ４００は、フラグ付きレジスタファイル１００から出力されるイネーブル信号を保持する。
【００２８】
無効データ検知回路５００は、無効データ検知器５１０と論理和演算ゲート５２０を備える。無効データ検知器（検知器）５１０は演算ユニット３００の演算結果（演算データ）が無効データであることを検知する。論理和演算ゲート５２０は、無効データ検知器５１０の出力とフリップフロップ４００の出力の論理和を取る。この構成により、無効データ検知回路５００は、無効データ検知器５１０により無効データであることを検知するか、もしくは演算ユニット３００の演算結果が有効データであっても演算に使用した演算データの少なくとも１つが無効データであると、演算ユニット３００の演算結果が無効データであることを検知する。
【００２９】
セレクタ６００は、論理和演算ゲート５２０（無効データ検知回路５００）の出力により演算ユニット３００の演算結果と固定値を選択して出力する。つまり、無効データ検知回路５００により無効データであることが検知されないのに応じて演算ユニット３００の演算結果を選択し、無効データであることが検知されるのに応じて固定値を選択して出力する。
【００３０】
セレクタ６００の出力は、演算データとしてフラグ付きレジスタファイル１００へ入力され、論理和演算ゲート５２０（無効データ検知回路５００）の出力はフラグ信号としてフラグ付きレジスタファイル１００へ入力される。
【００３１】
したがって、無効データ検知回路５００（論理和演算ゲート５２０）は、無効データであることが検知されたとき、セレクタ６００に固定値を選択させる信号（選択信号）であって、演算結果が無効データであることを示す信号（フラグ信号）を出力する。
【００３２】
フラグ付きレジスタファイル１００の詳細構成の一例を図２に示す。なお、説明の便宜上、レジスタは４つとする。図２において、レジスタ１０１〜１０４には、演算結果が有効データである場合に演算結果が書き込まれ、無効データである場合に固定値が書き込まれる。
【００３３】
フリップフロップ（フラグ記憶素子）１０５〜１０８は、レジスタ１０１〜１０４に書き込まれたデータＲ０〜Ｒ３が有効データであるか無効データであるかを示すフラグを保持する。ここでは、有効データである場合のフラグ値を“０”、無効データである場合のフラグ値を“１”とする。なお、演算開始時のフラグの初期値は“０”である。
【００３４】
セレクタ１０９、１１０は演算で使用するデータをそれぞれ選択する。また、セレクタ１１１、１１２は演算で使用するデータに対応するフラグを選択する。また、論理和演算ゲート１１３は、セレクタ１１１、１１２の出力を入力として論理和を取り、その結果をイネーブル信号として出力する。
【００３５】
例えば、演算に使用するデータがデータＲ０とデータＲ１の場合、データＲ０とデータＲ１の少なくとも一方が無効データである場合には、フリップフロップ１０５、１０６が保持するフラグの少なくとも一方の値が“１”となり、イネーブル信号は値“１”の信号となる。同様に、データＲ０とデータＲ１が共に有効データである場合には、イネーブル信号は値“０”の信号となる。
【００３６】
データ保持回路２００の詳細構成の一例を図３に示す。図３において、セレクタ２０１、２０２は、フラグ付きレジスタファイル１００からのイネーブル信号を入力とし、演算に使用する全ての演算データのフラグ値が有効データであることを示す値であるのに応じてフラグ付きレジスタファイル１００の出力（演算データ）を選択する。一方、フラグ値の少なくとも１つが無効データであることを示す値である場合には既にフリップフロップ２０３、２０４が保持しているデータ（前値）を選択する。フリップフロップ２０３、２０４は、セレクタ２０１、２０２の出力を保持する記憶素子である。
【００３７】
例えば、演算に使用するデータがデータＲ０とデータＲ１の場合、データＲ０とデータＲ１の少なくとも一方が無効データである場合にはイネーブル信号は値“１”の信号となり、フリップフロップ２０３、２０４は前値を保持し、データＲ０とデータＲ１が共に有効データである場合にはイネーブル信号は値“０”の信号となり、フリップフロップ２０３、２０４はフラグ付きレジスタファイル１００の出力を保持する。
【００３８】
無効データ検知器５１０の詳細構成の一例を図６に示す。図６において、比較器５１１は、固定値と演算ユニット３００の演算結果との比較を行って無効データを検知する。具体的には、演算結果が固定値より大きい場合は演算結果を無効データと判断し検知結果として値が“１”となる信号を出力する。一方、演算結果が固定値より小さいか又は等しい場合は演算結果を有効データと判断し検知結果として値が“０”となる信号を出力する。
【００３９】
論理和演算ゲート５２０は、フリップフロップ４００の出力（イネーブル信号）と無効データ検知器５１０の出力（検知結果）の論理和を取り、演算に使用する演算データの少なくとも１つが無効データである場合や演算ユニット３００の演算結果が無効データである場合に、セレクタ６００に固定値を選択させる信号（選択信号）であって、演算結果が無効データであることを示す信号（フラグ信号）である値が“１”の信号を出力する。一方、演算に使用した全てのデータが有効データであり且つ演算ユニット３００の演算結果が有効データである場合に、セレクタ６００に演算結果を選択させる信号（選択信号）であって、演算結果が有効データであることを示す信号（フラグ信号）である値が“０”の信号を出力する。
【００４０】
以下、当該演算装置を含むプロセッサにおいて演算結果を用いて加算を所定回数実行する場合の動作について説明する。
なお、フリップフロップ１０５〜１０８が保持するフラグの初期値をすべて“０”とし、演算ユニット３００では加算を実行し、加算で使用するレジスタはレジスタ１０１、１０２とし、その初期値をそれぞれ“１０”、“１１”とする。また、演算ユニット３００による加算結果と固定値はレジスタ１０１へ書き込まれるものとする。また、演算ユニット３００で使用されるデータの最大値を“２０”とし、無効データ検知器５１０における固定値およびセレクタ６００へ入力される固定値を“２０”とする。
【００４１】
まず、フラグ付きレジスタファイル１００において、レジスタ１０１、１０２に書き込まれたデータＲ０、Ｒ１を演算に使用するので、セレクタ１０９とセレクタ１１０はレジスタ１０１が保持するデータＲ０“１０”とレジスタ１０２が保持するデータＲ１“１１”を選択して出力する。また、セレクタ１１１とセレクタ１１２はフリップフロップ１０５が保持するフラグ値“０”とフリップフロップ１０６が保持するフラグ値“０”を選択して出力する。
【００４２】
これにより論理和演算ゲート１１３は値が“０”となるイネーブル信号を出力する。したがって、データ保持回路２００には、演算に使用するデータＲ０“１０”、データＲ１“１１”と値“０”のイネーブル信号が入力される。
【００４３】
データ保持回路２００において、値“０”のイネーブル信号が入力されるので、セレクタ２０１、２０２はそれぞれデータ保持回路２００に入力されたデータＲ０、Ｒ１を選択し、フリップフロップ２０３、２０４はデータＲ０、Ｒ１を格納する。また、フリップフロップ４００は、フラグ付きレジスタファイル１００から出力される値“０”のイネーブル信号を保持する。
【００４４】
演算ユニット３００は、フリップフロップ２０３、２０４が保持するデータを加算し、その結果“２１”を出力する。無効データ検知器５１０は、演算ユニット３００の加算結果“２１”と固定値“２０”との比較を実行し、加算結果が固定値より大きいので加算結果を無効データと判断し検知結果として値が“１”となる信号を出力する。
【００４５】
論理和演算ゲート５２０は、フリップフロップ４００の出力（値“０”のイネーブル信号）と無効データ検知器５１０の出力（値“１”の信号）の論理和を取り、値が“１”となる信号を出力する。セレクタ６００は、選択信号である論理和演算ゲート５２０の出力が値“１”の信号の場合、固定値“２０”を選択して出力する。
【００４６】
セレクタ６００の出力（固定値“２０”）は、フラグ付きレジスタファイル１００内のレジスタ１０１に書き込まれ、論理和演算ゲート５２０の出力（値“１”の信号）はレジスタ１０１に対応するフリップフロップ１０５へ格納され、加算を完了する。この状態から再度加算を実行した場合の動作を以下に示す。
【００４７】
まず、フラグ付きレジスタファイル１００において、セレクタ１０９とセレクタ１１０はレジスタ１０１が保持するデータＲ０“２０”とレジスタ１０２が保持するデータＲ１“１１”を選択して出力する。また、セレクタ１１１とセレクタ１１２はフリップフロップ１０５が保持するフラグ値“１”とフリップフロップ１０６が保持するフラグ値“０”を選択して出力する。
【００４８】
これにより論理和演算ゲート１１３は値が“１”となるイネーブル信号を出力する。したがって、データ保持回路２００には、データＲ０“２０”、データＲ１“１１”と値“１”のイネーブル信号が入力される。
【００４９】
データ保持回路２００において、値“１”のイネーブル信号が入力されるので、セレクタ２０１、２０２はそれぞれフリップフロップ２０３、２０４の出力（前値）を選択する。したがって、フリップフロップ２０３、２０４が保持するデータは遷移せず、フリップフロップ２０３、２０４はデータ“１０”とデータ“１１”を保持する。また、フリップフロップ４００は、フラグ付きレジスタファイル１００から出力される値“１”のイネーブル信号を保持する。
【００５０】
演算ユニット３００は、フリップフロップ２０３、２０４が保持するデータを加算し、その結果“２１”を出力する。このように、フリップフロップ２０３、２０４にてデータが遷移しないので、演算ユニット３００内においてもデータの遷移が起こらない。
【００５１】
無効データ検知器５１０は、演算ユニット３００の加算結果“２１”と固定値“２０”との比較を実行し、加算結果が固定値より大きいので加算結果を無効なデータと判断し検知結果として値が“１”となる信号を出力する。
【００５２】
論理和演算ゲート５２０は、フリップフロップ４００の出力（値“１”のイネーブル信号）と無効データ検知器５１０の出力（値“１”の信号）の論理和を取り、値が“１”となる信号を出力する。セレクタ６００は、選択信号である論理和演算ゲート５２０の出力が値“１”の信号の場合、固定値“２０”を選択して出力する。
【００５３】
セレクタ６００の出力（固定値“２０”）は、フラグ付きレジスタファイル１００内のレジスタ１０１に書き込まれ、論理和演算ゲート５２０の出力（値“１”の信号）はレジスタ１０１に対応するフリップフロップ１０５へ格納され、加算を完了する。
【００５４】
以上のように、演算ユニット３００による演算で使用する最大値を超えるような無効データに対して、２回目以降の加算においては、演算ユニット内でのデータ遷移を抑制することができる。一般的に、演算装置では演算ユニットの消費電力が支配的なので、演算ユニット内のデータ遷移を抑制することで消費電力の削減が図れる。
【００５５】
また、データ保持回路２００の別の構成例を図４、図５に示す。
図４において、フリップフロップ２０３、２０４は、否定論理積ゲート２０５を介して入力されるクロック信号ＣＬＫの立ち上がりエッジでデータを保持する。データ保持回路２００へ入力されるイネーブル信号が値“１”の信号である場合、論理積ゲート２０５は値が“０”の信号を出力するので、フリップフロップ２０３、２０４はデータを取り込まない。また、図５において、データ保持回路２００へ入力されるイネーブル信号が値“０”の信号の場合、セレクタ２０１、２０２はフラグ付きレジスタファイル１００から読み出したデータを選択し、イネーブル信号が値“１”の信号の場合、任意の固定値を選択する。これにより、データ保持回路２００が図４、図５に示す構成の場合でも、演算ユニット内でのデータ遷移を抑制することができる。
【００５６】
（実施の形態２）
図７は本実施の形態２における演算装置の概略構成の一例を示す図であり、実施の形態１と同様に、演算に使用するデータが無効データであった場合に演算ユニット内でデータ遷移を抑制するための構成を表している。なお、実施の形態１で説明した部材に対応する部材には同一の符号を付して、詳細を省略する。
【００５７】
図７において、レジスタファイル１００１は、従来のレジスタファイルと同様に、演算ユニットの演算結果（演算データ）を保持するための少なくとも２つ以上のレジスタを有する。
【００５８】
無効データ検知回路５００は、演算に使用するデータの数（ここでは２つ）だけの無効データ検知器Ａ、Ｂ５１０と論理和演算ゲート５２０を備える。論理和演算ゲート５２０は無効データ検知器Ａ、Ｂ５１０の論理和を取る。この構成により、無効データ検知回路５００は、演算に使用する演算結果が無効データであることを検知できる。
【００５９】
データ保持回路２００は、無効データ検知回路５００（論理和演算ゲート５２０）の出力であるイネーブル信号を入力とし、無効データ検知回路５００により無効データであることが検知されないのに応じて、つまり演算に使用する全ての演算データが有効データであるのに応じてフラグ付きレジスタファイル１００１から読み出したデータを保持する。一方、演算データの少なくとも１つが無効データである場合には、既に保持しているデータ（前値）もしくは任意の固定値を保持する。
【００６０】
フリップフロップ４００は、無効データ検知回路５００（論理和演算ゲート５２０）の出力であるイネーブル信号を保持する。セレクタ６００は、フリップフロップ４００の出力を入力とし、無効データ検知回路５００において無効データであることが検知されないことに応じて演算ユニット３００の演算結果を選択して出力する。一方、無効データであることが検知されたことに応じて固定値を選択して出力する。このセレクタ６００の出力がレジスタファイル１００１に保持される。
【００６１】
以下、当該演算装置を含むプロセッサにおいて演算結果を用いて加算を所定回数実行する場合の動作について説明する。
なお、演算ユニット３００では加算を実行し、加算で使用する２つのレジスタＡ、Ｂの初期値をそれぞれ“１０”、“１１”とする。また、演算ユニット３００による加算結果と固定値はレジスタＡへ書き込まれるものとする。また、演算ユニット３００で使用されるデータの最大値を“２０”とし、無効データ検知器Ａ、Ｂ５１０における固定値およびセレクタ６００へ入力される固定値を“２０”とする。また、データ保持回路２００の構成は図３で示す構成とする。
【００６２】
まず、レジスタファイル１００１内のレジスタＡ、Ｂからデータ“１０”、“１１”が読み出される。２つの無効データ検知器Ａ、Ｂ５１０はレジスタＡ、Ｂから読み出されたデータ“１０”、“１１”と固定値“２０”との比較を実行し、固定値より小さいのでこれらのデータを共に有効データと判断し、検知結果として値が“０”となる信号をそれぞれ出力する。
【００６３】
論理和演算ゲート５２０は、２つの無効データ検知器Ａ、Ｂ５１０の出力（値“０”の信号）の論理和を取り、値“０”のイネーブル信号を出力する。データ保持回路２００において、値“０”のイネーブル信号が入力されるので、セレクタ２０１、２０２はレジスタファイル１００１から読み出されたデータを選択し、フリップフロップ２０３、２０４はデータ“１０”、“１１”を格納する。また、フリップフロップ４００は、論理和演算ゲート５２０から出力される値“０”のイネーブル信号を保持する。
【００６４】
演算ユニット３００は、フリップフロップ２０３、２０４が保持するデータを加算し、その結果“２１”を出力する。セレクタ６００は、選択信号であるフリップフロップ４００の出力が値“０”の信号であるので、演算ユニット３００の演算結果“２１”を選択して出力する。
【００６５】
セレクタ６００の出力（演算結果“２１”）がレジスタファイル１００１内のレジスタＡに書き込まれて、加算を完了する。この状態から再度加算を実行した場合の動作を以下に示す。
【００６６】
まず、レジスタファイル１００１内のレジスタＡ、Ｂからデータ“２１”、“１１”が読み出される。２つの無効データ検知器Ａ、Ｂ５１０はレジスタＡ、Ｂから読み出されたデータ“２１”、“１１”と固定値“２０”との比較を実行する。比較の結果、レジスタＡからのデータ“２１”は固定値“２０”より大きいので無効データと判断し、検知結果として値が“１”となる信号を出力する。一方、レジスタＢからのデータ“１１”は固定値“２０”より小さいので有効データと判断し、検知結果として値が“０”となる信号を出力する。
【００６７】
論理和演算ゲート５２０は、２つの無効データ検知器Ａ、Ｂ５１０の出力（値“１”の信号と値“０”の信号）の論理和を取り、値が“１”となるイネーブル信号を出力する。データ保持回路２００において、値“１”のイネーブル信号が入力されるので、セレクタ２０１、２０２はそれぞれフリップフロップ２０３、２０４の出力（前値）を選択する。したがって、フリップフロップ２０３、２０４が保持するデータは遷移せず、フリップフロップ２０３、２０４はデータ“１０”とデータ“１１”を保持する。また、フリップフロップ４００は、論理和演算ゲート５２０からの値“１”のイネーブル信号を保持する。
【００６８】
演算ユニット３００は、フリップフロップ２０３、２０４が保持するデータを加算し、その結果“２１”を出力する。このように、フリップフロップ２０３、２０４にてデータが遷移しないので、演算ユニット３００内においてもデータの遷移が起こらない。
【００６９】
セレクタ６００は、選択信号であるフリップフロップ４００の出力が値“１”の信号であるので、固定値“２０”を選択して出力する。そして、セレクタ６００の出力（固定値“２０”）がレジスタファイル１００１内のレジスタＡに書き込まれて、加算を完了する。
【００７０】
以上のように、演算ユニット３００による演算で使用する最大値を超えるような無効データに対して、２回目以降の加算においては、演算ユニット内でのデータ遷移を抑制することができる。なお、実施の形態１と同様に、データ保持回路２００の構成は、図４、図５に示す構成であってもよい。
【００７１】
（実施の形態３）
図８は、本実施の形態３における演算装置の概略構成の一例を示す図である。なお、実施の形態１で説明した部材に対応する部材には同一の符号を付して、説明を省略する。
【００７２】
図８において、演算部７００内の各ブロックは実施の形態１で説明したブロックと同じであり、制御信号７１１が値“０”の信号の場合に演算部７００は演算を実行し、値“１”の信号の場合に演算を停止する。
【００７３】
複数サイクルで実行されるマルチサイクル演算において演算部７００の状態遷移を制御するステート制御部７１０は、無効データ検知回路５００において演算結果が無効データであることが検知されないと、つまり無効データ検知器５１０の出力が値“０”の信号の場合、値“０”の制御信号７１１を出力して演算部７００にマルチサイクル演算を完了させる。一方、無効データ検知回路５００において演算結果が無効データであることが検知されると、つまり無効データ検知器５１０の出力が値“１”の信号の場合、値“１”の制御信号７１１を出力して、演算部７００に無効データであることが検知されない場合よりも少ないサイクルで演算を完了させる。
【００７４】
以上のように構成された演算装置において、以下その動作について説明する。なお、マルチサイクル演算は最大３ステートで演算を完了するものとする。図９にマルチサイクル演算時の動作タイミング図を示す。
【００７５】
まず、マルチサイクル演算の全ステートにおいて無効データであることが検知されずにマルチサイクル演算を完了する場合を説明する。ステート１において、フラグ付きレジスタファイル１００からステート１の演算対象データを読み出し、データ保持回路２００にデータを保持する。演算ユニット３００でステート１に応じた演算を行う。無効データ検知器５１０の出力は値“０”の信号とり、制御信号７１１が値“０”の信号となるので演算は停止されない。演算結果はフラグ付きレジスタファイル１００内のレジスタへ格納される。
【００７６】
同様に、ステート２においても、フラグ付きレジスタファイル１００からステート２の演算対象データを読み出し、データ保持回路２００にデータを保持する。演算ユニット３００でステート２に応じた演算を行う。無効データ検知器５１０の出力は値“０”の信号となり、制御信号７１１が値“０”の信号となるので演算は停止されない。演算結果はフラグ付きレジスタファイル１００内のレジスタへ格納される。
【００７７】
次に、ステート３において、フラグ付きレジスタファイル１００からステート３の演算対象データを読み出し、データ保持回路２００にデータを保持する。演算ユニット３００でステート３に応じた演算を行う。無効データ検知器５１０の出力は値“０”の信号となり、制御信号７１１が値“０”の信号となるので演算は停止されず、演算結果はマルチサイクル演算命令で指定されたフラグ付きレジスタファイル１００内のレジスタへ格納され、マルチサイクル演算命令を完了する。
【００７８】
続いて、マルチサイクル演算の途中のステートで演算結果が無効データであることが検知されてマルチサイクル演算を完了する場合を説明する。ここでは、ステート１で無効データが検知されるものとする。
【００７９】
ステート１において、フラグ付きレジスタファイル１００からステート１の演算対象データを読み出し、データ保持回路２００にデータを保持する。演算ユニット３００でステート１に応じた演算を行う。
【００８０】
無効データ検知器５１０の出力は値“１”の信号となり、制御信号７１１が値“１”の信号となるので演算部７００はステート１以降の演算を停止する。無効データ検知回路５００の出力が値“１”の信号となるので、セレクタ６００は固定値を選択して出力し、この固定値がマルチサイクル演算命令で指定されたフラグ付きレジスタファイル１００内のレジスタへ格納され、マルチサイクル演算命令を完了する。
【００８１】
以上のように、本実施の形態３によれば、マルチサイクル演算の途中で無効データであることが検検されると演算を早期に完了し、演算ユニット内におけるデータ遷移を抑えることができる。
【００８２】
なお、実施の形態１〜３では、演算ユニットで使用する最大値を超えるようなデータを無効データとして説明したが、最小値、非数、無限大等のデータについても同様に無効なデータとして扱うことができる。
【産業上の利用可能性】
【００８３】
本発明にかかる演算装置は、演算データ（演算結果）が該演算データを使用する演算ユニット（演算器）において無効なデータ（無効データ）であることに応じて該演算ユニット（演算器）内のデータ遷移を抑制でき、低消費電力ＬＳＩに使用される演算装置として有用である。
【図面の簡単な説明】
【００８４】
【図１】本発明の実施の形態１における演算装置の概略構成の一例を示す図
【図２】本発明の実施の形態１における演算装置のフラグ付きレジスタファイルの詳細構成の一例を示す図
【図３】本発明の実施の形態１における演算装置のデータ保持回路の詳細構成の一例を示す図
【図４】本発明の実施の形態１における演算装置のデータ保持回路の詳細構成の一例を示す図
【図５】本発明の実施の形態１における演算装置のデータ保持回路の詳細構成の一例を示す図
【図６】本発明の実施の形態１における演算装置の無効データ検知器の詳細構成の一例を示す図
【図７】本発明の実施の形態２における演算装置の概略構成の一例を示す図
【図８】本発明の実施の形態３における演算装置の概略構成の一例を示す図
【図９】本発明の実施の形態３における演算装置のマルチサイクル演算時の動作タイミングを示す図
【図１０】従来の演算装置の構成の概略を示す図
【図１１】従来の演算装置のデータ保持回路の詳細構成を示す図
【符号の説明】
【００８５】
１００      フラグ付きレジスタファイル
１０１〜１０４      レジスタ
１０５〜１０８      フリップフロップ（フラグ記憶素子）
１０９〜１１２      セレクタ
１１３      論理和演算ゲート
２００      データ保持回路
２０１、２０２      セレクタ
２０３、２０４      フリップフロップ（記憶素子）
２０５      否定論理積ゲート
３００      演算ユニット
４００      フリップフロップ（イネーブル保持回路）
５００      無効データ検知回路
５１０      無効データ検知器
５１１      比較器
５２０      論理和演算ゲート
６００      セレクタ
７００      演算部
７１０      ステート制御部
７１１      制御信号
１００１      レジスタファイル
１００２      データ保持回路
１００３、１００４      演算ユニット
１００５      セレクタ
１００６      制御ユニット
１００７、１００８      制御信号
１１０１〜１１０４      セレクタ
１１０５〜１１０８      フリップフロップ
【図１】
2006072864.tif 000003
【図２】
2006072864.tif 000004
【図３】
2006072864.tif 000005
【図４】
2006072864.tif 000006
【図５】
2006072864.tif 000007
【図６】
2006072864.tif 000008
【図７】
2006072864.tif 000009
【図８】
2006072864.tif 000010
【図９】
2006072864.tif 000011
【図１０】
2006072864.tif 000012
【図１１】
2006072864.tif 000013